文件系统是linux里非常重要的一个概念,这么一个重要而且常见的字眼理解起来并不容易,很多人对它认识相当模糊。对许多从windows平台迁移过来的用户来说,它更是一个思想上的挑战。
1>文件系统的概念:术语“文件系统”在linux中有很多不同的概念。它既可指代磁盘分区或磁盘分区类型,也可指代分区的文件目录,也可指代文件的数据结构或组织方法等,在不同的语境中指代不同的涵义。
我们要使用一块硬盘首先要合理规划分区,然后要在分区上创建文件系统,最后要挂载文件系统,这样才能使用。这里的文件系统指的就是磁盘分区类型,如 ext2、ext3、fat等。有时,大家会直接用文件系统来指代磁盘分区,如linux中所说的挂载一个文件系统。linux中最常用的文件系统是 ext3。
我们进入linux系统根目录,运行ls -la命令,可以看到很多目录,如etc、bin、sbin、var、usr等等,这些目录还有其子目录;我们运行tree命令,可以看到这些目录边同其子目录形成了一个树形结构,最上面的是系统的根目录。所以我们说linux文件系统结构是树形结构。这里的文件系统指的是文件目录,文件系统结构即文件目录结构。
linux通过挂载的方式对不同的文件系统进行组织和管理,从而形成一个总的、树形结构的文件系统。这句话里的两个文件系统都是什么意思呢?
2>linux文件系统结构:前面我们讲,linux文件系统结构主要是指文件目录结构,这个文件系统结构是树形结构。那么我们如何理解这个树形结构呢?对比着windows文件系统结构来理解或许是个不错的办法。
当你第一次进入linux文件系统时,你会发现,呈现在你面前的一切与windows是如此的不同:没有你熟悉的C盘、D盘或E盘,只有一个个目录!没错,这就是linux和windows在设备管理上的区别。
我们知道windows系统中每一个磁盘分区都分配有一个盘符,每新增一个其它存储设备就要为它分配一个盘符。而linux不会为磁盘分区或其它存储设备分配盘符,只为它们分配目录。linux只有一个文件系统结构,这个文件系统结构以根目录开始,所有的本地文件系统,本地设备,以及所有的远程文件系统都表示为根目录的子目录,新增的设备或文件系统通过挂载的方式,挂载为根目录的子目录。
明白了么?windows里的C盘、D盘或E盘都是独立的文件系统,操作系统有几个分区就有几个文件系统结构;linux不一样,它只有一个文件系统结构,所有的磁盘分区或其它存储设备都是这个树形结构的一个“树枝”。
理解了树形结构以后,我们再来看看文件系统结构中的另一个概念:目录结构。
前面我们讲,linux系统不会为磁盘分区或其它存储设备分配盘符,只会为它们分配目录;所有的本地或远程文件系统、设备等都表示为文件系统结构中一个子目录。那么,为什么要这样呢?因为目录为管理文件提供了一个方便而有效的途径。如果你理解linux把所有的设备都当作文件来管理的话,你就会发现这样的安排是多么的巧妙。linux中的设备都以文件的形式出现在/dev目录中,如/dev/lp0,这是打印机;再比如/dev/hda,这是电脑里的第一块硬盘。
再换个角度:windows里的磁盘标识的盘符,既是数据存放位置映射的路径,也是存放数据的真实的文件系统;linux里的目录只是数据的逻辑路径,并非是数据就存放在那个目录里。那么它的数据在什么地方呢?或者在第一块硬盘上,也可能在第二块硬盘上。如:windows的 D盘里安装有一个软件,那么,这个D盘既是软件的安装路径,也是软件数据存放的地方;linux的/var/local下安装有一个软件,/var /local是这个软件的安装路径,软件的数据在哪里存放呢?那就要看/var这个目录建在哪个磁盘的哪一个分区上了。
linux使用标准的目录结构,在安装系统时,就已经创建了完整的目录结构,并指定了每个目录的作用和其中的文件类型。
下面是一个不完整的目录结构图:
3>linux下的主要目录:上面那张目录结构图虽然不完整,但已经可以让我们大致了解linux的目录结构了,而且几个重要的目录也已经列出来了。
bin目录:可执行程序目录。与之类似的还有:/sbin、/usr/bin等。
boot目录:系统启动目录,里面有系统启动时必需的文件。
dev目录:设备文件目录,里面存放着各种设备文件。
etc目录:系统配置目录,系统运行的各种配置文件都在这里。
usr目录:系统程序目录,这里放着各种程序文件。
var目录:这个目录里存放的是经常扩充、变动的文件,如日志文件、数据库等。