Linux中硬链接文件和软链接文件有啥区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中硬链接文件和软链接文件有啥区别?相关的知识,希望对你有一定的参考价值。

linux系统中链接文件分为硬链接和软链接(软链接也叫符号链接)。硬链接和软链接都是指向文件的一种方式,但两者有不同的地方,主要有以下不同:
1.硬链接是创建一个指向block的inode,有防止误删除的功能。因为删除一个文件,实际上是删除inode信息,切断了inode与block之间的联系。当给一个文件做了硬链接之后,删除文件时,只会减少文件的链接数,当链接数为0时,才会彻底删除该文件。
软链接类似windows系统的快捷方式,是一个完整的文件,有自己的inode和block,block的内容就是原文件的文件名。当原文件删除后,软链接就失效了,没有防止误删除的功能。
2.文件的大小不一样。由于硬链接是指向原文件的block,所以硬链接的文件大小和原文件大小是一致的。而软链接是新的文件,block里是原文件的的文件名,所以软链接文件的大小一般是4k,即一个block的大小。
3.硬链接不能给目录做,不能跨分区做。软链接则都可以。
创建硬链接命令:
ln
file
filenew
#file为原文件名,filenew为新文件名。
创建软链接命令:
ln
-s
file
filenew
#file为原文件名,filenew为新文件名。
参考技术A 硬连接不能跨分区,而软连接可以!
硬连接总是指向一个I节点,而软连接是创建一个新的I节点。这就是它为什么可以跨分区的原因!
软连接可以对一个不存在的文件链接,而硬连接不能,因为他要指向源文件的I节点,所以源文件必须存在!硬连接不能对目录链接,I节点的原因是其中之一,第二个原因是目录的特殊性!
具体做法看楼上--妙雨飞仙--的!
但楼上有一错误,硬连接不是复制文件,而是复制文件头的数据到新文件,数据区共享!这样就可以省去数据空间。而复制硬连接的时候,会按照普通文件的操作方式进行!
参考技术B 硬链接不占用磁盘空间
硬链接只能作用于文件,不可跨越分区。

硬链接和软链接的区别

# 硬链接和软链接的区别
## 1、概念
在linux中,链接可分为两种:一种为硬链接,另一种为软链接。
硬链接:ln 源文件 目标文件
软链接:ln -s(soft)源文件 目标文件
### 硬链接
硬链接是指通过索引节点inode来进行链接。
linux系统中每个文件对应一个inode,并且允许多个文件名指向用一个inode。这种情况的文件就成为硬链接。
它的作用之一就是允许一个文件拥有多个入口,防止重要数据误删。

硬链接的原理:

技术分享



### 软链接
软链接也称为符号链接,相当于windows中的快捷方式。文件类型为L,是一个特殊的文件。文件中包含了另一个文件的路径信息内容。

软链接的原理:

技术分享
## 2、实验
###实验1:首先创建一个magedufile,可以看到硬链接数为1,通过ln创建一个硬链接magedufile_link,再次通过ls -li,可以发现数字变成2,两个文件第一列inode数量都为33612019。cat硬链接内容与源文件一样。把源文件删除后,link文件依然还在,内容没丢失,链接数变为1。ln不能对目录创建硬链接。

[[email protected] magedu]#ls -l
-rw-r--r--. 1 root root 17 Jul 23 13:38 magedufile
[[email protected] magedu]#cat magedufile 
i am study linux
[[email protected] magedu]#ln magedufile magedufile_link
[[email protected] magedu]#ls -li
total 8
33612019 -rw-r--r--. 2 root root 17 Jul 23 13:38 magedufile
33612019 -rw-r--r--. 2 root root 17 Jul 23 13:38 magedufile_link
[[email protected] magedu]#cat magedufile_link 
i am study linux
[[email protected] magedu]#rm -f magedufile
[[email protected] magedu]#ls
magedufile_link
[[email protected] magedu]#cat magedufile_link 
i am study linux
[[email protected] magedu]#ls -li
total 4
33612019 -rw-r--r--. 1 root root 17 Jul 23 13:38 magedufile_link
[[email protected] ~]#ln Desktop Desktop.bak
ln: ‘Desktop’: hard link not allowed for directory

总结: 
    (1)具有相同inode节点号的多个文件是为互为硬链接文件
    (2)删除硬链接文件或者源文件,文件本身并未被删除
    (3)删除文件的所有硬链接和源文件,文件才真正被删除
    (4)硬链接文件是文件的另一个入口
    (5)硬链接文件可以用rm命令删除
###实验2:创建一个文件,通过ln -s创建软链接后查看发现inode不同,软链接后面跟一个->指向源文件,当删除源文件后,软链接指向发生错误。

[[email protected] app]#echo "i am study linux" >/app/magedudir
[[email protected] app]#ls -l
total 4
-rw-r--r--. 1 root root 17 Jul 23 15:01 magedudir
[[email protected] app]#ln -s magedudir magedudir_slink
[[email protected] app]#ls -li 
total 4
67 -rw-r--r--. 1 root root 17 Jul 23 15:01 magedudir
68 lrwxrwxrwx. 1 root root  9 Jul 23 15:03 magedudir_slink -> magedudir
![](http://i.imgur.com/rA07xhv.png)

总结:
(1)快捷方式,可以通过readlink查看指向
(2)是一个文本文件。里面存放的是源文件的路径,指向源文件
(3)删除源文件,软链接依然存在,但是无法正常指向源文件
(4)失效的时候红底闪烁提示
(5)软链接和源文件是不同类型的文件,也是不同的文件。inode不相同。
(6)删除软链接文件可以用rm命令



## 3、区别
(1)创建方式的不同。默认不带参数的情况下,ln创建的是硬链接,带-s参数创建的是软链接
(2)硬链接文件与源文件的inode相同,而软链接文件的inode与源文件不同
(3)ln不能对目录创建硬链接,但可以创建软链接。
(4)删除文件的软链接文件,对源文件及硬链接文件无任何影响
(5)删除文件的硬链接文件,对源文件及软链接文件无任何影响
(6)删除链接文件的源文件,对硬链接文件无影响,会导致软链接失效
(7)同时删除源文件及其硬链接,整个文件才会被删除
(8)软链接可以跨文件系统,硬链接不可以跨文件系统

##4、附加
###文件的删除原理
文件的删除由两个变量控制:
                     i_link  文件的硬链接数量
                     i_count 引用计数(有一个程序调用就+1)
文件删除的条件:
                     i_link=0 && i_count=0

以上是关于Linux中硬链接文件和软链接文件有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Linux中硬链接和软链接的区别与联系!

硬链接和软连接

硬链接和软连接

Linux硬链接和软连接的区别与总结

硬链接和软链接的区别

linux硬链接和软链接的区别