avatar

Ryan's Blog

The first step is always the hardest.

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于
  • 工具
Home Linux 常用命令速查:磁盘、日志、进程、网络、Docker 与文件排查实践
文章

Linux 常用命令速查:磁盘、日志、进程、网络、Docker 与文件排查实践

Posted 2021-11-25 Updated 3 days ago
By Ryan Chen
31~40 min read

前言

Linux 常用命令不应该只是一堆零散片段。真正排查问题时,我们通常是围绕场景来组合命令:

  • 磁盘满了,先看哪个目录最大;
  • 服务异常,先看日志、进程、端口;
  • 请求不通,先看 IP、路由、防火墙和监听;
  • 容器异常,先看状态、日志、挂载、端口和资源;
  • 性能下降,先看 CPU、内存、IO、网络和连接数。

这篇文章按运维排查场景整理常用 Linux 命令,适合作为日常速查手册。

如果需要做压测或系统参数调优,可以参考:

  • SysBench 压测实践:CPU、内存、FileIO 与 MySQL OLTP 基准测试指南
  • Linux 内核与网络参数调优:sysctl、文件描述符、TCP 队列与高并发配置

系统信息

查看内核和系统版本:

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 命令速查的重点不是记住所有参数,而是建立排查路径:

  1. 先判断问题属于磁盘、CPU、内存、网络、进程还是应用日志;
  2. 再用对应命令缩小范围;
  3. 最后结合服务日志、监控、配置和变更记录定位原因。

建议把本文中的组合命令保存为自己的排查清单,并根据实际环境补充业务相关命令。

参考资料

  • GNU Coreutils Manual
  • GNU Grep Manual
  • man7:ss(8)
  • man7:ip(8)
  • Docker CLI 官方文档
  • SysBench 压测实践:CPU、内存、FileIO 与 MySQL OLTP 基准测试指南
  • Linux 内核与网络参数调优:sysctl、文件描述符、TCP 队列与高并发配置
Linux
Linux Linux命令 系统管理 运维排查 网络配置 Docker 日志分析
License:  CC BY 4.0
Share

Further Reading

Oct 17, 2022

Linux 内核与网络参数调优:sysctl、文件描述符、TCP 队列与高并发配置

系统整理 Linux sysctl 调优方法,覆盖文件描述符、进程数、TCP 连接队列、TIME_WAIT、SYN Flood、端口范围、rp_filter、ARP、swappiness 与 vm.max_map_count,并强调参数适用场景、风险和压测验证。

Nov 25, 2021

Linux 常用命令速查:磁盘、日志、进程、网络、Docker 与文件排查实践

按运维排查场景整理 Linux 常用命令,覆盖磁盘空间、日志检索、进程资源、网络端口、防火墙、文件查找、文本处理、压缩解压、权限用户和 Docker 容器排查。

OLDER

Maven 构建产物添加时间戳:maven.build.timestamp、build-helper 与可复现构建说明

NEWER

Spring @Autowired 字段注入波浪线:为什么不推荐 Field Injection 以及构造器注入实践

Recently Updated

  • Agent 架构设计原则:Router、Runtime 与 Business Script 的职责划分
  • RocketMQ 架构设计与应用最佳实践:高可用消息队列核心解析
  • Redis 核心概念、数据结构与高可用架构详解
  • B+树原理与 MySQL InnoDB 索引机制解析
  • MySQL AUTO_INCREMENT 插入 0 变成自增值的原因与解决方案

Trending Tags

RocketMQ Windows Feign Docker Zipkin SonarQube OkHttp HttpClient API 性能优化

Contents

©2026 Ryan's Blog. Some rights reserved. · 粤ICP备2022031588号