感谢支持
我们一直在努力

Linux下的硬链接和符号链接

硬链接和符号链接(软链接):


        Linux 文件系统最重要的特点之一是它的文件链接。链接是对文件的引用,这样您可以让文件在文件系统中多处被看到。保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号inode 。在 Linux 中,链接可以如同原始文件一样来对。链接可以与普通的文件一样被执行、编辑和访问。对系统中的其他应用程序而言,链接就是它所对应的原始文件。当您通过链接对文件进行编辑时,您编辑的实际上是原始文件。链接不是副本。有两种类型的链接:硬链接和符号链接(软链接)。


  硬链接只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为 inode)。当您移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置,这样有助于文件的安全。如果您删除的文件有相应的硬链接,那么这个文件依然会保留,直到所有对它的引用都被删除。


        软连接,其实就是新建立一个文件,这个文件就是专门用来指向别的文件的(那就和windows 下的快捷方式的那个文件有很接近的意味)。软连接产生的是一个新的文件,但这个文件的作用就是专门指向某个文件的,删了这个软连接文件,那就等于不需要这个连接,和原来的存在的实体原文件没有任何关系,但删除原来的文件,则相应的软连接不可用(cat那个软链接文件,则提示“没有该文件或目录“)。


硬链接与软链接的区别;


硬连接是不会建立inode的,他只是在文件原来的inode link count域再增加1而已,也因此硬链接是不可以跨越文件系统的。相反都是软连接会重新建立一个inode,当然inode的结构跟其他的不一样,他只是一个指明源文件的字符串信息。一旦删除源文件,那么软连接将变得毫无意义。而硬链接删除的时候,系统调用会检查inode link count的数值,如果他大于等于1,那么inode不会被回收。因此文件的内容不会被删除。


  硬链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件。可以通过ls -i来查看一下,这两个文件的inode号是同一个,说明它们是同一个文件;而软链接建立的是一个指向,即链接文件内的内容是指向原文件的指针,它们是两个文件。


  软链接可以跨文件系统,硬链接不可以;软链接可以对一个不存在的文件名(filename)进行链接(当然此时如果你vi这个软链接文件,linux会自动新建一个文件名为filename的文件),硬链接不可以(其文件必须存在,inode必须存在);软链接可以对目录进行连接,硬链接不可以。两种链接都可以通过命令 ln 来创建。ln 默认创建的是硬链接。使用 -s 开关可以创建软链接。


现在研究一下硬链接和符号链接的创建和性质


 首先用cp和ln命令都可以创建硬链接和符号链接。


创建硬链接及其性质:


  1. [www.linuxidc.com @linuxidc ~]$ cp -l link link.back  

  2. [www.linuxidc.com @linuxidc ~]$ln link link.back1  

  3. [www.linuxidc.com @linuxidc ~]$ ls -al |grep ‘link*’  

  4. -rw-rw-r–   3 guo  guo          38  4月  8 20:24 link  

  5. -rw-rw-r–   3 guo  guo          38  4月  8 20:24 link.back  

  6. -rw-rw-r–   1 guo  guo          38  4月  8 20:26 link.back1  


创建的硬链接文件与原文件的文件大小相同,文件属性为普通文件。


当修改任意个文件内容均可是三个文件内容同时改变。


  1. [www.linuxidc.com @linuxidc ~]$ cat link  

  2. shell  

  3. [www.linuxidc.com @linuxidc ~]$ cat link.back*  

  4. shell  

  5. shell  

  6. [www.linuxidc.com @linuxidc ~]$ cat link  

  7. shell  

  8. [www.linuxidc.com @linuxidc ~]$ cat link.back  

  9. shell  

  10. [www.linuxidc.com @linuxidc ~]$ cat link.back1  

  11. shell  

  12. [www.linuxidc.com @linuxidc ~]$ echo “shell” >>link.back  

  13. [www.linuxidc.com @linuxidc ~]$ cat link.back  

  14. shell  

  15. shell  

  16. [www.linuxidc.com @linuxidc ~]$ cat link.back1  

  17. shell  

  18. shell  

  19. [www.linuxidc.com @linuxidc ~]$ cat link  

  20. shell  

  21. shell  

