在 Linux 系统中,一切都是文件,对服务程序进行配置自然也就是编辑程序的配置文件。
1.cat命令
cat 命令用于查看纯文本文件(内容较少的),英文全称为“concatenate”,语法格式为“cat [参数] 文件名称”。
Linux 系统中有多个用于查看文本内容的命令,每个命令都有自己的特点,比如这个 cat 命 令就是用于查看内容较少的纯文本文件。
在查看文本内容时还想顺便显示行号的话,不妨在 cat 命令后面追加一个-n 参数:
[root@rhel-8 ~]# cat -n initial-setup-ks.cfg1#version=RHEL82# X Window System configuration information3 xconfig --startxonboot4# License agreement5 eula --agreed
2.more命令
more 命令用于查看纯文本文件(内容较多的),语法格式为“more [参数] 文件名称”。
对于长篇的文本内容,推荐使用 more 命令来查看。more 命令会在最下面使用百分比的形式来提示您已经阅读了多少内容;还可以使用空格键或回车 键向下翻页:
[root@rhel-8 ~]# more initial-setup-ks.cfg#version=RHEL8# X Window System configuration informationxconfig --startxonboot.... ... --More--(76%)
3.head命令
head 命令用于查看纯文本文件的前 N 行,语法格式为“head [参数] 文件名称”。
在阅读文本内容时,谁也难以保证会按照从头到尾的顺序往下看完整个文件。如果只想 查看文本中前 5 行的内容,该怎么办呢?head 命令就能派上用场了:
[root@rhel-8 ~]# head -n 5 initial-setup-ks.cfg#version=RHEL8# X Window System configuration informationxconfig --startxonboot# License agreementeula --agreed
4.tail命令
tail 命令用于查看纯文本文件的后 N 行或持续刷新文件的最新内容,语法格式为“tail [参 数] 文件名称”
如需要查看文本内容的最后 5 行,这时就需要用到 tail 命令了。tail 命令的操作方法与 head 命令非常相似,只需要执行“tail -n 5 文件名称”命令就可以达到这样的效果:
[root@rhel-8 ~]# tail -n 5 initial-setup-ks.cfg%anaconda pwpolicy root --minlen=6--minquality=1--notstrict--nochanges--notemptypwpolicy user --minlen=6--minquality=1--notstrict--nochanges--emptyokpwpolicy luks --minlen=6--minquality=1--notstrict--nochanges--notempty%end
tail 命令最强悍的功能是能够持续刷新一个文件的内容,当想要实时查看最新的日志文件 时,这特别有用,此时的命令格式为“tail -f 文件名称”:
[root@rhel-8 ~]# tail -f /var/log/messagesNov 1219:26:58 rhel-8 dnf[4838]: Updating Subscription Management repositories. Nov 1219:26:58 rhel-8 dnf[4838]: Unable to read consumer identity Nov 1219:26:58 rhel-8 dnf[4838]: This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. Nov 1219:26:59 rhel-8 dnf[4838]: CentOS - AppStream - mirrors.aliyun.com 3.7 kB/s | 4.3 kB 00:01
5.tr命令
tr 命令用于替换文本内容中的字符,英文全称为“translate”,语法格式为“tr [原始字符] [目标字符]”。
在很多时候,我们想要快速地替换文本中的一些词汇,又或者想把整个文本内容都进行 替换。如果进行手工替换,难免工作量太大,尤其是需要处理大批量的内容时,进行手工替 换更是不现实。这时,就可以先使用 cat 命令读取待处理的文本,然后通过管道符把这些文本内容传递给 tr 命令进行替换操作即可。例如,把某个文本内容中的英文全部 替换为大写:
[root@rhel-8 ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z]#VERSION=RHEL8IGNOREDISK --ONLY-USE=NVME0N1 AUTOPART --TYPE=LVM # PARTITION CLEARING INFORMATIONCLEARPART --NONE--INITLABEL
6.wc命令
wc 命令用于统计指定文本文件的行数、字数或字节数,英文全称为“word counts”,语 法格式为“wc [参数] 文件名称”。
wc 命令用于统计文本的行数、字数、字节数等。
在 Linux 系统中,/etc/passwd 是用于保存所有用户信息的文件,要统计当前系统中有多 少个用户,可以使用下面的命令来进行查询:
[root@rhel-8 ~]# wc -l /etc/passwd46 /etc/passwd
7.stat命令
stat 命令用于查看文件的具体存储细节和时间等信息,英文全称为“status”,语法格式为 “stat 文件名称”。
Linux 系统中的文件包 含 3 种时间状态,分别是 Access Time(内容最后一次被访问的时间,简称为 Atime),ModifyTime(内容最后一次被修改的时间,简称为 Mtime)以及 Change Time(文件属性最后一次被 修改的时间,简称为 Ctime)。
下面使用 state 命令查看文件的这 3 种时间状态信息:
[root@rhel-8 ~]# stat anaconda-ks.cfg File: anaconda-ks.cfg Size: 1289 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 101517273 Links: 1Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) Context: system_u:object_r:admin_home_t:s0 Access: 2022-11-1220:08:53.197037950 +0800Modify: 2022-11-0915:47:08.420741972 +0800Change: 2022-11-0915:47:08.420741972 +0800 Birth: -
8.grep命令
grep 命令用于按行提取文本内容,语法格式为“grep [参数] 文件名称”。
grep 命令是用途最广泛的文本搜索匹配工具。
grep 命令两个最常用的参数:
➢ -n 参数用来显示搜索到的信息的行号;
➢ -v 参数用于反选信息(即没有包含关键词的所有信息行)。
在 Linux 系统中,/etc/passwd 文件保存着所有的用户信息,而一旦用户的登录终端被设 置成/sbin/nologin,则不再允许登录系统,因此可以使用 grep 命令查找出当前系统中不允许登 录系统的所有用户的信息:
[root@rhel-8 ~]# grep /sbin/nologin /etc/passwdbin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
9.cut命令
cut 命令用于按“列”提取文本内容,语法格式为“cut [参数] 文件名称”。
系统文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,先查看一下:
[root@rhel-8 ~]# head -n 2 /etc/passwdroot:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin
一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键 词即可。但是如果按“列”搜索,不仅要使用-f 参数设置需要查看的列数,还需要使用-d 参 数来设置间隔符号。
接下来使用下述命令尝试提取出 passwd 文件中的用户名信息,即提取以冒号(:)为间 隔符号的第一列内容:
[root@rhel-8 ~]# cut -d : -f 1 /etc/passwdroot bin daemon
10.diff命令
diff 命令用于比较多个文件之间内容的差异,英文全称为“different”,语法格式为“diff [参 数] 文件名称 A 文件名称 B”。
在使用 diff 命令时,不仅可以使用--brief 参数来确认两个文件是否相同,还可以使用-c 参数来详细比较出多个文件的差异之处。这绝对是判断文件是否被篡改的有力神器。例如, 先使用 cat 命令分别查看 a.txt 和 b.txt 文件的内容,然后进行比较:
[root@rhel-8 ~]# cat a.txt122[root@rhel-8 ~]# cat b.txt122333
接下来使用 diff --brief 命令显示比较后的结果,判断文件是否相同:
[root@rhel-8 ~]# diff --brief a.txt b.txtFiles a.txt and b.txt differ
最后使用带有-c 参数的 diff 命令来描述文件内容具体的不同:
[root@rhel-8 ~]# diff -c a.txt b.txt*** a.txt 2022-11-1220:24:05.869075411 +0800--- b.txt 2022-11-1220:23:55.444074983 +0800*************** *** 1,2 **** ---1,3 ----122+333
11.uniq命令
uniq 命令用于去除文本中连续的重复行,英文全称为“unique”,语法格式为“uniq [参数] 文 件名称”。
由 uniq 命令的英文全称 unique(独特的,唯一的)可知,该命令的作用是用来去除文本 文件中连续的重复行,中间不能夹杂其他文本行(非相邻的默认不会去重)—去除了重复 的,保留的都是唯一的,自然也就是“独特的”“唯一的”了。
我们使用 uniq 命令对两个文本内容进行操作,区别一目了然:
[root@rhel-8 ~]# cat c.txt112222333[root@rhel-8 ~]# uniq c.txt122333
12.sort命令
sort 命令用于对文本内容进行再排序,语法格式为“sort [参数] 文件名称”。
首先,在执行 sort 命令后默认会按照字母顺序进行排序,非常方便:
[root@rhel-8 ~]# cat d.txtf h c e b a [root@rhel-8 ~]# sort d.txta b c e f h
此外,与 uniq 命令不同,sort 命令是无论内容行之间是否夹杂有其他内容,只要有两个 一模一样的内容行,立马就可以使用-u 参数进行去重操作:
[root@rhel-8 ~]# cat c.txt1222233322[root@rhel-8 ~]# sort -u c.txt122333
想对数字进行排序?一点问题都没有,而且完全不用担心出现 1 大于 20 这种问题(因为 有些命令只比较数字的第一位,忽略了十、百、千的位)
最后,我们挑战一个“高难度”的小实验。下面的内容节选自/etc/passwd 文件中的前 5 个字段,并且进行了混乱排序。
[root@rhel-8 ~]# cat user.txtbin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin root:x:0:0:root:/root:/bin/bash
不难看出,上面其实是 5 个字段,各个字段之间是用了冒号进行间隔,如果想以第 3 个 字段中的数字作为排序依据,那么可以用-t 参数指定间隔符,用-k 参数指定第几列,用-n 参 数进行数字排序来搞定:
[root@rhel-8 ~]# sort -t : -k 3 -n user.txtroot:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin