ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 2.2 文件内容查阅 如果我们要查阅一个文件的内容时,该如何是好呢?这里有相当多有趣的指令可以来分享一下: 最常使用的显示文件内容的指令可以说是 cat 与 more 及 less 了!此外,如果我们要查看一个很大型的文件 (好几百MB时),但是我们只需要后端的几行字而已,那么该如何是好?呵呵!用 tail 呀,此外, tac 这个指令也可以达到这个目的喔!好了,说说各个指令的用途吧! * cat 由第一行开始显示文件内容 * tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写! * nl 显示的时候,顺道输出行号! * more 一页一页的显示文件内容 * less 与 more 类似,但是比 more 更好的是,他可以往前翻页! * head 只看头几行 * tail 只看尾巴几行 * od 以二进制的方式读取文件内容! ### 直接检视文件内容 直接查阅一个文件的内容可以使用 cat/tac/nl 这几个指令啊! * cat (concatenate) ``` [root@study ~]# cat [-AbEnTv] 选项与参数: -A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已; -b :列出行号,仅针对非空白行做行号显示,空白行不标行号! -E :将结尾的断行字符 $ 显示出来; -n :打印出行号,连同空白行也会有行号,与 -b 的选项不同; ``` * tac (反向列示) ``` [root@study ~]# tac /etc/issue Kernel \r on an \m \S # 与刚刚上面的范例一比较,是由最后一行先显示! ``` tac 刚好是将 cat 反写过来,所以他的功能就跟 cat 相反啦, cat 是由“第一行到最后一行连续显示在屏幕上”,而 tac 则是“ 由最后一行到第一行反向在屏幕上显示出来 ”。 * nl (添加行号打印) ``` [root@study ~]# nl [-bnw] 文件 选项与参数: -b :指定行号指定的方式,主要有两种: -b a :表示不论是否为空行,也同样列出行号(类似 cat -n); -b t :如果有空行,空的那一行不要列出行号(默认值); -n :列出行号表示的方法,主要有三种: -n ln :行号在屏幕的最左方显示; -n rn :行号在自己字段的最右方显示,且不加 0 ; -n rz :行号在自己字段的最右方显示,且加 0 ; ``` nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能。 ### 可翻页检视 前面提到的 nl 与 cat, tac 等等,都是一次性的将数据一口气显示到屏幕上面,那有没有可以进行一页一页翻动的指令,那就是 more 与 less 。 * more (一页一页翻动) ``` [root@study ~]# more /etc/man_db.conf # # # This file is used by the man-db package to configure the man and cat paths. # It is also used to provide a manpath for those without one by examining # their PATH environment variable. For details see the manpath(5) man page. # .....(中间省略)..... --More--(28%) <== 重点在这一行喔!你的光标也会在这里等待你的指令 ``` 仔细的给他看到上面的范例,如果 more 后面接的文件内容行数大于屏幕输出的行数时, 就会出现类似上面的图示。重点在最后一行,最后一行会显示出目前显示的百分比, 而且还可以在最后一行输入一些有用的指令喔!在 more 这个程序的运行过程中,你有几个按键可以按的: > 空白键 (space):代表向下翻一页; > Enter :代表向下翻“一行”; > :f :立刻显示出文件名以及目前显示的行数; > q :代表立刻离开 more ,不再显示该文件内容。 > b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。 ***** * less (一页一页翻动) ``` [root@study ~]# less /etc/man_db.conf # # # This file is used by the man-db package to configure the man and cat paths. # It is also used to provide a manpath for those without one by examining # their PATH environment variable. For details see the manpath(5) man page. # .....(中间省略)..... : <== 这里可以等待你输入指令! ``` less 的用法比起 more 又更加的有弹性,怎么说呢?在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,呵呵!就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件,你瞧,是不是更容易使用来观看一个文件的内容了呢! 除此之外,在 less 里头可以拥有更多的“搜寻”功能喔!不止可以向下搜寻,也可以向上搜寻~ 实在是很不错用~基本上,可以输入的指令有: * 空白键 :向下翻动一页; * [pagedown]:向下翻动一页; * [pageup] :向上翻动一页; * /字串 :向下搜寻“字串”的功能; * ?字串 :向上搜寻“字串”的功能; * n :重复前一个搜寻 (与 / 或 ? 有关!) * N :反向的重复前一个搜寻 (与 / 或 ? 有关!) * g :前进到这个数据的第一行去; * G :前进到这个数据的最后一行去 (注意大小写); * q :离开 less 这个程序; 你是否会觉得 less 使用的画面与环境与 man page 非常的类似呢?没错啦!因为man这个指令就是调用 less 来显示说明文档的内容的! ### 数据撷取 我们可以将输出的数据作一个最简单的撷取,那就是取出文件前面几行 (head) 或取出后面几行 (tail) 文字的功能。 不过,要注意的是, head 与 tail 都是以“行”为单位来进行数据撷取的。 * head (取出前面几行) ``` [root@study ~]# head [-n number] 文件 选项与参数: -n :后面接数字,代表显示几行的意思 [root@study ~]# head /etc/man_db.conf # 默认的情况中,显示前面十行!若要显示前 20 行,就得要这样: [root@study ~]# head -n 20 /etc/man_db.conf 范例:如果后面100行的数据都不打印,只打印/etc/man_db.conf的前面几行,该如何是好? [root@study ~]# head -n -100 /etc/man_db.conf ``` head 的英文意思就是“头”啦,那么这个东西的用法自然就是显示出一个文件的前几行啰! 没错!就是这样!若没有加上 -n 这个选项时,默认只显示十行,若只要一行呢?那就加入“ head -n 1 filename ”即可! 另外那个 -n 选项后面的参数较有趣,如果接的是负数,例如上面范例的-n -100时,代表列前的所有行数, 但不包括后面100行。举例来说 CentOS 7.1 的 /etc/man_db.conf 共有131行,则上述的指令“head -n -100 /etc/man_db.conf” 就会列出前面31行,后面100行不会打印出来了。 * tail (取出后面几行) ``` [root@study ~]# tail [-n number] 文件 选项与参数: -n :后面接数字,代表显示几行的意思 -f :表示持续侦测后面所接的文件名,要等到按下[ctrl]-c才会结束tail的侦测 [root@study ~]# tail /etc/man_db.conf # 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样: [root@study ~]# tail -n 20 /etc/man_db.conf 范例一:如果不知道/etc/man_db.conf有几行,却只想列出100行以后的数据时? [root@study ~]# tail -n +100 /etc/man_db.conf 范例二:持续侦测/var/log/messages的内容 [root@study ~]# tail -f /var/log/messages <==要等到输入[crtl]-c之后才会离开tail这个指令的侦测! ``` 有 head 自然就有 tail ( 尾巴 ) 啰!没错!这个 tail 的用法跟 head 的用法差不多类似,只是显示的是后面几行就是了!默认也是显示十行,若要显示非十行,就加 -n number 的选项即可。 > 例题:假如我想要显示 /etc/man_db.conf 的第 11 到第 20 行呢?答:这个应该不算难,想一想,在第 11 到第 20 行,那么我取前 20 行,再取后十行,所以结果就是:“ head -n 20 /etc/man_db.conf | tail -n 10 ”,这样就可以得到第 11 到第 20 行之间的内容了! > 例题:承上一题,那如果我想要列出正确的行号呢?就是屏幕上仅列出 /etc/man_db.conf 的第 11 到第 20 行,且有行号存在?答:我们可以通过 cat -n 来带出行号,然后再通过 head/tail 来撷取数据即可!所以就变成如下的模样了: > cat -n /etc/man_db.conf | head -n 20 | tail -n 10 ### 修改文件时间或创建新文件: touch > 作用: > 1. 如果文件不存在,则创建一个空文件 > 2. 如果文件或目录已存在,则用系统时间更新它的修改时间 > 格式: > touch 文件名 > 示例: > touch newfile