Linux 软链接(符号链接)/硬链接 理解Linux链接

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

alt text

0X04 软硬链接对比

硬链接:

不分配新的inode
不可以在不同的文件系统之间链接
只有root才能创建目录的硬链接
只能源于存在的文件

软链接:

分配新的inode
不受文件系统的限制
指向源文件位置的标识
可以链向不存在的文件