文章目录 一、文件管理 1. cat 2. tac 3. nl 4. more 5. less 6. head 7. tail 8. mkdir 9. rm 10. cp 11. mv 12. ln 13. grep 14. find 15. tar 16. gzip / bzip2 17. zip / unzip 二、文本管理 1.sort —— 行排序 2.uniq —— 相邻去重+计数 3.grep —— 找关键字 4.egrep —— 加强版 grep 5.fgrep —— 把正则当普通字串 6.wc —— 数一数 7.comm —— 两个文件左右对比 8.diff —— 行差异高亮 9.管道与重定向 文本编辑工具:vi / vim —— 全能编辑器 1.启动与退出(3 种姿势) 2.模式总览(记住 3 个圈) 3.光标移动(手指不离开主键盘) 4.增删改查(最常用的 8 个) 5.块操作(列模式) 6.复制/剪切/粘贴(跨文件也行) 7.窗口分屏(vim 专属) 8.保存、另存、批量替换 9.配置文件(永久行号) 10.常用命令速记 文本编辑工具:nano
一、文件管理
1. cat
参数 作用 -A 等价 -vET,显示所有不可见字符 -b 非空行编号 -E 在每行结尾显示 $ -n 空行也编号 -T 把 TAB 显示为 ^I -v 显示不可见字符
$ printf "a\t b\n " | cat -A
a^Ib$
$ cat -b /etc/issue1 \ S2 Kernel \ r on an \ m
$ printf "line\n " | cat -E
line$
$ printf "a\n \n b\n " | cat -n1 a2 3 b
$ printf "col1\t col2\n " | cat -T
col1^Icol2
2. tac
参数 作用 -b 分隔符前附加 -r 分隔符当正则 -s 指定分隔符
$ printf "1\n 2\n 3\n " | tac
3
2
1
$ printf "2025-07-20 11:11:11" | tac -b -s ':'
11 :11:11 07-20 2025 -
3. nl
参数 作用 -b a 空行也编号 -b t 空行不编号(默认) -n ln 行号最左 -n rn 行号右对齐,无前导 0 -n rz 行号右对齐,前导 0 -w N 行号栏位宽度
$ printf "a\n \n b\n " | nl -b a1 a2 3 b
$ printf "x\n y\n " | nl -n rz -w 3
001 x
002 y
4. more
参数 作用 +n 从第 n 行开始 -n 每屏 n 行 -d 显示提示语 “–More–” +/pattern 从匹配行开始
$ more +3 /etc/passwd | head -1
daemon:x:2:2:daemon:/sbin:/sbin/nologin
$ more -2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
--More--
5. less
参数 作用 -N 显示行号 -S 不换行截断 -i 搜索忽略大小写 -p pat 启动后直接跳到匹配行
$ less -N +2 /etc/issue2 Kernel \ r on an \ m
$ echo "very long line ............................................" | less -S
( 长行不自动换行)
6. head
参数 作用 -n N 前 N 行 -c N 前 N 字节 -q 抑制文件名(多文件) -v 总是显示文件名
$ head -n2 /etc/os-release
NAME = "Ubuntu"
VERSION = "22.04.3 LTS (Jammy Jellyfish)"
$ head -c8 /etc/passwd
root:x:0
7. tail
参数 作用 -n N 末 N 行 -c N 末 N 字节 -f 实时追加输出 -F 带重试的 -f
$ tail -n1 /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
$ ( sleep 2 && echo x >> demo.log) & tail -f demo.log
x
8. mkdir
$ mkdir -m 700 dir1
$ ls -ld dir1
drwx------ 2 alice alice 4096 Jul 20 11 :19 dir1
$ mkdir -p a/b/c
$ ls a/b/c
( empty)
9. rm
$ rm -i *.tmp
rm: remove regular empty file '1.tmp' ? y
$ rm -rfv old_dir
removed 'old_dir/file1'
removed directory: 'old_dir'
10. cp
参数 作用 -a 归档复制(= -dpR) -i 交互 -f 强制 -p 保留属性 -r 递归 -v 显示 -l 硬链接 -s 软链接
$ cp -a dir1 dir2
$ ls -ld dir2
drwxr-xr-x 2 alice alice 4096 Jul 20 11 :20 dir2
$ cp -l file.txt hardlink
$ ls -i file.txt hardlink
1310721 file.txt 1310721 hardlink
$ cp -s /etc/hosts hosts.link
$ ls -l hosts.link
lrwxrwxrwx 1 alice alice 10 Jul 20 11 :20 hosts.link -> /etc/hosts
11. mv
$ mv -v old.txt new.txt
renamed 'old.txt' -> 'new.txt'
$ mv -i new.txt new.txt
mv: 'new.txt' and 'new.txt' are the same file
12. ln
$ ln -s /etc/passwd pwd.link
$ readlink pwd.link
/etc/passwd
$ ln -sf /etc/hosts pwd.link
$ readlink pwd.link
/etc/hosts
13. grep
参数 作用 -i 忽略大小写 -n 行号 -r 递归 -v 反向 -c 计数 -l 只列文件名
$ echo "Error" | grep -i error
Error
$ grep -n root /etc/passwd
1 :root:x:0:0:root:/root:/bin/bash
$ grep -c false /etc/passwd
42 $ grep test test*
testfile1:This a Linux testfile!
testfile_2:This is a linux testfile!
testfile_2:Linux test $ grep -r update /etc/acpi
/etc/acpi/ac.d/85-anacron.sh:
Rather than
/etc/acpi/resume.d/85-anacron.sh:
IO.) Rather than
/etc/acpi/events/thinkpad-cmos:action= /usr/sbin/thinkpad-keys--update $ grep -v test*
testfile1:helLinux!
testfile1:Linis a free Unix-type operating system.
testfile1:Lin
testfile_1:HELLO LINUX!
testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.
testfile_1:THIS IS A LINUX TESTFILE!
testfile_2:HELLO LINUX!
testfile_2:Linux is a free unix-type opterating system.
14. find
参数 作用 -name 文件名通配 -type f/d 文件/目录 -size +N 大于 N -mtime +N 修改时间 -exec 执行命令
$ find /etc -name "*.conf" | head -3
/etc/resolv.conf
/etc/host.conf
/etc/logrotate.conf
$ find /tmp -type d -empty
/tmp/.X11-unix
$ find /var/log -mtime +7 -type f -exec ls -lh { } \ ; | head -1
-rw-r----- 1 syslog adm 128K Jul 12 10 :10 /var/log/syslog.1
15. tar
参数 作用 -c 创建 -x 解包 -t 列表 -v 详细 -f 指定文件名 -z gzip -j bzip2 -C 指定解压目录
$ tar czvf site.tar.gz index.html
index.html
$ tar tzf site.tar.gz
index.html
$ tar xzf site.tar.gz -C /tmp
$ ls /tmp/index.html
/tmp/index.html
16. gzip / bzip2
参数 作用 -k 保留源文件 -d 解压 -r 递归压缩目录内文件
$ gzip -k big.log
$ ls big.log*
big.log big.log.gz
$ bzip2 -k data.sql
$ bzip2 -d data.sql.bz2
$ ls data.sql*
data.sql
17. zip / unzip
$ zip -r mydir.zip mydiradding: mydir/ ( stored 0 %) adding: mydir/file1 ( stored 0 %)
$ unzip mydir.zip -d /tmp
$ ls /tmp/mydir
file1
二、文本管理
下面先生成一个通用示例文本文件 demo.txt
,后续所有命令均直接引用该文件
cat > demo.txt << 'EOF'
# 第1行 空注释
# 第2行 又一个空注释
IP:192.168.1.1
IP:10.0.0.1
error:disk full
ERROR:Disk Full
warning:low memory
WARNING:LOW MEMORY
info:service started
INFO:Service Started
EOF
文件内容如下(可直接 cat demo.txt
验证):
# 第1行 空注释
# 第2行 又一个空注释
IP:192.168.1.1
IP:10.0.0.1
error:disk full
ERROR:Disk Full
warning:low memory
WARNING:LOW MEMORY
info:service started
INFO:Service Started
1.sort —— 行排序
选项 一句话秒懂 -n 把数字当数字排,不再是按“字母表”排 -r 反着来,最大/最晚放最前 -k N “只看第 N 列”再排 -t c 用 c 当分隔符,决定“列”在哪 -u 排完顺便去重
$ sort -t':' -k2 -n demo.txt
$ sort -ur demo.txt
2.uniq —— 相邻去重+计数
选项 一句话秒懂 -c 把重复次数顺便数出来 -d 只要“出现过两次以上”的行 -u 只要“孤单单只出现一次”的行
$ sort demo.txt | uniq -c | head -2
3.grep —— 找关键字
选项 一句话秒懂 -i 不区分大小写 -n 顺便告诉你行号 -v 反着找,不要的行列出来 -c 告诉你“有几行”匹配 -r 整个目录一起翻
$ grep -ni 'error' demo.txt
4.egrep —— 加强版 grep
选项 一句话秒懂 -o 只把“匹配到的部分”抠出来 -i 同上,大小写不挑
$ egrep -o '([0-9]+\.){3}[0-9]+' demo.txt
5.fgrep —— 把正则当普通字串
$ fgrep -x 'IP:192.168.1.1' demo.txt
6.wc —— 数一数
选项 一句话秒懂 -l 数行 -w 数单词(空格隔开的都算) -c 数字节 -L 找“最长那一行”有多长
$ wc -l demo.txt
7.comm —— 两个文件左右对比
选项 一句话秒懂 -1 隐藏“只在文件1”里的行 -2 隐藏“只在文件2”里的行 -3 隐藏“两边都有”的行
$ comm -12 f1 f2
8.diff —— 行差异高亮
选项 一句话秒懂 -u 把差异打包成“补丁格式” -i 大小写当一样看
$ diff -u demo.txt demo2.txt
9.管道与重定向
符号 一句话秒懂 > 把结果“倒”进文件(覆盖) >> 把结果“追加”到文件尾巴 | 把左边命令的成品直接塞给右边命令
$ grep error demo.txt | wc -l
文本编辑工具:vi / vim —— 全能编辑器
1.启动与退出(3 种姿势)
选项 一句话秒懂 +n 打开时光标直接跳到第 n 行 +/pat 打开后直接跳到含 pat 的行
退出:
:wq
保存并退出:q!
不保存强退:x
保存+退出(同 :wq
)
命令 效果 vi demo.txt
普通打开 vi +3 demo.txt
直接跳到第 3 行 vi +/error demo.txt
直接跳到含 error 的行
$ vi +/warning demo.txt
所有操作都基于同一个示例文件 demo.txt
cat > demo.txt << 'EOF'
# 空注释
IP:192.168.1.1
error:disk full
warning:low memory
EOF
2.模式总览(记住 3 个圈)
普通模式 (默认):键盘=命令插入模式 (按 i
/a
/o
进入):键盘=打字末行模式 (按 :
进入):键盘=发指令
切换:
任何模式 → 普通模式:Esc
普通 → 插入:i
/a
/o
普通 → 末行::
3.光标移动(手指不离开主键盘)
按键 移动 h
j
k
l
左 下 上 右 w
/ b
下一个/上一个单词 0
行首 ^
行首非空字符 $
行尾 gg
文件第一行 G
文件最后一行 10G
第 10 行
4.增删改查(最常用的 8 个)
动作 按键 插入 i
光标前,a
光标后,o
下一行删除 x
删字符,dd
删整行,3dd
删 3 行复制 yy
复制整行,2yy
复制 2 行粘贴 p
粘到下一行,P
粘到上一行撤销 u
撤销,Ctrl+r
重做替换 r
替换光标处字符,R
连续替换查找 /text
向下,?text
向上替换整文件 :%s/old/new/g
5.块操作(列模式)
按 Ctrl+v
→ 进入 可视块 移动光标选列
示例: 把 demo.txt 里所有行首加 #
Ctrl+v ↓ 选中三行 → I → # → Esc
6.复制/剪切/粘贴(跨文件也行)
普通模式 yy
复制当前行 3yy
复制 3 行 dd
剪切当前行 粘贴 p
贴到光标下一行 复制到系统剪贴板(需 vim-gtk) "+yy
复制,"+p
粘贴
7.窗口分屏(vim 专属)
命令 效果 :split file2
水平分屏打开 file2 :vsplit file2
垂直分屏 Ctrl+w w
在窗格间切换 Ctrl+w q
关闭当前窗格
8.保存、另存、批量替换
末行命令 作用 :w
保存 :w new.txt
另存为 :wq
/ ZZ
保存并退出 :q!
强制退出 :%s/error/ERROR/g
全文件替换 :5,10s/old/new/g
仅 5-10 行替换
9.配置文件(永久行号)
在用户目录建 ~/.vimrc
set nu " 永久行号
set tabstop=4 " Tab=4 空格
set expandtab " Tab 转空格
syntax on " 语法高亮
10.常用命令速记
vi demo.txt
gg
到顶o
新行,输入 IP:172.16.0.1
Esc
回普通/error
跳到 error 行dd
删除整行u
撤销:set nu
看行号:%s/IP:/ip:/g
全部改小写:wq
保存退出
场景 按键 口诀 打开文件 vi 文件名
vi 文件名直接进 退出不保存 Esc → :q!
强制退出 q!
保存并退出 Esc → :wq
写完走人 wq
进入插入模式 i 光标处插入 / o 下一行插入按 i
写,按 o
开新行 移动光标 h j k l 左下上右键盘箭头不用抬手 删除/剪切 整行 dd 双击 d
删掉一行 撤销 u 按 u
回退 搜索 /关键词 + Enter /apple
找苹果复制 / 粘贴整行 yy 复制 → p 粘贴yy p
一条龙
一句话记忆:
i 写,Esc 回,:wq 保存;/ 搜,dd 删剪,u 撤销,yy p 复制粘贴!
文本编辑工具:nano
操作 按键 记忆口诀 打开/新建文件 nano 文件名
nano 后面直接跟文件 移动光标 方向键 / Ctrl+Y / Ctrl+V 上下翻页 方向键最直观 保存 Ctrl+O → 回车O = Output 退出 Ctrl+X X = eXit 剪切整行 Ctrl+K K = Kill 粘贴 Ctrl+U U = Un-kill 撤销 Alt+U 按住 Alt 搜索 Ctrl+W W = Where 替换 *Ctrl+* 反斜杠像“替换” 显示行号 启动加 -l
或 Alt+Shift+3 一目了然
30 秒上手流程
nano ~/.bashrc
Ctrl+O 回车
Ctrl+X
一句话记忆:
O 保存,X 退出,W 搜索,K 剪,U 贴