天天看点

Linux硬链接和软链接的区别

Linux硬链接和软链接的区别

原理上:

硬链接(hard link):

A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除其中一个,对另外一个没有影响。每增加一个文件名,inode节点的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为零,inode节点和对应的数据块被回收。

注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据库(文件)只有在inode节点链接为零的时候才会被系统回收。

软链接(soft link):A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B目录项中的inode节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名(可以根据这个找到B的目录项)。A与B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是一个无效链接。

注:B相当于A的镜像文件,不占用多于的磁盘空间。

使用限制上:

硬链接:

A、不能对目录创建硬链接,原因有几种,最重要的是>>>文件系统不能存在链接环(目录创建时的“..”除外,这个系统可以识别出来),存在环的后果会导致例如文件遍历等操作的混乱(du,pwd等命令的运作原理就是基于文件硬链接,顺便一提,ls -l结果的第二列也是文件的硬链接书,即inode节点链接数)

B、不能对不同的文件系统创建硬链接,由原理即可知原因。

C、不能对不存爱的文件创建硬链接,由原理即两个文件名要在相同的文件系统下。

软链接:

A、可以对目录创建软链接,遍历操作会忽略目录软链接。

B、可以跨文件系统。

C、可以对不存在的文件创建软链接,因为放的只是一个字符串,至于这个字符串是不是对于一个实际的文件,就是另外一回事了。

命令:

硬链接: ln源文件 链接名

软连接: ln -s 源文件 链接名

补充ln命令

-b或--backup:删除,覆盖目标文件之前的备份; 

-d或-F或——directory:建立目录的硬连接; 

-f或——force:强行建立文件或目录的连接,不论文件或目录是否存在; 

-i或——interactive:覆盖既有文件之前先询问用户; 

-n或--no-dereference:把符号连接的目的目录视为一般文件; 

-s或——symbolic:对源文件建立符号连接,而非硬连接; -S<字尾备份字符串>或--suffix=<字尾备份字符串>:用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它; 

-v或——verbose:显示指令执行过程; -V<备份方式>或--version-control=<备份方式>:用“-b”参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用“-S”参数变更,当使用“-V”参数<备份方式>指定不同备份方式时,也会产生不同字尾的备份字符串; 

--help:在线帮助; 

--version:显示版本

补充如何取消软连接

Linux下取消软链接,做个案例来说明:

删除软链接 确实是用rm 但是!!!

rm -fr xxxx/ 加了个/ 这个是删除文件夹

rm -fr xxxx 没有/ 这个是删除软链接 

本文转自白羊IT51CTO博客,原文链接:http://blog.51cto.com/000011211684/2048867,如需转载请自行联系原作者