惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
T
The Blog of Author Tim Ferriss
S
SegmentFault 最新的问题
D
DataBreaches.Net
博客园_首页
罗磊的独立博客
B
Blog
T
Threat Research - Cisco Blogs
C
Cisco Blogs
GbyAI
GbyAI
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
G
GRAHAM CLULEY
H
Help Net Security
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
爱范儿
爱范儿
SecWiki News
SecWiki News
T
Threatpost
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Schneier on Security
Schneier on Security
T
The Exploit Database - CXSecurity.com
Google Online Security Blog
Google Online Security Blog
T
Tor Project blog
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Y
Y Combinator Blog
H
Hacker News: Front Page
V
V2EX
Security Latest
Security Latest
Cloudbric
Cloudbric
Simon Willison's Weblog
Simon Willison's Weblog
Attack and Defense Labs
Attack and Defense Labs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed
博客园 - 三生石上(FineUI控件)
NISL@THU
NISL@THU
S
Secure Thoughts
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
V2EX - 技术
V2EX - 技术
Vercel News
Vercel News
P
Palo Alto Networks Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
有赞技术团队
有赞技术团队
Application and Cybersecurity Blog
Application and Cybersecurity Blog
D
Docker
Google DeepMind News
Google DeepMind News
Webroot Blog
Webroot Blog

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
文件路径二三事:另辟蹊径,从路径表示看操作系统的发展 - 少数派
2024-03-14 · via 少数派

Matrix 首页推荐 

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。 
文章代表作者个人观点,少数派仅对标题和排版略作修改。

文件路径(file path)广泛用于表示现代操作系统中的目录/文件关系,也是用于确定操作系统中文件位置的方式之一。

现如今,常用的文件路径表示方式有两种:Unix & 类 Unix 使用「/(正斜杠/撇斜杠)」分隔目录与文件,DOS1以及后来的 Windows 则默认使用「\(反斜杠/捺斜杠)」

然而疑问就来了:

  • DOS & Windows 与 Unix 并非「师出同门」,为何也选择了「斜杠」?
  • 许多情况下 Windows 也支持「/」分隔路径,那么一开始选择「\」的目的何在?
  • 除了斜杠,历史上有没有出现过使用其他符号的路径表示方式呢?

带着这些疑问,下文就来回顾文件路径的演变历程,也算是从一个侧面窥见操作系统的发展史以及操作系统间的相互影响。

Multics:「>」

一般认为第一个引入分层文件系统的操作系统是 20 世纪 60 年代的 Multics,它由麻省理工学院、贝尔实验室和通用电气公司设计。

Multics 选用了「>(绝对路径)」「<(相对路径)」作为路径分隔符,模拟箭头的形状(→/←)(在我看来是最形象的),如:

假设工作目录为:>udd>Demo>JQUser

绝对路径:>udd>Demo>JQUser>subdir>myfile;>udd>NewDemo>JQUser

相对路径:subdir>myfile;<<NewDemo>JQUser
Multics
「<」「>」的路径分隔符在我看来是最形象的,图为 Windows 文件资源管理器的路径栏

同时,也有资料(参考资料4)显示,在开发早期,Multics 曾选用过「:(冒号)」作为路径分隔符。

(不知是不是巧合,现在常用于表示路径的「/」「\」正好像是把「>」分成了两半,也算是对前辈的一种致敬吧)

Unix:「/」

1969年,在贝尔实验室工作的 Ken Thompson 和 Dennis Ritchie 在一台 DEC 小型计算机 PDP-7 上编写了 Multics 的改编版,这就是 Unix。

Unix 继承了 Multics 包括分层文件系统在内的许多设计,但在路径表示上,Unix 把 Mulcics 的「<」「>」换成了「/」。

替换「<」「>」的原因是「<」「>」在 Unix 中作为输入/输出重定向(将命令的输入和输出从默认的设备(通常是键盘和显示器)重定向到其他地方)字符。

