一、文本查看工具
1. cat
-
功能:将文件所有内容输出到屏幕
-
用途:读取文件、合并多个文件为一个新文件
-
注意:不适合大文件(会一次性全部输出)
-
扩展:用cat快速生成文件
-
常用选项:
-
-n:显示行号 -
-A:显示全部及隐藏符号
示例: cat 文件
[root@localhost /]# cat /etc/passwd
#打印/etc/passwd文件内容

**示例:**查看多文件
[root@localhost ~]# ls
aa.txt bb.txt
[root@localhost ~]# cat aa.txt bb.txt
这是aa.txt文件的内容
这是bb.txt文件的内容
[root@localhost ~]#

示例:合并文件内容
[root@localhost ~]# cat aa.txt >>bb.txt
[root@localhost ~]# cat aa.txt bb.txt
这是aa.txt文件的内容
这是bb.txt文件的内容
这是aa.txt文件的内容
[root@localhost ~]# cat bb.txt
这是bb.txt文件的内容
这是aa.txt文件的内容
[root@localhost ~]#
**示例:**查看文件数及行号
[root@localhost ~]# ls
aa.txt bb.txt
[root@localhost ~]# ls |cat -n
1 aa.txt
2 bb.txt
[root@localhost ~]# cat -n /etc/passwd
1 root:x:0:0:Super User:/root:/bin/bash
2 nobody:x:65534:65534:Kernel Overflow User:/:/usr/sbin/nologin
3 chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin
4 clevis:x:986:986:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin
5 cockpit-wsinstance:x:989:989:User for cockpit-ws instances:/:/usr/sbin/nologin
6 dbus:x:81:81:System Message Bus:/:/usr/sbin/nologin
7 nscd:x:28:28:NSCD Daemon:/:/usr/sbin/nologin
8 sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin
9 setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin
10 systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin
11 tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin
[root@localhost ~]#
示例:cat -A
跨操作系统的时候可以查看是否含有隐藏符号
[root@localhost ~]# cat -A /etc/passwd
root:x:0:0:Super User:/root:/bin/bash$
nobody:x:65534:65534:Kernel Overflow User:/:/usr/sbin/nologin$
chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin$
clevis:x:986:986:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin$
cockpit-wsinstance:x:989:989:User for cockpit-ws instances:/:/usr/sbin/nologin$
dbus:x:81:81:System Message Bus:/:/usr/sbin/nologin$
nscd:x:28:28:NSCD Daemon:/:/usr/sbin/nologin$
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin$
setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin$
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin$
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin$
[root@localhost ~]#
cat > 文件路径 <<EOF
内容
EOF
示例:创建yum仓库文件
cat > /etc/yum.repos.d/dvd.repo <<EOF
[BaseOS]
name=BaseOS
baseurl=file:///media/BaseOS
gpgcheck=0
enabled=1
[AppStream]
name=AppStream
baseurl=file:///media/AppStream
gpgcheck=0
enabled=1
EOF
2. more
- 分页查看文件
- 按
q退出 - 查看完成自动退出
**示例:**more 文件
[root@localhost etc]# more /etc/passwd
3. less
- 也是分页查看,但功能更强
- 区别:
-
- 支持方向键上下逐行滚动,Ctrl+F/Ctrl+B翻页
- 查看完不会自动退出
- 支持关键字过滤(从当前页开始搜索,到末尾停止)
- 按
v键调用vim编辑 - 按
q退出
- 系统man手册页默认使用less
- 示例:分页查看目录内容
示例:
ll /etc | less #看目录
less /etc/passwd #看文件
注:如果用less查看文件关键字一定要翻到第一行,因为less只会过滤当前页面的关键字
二、文本过滤工具
grep -- 根据关键字过滤行
常用选项:
|----------------------|---------------------------|
| 选项 | 说明 |
| --color=auto(默认选项) | 关键字高亮 |
| -i | 忽略大小写 |
| -v | 反选(显示不匹配的行) |
| -n | 显示行号 |
| -o | 只显示关键字本身 |
| -c | 统计关键字所在的行数(一行多个只算一次) |
| -w | 按单词过滤(单词由字母、数字、下划线组成) |
| -A n | 显示匹配行及后面n行 |
| -B n | 显示匹配行及前面n行 |
| -C n | 显示匹配行及前后各n行 |
| -r | 递归搜索目录 |
| -l | 只显示包含关键字的文件名(常与-r搭配) |
| -q | 静默模式(通过echo $?判断是否匹配成功) |
基本用法:
grep sshd /etc/passwd

