0X00 什么是链接文件
Linux 中的链接文件就相当于是 Windows 中的快捷方式,通过链接文件可以访问到链接指向的源文件。但是 Linux 下的链接文件和 Windows 中的快捷方式还是有一定的区别。Linux 中有两种链接文件硬链接和软连接也称为符号链接
在介绍链接文件之前先要介绍一下 Linux 文件系统中的 inode
inode 是 Linux 文件系统中文件的唯一定位器,每一个文件都有一个 inode,也是唯一的,每一个 inode 唯一对应一个文件。
还要熟悉一下指针的问题,如果学习过 C/C++ 的话理解起来会很轻松
计算机中所有的数据都是保存在磁盘里的,使用的时候会读取到内存中,而磁盘和内存都是一块一块的地方,我们用地址来找到数据的具体存放位置。保存了文件或者数据存放地址的物体(通常是变量)就称为指针。
我们在 Linux 的操作界面看到的文件,都是一个指针,他们指向磁盘的某个具体位置。这样我们每次点开文件的时候,系统就可以在磁盘对应的位置打开我们需要的文件。
0X01 硬链接
硬链接就是指向磁盘中具体位置的指针。如果我们创建一个文件,那么就会在磁盘中分配一块位置用来存储这个文件,并且创建一个指针方便我们找到这个文件。然后我们创建一个这个文件的硬链接,就相当于又创建了一个指向磁盘中存放文件的位置的指针,所以就算我们删除了之前创建的文件(其实就是一个指针),文件本身也不会被删除,因为还是有一个指针是指向文件存储位置的,所以我们还是可以通过后来创建的硬链接来访问到原来的文件。
0X02 软链接——符号链接
软连接可以大致理解成指向指针的指针。如果我们创建一个文件,并且创建了这个文件的一个软连接,那么如果删除了原来的文件,那这个文件就真的找不到了。因为软连接只是指向之前(指向具体文件位置)的指针,所以那个软连接就指向一片空白区域了,以前存在的文件也找不到了。就好像我们在 Windows 中卸载了一个软件,但是桌面上的快捷方式还可能存在,现在我们打开那个快捷方式是不能访问到软件的,因为已经被我们删除了。
0X03 操作演示
首先我这里有一个hehe.tar.gz的文件,我们查看一下它的 inode 是 33515290。然后创建一个硬链接名为heihei.tar.gz,再查看这两个文件的 inode,发现两个文件的 inode 是一样的。再创建一个软连接名为haha.tar.gz,继续查看文件 inode。可以看到系统给haha.tar.gz分配了一个新的 inode,并且 ls 的时候有个箭头显示了指向什么文件。
ls -i 可以显示文件的 inode
0X04 软硬链接对比
硬链接:
不分配新的 inode
不可以在不同的文件系统之间链接
只有 root 才能创建目录的硬链接
只能源于存在的文件
软链接:
分配新的 inode
不受文件系统的限制
指向源文件位置的标识
可以链向不存在的文件