而换成「/」的原因可能是因为,在 20 世纪 70 年代常用的 Lear-Siegler ADM-3A 终端键盘(以及现在的许多键盘)中,「/」就在「<」「>」的旁边,且不需要按住「Shift」,可直接打出。(而我认为也可能是因为「/」就像下半部分的「>」)

Unix 以「~」表示当前用户的主目录也与键盘有关,因为终端键盘的波浪线符号和「Home(位于键盘右上角)」一词恰好位于同一个按键上。

Lear-Siegler ADM-3A 终端键盘

文件路径分隔符的一个重要特点(或者说,原则)是:该符号能保证不需按下「Shift」键,可直接打出。

那可能有人会问了:那上文说的 Multics 呢?我看键盘上「<」「>」在按键上位,需要按下「Shift」键才能打出啊?

针对这个问题我去查了一下,结果发现,Multics 第一个采用的打字机 Teletype Model 37,长这样:

Teletype Model 37 keyboard | Erica Fischer | Flickr
Teletype Model 37

「<」「>」分别在键盘左上角和「TAB」键旁,且都独占一个键位,不需按下「Shift」键才能打出。

<DEC>[VMS]……

在介绍 DOS&Windows 前,先来看看其他操作系统的路径表示方式。

除了 Unix 的「/」之外,当时的其他操作系统也有自己独特的路径表示方式。

与 Unix 相比,DEC 操作系统的路径表示略显复杂。1967 年 DEC(Digital Equipment Corporation,数字设备公司)推出的 TOPS-10 使用 [] 包裹目录,以「,」分隔目录,且目录标在文件名后面(个人觉得这有点不太符合人的操作习惯,毕竟操作系统中目录与文件的关系应是「目录→文件」),如:

DSKC:MYFILE.TXT[21,589]<055>(依次为:设备名:文件名.文件扩展名[目录]<保护代码>)

后来的 DEC TOPS-20(虽然都叫 TOPS,但其与 TOPS-10 几乎无关)则采用 <> 包裹目录,以「.」分隔目录,如: 

PS:<USER.DOCS>LETTER.TXT,4(依次为:盘符:<目录.子目录…>文件名.文件扩展名,文件版本)

OpenVMS 使用 []  包裹目录,以「.」分隔目录,如

Stromasys001::dka100:[sys0.main]abc.txt;1(依次为:主机名::盘符:[目录.子目录…]文件名.文件扩展名;文件版本)

苹果曾尝试过多种路径表示方式。Lisa OS(1983 年)使用「-」分隔路径,ProDOS(1983年推出,在 Apple II 上运行)使用「/」,Classic Mac OS 则使用「:」,GS/OS(1988年推出,在 Apple IIGS 上运行)同时支持「/」和「:」。

Lisa OS 的文件路径表示方式
Apple GS/OS 的路径表示方式

后来苹果推出的 Mac OS X(2000年)尽管类似 Unix,采用了「/」的表示方式,但为了保证与 Classic Mac OS 的兼容性,一些情况下文件系统会将文件名中的「/」替换为「:」。

1987 年推出的 RISC OS(在 ARM 芯片上运行)则采用如下方式:

[文件系统:][:驱动器号或磁盘名称.]$.[目录].[文件名]/[文件扩展名]2

如:ADFS::MyRiscPC.$.Documents.Letter (filetyped to text)

LanMan::WindowsC.$.Pictures.Example/gif

DOS3& Windows:「\」

随着 MS-DOS 2.0 的推出,微软在为 MS-DOS 引入目录设计的同时,选用了一个不一样的路径分隔符:「\」

既然选了「斜杠」,为什么不用「/」?因为「/」在 DOS 中已被用于选项字符(switch character,用于分隔命令选项参数的字符,如 dir /s,而 Unix 则采用「-(连词符)」(这也是源于 Multics))

