我们在以后的工作中,多多少少都会用到Linux系统,那么了解Linux系统的权限管理就非常关键了。比如说服务器安不安全、服务能不能启动、网站上能不能上传文件,那么这些问题很可能就是跟系统的某些文件或者目录的权限有关。

为了解决这些问题,我们需要明白Linux系统的权限管理是怎么一回事,怎么样给文件和目录分配正确的权限。由于Linux系统的每一个文件和目录都会属于某一个特定的用户和一个特定的用户组,那么一般是谁创建了这个文件和目录,它的拥有者就会是谁,不过我们也可以手工地修改它的拥有者和所属的对应用户组。

文件和目录的权限分成三类,第一是它的拥有者的权限,第二是它所属的用户组的权限,第三是其他人对这个文件和目录的权限。综上所述,即我们可以分别去为文件或者目录去设置这三类权限。

可以设置的权限有三种,不同的权限决定了一个用户能对这个文件或者目录做什么。一种是读取的权限,或者叫做查看的权限,用小写的英文字母r来表示,英文是read;另外还有写入的权限,这里用小写的英文字母w来表示,英文是write;最后一种是执行的权限,用小写的英文字母x来表示,英文是execute。如果我们想让文件的拥有者读取里面的内容,我们可以给它一个读取(r)的权限;如果我们想让这个文件所属的用户组里面的所有用户都可以查看这个文件里面的内容,可以去设置一下这个文件所属的用户组的权限,同样的是给它一个读取(r)的权限;如果我们想让其他人也能读取这个文件的内容,那么就去设置一下这个文件的第三类的权限,也就是对其他人的读取(r)权限。同样,我们也可以去设置这三个级别的写入权限和执行权限。

读取权限、写入权限和执行权限也可以用阿拉伯数字来表示。r是用阿拉伯数字4来表示,w用阿拉伯数字2表示,x用阿拉伯数字1。那么一个文件的拥有者的权限为7,就表示文件的拥有者同时拥有r+w+x的权限,因为4+2+1=7。如果你只想让它拥有读取的权限,则设置为4;同时拥有读取和写入的权限,则设置为6;什么权限都没有的话则设置为0。

13.1 文件与目录

13.1.1

文件的读取与写入权限
如图13-1所示,我们使用root用户登录到Linux系统,用命令touch hello.txt来创建一个名为hello.txt的空文本文件。然后我们输入命令ls -l来查看当前目录下的所有目录和文件,我们可以看到刚创建的hello.txt在第二行。
2-4-1-1-445×155.png
图13-1
文件的读取与写入权限

我们可以看到文档前有两个root,这两个root是什么意思呢?第一个root代表文件所属的用户,第二个root则是代表文件所属的用户组。

还有最前面的-rw-r—r—,它又代表什么意思呢?最前面的-代表这个文件是普通文件,后面的则代表这个普通文件所拥有的的三个类别的权限。第一部分的rw-代表的是拥有者root的权限,它有读取和写入的权限,但没有执行的权限;第二部分的r—代表的是root用户所属的用户组的权限,它只有读取的权限;第三部分的则是代表其他人对这个文件的权限,它也只有读取的权限。

接下来,我们使用命令echo ‘hello world’ > hello.txt来对这个空文本文件写入数据,按下回车执行。然后我们再使用命令cat hello.txt来查看这个文本文件,显示内容如图13-1所示出现hello world,意味着我们写入数据成功。

13.1.2

目录的读取与写入权限
如图13-2所示,我们使用root用户登录到Linux系统,用命令mkdir test去创建一个名为test的空目录。然后我们使用命令ls -l查看root目录下的所有文件和目录的详细属性,我们可以看见第四行就是我们刚才创建的空目录,它的属性是755,属性前有一个英文字母d,它的全称为diretory,中文意思为目录,代表着这个名为 test的东西是一个目录。
2-4-2-1-465×525.png
图13-2
目录的读取权限

