[Linux] 链接详解-硬链接与软连接的区别 - 刘傲天

in 默认分类Ubuntu with 0 comment

详解链接

在Linux系统当中,一个文件的内容通常会被分开,比如说分为两个部分,文件内容是一部分,文件信息是一部分。那么什么是文件内容的,也就是你文件当中存储的内容,什么是文件信息呢,就是你这个文件的大小,类型,创建时间,修改时间,属性所有者等等的这些信息都归属于文件信息,文件信息和文件内容并不是存放在一起的,不同的Linux叫法不一样,但是可以通俗的分为用户数据元数据,用户数据顾名思义就是存放文件数据块内容的,元数据则是存放文件信息一类的东西。

相关命令

inode号

在Linux当中每个元数据都有一个inode号,inode号则是这个文件的元数据的索引值,也可以理解为是地址吧,它才是文件的唯一标识而不是文件名(显然文件名也不可能作为唯一标识)文件名只是方便我们人去记忆一些内容,更为形象的代表一些内容,比如name.txt显然存放的就是名称,但是告诉你4718765你就很难一目了然的知道这里边的内容是什么了。

链接

Linux当中链接概念类似于Windows当中的快捷方式,链接就是为了更大的利用共享空间,一个空间可以被多个文件利用,举一个例子,其他用户有一个配置文件,你想和他的配置文件同步,那么怎么做呢,复制吗?当然是可以的,但是如果人家更新了怎么办呢,显然这并不是一个非常好的方案,最好的方案就是链接。当然不会是设置为全局的啊,那样会出现其他的问题。链接是指一个文件可以在多个地方被使用,但是只占用了一份的空间,而复制的话,也可以在多个地方被使用,但是占用的空间就越来越多了。

软连接

测试

$:touch 1
$:ln -s 1 2

建立2->1的软连接
此时2和1共享一个内容,你修改1也可以在2看到,修改2也可以在1看到,因为他们指向一块数据块。如果你学习过C语言你会发现这和指针的概念差不多。

$:rm 1

此时,将文件1删除,你在查看文件2的时候可以看到提示没有这个文件或目录,因为1的元数据已经被释放了,所以查看不到数据了,这就是软连接。

硬链接

测试

先把刚才的文件都删掉

$:rm 1 2
$:touch 1
$:ln 1 2

ln默认是硬链接,现在你再次修改1的内容或2的内容,两者还是一样的,此时你把1删除掉看一下。

$:rm 1

2是不受任何影响的。这是为什么呢,来再做一个测试

$:rm 2
$:touch 1
$:ln 1 2
$:ls -i1 1 2

通过ls查看他们的inode号,他们两个的元数据是相同滴,这就是原因所在啦。

Responses