Linux系统中的软连接和硬连接
1. 前置知识
1.1 文件的存储
文件存储在磁盘上,硬盘的最小存储单位叫做”扇区”(sector),每个扇区存储512B,操作系统读取硬盘的时候,为了提高速度他不会一个扇区一个扇区这样的读取,他会一次连续读取多个扇区,也就是一次读取一个”块”(block)。这种由多个扇区组成的”块”是文件存取的最小单位,一般常见的块的大小是4k。
文件的内容存储在block上,而文件的基本信息存储在 inode 索引节点上。
1.2 inode——索引节点
inode其实就是Linux系统中一种特殊的数据结构,可以看作一个结构体,它里面定义了各种信息,用来记录关于文件的各种信息:
1、inode编号
2、用来识别文件类型,以及用于stat C函数的模式信息
3、文件的链接数
4、属主的UID
5、属主的组的ID(GID)
6、文件的大小
7、文件所使用的磁盘块的实际数目。
8、最近一次修改的时间
9、最近一次访问的时间
10、最近一次更改的时间
一般情况下,操作系统会将存储空间分为:数据存储区和 inode区。为了减少inode区的资源消耗,一个inode通常与多个文件相连接
1.3 Linux系统查找文件的过程
- 通过文件名找到对应的 inode 编号
- 通过 inode 找到文件的基本信息
- 通过文件的基本信息找到文件的具体位置
2. Linux系统中的硬连接
2.1 硬连接的实现原理
在Linux操作系统中,一个 inode编号 可以被多个文件名所链接,而这种机制采用的就是 “引用计数” 的原理,在 inode 中有一个 link变量记录inode被链接的次数。
在”引用计数”这种机制下,如果通过某一个文件名修改这个inode编号所对应的内容的话会影响到所有的文件名。同样的只有links的值为0的时候系统就回收这个inode的空间以及他所对应的数据块。
2.2 实现硬连接的指令
创建硬链接:ln src des //src为源文件,des为目标文件
创建硬链接:cp -l src des
3. Linux系统中的软连接
3.1 软连接的实现原理
- 软连接就是执行另一个文件的特殊文件。
- 软连接文件的内容就是它所连接的文件的路径软连接是为了克服硬链接的不足而提出的,它是通过文件路径名找到它所链接的文件名的。
- 软连接的文件有自己的inode,并在硬盘上有一块小空间存放路径名。
- 软连接能够跨文件系统,也能和目录进行链接,软连接也可以和一个不存在的文件名进行临接,但是必须在这个不存在的问价被创建后才能打开链接。
3.2 实现硬连接的指令
创建软链接:ln -s src des
创建软链接:cp -s src des
4. 软连接和硬连接的区别
- 删除源文件后:软连接就无法再继续访问文件,而硬连接则可以访问,因为删除源文件对于硬连接来说就是 link变量 -1 ,只有当link=0时,源文件才会被正真意义上删除。
- 跨区和针对目录使用:软连接可以跨区和针对目录使用(其实它的诞生就是为了做这两个事情,因为这两件事情硬连接做不了),硬连接不可以跨区和针对目录使用。
- 属性:软连接更像是个快捷方式,而硬连接文件的属性与源文件相同。
- 修改文件:当修改任意一个文件时,软连接文件和硬连接文件都会被修改。