第五章 文件内容显示
5.1 浏览普通文件内容

[root@master test]# cat /etc/ssh/sshd_config
[root@master test]# head /etc/ssh/sshd_config
[root@master test]# tail /etc/ssh/sshd_config
[root@master test]# more /etc/ssh/sshd_config
[root@master test]# less /etc/ssh/sshd_config
5.2 过滤文件内容显示 ——grep
( 1 )功能:在指定的普通文件中查找并显示含有指定字符串的行,也可与管道符一起使用
( 2 )格式: grep 选项 …… 关键字符串 文件名称 ……
( 3 )简单示例
在 Linux 系统中, /etc/passwd 文件是保存着所有的用户信息,而一旦用户的登录终端被设置成 /sbin/nologin ,则不再允许登录系统,因此可以使用grep 命令来查找出当前系统中不允许登录系统的所有用户信息:
[root@kongd ~]# grep /sbin/nologin /etc/passwd
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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
………………省略部分输出过程信息………………
( 4 )使用特殊符号进行字符串的匹配
[root@master test]# grep a /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
………………省略部分输出过程信息………………
[root@master test]# grep ^a /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@master test]# grep h$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
centos:x:1000:1000:centos:/home/centos:/bin/bash
[root@master test]# grep -v h$ /etc/passwd
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
sync:x:5:0:sync:/sbin:/bin/sync
#同时过滤多个文件
[root@localhost ~]# grep root /etc/passwd /etc/shadow /etc/group
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/shadow:root:$6$a77.FJemVmiUfVvO$/zks5NepAMVj6kUZtACVEsV7DezhIQ19KF64u4.fjbLXbkgvwcqI9
7iiVleMvf0vZuwWZubYX8LaiS3YKzx8u1::0:99999:7:::
/etc/group:root:x:0:
………………省略部分输出过程信息………………
#-i不区分大小写
[root@localhost ~]# grep -ri ^root /etc/
#过滤一个目录下的所有文件的内容
[root@localhost ~]# grep -r ^root /etc/
/etc/pki/ca-trust/extracted/README:root CA certificates.
/etc/pki/ca-trust/extracted/java/README:root CA certificates.
/etc/pki/ca-trust/extracted/openssl/README:root CA certificates.
/etc/pki/ca-trust/extracted/pem/README:root CA certificates.
/etc/gshadow-:root:::
/etc/group-:root:x:0:
/etc/shadow-:root:$6$a77.FJemVmiUfVvO$/zks5NepAMVj6kUZtACVEsV7DezhIQ19KF64u4.fjbLXbkgvwcqI
97iiVleMvf0vZuwWZubYX8LaiS3YKzx8u1::0:99999:7:::
/etc/group:root:x:0:
/etc/gshadow:root:::
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/services:rootd 1094/tcp # ROOTD
/etc/services:rootd 1094/udp # ROOTD
/etc/shadow:root:$6$a77.FJemVmiUfVvO$/zks5NepAMVj6kUZtACVEsV7DezhIQ19KF64u4.fjbLXbkgvwcqI9
7iiVleMvf0vZuwWZubYX8LaiS3YKzx8u1::0:99999:7:::
grep: /etc/selinux/targeted/policy/policy.33:匹配到二进制文件
/etc/selinux/targeted/seusers:root:unconfined_u:s0-s0:c0.c1023
/etc/passwd-:root:x:0:0:root:/root:/bin/bash
/etc/kernel/cmdline:root=UUID=5513881a-df41-46c1-8b45-78c447999438 ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=UUID=3408d23d-d0a6-42df-8fac-5fcff03d3deb rhgb quiet
/etc/cockpit/disallowed-users:root
/etc/sudoers:root ALL=(ALL) ALL
[root@localhost ~]# grep -v [#] /etc/httpd/conf/httpd.conf
[root@localhost ~]# grep -v [#] /etc/httpd/conf/httpd.conf | cat -b
5.3 切割显示 cut
cut 命令用于按列提取文本内容,语法为: cut [ 选项 ] 文件名称
系统文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,先查看一下:
[root@kongd ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
一般而言,按基于 “ 行 ” 的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果按列搜索,不仅要使用-f 参数来设置需要看的列数,还需要使用 -d 参数来设置间隔符号。
接下来使用下述命令尝试提取出 passwd 文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容
[root@kongd ~]# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
………………省略部分输出信息………………
[root@server ~]# cut -c 3 /etc/passwd | head -3
o
n
e
[root@linuxcool ~]# cut -c 1-4 /etc/passwd | head -6
root
bin:
daem
adm:
lp:x
sync
5.4 排序显示 sort
sort 命令用于对文本内容进行排序显示,语法为: sort [ 选项 ] 文件名称

首先, sort 命令执行后默认会按照字母顺序进行排序,非常方便:
[root@kongd ~]# cat fruit.txt
banana
pear
apple
orange
raspaberry
[root@kongd ~]# sort fruit.txt
apple
banana
orange
pear
raspaberry
sort -u 参数进行去重操作:
[root@kongd ~]# cat number.txt
45
12
3
98
82
67
24
56
9
[root@kongd ~]# sort -n number.txt
3
9
12
24
45
56
67
82
98
最后,我们挑战一个 “ 高难度 ” 的小实验。下面的内容是节选自 /etc/passwd 文件中前五个字段的内容,并进行混乱排序后的样子:
[root@kongd ~]# cat user.txt
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
polkitd:x:998:996:User for polkitd
geoclue:x:997:995:User for geoclue
rtkit:x:172:172:RealtimeKit
pulse:x:171:171:PulseAudio System Daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
unbound:x:996:991:Unbound DNS resolver
rpc:x:32:32:Rpcbind Daemon
gluster:x:995:990:GlusterFS daemons
不难看出上面其实是五个字段,各个字段之间是用了冒号进行间隔,如果想以第三个字段中的数字作为排序依据,那么就可以用-t 参数指定间隔符, -k 参数指定第几列, -n 参数进行数字排序来搞定:
[root@kongd ~]# sort -t : -k 3 -n user.txt
rpc:x:32:32:Rpcbind Daemon
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
pulse:x:171:171:PulseAudio System Daemon
rtkit:x:172:172:RealtimeKit
gluster:x:995:990:GlusterFS daemons
unbound:x:996:991:Unbound DNS resolver
geoclue:x:997:995:User for geoclue
polkitd:x:998:996:User for polkitd
5.5 去重显示 uniq
uniq 命令用于去除文本中连续的重复行,语法为: uniq [ 选项 ] 文件名称
我们对两个文本内容进行操作,区别一目了然:
[root@kongd ~]# cat uniq.txt
Welcome to kongd.com
Welcome to kongd.com
Welcome to kongd.com
Welcome to kongd.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[root@kongd ~]# uniq uniq.txt
Welcome to kongd.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[root@master ~]# uniq -c uniq.txt
4 Welcome to kongd.com
1 Red Hat certified
1 Free Linux Lessons
1 Professional guidance
1 Linux Course
5.6 替换文件中的字符显示 tr
tr 指令从标准输入读取数据,经过替换或者删除后,将结果输出到标准输出。
语法 : tr [OPTION]…SET1[SET2]
参数说明:
-c 反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
-d 删除指令字符
-s 缩减连续重复的字符成指定的单个字符
示例:将文件 testfile 中的小写字母全部转换成大写字母,可使用如下命令:
[root@master ~]#cat testfile |tr a-z A-Z
#将指定文件中的小写字母转换成大写字母后输出内容到终端界面: [root@linuxcool ~]# tr [a-z] [A-Z] <
File.cfg
#VERSION=RHEL8
IGNOREDISK --ONLY-USE=SDA
AUTOPART --TYPE=LVM
# PARTITION CLEARING INFORMATION
CLEARPART --ALL --INITLABEL --DRIVES=SDA
# USE GRAPHICAL INSTALL
………………省略部分输出信息………………