码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-08-01 23:07:08      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:ln   硬链接   软链接   链接失效   跨分区   

链接的命令:ln - make links between files  #在文件之间创建一个链接

创建硬链接会增加额外的记录项以引用文件

技术分享

图中的1为链接数=文件的名字数量


将/mnt/f1做一个硬链接到/opt/f1 取名还叫f1

技术分享

图中,俩个文件的元数据一样说明是同一个文件


技术分享

链接次数都是2



然后把源文件改名并添加内容

技术分享

这里可以看到,它们的元数据还是一样的,说明还是同一个文件,然后我们

查看它们的内容是不是一样技术分享

结果显而易见



那么,当我们删除源文件时,链接文件会不会也无效或被删呢?技术分享


链接文件还在,内容也没有丢失。但链接数量减1

当链接数量为0时。文件被删除

对应于同一文件系统上一个物理文件

每个目录引用相同的inode号

创建时链接数递增


硬链接不能跨驱动器或分区

演示

下图,/testdir目录是sda5分区与/opt不是同一个分区技术分享


然后我们将f1链接到/testdir目录下技术分享

提示不能跨分区链接。为什么?

硬链接的本质是同一个文件,给它增加一个新的名字,若不在一个分区里,即使元数据一样也不是同一个文件,所以这个违反了硬链接的定义,所以系统不会让你创建


硬链接不能给目录创建链接技术分享



符号(或软)链接

一个符号链接指向另一个文件

ls- l的 显示链接的名称和引用的文件

一个符号链接的内容是它引用文件的名

可以对目录进行

可以跨分区

不增加或减少目标文件inode的引用计数;

语法: ln   -s  filename [linkname]


技术分享

软连接f1起名f11查看属性。元数据不一样;读写权限不一样;链接数也没有增加;数据大小也不一样。2这个数据是怎么来的呢?是从路径,路径有几个字符就是几

所以软连接与原始文件不是同一个文件。



当我们把原始文件删除以后,链接文件就会报错

技术分享



技术分享

链接文件里存放的是路径数据,当我们访问链接文件时,它会自动的转到原始文件那里,所以当我们把原始文件删除以后,它过去一找,哎!没有了?所以它就会告诉我们:我找不到!


这里有个很有意思的事:我们在原目录下用vi编辑器创建一个全新的f1,看看它能不能区别出来。

技术分享

OK,这个f1是以前f1的弟弟!



技术分享 

系统果然没有认出来,它只是机械式的给我们一个链接,才不会care到底以前的f1还是不是f1。只要名字一样,是它知道的那个地方就行。


接下来就是验证跨分区、跨设备操作

技术分享

报错了。为什么呢?

因为它找不到。路径不对,

命令:ln –s f1 /testdir/f2

f1的路径应该是相对于/testdir/f2

所以路径应该写:/opt/f1



这里的f22就对了。没有报错技术分享



还有一种情况当软连接在它的子目录下时可以用另一种方式写

技术分享

上图:pig1和dog1都在testdir目录下


我们将/testdir/dog/dog1/a文件软连接到/testdir/pig/pig1/a1起名叫a1(实在不知道起什么文件名好,大家别贱笑)

技术分享

这里,软连接a1必须写绝对路径,而源文件可以写相对路径,这里的相对路径是相对软连接a1来说的







本文出自 “11893416” 博客,请务必保留此出处http://11903416.blog.51cto.com/11893416/1833176

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

标签:ln   硬链接   软链接   链接失效   跨分区   

原文地址:http://11903416.blog.51cto.com/11893416/1833176

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!