然后我们使用命令touch test/test01.txt给test这个空目录写入一个名为test01的txt空文档。写入完成后,我们使用ls test命令查看test目录下的文件和目录,我们可以看到我们刚创建的test01.txt。

我们尝试使用先前创建的新用户ipc去执行同样的命令,结果系统告诉我们没有这个权限,操作被拒绝。

我们使用命令ls -l ..去查看上一级目录的详细属性,发现root目录的属性是550,这表明用户组成员和其他人没有执行权限,所以操作被拒绝也就很正常了。

如图13-3所示,我们使用cd test命令进入 test 目录,然后使用命令su ipc -c ‘ls’以ipc这个用户的身份去查看这个目录下的所有东西。
2-4-3-1-445×290.png
图13-3
目录的写入权限

然后我们再尝试使用命令su ipc -c ‘touch test02.txt’,以ipc的用户身份去创建一个名为test02的txt空文档,预料之中的事发生了,系统告诉我们没有这个权限执行命令,于是操作被拒绝。

于是我们使用cd ../命令,返回上一级目录。然后我们使用命令chmod o+w test,来为test目录赋予一个其他人也能写入的权限。这里的o+w,其中的o是others,w则是write;它们相加,则是为其他人增加写入的权限,如果是减号则是相反的意思。

然后我们再重新进入test目录,并重新执行上面的命令,可以看到我们这次成功写入了命令。使用ls -l ..命令,查看root目录下的所有东西的详细属性,可以看到我们的test目录的属性为757,这代表着其他人也有执行的权限,这是相当危险的。

13.1.3

文件与目录的执行权限
什么是文件(目录)的执行权限?文件的执行权限,就是我们可以把这个文件当作我们电脑的应用程序去运行(目录的执行权限最基本的作用则是能使用cd命令进入到目录里,以及获取目录下文件的列表),这样的权限就叫执行权限;执行权限用小写英文字母x来表示,用阿拉伯数字就是1。

文件(目录)的执行权限,只能给我们所信任的脚本和信任的用户,如果授权不慎,比如我们将可执行文件的权限设置为777并暴露在公网上,我们所拥有的服务器,将很快被骇客的自动化攻击脚本拿下。

如图13-4所示,登录我们的服务器,输入命令echo “echo ‘hello’” > say-hello.sh,去创建一个内容为hello、名字为say-hello的可执行脚本。
2-4-4-1-450×200.png
图13-4
文件的执行权限

我们输入命令ls查看当前目录下的所有文件和目录,可以看到我们刚创建的可执行脚本say-hello.sh。

我们输入./say-hello.sh命令,尝试执行这个脚本,系统反馈告诉我们权限不够。于是我们输入ls -l say-hello.sh命令,去查看这个可执行脚本的权限,得知属性为644,没有可执行权限。

没有权限,我们就赋予它权限。我们输入命令chmod u+x say-hello.sh,赋予拥有者一个执行权限,这里的u代表这个文件的拥有者。

我们再次输入ls -l say-hello.sh命令,查看这个可执行脚本的权限,得知属性变更成了744。我们重新执行这个脚本,现在成功输出了内容hello。

接下来,我们来测试目录的执行权限。如图13-5所示,我们输入命令ls -l查看root目录下所有文件与目录的详细属性,这里我们可以看到test目录的属性为755。
2-4-5-1-400×390.png
图13-5 目录的执行权限

接下来,我们输入chmod 000 test命令,赋予test这个目录一个比较极端的属性000。不过,这个命令只是对除超级管理员root以外的其他用户比较极端。

我们输入ls -l命令,可以看到test目录被成功变更为了000属性。如同上面的话所说,使用root身份时,ls test和ls -l test命令仍然能正常生效。

于是我们使用su ipc命令,将身份切换到了之前创建的新用户ipc,接着输入命令cd test,显示权限不够操作被拒绝,使用其他命令也同样如此,看来目录的执行权限已成功剥夺。

