在 Linux 系统中, 核心为每一个新建立的档案分配一个 Inode(索引结点), 每个档案都有一个惟一的 inode 号。档案属性储存在索引结点里,在访问档案时,索引结点被复制到内存在,从而实现档案的快速访问。

  连结是一种在共享档案和访问它的使用者的若干目录项之间建立联络的一种方法。 Linux 中包括两种连结:硬连结 (Hard Link) 和软连结 (Soft Link), 软连结又称为符号连结(Symbolic link)。符号连线相当于 Windows 下的快捷方式。

一、硬连结

硬连结说白了是一个指标,指向档案索引节点,系统并不为它重新分配 inode 。可以用:ln 命令来建立硬连结。
语法:
ln [options] existingfile newfile(sexistingfile 待建立连结档案的档案,newfile 是新建立的连结档案)
ln [options] existingfile-list directory

-f 建立时,将同档案名删除.
-i 删除前进行询问.

ln -s abc cde 建立 abc 的软连线
ln abc cde 建立 abc 的硬连线,

用法:
第一种: 为”existingfile” 建立硬连结, 档名为”newfile” 。
第二种: 在”directory” 目录中, 为”existingfile-list” 中包含的所有档案建立一个同名的硬连结。
常用可选 [options] –f 无论”newfile” 存在与否, 都建立连结。-n 如果”newfile” 已存在, 就不建立连结。

下面举一些例子:

[root@rekfan.com test]# ls -il
总计 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
[root@rekfan.com test]# ln file2 file2hand
[root@rekfan.com test]# ls -il
总计 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
[root@rekfan.com test]#

注意在建立连结前,file1 显示的连结数目为 1, 建立连结后 file1 和 file1hard 的连结数目都变为 2;file1 和 file1hard 在 inode 号是一样的 file1 和 file1hard 显示的档案大小也是一样。可见进行了 ln 命令的操作结果:file1 和 file1hard 是同一个档案的两个名字,它们具有同样的索引节点号和档案属性,建立档案 file1 的硬连结,就是为 file1 的档案索引节点在当前目录上建立一个新指标。你可以删除其中任何一个, 如 rm file2 , 每次只会删除一个指标, 连结数同时减一, 当连结数减为 0 时,核心才会把档案内容从磁碟上删除。

还可以在不同目录,但同一档案系统中建立档案的硬连结。设 file1 、 file2 在目录/home/root/dir1 中,下面的命令,在/home/root 中建立 file2 的硬连结。

ln file2 /home/root/file2hard
下面的程式,是将 dir1 目录中所有档案,在目录 dir2 中建立硬连结
#mkdir dir2
#ln /home/root/dir1/* /home/root/dir2

如果使用了 ln –f existingfile newfile, 如果 newfile 已经存在,则无论原来 newfile 是什么档案,只用当前使用者对它有写许可权,newfile 就成为 exisitngfile 的硬连结档案。

尽管硬连结节省空间,也是 Linux 系统整合档案系统的传统方式,但是存在一下不足之处:
(1)不可以在不同档案系统的档案间建立连结
(2)只有超级使用者才可以为目录建立硬连结。

二、软连结(符号连结)

软连结克服了硬连结的不足,没有任何档案系统的限制,任何使用者可以建立指向目录的符号连结。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同互联网对档案进行连结。
建立软连结,只要在 ln 后面加上选项 –s,下面举个例子

[root@rekfan.com test]# ls -il
总计 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand

[root@rekfan.com test]# ln -s file1 file1soft
[root@rekfan.com test]# ls -il
总计 0
1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1
1491140 lrwxrwxrwx 1 root root 5 07-14 14:24 file1soft -> file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand

从上面连结后的结果可以看出来软连结与硬连结,区别不仅仅是在概念上,在实现上也是不同的。区别:硬连结原档案&连结档案公用一个 inode 号,说明他们是同一个档案,而软连结原档案&连结档案拥有不同的 inode 号,表明他们是两个不同的档案;在档案属性上软连结明确写出了是连结档案,而硬连结没有写出来,因为在本质上硬连结档案和原档案是完全平等关系;连结数目是不一样的,软连结的连结数目不会增加;档案大小是不一样的,硬连结档案显示的大小是跟原档案是一样的,这用强调,因为是等同的嘛,而这里软连结显示的大小与原档案就不同了,file1 大小是 48B,而 file1soft 是 5B,这里面的 5 实际上就是 “file1” 的大小。

总之,建立软连结就是建立了一个新档案。当访问连结档案时,系统就会发现他是个连结档案,它读取连结档案找到真正要访问的档案。
在不同系统之间建立软连结、对目录建立连结,这里就不举例了,读者可以自己去尝试,我也是在不断实践中学习的。
当然软连结也有硬连结没有的缺点,因为连结档案包含有原档案的路径资讯,所以当原档案从一个目录下移到其他目录中,再访问连结档案,系统就找不到了~~,而硬连结就没有这个缺陷,你想怎么移就怎么移(呵呵);还有它要系统分配额外的空间用于建立新的索引节点和储存原档案的路径。

补充一下:可以通过 symlink 来检视连结档案,可以用 man symlink 来学习。

三、删除连结

有建立就有删除

rm -rf symbolic_name 注意不是 rm -rf symbolic_name/

[root@rekfan.com test]# ls -il
总计 0
1491138 -rw-r–r– 1 root root 0 07-14 14:17 file1
1491140 lrwxrwxrwx 1 root root 5 07-14 14:24 file1soft -> file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
[root@rekfan.com test]# rm -rf file1soft
[root@rekfan.com test]# ls -il
总计 0
1491138 -rw-r–r– 1 root root 0 07-14 14:17 file1
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2
1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
[root@rekfan.com test]#

————————————
linux 软连线和硬连结的区别:
————————————

4 点不同 :
(1)软连线可以 跨档案系统 ,硬连线不可以 。
实践的方法就是用共享档案把 Windows 下的 aa.txt 文字文件连线到 linux 下/root 目录 下 bb,cc . ln -s aa.txt
/root/bb 连线成功 。 ln aa.txt /root/bb 失败 。

(2)关于 I 节点的问题 。硬连线不管有多少个,都指向的是同一个 I 节点,会把 结点连线数增加 ,只要结点的连线数不是 0,档案就一直存在 ,不管你删除的是

原始档还是 连线的档案 。只要有一个存在 ,档案就 存在(其实也不分什么 原始档连线档案的 ,因为他们指向都是同一个 I 节点)。 当你修改原始档或者连线档案

任何一个的时候 ,其他的 档案都会做同步的修改 。软连结不直接使用 i 节点号作为档案指标, 而是使用档案路径名作为指标。所以 删除连线档案 对原始档无影响,但

是 删除 原始档,连线档案就会找不到要指向的档案 。软连结有自己的 inode, 并在磁碟上有一小片空间存放路径名.

(3)软连线可以对一个不存在的档名进行连线 。

(4)软连线可以对目录进行连线。

备注:I 节点 : 它是 UNIX 内部用于描述档案特性的资料结构. 我们通常称 I 节点为档案索引结点 (资讯结点).i 节点 含有关于档案的大部分的重要信 息, 包括档案资料块在

磁碟上的地址. 每一个 I 节点有它自己的标志号, 我们称为档案顺序号.I 节点包含的资讯 1. 档案型别 2. 档案属主关系 3. 档案的访问许可权 4. 档案的时间截.