Linux 基础 25:收尾——自查清单与继续深入的方向

发布于 2022-05-03 20:30 更新于 2022-05-03 22:10 1249 字 7 min read ... 访问量 手写 每个字都是我自己敲的。

Linux 基础 25:收尾——自查清单与继续深入的方向Linux 基础 24:启动流程与救援——UEFI、GRUB、initramfs 与 emergency modeLinux 基础 23:容器与内核边界——namespace、cgroup 与 docker exec 背后Linux 基础 22:日志与故障排查方法论——从现象到根因的六步Linux 基础 21:定时任务——crontab 的坑与 systemd timerLinux 基础 20:Shell 脚本(下)——trap、日志、幂等与并发锁Linux 基础 19:Shell 脚本(上)——引号、条件与退出码Linux 基础 18:性能观测与 strace——机器到底卡在哪Linux 基础 17:防火墙——iptables、nftables、firewalld 与 ufw 的关系Linux 基础 16:SELinux——当权限都对,服务还是被拒绝Linux 基础 15:权限进阶——sudoers 的通配陷阱、ACL 与 capabilitiesLinux 基础 14:SSH 与远程运维——密钥、权限与三种隧道Linux 基础 13:网络基础——自下而上的排错顺序Linux 基础 12:磁盘与文件系统——从块设备到挂载点Linux 基础 11:systemd——unit、systemctl 与 journalctl 的正确用法Linux 基础 10:包管理——apt 到底做了什么,以及四个高频报错Linux 基础 09:用户与组——passwd、shadow、sudoers 三件套Linux 基础 08:环境变量与 shell 启动文件——为什么 ssh 跑命令找不到你的 PATHLinux 基础 07:进程与信号——TERM 和 KILL 到底差在哪Linux 基础 06:管道与重定向——三条流、一个顺序问题Linux 基础 05:文本处理——把 grep/sort/uniq 变成你的分析工具Linux 基础 04:权限与属主——rwx 在文件和目录上不是一回事Linux 基础 03:ls、cp、mv、rm 的真实语义,以及那个由 shell 展开的 *Linux 基础 02:/ 底下为什么是这些目录,inode 里到底存了什么Linux 基础 01:终端、Shell,和命令是怎么被找到的
四张上线前自查清单(权限账号、服务启动、网络防火墙、存储备份)、一张现象到首选命令的对照表、继续深入的方向,以及一条可以长期沿用的排障方法论,作为整个系列的收尾。

这一节要解决什么

25 章走下来,命令学了一堆,但真正的日常其实是两件事:把一台新机器、一个新服务收拾干净,以及出问题时第一时间该敲什么。这一节不给新知识,只给两张东西——上线前的自查清单,和排障时的首选命令表,外加继续深入的方向。

一、四张自查清单

