【例 1-10】 将etc目录下的inittab文件内容显示出来。
首先在命令行中执行"more /etc/inittab"命令,然后按Enter键。
当执行命令后,Linux系统会整屏显示文件内容,隐藏第一行的命令行,并在整屏的最下方显示文件内容已显示的百分比,如图1-68所示。
图1-68 使用more命令显示某文件全部内容
【例 1-11】 将etc目录下的inittab文件内容显示出来,从第3行开始显示,每页显示5行,如图1-69所示。
图1-69 使用more命令显示文件特定部分的内容
3)less
less命令的作用和more命令类似,唯一区别是前者支持使用PageDown键和PageUp键进行上翻与下翻;而more命令仅能向前移动,却不能向后移动。less命令比more命令更方便一些。其语法如下。
less 文件名
常用参数为"-N",表示显示每行的行号。
在显示的过程中,按Q键可以退出less 命令,按空格键可滚动一页,按Enter键可滚动一行。
【例 1-12】 将etc目录下的inittab文件内容显示出来。
首先在命令行执行"less /etc/inittab"命令,按Enter键。
当执行命令后,Linux系统会整屏显示文件内容,隐藏第一行的命令行,并在整屏的最下方显示目录和文件名(见图1-70)。此时,按Enter键或空格键可以继续查看内容,查看到文件末尾,会显示end的信息。若按Q键则退出,回到命令行。
图1-70 less命令示例
4)head
head 命令用于显示文件的头几行内容,如果不加-n参数,则默认显示文件的前 10行内容。其语法如下。
head [-option] 文件名
常用参数为"-n",表示指定显示多少行。
【例 1-13】 显示etc目录下inittab文件的前3行内容,如图1-71所示。
图1-71 head命令示例
5)tail
tail命令用于显示文件的尾几行内容,和head命令相反。如果不加-n参数,则默认显示文件的后10行内容。其语法如下。
tail [-option] 文件名
常用参数为"-n",表示指定显示多少行。
【例 1-14】 显示etc目录下inittab文件的末尾3行内容,如图1-72所示。
图1-72 tail命令示例
6.链接文件
链接是对文件的引用,可以让文件在文件系统中多处被看到。在Linux系统中,链接可以如同原始文件一样执行、编辑和访问。对于系统中其他应用程序而言,链接就是它所对应的原始文件。对链接文件进行编辑,实际上就是对原始文件进行编辑。
有两种类型的链接-硬链接(hard link)和符号链接(symbolic link)。关于这两种链接的定义,目前还未统一。下面给出作者对这两个链接的理解。
(1)在建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。可以跨文件系统,甚至可以跨越不同计算机、不同网络对文件建立符号链接,并且符号链接指向任意文件和目录。因此,硬链接用得很少,基本上可以忽略,主要用的是符号链接。
(2)当硬链接指向一个原始文件时,即使原始文件被删除了,也只删除了原始文件的指针,并没有删除其真实的存储空间,只有当最后一个指向原始文件的硬链接被删除后,原始文件才会被删除。所以,对于硬链接对应的原始文件,用户想怎么移动就怎么移动,链接始终不会失效。
(3)当符号链接指向一个原始文件时,链接包含了另一个文件的路径名,类似于Windows系统桌面上的一个快捷方式。当原始文件被移动或者删除后,该链接就会失效,并指向一个未知地点,无法访问。
(4)对于硬链接指向的文件,用户不需要有访问原始文件的权限。对于符号链接指向的文件,用户需要对原始文件的位置有访问权限,否则不可以使用链接。
ln命令的语法如下。
ln [-option] 源文件 目标文件
常用参数如下。
● -d:创建硬链接,默认为该参数。
● -s:创建符号链接。
● -f:在创建链接时,如果目标文件已存在,则对其进行替换。
【例 1-15】 新建文件lovestory(内容随意),并保存。在Mydoc目录下建立lovestory文件的硬链接,如图1-73所示。
图1-73 ln命令示例
前面介绍过,rwx属性后面的数字表示链接数,其实就是索引节点数,这里索引节点数从原来的1变成了2,表示有两个索引节点指向文件内容,相当于同一个文件有两个名字。使用ls -il命令查看索引节点号(见图1-74),发现它们都是相同的,说明它们指向同一个文件,并且文件大小也是一样的,都是1029B。
图1-74 使用ls -il命令查看索引节点号
此时删除原始文件lovestory,查看dlink的硬链接内容(见图1-75),发现lovestory文件内容还在,这也证明了硬链接的特点-当硬链接指向一个原始文件时,即使原始文件被删除了,也只删除了原始文件的指针,并没有删除其真实的存储空间。
图1-75 删除原始文件lovestory,查看dlink的硬链接内容
【例 1-16】 为lovestory文件建立符号链接。
在例1-15中,lovestory已经被删除了,所以这里先用cp命令把原始文件找回来,然后删除其硬链接,如图1-76所示。
图1-76 找回原始文件,并删除硬链接
创建符号链接,然后用ls -il命令可以看到,符号链接不会增加原文件内容的索引节点,而是新建一个文件slink,rwx属性的第一个字符是l;文件大小也与硬链接中不同,只有9B,说明它只是一个Windows系统概念中的快捷方式,如图1-77所示。
图1-77 符号链接
此时删除lovestory这个原始文件会发现,slink符号链接已经变为红色,并且访问不到任何内容,如图1-78所示。
图1-78 删除符号链接
7.文件与目录权限
1)chown
chown命令用于变更文件及目录的所有者和所属组。其语法如下。
chown [-option] user:group 目录或文件名称
常用参数为"-R",表示连同目录下所有文件及子目录都进行变更。
【例 1-17】 把lovestory文件的属主变为另一个用户和群组。
首先看一下当前系统有哪些用户和群组。用户的资料在etc/passwd文件中,群组的资料在etc/group文件中。分别使用cat命令查看两个文件cat/etc/passwd和cat/etc/group。
从运行结果可能会看到很多用户和群组。CentOS规定,uid≥500的用户为普通用户,uid介于0~499的用户为系统用户。在前面,我们创建了一个51testing用户,所以在查看用户的时候,在最下面会看到一个51testing,如图1-79所示。
图1-79 查看创建的用户
同样会看到一个51testing群组(见图1-80),这个是创建用户时候自动创建的,名字和用户名一样。
图1-80 查看创建的群组
执行图1-81所示命令,可将当前root目录下的Mydoc目录及目录下的lovestory文件的所有者改成51testing用户,所属组改成51testing组。
图1-81 修改文件的所有者
通过ls命令查看变更后的结果。可以看到,lovestory的用户和群组都变为51testing(见图1-82)。
图1-82 验证文件的所有者修改是否成功
2)chmod
chmod命令用于变更文件及目录的读写执行权限。其语法如下。
chmod [-option] [parameter] 目录或文件名称
常用参数为"-R",表示连同目录下所有文件及子目录都进行变更。
下面分别通过3个例子来说明使用chmod命令改变权限的几种方式。
(1)通过权限掩码。读写执行权限可以分为3组,每组3个,例如,r-x表示可读、可执行,但不可写。为了方便表示,Linux系统把这3个属性编成二进制数,有字母就为1,没字母就为0。例如,r-x可以表示为101(2),也可以表示为八进制,即5(8)。
注意,如果对文件的属性比较生疏,则可以查看 1.3.2 节。如果对二进制和八进制的转换规则比较生疏,则可以直接用Windows系统的计算器进行转换。
假设某个文件的属性为rwxrw----,则它可以表示成二进制形式,即111110000(2),也可以表示为八进制形式,即760(8)。所以,可以采用八进制数对文件或目录进行权限设定。
【例 1-18】 把例1-17中的lovestory文件的权限改为rwxrw----,如图1-83所示。第一个方框处是原来的权限,使用八进制的760设定后,就把lovestory文件的权限改成了一个可执行文件的权限。
图1-83 修改文件权限示例(一)
(2)通过ugo法。权限属性分为3组,分别是所有者(user)、群组(group)、其他(other),我们用u、g、o来代表这3个组,还可以用a表示全部。
【例 1-19】 把例1-18中的lovestory文件的权限改为rwxrwxr--,如图1-84所示。命令中的"ug=rwx,o=r"表示把三元组变成rwxrwxr--。
图1-84 修改文件权限示例(二)
(3)通过ugo + ?法。当使用ugo法时,可以用"="来赋值或用"+""?"来增加或减少权限。
【例 1-20】 把例1-19中的lovestory文件所属组的读权限去掉,给其他人增加写权限,如图1-85所示。命令中的"g-w,o+w"表示把三元组变成rwxr-xrw-。
图1-85 修改文件权限示例(三)
8.搜索文件或目录
我们通常要查找文件,想要知道哪个文件放在哪里。Linux系统中有相当优秀的搜索工具。通过这些搜索工具,用户可以很方便地查找所需的文件。
1)grep
在Linux系统中,grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并输出匹配的行。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。其语法如下。
grep [options]
常用参数介绍如下。
● -c:只输出匹配行的计数。
● -I:不区分大小写(只适用于单字符)。
● -h:在查询多个文件时不显示文件名。
● -l:在查询多个文件时只输出包含匹配字符的文件名。
● -n:显示匹配行及行号。
● -s:不显示不存在或无匹配文本的错误信息。
● -v:显示不包含匹配文本的所有行。
pattern正则表达式中主要参数的说明如下。
● \:忽略正则表达式中特殊字符的原有含义。
● ^:匹配正则表达式的开始行。
● $:匹配正则表达式的结束行。
● \<:从匹配正则表达式的行开始。
● \>:到匹配正则表达式的行结束。
● [ ]:表示单个字符,如[A]即A符合要求。
● [ - ]:表示范围,如[A-Z],即字母A~Z都符合要求 。
● .:表示所有的单个字符。
● :表示所有字符,长度可以为0。
【例 1-21】 显示所有以d开头的文件中包含test的行(见图1-86)。
图1-86 grep命令示例(一)
【例 1-22】 显示在aa、bb、cc文件中匹配test的行(见图1-87)。
图1-87 grep命令示例(二)
【例 1-23】 显示所有至少包含5个连续小写字符的字符串的行(见图1-88)。
图1-88 grep命令示例(三)
【例 1-24】 输出所有以north单词开头的行(见图1-89)。
图1-89 grep命令示例(四)
【例 1-25】 输出所有包含单词north的行(见图1-90)。
图1-90 grep命令示例(五)
2)which
which命令用于查找可执行文件的位置,该命令通过环境变量PATH所设置的路径进行搜索。其语法如下。
which 文件名
【例 1-26】 查找passwd文件的位置(见图1-91)。
图1-91 which命令示例
3)whereis
whereis命令用于根据设定好的目录查找文件。其语法如下。
whereis [-option] 文件名
参数说明如下。
● -b:只查找二进制文件。
● -m:只找说明文件。
和which命令不同,whereis命令并不是通过PATH环境变量查找文件的,而是根据自定义的一组目录来查找文件的。
【例 1-27】 查找与passwd相关的文件(见图1-92)。
图1-92 whereis命令示例(一)
【例 1-28】 查找二进制文件passwd(使用-b参数,见图1-93)。
图1-93 whereis命令示例(二)
4)find
find命令用于对指定目录及其所有子目录进行文件搜索。其语法如下。
find [path] [-option] 文件名
参数-name file表示寻找文件名为file的文件(可用通配符)。
【例 1-29】 若用户想查找一个文件,只记得它在/etc目录下,是否在某个子目录下却不清楚,名字也记不清了,只知道名字中有httpd这个单词,则可以用图1-94所示命令。
图1-94 find命令示例
因为使用find命令查找数据比较消耗硬盘空间(find命令直接查找硬盘数据),所以可以使用locate命令。
5)locate
使用locate命令查找文件特别快,比find命令要快很多。其语法如下。
locate 文件名
【例 1-30】 使用locate命令查找passwd。
在执行locate命令时,如果报告图1-95所示错误,则先执行updatedb命令,然后执行locate命令(见图1-96)。
图1-95 报错信息
图1-96 locate命令示例
使用locate命令查找文件很快,是因为locate命令是从已建立的数据库/var/lib/mlocate中查找数据的,而不是直接在硬盘上查找数据。但是locate命令也有限制,例如,有时候我们可能会找到一些已经删除的文件,或者找不到刚刚新建的文件。这是由数据库文件的更新机制导致的。基本上Linux系统每次启动会更新数据库文件,但是我们最近创建或者删除的文件并没有被数据库记录,导致查询结果出现问题。针对这种情况,可以用updatedb命令手动更新数据库。
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。