
为解决文件的共享使用,Linux系统引入了两种链接:硬链接和软链接。在Linux中,元数据中的inode号才是文件的唯一标识而非文件名,文件内容要通过inode号来寻找,犹如交通指示牌一样,指示着数据找寻的方向。
硬链接(Hard Link)
A和B的硬链接,则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除其中一个,对另外一个没有任何影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。
注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据块只有在inode节点链接数减少为0的时候才会被系统回收。
软链接(Soft Link)
A是B的软链接,A的目录项中的inode节点号与B的目录项中的节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名。A和B之间是主从关系,如果B被删除了,A依然存在,但指向的是一个无效的链接。
Linux中软链接和硬链接之间有什么区别和联系?
概念不同:
软链接可以理解成快捷方式,和原文件的inode号不一样,它和Windows下的快捷方式的作用是一样的,软链接数据块中记录的亦是相对路径指向。
硬链接和原文件对应一个inode,就是对应一个文件,可以理解成一个文件有几个别名。
用法不同:
软链接可以理解成快捷方式,也清楚知道原文件在哪里。它和Windows下的快捷方式的作用是一样的,和Windows一样,删除源文件,快捷方式也就无法使用了。
硬链接可以看成一个备份,但并没有增加空间,因为文件就一个,这种可以防止源文件删除后不能使用问题同时也有局限性,不能对目录和跨文件系统使用。
语法格式(ln):
硬链接:ln 源文件 链接名
软链接:ln -s 源文件 链接名
注意:链接的源文件路径要写绝对路径,否则会报错。
软链接的规范叫法是符号链接 (symbolic link),有点像Windows中的快捷方式。硬链接 (hard link) 在 Windows 中没有相似的概念。符号链接指向某个文件或目录(所指向的文件本身又可能是一个符号链接),你对符号链接的大多数 *** 作(例如复制、编辑等)都会转嫁到它所指向的目标上。但是,对符号链接的有些 *** 作(例如 ls, rm等)只施于符号链接自身。还有些命令(例如 cp, find, tar 等)可以通过选项来决定到底是把实际 *** 作施于符号链接还是始于它所指向的对象。
硬链接和它所链接的对象是完全平等的,二者共用文件系统中的同一个节点,通俗地说就是物理上只有一个文件,但是通过硬链接的方式创建了多个文件名,使之分属于不同的目录。通过任何一个文件名修改文件的结果都是一样的。每创建一个硬链接,文件节点上的链接数就会增加1;每删除一个硬链接(包括原始的文件名),节点上的链接数会减少1。只要节点数大于0,这个文件就可以被 *** 作系统访问,也就是文件是存在的;如果节点数变成零了,对于 *** 作系统来说,节点所代表的文件就被删除了,存放文件的硬盘空间随时可以被其他文件覆盖。所以,硬链接指向的目标不是另一个文件名,而是文件系统中的节点,是 *** 作系统访问文件的入口。由于这个缘故,硬链接不能跨越文件系统——你不可能把这个分区中的节点硬链接到另一个分区中去,也不能给目录创建硬链接。
而符号链接自己有自己的独立节点,和它所指向的对象(文件名,而非节点)只有逻辑上的联系,没有物理上的联系。所以,如果它所指向的对象被删除了,通过符号链接就不可能访问它所指向的文件了。由于只是逻辑上的联系而已,符号链接可以跨越文件系统,可以给目录创建符号链接。
硬链接用 ln 来创建,符号链接用 ln -s 创建。例如,原来有一个文件 orig_file,你可以用
ln orig_file hd_link
创建一个硬链接 hd_link(必须和 orig_file 在同一个文件系统中),可以用
ln -s orig_file symb_lnk
创建一个符号链接 symb_lnk. 文件 hd_link 和 orig_file 指向同一个文件节点,hd_link 和 orig_file 地位是平等的。如果你执行了
rm orig_file
那你还可以 hd_link 照常访问原来的文件,可是通过 symb_lnk 就访问不了了。由于硬链接 hd_link 的存在,删除了 orig_file 不会导致数据丢失,你只是少了一个文件节点的入口(文件名)而已;如果没有事先创建硬链接,或者所有的硬链接(包括原始的文件名)都被删除了,文件中的数据才算是真正“丢失”了(如果你马上用硬盘恢复工具去找,也许还能找回来,也许已经被其他数据覆盖了,就看你的运气了)。文件中的数据能不能访问和符号链接存在与否没有关系,和硬链接存在与否大有关系。
你说的是 ls -l 输出里的那个数字吧?在你使用 ln 来为某个文件创建硬链接前,原来的文件名指向文件系统上某个 inode,那里存储着该文件的内容。换言之,有 1 个文件名指向该 inode,故此 ls -l 显示的“链接数目”为 1。
你使用 ln 创建了一个硬链接后,就会有一共 2 个文件名指向同一个 inode,故此 ls -l 显示的链接数目为 2。如此类推。
注意,你用 ln 创建的硬链接的文件名,跟原文件名一样,“平起平坐”,没有主次之分。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)