Linux文件系统的硬链接和软链接

在 Linux 的 ext2/3/4文件系统中,每一个普通文件或者普通目录(也被看做是文件)都存在一个 inode,每个inode都有一个本文件系统内唯一的 ID,这个 inode 保存文件的元数据,如创建时间、修改时间、文件类型、所有者、引用数等,以及关键的指向文件内容数据块指针,但不包含文件名称。文件名称是存放在文件所在目录的数据块中。目录的数据块中存放着是该目录所包含的文件的文件名称和所对应的 inode ID。

软链接文件有一个对应的 inode,在这个inode中,它的文件类型是软链接文件,在 ls -l命令时,以 l 标识;但是它的文件内容指针不是指向数据块,而是存储的是目标文件名。因此,当它所链接的文件被删除后,通过软链接文件打开会提示所链接的文件不存在。它一般情况下不占用data block,仅仅通过它对应的inode记录就能将其信息描述完成;符号链接的大小是其指向目标路径占用的字符个数,例如某个符号链接的指向方式为"rmt --> ../sbin/rmt",则其文件大小为11字节;只有当符号链接指向的目标的路径名较长(60个字节)时文件系统才会划分一个data block给它。

硬链接文件不存在独立的 inode,即多个文件对应同一个inode。当创建一个文件的硬链接时,会将源文件的的引用数加 1。当删除硬链接文件或者其源文件时,首先将 inode中的引用数减 1。如果还是大于 0 ,就不再对 inode和数据块做其它操作;只有当为 0 时,才会对 inode和数据块做删除操作相应的处理。因此,当硬链接的源文件被删除后,通过硬链接文件可以照常访问文件。

硬链接不支持目录和跨文件系统的链接。因为 inode ID只在本文件系统内唯一,所以不支持硬链接不支持跨文件系统的链接。不支持目录,是人为限制,是为了避免混乱。

你可能感兴趣的:(Linux,linux,文件系统)