我们每天都在和扩展名打交道。双击一个 .jpg,上传一个 .zip,下载一个 .exe,把一个 .md 丢进 Git。它们像门牌一样贴在文件门口:告诉你该用什么打开,该不该相信,该不该放行。大多数时候,它们安静到像不存在;一旦出问题,它们又立刻变得很吵。
一个被改名的 .txt 不会变成图片;一个伪装成 .jpg 的脚本也不会因为换了衣服就变乖。可是现实中,太多系统、太多人、太多自动化脚本,第一眼看的偏偏就是那个门牌。
因此我决心写一个系列,把点号之后这些被当成理所当然的东西,一个个拆开。
从 DOS 时代文件名末尾那三个字符,一路讲到今天容器、脚本、证书、压缩包和 AI 模型文件上的新后缀;从 Windows 的文件关联,讲到 Unix 对扩展名的冷淡;从 magic number 到 MIME type;从“这个文件是什么”,讲到“这个系统以为它是什么”。
这不是一本扩展名字典。
扩展名、后缀、后缀名,这些词在日常语境里经常被混用,但到了具体系统里,它们并不总是一回事。这个系列也不会假装每个点号后面都藏着一个严谨标准。有些后缀背后是一种格式;有些是一串后缀共同组成的一条流水线;有些只是社区约定;有些是商业胜利;还有些,纯粹是历史留下来的临时方案,后来因为大家都懒得改,就变成了事实标准。
所以这个系列更像一场考古。
每一篇都从一个小东西入手:一个点号,几个字母,一个图标,一次双击,一段上传代码,一个看起来无害的文件名。然后往回挖,看看它为什么长这样,谁规定的,谁误解了它,谁利用了它,谁又不得不兼容它。
你可以挑一篇感兴趣的开始读,也可以按顺序慢慢读。这个系列会持续更新,而且大概率永不完结。原因很简单:只要人类还继续给文件起名字,点号之后就会继续长出新的约定、新的误会和新的坑。