① 权限与账号

  • 家目录权限是 700(chmod 700 /home/*)
  • 私钥、authorized_keys 是 600,.ssh 目录是 700
  • awk -F: '$2==""{print $1}' /etc/shadow 无输出,即没有空密码账号
  • sudo 走白名单(/etc/sudoers.d/),不滥用 NOPASSWD: ALL
  • find / -perm -4000 -type f 里没有可疑的 setuid 程序
  • 服务账号是 nologin,不能拿来登录

② 服务与启动

  • systemctl --failed 为空
  • 关键服务不以 root 运行,配了 User=
  • 有 Restart=on-failure 之类的重启策略
  • 日志进 journald 或自己的日志文件,有轮转
  • 需要开机自启的服务都 systemctl enable 了
  • 没有互相打架的旧服务,比如 network 与 NetworkManager 同时开着

③ 网络与防火墙

  • ss -ltnp 里没有意外监听,该只绑 127.0.0.1 的别绑 0.0.0.0
  • 主机防火墙只放行必要端口
  • 云安全组与主机防火墙的放行范围一致
  • 容器发布的端口考虑了绕过防火墙的问题(见第 17 节)
  • DNS 顺序合理,必要时用 resolvectl 查

④ 存储与备份

  • df -h 与 df -i 都不满,inode 也常爆
  • fstab 用 UUID 加 nofail,网络盘尤其要加
  • findmnt --verify 与 mount -a 都不报错
  • 有能恢复的备份,而不是"备份过"
  • 真演练过一次恢复流程
  • 日志目录有 logrotate 或容量监控

二、现象到首选命令

现象首选命令
服务起不来systemctl status X -l;journalctl -u X -n 50
端口不通ss -ltnp;curl -sv 127.0.0.1:PORT;再看防火墙与安全组
磁盘满df -h;df -i;lsof +L1
文件删不掉lsattr 看 i 属性;lsof file 看是否有人抓着
ssh 拒绝journalctl -u sshd -n 30;namei -l ~/.ssh;看 auth 日志
命令找不到echo $PATH;type -a cmd;command -v cmd
系统卡顿vmstat -w 1;iostat -x 1;pidstat;strace -T
定时任务不跑journalctl -u cron;env -i /bin/bash 复现;systemctl list-timers
容器端口绕过防火墙绑 127.0.0.1,或在 DOCKER-USER 链里拦
网页 403namei -l;ls -Z 与 getenforce 查 SELinux
内存告警free -h 看 available;vmstat 看 si/so
证书过期openssl s_client -connect host:443 -servername host 查日期

三、继续深入的方向

  • 内核与 /proc:理解了进程、内存、IO 在 /proc 里的表示,工具的行为就不再是黑箱。
  • 网络与 eBPF:tcpdump 之后是 bpftrace,能在内核里追踪系统调用与网络,排障进入快车道。
  • 容器编排(K8s):单机容器之上是调度与自愈,是运维与后端的主流去向。
  • 可观测性(Prometheus 加日志聚合):从"出问题才上机器"变成"指标先告警"。
  • 自动化(Ansible / Terraform):把手工步骤变成可重复、可审查的代码。

清单不是用来"打勾交差"的,而是上线前和出事时各过一遍。每次真出一次故障,回头给它补一条——这份清单应该随你的经验一起变长。

四、最后:方法论

这个系列真正想留下的不是命令表,而是一种顺序:先观察再动手、先看日志再猜、一次只改一个变量、保留现场、把过程写下来。命令会忘,顺序不会——照着这个顺序走,哪怕机器你从没见过,也能一步步把答案问出来。

五、动手清单

systemctl --failed                                   # 1. 有没有失败的服务
awk -F: '$2==""{print $1}' /etc/shadow               # 2. 空密码账号,应为空
find / -perm -4000 -type f 2>/dev/null | head        # 3. setuid 文件排查
ss -ltnp | head                                      # 4. 监听与绑定地址
df -h; df -i                                         # 5. 空间与 inode
findmnt --verify --verbose | head                    # 6. fstab 校验
journalctl -p err -b --no-pager | tail -20           # 7. 本次开机的错误
ls /etc/cron.d /etc/logrotate.d 2>/dev/null          # 8. 定时与日志轮转配置

小结

  • 四张清单:权限账号、服务启动、网络防火墙、存储备份,覆盖绝大多数"顺手能修"的问题。
  • 一张对照表把现象映射到首选命令,出事先照着敲,别凭感觉。
  • 深入方向:内核与 /proc、eBPF、K8s、可观测性、自动化,各按需要挑一个走下去。
  • 方法论:先观察再动手、先看日志再猜、一次改一个变量、保留现场、写下过程。
  • 清单会越来越长,那正是你经验在增长的样子。

下一节预告

本系列到这里收尾。下一站不必是"下一节"——把上面任意一个深入方向挑一个,动手做个小项目,比如给自己的机器加一整套 Prometheus 监控,或把日常操作写成 Ansible,比继续读更有用。

执笔 手写

喜欢的话,留下你的评论吧~

加载中...