🎯 本文专栏:Linux
🚀 作者主页:小度爱学习

1、浏览普通文件内容
| 命令 | 常用选项 | 说明 | 
|---|---|---|
| cat | -n 对输出内容中的所有行标注行号;-b 对输出内容中的非空行标注行号。 | 查看文本文件的内容 | 
| head | -num 指定需要显示文件num行的内容。 | 默认查看文档前10行内容 | 
| tail | -num 指定需要显示文件num行的内容;-f 使tail不停地去读取和显示文件最新的内容, 这样有实时监视的效果;tail命令更多的用于查看系统日志文件,按【Ctrl+C】键终止显示和跟踪。 | 默认查看文档后10行内容 | 
| more | -c 从顶部清屏然后显示文件内容。 | 分页查看文件内容;按Enter键向下逐行滚动;按空格键向下翻一屏、按b键;向上翻一屏;文件末尾时more会自动退出 | 
| less | -c 从顶部清屏然后显示文件内容;-N 其作用是在每行前添加输出行号。 | 分页查看文件内容;按Enter键向下逐行滚动;按空格键向下翻一屏、按b键向上翻一屏;按q键退出 | 
[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
 
说明:以上所有命令均可以结合管道符使用
2、过滤文件内容显示——grep
(1)功能:在指定的普通文件中查找并显示含有指定字符串的行,也可与管道符一起使用
 (2)格式: grep 选项…… 关键字符串 文件名称……
| 选项 | 说明 | 
|---|---|
| -c | 仅显示找到的行数 | 
| -i | 忽略大小写 | 
| -n | 显示行号 | 
| -v | 反向选择——仅列出没有“关键词”的行 | 
| -A | -A 2 搜索时显示匹配到的那一行以及下2行 | 
| -B | -B 2 搜索时显示匹配到的那一行以及上2行 | 
| -C | -C 2 搜索时显示匹配到的那一行以及上下2行 | 
(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)使用特殊符号进行字符串的匹配
| 匹配模式 | 说明 | 
|---|---|
| grep h 文件名 | 查找文件里有字符h的行 | 
| grep ^ [q] 文件名 | 匹配以q开始的行 | 
| grep ^ [qf] 文件名 | 匹配以q或者f开头的行 | 
| grep ^ [ ^qf ] 文件名 | 不匹配以q或者f开头的行 | 
| grep ^ [0-9] 文件名 | 匹配以数字开头的行 | 
| grep q$ 文件名 | 匹配以q结束的行 | 
| grep ^$ | 过滤空白行 | 
| grep -r h ./* | 如果要明确搜索当前目录中的子目录有h的行 | 
| grep -d skip h ./* | 忽略当前目录下的子目录下的普通文件 | 
[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
………………省略部分输出过程信息………………
 
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
[root@kongd ~]# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
………………省略部分输出信息………………
[root@server ~]# cut -c   3 /etc/passwd | head -3
o
n
e
 
4、排序显示sort
一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果
 按列搜索,不仅要使用-f参数来设置需要看的列数,还需要使用-d参数来设置间隔符号。
 接下来使用下述命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列
 内容
sort命令用于对文本内容进行排序显示,语法为: sort [选项] 文件名称
| 选项 | 作用 | 
|---|---|
| -f | 忽略大小写 | 
| -b | 忽略缩进与空格 | 
| -n | 以数值型排序 | 
| -r | 反向排序 | 
| -u | 去除重复行 | 
| -t | 指定间隔符 | 
| -k | 设置字段范围 | 
首先,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 sort.txt 
Welcome to kongd.com
Red Hat certified
Welcome to kongd.com
Free Linux Lessons
Linux Course
[root@kongd ~]# sort -u sort.txt 
Free Linux Lessons
Red Hat certified
Welcome to kongd.com
 
想对数字进行排序?也是一点问题都没有的,而且完全不用担心出现1小于20这种问题(有些命令只比较第一位):
[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、去重显示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.txt4 Welcome to kongd.com1 Red Hat certified1 Free Linux Lessons1 Professional guidance1 Linux Course
 
6、替换文件中的字符显示tr
tr 指令从标准输入读取数据,经过替换或者删除后,将结果输出到标准输出。
 语法: tr [OPTION]…SET1[SET2]
 参数说明:
- -c 反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
 - -d 删除指令字符
 - -s 缩减连续重复的字符成指定的单个字符
 
示例:将文件testfile中的小写字母全部转换成大写字母,可使用如下命令:
[root@master ~]#cat testfile |tr a-z A-Z