Linux操作系统实用教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.1 Linux的文件系统

文件系统(File System)是操作系统用来存储和管理文件的方法。

4.1.1 Linux文件系统的概念

从系统角度来看,文件系统对文件存储空间进行组织和分配,并对文件的存储进行保护和检查。从用户角度来看,文件系统可以帮助用户创建文件,并对文件的读、写和删除操作进行保护和控制。

4.1.2 Linux文件系统的组织方式

不同的操作系统对文件的组织方式各不相同,其所支持的文件系统数量和种类也不一定相同。Linux文件系统的组织方式称为文件系统分层标准(Filesystem Hierarchy Standard,FHS),即采用层次式的树状目录结构。在此结构的最上层是根目录“/”(斜杠),在根目录下是其他目录和子目录,如图4.1所示。

图4.1 Linux文件系统目录层次结构

Linux与DOS及Windows一样,采用“路径”来表示文件或目录在文件系统中所处的层次。路径由以“/”为分隔符的多个目录名字符串组成,分为绝对路径和相对路径。所谓绝对路径,是指由根目录“/”为起点来表示系统中某个文件或目录的位置的方法。例如,如果用绝对路径表示图4.1中第4层目录中的bin目录,则应为“/usr/local/bin”。相对路径则是以当前目录为起点,表示系统中某个文件或目录在文件系统中的位置的方法。若当前工作目录是“/usr”,用相对路径表示图4.1中第4层目录中的bin目录,则应为“local/bin”或“./local/bin”,其中“./”表示当前目录,通常可以省略。

Linux文件系统的组织方式与Windows操作系统不同。对于在Linux系统下使用的设备,不需要像Windows那样创建驱动器盘符,Linux会将本地磁盘、网络文件系统、CD-ROM和U盘等设备识别为设备文件,并嵌入Linux文件系统来进行管理。一个设备文件不占用文件系统的任何空间,仅仅是访问某个设备驱动程序的入口。Linux 系统中有两类特殊文件:面向字符的特殊文件和面向块(Block)的特殊文件。前者允许I/O操作以字符的形式进行,而后者通过内存缓冲区来使数据的读写操作以数据块的方式实现。当对设备文件进行I/O操作时,该操作会被转给相应的设备驱动程序。一个设备文件用主设备号(指出设备类型)和从设备号(指出是该类型中的第几个设备)来表示,可以通过mknod命令进行创建。硬盘等典型设备文件在Linux系统中的表示方法如表4.1所示。

表4.1 硬盘等典型设备文件在Linux系统中的表示方法

Linux文件名最长为256个字符,可以包括数字、字符,以及“.”“-”“_”等符号。Linux文件名不像DOS或Windows文件名那样由主文件名和扩展文件名两部分组成,在Linux中没有扩展名的概念。在Linux环境下,文件名对大小写敏感(Case Sensitive),例如test.txt与Test.txt会被识别成两个不同的文件;而DOS或Windows平台是不进行大小写区分的。

4.1.3 Linux系统的默认安装目录

