Linux 常用命令速查:磁盘、日志、进程、网络、Docker 与文件排查实践
前言
Linux 常用命令不应该只是一堆零散片段。真正排查问题时,我们通常是围绕场景来组合命令:
- 磁盘满了,先看哪个目录最大;
- 服务异常,先看日志、进程、端口;
- 请求不通,先看 IP、路由、防火墙和监听;
- 容器异常,先看状态、日志、挂载、端口和资源;
- 性能下降,先看 CPU、内存、IO、网络和连接数。
这篇文章按运维排查场景整理常用 Linux 命令,适合作为日常速查手册。
如果需要做压测或系统参数调优,可以参考:
系统信息
查看内核和系统版本:
uname -a
cat /etc/os-release
hostnamectl
查看启动时间和负载:
uptime
w
查看 CPU 信息:
lscpu
cat /proc/cpuinfo | grep 'model name' | head
查看内存:
free -h
cat /proc/meminfo | head
查看块设备:
lsblk
blkid
磁盘与目录
查看磁盘使用率:
df -h
查看 inode 使用率:
df -ih
查找根目录下最大的一级目录:
du -xhd1 / | sort -hr | head -n 10
说明:
-x:不跨文件系统;-h:人类可读单位;-d1:只看一层目录。
查找大文件:
find / -type f -size +1G 2>/dev/null
查找最近 1 天修改过的日志:
find /var/log -type f -mtime -1 -ls
查看目录大小:
du -sh /var/log
日志查看
实时查看日志:
tail -f app.log
只看最后 200 行:
tail -n 200 app.log
带行号查看:
cat -n app.log | less
查找关键字:
grep -n "ERROR" app.log
查找关键字前后 10 行:
grep -n "ERROR" app.log -C 10
只看关键字后 10 行:
grep -n "ERROR" app.log -A 10
只看关键字前 10 行:
grep -n "ERROR" app.log -B 10
分页查看大文件:
less app.log
在 less 中可以使用:
/关键字 向下搜索
?关键字 向上搜索
n 下一个匹配
N 上一个匹配
G 跳到文件末尾
g 跳到文件开头
查看 systemd 服务日志:
journalctl -u nginx -f
journalctl -u nginx --since "2026-06-29 10:00:00"
journalctl -xe
进程与资源占用
实时查看进程:
top
更友好的工具:
htop
按内存排序:
ps aux --sort=-%mem | head
按 CPU 排序:
ps aux --sort=-%cpu | head
查找进程:
ps -ef | grep java
pgrep -af java
查看进程打开的文件:
lsof -p <pid> | head
查看进程限制:
cat /proc/<pid>/limits
查看进程工作目录:
readlink /proc/<pid>/cwd
查看进程环境变量:
tr '\0' '\n' < /proc/<pid>/environ
内存与系统负载
查看内存:
free -h
观察系统运行状态:
vmstat 1
常看字段:
| 字段 | 说明 |
|---|---|
r |
运行队列,持续大于 CPU 核数说明 CPU 可能繁忙。 |
si/so |
swap in / swap out,持续非 0 要关注内存压力。 |
us/sy/id/wa |
用户态、内核态、空闲、IO wait。 |
查看内存占用最高的进程:
ps aux --sort=-%mem | head -n 10
查看 OOM 记录:
dmesg -T | grep -i -E 'oom|killed process'
磁盘 IO
查看磁盘 IO:
iostat -x 1
常看字段:
| 字段 | 说明 |
|---|---|
%util |
设备忙碌程度,长期接近 100% 说明磁盘可能瓶颈。 |
await |
IO 平均等待时间。 |
r/s、w/s |
每秒读写次数。 |
rkB/s、wkB/s |
每秒读写吞吐。 |
查看哪个进程在读写磁盘:
iotop
没有 iotop 时,可以查看进程 IO:
cat /proc/<pid>/io
网络与端口
查看 IP 地址:
ip addr
查看路由:
ip route
查看监听端口:
ss -lntp
查看 UDP 监听:
ss -lnup
查看所有 TCP 连接状态汇总:
ss -s
查看某个端口占用:
ss -lntp | grep ':80'
lsof -i :80
查看与某个目标的连通性:
ping 8.8.8.8
curl -I https://example.com
跟踪路由:
traceroute example.com
# 或
tracepath example.com
DNS 查询:
nslookup example.com
dig example.com
抓包:
tcpdump -i eth0 port 80 -nn
生产环境抓包要控制过滤条件和输出量,避免影响性能或泄露敏感数据。
防火墙
iptables
查看规则:
iptables -L -n -v
iptables -S
查看规则行号:
iptables -L INPUT -n --line-numbers
插入允许规则:
iptables -I INPUT 1 -s <源IP>/32 -p tcp --dport <端口> -j ACCEPT
按行号删除规则:
iptables -D INPUT <行号>
firewalld
查看状态:
firewall-cmd --state
查看开放端口:
firewall-cmd --list-ports
开放端口:
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
删除端口:
firewall-cmd --remove-port=8080/tcp --permanent
firewall-cmd --reload
文件查找与文本处理
查找文件:
find / -name 'nginx.conf' 2>/dev/null
查找可执行文件:
which java
whereis java
command -v java
统计行数:
wc -l app.log
查看文件前几行:
head -n 50 app.log
查看文件后几行:
tail -n 50 app.log
按列提取:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
替换文本:
sed -i 's/old/new/g' file.txt
Windows 换行转 Linux:
sed -i 's/\r$//' file.txt
# 或
dos2unix file.txt
Linux 换行转 Windows:
unix2dos file.txt
压缩与解压
tar.gz 打包:
tar -czvf backup.tar.gz /data/app
解压 tar.gz:
tar -xzvf backup.tar.gz
查看压缩包内容:
tar -tzvf backup.tar.gz | head
gzip 压缩和解压:
gzip file.log
gzip -d file.log.gz
zip 压缩和解压:
zip -r app.zip app/
unzip app.zip
权限与用户
查看文件权限:
ls -lah
修改权限:
chmod 755 script.sh
修改属主:
chown app:app app.log
查看当前用户:
whoami
id
切换用户:
su - app
查看登录用户:
who
last
Docker 常用操作
创建容器
docker run --name <容器名> \
-p <宿主机端口>:<容器端口> \
-v <宿主机目录>:<容器目录> \
-e TZ=Asia/Shanghai \
--restart unless-stopped \
-d <镜像>:<标签>
说明:
--name:容器名称;-p:端口映射;-v:目录挂载;-e:环境变量;--restart unless-stopped:异常退出后自动重启;-d:后台运行。
不建议默认加 --privileged=true。它会给容器很高权限,只有在明确需要访问宿主机设备或内核能力时才使用。
生命周期
docker ps
docker ps -a
docker start <容器>
docker stop <容器>
docker restart <容器>
docker rm <容器>
强制删除容器:
docker rm -f <容器>
生产环境使用 -f 前要确认容器可以被中断。
查看日志
docker logs -f <容器> --tail 200
进入容器
docker exec -it <容器> bash
# 如果没有 bash
docker exec -it <容器> sh
查看资源占用
docker stats
查看容器详情
docker inspect <容器>
备份 MySQL / MongoDB
MySQL:
docker exec <容器> sh -c 'exec mysqldump --all-databases -u<用户名> -p<密码>' > /data/backup/mysql_$(date +%F).sql
MongoDB:
docker exec <容器> sh -c 'mongodump --archive -u <用户名> -p <密码>' > /data/backup/mongo_$(date +%F).gz
注意:命令行明文密码可能进入 shell 历史或进程列表,生产环境建议使用配置文件、环境变量或临时凭据。
常见排查组合
1. 磁盘满了
df -h
du -xhd1 / | sort -hr | head
find / -type f -size +1G 2>/dev/null
2. 端口不通
ss -lntp | grep ':8080'
ip addr
ip route
curl -v http://127.0.0.1:8080
iptables -L -n -v
3. 服务 CPU 高
top
ps aux --sort=-%cpu | head
pidstat -p <pid> 1
Java 服务可以继续配合:
jstack <pid> > jstack.log
4. 内存占用高
free -h
ps aux --sort=-%mem | head
cat /proc/<pid>/status | grep -E 'VmRSS|VmSize|Threads'
dmesg -T | grep -i oom
5. 日志中查异常
grep -n "ERROR" app.log -C 20
grep -n "Exception" app.log -C 20
tail -f app.log
6. 网络连接数异常
ss -s
ss -ant | awk '{print $1}' | sort | uniq -c
ss -ant state time-wait | wc -l
小结
Linux 命令速查的重点不是记住所有参数,而是建立排查路径:
- 先判断问题属于磁盘、CPU、内存、网络、进程还是应用日志;
- 再用对应命令缩小范围;
- 最后结合服务日志、监控、配置和变更记录定位原因。
建议把本文中的组合命令保存为自己的排查清单,并根据实际环境补充业务相关命令。