Skip to content
📌知识点小结
  • 文件名通常是“主文件名.扩展名”,扩展名(后缀)表示这个文件是什么类型、用什么程序打开。
  • .txt 是文本、.png/.jpg 是图片、.exe 是可执行程序、.py 是 Python 脚本、.pdf 是文档。
  • Windows 默认隐藏已知扩展名,这会带来安全风险(如 照片.jpg.exe 看起来像照片)。
  • 文件的“真实类型”由内容决定,扩展名只是提示;改扩展名不会转换内容。
  • 安全上要习惯显示扩展名,识别伪装成文档/图片的可执行文件。
✅自测一下

0.5 文件名、扩展名与文件类型 ​

第〇篇【零基础预科】免费。这一篇讲文件名末尾那个"小尾巴"——扩展名,以及它和安全的关系。

一、扩展名是什么 ​

一个完整文件名通常长这样:

报告      .docx
↑主文件名  ↑扩展名(后缀)

扩展名用来表示文件类型,并决定系统默认用哪个程序打开它。

常见扩展名:

扩展名类型用什么打开
.txt纯文本记事本
.mdMarkdown 文档编辑器
.pdfPDF 文档PDF 阅读器
.png .jpg图片看图/浏览器
.mp4视频播放器
.exeWindows 可执行程序双击即运行
.pyPython 脚本Python 解释器
.yml .json配置/数据文件编辑器/程序
.shLinux 脚本shell 解释器

双击一个文件时,系统其实做了一件"查表匹配"的事:它拿文件名末尾的扩展名去注册表(Windows 的一个系统数据库)里查——".txt 该用记事本打开、.docx 该用 Word 打开、.exe 直接运行"——然后自动启动对应的程序。你之所以双击 .txt 能直接打开记事本,靠的就是这张关联表;这也是为什么同一个 .py 文件,在装了 Python 的电脑上双击能跑、在没装的电脑上双击会弹出"无法打开此文件"的提示框,让你自己挑一个程序来打开。

你可能会问:为什么有的文件叫 .tar.gz,结尾有两个点? 这是"层层打包"的结果:先用 gzip 把单个或多个文件压缩成 .gz,而之前它可能已经用 tar 工具打成了 .tar 归档包,两个步骤的后缀叠在一起就成了 .tar.gz。Linux 和开源世界里这种复合后缀很常见,你从 GitHub 下载源码压缩包时几乎都会遇到。看到它不用慌,本质就是"套了两层的压缩包",解压一次即可。

二、重要安全习惯:显示扩展名 ​

Windows 默认会隐藏"已知类型"的扩展名。这在安全上是个坏习惯,因为它给了伪装空间。

设想一个攻击者发来的文件,真实名字是:

工资表.jpg.exe
  • 如果扩展名被隐藏,你只看到 工资表.jpg,以为是图片,双击 → 实际运行的是 .exe 程序,中招;
  • 如果扩展名显示完整,你会清楚看到结尾是 .exe。

建议立刻打开"显示文件扩展名":Windows 文件资源管理器 → "查看"选项卡 → 勾选"文件扩展名"。

具体怎么打开这个开关?Windows 10/11 里随便打开一个文件夹,点顶部菜单栏的"查看",找到"文件扩展名"这一项打勾就行。这个改动对所有文件夹全局生效,一次设置永久有效。很多人用了几年电脑都不知道这个选项存在,因为微软默认把它藏起来了——官方说法是为了"界面简洁",但从安全角度看,这个默认值实在算不上友好。

再举一个你可能真遇到过的场景:某天收到一封邮件,附件名叫"会议纪要.pdf",图标也是一个红底白字的 PDF 图标。你双击打开,结果电脑闪了一下、什么也没显示——因为它真实名字是"会议纪要.pdf.exe",扩展名隐藏后只剩"会议纪要.pdf",你双击时运行的是那个 .exe 程序,它可能已经在后台悄悄下载了木马、窃取了浏览器保存的密码。如果扩展名显示完整,你一眼就能看到结尾的 .exe,根本不会去双击它。就这一个开关,挡掉的就是这类最基础也最常见的钓鱼攻击。