按照FHS的要求(关于FHS的详细信息,可以在http://www.pahtname.com/fhs查询),Linux系统在安装过程中会创建一些默认的目录。这些默认的目录都有其特殊的功能,不可随便将其更名,以免造成系统错误。表4.2列出了这些默认目录及其功能说明。

表4.2 默认目录及其功能说明

4.1.4 Linux文件系统的类型

Linux是一种兼容性很高的操作系统,除了能够挂载各种类型的设备,还可以把其他各种文件系统挂载到Linux系统上。/proc/filesystems文件中列出了系统当前可用的文件系统类型,其中不仅包括UNIX支持的各种文件系统类型,还包括Windows 文件系统。对于普通用户而言,这些功能最普通的意义是允许用户使用软盘、U盘和CD-ROM内的文件。

为了查看系统当前可用的文件系统类型,可以使用cat命令,如下所示:

Linux所支持的文件系统包括以下多种类型。

● Adfs:acron磁盘文件系统,是在RISC OS操作系统中使用的标准文件系统。

● BeFS:BeOS操作系统使用的文件系统。

● CIFS:通用Internet文件系统(Commnn Intemet File System,CIFS),用于访问符合SNIA CIFS标准的服务器。CIFS对SMB协议(可用于在Linux和Windows之间共享文件)进行了改进和标准化,是一种虚拟文件系统。

● Ext:Ext文件系统的第一个版本,现在已经很少使用。Ext2、Ext3、Ext4是其升级版本,是目前Linux系统经常使用的文件系统。

● ISO9660:从High Sierra (CD-ROM使用的最初标准)发展而来的文件系统,是CD-ROM的标准文件系统。

● KAFS:AFS客户端文件系统,用于分布式计算环境,可与Linux、Windows和Macintosh客户端共享文件。

● Minix:Minix文件系统类型,最初用于UNIX的Minix版本,只支持长度在30个字符以下的文件名。

● MS-DOS:MS-DOS文件系统。DOS、Windows和OS/2使用该文件系统,不支持长文件名,主要用于挂载Microsoft操作系统生成的软盘。

● VFAT:Microsoft扩展FAT(VFAT)文件系统,支持长文件名,被Windows 9x/2000/XP使用。

● UMSDOS:扩展的MS-DOS文件系统,不仅支持长文件名,还保持了对UID/GID、POSIX权限和特殊文件(如管道、设备)的兼容。

● Proc:Proc是一个基于内存的伪文件系统,不占用外存空间,只是以文件的方式为访问Linux内核数据提供接口。由于Proc文件系统是虚拟的,因此无须挂载。用户和应用程序可以通过/proc得到系统的运行信息,并可以改变内核的某些参数。许多应用程序和工具依靠Proc来访问Linux内核信息。

● Reiser:ReiserFS日志文件系统。

● Swap:用于交换(Swap)分区。交换分区是系统虚拟内存的一部分,用于在当前内存不足时暂时保存数据。数据被交换到交换分区后,当再次需要时调回内存。

● NFS:网络文件系统(Network File System,NFS)类型。

● HPFS:该文件系统用于只读挂载OS/2 HPFS文件系统。

● NCPFS:Novell NetWare文件系统,可以通过网络挂载。

● AFFS:Amiga计算机使用的文件系统。

● UFS:Sun Microsystems操作系统(Solaris和SunOS)。

● XFS:一种在高性能环境中很有用的日志文件系统,支持完整的64位寻址,目前被更多服务器类型的Linux系统所接受。

● JFS:JFS主要适合企业系统,是为大文件系统和高性能环境而设计的。

● Xiafs:与Minix文件系统相比,这种文件系统支持长文件名和更大的i节点。

● Coherent:System V使用的文件系统类型。

● SMB:支持SMB协议的网络文件系统,可用于实现Linux与Windows系统的文件共享。

4.1.5 Linux文件系统的组成

在Red Hat Enterprise Linux 7.5中,系统默认安装的是XFS文件系统。XFS文件系统将磁盘分为4个部分,如图4.2所示。块0称为引导块,包含系统启动程序的磁盘区块。块1称为超级块,主要用来记录文件系统的配置方式,其中包括i-node数量、磁盘区块数量、未使用的磁盘区块,以及i节点表、空闲块表在磁盘中存放的位置等信息。由于超级块保存了极为重要的文件信息,因此系统将超级块冗余保存。系统在使用fsck等命令修复处于严重瘫痪状态的文件系统时,实际上就是在对超级块进行恢复操作。从块2开始是i节点(i-node,index-node的缩写)表,i节点表中记录的信息很多,包括文件大小、用户UID、用户组GID、文件存取模式(包括读、写或执行)、链接数目(文件每创建一个链接,链接计数加1;每删除一个链接,链接计数减1)、文件最后修改时间、磁盘区块地址和间接区块等。i节点表之后的数据存储块用于存放文件内容。

图4.2 XFS文件系统磁盘划分

文件有逻辑结构和物理结构两种不同的组织方式。

逻辑结构是面向用户的,是用户可以看到的表示文件内容的字符流。例如,使用编辑命令vi或显示命令cat时所看到的文件内容。

物理结构是文件在磁盘上的存储组织方式,涉及具体的存放磁盘区块。用户所看到的文件内容是连续的,但实际上文件可能并不是以连续的方式存放在磁盘上的。