一.学习的内容
在Linux系统中,一切都是文件,对服务程序进行配置自然也就是编辑程序的配置文件。这次主要学习了查看文本文件的Linux命令。
1、cat
cat命令用于查看纯文本且内容较少的文件。命令格式:cat [参数] 文件名称
如果在查看文本内容时还想顺带显示行号的话,可以加 -n 参数,如下图所示:
2、more
more命令用于查看纯文本且内容较多的文件。命令格式:more [参数] 文件名称
如果说想要查看非常长的配置文件,那么使用cat就会导致信息一股脑的全部输出在屏幕上,不利于查阅和观看。此时,若使用 more 命令就可以控制进度,如下图所示:
可以看到,它会在最下端显示 已读40%,且按空格键或回车键会继续翻页。
3、head
head命令用于查看某个纯文本文件的前N行。命令格式:head [参数] 文件名称
当想查看文本文件的前10行时,可以加上参数 -n,如下图所示:
4、tail
tail命令用于显示纯文本文件的后N行或持续刷新文件的最新内容。
命令格式:tail [参数] 文件名称
当想查看文本文件的后N行时,可以加上参数 -n ,如下图所示:
tail 命令最强悍的功能就是能够持续刷新一个文件的内容,当想实时查看最新的日志文件时,这特别有用,此时的命令格式为:tail -f 文件名称 。如下图所示:
5、tr
tr命令用于替换文本内容中的字符,英文全称为“transform”。
命令格式:tr [原始字符] [目标字符]
在很多时候,我们想要快速地替换文本中的一些词汇,又或者想把整个文本内容都进行替换。如果进行手动替换,工作量太大,尤其是需要处理大批量的内容时,进行手工替换更是不现实的。这时,就可以先使用 cat 命令读取待处理的文本,然后通过管道符把这些文本内容传递给 tr 命令进行替换操作即可。如下图所示,把某个文本内容中的英文全部替换成大写:
6、wc
wc命令用于统计指定文本文件的行数、字数或字节数,英文全称“word count”
命令格式:wc [参数] 文件名称
下表是 wc 命令的参数及其作用
参数 | 作用 |
-l | 只显示行数 |
-w | 只显示单词数 |
-c | 只显示字节数 |
执行 wc -l 命令显示文本文件中的行数,如下图所示:
执行 wc -lwc 命令 显示行数、单词数以及字节数:
7、stat
stat命令用于查看文件的具体存储细节和时间等信息,英文全称status。
命令格式:stat 文件名称
Linux系统中包含三种时间状态,分别是Access Time(内容最后一次被访问时间,简称 Atime)、Modify Time(内容最后一次被修改时间,简称Mtime)以及Change Time(文件属性最后一次被修改的时间,简称 Ctime)。下面使用stat命令查看文件的这三种时间状态信息:
如上图所示,stat 命令可以查看文本文件和目录文件的信息。
8、grep
grep命令用于按行提取文本内容。
命令格式:grep [参数] 关键词 文本文件 或 grep 关键词 [参数] 文本文件
下表是grep 命令的常用参数及其作用。
参数 | 作用 |
-n | 除了内容外,还要显示行号 |
-v | 反向选择——列出不包含关键词的行 |
-i | 不区分大小写 |
-c | 输出包含关键词的总行数(无内容) |
-I | 忽略二进制程序文件 |
-b | 将可执行文件当作文本 |
如下图所示,不加参数进行搜索:
使用 -n 参数进行搜索,可以看到输出的每一行都有行号:
使用 -v 参数进行搜索,可以看到输出了不包含 na 的所有行:
使用 -i 参数进行搜索,可以发现,在输出中有包含 NA 的行
使用 -c 参数进行搜索,可以发现,只输出了包含关键词 na 的总行数。
9、cut
cut命令用于按列提取文本内容。命令格式:cut [参数] 文件名称
在Linux系统中,/etc/passwd 是用于保存所有用户信息的文件。系统文件在保存用户数据信息时,每一项值之间一般用冒号来间隔的,先查看一下:
一般而言,基于行的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是,如果按列搜索,不仅要使用 -f 参数设置需要查看的列数,还需要使用 -d 参数来设置间隔符号。接下来,使用下述命令尝试提取 passwd 文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:
10、diff
diff命令用于比较多个文件之间内容的差异,英文全称为different。
命令格式:diff [参数] 文件名称A 文件名称B
在使用 diff 命令时,不仅可以使用 --brief 参数来确认两个文件是否相同,还可以使用 -c 参数来详细比较出多个文件的差异之处。这绝对是判断文件是否被篡改的有利神器。
如上图所示,diff命令可以用参数 --brief 去确认两个文件是否相同,若不相同输出differ;
若相同,则什么都不输出。也可以使用 -c 参数来输出对比的详细信息, “!”表示对应行内容疑似被修改;“-” 表示另一个文件内没有该内容且对应行也不相同(只有文件1中有);“+”表示表示另一个文件内没有该内容且对应行也不相同(只有文件2中有)。
11、uniq
uniq命令用于去除文本中连续的重复行,英文全称 unique。
命令格式:uniq [参数] 文件名称
该命令的作用是用来去除文本文件中连续的重复行,中间不能夹杂其他文本行(非相邻的默认不会去除)
12、sort
sort命令用于对文本内容的再排序。命令格式为:sort [参数] 文件名称
有时文本内容顺序不正确,一行行地手动修改实在太麻烦。此时,使用sort命令就再合适不过了。下表是sort 命令的参数及其作用:
参数 | 作用 |
-n | 以数值型排序 |
-t | 指定间隔符 |
-k | 设置字段范围 |
-r | 反向排序 |
-u | 去除重复行 |
-b | 忽略缩进和空格 |
-f | 忽略大小写 |
首先,在执行sort 命令后默认会按字母顺序进行排序:
此外,于uniq 命令不同,sort 命令无论内容行之间是否夹杂有其他内容,只要有两个一模一样的内容行,立马就可以使用 -u 参数进行去重操作:
最后,还可以对数字进行排序。例如:我创建了一个每行有三个字段的文件,且每个字段用冒号隔开,使用命令 “sort -k 3 -t : -n 文件名称”,对文件进行排序
此外,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仍然会在需要时被更新,以确保它们保持与文件访问行为的一致性。