聚焦真正高频、决定服务器稳定与安全的操作,减少纯命令罗列,增加原理、决策点与常见陷阱说明。适合已有基本 Linux 经验、想快速形成“服务器思维”的管理员。
核心原则(先理解,再操作)
- 一切变更走包管理器 Debian 的稳定性建立在 APT + 严格依赖关系上。手动编译、手动复制二进制、乱用 curl | bash 都是高风险行为。
- 最小权限 + 可审计 日常用普通用户 + sudo,root 直登几乎只用于救援模式。
- 变更前三问
- 会不会影响正在运行的服务?
- 回滚成本多高?
- 日志/监控能否捕捉问题?
日常最重要三条复合命令(强烈建议做成别名)
Bash
# 日常维护(几乎每天)
alias safeup='sudo apt update && sudo apt list --upgradable && sudo apt full-upgrade -y && sudo apt autoremove --purge'
# 空间+日志清理(空间紧张时)
alias cleanup='sudo apt autoclean && sudo journalctl --vacuum-time=14d && sudo find /var/log -type f -name "*.log.*" -mtime +30 -delete'
# 快速健康检查(登录第一件事)
alias health='uptime && free -h && df -h -x tmpfs -x devtmpfs && ss -s && systemctl --failed --no-legend'
关键领域操作思维导图
1. 安全基线(新服务器到手 30 分钟内完成)
-
SSH 加固(最重要一步)
- 改端口(2222 或更高随机端口)
- 禁用密码登录(只允许 ed25519 密钥)
- 禁用 root 登录
- 限制允许用户(AllowUsers deploy)
典型配置片段(/etc/ssh/sshd_config):
textPort 2222 PermitRootLogin prohibit-password PasswordAuthentication no PubkeyAuthentication yes AllowUsers deploy@你的管理IP段 -
防火墙(ufw 最简单)
Bashsudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow 2222/tcp comment 'SSH new port' sudo ufw allow from 你的管理IP to any port 80,443 proto tcp sudo ufw --force enable -
Fail2Ban(防暴力破解)
Bashsudo apt install fail2ban # 大多数人直接用默认 jail.local 就够用 sudo systemctl enable --now fail2ban
2. 包管理决策树
| 场景 | 首选命令 | 备选 / 注意事项 |
|---|---|---|
| 日常小更新 | apt upgrade | 基本不会中断服务 |
| 内核/重要依赖升级 | apt full-upgrade | 可能需要重启 |
| 想用较新版本但不想切 testing | apt install -t bookworm-backports xxx | 先确认 backports 源已启用 |
| 明确要安装某个版本 | apt install pkg=版本号 | 或用 apt pinning |
| 修复依赖损坏 | apt install -f | 常跟在手动 .deb 安装后 |
| 查看谁占了某个文件/端口 | apt-file search /bin/xxx | 需要先 apt install apt-file && apt-file update |
3. 服务管理(systemd)高频模式
- 不中断服务改配置 → systemctl reload xxx(首选)
- 必须重启才生效 → systemctl restart xxx
- 开发/调试时 → systemctl status -l -n 100 xxx + journalctl -u xxx -f
- 批量操作 → systemctl --type=service list-units --state=running
4. 问题定位快速路径(5 分钟内找到 80% 原因)
- systemctl --failed → 有没有单元启动失败
- journalctl -p 3 -xb → 本次启动后的所有错误(优先级 3 及以上)
- dmesg --color=always | grep -iE 'error|fail|oom|fault' → 内核级异常
- ss -ltnp + lsof -i :端口号 → 端口冲突/占用
- sudo -u 运行用户 strace -p PID → 某个进程卡死时用(慎用)
5. 空间与性能常见陷阱及对策
- /var/log 爆炸 → 配置 /etc/systemd/journald.conf → SystemMaxUse=300M → 定期 journalctl --vacuum-size=200M
- inode 用尽(df 显示空间够但无法创建文件) → df -i 查看 inode 使用率 → 常见元凶:大量小文件(邮件队列、日志分片、缓存)
- 内存压力导致 OOM Killer → grep -i 'out of memory' /var/log/syslog → 调整 /proc/sys/vm/swappiness(服务器建议 10 或更低)
推荐“最小但够用”工具集(按重要性排序)
- htop / btop(进程监控)
- ncdu(磁盘占用可视化)
- tmux / screen(会话持久)
- fail2ban
- unattended-upgrades(自动安全更新)
- mtr / tcpdump / nmap(网络诊断)
- restic / borgbackup(备份)
- prometheus-node-exporter(未来监控)
总结:服务器运维的“节奏感”
- 每天:health + safeup
- 每周:cleanup + 检查 failed units
- 每月:评估是否需要重启(内核更新后)
- 任何升级前:快照/备份 → 测试环境验证 → 生产逐步滚动
真正的高手不是记住 200 条命令,而是养成“先看状态 → 改最小范围 → 验证 → 记录”的习惯。