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下取消软链接,做个案例来说明:

1.先建立一个软链接
[root@rekfan.com test]# ls -l
总计  0
1852112 -rw-rr– 1 root root 48 07-09 09:20 file0709
1950412 -rw-rr– 2  root root 0 07-09 09:20 file2
#建立file0709files_soft软链接
[root@rekfan.com test]# ln -s file0709  files_soft
[root@rekfan.com test]# ls -l
总计 0
1852112 -rw-rr– 1 root  root 48 07-09 09:20 file0709
0991090 lrwxrwxrwx 1 root root 5 07-09 09:24  files_soft -> file0709
1950412 -rw-rr– 2 root root 0 07-09 09:20  file2
2.删除上面建立的软链接
[root@rekfan.com test]# ls -l
总计  0
1852112 -rw-rr– 1 root root 0 07-09 09:20 file0709
0991090 lrwxrwxrwxroot root 5 07-09 09:24 files_soft -> file0709
1950412 -rw-rr– 2 root root 0  07-09 09:20 file2
#删除软链接
[root@rekfan.com test]# rm -rf files_soft
[root@rekfan.com test]ls -il
总计 0
1852112 -rw-rr– 1 root root 0 07-09 09:20 file0709
1950412  -rw-rr– 2 root root 0 07-09 09:20 file2

删除软链接 确实是用rm 但是!!!
rm -fr xxxx/ 加了个/ 这个是删除文件夹
rm -fr xxxx 没有/ 这个是删除软链接 







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

相关文章
|
2月前
|
存储 Unix Linux
Linux 下文件和目录的本质区别和组成
Linux 下文件和目录的本质区别和组成
38 0
|
2月前
|
Linux API 调度
Linux系统驱动跟裸机驱动的区别
Linux系统驱动跟裸机驱动的区别
31 0
|
2月前
|
Oracle 关系型数据库 Linux
Linux下 su命令与su - 命令有什么区别?
Linux下 su命令与su - 命令有什么区别?
28 0
|
2月前
|
Linux Shell 文件存储
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(深入df和dh的区别和探索)
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(深入df和dh的区别和探索)
41 1
|
10天前
|
存储 Shell Linux
Linux(27) profile和bashrc的区别
Linux(27) profile和bashrc的区别
24 0
|
1月前
|
Linux 编译器 Windows
Linux软链接使用技巧
Linux软链接使用技巧
16 1
|
2月前
|
存储 算法 Linux
Linux中的硬链接与软链接:原理、应用与最佳实践
Linux中的硬链接与软链接:原理、应用与最佳实践
58 0
|
2月前
|
运维 网络协议 Unix
Linux终端(Terminal)与控制台(Console)的区别
Linux终端(Terminal)与控制台(Console)的区别
35 0
|
2月前
|
Unix Linux 索引
Linux 基础解惑:Linux 下文件描述符标志和文件描述符状态标志,文件状态标志,文件状态之间的区别
Linux 基础解惑:Linux 下文件描述符标志和文件描述符状态标志,文件状态标志,文件状态之间的区别
36 0
|
2月前
|
编解码 Unix Linux
【Linux C/C++ 延时(延迟)函数比较】介绍Linux系统中常用的延时函数sleep、usleep、nanosleep、select和std::sleep_for()的区别和使用场景
【Linux C/C++ 延时(延迟)函数比较】介绍Linux系统中常用的延时函数sleep、usleep、nanosleep、select和std::sleep_for()的区别和使用场景
67 1