目标:生产环境日常运维与排障 适用:Ubuntu 20.04/22.04/24.04(含 Debian 系常见兼容)
1. 系统信息(System Info)
lsb_release -a
查看系统发行版与版本信息(确认环境/兼容性)。
uname -a
查看内核版本与架构(排查驱动/内核差异问题)。
uptime
查看运行时长与负载(快速判断是否负载异常)。
top
交互式查看 CPU/内存/进程实时占用(第一时间锁定异常进程)。
free -h
查看内存/Swap 使用情况(判断是否内存压力或 swap 抖动)。 - Mem: 物理内存(RAM)的总量与使用情况
-
Swap: 交换空间(swap)的总量与使用情况
-
Swap 是把磁盘(或 SSD)的一块空间当作“内存的后备池”来用:当物理内存不够、或者内核想把一些不常用的内存页挪走时,会把部分数据写到 swap 里
高价值组合(实战):
top -b -n 1 | head -n 40
快速输出一次性 top 快照(便于记录/发工单)。
参数说明:
- -b:批处理模式(非交互,适合脚本/一次性采样)
- -n:采样次数(1 表示只采一次)
2. 进程管理(Process)
ps aux
查看所有进程
参数说明: - ps:查看进程
-
a:显示所有用户的进程(不仅是当前用户)
-
u:用“用户友好格式”显示(包含 USER/CPU/MEM 等列)
-
x:也显示没有控制终端的进程(daemon/后台服务很常见)
ps aux | grep -Ei 'uvicorn|gunicorn|nginx|postgres'
列出当前所有进程,然后筛出命令行里包含 uvicorn / gunicorn / nginx / postgres 的进程
-
|(管道):把前一个命令输出传给后一个命令做过滤
-
-i:忽略大小写
-
-E: 用扩展正则,就不用写 | 了)
pgrep -af nginx
它会按进程名/命令行关键字搜索包含 nginx 的进程,并把匹配到的进程 PID + 完整命令行 打出来。
参数说明: - -a:输出 PID + 完整命令行 - -f:按完整命令行匹配(包含参数)
kill -15 <pid>
优雅结束进程(优先用它,给服务清理资源的机会)。
kill -9 <pid>
强制结束进程(卡死/无法退出时用;可能导致数据/状态不一致)。
高价值组合(实战):
ps aux --sort=-%cpu | head -n 20
按 CPU 占用排序找“最耗 CPU 的进程”。
参数说明:
- --sort:按字段排序(-%cpu 表示 CPU 由高到低)
ps aux --sort=-%mem | head -n 20
按内存占用排序找“最耗内存的进程”(OOM 排查常用)。
3. 端口与网络(Network)
ss -lntp
查看监听端口与对应进程。
ss -lntp | grep -E ':80|:443|:8000|:5432|:6379' || true
快速确认关键端口是否在监听(Web/后端/DB/Redis)。
ss -antp | head -n 50
查看当前 TCP 连接(排查连接数暴涨等问题)。
curl -vk https://dreamlog.xyz/ -o /dev/null
验证 TLS/证书链/握手是否正常(排查证书、SNI、回源问题)。
参数说明: - -v:输出详细连接信息(看握手/重定向/请求头) - -k:忽略证书校验(仅用于排障,别当“长期方案”)
ping -c 4 8.8.8.8
验证基础网络连通性(快速判断是否网络整体异常)。
参数说明: - -c:发送次数(避免一直 ping 占用终端)
4. 磁盘与文件(Disk & File)
df -h
查看磁盘分区使用率(磁盘满导致服务异常的第一检查项)。
du -h -d 1 /var | sort -h
查看目录占用并排序(快速定位“大户”)。
参数说明:
- -h:人类可读单位(GB/MB)
- -d:递归深度(1 只统计下一层,避免跑太久)
find /var/log -type f -size +200M -print
查找大日志文件(磁盘突然满的常见元凶)。
- 在 /var/log 目录下递归查找所有“大于 200MB 的普通文件”,并把它们的路径打印出来(通常用来找超大的日志文件)
cp -a <src> <dst>
复制并保留权限/时间戳(做备份/迁移时更稳)。
参数说明: - -a:归档复制(尽量保留原属性,适合生产文件复制)
mv <src> <dst>
移动/重命名文件(日志切割/目录调整常用)。
rm -rf <path>
强制删除目录。
5. 日志(Logs)
tail -n 200 /var/log/syslog
查看系统日志最近 200 行(系统层问题/服务崩溃线索)。
参数说明: - -n:输出最后 N 行(只看近期更高效)
tail -f /var/log/syslog
实时跟随日志(复现问题时盯日志最有效)。
参数说明: - -f:持续跟随追加内容(实时观察)
grep -nE 'error|fail|panic' /var/log/syslog | tail -n 50
按关键字过滤并定位行号(快速抽取错误片段)。
参数说明: - -n:显示行号(便于定位上下文) - -E:使用扩展正则(多个关键字更方便)
6. 权限与用户(Permission)
id
查看当前用户与组(排查权限问题先确认身份)。
ls -lh <path>
查看文件权限/属主属组(权限问题必查)。 - 以“详细列表”方式查看某个路径(文件或目录)的信息
chmod 640 <file>
修改权限。
- 把 <file> 的权限设置为 640(用八进制表示的权限位)
- 权限拆解(6 4 0 分别对应 属主 / 属组 / 其他人):
- 6 = 4+2 = rw-:属主(owner)可读可写
- 4 = r--:属组(group)只读
- 0 = ---:其他人(others)无任何权限
所以结果是:只有文件属主能读写,属组只能读,其他人完全不能访问。
chown -R <user>:<group> <path>
递归修改属主属组(部署目录权限修复常用)。
参数说明: - -R:递归对子目录/文件生效(注意目标路径,误用影响面大)
sudo -n true
检查当前会话是否具备 sudo 权限(自动化/脚本里常用)。
参数说明: - -n:不弹交互式密码提示(没有权限就直接失败)
7. 服务管理(Systemd)
systemctl status <service> --no-pager
查看服务状态与最近日志摘要(判断是否 running/failed)。
参数说明: - --no-pager:不分页输出(便于复制/脚本采集)
systemctl restart <service>
重启服务(配置变更后常用)。
systemctl stop <service> && systemctl start <service>
停再起(某些服务 restart 不彻底时使用)。
journalctl -u <service> --no-pager -n 200
查看服务最近 200 行日志(比翻文件更快)。
参数说明: - -u:指定服务单元(只看该服务日志) - -n:只看最近 N 行(聚焦近期问题)
journalctl -u <service> -f
实时跟随服务日志(复现问题时盯日志)。
参数说明: - -f:持续跟随输出(实时观察)
8. 包管理(APT)
apt update
刷新软件源索引(安装/升级前必做)。
apt install -y <pkg>
安装软件包(生产建议固定一次性操作,避免频繁变更)。
参数说明: - -y:自动确认(适合脚本;注意别装错包)
apt remove -y <pkg>
卸载软件包(不删配置文件)。
apt purge -y <pkg>
卸载并清理配置文件(更彻底;生产上谨慎)。
apt autoremove -y
清理无用依赖包(减少系统垃圾)。
apt clean
清理 apt 缓存(释放磁盘空间,磁盘满时常用)。
9. 常用排障(Troubleshooting)
9.1 端口被占用
ss -lntp | grep -E ':80|:443|:8000|:5432|:6379'
定位占用端口的进程(快速给出 PID/进程名)。
高频处理:
kill -15 <pid> || kill -9 <pid>
先优雅停止,必要时强杀(注意:强杀可能导致数据/状态不一致)。
9.2 服务无法启动
systemctl status <service> --no-pager
先看服务状态(是否 failed、退出码是什么)。
journalctl -u <service> --no-pager -n 300
再看最近日志(通常直接给出根因)。
9.3 CPU / 内存异常
uptime && free -h
先看负载与内存(判断是否整体资源压力)。
ps aux --sort=-%cpu | head -n 15
找 top CPU 进程(定位“谁在烧 CPU”)。
ps aux --sort=-%mem | head -n 15
找 top 内存进程(定位“谁在吃内存/OOM 风险”)。
9.4 磁盘满
df -h
确认哪个分区满了(优先定位 90%+ 的分区)。
du -h -d 1 /var | sort -h
定位 /var 下的大户(日志、缓存最常见)。
find /var/log -type f -size +200M -print
快速找出超大日志文件(直接命中常见原因)。
9.5 网络异常
ping -c 4 8.8.8.8 && ping -c 4 github.com
区分“纯 IP 可达但 DNS 挂了” vs “整体网络不可达”。
curl -sS -D- http://127.0.0.1:80/ -o /dev/null
本机回环验证服务入口(排除外部网络因素)。
常见问题排查流程(Checklist)
A. 服务挂了 / 页面打不开
1) systemctl status / dc ps 看服务是否 running
2) journalctl / dc logs 看最近错误
3) ss -lntp 看端口是否监听
4) curl 127.0.0.1 本机回环验证
5) 若是网关:查 nginx 日志 + 回源连通性
B. 502 / 连接被拒绝
1) ss -lntp 确认上游端口是否监听
2) ps/pgrep 确认上游进程是否存在
3) curl 上游本机地址确认是否能响应
4) 查网关日志是否 connect refused / timeout
C. 机器卡顿 / 资源异常
1) uptime 看 load,free -h 看内存/Swap
2) ps aux --sort=-%cpu / -%mem 找元凶
3) tail/grep/journalctl 找异常时间点日志
4) 必要时限流/重启单服务(最小影响面优先)
D. 磁盘满
1) df -h 找满的分区
2) du -h -d 1 定位大目录
3) find /var/log -size +200M 找大日志
4) 清理缓存/旧日志(清理前先确认可删范围)