当删除原文件的时候硬链接文件仍然存在,且内容不变。


  1. [www.linuxidc.com @linuxidc ~]$ cat link   

  2. shell  

  3. shell  

  4. [www.linuxidc.com @linuxidc ~]$ cat link.back  

  5. shell  

  6. shell  

  7. [www.linuxidc.com @linuxidc ~]$ rm link  

  8. rm:是否删除普通文件 “link”?y  

  9. [www.linuxidc.com @linuxidc ~]$ cat link.back1  

  10. shell  

  11. shell  

  12. [www.linuxidc.com @linuxidc ~]$ cat link.back  

  13. shell  

  14. shell  


普通用户可以给超级用户的文件进行创建硬链接。


  1. [www.linuxidc.com @linuxidc ~]$ ls -al |grep ‘file2’  

  2. -rw-r–r–   2 root root         89  4月  6 21:51 file2  

  3. [www.linuxidc.com @linuxidc ~]$ cp -l file2 file2.back  

  4. [www.linuxidc.com @linuxidc ~]$ ln file2 file2.back1  

  5. [www.linuxidc.com @linuxidc ~]$ ls -al |grep ‘file2*’  

  6. -rw-r–r–   4 root root         89  4月  6 21:51 file2  

  7. -rw-r–r–   4 root root         89  4月  6 21:51 file2.back  

  8. -rw-r–r–   4 root root         89  4月  6 21:51 file2.back1  
但是由于原文件为root用户而且对其它用户无写的权限,所以其他用户不能修改原文件和硬链接文件,但可以对链接文件进行删除。


  1. [www.linuxidc.com @linuxidc ~]$ rm file2.back  

  2. rm:是否删除有写保护的普通文件 “file2.back”?y  

  3. [www.linuxidc.com @linuxidc ~]$ rm file2.back1   

  4. rm:是否删除有写保护的普通文件 “file2.back1″?y  
由上面可以看出链接的文件写有保护。


创建符号链接及其性质


创建符号链接:


  1. <span style=”font-size:10px;”>[www.linuxidc.com @linuxidc ~]$ cp -s link link.back  

  2. [www.linuxidc.com @linuxidc ~]$ ln -s link link.back1  

  3. [www.linuxidc.com @linuxidc ~]$ ls -al |grep ‘link*’  

  4. -rw-rw-r–   2 guo  guo          12  4月  8 20:37 link  

  5. lrwxrwxrwx   1 guo  guo           4  4月  8 20:51 link.back -> link  

  6. lrwxrwxrwx   1 guo  guo           4  4月  8 20:51 link.back1 -> link</span>  


注意此时链接的文件属性为l,软文件大小与原文件大小也不一样。


与硬链接一样,当修改任意个文件内容均可是三个文件内容同时改变,此处不在举例。


对于软链接当删除原文件后链接文件不能再打开。


  1. <span style=”font-size:10px;”>[www.linuxidc.com @linuxidc ~]$ cat link  

  2. shell  

  3. shell  

  4. [www.linuxidc.com @linuxidc ~]$ cat link.back  

  5. shell  

  6. shell  

  7. [www.linuxidc.com @linuxidc ~]$ rm link  

  8. rm:是否删除普通文件 “link”?y  

  9. [www.linuxidc.com @linuxidc ~]$ ls -al |grep ‘link.back*’  

  10. lrwxrwxrwx   1 guo  guo           4  4月  8 21:02 link.back -> link  

  11. lrwxrwxrwx   1 guo  guo           4  4月  8 21:02 link.back1 -> link  

  12. [www.linuxidc.com @linuxidc ~]$ cat link.back  

  13. cat: link.back: 没有那个文件或目录  

  14. [www.linuxidc.com @linuxidc ~]$ cat link.back1  

  15. cat: link.back1: 没有那个文件或目录</span>  


普通用户可以给超级用户的文件进行创建软链接,与硬链接类似,此处不再举例。


软链接可以创建目录链接,可以跨文件系统进行链接。

赞(0) 打赏
转载请注明出处:服务器评测 » Linux下的硬链接和符号链接
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