Unix 常用命令全景指南
本文系统梳理 Unix/Linux 环境下的高频命令,从命令行语法基础到生产环境实战,覆盖文件操作、文本处理、系统监控、开发工具四大场景。
目录
命令行基础
命令行参数的三元素
Unix 命令行由三种基本元素组成:选项、位置参数和子命令。
基本结构
1
| command [options] [positional_arguments]
|
选项(Options)
以 - 或 -- 开头的参数,用于修改命令行为:
| 类型 |
格式 |
示例 |
| 短选项 |
- + 单个字母 |
-a, -v, -h |
| 长选项 |
-- + 单词 |
--help, --verbose |
| 带参数的选项 |
-n value 或 --name=value |
-n namespace, --port=8080 |
短选项支持合并书写:ls -la 等价于 ls -l -a。
位置参数(Positional Arguments)
不带连字符的参数,其含义由出现的位置决定:
1 2 3
| cp source_file destination_file
|
子命令(Subcommands)
特殊的命令块,通常有独立的帮助文档:
1 2 3 4 5
| git commit -m "message"
|
快速识别子命令的方法:
- 查看独立帮助:
command subcommand --help
- 使用 Tab 补全:输入命令后按
Tab 键
- 观察命令结构:子命令通常在全局选项之后
🔑 模式提炼:参数解析通用规则
核心公式:{command} [{global_options}] {subcommand} [{local_options}] {args...}
| 场景 |
全局选项 |
子命令 |
本地选项 |
示例 |
| Docker 容器管理 |
-H tcp://host:2375 |
run |
-p 80:8080 |
docker -H host run -p 80:8080 nginx |
| Kubectl 集群操作 |
--namespace=prod |
get pods |
-o wide |
kubectl --namespace=prod get pods -o wide |
| Git 版本控制 |
-C /path/to/repo |
log |
--oneline -10 |
git -C /repo log --oneline -10 |
核心洞察:所有遵循 POSIX 规范的命令都共享相同的参数解析逻辑——先处理全局选项,再识别子命令,最后解析子命令特有的选项和参数。
文件与目录操作
浏览与定位
1 2 3 4 5 6 7 8 9 10 11
| ls | more cat large_file.txt | more
pwd
cd ~ cd - cd ..
|
文件与目录管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ln -s target_path link_name
ln target_path hard_link_name
cp -p source dest cp -r source_dir dest_dir
rm -i filename
rm -rf directory/
|
查找与统计
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| find . -name '*.java'
find . -type f -name '*.log' find . -type d -name 'test*'
find . -size +100M -ls
find /var/log -name '*.log' -mtime +30 -delete
find . -name '*.java' | xargs wc -l
grep -r 'function_name' --include='*.py' . | wc -l
|
tar 压缩与解压
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| tar -zcvf archive.tar.gz directory_to_compress
tar -zxvf archive_name.tar.gz
tar -zxvf archive_name.tar.gz -C /target/directory/
tar -ztvf archive_name.tar.gz
|
🔑 模式提炼:批量操作的安全范式
核心公式:find {搜索范围} {过滤条件} | xargs {处理命令}
| 场景 |
搜索范围 |
过滤条件 |
处理命令 |
| 批量删除旧日志 |
/var/log |
-name '*.log' -mtime +30 |
rm -f |
| 批量修改文件权限 |
. |
-type f -name '*.sh' |
chmod +x |
| 批量文本替换 |
./src |
-name '*.java' |
sed -i 's/foo/bar/g' |
核心洞察:find + xargs 是 Unix 哲学的典型体现——每个工具专注单一职责,通过管道组合完成复杂任务。相比 find -exec,xargs 性能更优(减少进程创建开销),且支持并行处理(-P 选项)。
安全注意事项:
- 执行破坏性操作前先用
-print0 | xargs -0 echo 预览
- 文件名包含空格时必须使用
-print0 + xargs -0
文本处理三剑客
grep:模式匹配
1 2 3 4 5 6 7 8 9 10 11 12
| grep 'pattern' file.txt
grep -i 'error' log.txt grep -v 'debug' log.txt grep -n 'exception' log.txt grep -C 3 'timeout' log.txt grep -r 'TODO' ./src
grep -E '^[0-9]{3}-[0-9]{4}$' file.txt
|
awk:列数据处理
1 2 3 4 5 6 7 8 9 10 11 12
| history | awk '{print $2}' | sort | uniq -c | sort -k1,1nr | head -10
awk '{sum += $3} END {print sum}' data.txt
awk -F',' '{print $1 "," $3}' data.csv
awk '$3 > 100 {print $1, $3}' access.log
|
sed:流编辑器
1 2 3 4 5 6 7 8 9 10 11
| sed -i 's/old_string/new_string/g' file.txt
sed '/^$/d' file.txt
sed '5,10d' file.txt
sed '/pattern/i\inserted_line' file.txt
|
🔑 模式提炼:文本处理的组合策略
核心洞察:三剑客的组合遵循"过滤 → 提取 → 转换"的数据流模型。
| 阶段 |
工具 |
职责 |
口诀 |
| 过滤 |
grep |
缩小数据范围 |
“先 grep 降噪” |
| 提取 |
awk |
切分字段、聚合计算 |
“awk 取列求和” |
| 转换 |
sed |
就地修改、格式转换 |
“sed 就地替换” |
经典组合示例:
1 2 3 4 5 6 7 8
| grep '200' access.log | \ awk '{print $1}' | \ sort | uniq -c | sort -rn | head -10
grep -rl 'old-domain.com' ./src | \ xargs sed -i 's/old-domain\.com/new-domain\.com/g'
|
系统与资源监控
磁盘空间分析
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| df -Th /
df -Th ./
du -sh /usr/local du -h --max-depth=1 ./
du -ah ./ | sort -rh | head -20
|
进程与性能监控
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| top htop
ps aux | grep java
pstree -p pid
kill -15 pid kill -9 pid
lsof -i :8080 netstat -tulpn | grep 8080
uptime cat /proc/loadavg
|
🔑 模式提炼:性能瓶颈排查路径
核心公式:宏观 overview → 定向钻取 → 关联验证
| 层级 |
命令 |
关注指标 |
异常阈值参考 |
| 系统整体 |
uptime / top |
load average |
> CPU 核心数 × 2 |
| 磁盘 I/O |
iostat -xz 1 |
%util, await |
%util > 80% |
| 内存 |
free -h |
available |
< 20% 总内存 |
| 网络 |
ss -s |
TCP 连接状态 |
TIME_WAIT 过多 |
| 进程级 |
pidstat -u 1 |
%CPU/%MEM |
单进程 CPU > 100% |
开发环境工具链
Homebrew(macOS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| brew search gradle
brew info gradle
brew install gradle brew uninstall gradle
brew update
brew upgrade
brew cleanup
|
SDKMAN(多版本 SDK 管理器)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk list java sdk list gradle
sdk install gradle 8.5
sdk use gradle 8.5 sdk default gradle 8.5
sdk current
|
🔑 模式提炼:版本管理的隔离策略
核心洞察:开发环境的版本冲突本质是命名空间隔离问题。两种主流方案:
| 方案 |
工具代表 |
隔离粒度 |
适用场景 |
| 全局切换 |
SDKMAN、pyenv、nvm |
用户级 |
个人开发机,频繁切换版本 |
| 项目锁定 |
Maven Wrapper、Gradle Wrapper、npx |
项目级 |
团队协作,确保构建一致性 |
推荐实践:团队项目优先使用 Wrapper 机制,CI/CD 和个人开发配合 SDKMAN。
磁盘扩容实战
适用于云服务器(阿里云/腾讯云/AWS 等)的场景:已完成云控制台扩容,但操作系统内未生效。
完整操作流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| df -Th
lsblk
yum install -y gdisk cloud-utils-growpart
apt-get install -y gdisk cloud-guest-utils
growpart /dev/vdb 1
resize2fs /dev/vdb1
xfs_growfs /mount/point
df -Th
|
关键点说明
| 步骤 |
命令 |
作用域 |
风险等级 |
| 分区扩容 |
growpart |
分区表 |
⚠️ 中(建议先备份) |
| 文件系统扩容 |
resize2fs/xfs_growfs |
文件系统元数据 |
⚠️ 中 |
| 云盘扩容 |
控制台操作 |
底层存储 |
低(可随时扩容) |
核心原则:云盘扩容 → 分区扩容 → 文件系统扩容,三步缺一不可。resize2fs 只扩展文件系统到分区边界,若分区未扩容则不会生效。
速查表
常用命令索引
| 需求 |
命令 |
关键选项 |
| 查看磁盘 |
df -Th |
-T 显示类型,-h 人类可读 |
| 查看目录大小 |
du -sh |
-s 汇总,-h 人类可读 |
| 压缩目录 |
tar -zcvf |
-z gzip, -c 创建, -v 详细, -f 文件 |
| 解压 |
tar -zxvf |
-x 解压, -C 指定目录 |
| 查找文件 |
find |
-name, -type, -mtime, -size |
| 文本搜索 |
grep |
-i 忽略大小写, -v 反向, -n 行号 |
| 列处理 |
awk |
-F 分隔符, {print $N} 打印第N列 |
| 流编辑 |
sed |
-i 原地修改, s/old/new/g 替换 |
危险操作 checklist
执行以下操作前请二次确认:
- [ ]
rm -rf 前确认路径是否正确(尤其避免 rm -rf /)
- [ ]
> 重定向会覆盖文件,意图追加请用 >>
- [ ]
find ... -delete 和 find ... | xargs rm 效果相同,都不可逆
- [ ]
sed -i 直接修改文件,重要文件先备份
进一步阅读