Linux系统学习:硬链接与软链接

参考:https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html

参考:http://www.cnblogs.com/itech/archive/2009/04/10/1433052.html

1.Linux链接概念


Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为软链接(Soft Link)或符号链接(Symbolic Link)。

【硬链接】硬链接可由命令 link 或 ln 创建。

       我们都知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。图1展示了程序通过文件名获取文件内容的过程。


       硬链接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。换言之,硬链接就是同一个文件使用了多个别名,但他们有共同的inode。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。文件拥有的硬链接数目,称为文件在整个系统的链接数,当文件的链接数降为0时,说明文件已经孤立于文件系统之外,这样的文件会被linux删除。

【软链接】ln命令中加上-s选项,来创建软链接
另外一种连接称之为符号链接(Symbolic Link),也叫软连接。若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块。软链接不影响文件的链接数。软链接本质上是一个文件,它的文件类型是symbolic link。在这个文件中,包含有链接指向的文件的绝对路径。当读写该文件时,linux会根据软链接中的绝对路径把读写操作导向软链接所指向的文件。软链接文件类似于Windows的快捷方式。

软链接本身是一个文件,但很多时候它又会指代一个原始文件。这种双重身份有时会造成困惑。我们用nano来编辑软链接,那么该操作会跟随链接指引,作用于原文件。如果用rm来删除软链接,那么删除操作不会跟随软链接。所以,删除软链接后,原文件依然存在。一个命令是否跟随链接指引,是由该命令的程序决定的。不过在大多数情况下,对文件本身的操作,如读写数据和复制文件等,会跟随指引;而对涉及文件所属目录的操作,如删除、移动等,则不会跟随指引。

2.通过实验加深理解


[oracle@Linux]$ touch f1          #创建一个测试文件f1
[oracle@Linux]$ ln f1 f2          #创建f1的一个硬连接文件f2
[oracle@Linux]$ ln -s f1 f3       #创建f1的一个符号连接文件f3
[oracle@Linux]$ ls -li            # -i参数显示文件的inode节点信息
total 0
9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f1
9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f2
9797649 lrwxrwxrwx  1 oracle oinstall 2 Apr 21 08:11 f3 -> f1

从上面的结果中可以看出,硬连接文件f2与原文件f1的inode节点相同,均为9797648,然而符号连接文件的inode节点不同。

[oracle@Linux]$ echo "I am f1 file" >>f1
[oracle@Linux]$ cat f1
I am f1 file
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
I am f1 file


[oracle@Linux]$ rm -f f1
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
cat: f3: No such file or directory

通过上面的测试可以看出:当删除原始文件f1后,硬连接f2不受影响,但是符号连接f3文件无效

3.总结


依此您可以做一些相关的测试,可以得到以下全部结论:
1).删除符号连接f3,对f1,f2无影响;
2).删除硬连接f2,对f1,f3也无影响;
3).删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;
4).同时删除原文件f1,硬连接f2,整个文件会真正的被删除。

完!

猜你喜欢

转载自blog.csdn.net/weixin_42072280/article/details/89742871