13.1.4

修改文件与目录的权限
修改文件和目录的权限,使用的是chmod这个命令。

如图13-6所示,我们使用root用户登录到Linux系统,输入命令ls -l查看root目录下的所有东西的详细属性。 我们可以看到,现在的hello.txt的属性为644。
2-4-6-1-450×405.png
图13-6 修改文件与目录的权限

我们想把其他用户的读取权限取消,可以使用chmod o-r hello.txt这个命令,不过我们可以使用更直接简洁的命令,也就是如图13-6所示中的chmod 640 hello.txt。我们再次使用ls -l命令,发现hello.txt这个文件的属性已经成功变成640,原本应该为r—的地方变成了—-。

如果我们想恢复这个文件为644时的属性,则使用命令chmod o+r hello.txt,然后执行回车。我们再次使用ls -l命令查看相关文件属性,可以看到文件已恢复成644属性。

假若我们想取消用户组的读取权限,可以使用chmod g-r hello.txt命令来实现。这里的g代表的是group,也就是用户组的意思。

如果我们想对一个目录实现类似的操作,可以在chmod后加上选项-R来实现,对应的英文为recursive。

更多的用法,我们可以在线查看chmod命令使用详解http://man.linuxde.net/chmod。

13.1.5

修改文件或目录的拥有者
如果我们想修改文件或目录的拥有者,我们可以使用chown这个命令,即英文change owner的缩写。如果想修改文件或者目录所属的用户组,我们也可以使用chown命令,或者使用chgrp命令。

如图13-7所示,我们使用root身份登录到我们的服务器,输入mkdir命令创建一个名为files的新目录。然后我们输入ls命令,列出root目录下的所有文件与目录,这里我们看到了刚才创建的files目录。
2-4-7-1-490×690.png
图13-7 修改文件或目录的拥有者

接着,我们使用touch files/file{01..10}.txt这个命令,在files目录下创建10个空文本文档,它们的命名如图13-7所示,从file01一直到file10。我们使用ls -l命令,查看root目录下的所有东西的详细属性,可以清楚地看到files目录的用户和用户组都为root。

于是我们使用sudo chown ipc files命令,将files目录的用户变更为ipc。我们再次查看root目录下的所有东西的详细属性,我们清晰地看到相关的用户变更成了ipc。

这里我们使用ls -l files命令,查看files目录下的所有空文本文档的详细属性,发现相应的用户和用户组还是属于root。目录的用户我们都改成了ipc,不能里面的文件还是归原来的用户管,我们得把它改过来。

怎么改呢?我们使用命令sudo chown -R ipc files,把目录里的所有东西的属性都修改过来。大家可以发现,这里只是多了一个-R。前面说过,这里的-R是用来进行递归处理的选项,可以将指定目录下的所有文件及子目录一并处理。这个命令执行以后,我们再次使用ls -l files命令去查看files目录下的所有东西的详细属性,执行完成以后,可以看到所有的空文本文档的用户都变成了以前创建的新用户ipc。

13.1.6

管理用户所属的用户组
如图13-8所示,我们登录进服务器,使用ls -l命令得知test目录的权限属性为777,这是一个很危险的权限,意味着其他人也可以执行命令。
2-4-8-1-410×225.png
图13-8 管理用户所属的用户组

于是我们使用命令chmod o-w test,将其目录的属性重新设置为了775,当然我们也可以根据需要设置成其他属性。

如果我们仍然想让ipc这个用户拥有写入test这个目录的权限,我们可以设置一下ipc这个用户的用户组,具体操作在前面已经写过了。我们输入groups ipc查看ipc这个用户的用户组,得知它确实是在wheel用户组。

如果我们需要修改一个离线用户的用户组信息,我们可以使用usermod这个命令。

如果我们要将ipc添加到组staff中,可以使用如下命令:
usermod -G staff ipc

如果我们要修改ipc的用户名为newipc,可以使用如下命令:
usermod -l newipc ipc

