🎯 本文专栏: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