Shell 脚本写稳一点:几个默认就该加的东西
set -euo pipefail 各管什么、它在哪些位置会失效,以及引号、IFS、mktemp 配 trap 这些挡事故的写法。
这里是我个人的学习记录。遇到问题、查资料、试错、记结论, 大部分内容都是写给几个月后的自己看的,顺便放在网上,万一对别人也有用。 每条命令都在自己的机器或服务器上跑过,路径和报错都是照原样抄下来的。
从第一次开机到故障排查。访达为什么找不到 Library、终端里 PATH 为什么报错、 「已损坏打不开」到底是什么、储存空间里的「其他」是谁占的—— 九个章节,每一处都给了路径和命令。
从装机到故障排查。装完系统该做什么、C 盘满了怎么清、开机慢看哪里、蓝屏怎么读、 系统进不去怎么救——每一章都写了具体命令和判断标准。
set -euo pipefail 各管什么、它在哪些位置会失效,以及引号、IFS、mktemp 配 trap 这些挡事故的写法。
PATH、% 转义、输出丢失、时区、任务重叠——五个「手动能跑、放进 cron 就不行」的原因,以及什么时候该换成 timer。
venv 到底建了什么、requirements.txt 该怎么记、镜像源怎么配,以及 externally-managed-environment 该怎么处理。
递归和权威的区别、dig 输出逐字段的读法,以及 NXDOMAIN 和「查到了但是空」为什么必须分开看。
接口怎么选、BPF 过滤器怎么写、写文件后离线分析,以及「为什么 sudo 抓得到普通用户抓不到」。
密钥生成、authorized_keys 的权限要求、sshd_config 三处改动,以及 host key 变更后该怎么确认和清理。
proxy_pass 结尾那个斜杠、location 的匹配优先级、转发头怎么补齐,以及 413 和 504 各自从哪来。
叶子证书、中间证书、根证书各自在哪,三类报错怎么对号入座,最后用一条 openssl 命令把验证跑完。
没有一篇是看完别人的文章转述的。都是自己卡住、试出来、再回头补原理, 所以顺序常是「结论在前、道理在后」,也常带着当时的具体报错。
写「修改配置文件」没有意义,得写清楚是哪个文件的哪一行。 所以这里的命令都带完整路径和参数,例外情况也会标出来。
只在某个版本上验证过的、只在某台机器上复现过的,正文里会注明。 与其写成确定结论,不如留着这个前提。
可以,注明出处和原文链接就行,不用另外问我。改过之后再发也请标明「有改动」, 免得错误算到原文头上。
写信到 2017727492@qq.com, 附上页面地址和你那边的情况(系统版本、报错原文)就行。确认是我写错,我会改并在文末注明。
因为只在真的遇到、并且真的解决之后才写。没踩过的坑写出来多半是抄文档, 那种内容自己回头看也没用。平均一个月一两篇,专题会攒得久一些。
纯静态页面,一个 CSS 文件,没有框架也没有构建步骤。 这样五年后打开还是这个样子,不会因为依赖升级就整站崩掉。
所有内容都是我自己动手之后写的,没有翻译、没有搬运。 所以更新很慢,一个月可能就一两篇,遇到卡很久的问题才会想记下来。 如果某篇帮到你了,那挺好;如果发现有错,欢迎写信告诉我,我会改。