硬链接与软链接的联系与区别

来源:互联网 发布:安徽省癌症数据 编辑:程序博客网 时间:2024/06/07 15:25

Linux软连接和硬链接

 

1.Linux链接概念
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。

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

【软连接】
另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

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不受影响,但是符号连接f1文件无效

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

 

完!

************************我是分割线*************************************************第二篇




硬链接与软链接的联系与区别

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

图 1.  通过文件名打开文件

硬链接

为解决文件的共享使用, Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link )。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名(见 图 2.hard link 就是 file 的一个别名,他们有共同的 inode )。硬链接可由命令 link 或 ln 创建。如下是对文件 oldfile 创建硬链接。

[root@mutu #2 ~]# ln oldfile newfile

多个档名对应同一个 inode ,硬链接只是在某个目录下新增一笔档名链接到某个 inode 号码的关联记录而已。如果将上图中任何一个档名删除,档案的 inode 与 block 都还存在,依然还可以通过另一个档名来读取正确的档案数据。此外,不论用哪一个档名来编辑,最终的结果都会写入相同的 inode 和 block 中,因此均能进行数据的修改

建立硬链接

[root@mutu #17 ~]# ln oldfile newfile

[root@mutu #18 ~]# ll oldfile newfile

-rw-r–r–. 2 root root 0 Oct 20 21:19 newfile

-rw-r–r–. 2 root root 0 Oct 20 21:19 oldfile

[root@mutu #21 ~]# ls -li oldfile newfile

68547 -rw-r–r–. 2 root root 0 Oct 20 21:19 newfile

68547 -rw-r–r–. 2 root root 0 Oct 20 21:19 oldfile

软链接

多个档名对应同一个 inode ,硬链接只是在某个目录下新增一笔档名链接到某个 inode 号码的关联记录而已。如果将上图中任何一个档名删除,档案的 inode 与 block 都还存在,依然还可以通过另一个档名来读取正确的档案数据。此外,不论用哪一个档名来编辑,最终的结果都会写入相同的 inode 和 block 中,因此均能进行数据的修改尽管硬链接节省空间, 也是 Linux 系统整合文件系统的传统方式,但是存在一些不足之处: 1. 不允许给目录创建硬链接。 2. 不可以在不同文件系统的文件间建立链接。 因为 inode 是这个文件在当前分区中的索引值,是相对于这个分区的,当然不能跨越文件系统了。

图 2. 软链接的访问

软连接就是建立一个独立的文件,而这个文件会让数据的读取指向它 link 的那个档案的档名,由于只是作为 指向的动作 ,所以当来源档案被删除之后,软连接的档案无法开启,因为找不到原始档名。连结档的内容只有档名,根据档名链接到正确的目录进一步取得目标档案的 inode ,最终就能够读取到正确的数据。如果目标档案的原始档名被删除了那么整个环节就进行不下去了。

[root@mutu #30 etc]# ls -li system-release  centos-release

389400 -rw-r–r–. 1 root root 38 Dec  9  2015 centos-release

389411 lrwxrwxrwx. 1 root root 14 Oct 12 01:58 system-release -> centos-release

从上面链接后的结果可以看出来 软链接与硬链接 ,区别不仅仅是在概念上,在实现上也是完全不同的。

区别:

硬链接原文件 / 链接文件公用一个 inode 号,说明他们是同一个文件,而软链接原文件 / 链接文件拥有不同的 inode 号,表明他们是两个不同的文件;

2. 在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;

3. 链接数目是不一样的,软链接的链接数目不会增加;

4. 文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而这里软链接显示的大小与原文件就不同了, centos-release 大小是 38B ,而 system-release是 14B 。因为 centos-release 共有 3 个字符

5. 软链接没有任何文件系统的限制,任何用户可以创建指向目录的符号链接

总之, 建立软链接就是建立了一个 新文件 。当访问链接文件时,系统就会发现他是个链接文

之, 建立软链接就是建立了一个 新文件 。当访问链接文件时,系统就会发现他是个链接文

当然软链接也有硬链接没有的缺点: 因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

0 0
原创粉丝点击