目标:生产环境日常运维与排障 适用: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) 清理缓存/旧日志(清理前先确认可删范围)