UNIX文件系统是UNIX系统的心脏部分,提供了层次结构的目录和文件。文件系统将磁盘空间划分为每1024个字节一组,称为块(block)(也有用512字节为一块的,如:SCO XENIX)。编号从0到整个磁盘的最大块数。
一个磁盘分成一个或多个分区,每个分区可以包含一个文件系统
一个分区分为三部分:
+ 超级块, 文件系统中第一块被称为超级块。这个块存放文件系统本身的结构信息,比如每个区域的大小,未被使用的磁盘块的信息。
+ i节点, 超级块的下一个部分就是i节点表,文件系统中的每个文件在该表中都对应一个i节点。i节点是固定长度的记录项,它包含有关文件的大部分信息。Linux文件系统使用 索引节点i 来记录文件信息,索引节点是一个结构,用固定长度,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。
+ 数据区, 文件的内容保存在这个区域上,磁盘上所有块的大小都一样,如果文件包含了超过一个块的内容,则文件内容会存放在多个磁盘块中,并把磁盘块的分配情况记录在文件的i节点中的磁盘序列表中。
仔细观察一个柱面组的i节点和数据块部分,可以看到下图所示情况
一个文件系统维护了一个索引节点的数组 即为目录项,目录项中的每一项包括文件索引节点i的节点号和文件名,所以目录只是将文件的名称和它的索引节点号结合在一起的一张表。
对于一个文件来说有唯一的索引节点与之对应,而一个索引节点却可以有多个文件名与之对应,因此磁盘上的同一个文件可以通过不同的路径去访问它。
在上图中有两个目录项指向同一i节点。每个i节点有一个链接计数器,其值是指向该i节点的目录项数。只有当链接计数器减少为0时,才可删除该文件。这也就是为什么解除对一个文件的链接操作并不总是意味着,释放该文件占用的磁盘块的原因。而且删除一个目录项的函数被称为unlink而不是delete的原因。
每个文件系统都对它们的i节点进行编号,因此目录项中的i节点指向同一文件系统的i节点,不能使一个目录项指向另一个文件系统的i节点,因此硬连接不能跨越文件系统。
当在不更换文件系统情况下为一个文件更名时,该文件的实际内容并未移动,只需构造一个指向现有i节点的新目录项,并解除与旧目录项的链接。这就是mv命令的通常操作方式。
介绍完文件系统之后,下边了解一下符号链接(软链接)和硬链接的区别
可以用ln命令对一个已经存在的文件建立一个新的连接,而不复制文件的内容。连接有软连接和硬连接之分,软连接又叫符号连接。
符号链接是指向一个文件的间接指针,硬链接直接指向文件的i节点。
硬连接 软连接
硬链接指向文件的i节点 它的数据是它所连接的文件的路径名,是指向一个文件的间接指针
目录不能有硬连接,但超级用户可以 目录也适用
不能跨越文件系统 可以跨越文件系统
文件在磁盘中只有一个拷贝 也是只有一份拷贝
索引节点的引用为0时才可以删除文件 可以删除原有文件保留连接文件,没有防误删功能
可以防止误删除