这可能是一个措辞很差的问题,但这个问题的分类正是我正在寻找的(所以不幸的是,在这一点上我无能为力)。
这是我的问题。
我们不会把 Centos 的文件系统表示称为“Centos 文件路径”,同样,我们也不会把 Ubuntu 中的文件系统称为“Ubuntu 文件路径”甚至“Linux 文件路径”——我通常看到这些被称为 NFS 路径(无论是否正确)。
我确实听到 Windows 用户将文件系统表示(带有驱动器号)称为“Windows 文件路径”。所以我想我问的是“Windows 文件路径到底是什么”?我的意思是,控制 Windows 文件路径的底层概念和协议是什么。
为了进一步说明,下面是一些示例。据我理解,我所说的 NFS 路径(无论正确与否)如下所示:
/etc/其他目录
其中每个级别/目录除以/
我对“Windows 路径”的简单分类如下:
c:\some-dir\some-child-dir
因此,默认情况下,当我转到我使用的各种 Linux 变体之一(Centos、Ubuntu)时,我通常将其称为 NFS 路径。当我转到 Windows 时,我将其称为“Windows 路径”。我意识到可能存在控制此文件系统映射的协议和标准(例如,将 c:\some-dir 映射到磁盘的各个部分),Google 向我指出了此处描述的 CIFS/SMB:http://en.wikipedia.org/wiki/Cifs
但这似乎描述了 Windows 网络路径。我还在这里看到了“驱动器命名方案” -http://en.wikipedia.org/wiki/DOS#Drive_naming_scheme- 但这并没有真正回答我的问题。当我打开 Windows 机器时,Windows 路径究竟是什么?具体来说,当我指定 c:\some-dir\some-child-dir 时,操作系统使用什么协议和标准将此地址指向我的硬盘的一部分?假设我们谈论的是 Windows 7(尽管我也想知道 Windows 7 的做法是否与其他版本的 Windows 不同)。
我意识到这可能是一个菜鸟问题,而且使用正确的关键词可能很容易找到答案,但不知道的挫败感开始困扰我。
请不要“谷歌一下”的答案——我已经广泛地做过这件事了,但这似乎只会引发更多问题。我在这里寻找技术解释。
答案1
几乎每个现代系统都使用支持分层结构的文件系统——一些基础级别,其中的文件夹包含更多文件夹(等等),其中一些文件夹包含文件。
界面中用来告诉您当前位置的字符的选择相当随意;基于 UNIX 的系统使用正斜杠 (/),源自 DOS 的系统使用反斜杠 (\) --MSDN 对这一选择有一些背景信息-- 而 OSX 之前的 Mac 使用冒号 (:)
DOS(以及其衍生版本,直到 NT)为所有物理驱动器设备(以及伪造它们的东西)提供了单字母标识符。最初有 2 个软盘驱动器(A: 和 B:)的空间,因此硬盘驱动器变成了 C:,并按照传统一直保持这种状态(以至于如果您更改启动驱动器的字母,大量程序就会崩溃)。
在 NT 中,他们取消了将驱动器设为 C: 的大部分幕后要求,并添加了将另一个物理驱动器安装为 C: 下目录的功能。这使其更符合 UNIX 的方式:启动驱动器安装为“/”,并且各种其他驱动器可以安装为其下的文件夹(/home、/usr、/tmp,无论您喜欢什么)。
当 DOS 发现网络时,它们会删除远程设备的驱动器号,为您获取 UNC 样式的路径:\servername\share\folder\file.txt。共享只是服务器端基本目录的名称,共享名称与共享的顶级目录名称匹配是很常见的,但不是必需的。
当您从 UNIX 到 UNIX 或从 Windows 到 Windows 时,这很简单,只需在任何地方保持斜线与反斜线相同,就可以了。当您跨越时,事情会变得混乱。大多数程序都遵循其运行平台的语法,即使它们(可能在不知不觉中)正在访问其他平台上的内容。一些应用程序(专门为跨平台兼容性或试图实现用户友好性而编写)喜欢以其他平台的预期格式输入。这会变得混乱:UNIX shell 使用反斜杠作为转义字符;您需要输入“\\”才能将单个反斜杠作为命令行选项作为输入发送到 UNIX 命令。
当然,所有这些主要是用户界面的东西。在幕后,文件实际上是通过(基本上)一个数字来标识的(UNIX 系统称之为 inode),文件系统负责跟踪哪些名称(在硬链接的情况下,可能在不同的目录中有多个名称)映射到同一个 inode,以及哪些磁盘扇区是同一个 inode 的内容)。