Linux学习记录8——文本文件命令

一.学习的内容

        在Linux系统中,一切都是文件,对服务程序进行配置自然也就是编辑程序的配置文件。这次主要学习了查看文本文件的Linux命令。

1、cat

        cat命令用于查看纯文本且内容较少的文件。命令格式:cat  [参数]  文件名称

        如果在查看文本内容时还想顺带显示行号的话,可以加 -n 参数,如下图所示:

图1  cat命令

2、more

        more命令用于查看纯文本且内容较多的文件。命令格式:more [参数] 文件名称

        如果说想要查看非常长的配置文件,那么使用cat就会导致信息一股脑的全部输出在屏幕上,不利于查阅和观看。此时,若使用 more 命令就可以控制进度,如下图所示:

图2  mere命令

        可以看到,它会在最下端显示 已读40%,且按空格键或回车键会继续翻页。

3、head

        head命令用于查看某个纯文本文件的前N行。命令格式:head [参数] 文件名称

        当想查看文本文件的前10行时,可以加上参数 -n,如下图所示:

图3  head命令

4、tail

        tail命令用于显示纯文本文件的后N行持续刷新文件的最新内容

        命令格式:tail [参数] 文件名称 

        当想查看文本文件的后N行时,可以加上参数 -n ,如下图所示:

图4    用tail查看文本文件后10行

         tail 命令最强悍的功能就是能够持续刷新一个文件的内容,当想实时查看最新的日志文件时,这特别有用,此时的命令格式为:tail -f 文件名称 。如下图所示:

图5  tail -f 命令

5、tr

        tr命令用于替换文本内容中的字符,英文全称为“transform”。

        命令格式:tr [原始字符] [目标字符]

        在很多时候,我们想要快速地替换文本中的一些词汇,又或者想把整个文本内容都进行替换。如果进行手动替换,工作量太大,尤其是需要处理大批量的内容时,进行手工替换更是不现实的。这时,就可以先使用 cat 命令读取待处理的文本,然后通过管道符把这些文本内容传递给 tr 命令进行替换操作即可。如下图所示,把某个文本内容中的英文全部替换成大写:

图6  tr命令

6、wc

        wc命令用于统计指定文本文件的行数、字数或字节数,英文全称“word count”

        命令格式:wc [参数] 文件名称

        下表是 wc 命令的参数及其作用

参数作用
-l只显示行数
-w只显示单词数
-c只显示字节数

        执行 wc -l 命令显示文本文件中的行数,如下图所示:

图7  只显示行数

         执行 wc -lwc 命令 显示行数、单词数以及字节数:

图8  三个都显示

7、stat

        stat命令用于查看文件的具体存储细节和时间等信息,英文全称status。

        命令格式:stat 文件名称

        Linux系统中包含三种时间状态,分别是Access Time(内容最后一次被访问时间,简称 Atime)、Modify Time(内容最后一次被修改时间,简称Mtime)以及Change Time(文件属性最后一次被修改的时间,简称 Ctime)。下面使用stat命令查看文件的这三种时间状态信息:

图9   stat命令

        如上图所示,stat 命令可以查看文本文件和目录文件的信息。

8、grep

        grep命令用于按行提取文本内容

        命令格式:grep [参数] 关键词 文本文件   或   grep 关键词 [参数]  文本文件

        下表是grep 命令的常用参数及其作用。

参数作用
-n除了内容外,还要显示行号
-v反向选择——列出不包含关键词的行
-i不区分大小写
-c输出包含关键词的总行数(无内容)
-I忽略二进制程序文件
-b将可执行文件当作文本

        如下图所示,不加参数进行搜索: 

图10  不加参数搜索

         使用 -n 参数进行搜索,可以看到输出的每一行都有行号:

图11  使用 -n 参数

         使用 -v 参数进行搜索,可以看到输出了不包含 na 的所有行:

图12  使用-v参数

         使用 -i 参数进行搜索,可以发现,在输出中有包含 NA  的行

图13  使用-i参数

         使用 -c 参数进行搜索,可以发现,只输出了包含关键词 na 的总行数。

