实体连接与符号连接ln
来源:互联网 发布:如何寻找淘宝客 编辑:程序博客网 时间:2024/06/07 20:14
在linux下的链接档有两种,一种是类似于windows的快捷方式功能的档案,可以让你快速的连接到目标档案(或者目录);另一种则是透过文件系统的indoe连结来产生新的档名,而不是产生新档案。这种称为实体链接(hard link)。
Hard Link(实体链接,硬链接或者实链接)
在前民的内容中我们知道几个重要的信息,包括:
- 每个档案都有一个inode,档案内容有inode的记录来指向;
- 要读取该档案,必须要经过目录记录的文件名来指向到正确的inode号码才能够读取;
也就是说文件名只与目录有关,但是档案内容则与inode有关。那么想一想,有没有可能有多个档案名对饮到同一个inode号码呢?有的,那就是hard link的由来。所以简单的说:hard link只是某个目录下新增一笔档名链接到某个inode号码的关联记录而已。
举个例子来说,假设我系统有个/root/crontab他是/etc/crontab的实体链接,也就是说这两个档名链接到同一个inode,自然这两个文件名的所有信息都会一模一样(除了文件名之外)。实际情况如下所示:
你可以发现两个档名都连接到1912701这个inode号码,所以你瞧瞧,是否档案的权限/属性完全一样呢?因为这两个档名其实是一模一样的,而且你也会发现第二个字段由原本的1变成了2,这个字段称为连接,这个字段的意义为:有多少个档名链接到这个inode号码的意思。如果将读取到正确数据的方式画成示意图,就类似如下画面:
上图的意思是,你可以透过1或者2的目录之inode指定的block找到两个不同的档名,而不管使用哪个档名均可以指到real哪个inode去读取最终的数据。那这样有什么好处呢?最大的好处就是安全。如上图中,如果你将任何一个档名删除,其实inode与block都还是存在的。此时你可以透过另一个档名来读取到正确的档案数据。此外,无论已使用哪一个档名来编辑,最终的结果都会写入到相同的inode与block当中,因此均能够进行数据的修改。
一般来说,使用hard link设定链接文件时,磁盘的空间与inode的数目都不会改变。我们还是由上图来看你,hard link只是在某一个目录下的block多写入一个关连数据而已,既不会增加inode也不会耗着block数量。
tips
hard link的制作中,其实还是会可能改变系统的block的,那就是当你新增这笔数据却刚好将目录的block填满时,就可能会增加一个block来记录文件名的关联性,而导致磁盘的空间发生变化。不过一般的hard link所用掉的关联数据量小,所以通常不会改变inode与磁盘空间的大小奥。
由上图我们也能够知道,事实上hard link应该仅能在单一文件系统中进行的,应该不能够跨文件系统才对,因为在同一个filesytem中嘛。所以hard link是有限制的:
不能跨filesysytem
不能link目录
不能跨filesystem海还好理解,那不能hard link到目录有事怎么一回事呢?这是因为如果使用hard link链接到目录时候,链接的数据需要连同链接目录底下所有数据都建立链接,距离来说,如果你见/etc使用实体链接建立一个/etc_hd目录时,那么在/etc_hd底下的所有档名同时都与/etc底下的档名要建立hard link的,而不是仅链接/etc_hd与/etc而已。并且,未来如果需要在/etc_hd底下建立档案时,连带的,/etc底下的数据有的数据又要建立一次hard link,因此造成环境相当大的复杂度。所以啰,目前对于目录还是不支持的啊。
Symbolic Link(符号链接,亦即是快捷方式)
相对于hard link,Symbolic link可就好理解多了,基本上,symbolic link就是建立一个独立的档案,而这个档案会让数据的读取指向他link的那个档案的档名,由于只是利用档案来作为指向的动作,所以,当来源档被删除后,symbolic link的档案会开不了。
举例来说,我们先建立一个符号链接文件链接到/etc/crontab去看看:
由上表的结果我们可以知道两个档案指向不同的inode号码,当然就是两个独立的档案存在!而且链接档的重要内容就是他会写上目标的档案的文件名,你可以发现箭头右边的档名/etc/crontab总共有12个英文字母,每个英文字母占用1bytes,所以档案的大小就是12bytes了。
关于上述额说明,我们以如下图来解释:
由1号inode读取到链接档的内容仅有档名,根据档名链接到正确额目录取得目标档案的inode号码,最终就能够读取的到正确的档案数据了。你可以发现的是,如果目标档案(/etc/crontab)被删除了,那么整个环节就无法继续下去了,所以就会发生无法透过链接档读取的问题了。
这里还得要特别留意,这个symbolic Link与windows的快捷方式可以画上等号,由sysbolic link所建立的档案为一个独立的新档案,所以会占用inode与block。
由上面的说明来看,似乎hard link比较安全,即使某一个目录下的关联数据被删掉了,也没有关系,只要在任何一个目录下存在着关联的数据,那档案就不会不见。
关于目录的link数量
或许你已经发现了,那就是,当我们以hard link进行档案链接时,可以发现,在ls -l所显示的第二个字段会增加1才对,那么请教,如果建立目录时,他默认的link数量是多少。让我们来想一想,一个空目录里面至少有什么,呵呵,就是.与..这两个目录。那么,当我们建立一个新目录名称为/tmp/testing时,基本上会有三个东西,那就是:
/tmp/testing;
/tmp/testing/.
/tmp/testing/..
而其中/tmp/testing与/tmp/testing/.其实是一样的。都代表该目录~而/tmp/testing/..则代表/tmp这个目录。所以当我们 建立一个新目录时,新目录的link数为2,而上一层目录的link数目会增加1.
- 实体连接与符号连接ln
- ln 符号连接的层数过多
- linux命令之创建符号连接-ln
- [Linux]ln -s对目录建立符号连接后报错“符号连接层数过多”的解决办法
- Linux的软连接与硬连接 ln -s
- Linux的软连接与硬连接 ln -s
- linux学习篇5--- 文件系统 实体连接与符号链接 磁盘 分割挂载 格式化 swap
- 创建连接命令ln
- ln 建立软连接
- ln 软连接目录
- 连接文件ln
- ln 软连接目录
- linux ln软连接
- Linux连接文件ln
- 第八章 符号连接与硬连接
- linux硬连接与符号连接
- 连接符号:#、##
- linux 链接ln的使用 创建和删除符号连接(软、硬链接)
- Qt4过渡至Qt5
- Mysql
- Category VS Extension 原理详解
- 一些c中常用的功能函数
- PAT 乙级 1039. 到底买不买(20)
- 实体连接与符号连接ln
- Pod install 之后 no such module
- UESTC-250-数位dp
- 深入理解 Android 卷I
- LeetCode 450.Delete Node in a BST
- Success Rate CodeForces
- INI文件操作
- apue第八章 进程控制 (1)
- Ubuntu16.04下面安装ExtCalc计算器