Linux C编程80例详解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 Linux文件系统

文件系统是操作系统用于表示磁盘或分区上文件的方法和数据结构。不同的操作系统需要使用不同类型的文件系统,为了与其他操作系统兼容,相互交换数据,通常操作系统都支持多种类型的文件系统。Linux 内核支持十多种不同类型的文件系统,下面对 Linux 常用的文件系统及基本文件类型作一个简要介绍。

1.3.1 Linux文件系统

1. ext2、ext3和ext4文件系统

ext 是第一个专门为 Linux 设计的文件系统类型,称为扩展文件系统,在 Linux 发展的早期发挥过重要的作用。由于稳定性、速度和兼容性方面存在许多缺陷,ext 现在已经很少使用。

ext2是为解决ext文件系统存在的缺陷而设计的可扩展、高性能的文件系统,称为二级扩展文件系统。ext2 于 1993 年发布,在速度和 CPU 利用率上具有更加突出的优势,是GNU/Linux系统中标准的文件系统,支持256字节的长文件名,文件存取性能极好。

ext3 是ext2的升级版本,兼容ext2,在ext2 的基础上增加了文件系统日志记录功能,称为日志式文件系统,是目前Linux默认采用的文件系统。日志式文件系统在因断电或其他异常事件而停机重启后,操作系统会根据文件系统的日志,快速检测并恢复文件系统到正常的状态,并可缩短系统的恢复时间,提高数据的安全性。若对数据有较高的安全性要求,建议使用ext3文件系统。

ext4是ext3的改进版,修改了ext3中部分重要的数据结构,而不仅仅像ext3对ext2那样,只是增加了一个日志功能而已。ext4可以提供更优的性能和可靠性,同时具备更为丰富的功能。Linux kernel自2.6.28开始正式支持新的ext4文件系统。

2. swap文件系统

众所周知,现代操作系统都实现了“虚拟内存”这一技术,不但在功能上突破了物理内存的限制,使程序可以操纵大于实际物理内存的空间,而且更重要的是,“虚拟内存”是隔离每个进程的安全保护网,使每个进程都不受其他程序的干扰。

swap 空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。这些被释放的空间可能来自一些很长时间没有什么操作的程序,可以将其临时保存到 swap 空间中,等到那些程序要运行时,再从 swap 中恢复保存的数据到内存中。需要注意的是,系统总是在物理内存不够时,才进行swap交换。

3. vfat文件系统

Linux 把 DOS、Windows 中采用的 FAT 文件系统(包括 FAT12、FAT16 和 FAT32)统称为vfat文件系统。

4. NFS文件系统

NFS 即网络文件系统,用于在 UNIX 系统之间通过网络进行文件共享,用户可将网络中NFS服务器提供的共享目录挂载到本地的文件目录中,从而实现操作和访问NFS文件系统中的内容。

5. ISO9660文件系统

ISO9660 文件系统即光盘所使用的文件系统,Linux 系统对光盘已经有了很好的支持,它不仅可以实现对光盘的读/写,而且可以实现对光盘的刻录。

1.3.2 Linux文件类型及属性

Linux和Windows文件类型最显著的区别就是Linux将目录和设备都当成文件来处理,这样便简化了处理各种不同类型设备的流程,提高了效率。Linux 系统主要包含以下 5 种文件类型。

1. 普通文件

这是最常使用的一类文件,其特点是不包含文件系统的结构信息。通常用户所接触到的文件,如图形文件、数据文件、文档文件、声音文件等都属于这种文件。这种类型的文件按其内部结构又可细分为文本文件和二进制文件。

2. 目录文件

在Linux中,目录也是文件,它们包含文件名、子目录名及指向这些文件和子目录的指针。目录文件是Linux中存储文件名的唯一地方,当用指针将文件和目录关联起来之后,就构成了目录文件。因此,在对目录文件进行操作时,一般不涉及文件内容的操作,而只是对目录名和文件名的对应关系进行操作。

另外,在 Linux 系统中的每个文件都被赋予一个唯一的值,而这个数值被称为索引节点。索引节点存储在一个索引节点表中,该表在磁盘格式化时未分配。一个索引节点包含文件的所有信息,包括磁盘数据的地址和文件类型。

3. 链接文件

链接文件类似于Windows的“快捷方式”,可以实现对不同目录、文件系统甚至是不同机器上的文件进行直接访问,并且不必重新占用磁盘。

4. 设备文件

Linux 把设备都当成文件一样来进行操作,这样就大大方便了用户的使用。在 Linux中,与设备相关的文件一般都在 /dev 目录下,主要包括两种:块设备和字符设备。块设备是指数据读/写时,以块(如由柱面和扇区编址的块)为单位的设备,如硬盘;字符设备则主要是指串行端口的设备。

5. 管道文件

管道文件是一种很特殊的文件,主要用于不同进程间的信息传递。当两个进程需要进行数据或信息传递时,可以使用管道文件。一个进程将需要传递的数据或信息写入管道的一端,另一个进程从管道的另一端去读取所需要的数据或信息。

文件的拥有者可以把文件的访问属性设成 3 种不同的访问权限:可读(r)、可写(w)和可执行(x)。文件又有 3 个不同的用户级别:文件拥有者(u)、所属的用户组(g)和系统的其他用户(o)。

在 Linux 中执行“ls -l 文件名”命令时,打印结果的第一栏将显示指定文件的类型及其属性,如下所示。

            trevor@trevor-PC:~/linux$ ls -l uDiscovery
            -rwxr-xr-x 1 trevor trevor 33592 2011-03-26 18:44 uDiscovery
            trevor@trevor-PC:~/linux$

第一个字符显示文件的类型:- 表示普通文件;d表示目录文件;l表示链接文件;c表示字符设备;b表示块设备;p表示命名管道,如FIFO文件;f表示堆栈文件,如LILF文件。第一个字符以后有 3 个字符组,分别表示文件拥有者(u)、所属的用户组(g)和系统的其他用户(o)对文件的权限,如果没有此权限则为 - 。