三、扩展名 ≠ 真实类型 ​

要建立一个严谨认知:扩展名只是"名字上的提示",文件的真实类型由它的内容决定。

  • 把 a.txt 改名成 a.png,里面还是文字,并不会真的变成图片;
  • 系统判断真实类型,靠文件开头的几个特殊字节,叫文件头 / 魔数(magic number):
    • PNG 文件以 89 50 4E 47 开头;
    • PDF 以 %PDF 开头;
    • Java 序列化数据以 AC ED 00 05 开头(后面反序列化篇会用到)。

Linux 有个命令 file 文件名,就是读内容来告诉你真实类型。

真实跑一下你就明白了。假设你有三个文件:一个真正的 PNG 图片、一个把 .txt 改名成 .png 的文本、一个伪装成图片的可执行文件,file 会这样告诉你:

$ file real.png renamed.txt fake.exe
real.png:    PNG image data, 800 x 600, 8-bit/color RGB
renamed.txt: ASCII text
fake.exe:    PE32 executable (GUI) Intel 80386, for MS Windows

不管你把名字改成什么,file 只看文件开头那几个字节的"魔数",所以它从不说谎。这也是为什么在安全分析里,判断一个文件真实类型永远靠 file 或十六进制编辑器看文件头,而不是靠文件名——文件名是可以随便改的,文件头改起来就没那么容易了。

Linux 系统甚至根本不靠扩展名来决定怎么打开文件。你在 Linux 里双击一个叫"报告"的文件(没有任何后缀),系统照样能根据文件头识别它是 PDF 还是文本,然后用对应程序打开。扩展名在 Linux 里更像是给人看的注释,而不是给系统用的指令——这个设计哲学,和 Windows 的"扩展名决定一切"形成了鲜明对比。

四、安全中的扩展名问题 ​

  • 文件上传绕过:很多网站只检查扩展名是否为图片,攻击者把脚本改名、或同时伪造文件头来绕过,是 Web 常见考点;
  • 木马伪装:钓鱼邮件常用 Word/Excel 图标 + 可执行内容(或带宏的文档);
  • 靶场文件:你会看到 .ser(Java 序列化数据)、.class(编译后的 Java)、.key(密钥)等,认识扩展名能快速判断"这是什么、该用什么处理"。

再讲一个实战中很常见的点:.docx 和 .docm 的区别。.docx 是纯文档,不能运行宏;.docm(m 代表 macro)是"带宏的文档"——宏是嵌在文档里的一小段程序,打开时如果允许启用,它就能在你的电脑上执行代码。钓鱼攻击里最经典的套路,就是发一个看起来是简历或报价单的 .docm 文件,诱骗你点"启用内容",一旦启用,恶意宏就开始下载木马。所以看到 .docm、.xlsm 这类带 m 的文档名,先警惕——除非你明确知道发件人是谁、为什么要给你带宏的文件。

还有一个容易被忽略的细节:Windows 的"隐藏已知文件类型的扩展名"不仅影响桌面和资源管理器,也影响很多老软件的文件保存对话框。也就是说,即使你开了显示扩展名,在某些老软件的"另存为"窗口里可能还是看不到完整后缀。养成"保存后去文件夹里确认一下文件名到底是什么"的习惯,能避免很多"我明明存的是 .txt 怎么变成了别的"的困惑。

五、本篇小结 ​

  • 扩展名表示文件类型、关联打开方式;常见类型要眼熟(txt/pdf/png/exe/py/yml/sh)。
  • 建议开启显示扩展名,防止 jpg.exe 这类伪装。
  • 扩展名不等于真实类型,真实类型由文件头/魔数决定,改名不转换内容。
  • 文件上传校验、木马伪装、靶场文件识别都与此相关。

下一篇 0.6 讲"路径"——怎么用一行文字精确告诉电脑某个文件在哪。