Linux文件系统

jopen 12年前

对于计算机来说,所谓的数据就是0和1的序列。这样的一个序列可以存储在内存中,但内存 中的数据会随着关机而消失。为了将数据长久保存,我们把数据存储在光盘或者硬盘中。根据我们的需要,我们通常会将数据分开保存到文件这样一个个的小单位中 (所谓的小,是相对于所有的数据而言)。但如果数据只能组织为文件的话,而不能分类的话,文件还是会杂乱无章。每次我们搜索某一个文件,就要一个文件又一 个文件地检查,太过麻烦。文件系统(file system)是就是文件在逻辑上组织形式,它以一种更加清晰的方式来存放各个文件。

 

1. 路径与文件简介

文件被组织到文件系统(file system)中,通常会成为一个树状(tree)结构。Linux有一个根目录\, 也就是树状结构的最顶端。这个树的分叉的最末端都代表一个文件,而这个树的分叉处则是一个目录(directory, 相当于我们在windows界面中看到的文件夹)。在图1中看到的是整个的一个文件树。如果我们从该树中截取一部分,比如说从目录vamei开始往下,实际上也构成一个文件系统。

要找到一个文件,除了要知道该文件的文件名,还需要知道从树根到该文件的所有目录名。从根目录开始的所有途径的目录名文件名构成一个路径(path)。比如说,我们在Linux中寻找一个文件file.txt,不仅要知道文件名(file.txt),还要知道完整路径,也就是绝对路径(/home /vamei/doc/file.txt)。从根目录录\, 也就是树状结构的最顶端出发,经过目录home, vamei, doc,最终才看到文件file.txt。整个文件系统层层分级(hierarchy),vamei是home的子目录,而home是vamei的父目 录。

在Linux中,我们用ls命令来显示目录下的所有文件,比如 $ls /home/vamei/doc

Linux文件系统

                                                                                                                                                                                           图1       文件树

 

(如该图中所示的文件系统,即绿色构成的树。最顶端的根目录(\),沿红色箭头标出的路径,我们最终找到文件file.txt。)

 

2. 目录

在Linux系统中,目录也是一种文件。所以/home/vamei是指向目录文件vamei的绝对路径。

这个文件中至少包含有以下条目:

.       指向当前目录

..      指向父目录

除此之外,目录文件中还包含有属于该目录的文件的文件名,比如vamei中就还要有如下条目,指向属于该目录的文件:

doc

movie

photo

Linux解释一个绝对路径的方式如下:先找到根目录文件,从该目录文件中读取home目录文件的位置,然后从home文件中读取vamei的位置……直到找到目录doc中的file.txt的位置。

由于目录文件中都有.和..的条目,我们可以在路径中加入.或者..来表示当前目录或者父目录,比如/home/vamei/doc/..与/home/vamei等同。

 此外,Linux会维护一个工作目录(present working directory)的变量。你可以随时查询到到工作目录(在命令行输入$pwd)。这是为了省去每次都输入很长的绝对路径的麻烦。比如说我们将工作目录更改为/home/vamei ($cd /home/vamei),那么此时我们再去找file.txt就可以省去/home/vamei/ ($ls doc/file.txt),这样得到的路径叫相对路径(relative path),上面的doc/file.txt就是这样一个相对路径。

 

3. 文件操作

对于文件,我们可以读取(read)写入(write)运行(execute)。读取是从已经存在的文件中获得数据。写入是向新的文件或者旧的文件写入数据。如果文件储存的是可执行的二进制码,那么它可以被载入内存,作为一个程序运行。在Linux的文件系统中,如果某个用户想对某个文件执行某一种操作,那么该用户必须拥有对该文件进行这一操作的权限。文件权限的信息保存在文件信息(metadata)中, 见下一节。

 

3. 文件信息 (metadata)

文件自身包含的只有数据。文件名实际上储存在目录文件。除了这些之外,还有操作系统维护额外的文件信息,比如文件类型,文件尺寸,文件权限,文件修改时间,文件读取时间等。可以用ls命令查询文件信息($ls -l file.txt),得到如下结果:

-rw-r--r-- 1 vamei user 8445 Sep  8 07:33 file1.txt

我们先介绍最开始的-,它表示文件类型,说明file1.txt是常规文件(如果是目录文件,则应显示d)。

随后有九个字符,为rw-r--r--,它们用于表示文件权限。这九个字符分为三组,rw-, r--, r--,分别对应拥有者,拥有组和所有其他人。第一组表示,如果用户是该文件的拥有者,那么他对该文件有读取(r),写入(w)该文件的权限,但不拥有执行(-,如果拥有执行权限,则为x)该文件的权限。第二组表示,如果用户是该文件的拥有组的一员,那么该用户只有从该文件读入的权限。第三组表示,如果该用户既不是拥有者,也不是拥有组的一员,那么他只有读入的权限。

之后的vamei表示vamei是文件的拥有者(owner),文件的拥有者有权更改文件权限(比如改为rwxrwxrwx)。而后面的user表示该文件被组user拥有,也就是说,user是文件的拥有组

随后的8445表示文件大小,单位为byte。

Sep 8 07:33表示文件的上一次写入的时间(modification time)。实际上在文件信息中还包含有文件的上一次读取时间(access time),没有显示出来。

 

总结

计算机本质上是对数据进行处理的工具,而文件是数据储存的逻辑载体,所以了解Linux文件系统很重要。对于文件系统的了解要结合Linux的其他方面(比如用户管理)进行有机的学习。

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!