常用 Linux 命令实用速查 —— 系列收尾的一张大表
系列前 14 篇都是 C 函数级的系统编程,最后一篇换个角度:日常运维 / 调试要用到的 shell 命令速查。按 “文件 / 文本 / 进程 / 网络 / 系统 / 调试 / 性能” 七大类汇总,每条带最常用 flag 和典型用法。新手当入门,老手当备忘。
0. 引言:服务挂了,三十秒查到原因
| 命令 | 查什么 |
|---|---|
top | CPU 谁占满了? |
free -h | 内存够吗? |
df -h | 磁盘满了吗? |
ss -tnlp | 端口监听情况? |
journalctl -xe | 系统日志有错吗? |
dmesg | tail | 内核有没有 OOM? |
六行命令搞定第一轮排查。下面把每条都拆开讲。
1. 文件操作
| 命令 | 用途 | 常用例子 |
|---|---|---|
ls | 列文件 | ls -lah详细 + 人类大小 + 隐藏 |
cd | 切目录 | cd -回到上一个 |
pwd | 显示当前路径 | — |
cp | 复制 | cp -a src dst保留属性 |
mv | 移动 / 改名 | — |
rm | 删除 | rm -rf dir递归强制(慎用) |
mkdir | 建目录 | mkdir -p a/b/c递归建 |
rmdir | 删空目录 | — |
ln | 链接 | ln -s target name软链接 |
find | 递归查找 | 见 §1.1 |
locate | 查文件(数据库) | updatedb后才有数据 |
which | 找命令路径 | which gcc |
file | 看文件类型 | file binary |
stat | 看 inode / 时间戳 | stat foo.c |
du | 目录大小 | du -sh *当前目录每项大小 |
df | 磁盘空间 | df -h人类可读 |
tar | 归档 | tar -czf x.tgz dir/ |
zip/unzip | zip 格式 | — |
1.1 find 进阶
| 命令 | 含义 |
|---|---|
find . -name "*.c" | 按名字查 |
find . -type f -mtime -1 | 1 天内修改的文件 |
find . -type f -size +100M | 大于 100MB的文件 |
find . -name "*.log" -delete | 找到就删 |
find . -name "*.c" -exec grep TODO {} + | 找文件再grep |
find . -name "*.tmp" | xargs rm | 找到管道删 |
1.2 chmod / chown
| 命令 | 含义 |
|---|---|
chmod 755 script.sh | rwxr-xr-x |
chmod +x script.sh | 加可执行位 |
chmod -R u+w dir/ | 递归给 owner 加写权限 |
chown user:group file | 改属主 |
chown -R user:group dir/ | 递归改属主 |
2. 文本处理
| 命令 | 用途 | 常用例子 |
|---|---|---|
cat | 全部输出 | cat file |
less | 分页 | less file,/keyword搜,q退 |
more | 老式分页 | — |
head | 头部 | head -n 20 file |
tail | 尾部 | tail -f log实时跟踪 ⭐ |
wc | 计数 | wc -l file行数 |
grep | 模式查找 | 见 §2.1 |
sed | 流编辑 | 见 §2.2 |
awk | 强大文本处理 | 见 §2.3 |
sort | 排序 | sort -n -k 2按第 2 列数值 |
uniq | 去重(要先 sort) | sort | uniq -c计数 |
cut | 切列 | cut -d: -f1 /etc/passwd |
paste | 拼列 | paste a.txt b.txt |
tr | 字符替换 | tr 'a-z' 'A-Z'大小写转换 |
xargs | 把输入变参数 | find ... | xargs grep |
tee | 复制 stdout 到文件 | cmd | tee log |
2.1 grep 进阶
| 命令 | 含义 |
|---|---|
grep -r "pattern" dir/ | 递归 |
grep -i "pattern" file | 忽略大小写 |
grep -v "pattern" file | 反向(不匹配) |
grep -E "a|b" file | 扩展正则 |
grep -P "\d+" file | Perl 正则 |
grep -n "pattern" file | 显示行号 |
grep -A 5 "err" file | 匹配后5 行 |
grep -B 5 "err" file | 匹配前5 行 |
grep -C 5 "err" file | 匹配前后5 行 ⭐ |
grep -l "err" *.c | 只显示文件名 |
grep --include="*.c" -r foo . | 只在.c文件里搜 |
2.2 sed 进阶
| 命令 | 含义 |
|---|---|
sed 's/old/new/' file | 替换每行第一个 |
sed 's/old/new/g' file | 全部替换 |
sed -i 's/old/new/g' file | 直接改文件⭐ |
sed -i.bak 's/old/new/g' file | 改前备份为.bak |
sed -n '5,10p' file | 只显示 5-10 行 |
sed '/pattern/d' file | 删除匹配行 |
2.3 awk 速查
| 命令 | 含义 |
|---|---|
awk '{print $1}' file | 打印第 1 列 |
awk -F: '{print $1}' /etc/passwd | 用:分隔 |
awk '$3 > 100 {print $1}' file | 第 3 列 > 100 时打印第 1 列 |
awk '{sum += $1} END {print sum}' | 求和 |
awk 'NR==5' file | 第 5 行 |
awk '/pattern/ {print}' file | 匹配行 |
3. 进程相关
| 命令 | 用途 | 常用例子 |
|---|---|---|
ps | 列进程 | ps aux/ps -ef |
top | 实时进程 | 按M按内存排,P按 CPU |
htop | 增强版 top | 颜色 + 树形 |
kill | 发信号 | kill -9 PID强杀 |
pkill | 按名字发信号 | pkill -9 firefox |
killall | 同上 | — |
pgrep | 按名字找 PID | pgrep nginx |
pidof | 按名字找 PID | pidof systemd |
nohup | 无视 SIGHUP | nohup ./srv & |
nice | 调优先级 | nice -n 10 cmd |
time | 计时 | time make |
jobs | 看 shell 后台任务 | fg %1调到前台 |
nproc | CPU 数 | make -j$(nproc) |
3.1 ps 常见组合
| 命令 | 含义 |
|---|---|
ps aux | 全部进程,BSD 格式⭐ |
ps -ef | 全部进程,UNIX 格式 |
ps aux --sort=-%cpu | head | 按 CPU 排前 10 |
ps aux --sort=-%mem | head | 按内存排前 10 |
ps -p PID -o pid,ppid,cmd | 看特定 PID 的指定字段 |
ps -L -p PID | 看进程的所有线程 |
3.2 信号速查
| 命令 | 含义 |
|---|---|
kill -l | 列出所有信号 |
kill -SIGTERM PID | 礼貌停(默认) |
kill -SIGKILL PID | 强杀(kill -9) |
kill -SIGSTOP PID | 暂停进程 |
kill -SIGCONT PID | 继续运行 |
kill -SIGHUP PID | 重读配置(守护进程惯例) |
4. 网络
| 命令 | 用途 | 常用例子 |
|---|---|---|
ip | 现代网络配置 | ip a看接口 |
ifconfig | 老接口 | (deprecated) |
ss | socket 信息 ⭐ | ss -tnlp监听 TCP |
netstat | 老的网络统计 | (deprecated) |
ping | ICMP echo | ping baidu.com |
traceroute | 路径跟踪 | — |
mtr | 实时路径 | — |
nslookup/dig | DNS | dig +short baidu.com |
curl | HTTP 客户端 | 见 §4.2 |
wget | 下载文件 | wget -c url续传 |
nc | netcat 万能 | nc -lvp 8080监听 |
tcpdump | 抓包 | tcpdump -i any port 80 |
iptables | 防火墙 | (root 用) |
iperf | 带宽测试 | — |
route/ip route | 路由表 | — |
4.1 ss 常用
| 命令 | 含义 |
|---|---|
ss -tnlp | TCP + 数字端口 + 监听 + 进程 ⭐ |
ss -tnap | TCP + 全部 + 进程 |
ss -unlp | UDP 监听 |
ss -s | 摘要统计 |
ss -ti | TCP 详细信息(rtt 等) |
4.2 curl 进阶
| 命令 | 含义 |
|---|---|
curl http://x.com | GET |
curl -i http://x.com | 显示响应头 + body |
curl -I http://x.com | 只看响应头(HEAD) |
curl -X POST -d 'a=1&b=2' url | POST 表单 |
curl -X POST -H "Content-Type: application/json" -d '{"a":1}' url | POST JSON |
curl -o file url | 保存到文件 |
curl -L url | 跟随 301 / 302 重定向 |
curl -u user:pass url | Basic auth |
curl --resolve x.com:80:1.2.3.4 http://x.com | 强制 DNS |
4.3 tcpdump 抓包
| 命令 | 含义 |
|---|---|
tcpdump -i any port 80 | 抓 80 端口 |
tcpdump -i eth0 host 192.168.1.1 | 抓特定主机 |
tcpdump -A -i any port 8080 | ASCII 显示载荷 |
tcpdump -w cap.pcap port 80 | 写文件,wireshark 看 |
tcpdump -r cap.pcap | 读 pcap 文件 |
5. 系统信息
| 命令 | 用途 |
|---|---|
uname -a | 内核版本 / 主机名 / 架构 |
hostname | 主机名 |
whoami | 当前用户 |
id | uid / gid |
who/w | 谁登录了 |
last | 登录历史 |
uptime | 开机时长 + 负载 |
date | 当前时间 |
cal | 日历 |
env | 环境变量 |
lsb_release -a | 发行版信息 |
cat /etc/os-release | 同上(更通用) |
dmidecode | 硬件信息 |
lspci | PCI 设备 |
lsusb | USB 设备 |
lsblk | 块设备(盘) |
lscpu | CPU 信息 |
lsmod | 已加载内核模块 |
5.1 内存 / 磁盘 / IO
| 命令 | 含义 |
|---|---|
free -h | 内存使用(人类可读) |
free -m | 内存使用(MB) |
vmstat 1 5 | 每秒一次,共 5 次 |
iostat -xz 1 | 每秒磁盘 IO |
df -h | 磁盘空间 |
df -i | inode 使用率 |
du -sh * | 当前目录每项大小 |
du -ah | sort -h | tail | 找最大的文件⭐ |
6. 调试 / 跟踪
| 命令 | 用途 |
|---|---|
strace | 跟踪系统调用 |
ltrace | 跟踪库调用 |
gdb | 调试器 |
lsof | 列出打开的文件 / fd |
fuser | 谁在用这个文件 |
pmap | 进程内存映射 |
pstack/eu-stack | 进程调用栈 |
objdump | 反汇编 |
nm | 符号表 |
ldd | 看动态库依赖 |
readelf | ELF 文件信息 |
addr2line | 地址转源代码行号 |
6.1 strace 进阶 ⭐
| 命令 | 含义 |
|---|---|
strace -p PID | 跟踪运行中的进程 |
strace -e trace=open,read,write cmd | 只跟踪这几个 syscall |
strace -f cmd | 跟踪 fork 出的子进程 |
strace -c cmd | 统计 syscall 调用次数 |
strace -o trace.log cmd | 输出到文件 |
strace -tt cmd | 加时间戳 |
strace -T cmd | 加每次调用耗时 |
6.2 lsof 常用
| 命令 | 含义 |
|---|---|
lsof -i :80 | 谁在用 80 端口⭐ |
lsof -i tcp | 所有 TCP 连接 |
lsof -p PID | PID 打开了什么 |
lsof -u user | 用户打开的 fd |
lsof file | 谁在用这个文件 |
lsof | grep deleted | 已删除但仍打开(磁盘满的元凶) |
6.3 gdb 极简速查
启动方式:
| 命令 | 含义 |
|---|---|
gdb ./prog | 启动 |
gdb -p PID | attach 到运行中的进程 |
gdb ./prog core | 看 core dump |
gdb 内部命令:
| 命令 | 含义 |
|---|---|
b main | 在main设断点 |
r [args] | 运行 |
c | 继续 |
n | 下一步(不进函数) |
s | 进函数 |
bt | 调用栈 ⭐ |
info threads | 看线程列表 |
thread N | 切到线程 N |
p var | 打印变量 |
q | 退出 |
7. 性能分析
| 命令 | 用途 |
|---|---|
top/htop | 实时进程 CPU / 内存 |
vmstat | 系统层面 CPU / 内存 / IO |
iostat | 磁盘 IO |
mpstat | 每个 CPU 核 |
pidstat | 每个进程的资源使用 |
sar | 历史性能 |
perf | 内核 + 用户态 profiler ⭐ |
perf top | 实时热点函数 |
perf record / report | 离线 profile |
7.1 perf 速用
| 命令 | 含义 |
|---|---|
perf top | 实时热点 |
perf record -g ./prog | profile,带调用栈 |
perf report | 查看 profile 结果 |
perf stat ./prog | 看 cache miss / IPC 等 |
perf stat -e cycles,instructions ./prog | 指定事件计数 |
7.2 vmstat 关键列
vmstat1| 列 | 含义 |
|---|---|
r/b | 运行队列 / 阻塞队列长度 |
us/sy/id/wa | 用户 / 内核 / 空闲 /等 IOCPU% |
si/so | swap in / out(> 0 表示在用 swap,性能差) |
8. 实用组合
| 场景 | 命令 |
|---|---|
| 找最大的 10 个文件 | du -ah / 2>/dev/null | sort -h | tail -10 |
| 看哪个进程在用某个文件 | fuser file或lsof file |
| 找占用磁盘的"已删除但仍打开"文件 | lsof | grep deleted | sort -k 7 -n -r | head(解决:重启对应进程) |
| 跟踪一个进程的全部 fd | ls -l /proc/PID/fd/ |
| 看进程的内存映射 | cat /proc/PID/maps或pmap -x PID |
| 看进程当前在干嘛(卡住了) | strace -p PID/cat /proc/PID/wchan/cat /proc/PID/stack/gdb -p PID -batch -ex bt |
| 实时跟踪日志 + 过滤 | tail -f /var/log/syslog | grep -i error |
| systemd 服务日志 | journalctl -fu nginx/journalctl --since "1 hour ago" -p err |
| 临时压测一个端口 | 服务端nc -lvp 8080,客户端echo "hello" | nc localhost 8080 |
| 找占用某端口的进程 | ss -tnlp | grep :80/lsof -i :80/fuser 80/tcp |
| 后台执行 + 完整日志 | nohup ./longrun > out.log 2>&1 &+disown |
9. 一页式速查(最常用 30 条)
| 类 | 最常用命令 |
|---|---|
| 文件 | ls -lah/cd -/cp -a/rm -rf(慎) /find . -name "*.x" |
| 文本 | grep -rn/tail -f/head -20/sed -i 's/old/new/g'/awk '{print $1}' |
| 进程 | ps aux/top/kill -9 PID/pgrep/pkill |
| 网络 | ss -tnlp/curl -i/tcpdump -i any port 80/ping/dig |
| 系统 | uname -a/uptime/free -h/df -h/du -sh * |
| 调试 | strace -p PID/lsof -i :80/gdb -p PID/pmap PID/cat /proc/PID/maps |
| 性能 | htop/iostat -xz 1/vmstat 1/perf top/perf record -g |
10. 收尾
到这里,Linux基础工具命令层就讲完了。下面进入C 库基础篇——写好的代码到底跑在什么内存上?标准库到底有多少坑?文件系统怎么操作?这些是 Linux 下 C 开发的命脉。