Linux的软硬链接文件的区别

Linux为每一个新建的文件都分配一个innode号(索引节点),文件属性保存在innode里面。

硬连接文件和原文件有相同的innode号,相当于C语言的指针,指向物理磁盘同一个区块,他们都是这个地址的一个引用,文件系统会维护一个引用计数,只要有文件指向这个区块,它就不会从硬盘上消失。

ls -li
# 硬连接innode号一样
54659217 -rw-r--r-- 2 root root 4 5月  19 11:02 hard
54659217 -rw-r--r-- 2 root root 4 5月  19 11:02 myfile

因为他们指向同一区块,对hard操作,myfile也会改变。删除hard相当于删除了这个区块的一个引用,myfile仍然可用。

ubuntu# cat myfile
123
ubuntu# echo 345 > hard
ubuntu# cat myfile
345
ubuntu# cat hard
345

ubuntu# rm myfile
ubuntu# cat hard
345

软链接又叫符号链接,只存原文件的一个绝对路径,像快捷方式一样,有独立的innode号。

操作软链接文件等于操作原文件,删除原文件软链接失效,删除软链接(等于删除一个快捷方式)原文件不受影响。

ubuntu# echo 123 > myfile
ubuntu# ln -s myfile soft
ubuntu# ls -li
54659217 -rw-r--r-- 1 root root 4 5月  19 11:13 myfile
54659218 lrwxrwxrwx 1 root root 6 5月  19 11:13 soft -> myfile

ubuntu# cat soft 
123
ubuntu# rm myfile 
ubuntu# cat soft 
cat: soft: 没有那个文件或目录

软连接通常用于将一些目录层次较深的文件链接到一个更易访问的目录。

硬连接不能跨分区,软链接能跨分区,软链接用的频率高。