更多的用法,我们可以在线查看usermod命令使用详解http://man.linuxde.net/usermod。

13.2 36个Linux常用基础命令


Linux的命令数量十分惊人,至少几千个是有的。这么多的数量,有读者可能会想,这可以出版一本图书了吧。——嗯,是的,大家没想错,还真有这样的书,厚度拿来当枕头完全没问题。

对于Linux初学者来说,我们完全没有必要把它们都记住,只需掌握下面的这些命令,我们在很长一段时间内就完全够用了。下面列举出来的命令,主要偏向于Linux的运维方向。

13.2.1

系统管理
1.killall命令:killall命令使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。

2.mount命令:mount命令用于加载文件系统到指定的加载点。此命令的最常用于挂载cdrom,使我们可以访问cdrom中的数据,因为我们将光盘插入cdrom中,Linux并不会自动挂载,必须使用Linux 的mount命令来手动完成挂载。

3.ps命令:ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。

4.shutdown命令:shutdown命令用来系统关机命令。shutdown指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作,是最常用也最安全的关机命令。与之有关的命令还有halt命令、reboot命令、poweroff命令。

5.sudo命令:sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。

6.systemctl命令:systemctl命令是系统服务管理器指令,它实际上将service和chkconfig这两个命令组合到一起。

13.2.2

网络管理
1.ifconfig命令:ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就会不存在。要想将上述的配置信息永远的保存在机器里,那么就需要修改网卡的配置文件了。

2.iptables命令:iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。

3.netstat命令:netstat命令用来打印Linux中网络系统的状态信息,可让我们得知整个Linux系统的网络情况。

4.wget命令:wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次连接到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

13.2.3

软件·打印·开发·工具
1.date命令:date命令是显示或设置系统时间与日期。 很多Shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以以多种格式去打印,也可以使用命令设置固定的格式。在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间(UTC)1970年1月1日0时0分0秒起流逝的秒数。

2.gcc命令:gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大、编译代码支持性能优化等特点。目前,GCC可以用来编译C/C++、Fortran、Java、ObjC、Ada等语言的程序,可根据需要选择安装支持的语言。

3.man命令:man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。

4.yum命令:yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

13.2.4

文件和目录管理
1.cat命令:cat命令连接文件并打印到标准输出设备上,cat经常用来显示文件的内容,类似于Windows下的type命令。

注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。为了控制滚屏,可以按Ctrl+S键,停止滚屏;按Ctrl+Q键可以恢复滚屏。按Ctrl+C(中断)键可以终止该命令的执行,并且返回Shell提示符状。

2.cd命令:cd命令用来切换工作目录至dirname。 其中dirName表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的home directory(也就是刚login时所在的目录)。另外,~也表示为home directory的意思,.则是表示目前所在的目录,..则表示目前目录位置的上一层目录。

3.chgrp命令:chgrp命令用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。

4.chmod命令:chmod命令用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。

权限范围的表示法如下:
u User,即文件或目录的拥有者;
g Group,即文件或目录的所属群组;
o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
a All,即全部的用户,包含拥有者,所属群组以及其他用户;
r 读取权限,数字代号为“4”;
w 写入权限,数字代号为“2”;
x 执行或切换权限,数字代号为“1”;
- 不具任何权限,数字代号为“0”;
s 特殊功能说明:变更文件或目录的权限。

5.chown命令:chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户ID,用户组可以是组名或组ID。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。

只有文件主和超级用户才可以便用该命令。

6.cp命令:cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。

7.file命令:file命令用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。

8.find命令:find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。

9.grep命令:grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

10.ls命令:ls命令用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。

11.mkdir命令:mkdir命令用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。

注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。最好采用前后一致的命名方式来区分文件和目录。例如,目录名可以用大写字母开头,这样在目录列表中目录名就会出现在前面。