图14   使用-c参数

9、cut

        cut命令用于按列提取文本内容。命令格式:cut  [参数]  文件名称

        在Linux系统中,/etc/passwd 是用于保存所有用户信息的文件。系统文件在保存用户数据信息时,每一项值之间一般用冒号来间隔的,先查看一下:

图15  查看用户数据信息

        一般而言,基于行的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是,如果按列搜索,不仅要使用 -f 参数设置需要查看的列数,还需要使用 -d 参数来设置间隔符号。接下来,使用下述命令尝试提取 passwd 文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:

图16        提取以冒号为间隔符的第一列内容

10、diff

        diff命令用于比较多个文件之间内容的差异,英文全称为different。

        命令格式:diff  [参数]  文件名称A  文件名称B

        在使用 diff 命令时,不仅可以使用 --brief 参数来确认两个文件是否相同,还可以使用 -c 参数来详细比较出多个文件的差异之处。这绝对是判断文件是否被篡改的有利神器。

图17   diff命令

        如上图所示,diff命令可以用参数 --brief 去确认两个文件是否相同,若不相同输出differ;

若相同,则什么都不输出。也可以使用 -c 参数来输出对比的详细信息, “!”表示对应行内容疑似被修改;“-” 表示另一个文件内没有该内容且对应行也不相同(只有文件1中有);“+”表示表示另一个文件内没有该内容且对应行也不相同(只有文件2中有)。

11、uniq

        uniq命令用于去除文本中连续的重复行,英文全称 unique。

        命令格式:uniq  [参数]  文件名称

        该命令的作用是用来去除文本文件中连续的重复行,中间不能夹杂其他文本行(非相邻的默认不会去除)

图18   使用uniq命令去除连续重复行

12、sort

        sort命令用于对文本内容的再排序。命令格式为:sort [参数] 文件名称

        有时文本内容顺序不正确,一行行地手动修改实在太麻烦。此时,使用sort命令就再合适不过了。下表是sort 命令的参数及其作用:

参数作用
-n以数值型排序
-t指定间隔符
-k设置字段范围
-r反向排序
-u去除重复行
-b忽略缩进和空格
-f忽略大小写

        首先,在执行sort 命令后默认会按字母顺序进行排序:

图19   默认排序

        此外,于uniq 命令不同,sort 命令无论内容行之间是否夹杂有其他内容,只要有两个一模一样的内容行,立马就可以使用 -u 参数进行去重操作: 

图20   使用-u 参数去重

        最后,还可以对数字进行排序。例如:我创建了一个每行有三个字段的文件,且每个字段用冒号隔开,使用命令 “sort -k 3 -t : -n  文件名称”,对文件进行排序

图21  更为复杂的排序

        此外,sort 命令的排序都是以行为单位的 ,如下图所示:

图22 sort排序方式

        从上图不难发现,即使一行有多个用空格隔开的字段,也不会对它们进行排序。

 

二.本次学习遇到的问题

        执行 stat 命令时,发现Atime更新的不及时,明明刚访问过,却显示的是旧时间。

三、问题的答案及解决办法

        答:当文件被读取时,其访问时间会更新为当前时间。但是,许多Linux系统默认会启用一些优化选项,如relatime或noatime,以减少对文件系统的不必要写入操作,因此可能不会实时更新atime。即使atime不是实时更新,也可以在需要时更新。

        使用了 mount | grep " / ",可以看到文件系统/dev/mapper/rhel_linuxprobe-root被挂载在根目录/下,并且启用了relatime选项。这意味着该文件系统会使用相对访问时间(relatime)来更新文件的atime。

        当文件被读取,并且atime早于其内容修改时间(mtime)或元数据修改时间(ctime)时,文件的atime会被更新为当前时间。文件系统内核定期扫描文件系统时,会检查文件的atime是否需要更新,以保持atime与文件的访问时间相对一致。总的来说,虽然relatime选项会降低atime的更新频率,但文件的atime仍然会在需要时被更新,以确保它们保持与文件访问行为的一致性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值