Linux系统的文件和目录—测试工程师核心开发技术(4)

发表于:2020-1-13 11:16

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:51Testing教研团队    来源:51Testing软件测试网原创

分享:
  【例 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软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
22/2<12
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号