**示例:**取反
[root@localhost ~]# grep -v 'nologin' /etc/passwd
**示例:**grep -w
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 4096 0 4096 0% /dev
tmpfs 857968 0 857968 0% /dev/shm
tmpfs 343188 4852 338336 2% /run
efivarfs 256 11 240 5% /sys/firmware/efi/efivars
/dev/vda3 41773036 3810360 37962676 10% /
/dev/vda2 102156 7628 94528 8% /boot/efi
tmpfs 171592 0 171592 0% /run/user/0
[root@localhost ~]# df |grep -w '/'
/dev/vda3 41773036 3810360 37962676 10% /
示例:
# 过滤可登录用户(以/bin/bash结尾)
grep '/bin/bash$' /etc/passwd
# 忽略大小写搜索failed
grep -i failed /var/log/messages
# 递归搜索/etc下包含selinux的文件
grep -r selinux /etc/
# 只显示文件名
grep -rl selinux /etc/
三、正则表达式
- 功能:通过不同的元字符实现不同规律的过滤
- 分类:基本正则、扩展正则
基本正则表达式(BRE)
|----------|--------------|
| 元字符 | 含义 |
| ^ | 匹配行首 |
| $ | 匹配行尾 |
| [abc] | 匹配列表中的任意单个字符 |
| [a-z] | 匹配任意小写字母 |
| [0-9] | 匹配任意数字 |
| [^a-z] | 排除小写字母 |
| . | 匹配任意单个字符 |
| * | 匹配前一项0次或多次 |
| \ | 转义字符 |
**示例:**筛选root开头的用户
[root@localhost ~]# cat passswd.txt
root:x:0:0:Super User:/root:/bin/bash
nobody:x:65534:65534:Kernel Overflow User:/:/usr/sbin/nologin
chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin
clevis:x:986:986:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin
cockpit-wsinstance:x:989:989:User for cockpit-ws instances:/:/usr/sbin/nologin
dbus:x:81:81:System Message Bus:/:/usr/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/usr/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin
setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin
Aroot:x:1066:1066:Super User:/Aroot:/bin/bash
1066root:x:1066:1066:Super User:/Aroot:/bin/bash
[root@localhost ~]# grep '^root' passswd.txt
root:x:0:0:Super User:/root:/bin/bash
[root@localhost ~]#
**示例:**筛选bash结尾行
[root@localhost ~]# cat passswd.txt
root:x:0:0:Super User:/root:/bin/bash
nobody:x:65534:65534:Kernel Overflow User:/:/usr/sbin/nologin
chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin
clevis:x:986:986:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin
cockpit-wsinstance:x:989:989:User for cockpit-ws instances:/:/usr/sbin/nologin
dbus:x:81:81:System Message Bus:/:/usr/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/usr/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin
setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin
Aroot:x:1066:1066:Super User:/Aroot:/bin/bash
1066root:x:1066:1066:Super User:/Aroot:/bin/bash
[root@localhost ~]# grep 'bash$' passswd.txt
root:x:0:0:Super User:/root:/bin/bash
Aroot:x:1066:1066:Super User:/Aroot:/bin/bash
1066root:x:1066:1066:Super User:/Aroot:/bin/bash
[root@localhost ~]#
**示例:**匹配任意单字符
[root@localhost ~]# grep '[rnc]' passswd.txt

**示例:**排除小写
[root@localhost ~]# grep '[^a-z]' passswd.txt

扩展正则表达式(ERE)
grep使用-E启用,或使用egrep。
|---------|--------------|
| 元字符 | 含义 |
| ? | 匹配前一项0次或1次 |
| | | 或(匹配多个关键字) |
| {m} | 匹配前一项恰好m次 |
| {m,} | 至少m次 |
| {,m} | 至多m次 |
| {m,n} | 至少m次,至多n次 |
| () | 将括号内内容视为一个整体 |
示例:|
[root@localhost ~]# grep -E 'root|nobody|chrony' passswd.txt

