简介
在Linux当中也有类似于Windows当中快捷方式的应用,这就是Linux当中就是链接,而链接又分为硬链接和软链接,这两个链接会有不同的特性,下面将会详细讲述硬链接与软链接的不同属性
硬链接
-
不能跨分区,数据一直保留在一个块内,而硬链接文件只是多出一个在不同目录下的关联,不会另外产生节点和数据块。简单来说就是不同分区不能建立硬链接;
-
硬链接不能使用在目录上,只能使用在文件上;
-
命令
# ln sourcefile targetfile targetfile就是要建立的链接名字
-
硬链接并没有占用inode
并且通过查看文件的inode发现,硬链接的inode与原文件的inode是相同的
-
思考
1)默认新建的文件或目录对应的连接数是多少,文件建立硬链接后,链接数的变化情况?同时链接文件的情况又是如何呢?
默认新建的文件或目录对应的链接数为1,为原文件本身(可以理解为我们看到的原文件本身就是硬链接),当创建硬链接后链接数会加1,如上图file3有file4、file7和file8三个硬链接,而硬链接的数量显示为4,是因为该数字包含了file3本身的这个硬链接。而链接文件的数据也和原文件是一样的2)删除硬链接后,原始数据是否存在
当删除了硬链接后原始数据仍然是存在的3)删除原文件后,查看硬链接,原始内容是否还在
在创建硬链接后,删除原文件,访问硬链接的文件发现内容依旧是存在的,其实这也表明了原文件的删除并不代表在硬盘当中抹去了,只是代表与该inode指向的硬盘存储区域的硬链接断开了,也解释了为什么新建立的文件或目录的硬链接数显示的是1而不是0,由于硬链接是根据分区的inode与硬盘进行链接的,所以才不能实现跨分区进行链接,因为别的分区也有相同的inode代表着该分区块当中存储的数据
软链接(快捷方式)
-
无分区限制
-
可作用文件和目录
-
会产生新节点和新块(inode),但磁盘空间消耗可以基本忽略
-
命令
# ln -s sourcefile targetfile targetfile就是要建立的链接名字
-
思考
1)当删除链接文件或目录时,原始数据是否被删?
在硬链接部分我们提到,在Linux当中其实file4所代表的原始文件其实也是一个硬链接,在这里我们简称为原链接,当中存储的数据简称为原始数据,由上图可以看出,软链接与硬链接不同的是,软链接的链接文件并没有复制一份原始数据,只是一个链接文件指向原链接,然后通过原链接再找到当中的原始数据,所以删除原链接后原始数据并没有被删除,仍然存在于硬盘或者内存当中,只不过是原链接被删除了导致软链接文件无法找到原始数据,但通过数据恢复手段仍然能通过重新创建原链接来找回原始数据,如下图所示:
注:b --> inode(b) --> b数据 --> a --> inode(a) --> a数据,在这一整个链当中缺少了其中一环都会导致软链接报错,导致软链接无法找到原始数据2)cp或mv时,是什么样的情况?
cp时并没有对软链接造成影响
mv时由于改变了file4的文件名,而file5所指向的是文件名为file4,所以当cat file5的时候才会报出无法找到文件或目录的错误
3)总的来说,软链接相比起硬链接会有空间占用少、无分区限制等优点,但是其中也有需要注意的点,例如文件拷贝或使用rsync进行同步与scp进行文件传输时应该注意文件的完整性,不要把软连接的链接文件错当作原文件进行传输。