欢迎来到starnight_cyber的博客

Linux软链接和硬链接

在Linux中有两种不同类型的文件链接:

符号链接(Symbolic Link),也称为软链接;
硬链接(Hard Link);

【硬链接】

  硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

【软链接】

  符号链接就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。类似于Windows的快捷方式。

【举例】

# echo "hello linux" > test
# ln test test.hard
# ln -s test test.soft
# ls -il *
1009643 -rw-r--r--. 2 root root 12 May 19 11:09 test
1009643 -rw-r--r--. 2 root root 12 May 19 11:09 test.hard
1009645 lrwxrwxrwx. 1 root root  4 May 19 11:09 test.soft -> test
# file *
test:      ASCII text
test.hard: ASCII text
test.soft: symbolic link to `test'

  我们可以看到源文件(test)和硬链接(test.hard)的inode节点是一样的,而符号链接test.soft则不一样。 说明硬链接和源文件是同一个文件,而软链接则不同,软链接可以看成是指向源文件。

# echo "Hello World" >> test
# cat test
hello linux
Hello World
# cat test.hard 
hello linux
Hello World
# cat test.soft 
hello linux
Hello World

  可以看到,当修改源文件的时候,软硬链接的内容也发生了相应的修改。

# rm -rf test
# cat test.hard 
hello linux
Hello World
# cat test.soft 
cat: test.soft: No such file or directory

  当删除源文件,可以看到硬链接还是可以看到文件内容,而软链接则提示文件不存在。

  当查看test.soft,可以看到指向的test标记为红色,并且闪烁,表示文件不存在。

【区别】

  软链接和硬链接之间的区别:

硬链接共享一个inode节点,删除了源文件不影响;软链接一个链接有一个节点,删除源文件将影响其工作;
创建硬链接链接数加1,不能跨分区创建链接,不能跨设备,不支持目录创建;软链接支持跨分区,跨设备,支持目录的创建;
软链接创建时,用的相对路径是相对于软链接文件的路径不是相对于当前工作目录的路径;

【总结】

  删除符号链接,对源文件没有影响;

  删除源文件,对硬链接没有影响;

  同样,删除硬链接,对源文件没有影响;

  删除原文件,以及所有的硬链接,文件才会真正被删除。

【参考】

  https://www.cnblogs.com/itech/archive/2009/04/10/1433052.html

  https://www.jianshu.com/p/bebfad90e939

posted @ 2020-05-19 11:22  starnight_cyber  阅读(321)  评论(0编辑  收藏  举报