示例: {m}
[root@localhost ~]# grep -E 'root{2}' passswd.txt

示例:( )
[root@localhost ~]# grep -E '(root){2}' passswd.txt

示例:{m,n}
[root@localhost ~]# grep -E '(root){2,3}' passswd.txt

实战:获取IPV4地址
[root@localhost ~]# ifconfig | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'| grep -Ev '255$|1$|0$'

四、文本提取工具
cut -- 提取列或字符
常用选项:
-d:指定分隔符(默认制表符)-f:指定列(如-f 1(第一列),-f 1,3(1和3),-f 1-3(1到3)-f 3-(3到最后))
示例:
# 提取所有可登录用户的用户名
grep '/bin/bash$' /etc/passwd | cut -d ':' -f 1
# 提取IP地址
ifconfig | grep inet -w | cut -d ' ' -f 10
# 提取根分区使用率(百分比数字)
df | grep -w / | cut -d ' ' -f14 | cut -c 1
五、文本统计工具
wc -- 统计行数、单词数、字节数
- 统计目录只统计一级目录
|------|-----|
| 选项 | 说明 |
| -l | 行数 |
| -w | 单词数 |
| -c | 字节数 |
**示例:**统计目录数
#统计home目录下的文件目录数
[root@localhost home]# ls
aa devops lisi user1 zhangsan
[root@localhost home]# ls |wc
5 5 30
[root@localhost home]#
注意ll和ls的区别,ll会多一行,统计用ls

**示例:**统计登入失败用户有多少条记录

last是查看登入的
lastb是查看登入失败的
lastlog=last+lastb
**示例:**查看文件有多大(ll可以所以没必要)

六、文本列出工具
head -- 显示文件开头
- 默认前10行
-n 数字:前n行-n +数字:前n行(和-n一样)-n -数字:去掉末尾数字行
示例:查看/etc/passwd前3行
[root@localhost home]# head -n 3 /etc/passwd
root:x:0:0:Super User:/root:/bin/bash
nobody:x:65534:65534:Kernel Overflow User:/:/usr/sbin/nologin
chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin
[root@localhost home]#
tail -- 显示文件末尾
- 默认后10行
-n 数字:后n行-n +数字:从第数字行开始显示,一直到最后-f:实时监控文件追加(常用于查看日志)
**示例:**查看/etc/passwd文件后3行内容
[root@localhost home]# cat /etc/passwd
root:x:0:0:Super User:/root:/bin/bash
nobody:x:65534:65534:Kernel Overflow User:/:/usr/sbin/nologin
chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin
clevis:x:986:986:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin
cockpit-wsinstance:x:989:989:User for cockpit-ws instances:/:/usr/sbin/nologin
dbus:x:81:81:System Message Bus:/:/usr/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/usr/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin
setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin
[root@localhost home]# tail -n 3 /etc/passwd
setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin
[root@localhost home]#
示例: tail -n +数字
[root@localhost home]# cat /etc/passwd
root:x:0:0:Super User:/root:/bin/bash
nobody:x:65534:65534:Kernel Overflow User:/:/usr/sbin/nologin
chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin
clevis:x:986:986:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin
cockpit-wsinstance:x:989:989:User for cockpit-ws instances:/:/usr/sbin/nologin
dbus:x:81:81:System Message Bus:/:/usr/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/usr/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin
setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin
[root@localhost home]# tail -n +3 /etc/passwd
chrony:x:985:985:chrony system user:/var/lib/chrony:/sbin/nologin
clevis:x:986:986:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin
cockpit-wsinstance:x:989:989:User for cockpit-ws instances:/:/usr/sbin/nologin
dbus:x:81:81:System Message Bus:/:/usr/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/usr/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin
setroubleshoot:x:987:987:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin
systemd-coredump:x:997:997:systemd Core Dumper:/:/usr/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/usr/sbin/nologin
[root@localhost home]#
七、文本排序工具
sort -- 排序
- 默认按照ASCII 字符表排序
常用选项:
-t:指定分隔符-k:指定排序的列-n:按数值排序(默认按字符串)-r:降序-u:去重(相邻重复行)
示例:按UID排序,找出最大UID的用户
sort -t : -k 3 -n /etc/passwd | cut -d ':' -f1,3 | tail -n 1
# 或降序取第一行
sort -t : -k 3 -n -r /etc/passwd | cut -d ':' -f1,3 | head -n 1
八、文本去重工具
uniq -- 去重(仅处理相邻重复行)
-c:统计重复次数
搭配sort使用:
# 统计登录失败次数
lastb | cut -d ' ' -f1 | head -n -2 | sort | uniq -c
九、文本比较工具
diff -- 比较文件差异
-
无输出表示内容相同
-
通过
echo $?判断(0相同,非0不同) -
常用于检查文件是否被篡改
-
diff 文件1 文件2
[root@localhost ~]# diff passwd1.txt passwd.txt #无输出表示内容相同
[root@localhost ~]# echo '1123' >>passwd.txt
[root@localhost ~]# diff passwd.txt passwd1.txt
12d11
< 1123 #意思是把左边的12行删除就能和右边保持一致,多了1123这几个字符
[root@localhost ~]#
代表1到7,1到40行都不一样

