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
# 位置1:源文件
# 位置2:目标文件

子命令(Subcommands)

特殊的命令块,通常有独立的帮助文档:

1
2
3
4
5
git commit -m "message"
# git → 主命令
# commit → 子命令
# -m → 选项
# "message" → 选项参数

快速识别子命令的方法

  1. 查看独立帮助:command subcommand --help
  2. 使用 Tab 补全:输入命令后按 Tab
  3. 观察命令结构:子命令通常在全局选项之后

🔑 模式提炼:参数解析通用规则

核心公式{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

# 创建硬链接(同一 inode,不可跨文件系统)
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

# 执行动作(删除 30 天前的日志)
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
# -z: gzip 压缩
# -c: create 创建新归档
# -v: verbose 显示进度
# -f: file 指定文件名(必须放最后)

# 解压到当前目录
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 -execxargs 性能更优(减少进程创建开销),且支持并行处理(-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 # 显示前后 3 行上下文
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
# 解析:取第2列 → 排序 → 统计频次 → 按频次降序 → 取前10

# 计算某列的总和
awk '{sum += $3} END {print sum}' data.txt

# 按分隔符提取字段(处理 CSV)
awk -F',' '{print $1 "," $3}' data.csv

# 条件过滤
awk '$3 > 100 {print $1, $3}' access.log # 只输出第3列大于100的行

sed:流编辑器

1
2
3
4
5
6
7
8
9
10
11
# 替换文本(直接修改文件用 -i)
sed -i 's/old_string/new_string/g' file.txt

# 删除空行
sed '/^$/d' file.txt

# 删除第 5-10 行
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
# 分析访问日志:找出访问量 Top 10 的 IP
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
# 查看文件系统整体使用情况(disk free)
df -Th /
# -T: 显示文件系统类型
# -h: 人类可读格式(自动转换 GB/MB)

# 推荐:查看当前目录所在分区的使用情况
df -Th ./

# 查看目录占用详情(disk usage)
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 # 优雅终止(SIGTERM)
kill -9 pid # 强制终止(SIGKILL,最后手段)

# 查看端口占用
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
# 1. 查看当前磁盘状态
df -Th

# 2. 确认分区情况
lsblk
# 预期看到 vdb 容量已变,但 vdb1 仍是原大小

# 3. 安装分区扩容工具(CentOS/RHEL)
yum install -y gdisk cloud-utils-growpart

# Ubuntu/Debian
apt-get install -y gdisk cloud-guest-utils

# 4. 扩容分区(注意:/dev/vdb 和 1 之间有空格)
# growpart 会将磁盘剩余空间分配给指定分区
growpart /dev/vdb 1

# 5. 扩容文件系统(ext4)
resize2fs /dev/vdb1

# 对于 XFS 文件系统
xfs_growfs /mount/point

# 6. 验证扩容结果
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 ... -deletefind ... | xargs rm 效果相同,都不可逆
  • [ ] sed -i 直接修改文件,重要文件先备份

进一步阅读