文件扩展名(后缀,如 .txt .exe)本质只是文件名的一部分,操作系统核心差异:是否依靠扩展名识别文件类型、大小写敏感、长度限制、允许字符、隐藏机制。
核心区分:
✅ Windows:极度依赖扩展名判断文件类型
✅ Linux/macOS(Unix 系):不依赖扩展名,依靠文件元数据 / 文件头
一、Windows(NTFS/FAT32/exFAT)
1. 扩展名机制
系统默认依靠后缀名确定打开程序、图标;修改后缀直接改变系统对文件的识别。
资源管理器默认隐藏已知类型扩展名(常见坑:
xxx.txt.exe伪装文本文件)。
2. 命名规则
大小写不敏感:
File.TXT=file.txt,同一目录不能同时存在两者。扩展名无强制长度限制,习惯 1~4 字符;
文件名整体禁止字符:
\ / : * ? " < > |不能以
.单独命名;不建议文件名结尾带.(系统会自动截断末尾点)FAT32 传统限制:文件名(名称 + 后缀)最长 255 字符;8.3 短文件名机制(遗留兼容)
特殊:Windows 没有强制要求必须带扩展名;无后缀文件视为 “未知文件”。
Windows 典型特殊后缀
.exe .bat .cmd .msi .dll:系统识别为可执行文件;
.lnk 快捷方式后缀。
二、Linux(Ext4/XFS/Btrfs 等)
1. 扩展名机制【最重要区别】
操作系统内核完全不使用扩展名!
是否可执行:依靠文件权限位(x 权限),和名字无关。
run、run.exe、run.txt只要开启chmod +x都能执行;没有 x 权限,.exe也无法直接运行。文件类型识别依靠:文件头部魔数(
file命令读取)。扩展名只是给人看的约定习惯,方便用户区分,系统无视。
2. 命名规则
大小写敏感:
Data.TXT和data.txt是两个独立文件;允许任意字符(除
/和空字符\0),允许文件名以.开头(隐藏文件);文件名总长度限制:一般 255 字节(UTF-8 一个汉字占 3 字节);
没有 “必须带后缀” 规范;大量系统程序无扩展名(
lscatbash)。
约定俗成后缀:.sh shell 脚本、.tar.gz 压缩包,仅习惯。
三、macOS(APFS/HFS+,Unix 内核)
底层内核和 Linux 同源,规则介于 Linux 与 Windows 之间:
1. 扩展名机制
内核本身不依赖后缀,依靠「资源分支 / 文件类型码(旧 HFS)+ 文件头」;
Finder 图形界面重度使用扩展名,用来匹配默认打开程序、显示图标;
支持【隐藏扩展名】选项(文件显示设置)。
2. 命名规则
APFS:大小写可选敏感(格式化时可选区分大小写,默认不敏感,和 Windows 类似);
禁止字符:不能包含
:(历史 HFS 遗留),不能有/;允许
.开头隐藏文件;文件名上限 255 字符;兼容 Unix 权限:可执行同样依靠权限位,不是后缀。
小知识:macOS 经典旧系统(Mac OS 9 及更早)没有扩展名概念,使用独立文件类型代码。
四、移动端系统
Android(基于 Linux 内核)
底层同 Linux:内核不识别扩展名;
APP 层:应用普遍依靠后缀或文件头判断媒体文件(图片、视频、apk);
.apk只是约定,系统安装识别依靠文件内部结构。文件系统大多大小写敏感(Ext4/F2FS)。
iOS(APFS,类 macOS)
沙盒机制严格,系统更依赖文件元数据;
用户层面:相册、文件 App 依靠后缀识别媒体;
不允许随意修改系统文件后缀,沙盒限制强。
五、通用关键差异汇总表
六、跨平台开发 / 文件传输最佳实践(实用建议)
不要依靠扩展名在程序内判断真实文件格式
跨平台程序优先读取文件头部魔数(比如判断图片、视频),防止改后缀欺骗。
文件名统一使用小写、避免空格、中文谨慎处理,不要依靠大小写区分文件。
不要使用结尾带
.、特殊符号的文件名,保证 Windows 兼容。Linux 下不要认为
.exe就是可执行;Windows 下不要删掉程序扩展名。压缩包(zip/tar)跨平台打包注意:zip 默认大小写不敏感,tar 保留大小写。
补充常见误区澄清
❌ 误区:
.exe是通用可执行后缀✅ 事实:
.exe仅 Windows 可识别;Linux/macOS 不能直接运行,和后缀无关。❌ 误区:没有扩展名的文件无法打开
✅ Windows 只是不知道用什么软件;Linux/macOS 完全正常。
❌ 误区:扩展名有标准强制长度
✅ 所有现代系统都没有强制长度限制,3~4 字符只是历史 DOS 遗留习惯。
原文链接
欢迎访问 小易撩挨踢