Linux下的硬链接和软链接

前言

在 Linux 文件系统中,一个文件被分成两个部分:元数据(metadata)与用户数据(user data)。元数据为文件的附加属性,如索引节点(Inode)、文件大小、文件创建时间、文件所有者等。元数据中并不包含文件名,文件名仅仅是为了方便用户使用。Linux 文件系统为每一个保存在磁盘分区中的文件(无论什么类型)都分配一个索引节点号(Inode Number),索引节点号是文件在一个文件系统中的唯一标识,不同文件所对应的索引节点号是不相同的;用户数据,即文件数据块(data block),文件数据块中以二进制的形式记录着文件的真实内容。

ls -i # 查看索引节点号

软链接

也叫做符号链接,相当于Windows下的快捷方式,链接文件中存储的是源文件的位置,当源文件位置移动了、名称修改了,删除了,链接文件都会失效。链接文件和源文件是不同的 索引节点号。

ln -s user.txt softlink_user.txt # 对 user.txt 创建软链接

硬链接

ln user.txt hardlink_user.txt # 对 user.txt 创建硬链接

在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。

硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该文件的索引节点有一个以上的链接。只删除一个链接并不影响索引节点本身和其它的链接,只有当最后一个链接被删除后,文件的数据块及文件的链接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬链接文件均被删除。

总结

硬链接 软链接
索引节点号 硬链接文件和源文件指向相同的索引节点号 软链接文件和源文件指向不同的索引节点号
文件属性 硬链接没有任何标识,因为硬链接文件和源文件是相对独立的(删除不影响其它链接) 软链接在 Linux 中进行了明确的标识
对目录进行链接 不支持 支持
跨越文件系统 不支持 支持
对不存在的文件进行链接 不支持,硬链接要求文件必须存在(即 inode 必须存在) 支持,软链接可以对一个不存在的文件名 filename 进行链接,当使用 vim 对软链接文件进行编辑的时候,Linux 会自动新建一个文件名为 filename 的文件

参考

Linux 硬链接与软链接
详解 Linux 中的硬链接与软链接

posted @ 2024-04-09 22:39  strongmore  阅读(31)  评论(0编辑  收藏  举报