Linux文件系统层次结构(译自Linux Filesystem Hierarchy)

原文:http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/

作者:Binh Nguyen 

最后修改时间:2004-07-30

 

第一章 文件系统结构层次

1.1 前言

    当最终用户从别的操作系统,例如MS Windows,迁移到Linux系统时,他们面临的最大问题就是文件系统的差异。

    那什么是文件系统呢?

    文件系统是由一系列函数和数据结构组成,操作系统通过文件系统来获得磁盘或分区上文件的情况;换句话说,文件系统是磁盘上文件的组织方式。文件系统有时候也指存放文件的分区或磁盘,或者文件系统的类型(ext3/ext4?)。有人说他有两个文件系统,他的意思可能是他有两个存文件的分区。还有人说他正在使用一个扩展文件系统,他的意思是指文件系统的类型。

    分区、磁盘与文件系统的区别很重要。少数的程序(包括那种创建文件系统的程序)是直接工作在原始状态的磁盘扇区上的;如果这些磁盘扇区上存有文件,将会被损坏。大部分程序工作在文件系统之上,所以就不必工作在分区之上了。

    在一个分区或者磁盘可以被作用文件系统之前,先要进行初始化,记录数据(bookkeeping data structures)需要被写入磁盘。这个过程被称为创建文件系统(格式化)。

    大多数UNIX文件系统类型都有相似的结构,虽然细节上存在着相当多的差异。其核心的结构是超级块、inode(索引点)、数据块、目录块、间接块(indirection block)。超级块包含了文件系统的全局信息,比如文件系统的大小。一个inode(索引点)包含了一个文件的所有信息,比如文件名。文件名被保存在目录中,与inode的编号保存在一起。一个目录项(directory entry)包含了文件名、指向这个文件的inode编号。inode中,还包含了用来存储文件内容的数据块的编号。inode只给一小部分数据块提供了空间,如果文件的变大,文件系统会动态分配空间来保存指向数据块的索引信息。这些动态分配的块就是间接块(indirect blocks);这个名字意味着,当查找数据块(data block)时,必须首先要找到包含数据块编号的间接块。

Linux文件系统层次结构(译自Linux Filesystem Hierarchy)_第1张图片

(这幅图不是原文所配,来自于http://www.xxlinux.com/linux/article/development/kernel/20060622/1738.html )

    类似UNIX,linux选择了一个单层次目录结构(a single hierarchical directory structure)。所有的内容都从根目录'/'开始,然后扩展到子目录,而不是从盘符开始。在windows环境下,会有保存文件到C盘、D盘、E盘等等盘符的情况。这样的文件系统(UNIX文件系统)被称为层次化结构,通过程序自己来管理,而不是由操作系统。另一方面,Linux从根目录'/'下排序目录,是基于这些目录在系统引导启动(boot process)过程中的重要性。

    如果你想知道为什么linux使用正斜线'/'而不是windows系统下的反斜线/,那是因为使用正斜线是Linux遵从了UNIX的传统。Linux与UNIX一致,都对字母的大小写敏感。这也意味着:有没有使用大写字母成为很重要的因素。this、THIS就会存在截然不同的含义。这项功能对于大部分新用户来说影响很大,尤其是使用FTP或者可移动磁盘传输数据时,有可能会覆盖已有的文件。

    文件系统命令是指对文件的特定操作,而不是对它的外围程序(program context)(应用最广泛的Linux文件系统是EXT2,以及EXT2文件系统的子集,例如EXT3、Reiserfs)。文件系统命令位于文件系统内部,由操作系统来决定哪一个应用程序需要保存它的文件。

    如果你在Windows上安装一个程序,通常它会将大部分的文件保存在该应用程序自己的目录结构下。例如,一个帮助文件可能会在C:/program FIles/[program name]/或者C:/program files/[program-name]/help或者在C:/program files/[program-name]/humpty/dumpty/doo。在Linux环境中,程序将它的帮助文档安装到/usr/share/doc/[program-name]下,man(ual)页放到/usr/share/man[1-9],info页面放到/usr/share/info。这些程序将自己与系统的层次结构相互融合。

    就像Linux用户看到的,系统不知道分区或者此类设备的存储,除非你自己手动mount一个分区或者设备。这可能不是最简单的访问分区或者设备的方法,然而它的灵活性明显要比其他操作系统的高。这种层次统一的文件系统访问形式,具有许多Windows没有的优势。以/usr目录为例,这个根目录的子目录包含了大部分的系统可执行文件。通过Linux下的文件系统,用户可以选择mount其他的分区甚至其他的设备,通过使用多种的传输协议,比如NFS(Sun现在是Oracle)、Coda(CMU)或者AFS(IBM)。用户不用去了解这些文件系统之下的传输协议的区别。/usr目录的存在是完全透明的,它看起来是一个本地目录。

 +---------+-----------------+-------------+
| | shareable | unshareable |
+---------+-----------------+-------------+
|static | /usr | /etc |
| | /opt | /boot |
+---------+-----------------+-------------+
|variable | /var/mail | /var/run |
| | /var/spool/news | /var/lock |
+---------+-----------------+-------------+

"Shareable"的文件是指那些可以被别的主机使用的文件。"Unshareable"文件是那些不可共享的。例如:用户home目录下的文件是可以共享的,而设备锁(device lock)文件则不可共享。"Static"文件则包括二进制文件、库文件、文档文件,这样的不会因为系统管理员的介入而发生变化的文件。"Static"以外的文件就是"Variable"文件。

    统一文件系统的另一个原因是Linux通过系统的内存,缓存了大量磁盘访问,能够加速文件的访问过程。这对于那些关机前,要被刷新到硬盘(flush)的缓存来说至关重要。另外,文件处于不确定状态一个非常糟糕的事情。刷新缓存到磁盘通过系统关闭时,卸载(umounting)分区来实现。一句话,计算机运行时,别把它的电源关了。因为Linux的文件系统非常健壮,发生数据丢失的情况很少。

    Linux社区中的大部分人,都理所当然的认为,有很多优秀的Linux书籍或文档存在,典型的例子是那些Linux文档项目。我们已经习惯于从Linux FTP站点和分发CD-ROM上获得不同的资源。我们已经认为,大家都已经知道了像mount这样的重要文件,在任何linux系统都能被找到。我们也理所当然的认为基于CDROM的发行版可以直接运行在CD上,并且那些系统上的文件只不过消耗一些物理磁盘空间或者RAM disk而已,例如/etc/passwd,等等。但是,这种观点不是始终正确的。

未完待续...

你可能感兴趣的:(linux,windows,unix,文档,hierarchy,磁盘)