Linux的软链接和硬链接
软链接
- 软链接类似于Windows中的“快捷方式”,它是一个特殊的文件,存储着目标文件或目录的路径。
- 软链接实际上是一个指向目标的“指针”。
原理与用法
Symbolic Link(符号链接),建立一个独立的文件,这个文件会让数据的读写指向它链接的文件(存它链接文件的路径)。但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。当源文件被删除后,软连接也不能打开了。
- 用法: ln -s 源文件或目录 目标文件(软链接名)
ln -s /etc/passwd passwd_link
这会在当前目录创建一个名为passwd_link的软链接,指向/etc/passwd。

源文件和软链接指向不同放入inode
软链接移动到其他目录下,是否还能找到源文件?
- 如果软链接的指向是绝对路径,移动软链接不会影响它找到源文件。
- 如果软链接的指向是相对路径,移动软链接会导致它“指向”错误(找不到源文件)。
源文件使用绝对路径,展示软连接占的不同大小

特点
- 相当于快捷方式,是指向另一个文件或目录的“指针
- 存储目标文件的路径,软连接文件很小
- 使用绝对路径
- 对软连接进行读写操作,系统会自动转换为对源文件的操作(删除链接文件时,删除的是链接文件,不是源文件)
- 软连接的权限是满的,真正的权限取决与源文件
- 源文件被删除,软连接无法访问,软链接会变成“悬挂”,即“死链接”
- 可以指向不同文件系统的文件或目录
作用
-
- 方便访问和管理
简化路径:把长路径的文件或目录通过软链接放在易于访问的位置。例如,将许多深层目录的链接放在一个方便的地方,快速访问。
统一管理:多个位置可以共享同一个文件或目录,只需要创建软链接,无需复制。
- 方便访问和管理
-
- 多位置访问同一文件或目录
允许在不同位置创建“别名”,无需复制文件内容。比如系统中某些配置文件或者库文件,可以有多个便利的访问点。
- 多位置访问同一文件或目录
-
- 版本管理与切换
在软件开发或系统配置中,可以通过软链接切换不同版本的库或应用,比如将/usr/bin/python指向不同版本的Python。
- 版本管理与切换
-
- 实现多语言环境或兼容性
在多语言环境下,可以用软链接关联不同版本的库或工具,方便切换。
- 实现多语言环境或兼容性
-
- 避免复制大文件
对于大文件,复制会耗费时间和空间,使用软链接可以省空间,只是创建了一个路径引用。
- 避免复制大文件
-
- 系统迁移与扩展
在迁移文件或数据时,只需改动软链接的指向,无需移动实际的数据。
- 系统迁移与扩展
硬链接
硬链接是对一个文件的另一个“别名”或“引用”。它们都指向相同的磁盘存储区(同一个 inode),因此本质上是同一个文件的多个目录入口。换句话说,硬链接在文件系统中提供了多个不同的名字,但指向同一块存储空间。
inode和block
文件包含两部分数据:文件属性和实际内容,这两部分数据放在不同的区块,属性放在inode中,实际内容放在data block中。还有个超级区块(superblock)记录整个文件系统的整体信息,包括inode和block的总量,使用量,剩余量等。

文件数据包括:
- 文件属性(容量,时间,权限等)
- 文件实际内容
文件系统各区块:
- inode:记录文件属性和此文件数据所在的block号码(通过inode可以找到block,索引式文件系统),一个文件占用一个inode
- block:记录实际内容,若文件太大会占用多个block
- superblock:记录文件系统整体信息,包括inode/block的总量,使用量,剩余量等(文件系统的挂载时间,最近写入数据实际等相关信息)
目录的block存什么:
- 目录下的文件名
- 文件名对应的inode(inode不记录文件名)
假设:文件夹/bin 下面有两个文件:a.c 和b.c,读取这两个文件内容的流程?

特点
- 指向相同inode:硬链接和原始文件都指向同一个inode,文件内容相同,删除一个硬链接不影响其他链接,文件数据依然存在。
- 不能跨文件系统:硬链接只能在同一个文件系统内创建,无法链接到不同的硬盘或分区上的文件。
- 不能对目录创建硬链接:为了防止文件系统出现循环结构,普通用户通常不能为目录创建硬链接(除超级用户外,系统管理员可以通过特殊权限操作)。
- 删除规则:只要还有硬链接指向文件,文件内容不会被删除。所有硬链接被删除后,文件数据才会真正从存储中消失。
- 一般不会增加inode和block,不占空间
- 对硬链接进行读写操作时,操作的是源文件
- 删除硬链接或源文件,不影响相同的inode的其他文件
原理和用法
硬链接和源文件相关信息都一样(除了文件名)
- 用法: ln 源文件 目标硬链接
例:
ln /path/to/file.txt link_to_file.txt
这会在当前目录创建一个名为link_to_file.txt的硬链接,指向/path/to/file.txt。
(先 ls -li展示源文件的inode 和硬链接计数,在源文件不同的目录下创建硬链接)

第二个字段由1变成了2,这个字段的含义:有多少文件名链接到这个inode(硬链接计数)
硬链接读取文件数据的示意图:

可以通过day3或day4目录的inode所指向的block找到两个不同的文件名,两个不同的文件名都指向同一个inode,并读取到文件的实际内容。无论通过哪一个文件名对文件进行编辑,结果都会写入到同一个inode和block中
创建硬链接会改变inode或block的数量吗?
创建硬链接并没有真正创建一个文件,只是在目录的block中加了一个关联数据,通常不会增加inode和block的数量(当目录的block被填满时,还是会新增一个block,一般硬链接用掉的关联数据很小,所以通常不会增加block)
作用
-
- 节省存储空间
多个文件名指向同一份数据:硬链接允许用不同的名字指向同一存储块,避免重复存储,节省磁盘空间。例如,多个目录下的文件可以通过硬链接共享内容。
- 节省存储空间
-
- 实现多个访问点
通过硬链接,可以在不同目录或不同路径下访问同一文件,提供多个“入口”,方便用户或程序调用。
- 实现多个访问点
-
- 文件的持久性和可靠性
删除单一链接不影响文件内容:只要还存在其他硬链接,文件内容依然存在,不会因为误删某个名字而导致数据丢失,用于关键文件的备份和恢复。
- 文件的持久性和可靠性
-
- 版本控制和切换
在软件开发或配置管理中,可以用硬链接实现不同版本的文件切换,比如切换不同库版本,只需调整硬链接指向,避免复制和移动文件。
- 版本控制和切换
-
- 系统迁移和维护
在迁移或备份数据时,可以利用硬链接保持多个路径的文件一致性,减少数据重复,便于管理。
- 系统迁移和维护
-
- 提高效率,减少复制
不需要为每个文件复制内容,只需增加硬链接,提高效率。
- 提高效率,减少复制
更多推荐


所有评论(0)