在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录,它包含所有的数据库文件,另有一个子目录应包含电子表格文件,还有一个子目录应包含文字处理文档,等等。目录也是文件,它们和普通文件一样遵循相同的命名规则,并且利用全路径可以唯一地指定一个目录。

12.mv命令:mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。

mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果:
1)如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
2)如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。

注意:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。

13.rm命令:rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。

注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求我们逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。

14.tar命令:tar命令可以为Linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。

首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。

为什么要区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当我们想要压缩一大堆文件时,我们得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip、 bzip2命令)。

在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。我们可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。

15.vi命令:vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能。

vi编辑器支持编辑模式和命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用vi编辑器就必须熟练掌握着两种模式的切换。默认情况下,打开vi编辑器后自动进入命令模式。从编辑模式切换到命令模式使用“esc”键,从命令模式切换到编辑模式使用“A”、“a”、“O”、“o”、“I”、“i”键。

vi编辑器提供了丰富的内置命令,有些内置命令使用键盘组合键即可完成,有些内置命令则需要以冒号“:”开头输入。常用内置命令如下:
Ctrl+u:向文件首翻半屏;
Ctrl+d:向文件尾翻半屏;
Ctrl+f:向文件尾翻一屏;
Ctrl+b:向文件首翻一屏;
Esc:从编辑模式切换到命令模式;
ZZ:命令模式下保存当前文件所做的修改后退出vi;
:行号:光标跳转到指定行的行首;
:$:光标跳转到最后一行的行首;
x或X:删除一个字符,x删除光标后的,而X删除光标前的;
D:删除从当前光标到光标所在行尾的全部字符;
dd:删除光标行正行内容;
ndd:删除当前行及其后n-1行;
nyy:将当前行及其下n行的内容保存到寄存器?中,这里的?为一个字母,n为一个数字;
p:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的下方;
P:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的上方;
/字符串:文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示;
?name:文本查找操作,用于从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示;
a,bs/F/T:替换文本操作,用于在第a行到第b行之间,将F字符串换成T字符串。这里的“s/”表示进行替换操作;
a:在当前字符后添加文本;
A:在行末添加文本;
i:在当前字符前插入文本;
I:在行首插入文本;
o:在当前行后面插入一空行;
O:在当前行前面插入一空行;
:wq:在命令模式下,执行存盘退出操作;
:w:在命令模式下,执行存盘操作;
:w!:在命令模式下,执行强制存盘操作;
:q:在命令模式下,执行退出vi操作;
:q!:在命令模式下,执行强制退出vi操作;
:e文件名:在命令模式下,打开并编辑指定名称的文件;
:n:在命令模式下,如果同时打开多个文件,则继续编辑下一个文件;
:f:在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例;
:set number:在命令模式下,用于在最左端显示行号;
:set nonumber:在命令模式下,用于在最左端不显示行号。

13.2.5
硬件·内核·Shell·监测


1.df命令:df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

2.echo命令:echo命令用于在Shell中打印Shell变量的值,或者直接输出指定的字符串。Linux的echo命令,在Shell编程中极为常用,在终端下打印变量value的时候也是常常用到的,因此有必要了解下echo的用法。echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。

3.free命令:free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。

4.kill命令:kill命令用来删除执行中的程序或工作。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。

5.lsof命令:lsof命令用于查看我们进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP);找回或者恢复删除的文件。它是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。

在Linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议(TCP)和用户数据报协议(UDP)套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

6.time命令:time命令用于统计给定命令所花费的总时间。

7.top命令:top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。

**
《新手指南:Linux新手应该知道的 26 个命令》
https://linux.cn/article-6160-1.html
Linux常用命令线上手册(可快速查询某个命令的详细知识)
http://man.linuxde.net/

Linux的常用命令比较多,如果大家舍不得花钱购买服务器或者没有多余的服务器进行实机操作,可以使用开源的虚拟机软件VirtualBox(英文官网 https://www.virtualbox.org/)虚拟出一台服务器进行训练。