Linux链接概念:
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号(软)链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
硬连接:
硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放,通过给文件设置硬链接文件,来防止重要的文件被删除。文件真正删除的条件是与之相关的所有硬连接文件均被删除。目录的硬链接不能跨越文件系统。每个目录下面都有一个硬链接“.”号,和对应上级目录的链接“..”。
软连接:
另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。删除原文件,软连接文件依然存在,但是无法访问源文件了。软连接和源文件是不同类型的文件也是不同的文件。ln 命令不能对目录创建硬链接,但是可以对目录创建软连接。
测试:
[root@changhao ~]# touch a #创建一个测试文件a.
[root@changhao ~]# ln a b #创建a的一个硬链接文件b.
[root@changhao ~]# ln -s a c #创建a的一个符号链接文件c.
[root@changhao ~]# ls -li #-i参数显示文件的inode节点信息.
total 116
396414 -rw-r--r--. 2 root root 0 Mar 5 04:18 a
396414 -rw-r--r--. 2 root root 0 Mar 5 04:18 b
396417 lrwxrwxrwx. 1 root root 1 Mar 5 04:18 c -> a
上面的测试结果中可以看出,硬链接文件b与源文件的inode节点号相同,均为396414,然而软连接文件的inode节点号不同。
我们再做一个测试:
[root@changhao ~]# echo "My name is changhao" >>a #向文件a添加信息。
[root@changhao ~]# cat a #查看文件a的内容。
My name is changhao
[root@changhao ~]# cat b #查看文件b的内容。
My name is changhao
[root@changhao ~]# cat c #查看文件c的内容。
My name is changhao
[root@changhao ~]# rm -f a #删除文件a。
[root@changhao ~]# cat b #查看删除文件a后,文件b的内容。
My name is changhao
[root@changhao ~]# cat c #查看删除文件a后,文件b的内容。
cat: c: No such file or directory #提示没有这样的文件或目录。
通过上面的测试可以看出:当删除原始文a后,硬连接b不受影响,但是符号连接c文件无效。
总结:1.ln 命令不能对目录创建硬链接,但是可以对目录创建软连接。
2.对于目录的软连接是生产场景运维中常用的技巧。
3.目录的硬链接不能跨越文件系统。
4.每个目录下面都有一个硬链接“.”号,和对应上级目录的链接“..”。
5.在目录里创建一盒目录,父目录的链接数增加(子目录里的..来指向父目录)1。但是在父目录里创建文件,父目录的连接数不会增加。