命令行的艺术与技术
黄玮
2026-01
|)
组合成大威力|): 前一个命令的输出 =
后一个命令的输入
cat access.log | grep "404">: 覆盖写入>>: 追加写入2>: 错误重定向Global Regular Expression Print
grep "error" app.log # 查找包含 error 的行
grep -i "error" app.log # 忽略大小写
grep -v "debug" app.log # 反向选择(不包含 debug)
grep -r "TODO" ./src # 递归查找目录
强大的文本分析工具,默认按空格/Tab 分割
# 打印第 1 列和第 9 列 (如 Apache 日志的 IP 和 状态码)
awk '{print $1, $9}' access.log
# 统计特定列的总和
ls -l | awk '{sum += $5} END {print sum}'
# 统计访问量最高的 Top 5 IP
cat access.log \
| awk '{print $1}' \
| sort \
| uniq -c \
| sort -nr \
| head -n 5
在文件系统中根据条件搜索文件
find . -name "*.py" # 按文件名查找
find . -type f -size +100M # 查找大于 100M 的文件
find /var/log -mtime +7 # 查找 7 天前修改过的文件
find . -name "*.tmp" -delete # 找到并删除 (慎用!)
很多命令不支持从标准输入读取参数,xargs 来救场
# 错误: rm 不接受标准输入
find . -name "*.tmp" | rm
# 正确: xargs 将输入转换为参数列表
find . -name "*.tmp" | xargs rm
c: Create (创建) / x: Extract (解压)z: Gzip (压缩) / v: Verbose (详细) /
f: File (文件)tar -czvf project.tar.gz ./src # 打包压缩
tar -xzvf project.tar.gz # 解压到当前目录
unzip material.zip # 解压 zip 文件
file -i data.csv # 查看编码
# output: charset=iso-8859-1
iconv -f GBK -t UTF-8 old.txt > new.txt
验证文件完整性,确保未被篡改或损坏
# 生成指纹
md5sum release.iso > release.md5
sha256sum sensitive.data
# 验证 (检查 release.md5 中的指纹是否匹配)
md5sum -c release.md5
“I can’t exit Vim” 是 StackOverflow 上的经典问题
Vim 是模态编辑器,不同模式下按键含义不同:
Esc 永远回到这里i 进入: 进入vim filenamei (Insert)Esc (回到 Normal):wq (Write & Quit)
+ Enter:q! +
Enter💡 进阶: 在终端输入
vimtutor开启 30 分钟互动教程
man <command>: 查阅手册 (Manual)
man lsq 退出, / 搜索<command> --help:
快速简要帮助tldr tar -> 只显示常用例子