速读#
这篇不是 Linux 命令大全,只收我管服务器时真的高频会敲的几组。登上机器先问三件事:喘不喘、谁占了、日志说什么;htop、ss、journalctl 这些命令只是服务这三个问题。
登服务器先问三句#
| 问题 | 含义 |
|---|---|
| 喘不喘 | 机器负载正常吗? |
| 谁占了 | 端口 / 进程冲突在谁那? |
| 日志说什么 | 服务自己告诉我什么? |
命令会忘,问题不会。先有问题再有命令,顺序反过来就成了背大全。
喘不喘#
htop # 交互式看 CPU/内存/进程(需 apt install htop)uptime # 负载三个数:1 / 5 / 15 分钟平均df -h # 磁盘free -h # 内存du -sh ./* # 当前目录下各项大小htop 用得最多:比自带 top 好看,F6 排序、F9 杀进程。apt install htop 是我到手后第一条命令。
负载数字要对着核数读:1 核的机器 load 1.0 就是满载,0.2 和 2.0 是两个世界。三个数从左到右是 1、5、15 分钟的平均——左低右高说明高峰刚过去,左高右低说明事情正在变糟,同样的数字,方向不同结论相反。
du -sh ./* 管磁盘:Docker overlay2、没清的日志、忘删的备份——磁盘满是最常见告警原因之一。df -h 告诉你「满了」,du 负责回答「被谁吃了」——一个看整体水位,一个逐层往下挖,配合着用。
日志本身也是磁盘大户。journal 占多少、怎么收,它自己就能管:
journalctl --disk-usage # 日志占了多少journalctl --vacuum-size=200M # 收缩到上限内谁占了#
ss -tulnp # 所有监听端口及进程ss -tulnp | grep 80 # 只看 80kill <PID> # 先优雅退出(SIGTERM)kill -9 <PID> # 强制(SIGKILL,最后手段)ss 是 netstat 的现代替代。参数其实拆得开:t tcp、u udp、l 只看监听、n 显示数字端口不反解、p 带上进程——但记不住也没关系,当一个整体背下来就行。加服务、改 Nginx、排查「端口已被占用」,第一个动作往往是它。
kill 的顺序是纪律:先发默认的 SIGTERM,给进程一个体面收尾的机会(写完缓冲、释放锁、断开连接),确认它不理会再上 -9——SIGKILL 由内核直接回收,进程连遗言都没有。上来就 -9,等于剥夺进程善后的机会。
日志说什么#
journalctl -u myapp -f # 实时跟 systemd 服务日志journalctl -u myapp --since today # 只看今天tail -f /var/log/nginx/error.log # 文件日志-f 是 follow。部署后盯着它滚,看到正常请求一行行过,就知道服务在跑——可观测给我的真实价值。
为什么优先 journalctl#
自己部署的东西多用 systemd 守护,日志归 journalctl 统一收;Nginx 这类自己写文件的才用 tail -f。
统一收日志,是 systemd 给可观测面的红利——不用每个服务自己管重定向、切割和落盘位置,-u 服务名 一个入口全找到。
高频小抄#
| 需求 | 命令 |
|---|---|
| 磁盘满了找大文件 | du -sh ./* | sort -h |
| 谁占了端口 | ss -tulnp | grep <端口> |
| 实时看服务日志 | journalctl -u <服务> -f |
| 看最近的报错 | journalctl -p err --since today |
| 日志占了多少磁盘 | journalctl --disk-usage |
留下的不是命令清单,是三问框架:喘不喘、谁占了、日志说什么——登任何服务器先问这三句。