那为什么 DOS 的选项字符用的是「/」呢?这一点有不同的说法。

微软软件工程师 Larry Osterman 在文章中写到,这与当时 DEC 操作系统的操作习惯有关。

许多 DOS 实用程序都是由 IBM 编写的,它们使用「/」字符作为实用程序的选项字符(这是用于分隔命令行参数的字符,在 *nix 上是「-」字符,在大多数  DEC 操作系统(包括 VMS、DECSystem-20 和 DECSystem-10)上是「/」(注:我不确定「/」字符是来自 IBM 还是来自微软——最初的 MS-DOS 开发人员中有几个是 DEC-20 的老手,所以他们可能是从 DEC 中继承的)。

下图为 Microsoft BASIC-80 的部分命令,其使用「/」作为选项字符。

Microsoft BASIC-80 部分命令选项

微软的《MS-DOS 百科全书(1988 年)》也提到,微软早期员工 Marc McDonald 开发了一种名为 M-DOS 的 8 位多任务操作系统,该操作系统“以 DEC TOPS-10 操作系统为蓝本”。此外,该书还明确指出:

MS-DOS 1.x 版借鉴了 DEC 操作系统的传统,在命令行中使用了「/」作为选项字符。

DEC TOPS-10 命令
微软员工在 DECSystem 2020 设备上进行测试,1979 年

此外,还有人认为,这与 CP/M 有关。对此程序员 John Elliott 做出了澄清

  1. CP/M 本身没有「选项字符」的概念。与 DOS 不同,没有系统调用来获取要使用的正确字符(参见 INT 21h/AX=3700h)。每个程序使用的字符由该程序定义。UNIX 也是如此。但与 UNIX 不同的是,CP/M 中不同程序的作者选择了不同的字符。
  2. 与 DOS 不同的是,系统不会强制执行文件名是否有效。在 CP/M 2 中,没有调用将文件名转换为 FCB,因此每个程序必须执行自己的操作;CCP 将两个解析后的文件名传递给程序,但程序无法调用其解析器,因此任何其他名称都必须由它们完成 - 不一定遵循相同的规则。
  3. 由于不同程序对哪些字符可以/不可以出现在文件名中没有一致的规定,因此选项字符也是不一致的(因为选项字符不能出现在文件名中是有意义的) 。

然而,有人在 CP/M 3(通常称为 CP/M Plus)用户手册上发现,「/」被规定为「选项分隔符」。然而,CP/M Plus 于 1983 年发布,而在 MS-DOS 最初开发时(1981年)对应 CP/M 最新版本是 CP/M 2,而我并未找到 CP/M 2 及之前版本「/」被规定为「选项分隔符」或「/」不能用于文件名的相关信息。

注:CP/M 2.2 用户手册确实有「/」不能用于文件名的说明。然而,该手册在 1982 和 83 年做过更新,所以无法确定在 82 年前 CP/M 2.2 是否也遵循这一规定。而且,根据 John Elliott 的分析,即使有这一规定,程序本身也并不一定遵守。

CP/M Plus 手册(1983)
CP/M 1.3 手册(1976)
CP/M 1.4 & 2.0 摘要(1980)

那么问题又来了:既然微软与 DEC 有这么多的联系,那为什么文件目录没有依照 DEC 操作系统的风格,而是采用了 Unix 的「斜杠」风格呢?

对于 MS-DOS 2.0,DOS 的设计者选择了混合版本 - 他们已经支持 DOS 1.0 的驱动器号,因此他们需要继续使用它。他们选择使用 *nix 风格的方法来指定层次结构 - 而不是(如 VMS 和 DEC-20)在文件名中调用目录。

下图是微软于 1980 年发布的 Unix 操作系统:Xenix。在 20 世纪 80 年代中后期,Xenix 已是最常见的 Unix 系统(根据安装它的机器数量来衡量)。就连当时微软的 DOS 开发人员平时用的也是 Xenix 机器,也因此他们对 Unix 命令和语法十分熟悉。

Xenix

可能也正基于此,微软采用了 Unix 的路径风格。据说,微软本来希望使用「/」作为路径分隔符,但 IBM 不干了,因为这会导致与已采用「/」作为选项字符的 DOS 1.x 的不兼容。

当然微软还有其他的选择,比如 DEC 风格的「.」形式,然而这又与分隔文件扩展名的「.」冲突(要么就得像后来的 RISC OS 那样替换「.」)

综合考虑了键盘布局(比如,要保证这个符号不需按 Shift 键才能打出)等因素,也可能带有与 Unix 分庭抗礼的意味,微软最终选用与「/」形态相似的「\」作为路径分隔符。

综合考虑了键盘布局等因素,微软最终选用与「/」形态相似的「\」作为路径分隔符。图为 IBM F「XT」型键盘

不仅如此,为了兼容 Unix 语法,微软不仅对操作系统进行编码以同时接受正反斜杠作为路径字符,甚至还在 config.sys 添加了一个配置选项 SWITCHAR,可以将选项字符更改为「-」。

关于「\」

其实在当时,「\」算是一个比较新的符号,在 20 世纪 60 年代前还十分少见。

直到 1960 年 6 月,IBM 发布了「扩展字符集标准」,其中才出现了「\」的影子(位于 0x19 处)。1961 年 9 月,IBM 的 Bob Bemer 向 X3.2 标准委员会提议将「\」纳入拟议标准,以支持 ALGOL 编程语言的逻辑运算符(/\,表示「与」)和(\/,表示「或」)。该提议后来得到了采纳,「\」进入了 ASCII,Bob Bemer 也因此被称为「反斜杠之父」。

IBM 的拓展字符集标准,1960 年 6 月
ASCII,1963 年

「\」进入标准字符集后,为了与出现时间较早的「/(slash,斜杠)」做区分,「\」被称为「后斜斜杠(backslash)」或「反向斜杠(reverse slash)」,国内为了更好区分两者也有用「撇(/)捺(\)斜杠」称谓的。

ASCII 与 Unicode 对「\」的命名

而在日文/韩文版的 Windows 中,「\」会显示为各自的货币符号(¥/ ₩)。这是因为,ASCII 制定后的 ISO-646 标准将 0x5c 定义为「可本地化」代码点之一,顾名思义,这个点位可以由不同国家或地区根据需要显示为不同的字形。于是,在 Shift_JIS 中,0x5C 用于表示日元符号;在韩语字符集中则是韩元符号。即使到后来系统已经支持 Unicode 编码,为了保证兼容性,微软依然选择货币符号作为 0x5c 的日韩文字符映射。

注:Shift_JIS 最初基于的 JIS X 0201 早在 1969 年制定,那时候的电脑尚不具备处理双字节文字的能力,所以只能先引入半角的片假名(参考 PC-88 早期、夏普 MZ 等日系机),但代价就是,单字节码位不够了,于是就替换了一些当时还不常用的符号,比如日元符号 ¥ 就取代了 \。

日文 Windows 的文件路径
韩文 Windows 的文件路径
Windows 的字符映射

总结

文件路径分隔符的选择看似简单,但其中需要综合考虑字符本身的特性、键盘布局、该字符的其他功能是否与路径表示冲突等因素,操作系统设计的复杂程度可见一斑。而且,从路径表示的发展历程中,我们也可以窥见不同的操作系统是如何互相影响的。

或许现在看来,Unix/Windows 等选用的路径表示方式是最简单的。虽然不能说这样的路径表示是他们得以普及的原因,然而这背后体现出的易用性和较低的学习成本,在计算机向大众普及的过程中也显得不可或缺。(试想一下,如果 Windows 采用的是 DEC 的路径表示,结果又会如何?)

关联阅读

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