文件、目录与文件系统

数据层级

之前我们说到,无论是记录信息、读取信息、分享信息,还是从信息中获取更有价值的信息,人们使用计算机就是在和数据打交道,都离不开对数据进行存储、读取和处理。

根据第一章中的介绍,我们在计算机中,以数码的形式记录下文本、图形或者是声音。这些是我们所关心的数据。但是数据也有层级之分。最小的是一个“比特”,其次是一个“字节”。通过若干个字节,我们便可以表示二进制数字,或者编码后的字符了。连续的字符组合起来是字符串。一段文本也是一个字符串。若干个数字、字符串在逻辑上关联起来,便可以用于形容出一个事物了。

数据的管理方式

很久以前,甚至在一些现代的嵌入式设备中,要么根本没有对目录的支持,要么仅有一层目录结构(也就是说,不能有子目录,而仅有一些各自存有文件的顶级目录)。

这就好比一个人拥有很多物品,但是只能将它们一股脑地放在一个大篮子里面,没有层级,不能分门别类。这会给寻找特定的物品带来很大的不便。

世界上第一个流行的、完全分等级的文件系统是 Multics 文件系统,这种文件系统是丹尼斯·里奇的早期研究成果。

所幸我们现在的计算机系统可以让我们自由的创建目录。

一个目录(文件夹)就是一个装有数字文件的虚拟“容器”,在它里面保存着一些文件和其它一些目录。在一个目录中的另一个目录被称作它的子目录(子文件夹)。

多个文件通过存储在一个目录中,可以达到有组织的存储文件的目的。这样,这些目录就构成了层次(hierarchy),或树形结构

“文件夹”的比喻:“文件夹”这个名称将目录比作办公室里用的文件夹。这个名称自从一开始被 Apple Lisa 使用以来,在几乎所有现代操作系统的桌面环境中广泛使用。在图形用户界面中,文件夹通常会以一个看起来很像真实文件夹的图标展现给用户。

“图形用户界面(GUI,Graphical User Interface)”是一个相对于“命令行界面(CLI)”的概念。他们都是用户操作计算机的方式。我们会在之后介绍这两个概念。

一些概念性的称呼

通常,目录和文件夹是一个意思。目录中可以包括文件,还可以包括目录。

一个目录中包含的目录就称为子目录,子目录所在的目录是称为它的父目录,或者就上一级目录。

当前目录就是用户正在使用的目录,又称为“工作目录”。

路径

用户在磁盘上寻找文件或子目录时,所历经的文件夹线路路径

为了表示路径,我们有一些约定的方法。

特殊目录的表示:

  • . 表示当前目录
  • .. 表示当前目录的上一级目录
  • ~ 表示当前用户的家目录(Home)

Unix 一般用正斜杠“/”(forward slash)分割路径,Windows 一般用反斜杠“\”(backslash)。

举几个例子:

  • 以“/usr/local/”为例,最开始的“/”表示根目录,即根目录下的“usr”目录下的“local”目录。也可以写作“/usr/local”。
  • 以“files/1.txt”为例,它表示(当前目录下)“files”目录中名为“1.txt”的这个文件。也可以写作“./files/1.txt”。
  • 以“1.png”为例,它表示(当前目录下)的名为“1.png”的文件。也可以写作“./1.png”。

路径分为绝对路径(Absolute Path)和相对路径(Relative Path)。

绝对路径:从盘符(表示硬盘分区的字符)开始的路径,以“\”作为开始。如“D:\视频\我的电影\”目录下,像这种直接指明了文件所在的盘符和所在具体位置的完整路径,即为绝对路径。上文中的“/usr/local/”也是一个绝对路径。

注:*nix 系统下的绝对路径一般从根目录“/”开始表示,而 Windows 则采用盘符开始的表示方式。如果暂时不清楚什么是根目录或盘符,不用着急,我们会在后面讲到。

相对路径:相对于当前目录开始的路径。在制作网页、编写程序时使用的资源,往往使用的都是文件的相对路径。这样做的目的在于,当整个项目的存储路径变化时,而文件之间的相对层级关系不变时,仍能找到彼此。上文中的“files/1.txt”“1.png”都可以作为一个相对路径。在相对路径中,也可以使用“.”“..”。

什么是文件?

在计算机中谈到的文件,就是指长期存储在硬盘里的数据。

对于计算机来说,不管是文档(字符串)、图像、视频还是可执行程序,都是一串串长短不同的数据记录。为了形象的理解这些数据记录,我们借用现实世界中文件的概念来表示它们。

数据文件与可执行文件

一般来说,文件有文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别,这是从文件的功能进行分类的。从数据存储的角度来说,所有的文件本质上都是一样的,归根到底都是二进制的、都是比特串。

与其他文件不同,可执行文件的重点在于“可执行(executable)”。可执行文件中存储的是一系列计算机能够理解的指令,也就是我们说的程序。执行程序,也就是执行这个文件里的指令,就可以使计算机完成相应的任务,因此我们将这样的文件称为“可执行文件”。

计算机要执行各种任务,离不开存储在其内部的可执行文件(也就是事先由开发者编写好的程序)。只有通过这些程序,计算机才具有意义(换句话说也就是能工作),因此这样程序也被称作“软件(software)”,即运行在计算机硬件之上的内容,这个内容是可变的、流动的。而区别于计算机自身运行所需的程序,我们把用户可以用的、拓展计算机基础功能的程序叫做“应用程序(application)”。相应的,计算机要使用连接到自己的硬件,从中读取信息或者向其写出信息,则需要“驱动程序(driver)”。