vimdiff -- 可视化比较
语法:vimdiff 文件1 文件2
- 在vim中高亮显示差异
- q 退出
- ctrl+w+方向键切换

十、文本编辑工具(sed)
sed -- 流编辑器(非交互式)
工作流程 :将文件内容读入模式空间(缓冲区) → 按命令处理 → 输出
常用选项:
|----------|-------------|
| 选项 | 说明 |
| -i | 直接修改源文件 |
| -i.bak | 先备份再修改 |
| -n | 不自动输出模式空间内容 |
| -e | 多个处理动作 |
格式:
sed [选项] '地址定界 处理动作' 文件
地址定界(指定处理哪些行)
|---------------|--------------|
| 写法 | 含义 |
| 数字 | 指定行号 |
| $ | 最后一行 |
| /关键字/ | 匹配关键字的行 |
| /关键字/I | 忽略大小写匹配 |
| #,# | 第#行到第#行 |
| #,/关键字/ | 从第#行到第一个关键字行 |
| /关键字/,/关键字/ | 两个关键字之间的行 |
注意 :若关键字包含/,可用\转义或用其他字符(如%)代替,例如:sed '\%/bin/bash%p'
处理动作
|----------------|------------------|
| 动作 | 说明 |
| p | 打印(常与-n合用) |
| d | 删除整行 |
| a\ | 在匹配行下一行追加 |
| i\ | 在匹配行上一行插入 |
| c\ | 替换整行内容 |
| s/old/new/ | 替换(默认只替换每行第一个匹配) |
| s/old/new/g | 全局替换 |
| s/old/new/i | 忽略大小写 |
| s/old/new/gi | 全局+忽略大小写 |
示例:
# 删除第1行
sed '1d' passwd
# 打印匹配root的行
sed '/root/p' -n passwd
# 在文件末尾追加
sed -i.bak '$a\PermitRootLogin yes' /etc/ssh/sshd_config
# 替换SELINUX配置
sed -i.bak '/^SELINUX=enforcing/c\SELINUX=disable' /etc/selinux/config
# 替换路径(使用|作为分隔符)
sed 's|/bin/bash|/sbin/nologin|' passwd -i
十一、文本转换工具
tr -- 字符转换/删除
# 小写转大写
cat /etc/passwd | tr 'a-z' 'A-Z'
# 删除字符(-d)
echo "hello123" | tr -d '0-9' # 输出 hello

十二、常用快捷键
|--------|---------------|
| 快捷键 | 作用 |
| Ctrl+C | 中断当前命令 |
| Ctrl+Z | 停止并放入后台 |
| Ctrl+S | 暂停屏幕输出 |
| Ctrl+Q | 恢复屏幕输出 |
| Ctrl+U | 剪切光标前所有内容 |
| Ctrl+Y | 粘贴 |
| Ctrl+K | 剪切光标后所有内容 |
| Ctrl+A | 跳到行首 |
| Ctrl+E | 跳到行尾 |
| Ctrl+W | 删除光标前一个单词 |
| Ctrl+L | 清屏(与clear有区别) |