概述
在linux系统中,硬链接(hard link)和软链接(symbolic link)是两个非常重要的概念,而很多朋友在学习的时候,通常不容易区分这两个概念,所以在这里做一些记录,大家共同进步。
在正式开始说明前,先讲一些不算是题外话的题外话。
对于linux有一定了解的朋友都知道linux里面有一个重要的概念叫做i结点,即inode。
如果有人问你,一个系统里面可以存放多少文件?你会怎么回答?
其实,在这里,我觉得用剩余i结点的个数更准确。因为我们知道,在linux系统中,任何一个独立(注意:这里强调是独立的文件)的文件,都会为其分配一个i结点,它们是对应的,然后通过i结点再找到相应的文件的实际存储内容。
接下来,我们动手实践一下,去观察观察:
首先,我们建立一个源文件block.txt,再建立两个硬链接和一个软链接文件
touch block.txt #建立一个源文件block.txt
ln block.txt block_hd #建立硬链接
ln block.txt block_hd2 #建立硬链接
ln -s block.txt block_soft #建立软链接
接下来查看一下各个文件的情况:
我们仔细观察一下发现,block_hd,block_hd2,block.txt拥有一样的i结点(显示结果的第一列,即270209),甚至于连权限属性都一模一样。而block_soft拥有另外一个独立的i结点。我们在前面曾经说过,每一个i结点对应一个实际的文件。所以,我们可以发现,建立的硬链接实际上跟我们的源文件是一样的。而软链接则是重新建立了一个独立的文件。
事实上,硬链接的本质就是一条文件名和i结点的关联记录而已。
另外,我们观察一下这几个文件的大小,由于我们的源文件是空文件,所以大小是0。那为什么两个硬链接也是0?而软链接却是9呢?
因为硬链接关联着我们的源文件,所以源文件的大小是多大,它们就是多大。至于软链接的大小为什么是9,这个就比较有趣了,大家观察一下软链接指向的源文件名(“block.txt”)的长度,是不是9?对了,我们的软链接会写上链接文件的文件名。一个字母一个字节,所以是9个字节,所以软链接的大小是9。
可能有人对于上面的说法有怀疑,别慌,我们接着测试一下。我们往空的源文件里写入一些东西。如图就是手指飞舞后的结果:
我们再看下几个链接文件的变化:
我们发现,源文件和硬链接大小都是77,而软链接依旧是9。
我们再查看下硬链接和软链接内容:
我们发现,我们的链接内容都是和源文件的内容一模一样,这也再次印证刚才的说法。
那么一定有人问了,如果删除了源文件会出现什么结果呢?
大家可以先猜一猜。
当我们删除了源文件之后,发现硬链接还能正常显示原本的内容,而软链接则提示文件不存在,这是怎么回事?
我们刚才说过,软链接是建立了另一个新的独立的文件,它指向源文件,因为源文件没了,所以它就不能正常指向了;而硬链接为什么依旧能显示原来的内容呢?回到我们一开始的解释,硬链接实际是一条文件名与i结点的记录。所以,在删除源文件的时候,系统则将链接数减1,当链接数为0的时候,inode就会被系统回收,文件的内容才会被删除。我们试一试。
上图中的红框就是链接数。
最后
以上就是迷路发带为你收集整理的Linux中的软链接和硬链接的全部内容,希望文章能够帮你解决Linux中的软链接和硬链接所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复