Ubuntu-linux学习笔记
一、ubuntu的安装
- 所需资源:(1)Ubuntu的iso文件,可从ubuntu官网下载;(2)u盘刻录软件unetbootin。
安装步骤:
- 进入bois界面,设置usb优先启动,进入ubuntu的安装界面;
一些简单的前期设置这里直接忽略,主要说明一下磁盘分区。
1)至少需要两个磁盘分区,分别用于创建”/“文件系统与交换分区。其中,linux系统使用交换分区提供虚拟内存,在一个32位的pc中,不超过2GB。2)若磁盘存储空间较大,可划分多个磁盘分区,在每一个磁盘分区中创建一个单独的文件系统,如/usr,/var,/home等文件系统,但不能把/bin,/dev/,/etc/,/lib,/root和/sbin目录作为单独的文件系统分区,这些目录应位于”/“文件系统分区中。3)若要创建多个磁盘分区,查阅分区要求与建议。
二、命令行基础知识
- 对于ubunut桌面版(若为服务器版,略过),进入终端的方式:
ctrl+alt+T
,默认屏幕大小打开终端;alt+F2
,进入执行命令文本框,输入gnome-terminal --full-screen
,即进入全屏显示,输入exit
,即可退到1中打开的状态;- 非Gnome图形界面,进入字符终端,输入
crtl+alt+f1-6
,打开tty1-6
的终端界面。输入ctrl+alt+f7
,返回GNOME界面; - 也可以通过设置/etc/default下的grub文件,设置开启启动到图形界面还是字符界面。
- Linux系统默认的命令解释程序是bash,GNU Bourne-Again Shell, 是GNU组织开发和推广的一个项目。
一个命令由以下3部分内容组成,中间以空格或制表符等空白字符隔开,形如:<命令名> <命令选项> <命令参数>
- 其中的命令选项以”-“开头,以”–”为起始标志的命令选项,称为GUN选项。除个别命令选项外,大部分”–”开头的是”-“的同义词,可替换使用。
- 普通用户与超级用户的切换
- 超级用户的默认命令提示符为”#”,普通用户的默认命令提示符为”$”;
- 在终端,键入sudo su,输入密码,进入超级用户模式;键入exit,回到普通用户模式。
- 前后台进程切换
- 前台形式,在shell执行命令期间,用户只能等待,不能做其他操作;
- 后台形式,在命令执行同时,shell会立即输出命令提示符,等待用户输入新的命令。只要在命令的后面加上”&”即可。
输入输出
- 从终端输入,这个数据输入源是标准输入stdin(0);
- 运行结果返回到终端屏幕上,这个输入目的是标准输出stdout(1);
运行期间的错误也显示在屏幕上stderr(2)。
注意:其中(n),n指文件描述符。Linux系统启动一个进程(该进程可能用于执行Shell命令)时,将自动为该进程打开三个文件:标准输入、标准输出和标准错误输出,分别由文件标识符0、1、2标识。
输入输出重定向
<fname
,使用指定的文件作为标准输入(其文件描述符为0),以便从指定的文件中接收输入数据;wc -l < io.txt
,表示将io.txt中的记录行数显示到屏幕终端。>fname
,使用指定的文件作为标准输出(其文件描述符为1),若文件不存在则新建,存在且noclobber标志已经设置,将产生错误,否则覆盖原文件中所有内容。若需要追加在原文件内容后面,需要用>>fname
。例如:
ls -l > io.txt
,表示将当前目录下的所有文件信息写入io.txt文件中,若io.txt没有,则自动创建,存在则直接覆盖其中的内容。>|fname
,除了忽略noclobber标致之外,其功能与>fname
相同。注意:>|符号是强制覆盖文件的符号,它与Shell的noclobber选项有关系,如果noclobber选项开启,表示不允许覆盖任何文件,而>|符号则可以不管noclobber选项的作用,强制将文件覆盖。
set -C noclobber
开启noclobber,set +C noclobber
关闭noclobber。<>fname
,以读写方式打开指定的文件,并使之作为标准输入。<<[-]fstr
,Here document文档的使用技巧。<&digti
,使用指定的文件描述符复制一个标准输入。>&digti
,使用指定的文件描述符复制一个标准输出。<&-
,关闭标准输入,而”n<&-“则表示关闭输入文件描述符n。>&-
,关闭标准输出,而”n>&-“则表示关闭输出文件描述符n。<&j
,把标准输入重定向到文件描述符j表示的输入文件中。>&j
,把标准输出重定向到文件描述符j表示的输出文件中。&>fname
,把标准输出和标准错误输出均重定向到指定的文件中。以下I/O重定向符号”<”或”>”前面有一个数字,则表示相应的文件描述符对应的文件。
0<fname
,把标准输入重定向到指定的文件中。1>fname
,把标准输出重定向到指定的文件中;1>>fname
,把标准输出重定向并附加到指定的文件中。2>fname
,把标准错误输出重定向到指定的文件中;2>>fname
,把标准错误输出重定向并附加到指定的文件中。例如:$ errfile=script.errors
(errfile就是文件描述符);$ sss 2>$errfile
,sss是错误指令,则输出错误信息,2被重定向到了errfile对应的文件中,故错误信息写在script.errors;$ aaa 2>>$errfile
,继续追加错误信息;
cat script.errors,显示错误信息。
i>&j
,把文件描述符i表示的输出文件重定向到文件描述符j表示的文件中。例如:> `command >command.log 2>&1`,标准输出和标准错误输出都重定向到同一个文件中<br>
$ echo "hello" >> command.log 2>&1
$ sss "hello" >> command.log 2>&1
[j]<>fname
,以读写方式打开指定的文件,并把文件描述符j分配到指定的文件。如果文件不存在,则创建该文件。如果未指定文件描述符j,则表示默认的文件描述符0,即标准输入。
管道
- 基本概念:在linux系统中,管道是一种先进先出的单向数据通路。是一种特殊的管道重定向。
用途:
利用管道符号”|”,可以把一个命令的标准输出连接到另一个命令的标准输入。例如:
ls /usr | wc -w
,统计/usr目录下文件的数量(利用管道把ls和wc两个命令连接在一起)
传统的方法,是利用一个中间临时文件,如ls /usr > file.tmp ; wc -w < file.tmp
。- 为滤通程序提供原始数据。由该程序读取来自标准输入的数据,按照指定的检索原则和模式,从输入数据中提取期望的,包含给定字符串的数据,如grep。
- 可以依次加工处理多个命令、脚本和程序的输出数据。
command1 | command2 | command3 > output-file
。 tee
命令,一个相当于三通管的实用程序。主要功能是通过标准输入接收并显示数据,同时把数据存储到指定的文件中。
元字符与文件名生成
- linux中,很多命令采用文件名作为命令参数,例如:
$ ls -l io.txt
-rw-rw-r-- 1 sucab sucab 12 5月 14 10:42 io.txt
Shell支持的与文件名生成有关的元字符极其说明。注意,元字符可以组合使用。
*
,可以匹配任何数量的字符或字符串,包括空字符串。例如:ls -l *.txt
,列出所有.txt
为文件后缀名的txt文件。su*
,表示任何一个以”su”为起始的字符串。?
,匹配单字符串。[...]
,匹配给定范围的字符。例如[a-z],[0-9]。[!...]或[^...]
,表示不在该范围中。例如:列出当前目录下,以s或i开头的文件。
ls -l [io]*
列出不是a-z中字母开头的文件。ls -l [^a-z]*- 注意:
set -f
,能够禁止文件名的生成。当shell无法解释元字符时,应注意检查是否设置了该标志。
- 转义和引用
- 本身具有特殊意义的元字符,在前面加上转义符号
\
,则失去其特殊意义。而对于一些普通字符,加上转义符号\
,则具有特殊意义。例如:\a
,生成声音提示;\b
退格符;\e
Esc字符;\f
换页符;\n
换行符;\r
回车符;\t
制表符;\v
竖向制表符;\\反
斜线;\’单引号;\nnn
采用1-3位8进制数值表示等价ASCII字符;\xHH
采用1-2位16进制数值表示的等价ASCII字符;\cX
Ctrl+X字符。
其中,\n
换到下一行,\r`回到本行的开头。Unix系统里,每行结尾只有”\n”;Windows系统里面,每行结尾是”\n\r”;Mac系统里,每行结尾是”\r”。
- 本身具有特殊意义的元字符,在前面加上转义符号
- linux中,很多命令采用文件名作为命令参数,例如:
- 历史命令(很强大呀!)
- fc命令的常见用法
fc -l 10 20
,显示命令缓冲区或文件中序号为10-20的命令;fc -l -10
,列出最近输入的10条命令;fc -l cat
,列出最近一次输入的以cat
命令为其实字符串的命令;fc -e gedit/vim 10 20
,要利用vim或gedit编辑并执行序号为10-20的命令- 先执行
ls -l /ect/profile
,要想再执行一遍该指令,可以输入fc -s
; fc -s 100
,执行先前的第100号命令。
- history命令的常见用法
- 其实是fc的一个特列,是
fc -l
命令的别名。在bash中,列出所有命令;在korn shell中,仅列出16条命令。经实验,在ubuntu linux中执行fc -l
,显示16条;执行history
,显示所有; history 10
,列出最近执行的10条命令;history -c
,清除命令历史缓冲区中的命令。
- 其实是fc的一个特列,是
- 重复执行先前命令的方式
- 在bash中,执行
$ !!
; - 常用的部分”!”命令,自行查阅。
- 在bash中,执行
- fc命令的常见用法
- 命令的别名(略)
- 作业控制
- 在bash中,set命令的”-m”或”-o monitor”选项用于启用shell的作业控制功能。
- 除了进程ID之外,shell还会为每个作业分配一个数字较小的作业号。例如,利用”&”符号启动后台作业,并使之异步运行,shell将会输出如下信息。
$ find / -name "*conf" -print > conf.log 2>&1 &
[1] 2136
,[1]
作业号,2136
作业的进程ID。 - shell 采用作业控制表记录和跟踪当前的作业。利用
jobs
内部命令,可以显示作业控制表中保存的当前作业。 - linux中的作业有运行running,停止stopping,退出exited,完成finished等状态。
$ bg %1(作业号)
,把停止运行的作业放到后台运行;$ fg %2
,让一个后台作业回到前台继续运行;kill %1
,停止后台作业wait %2
,等待当前正在运行的作业完成。
- 会话记录与命令确认
- 保存会话记录:在linux中提供了
script
命令,可以记录用户从注册到推出系统的整个或部分会话过程,包括用户的输入和系统的响应信息。例如:$ script,在当前目录自动产生typescript文件
script started,file is typescript
$ ….,用户操作
$ exit
exit
script done, file is typescript
$ cat typescript,显示用户相关操作信息 - 确保使用命令的正确性
which
:区分同名指令,如tar命令,如何知道是用的哪个tar命令,$ which tar
,显示/bin/tar
;whereis
,显示所有与给定命令相关的文件,如$whereis tar
,显示tar:/bin/tar /usr/lib/tar /usr/include/tar.h /usr/share/man/man1/tar.1.gz
。- 通过
apropos
命令,模糊查找给定命令在文档中的说明;whatis
命令,完全匹配给定的关键字命令。
- 保存会话记录:在linux中提供了
三、文件系统
- 路径名称规则
- 如果路径名以”/“开头,则说明该路径名是从根目录开始的绝对路径名,除此之外,其他所有的路径名都是相对于当前目录的相对路径名;
- 路径名要么是单个名字,或者是以”/“分隔的多个名字,最后一个是文件,可以是任何类型;
- 在任何目录位置,在路径名中使用”..”,可以往上攀升系统的目录层次。
树形层次结构
-/
--/bin
,其中包含系统、系统管理员和普通用户可以共享的各种通用程序,如cat、cp、mv、mkdir、rm、ls及ps等常用的基本命令,以及如bash等的各种shell。--/boot
,其中包含系统引导程序、linux内核程序文件vmlinuz、磁盘内存印象文件initrd以及GRUB初始引导程序和配置文件等。--/dev
,在linux系统中,任何设备均对应一个或多个特殊文件(或称为设备文件),这个目录包含了系统支持的所有设备文件。例如:console表示控制台,lp0表示打印机。----/mem
,表示系统的物理内存。----/sda
,sda表示连接到主控制器的第一个磁盘,sda1或sda2等则分别表示其中的第一个和第二个磁盘分区等。----/...
,其他相关,这里略。----/tty
,表示系统的串口设备。--/etc
,该目录是整个linux系统的中心,其中包含所有系统管理和维护方面的配置文件,如host.conf,syslog.conf和vsftpd.conf等。----/apache2
,apache配置文件的根目录,其中包含apache服务器的各种配置文件,如apache2.conf等。----/apt
,其中包含了软件管理工具使用的配置文件,如sources.list等。----/cron.d
,用于存储cron进程调度运行后台进程所用的配置和控制文件。----/init.d
,用于存储系统启动过程中需要有init调度执行的脚本文件。----/mysql
,其中包含MySQL数据库的配置文件,如my.cnf等。----/network
,其中包含网络接口的配置文件interfaces,以及相关的配置工具。----/...
----/ssh
,OpenSHH网络服务所在配置和控制文件的根目录,其中含有sshd_config等重要配置文件。--/home
,用户主目录的根目录。新增一个用户,系统将会在/home目录中创建一个形如/home/$USER的子目录,作为用户的目录,其中的$USER为用户名。也可以作为单独的文件系统。--/lib
,该目录含有系统引导过程,以及运行系统命令所需要的内核模块和各种动态链接共享库文件(扩展名为.so,相当于windows系统中的.dll文件)。其中,内核模块(驱动程序)位于/lib/modules/kernel-version子目录中。--/lost+found
,每个文件系统分区都存在一个lost+found目录,用于存储fsck命令在检测与修复文件系统时删除的文件或目录。--/media
,移动存储介质的安装点,当利用GNOME界面安装移动存储介质时,系统将会自动地把移动介质安装到此目录下的某个子目录中。--/mnt
,文件系统的临时安装点。--/opt
,应用程序等附加软件的安装目录。--/proc
,进程文件系统proc的根目录,其中的部分文件分别对应当前正在运行的进程,可用于访问当前进程的地址空间。----/net
,其中的文件分别表示各种网络协议(如tcp,udp及arp等)的状态与统计信息。--/root
,超级用户root的主目录(在linux系统中,”/“是整个系统的根目录,而非超级用户的主目录)--/sbin
,该目录中的命令主要供超级用户使用,普通用户通常无法使用。其中包含与系统引导、管理维护,以及与硬件配置等方面有关的命令和脚本文件,符fdisk、init和ifconfig等。--/tmp
,临时文件目录,用于存储系统运行过程中生成的临时文件,也可以用户存储自己的临时文件。一般不要自己删除这个目录中的文件。--/usr
,既可以作为一个单独的文件系统,也可以作为根目录下的一个子目录,其中存有系统提供的各种共享数据(如用户命令、库函数、头文件和文档等)----/include
,用于存储各种c语言文件。是c开发人员需要经常引用的文件。----/bin
,其中包含用户经常使用的各种命令(find,make,…,who)----/lib
,包含各种共享的库函数,可供程序员以静态或动态链接自己开发的应用程序。----/sbin
----/share
----/src
,用于存放linux系统内核的源代码和文档等。--/var
,既可作为一个 单独的文件系统,也可作为根目录下的一个子目录,用于存储各种可变长的数据文件(如日志文件)、暂存文件或待处理的临时文件等。----/lib
,用于存储软件包特定的动态链接共享库、配置文件和状态信息等。----/lock
----/log
,用于守护进程日志文件的存储目录----/mail
----/run
----/spool
,用于缓存各种待处理的文件。----/tmp
,用于存储各种临时文件。----/www
,apache服务器的用户文档根目录,用于存储和发布各种HTML文档。
- 文件的类型
- 普通文件
- 目录文件
$ pwd
,查看当前所处的目录;$ mkdir dirname
,创建一个目录;$ rmdir dirname
,删除一个目录。
- 特殊文件:也称设备文件,linux系统利用特殊文件作为用户与I/O设备之间的接口,使用户能够像读写普通文件一样访问外部设备。
- 链接文件
- 符号链接文件
- 管道文件
文件保护机制
- linux系统把用户分为三类:
- 文件属主
- 同组用户
- 其他用户
- 文件的三种基本访问权限
- r(读):如果文件具有读许可,则相应的用户额可以读文件,如显示文件内容、复制文件等,但不能修改文件。如果允许用户进入某个目录,列举目录下的文件,则至少应赋予用户“读”目录的访问权限;
- w(写):如果文件具有写许可,则相应的用户可以读、写文件,包括显示文件内容以及复制、修改、移动和删除文件等。对于目录而言,如果允许用户创建新文件和删除文件,则必须赋予用户“写”目录的访问权限;
- x(执行):如果具有执行许可,则相应的用户可以运行文件(如程序文件)。对于目录而言,如果允许用户访问其中的任何子目录,则必须赋予用户“执行”目录的访问权限。
- 举例
$ ls -l /bin
,查看对bin目录的访问权限drwxr-xr-x 2 root root 4096 5月 9 05:47 /bin
d表示文件类型为目录,rwx r-x r-x表示文件属主的访问权限为rwx、同组用户的访问权限为r-x、其他用户的访问权限为r-x。 修改文件的访问权限
- 前提条件
- 用户必须是文件或目录的属主
- 或超级用户
- chmod用法示例
- 相对权限设置法:
格式
$ chmod permissions dir-or-file
用字符表示用户类型:u(文件属主),g(同组用户),o(其他用户),a(所有用户);
“+”或”-“表示增加或撤销相应的权限;$ chmod o+w script
,表示对其他用户添加写权限$ chmod o-rw script
,表示对其他用户撤销读写权限。 - 绝对权限设置法
格式
$ chmod numcode dir-or-file
,numcode是一个数字代码,用于表示文件的访问权限,由3位数字组成,分别对应于文件属主、同组用户和其他用户。$ chmod 755 file
,表示对属主用户设定权限码为7,同组用户权限码为5,其他用户权限码为5。
“r”对应的二进制码为100(4),”w”对应的二进制码为010(2),”x”对应的二进制为001。其中,rwx构成的某一用户的权限码是8进制的。。
解读755,7=4+2+1(rwx),5=4+0+1(r-x),5=4+0+1(r-x)。
- 相对权限设置法:
其他访问权限设置
默认权限:无论何时创建一个文件,linux系统通常会为用户设置一个默认的访问权限。用umask命令。
格式,
umask [-S] [nnn]
,这个[nnn]与chmod命令中的numcode相反,在对应位上设置1,即为撤销该权限。如000 000 000,设置为000 010 010,即为022,表示u有rwx权限,g有r-x权限,o有r-x权限。
- 前提条件
- linux系统把用户分为三类:
四、文件和目录操作
创建文件
$ touch emptyfile
,当前目录下,要是没有该文件,就自动创建一个,有则不产生作用;
$ > emptyfile
,利用重定向,产生的文件将覆盖已有的同名文件;
$ echo "hello word!" > newfile
,创建一个含有内容为”hello world”的新文件;
$ cat > myfile
,通过终端输入内容,创建并写入myfile文件;
还可以通过vim编辑器,在terminal里面进行操作。
显示文件列表
- 使用
ls
命令:ls [options] [dir or file] 几个常用的参数:
ls -a
,列出当前目录下的所有文件(包括.*隐藏文件);ls -d
如果指定的参数是目录,只显示目录的名字,而不是列出目录下的文件;ls -l
,这个经常使用,以每行一个文件的长格式列出文件的类型、访问权限、链接数、用户属主、用户组、文件大小、最后修改时间和文件名等;ls -r
,以文件名反向排序显示文件列表(–reverse);ls -R
,注意区分与r
的区别(–recursive),递归显示目录及子目录下的所有文件;ls -s
,显示分配给文件的数据块,因此,当文件大小相近时,它们的数据块可能是一样的。示例:
- 列出当前目录下的文件,
ls
- 列出指定目录下的文件,
ls /
- 利用通配符显示文件,如
ls -l *.c
,*
匹配多个字符,列出当前目录下以c结尾的所有文件,为了避免列出子目录中的文件,可以使用ls -ld *
- 列出当前目录下的文件,
- 使用
显示文件内容
cat [options] [file]
,将文件中的内容全部显示到终端,若内容太多,只能看到最后部分;more [options] [file]
,将从头到尾一页一页地仔细阅读文件。如果文件很长,在左下角会出现--More--(n%)
,(n%)
表示已显示的数据内容占整个文件的百分比。less
命令的功能与more
类似且比它强大;head [-number | -n number] [file]
,number表示需要输出的行数。默认,输出前10行(包括空行);tail [+/-number [-lbcf]] [file]
,+
表示从文件的其实位置开始计算,-
表示从文件的结束位置开始计算。number表示要输出的行数。备注:tail
,只能访问静态文件的最后几行,对于内容动态增长的文件如日志文件,需要这样访问,tail -f somelogfile
。也就是说,somelogfile文件内容加一行,终端就显示一行,实时的。
复制文件
cp [-ir] source_file target_file
,其中,-i
表示交互复制方式。例如,要将src文件拷贝到target文件时,如果target文件存在,则给出提示信息,是否要覆盖已有的文件。-r
表示递归操作,就是如果src是目录文件,则将目录中的子目录递归复制,拷贝到目标文件中。移动文件
mv [-fi] source_file target_file
,把文件从一个目录移动到另外一个目录中,或者重新命名一个文件。-f
表示强制移动或改名(force),-i
用于交互,给出目标文件存在时的提示信息。删除文件
rm [-rfi] [file]
,-r
表示递归地删除目录中的文件及目录本身;-i
表示交互操作,询问是否真的要删除;-f
表示强制删除,即使不存在该文件,也不会输出任何信息。改换目录
- 在linux系统,每个用户都有一个属于自己的主目录。在注册之后,系统将会自动地把用户引导至自己的主目录;
- 在bash、korn shell等shell中,
~
表示用户主目录缩写,在bourne shell中,停替代方法是引用$HOME
。
创建、移动和复制目录
mkdir src
mv src
cp -r dir1 dir2
删除目录
- 指令模版,
rmdir [-p] directory
; - 删除一个空的目录,其指令为
rmdir dir1
; - 删除一个非空目录,需要添加
-r
参数选项,意思是recursive递归,即rm -r dir1
,可以把指定目录及其任何子目录中的所有文件全部删除。
- 指令模版,
比较文件之间的差别
- 当面对两个类似的文件,想找出其中的细微差别时,可以使用diff命令比较,
diff file1 file2
- 比较三个文件的不同,可以使用
diff3 file1 file2 file3
。
- 当面对两个类似的文件,想找出其中的细微差别时,可以使用diff命令比较,
从系统中检索文件
find directory [options]
- find命令将按用户指定的检索条件,从指定的目录开始,找出满足匹配准则的所有文件。指定的检索条件可以是文件(包括通配符)、文件大小及文件修改日期等。
- 其中,directory是检索的起始目录,options是一种表达式选项,用于指定各种匹配准则或检索条件。
- find命令的部分常用选项,自查。
检索文件内容
利用grep检索文件内容
- 检索文件中的特定字符串,
grep [-inv] string file
,其中,-i
表示忽略字母大小写,-n
表示在输出结果之前给出文本行所在文件中的行号,-v
表示检索不包含个i定字符串或模式的所有文本行。string
是一个检索模式。检索模式可以是一个准备检索的字符串、一个单词或词语。
- 检索文件中的特定字符串,
- 在grep中使用正则表达式
- 在grep中可使用简单的正则表示,复杂的模式匹配需要使用egrep;
排序
sort [-bdfimnru] -k key -t sepchar -o output [file]
,可对输入的数据或文件内容进行排序。其中,-n
按照字符串数值进行排序,-r
表示按照从大到小或反向顺序排序,-k
表示关键字的字段位置或关键字字段起止字符位置或范围,-b
表示忽略前置的空白字符,-d
表示仅考虑字母数字和空格字符,按照字典顺序排序;- 使用示例:
ls -l /var/log/syslog*
,该指令是显示所有系统日志的,显示的部分结果如下:-rw-r----- 1 syslog adm 552 6月 8 15:17 syslog
-rw-r----- 1 syslog adm 103381 6月 8 13:30 syslog.1
...
现在需要根据文件的大小降序排列,具体指令如下:ls -l /var/log/syslog* | sort -rn -k5
-rw-r----- 1 syslog adm 103381 6月 8 13:30 syslog.1
-rw-r----- 1 syslog adm 552 6月 8 15:17 syslog
...
其中,-r表示降序排序,-n表示按照数值大小,-k按照第5个关键字字段位置(也就是文件的大小),实现最终的排序。
五、编辑文件(vim)
vim来源:vim是对unix系统上vi编辑器的扩充与增强,提供许多附加的功能特性,与vi几乎完全兼容。可运行在windows、Macintosh、Unix和Linux系统上。
启动vim
$ vim myfile
,若myfile存在,则会打开指定的文件,并显示文件第一页的内容。若文件不存在,vim将会打开一个新文件;- 进入vim编辑器界面之后,屏幕左边的波浪符”~”表示空行;
- vim可以同时编辑多个文件,也可以不指定文件名,等到完成文件再写入新文件,然后退出;
- 直接输入
vim
命令而未指定文件的名字,会显示vim的介绍信息。此时,可以直接进入插入模式(输入i),编写文件,然后保存(:w filename),退出(:q)。如果想放弃保存当前的操作,则可以强制退出(:qa!)。具体可同:help查看帮助; - 状态行:编辑窗口的最后一行是vim的状态行,用于显示编辑器的状态、编辑过程中出现的错误信息、光标所在的行列位置、删除或复制的行数等。初始启动时,状态行会显示文件的名字、行数和字节数。
vim编辑器的工作模式
- 命令模式:按下
esc
键,总是进入命令模式; - 输入模式:在要输入文本之前,输入i或a进入输入模式,然后esc,返回命令模式,执行保存退出;
- 输入”:”开始执行命令的时候
- 命令模式:按下
保存编辑文件并退出vim
- 注意随时保存数据,特别是当编辑重要的文件时,vim编辑器提供了许多命令,用于把内存缓冲区中的数据内容保存到磁盘文件中,然后退出vim。如”保存并退出”、”强制退出并不保存”等;
- 相关命令
:w
,保存编辑后的文件内容,但不退出vim编辑器。把内存缓冲区中的数据写到启动vim时指定的文件中:w!
,强制写文件,即强制覆盖原有的文件。如果原文件是只读文件,并且当前用户是该文件的属主,则可以强制写入;:wq
,保存文件内容后退出vim编辑器。写入并退出。另一个替代指令为ZZ
;:wq!
,强制保存文件内容后退出;ZZ
,如果文件已经做过编辑处理,则把内存缓冲区中的数据强制写到启动vim时指定的文件中,然后退出。否则只是退出而已;:q
,在未做任何编辑处理而准备退出vim时,使用;:q!
,强制退出vim编辑器,放弃编辑处理的结果。如果确实不需要保存修改后的文件内容,可输入该命令,强制退出;:w filename
,把编辑处理后的结果写到指定的文件中保存;:w! filename
,把编辑处理后的结果强制保存在指定的文件中,如果文件已经存在,则覆盖现有的文件;:wq! filename
,把编辑处理后的结果强制保存在指定的文件中,如果文件已经存在,则覆盖现有的文件,最后退出;
vim编辑器基本命令
- 移动光标位置:
- 输入文本:
a
,可在当前光标所在字符位置之后输入数据;A
,可在光标当前所在行的行尾输入数据;i
,可在光标当前所在字符位置之前输入数据;I
,可在当前光标所在行的行首输入数据;o
,可在光标所在行的下一行新起,输入数据;O
,可在光标所在行的上一行新起,输入数据。
- 修改和替换文本
C
,替换从光标位置开始直至行尾的所有数据内容,然后输入数据;cw
,替换单个字。如”hello world”,光标在hello的h上,输入cw,会取代hello(以空格分隔,一个单词为一个字),输入新的字替换,而不会去掉world;[n]cc
,cc命令,指将光标所在行,全部去掉,输入新数据;加上n后,表示要替换的行数,从光标所在位置,往下替换掉n行;[n]s
,表示替换字符,s表示替换光标所在位置的字符,n表示从光标开始往后的n个字符要被替换;S
,替换当前光标所在的行;类似cc;r
,替换单个字符,类似与1s。唯一不同的是,r执行完后,自动返回命令模式;R
,替换多个字符,可以从光标位置开始,替换多个字符,数量不限,直至按下esc;[n]~
,转换光标当前所在位置字母的大小写,一直按~
或者指定需要替换字母大小写的个数,可实现多个字母大小写转换。
- 撤销先前的修改
u
,用于撤销先前执行的编辑命令;U
,用于撤销或回复最精一次的操作。
- 删除文件(一直处于命令模式,而非输入模式(插入,取代))
[n]x
,删除字符。n为要删除字符的个数,从光标所在位置的字符往后开始(相当于往后删除),包括当前光标所在位置;[n]X
,删除字符。n为要删除字符的个数,从光标所在位置的字符往前开始(相当远往前删除),不包括当前光标所在位置;dw
,删除单个字或部分字。删除整个字的话,包括其占用的空间位置,如字与字之间的分隔符;[n]dd
,删除文本行。dd为删除当前光标所在行,n为删除多行;D
,表示删除本行的行尾部分。
- 复制、删除和粘贴文本
- 复制-粘贴:先yy复制文本行,再用p(或P)实际复制,
- 剪切-粘贴:先dd删除文本行,再用p(或P)实现文本行的移动。
- 具体命令:
[n]yy
,记住,该命令是复制文本行的,不是选中的部分,过程:- 把光标移至准备复制的文本行的任何位置;
- 输入
yy
命令; - 再把光标移至目标行的任何位置;
p
,复制到所在行的下面,P
,复制所在行的上面;- 如果在yy前面输入n,可以复制多个文本行。
[n]Y
,同yy;[n]dd
,删除文本行。然后操作过程同yy类似;- 上面的指令必须结合p,P使用。
- 按指定的数量重复执行指令
- 许多vim命令前面都可以加一个计数值,表明相应的命令重复执行的次数;
- 使用
.
,可以重复执行先前的文本编辑命令;
使用ex命令
- 显示行号,
:set nu
,挺实用的!!! - 取消行号,
:set nonu
- 多行复制,
:line#1,line#2 co line#3
,其中,co
相当于copy- 例如,
:1,5 co 12
把第1行到第5行复制到第12行; - 其中,
.
表示当前光标所在的行,$
表示最后一行;
- 例如,
- 移动文本,
:line#1, line#2 m line#3
,其中,m
相当于move - 删除文本,
:line#1, line#2 d
- 显示行号,
检索与替换
- 概述:使用户能够以检索指定字符串的方式,直接跳转至期望的文件位置。还提供全局检索和替换功能;
- 检索命令:
:/str
,检索给定的字符;:?str
,从当前位置开始,反向检索给定的字符串;n
,从当前位置开始,继续检索下一个匹配的字符串;N
,从当前位置开始,反向检索;:/str/+n
,将光标移至匹配的字符串str所在行之后的第n行;:?str?-n
,将光标移至匹配的字符串str所在行之前的第n行;
- 模式检索
- 仅检索出现在行首位置的字符串,
:/^search
; - 仅检索出现在行尾位置,
:/search$
; - 仅检索出现在字首位置的字符串,
- 仅检索出现在行首位置的字符串,
- 替换字符串
编辑多个文件
- 编辑多个文件
vim file1 file2
,先进入file1文件,编辑好后,:w
保存;输入:n
或:n file2
,进入file2文件,编辑好后,输入:w
保存。- 可以使用
:e filename,:n filename
直接转到指定的文件,也可以使用:n
命令转到下一个文件。:n#
交替编辑最近处理过的两个文件。 :e! filename
,强行转到指定的文件。
- 合并文件与合并文本行
line# r filename
,将filename中的内容读到指定行line中;- 如果未指定line,则默认是当前光标所在的行
- 编辑多个文件
定制vim编辑器的运行环境
- vim编辑器采用一系列默认的选项定义作为自己的运行环境。为了提高编辑效率,需要改变部分选项的默认值。
:set all
,可以查看到所有的可设置选项,:set option
,设置该选项,:set nooption
取消该选项设置。- 具体options如下:
all,在编辑器窗口中列出编辑器支持的所有选项;
magic,设置magic,可启动字符的特殊意义,如”.”表示匹配任意一个字符;”[…]”表示匹配指定字符集和或字符范围中的任何一个字符。设置nomagic就会使特殊字符意义失效。
autoindent,这个选项与shiftwidth选项一起使用,使新输入的文本行与上一行起始位置自动对齐。
autowrite,自动保存,当打开多个文件的时候,当前编辑完成后,要切换到另一个文件,就会将当前文件自动保存;
ignorecase,字符串匹配时,可设置忽略大小写;
laststatus,是否在编辑窗口中显示状态行;
number,显示文本行的行号;
readonly,对正在编辑的文件进行写保护;
report,默认值为2,表示复制或删除了多少行,在状态栏中报告;
scroll,设置前滚(ctrl+U)多少行,后滚(ctrl+D)多少行,如:set scroll=10;
shell,确定vim调用哪一个shell,如:set shell=path,path为shell的绝对路径;
shiftwidth,这个选项用于设定制表符的跳转位置,按下ctrl+t或ctrl+d,自动跳转到下一个或上一个制表符位置,默认为8;
showmatch,输入右圆括号、花括号或方括号时,提示与左边的括号相匹配;
tabstop,设置制表键tab的右移距离。默认为8;
wrap,控制vim显示较长的文本行。把较长的文本行延续到下一行,可利用该选项实现自动折行;
wrapmargin,指定编辑器窗口的右边距; - 永久性定制vim运行环境
- 上面的方法都只能临时地设置vim编辑器的当前运行环境,一旦退出,这种临时设置也随之作废;
- 永久性设置
- 需要设置VIMINTI变量。在.bash_profile中添加export VIMINTI = ‘set para1 para2 …’;
- 也可以把常用的vim选项以及定义加到系统范围的初始化文件
/etc/vim/vimrc
文件,或用户主目录下的.vimrc(或.exrc) 文件中,可以自己在用户主目录下建立.vimrc文件,在里面写入ab abc 中国农业银行
,等
其他特殊说明
- 删除或替换特殊字符
- 在编辑期间运行linux命令
:sh
,在vim编辑器中,要转到执行shell的命令话,可使用该命令。此时,使用ctrl+d或exit命令,可退回到vim编辑,继续刚才文件的编辑;:!command
,在编辑期间,如果想临时地运行某一个shell命令,可使用该命令,执行完毕后,按enter,即可回复原来的编辑处理状态;!!command
,在编辑期间,如果想把某个shell命令的运行结果直接加到当前编辑的文件中
六、Shell
- 基础知识
- 高级编程
七、软件管理
软件维护工具
- 命令行的软件维护工具,包括
apt-get
、aptitude
以及dpkg
等; - 图形界面的软件维护工具,包括
gnome-app-install
与snaptic
。
- 命令行的软件维护工具,包括
软件管理
- 软件包:在ubuntu Linux系统中,所有的软件和文档都是以软件包档案文件的形式提供的。软件包可分为二进制软件包(用于封装可执行程序、相关文档以及配置文件等)和源代码软件包(包含源代码以及生成二进制软件包的制作方法);
- 常见的软件包的格式:
- Debian格式软件包(.deb):ubuntu软件仓储中提供的软件包均采用这种封装格式,apt-get、aptitude和synaptic都支持此类软件包;
- Red Hat格式软件包(.rpm):RPM(Red hat Package Manager)是另外一种流行的Linux系统软件包,是Red hat以及派生(如fedora)支持的;
- Tarball:一种由大量文件(包括目录结构)组装成单个档案文件的大型文件集合。其中
tar
命令用于组合多个文件,生成一个文档,以便于发行;gzip
用于压缩文件的容量,以便节省文件的存储空间。Tarball非常类似于windows的”.zip”文件。Tarball文件具有.tar.gz
,.tar.bz2
或TGZ
形式的文件扩展名。在命令行终端窗口,可以使用tar -xzf filename
来解压相应的文件,然后在执行其中包含的软件安装命令。
- 软件仓库:指的是一个网站或存储目录,其中提供按一定组织形式存储的软件包与索引文件。
利用apt-get管理软件包
- APT(advanced package tool):一个通用的综合软件管理与维护工具,apt-get、aptitude和synaptic等软件工具包都是基于APT及其配置文件发展而来,是APT的前端软件管理工具。
- 早期,APT配置命令都存储在单独的配置文件中/etc/apt/apt.conf中。在ubuntu linux中,把这个文件分解成多个小型文件,存储在/etc/apt/apt.conf.d目录中。/var/lib/apt/lists目录存有APT本地软件包索引文件。/var/cache/apt/archives目录是APT的本地缓冲目录,其中缓存了最近下载的deb软件包文件。
- APT将采用/etc/apt/sources.list和/etc/apt/apt.conf.d目录中所有文件作为配置文件。
- apt-get是一个命令行软件管理工具,能够利用软件仓库安装选定的软件包,或者删除、更新系统中已经安装的软件包,升级linux系统。具体的使用命令为:
apt-get [-hvs] [-o=config string] [-c file] {[update] | [upgrade] | [dselect-upgrade] | [install pkgs] | [remove pkgs] | [purge pkgs] | [check] | [clean] | [autoclean] | [autoremove]}
,其中,apt-get命令支持的部分功能选项,自查。 - 常见使用
sudo apt-get install packagename
,安装指定的软件包;sudo apt-get update
,用于同步软件源的软件包索引,获取最新的可用软件包版本信息;sudo apt-get upgrade
,用于升级整个Ubuntu Linux系统(升级的过程,就是软件包的删除和重装过程);sudo apt-get remove/purge packagename
,用于删除软件包,其中remove属于部分删除,保留软件包中配置文件,而purge属于彻底删除;
- sources.list配置文件
- apt-get、aptitude以及synaptic是基于APT的,而ATP是使用/etc/apt/sources.list配置文件来定义软件的发行源的;
- sources.list是主配置文件,可以在/etc/apt/sources.list.d目录中定义其他辅助配置文件,作为sources.list的补充;
利用aptitude管理软件包
- aptitude是一个可以替代apt-get的软件管理工具,语法格式:
aptitude [options] {updtae | autoclean | clean | safe-upgrade}
aptitude [options] {install | reinstall | full-upgrade | download | purge | remove | show} pkgs
aptitude [options] search patterns
aptitude help
- 常见使用
sudo aptitude install package
,安装软件包;sudo aptitude safe-update
同步软件源的软件包索引文件,sudo aptitude safe-upgrade
升级整个系统;aptitude show vsftpd
用于查询各种软件包信息;aptitude search pkg-pattern
,用于检索软件包,可以检索系统中已经安装的软件包;aptitude search ~T
,查询所有的软件包;aptitude search ~U
,列出软件仓库中可供更新的软件包;aptitude search ~i
,列出系统中已经安装的软件包,如aptitude search ‘-i apache’表示要检索系统中已经安装的apache服务器软件包;
- aptitude是一个可以替代apt-get的软件管理工具,语法格式:
synaptic图形界面软件管理工具
- synaptic软件包管理器是一种基于APT开发的高级图形界面软件管理工具,其中实现了apt-get命令行工具的所有功能;
- 在命令行输入synaptic命令,启动;
GNOME软件增删工具
- 是一种GNOME桌面菜单的软件管理工具,可以根据软件的功能或菜单分类,补充安装或删除选定的软件包,也可用于浏览、检索及查询软件包的说明信息;
- 在命令行,输入gnome-app-install启动;
八、用户管理
相关概念
- linux系统中的用户可以分为3类:超级用户(root)、管理用户和普通用户。但也可以把超级用户和管理用户通称为系统用户;
- 超级用户是一个特殊的用户,用户标识号为0,可以访问任何程序和文件,任何系统都会自动提供一个超级用户帐号;
- 管理用户用于运行一定的系统服务程序,支持和维护相应的系统功能,用户标识号在1-999范围之内;
- 除了超级用户和管理用户,其他均为普通用户。访问linux系统的每个用户,都需要有一个用户帐号。只有利用用户名和密码注册到系统之后,才能够访问系统提供的资源和服务;
- Ubuntu linux系统强烈建议,应尽量避免使用超级用户注册到系统中,如果确实需要执行系统管理与维护任务,可以在具体的命令前冠以sudo命令;
- linux系统中的用户可以分为3类:超级用户(root)、管理用户和普通用户。但也可以把超级用户和管理用户通称为系统用户;
/etc/passwd文件
- 安装linux系统之后,系统已经事先创建了若干系统用户帐号,其中包括超级用户root和管理用户daemon、bin和sys等,用于执行不同类型的系统管理和日常维护任务;
- 用户的帐号信息是有/etc/passwd和/etc/shadow文件共同维护的;
- passwd文件中包含了linux系统中每个用户除密码之外的重要信息,每个用户信息占用一行,每一行由7个字段组成,中间以冒号分开:
username:password:uid:gid:comment:home_dir:login_shell
(用户名:密码:用户id:用户组id:主目录:命令解释程序),在passwd中部分内容如下:root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
….sucab:x:1000:1000:sucab,,,:/home/sucab:/bin/bash
其中,每一个字段的具体说明如下:username:注册用户名,用户名在linux系统中必须是唯一的,且至少第一个字符选用字母;password为用户密码,但实际的密码已移至/etc/shadow文件中,如果用户设有密码,会显示为x,若显示*,则用户无法正常地注册到系统;uid用户id,是系统识别用户的主要手段,由系统或系统管理员分配,id为32为无符号整数,即为0-65536,其中0为超级用户,1-999为管理用户,1000-65536为普通的自定义用户;gid用户组id,系统中的每个用户均属于某个用户组,每个用户组除有组名之外,也有一个相应的用户组id,在0-999保留作系统用户组使用;comment为注释信息,包含用户全名,电话号码和电子邮件等用户信息;home_dir指定用户的主目录,环境变量${HOME},形如/home/username;login_shell指定用户注册后调用的shell,即命令解释程序,如果该字段为空,则默认的命令解释程序为/bin/bash,用户可以根据自己的爱好,选用其他命令解释程序,如korn shell,zsh,tcsh等。
/etc/shadow文件
- 是一个限制访问的系统文件,其中存有加密形式的密码和其他相关信息,格式如下:
username:password:lastchanged:mindays:maxdays:warn:inactive:expire:reserve
,在shadow中的部分内容如下:root:!:16198:0:99999:7:::
daemon:*:16177:0:99999:7:::
….sucab:$6$En29/eVv$n1IaVG0PJ0x3QQtEoTDQU...FVYD.1:16198:0:99999:7:::
其中,password是加密形式的密码,通常用crypt(3)函数生成;lastchanged是从1970年1月1日开始算起,直至最后一次修改密码之日的天数;mindays保持密码稳定不变的最小天数,必须大于等于0,仅当超过此限才能修改密码;maxdays保持密码有效的最大天数,超过此限,系统将会强制提示用户更换新密码;warn指定在密码有效期到期之前需提前多少天向用户发出警告信息;
- 是一个限制访问的系统文件,其中存有加密形式的密码和其他相关信息,格式如下:
增加、修改和删除用户
- 添加用户
useradd [-u uid] [-g group] [-d home_dir] [-s shell] [-c comment] [-m [-k skel_dir]] [-N] [-f inactive] [-e expire] login
- 其中,login表示新用户的注册用户名;
-u uid
,(–uid uid),用于指定新增用户的用户id,是当前已经分配的最大id号加1;-g group
,(–gid group),用于指定一个现有用户组的id或用户组名;-N
,(–no-user-group),?-d home_dir
,(–home home_dir),用于指定新增用户的主目录;-s shell
,(–shell shell),用与指定命令解释程序shell的完整路径名。默认为/bin/bash-c comment
,(–comment comment),用于指定用户全名、电话号码以及电子邮件地址等注释信息;-m
,(–create-home),在增加新用户时,如果用户的主目录不存在,则创建用户主目录。同时,把/etc/skel目录或-k
选项指定目录中的初始化文件复制到用户主目录中;-k skel_dir
,(–skel skel_dir),用于指定存储用户初始化文件(.profile)的目录,以便useradd命令能够把其中的文件复制到用户主目录;-f inactive
,(–inactive inactive),用于指定相应用户一直未访问系统,但仍保证其注册帐号信息有效的最多天数,超过此限将锁住用户帐号;-e expire
,(–expiredate expire),指定注册用户的有效期,即截止日期;sudo useradd -u 1001 -d /home/sucab -m -s /bin/bash sucab
系统将会在/etc/passwd、/etc/shadow、/etc/group文件中各添加一行与用户sucab相关的信息。一旦创建了用户帐号,就可以使用passwd命令设置密码,使用usermod等命令修改passwd和shadow文件,更改用户的其他相关属性
- 修改用户
- 除非用户名或用户id与其他用户冲突,一般情况下不要轻易修改用户帐号中的用户名和用户id,因为这将涉及到用户已经创建的所有文件和目录。但commnet,shell,password,home_dir等可以修改;
- 修改用户信息时,可以利用编辑器,直接修改passwd和shadow,也可以使用usermode命令,自查。
- 删除用户
- 使用userdel命令,只需要一个命令即可删除passwd,shadow和group文件中的相应用户和用户组信息,同时还会把用户主目录中的所有文件和目录一同删除;
userdel [-r] login
,-r表示删除用户主目录,包括其中的文件和子目录。
- 封锁用户帐号
- 在/etc/shadow文件的密码字段增加一个感叹号”!”前缀;
- 在/etc/passwd文件的密码字段增加一个星号”*”;
- 修改shadow的expire字段为一个过时的日期。
- 定期更改密码
- 普通用户可以使用不带任何选项和参数的passwd命令修改自己的密码,使用实例如下:
$ passwd
更改 username 的密码。
(当前)unix密码:输入原密码
输入新的unix密码:输入新密码
重新输入新的unix密码:再输一次
修改成功 passwd [-adehlSu] [-i inactive] [-m min] [-m warn] [-x max] [login]
。超级用户则可以利用此命令的大量选项及参数维护系统中的用户帐号信息,passwd命令的部分选项自查,可以通过$ passwd --help
,查看参数选项的作用,部分如下:-a
,只能与-S
选项一起使用,以查询所有用户帐号的状态信息,必须具有超级用户权限,即sudo passwd -aS
;-d
,删除指定账户的密码;-e
,强制指定账户密码过期;-h
,显示此帮助信息并退出;-l
,锁住指定的账户;-S
,(–status),报告指定账户密码的状态;-u
,(–unlock),解锁被指定账户。
使用示例:$ sudo passwd -S sucab
sucab P 05/08/2014 0 99999 7 -1
,其中,P表示用户sucab已经设置了密码;若为NP表示未设置密码,L表示账户已经锁住。
- 普通用户可以使用不带任何选项和参数的passwd命令修改自己的密码,使用实例如下:
- 检验用户的有效用户ID
- 要检查用户的有效用户ID,可以使用id命令。例如,当sucab注册到系统之后,id命令的输出结果如下:
$ id
uid=1000(sucab) gid=1000(sucab) 组=1000(sucab),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
- su命令
- su命令能够改变用户的有效用户ID,而不必另行注册;
- 使用示例(假设当前注册用户是sucab,另一个账户是zyt):
sucab@X-PC:~$ su zyt
(切换到zyt身份)
密码:输入zyt的密码zyt@X-PC:/home/sucab$
,说明,即使改变用户身份,仍会保持之前的工作目录不变;
如果,在su命令之后加上”-“、”-l”或”–login”,则可以直接进入其他用户的主目录,相当于zyt的直接登录。命令如下:sucab@X-PC:~$ su --login zyt
密码:输入zyt的密码zyt@X-PC:~$
5. 定制用户的工作环境
- 要检查用户的有效用户ID,可以使用id命令。例如,当sucab注册到系统之后,id命令的输出结果如下:
- 相关概念:当用户注册到系统之后,用户的工作环境是由选定的命令解释程序和相应的用户初始化文件确定的。因此,用户管理的另一个任务是选择作为用户界面的命令解释程序和用户初始化文件。
选择命令解释程序
- linux系统配备的标准命令解释程序是bash,但同时也支持korn shell(ksh),基于C shell的TC shell(tcsh)以及Z shell(zsh)等,可以自由选用。
/etc/shells中列出了ubuntu linux系统支持的所有命令解释程序,下面介绍4个常见的:
Bourne Again Shell
bash是基于POSIX 1003.2标准开发的一个免费版的shell,与Bourne shell和korn shell一脉相承,在功能上有较大的提高。bash,支持emacs与vi两种命令行编辑功能,支持历史命令、命令别名和作业控制等机制。因此,Bash是linux系统首选的shell。
Korn shell
(/bin/ksh)是Unix系统中继Bourne shell与C shell之后推出的第3个著名的shell。Korn shell以Borne shell为基础,同时充分吸纳了C shell的优点,极大增强和丰富了Bourne Shell的基础功能。
TC shell
C shell原为BSD版unix系统的命令解释程序,由加州大学伯克利分校计算机系的Bill Joy开发。TC shell(/bin/tcsh)是在C shell的基础上开发的,继承并发展了C shell的全部功能特性。但与bash 和korn shell等Bourne系列的shell不兼容。
Z shell
同上述的shell一样,zsh既是一个交互式的命令解释程序,也是一个强有力的编程语言。zsh吸收并集成了bash、ksh以及tcsh等shell的许多功能特性,能够提高用户与linux系统交互的效率,非常适合用作交互式shell。zsh是上述shell的超集。
- 任何时候,每个用户只能使用一个命令解释程序,但可以随时从一个shell切换到另一个shell环境。可以使用
ps -f
指令,找出ps的父进程,即可确定当前使用的哪一个shell。
- 添加用户