初级运维的核心能力就一句话:会用命令把系统"看懂、改对、救回来"。这篇把最常用的几块梳理成一份可反复查阅的手册。
一、高频命令速查
systemd 服务管理
systemctl status nginx # 看服务状态
systemctl start|stop|restart nginx
systemctl enable --now nginx # 开机自启 + 立即启动
systemctl disable nginx
systemctl list-unit-files # 所有服务的自启状态
systemctl cat nginx # 看服务的 unit 文件
日志 journalctl
journalctl -u nginx -f # 实时跟踪某服务日志
journalctl -u nginx --since "1 hour ago"
journalctl -p err -b # 本次启动以来的错误级别日志
journalctl -k | grep -i oom # 内核日志里找 OOM
网络与端口 ss
ss -tlnp # 所有正在监听的 TCP 端口
ss -s # 连接统计概览
ss -tunp | grep ESTAB # 已建立的连接
lsof -i :80 # 谁占用了 80 端口
文件查找与内容搜索
find / -name "*.log" -mtime +7 -size +100M # 7 天前、>100M 的日志
find /var/log -type f -name "*.gz" -delete # 批量删(慎用)
grep -rn "error" /var/log/nginx/ # 递归搜内容
grep -c "500" access.log # 统计出现次数
二、用户与权限
# 建用户
sudo adduser deploy
# 权限三件套
chmod 755 file # rwxr-xr-x(属主读写执行,其余读执行)
chmod 644 file # rw-r--r--
chown -R deploy:deploy /var/www/site
# umask:新建文件的默认权限掩码,022 表示去掉 group/other 的写权限
umask 022
sudo 授权:不要直接改 /etc/sudoers,用 visudo 或往 /etc/sudoers.d/ 放文件:
sudo visudo -f /etc/sudoers.d/deploy
# 内容:只允许 deploy 无密码执行指定命令
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
原则:能用普通用户 + sudo 就不要常驻 root;权限给到"刚好够用"。
三、systemd 写一个自启动服务
把一个程序做成开机自启、挂了自动拉起,只要一个 .service 文件。
/etc/systemd/system/myapp.service:
[Unit]
Description=My App
After=network.target
[Service]
User=deploy
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/myapp --config /opt/myapp/config.yaml
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
生效:
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
systemctl status myapp
关键字段:Restart=always(崩溃自动拉起)、User(以哪个用户跑)、After(依赖顺序)。
四、磁盘排查
df -h # 各挂载点用量
du -sh /* | sort -rh | head -20 # 根目录下谁占空间最多
free -h # 内存 + swap
swapon --show # swap 使用情况
磁盘满的经典三步:df -h 定位分区 → du -sh 逐层下钻 → 清理日志/大文件。
五、进程与负载
top # 动态看 CPU/内存,按 P(CPU)/M(内存) 排序
htop # 更友好的 top(需安装)
ps aux --sort=-%cpu | head # 按 CPU 排序
uptime # 看 1/5/15 分钟 load average
load average 怎么读:数值接近并超过 CPU 核数,说明有任务在排队(可能过载)。核数:nproc。
六、定时任务:cron vs systemd timer
cron 最常用:
crontab -e
# 分 时 日 月 周 命令
30 3 * * * /opt/backup.sh # 每天凌晨 3:30 执行
*/5 * * * * /opt/check.sh # 每 5 分钟
crontab -l 查看、/var/log/syslog 或 journalctl -u cron 看执行日志。复杂定时(含依赖、随机延迟)可用 systemd timer,但初级先掌握 cron 即可。
七、apt 包管理
sudo apt update # 刷新索引
sudo apt upgrade # 升级已装包
sudo apt install nginx
sudo apt remove nginx
sudo apt autoremove # 清理不再需要的依赖
apt search "php" # 搜索包
apt list --installed # 已装列表
小结
| 场景 | 先敲什么 |
|---|---|
| 服务不起来了 | systemctl status xxx + journalctl -u xxx |
| 端口被占 | ss -tlnp / lsof -i :端口 |
| 磁盘满了 | df -h → du -sh /* |
| 卡了/负载高 | top/htop + uptime |
| 找文件/日志关键字 | find / grep -rn |
把这些练熟,日常 80% 的系统运维问题就能定位了。