目录结构
了解 Windows 和 Unix 的目录结构。
文件系统的用途
我们继续介绍 Unix 环境和 Bash,从文件系统开始。文件系统是一种软件,用于规定如何在磁盘上存储和读取数据。它涵盖以下内容:
- 程序可以使用的访问磁盘数据的 API。
- 一种统一的方式来访问不同的存储设备。
- 磁盘存储上的物理操作。
下面我们来看一下 Unix 和 Windows 目录结构的区别。
Windows 的目录结构
Windows 资源管理器窗口顶部有一个地址栏,显示当前目录的绝对路径。绝对路径表示文件系统对象的位置,与当前目录无关。
另一种指定文件系统对象位置的方式是使用相对路径。它告诉我们如何从当前目录到达目标对象。
目录是一种文件系统中的分类结构,可以包含文件和其他目录。Windows 中称之为“文件夹”。这两个名称指的都是同一种文件系统对象。
下图展示了一个资源管理器窗口。地址栏显示为 此电脑 > 本地磁盘 (C:) > msys64,对应于绝对路径 C:\msys64。因此,我们在资源管理器窗口中看到的是 C 盘上 msys64 目录的内容。
路径中的字母 C 表示本地系统磁盘驱动器。本地驱动器指的是与计算机物理连接的设备。我们也可以拥有网络驱动器,通过网络访问这类设备。系统磁盘是指安装了 Windows 操作系统的磁盘。
Windows 使用拉丁字母标记每个磁盘驱动器。我们可以像打开普通文件夹一样用资源管理器打开驱动器,然后访问其内容。
例如,C 系统驱动器包含一组标准目录,这些目录是在安装 Windows 时由系统创建的。如果我们在资源管理器中打开 C 驱动器,会看到以下目录:
WindowsProgram FilesProgram Files (x86)UsersPerfLogs
这些目录用于存储操作系统组件、用户应用程序和临时文件。
我们可以将额外的磁盘驱动器连接到计算机,或者将一个物理磁盘划分为多个逻辑分区。Windows 会为这些额外的磁盘和分区分配拉丁字母(如 D、E、F 等)。我们可以在这些位置创建任意的目录结构,Windows 不会对我们的操作进行任何限制。
文件分配表
文件分配表(FAT) 文件系统定义了 Windows 如何管理和访问磁盘。微软最初为 MS-DOS 操作系统开发了这种文件系统。FAT 的基本原理成为 ECMA-107 标准的基础。
微软的下一代文件系统称为 NTFS。它在现代 Windows 版本中取代了过时的 FAT。但由于需要向后兼容,NTFS 和 FAT 在磁盘和目录结构的基本原理上保持一致。
Unix 的目录结构
Unix 的目录结构遵循 POSIX 标准。与 Windows 相比,这种结构给予用户的自由度更少。它包含若干预定义的目录,我们无法移动或重命名它们。我们的数据只能放在特定路径中。
根目录
POSIX 标准规定,文件系统必须有一个顶层目录,称为 根目录。它用斜杠 / 表示。所有连接的磁盘驱动器上的目录和文件都位于根目录之下。
挂载
若要访问磁盘驱动器的内容,必须先将其挂载。挂载 指的是将磁盘的内容嵌入到根目录中。挂载完成后,我们可以通过某个路径访问磁盘内容。这个路径称为 挂载点。当我们进入挂载点时,就进入了该磁盘的文件系统。
比较 Windows 和 Unix 的目录结构
我们通过一个例子来比较 Windows 和 Unix 的目录结构。假设我们的 Windows 计算机有两个本地磁盘:C 和 D。它们的目录结构如下所示:
1C:\ 2 PerfLogs\ 3 Windows\ 4 Program Files\ 5 Program Files (x86)\ 6 Users\ 7 8D:\ 9 Documents\ 10 Install\
假设我们在 Windows 上安装了 Unix 环境,然后运行终端模拟器,得到的目录结构如下:
1/ 2 c/ 3 PerfLogs/ 4 Windows/ 5 Program Files/ 6 Program Files (x86)/ 7 Users/ 8 9 d/ 10 Documents/ 11 Install/
除了目录结构之外,Unix 和 Windows 文件系统还有一个关键区别:Unix 环境是区分大小写的。这意味着,即使两个单词的字母相同,只要大小写不同,它们就是不同的。
例如,在 Unix 中,Documents 和 documents 是两个不同的名称。而 Windows 不区分大小写。如果我们输入 c:\windows 路径到资源管理器地址栏,它会打开 C:\Windows 目录。但在 Unix 环境中,这种方法行不通,我们必须正确输入每个字符的大小写。
最后,在 Unix 路径中,使用正斜杠 / 分隔目录和文件。而在处理 Windows 路径时,则使用反斜杠 \。
Quiz
以下哪一项表示文件系统对象的位置,而与当前目录无关?