命令行的艺术与技术
黄玮
2026-01
|): 前一个命令的输出 =
后一个命令的输入
cat access.log | grep "404">: 覆盖写入>>: 追加写入2>: 错误重定向REPL (Read-Eval-Print Loop): 交互式环境不仅是执行命令,更是感知状态
id (UID/GID),
whoamipwd, hostname,
cat /etc/os-releasew, uptime (Load
Average)echo $SHELL (Bash vs Zsh
差异)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
Don’t trust your eyes, trust the bytes. 文本文件在二进制层面可能大相径庭 (如 CRLF vs LF)
xxd filename: 查看文件的十六进制表示xxd -r: 逆向还原验证文件完整性,确保未被篡改或损坏
# 生成指纹
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 -> 只显示常用例子NAME # 命令名称和简短描述
SYNOPSIS # 命令语法
DESCRIPTION # 详细描述
OPTIONS # 选项说明
EXAMPLES # 使用示例
FILES # 相关文件
SEE ALSO # 相关命令
BUGS # 已知问题
1. 先看 NAME 和 SYNOPSIS
快速了解命令用途,理解基本语法
2. 再看 EXAMPLES
通过示例理解用法,复制示例到命令行测试
3. 遇到问题看 OPTIONS
按需查找选项说明,不需要记住所有选项
4. 最后看 DESCRIPTION
需要时深入理解细节
Linux 文档分为多个章节(section):
man 1 ls # 用户命令
man 2 open # 系统调用
man 3 printf # 库函数
man 5 crontab # 配置文件格式
man 8 iptables # 管理员命令
默认:显示第一个匹配的章节
指定章节:man 5 crontab(查看配置文件格式,而非
crontab 命令)
# 搜索包含关键词的所有 man 页
man -k "copy" # 等同于 apropos "copy"
# 搜索命令的特定章节
man -f crontab # 等同于 whatis crontab
strace 工具第一步:快速了解
$ man strace
# NAME 段落
strace - trace system calls and signals
# 快速了解:这是一个追踪系统调用的工具
在 man 页内输入 /EXAMPLES 跳转到示例部分
-p PID # 追踪指定进程
-f # 追踪子进程
-T # 显示时间戳
# 复制示例命令测试
strace ls
# 追踪指定进程
strace -p $PID
# info pages(更详细的文档)
info coreutils
info libc
# 软件包文档目录
ls /usr/share/doc/
ls /usr/share/doc/*/examples/
# 配置文件模板
ls /etc/*.default/