理论上,计算机的容量越大,就能存储越多的程序,其能实现的功能也就越多。

而文件之间的不同,还体现在它们对于的数据存储方式。这是文件的创建者解释者(使用文件的软件)约定好的。我们把这称作文件的格式(File Format)。

关于“文件格式”,我们还会在后面的章节进行阐释。

纯文本文件与二进制文件

但我们很多时候会看到将文件分为“纯文本文件”和“二进制文件”的行为,这该怎么理解呢?

以常常说到的“纯文本(Plain-text)文件”为例,它仅仅是按照一定的编码方式(某种从文字到二进制数码的规则)将一串字符变成一串数码串,进而存储在计算机中,形成文件。当我们逐个解释文件中的编码时,就能得到一个个字符,这些字符直接就形成了人类可读的文本。此即“纯文本”中的“纯”所表示的意思——直白。

与“纯文本文件”相对的,一般称为“二进制文件”。尽管它们都是二进制存储的,可能因为二进制文件中存储的是不能被人类直接读取的二进制数码——是经过一定规则编排、甚至压缩的数码,不能直接解读成人类可读的(文本)——而得名。常见的“二进制文件”包括图像、视频、可执行文件。

如果我们尝试按照解释纯文本文件的方式解读上述的“二进制文件”,得到的就会是一片乱码。

请继续阅读后续有关“编码”“解码”“文件格式”的章节。

文件的大小

我们也常常会用“大小”“占用空间”来形容一个文件。不难理解,“大小”指的是文件所包含的数据流长度。

有些时候,我们可以通过文件的大小来判断文件的类型——所谓的“二进制文件”一般会比“纯文本文件”要大得多;视频文件一般比图像文件大。但是这些都不是绝对的,我们可以有一个非常长的文本文件和一个非常小的图像文件——这个时候,之前的规律就不成立了,文本文件会比图像文件大得多。

分区

我们可以在一块物理磁盘上,人为分出几个虚拟磁盘出来,这样在一定程度上有利于分门别类的存放文件。这个过程叫做“分区”。当“分区”做名词时,指的就是我们分割出来的区域。

比如,以 Windows 为例,我们可以将系统文件存放在“C盘”,将日常软件存放在“D盘”,将影音文件存放在“E盘”等等。

你是否会好奇,“A盘”“B盘”哪里了呢?

按使用功能,我们可以把分区分为“系统分区”、“恢复分区”、“Windows 分区”和“数据分区”。“Windows 分区”就是存放 Windows 操作系统文件的分区,一般在“C盘”,有时也会被称为“系统盘”。

对于一般用户来说,“系统分区”、“恢复分区”通常是不可见的。

文件系统

如同现实世界中的仓库需要仓库管理员一样,计算机需要文件系统来管理存储在硬件中的数据,它负责文件的增删查改、属性管理等等诸多事宜。

文件系统格式

文件系统格式又称文件系统类型,不同的分区可以采用不同的文件系统格式,不同的文件系统格式往往意味着不同的特性和功能。

  • FAT32:历史悠久的文件系统,被各种系统广泛兼容,缺点是单个文件大小最大只能支持 4GB;容易产生文件碎片
  • exFAT:微软所开发的文件系统,在最新的各种系统中被广泛兼容,适合作为小容量 U 盘和闪存的文件系统
  • NTFS:微软所专有的文件系统,可以作为 Windows 系统的分区,在其他系统中写入的兼容性不佳;适合用作移动硬盘的文件系统
  • APFS:苹果所专有的文件系统,High Sierra 10.13 之后被广泛用于苹果的各种系统中,一般无法被苹果以外的系统读取
  • ext4:Linux 所有的文件系统,其前身是 ext1/2,被广泛用于以 Linux 为内核的操作系统
  • f2fs:三星所开发的文件系统,专门针对 NAND 闪存优化,主要应用于部分 Android 系统

权限问题

有些操作系统中,用户被限制只能访问他们自己的用户文件夹或工程目录,使用户间的活动相互隔离。

盘符

盘符又称为驱动器号,是当前操作系统指派的用于访问某个分区的符号,比如 Windows 习惯将当前运行的 Windows 分区指派为“C”,也就是“C盘”的来源。可以通过磁盘管理对盘符进行删除和分配。

盘符只在当前系统下具有意义,例如,将一可移动驱动器接入一台显示了 3 个分区(盘符分别为C、D、E)的系统,U 盘的盘符可能会分配为“F”;换另一台显示了 4 个分区(盘符分别为C、D、E、F)的系统,则该 U 盘的盘符可能分配为“G”。

如果同时接入多个可移动驱动器,则接入的先后顺序也可能影响盘符的分配。

这也提示我们,通过绝对路径访问可移动驱动器上的文件并不总是可靠的。

小结

文件是操作系统在存储数据时使用的一种抽象概念。文件是文件名和一系列数据的整体,可以分为文件数据和文件元数据(文件属性)。文件元数据包括文件数据的长度、修改时间、所有权等用于支撑文件功能的其他部分,而文件数据则是文件保存信息的载体。

文件名用于区分不同的文件,通常保存在目录中。目录记录了这个目录下所包含的文件和目录,将文件组织成结构。目录可以理解为一个记录了其下包含文件和目录信息的文件。

文件系统是操作系统中管理文件数据和文件元数据的组件。


参考链接: