设为首页 收藏本站
查看: 1230|回复: 0

[经验分享] Linux中的软硬连接

[复制链接]

尚未签到

发表于 2018-5-17 13:15:09 | 显示全部楼层 |阅读模式

Linux中的软硬连接

Linux中的连接被分为软连接和硬连接,软连接又被称为符号连接。这种连接操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称。对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题。 如果链接指向目录,用户就可以利用该链接直接进入被链接的目录而不用打一大堆的路径名。而且,即使我们删除这个链接,也不会破坏原来的目录。
Linux中的文件的文件名、文件属性和文件的数据是分开存储的。在文件系统初始化的时候,硬盘就被分成两个区域iNode区(iNode table)和数据区(block)。文件名存放在目录项(dentry)中,文件的属性存放在iNode中,而文件的内容,即文件的实际数据存放在block中。目录文件是特殊的文件,这是因为目录文件中的数据是一个关联列表,保存文件名(包括目录名)和iNode的映射。这也导致了如果一个用户对一个目录只有r权限,那么他只能读取目录下的文件名和iNodeid,而无法读取这些iNode中存放的文件的属性信息,读取这些信息需要x权限。

  一、硬连接
硬链接是使用inode号作为指针的。这种链接中,两个文件(文件链接文件A 和原文件 B)的文件名不同,但是iNode号是相同的,这种情况下,访问文件连接文件A时,系统会自动根据文件Ainode号来查找文件。此时如果文件B被删除,文件A依然能够正常访问文件。这样就相当于文件被做了备份一样。

  1、创建普通文件并查看inode号及连接数
  [root@yu63 test]# touch a.txt
  [root@yu63 test]# stat a.txt
    File: "a.txt"
    Size: 0         Blocks: 0          IO Block: 4096   普通空文件
  Device: 802h/2050dInode: 274338      Links: 1
  Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
  Access: 2017-06-14 12:35:14.963998529 +0800
  Modify: 2017-06-14 12:35:14.963998529 +0800
  Change: 2017-06-14 12:35:14.963998529 +0800
  解释:Links:1 指的是这个文件是被硬连接自己。
  
  2、创建硬链接
  [root@yu63 test]# ln -d a.txt a.txt.block #创建硬链接
  [root@yu63 test]# stat a.txt
    File: "a.txt"
    Size: 0         Blocks: 0          IO Block: 4096   普通空文件
  Device: 802h/2050dInode: 274338      Links: 2
  Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
  Access: 2017-06-14 12:35:14.963998529 +0800
  Modify: 2017-06-14 12:35:14.963998529 +0800
  Change: 2017-06-14 12:35:42.657998429 +0800
  [root@yu63 test]# stat a.txt.block
    File: "a.txt.block"
    Size: 0         Blocks: 0          IO Block: 4096   普通空文件
  Device: 802h/2050dInode: 274338      Links: 2
  Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
  Access: 2017-06-14 12:35:14.963998529 +0800
  Modify: 2017-06-14 12:35:14.963998529 +0800
  Change: 2017-06-14 12:35:42.657998429 +0800
解释:创建的硬链接,源文件与链接文件的inode号是不变的,说明硬链接是根据inode号来链接的。a.txt的链接数是2,说明存在硬链接,即还有其他的文件名链接到这个iNode。这时通过其中一个文件名修改文件中的内容会对这两个文件都有影响。但是删除一个文件名,并不会影响另一个文件名的正常访问。
  
  3、删除源文件或者链接文件
  [root@yu63 test]# echo '123456' > a.txt
  [root@yu63 test]# cat a.txt
  123456
  [root@yu63 test]# cat a.txt.block
  123456
  [root@yu63 test]# rm -rf a.txt
  [root@yu63 test]# cat a.txt.block
  123456
  解释:这里将源文件给删除了,没有影响另一个文件名的正常访问。
  
  二、软连接
软连接是使用文件路径来作为指针的。这种链接中,两个文件(文件链接文件A 和原文件 B)的文件名和iNode都不同,但是其中一个文件(假设是文件A)的block中存放的内容是另一个文件(假设是文件B)的路径(即绝对路径,包括文件名),这种情况下,访问文件A时,系统会自动根据文件Ablock中的路径内容访问文件B的block中存放的内容。此时如果文件B被删除,再访问文件A时,系统会报错,告知用户该文件不存在。这从一定程度上保证了安全性。

  1、创建源文件及查看inode号和连接数
  [root@yu63 test]# touch b.txt
  [root@yu63 test]# stat b.txt
    File: "b.txt"
    Size: 0         Blocks: 0          IO Block: 4096   普通空文件
  Device: 802h/2050dInode: 274339      Links: 1
  Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
  Access: 2017-06-14 12:36:03.563999873 +0800
  Modify: 2017-06-14 12:36:03.563999873 +0800
  Change: 2017-06-14 12:36:03.563999873 +0800
  
  2、创建软连接
  [root@yu63 test]# ln -s b.txt b.txt.block
  [root@yu63 test]# ls
  a.txt.block  b.txt  b.txt.block
  [root@yu63 test]# stat b.txt.block
    File: "b.txt.block" -> "b.txt"
    Size: 5         Blocks: 0          IO Block: 4096   符号链接
  Device: 802h/2050dInode: 274340      Links: 1
  Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
  Access: 2017-06-14 12:37:33.196997558 +0800
  Modify: 2017-06-14 12:37:32.035998060 +0800
  Change: 2017-06-14 12:37:32.035998060 +0800
  解释:inode号发生了改变,说明软连接不是根据inode号来链接的,实际上以文件的绝对路径来链接的。
  
  3、删除源文件或者链接文件
  [root@yu63 test]# echo '123456789'> b.txt
  [root@yu63 test]# cat b.txt
  123456789
  [root@yu63 test]# cat b.txt.block
  123456789
  [root@yu63 test]# rm -rf b.txt
  [root@yu63 test]# cat b.txt.block
  cat: b.txt.block: 没有那个文件或目录
  [root@yu63 test]#
  注释:这里删除了源文件,在查看链接文件之后,就会产生文件不存在的报错。
  
  三、软硬链接对目录进行连接
  [root@yu63 test]# ln -d c.txt /home
  ln: 创建硬链接"/home/c.txt": 文件已存在
  [root@yu63 test]# ln -s d.txt /home
  解释:软链接可以对目录进行链接,而硬链接不可以
  
  
  四、硬链接和软链接的主要区别在于:
1)软链接可以跨文件系统,硬链接不可以。
2)硬链接不管有多少个,都指向的是同一个iNode,会把iNode链接数增加只要iNode的链接数不是 0,文件就一直存在,不管你删除的是源文件还是链接的文件。只要有一个存在,文件就存在(其实也不分什么 源文件链接文件的,因为他们指向都是同一个 iNode)当你修改源文件或者链接文件任何一个的时候 ,其他的文件都会做同步的修改。软链接不直接使用iNode号作为文件指针,而是使用文件路径名作为指针(软链接跟源文件的iNode不一样)。所以删除链接文件对源文件无影响,但是删除源文件,链接文件就会找不到要指向的文件 。软链接有自己的iNode,并在磁盘上有一小片空间存放路径名.
3)软链接可以对一个不存在的文件名进行链接。
4)软链接可以对目录进行链接,而硬链接不可以。
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-461392-1-1.html 上篇帖子: linux 知识列表 下篇帖子: linux 修改DNS的方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表