3.3 文件系统简介
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立、存入、读出、修改、转储文件,当用户不再使用文件时撤销文件等。
3.3.1 系统结构
在Linux系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构,如图3-9所示。文件系统的顶层是由根目录开始的,系统使用“/”来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含(子)目录或文件,就这样构成一个大的文件系统。
图3-9 树状结构图
1.Linux文件系统的优点
(1)便于磁盘空间的管理。
(2)方便数据的组织和查找。
(3)提高磁盘空间的使用率。
注意:在Linux系统中使用具有层次的树状文件结构主要是为了方便文件系统的管理与维护。
2.Linux系统文件和目录命名规则
在Linux系统中,文件和目录的命名规则如下:
(1)除了字符“/”之外,所有的字符都可以使用,但是要注意,在目录名或文件名中,使用某些特殊字符并不是明智之举。例如,在命名时应避免使用“<”“>”“?”“*”和非打印字符等。如果一个文件名中包含了特殊字符,例如空格,那么在访问这个文件时就需要使用引号将文件名括起来。
(2)目录名或文件名的长度不能超过355个字符。
(3)目录名或文件名是区分大小写的。如DOG、dog、Dog和DOg,是互不相同的目录名或文件名,但使用字符大小写来区分不同的文件或目录,也是不明智的。
(4)与Windows操作系统不同,文件的扩展名对Linux操作系统没有特殊的含义,换句话说,Linux系统并不以文件的扩展名来区分文件类型。例如,dog.exe只是一个文件,其扩展名exe并不代表此文件就一定是可执行文件。
注意:在Linux系统中,硬件设备也是文件,也有各自的文件名称。
3.Linux系统文件或目录定位方法
程序可以通过文件名和目录名从树结构的任何地方开始搜查并快速定位所需的文件或目录。定位文件名或目录位置的方法有绝对路径和相对路径两种。
(1)绝对路径:以一个正斜线“/”开始。绝对路径包括从文件系统的根节点到要查找的目录或文件所必须遍历的每一个目录的名字,它是文件位置的路标方向,因此在任何情况下都可以使用绝对路径找到所需的文件。
(2)相对路径:不是以正斜线“/”开始,它可以包含从当前目录到要查找的目录或文件所必须遍历的每一个目录的名字。相对路径大部分情况下都要比绝对路径短。
3.3.2 文件类型
在Linux中一切都是文件,而且文件都有其所属类型。如何得知具体的文件类型呢?在Linux中可以使用以下命令进行查看:
ls -l path
文件的属性通常会以如下形式进行显示:
drwxr-xr-x
以上代码中各字母的意思如下:
(1)第1个字母:代表文件类型。
(2)第3~4字母:代表用户的权限。
(3)第5~7字母:代表用户组的权限。
(4)第8~10字母:代表其他的用户的权限。
在Linux中常见的文件类型有7种,如表3-3所示。
表3-3 文件类型
• 普通文件:如文本文件、二进制的可执行文件等,可用cat、less、more、vi、emacs来查看内容,用mv来改名。
• 目录文件:包括文件名、子目录名及其指针。它是Linux储存文件名的唯一空间,可用ls列出目录文件。
• 连接文件:是指向同一索引节点的目录。可以用ls来查看,连接文件的标志用l开头,而文件面后以“->”指向所连接的文件。
• 特殊文件:Linux的一些设备如磁盘、终端、打印机等都在文件系统中表示出来,则一类文件就是特殊文件,常放在/dev目录内。
3.3.3 Linux目录及功能
在Linux文件系统中有两个特殊目录,一个是用户所在的工作目录,即当前目录,可用一个点“.”表示;另一个是当前目录的上一层目录,也叫父目录,可以使用两个点“..”表示。
如果一个目录或文件名是以一个点开始,就表示这个目录或文件是一个隐藏目录或文件。隐藏目录或文件就是指当以默认方式查找时,系统中不显示该目录或文件。
除了以上所介绍的Linux文件系统的重要目录外,还有一些常用目录。在Linux文件系统中,通用的目录名用于表示一些常见的功能,如表3-4所示。
表3-4 常见Linux目录名称
注意:在Linux系统中,为了方便管理和维护,常用目录全部采用文件系统层析标准(Filesystem Hierarchy Standard,FHS)的文件结构。FHS仅仅定义根目录(/)下的各个主要目录应该存放的子目录或文件,包括两层规范:第一层为根目录下的各个目录应该存放哪些类型的子目录或文件,例如在/bin目录中存放的是可执行文件;第二层主要是针对/user和/var这两个目录的子目录定义的,例如在/user/share目录中存放的应该是共享数据。