初级运维的核心能力就一句话:会用命令把系统"看懂、改对、救回来"。这篇把最常用的几块梳理成一份可反复查阅的手册。

一、高频命令速查

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/syslogjournalctl -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 -hdu -sh /*
卡了/负载高top/htop + uptime
找文件/日志关键字find / grep -rn

把这些练熟,日常 80% 的系统运维问题就能定位了。