Linux中的软硬链接
快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改)
软硬链接
硬链接
文件有一个唯一标识 ----- inode
一个inode号可以有多个对应的文件名称。 删除某个文件,对其他文件也没有影响 但是修改内容 会影响所有文件。
一般情况下,可以用不同的文件名来访问相同的内容,对文件内容进行修改,会影响所有文件 但是删除某一个文件,
不影响其他文件对于内容的访问 ------- 硬链接(hard link)
# 创建文件并追加文件内容
[root@bai peiqi]# echo 11111 >> a.txt
# 查看a.txt的详细信息
[root@bai peiqi]# ll -i a.txt
16805841 -rw-r--r--. 2 root root 18 11月 10 09:59 a.txt
# 复制一份 a.txt
[root@bai peiqi]# cp a.txt b.txt
# 查看两个文件的详细信息
[root@bai peiqi]# ll -i ./*
16805841 -rw-r--r--. 3 root root 18 11月 10 09:59 a.txt
16789436 -rw-r--r--. 1 root root 12 11月 10 09:57 b.txt # 两个文件独立(inode不同),没有关联关系
a.txt 文件的 修改 删除 对 b.txt都没有影响
# 给 a.txt 制作两个硬链接
[root@bai peiqi]# ln a.txt a-hard_link1.txt
[root@bai peiqi]# ln a.txt a-hard_link2.txt
# 查看a.txt 和两个硬链接的详细信息
[root@bai peiqi]# ll -i
16805841 -rw-r--r--. 3 root root 18 11月 10 09:59 a-hard_link1.txt
16805841 -rw-r--r--. 3 root root 18 11月 10 09:59 a-hard_link2.txt
16805841 -rw-r--r--. 3 root root 18 11月 10 09:59 a.txt
三个文件都可以获取相同的文件内容 类似于 一个房间(文件内容)有好多扇门(文件名)
# 删除 a.txt
[root@bai peiqi]# rm -f a.txt
[root@bai peiqi]# ll -i
16805841 -rw-r--r--. 3 root root 18 11月 10 09:59 a-hard_link1.txt
16805841 -rw-r--r--. 3 root root 18 11月 10 09:59 a-hard_link2.txt #删除某个文件 对其他(源文件,硬链接)没有影响
语法:
ln 源文件 硬链接文件
运行上方指令以后,源文件与硬链接文件的 inode 号码相同 。 其中在 inode 的信息中有一项叫做 "链接数"(源文件的名字也是链接之一)
链接数记录 inode 的文件名总数(有多少个链接指向这块文件内容)[刚开始只有源文件,此时总数就是 1, 构建两个硬链接 总数会增加 2]
[反过来 删除一个文件名 就会使 inode 节点中的 链接数 -1] [当这个值为0 表明没有 文件名指向这个 inode]系统就会回收这个 inode号码
同时回收文件占用的block区域。
注意:
# 可以把一些重要文件做多个链接
1. 硬链接不能跨文件系统
2. 目录不支持硬链接
软链接
软链接又叫符号链接,可以理解为是 快捷方式。
语法:
ln -s 源文件 链接文件
# 获取软链接中保存的内容
readlink 软链接的文件名
注意:
1. 软链接和源文件的inode不一样
2. 对软链接执行 查看 编辑 最终被操作的是 源文件 [软链接中真实存储是 源文件的路径]
3. 删除源文件 ll 查看详细信息 软链接 跳动[提示源文件不存在]
软硬链接的区别:
1. 软链接可以跨文件系统,硬链接不行
2. 软链接可对目录进行制作,硬链接不行
3. 删除源文件以后 软链接失效 硬链接不受影响
4. 两种文件都可通过 ln 指令创建
|- ln 源文件 硬链接文件
|- ln -s 源文件 软链接文件
5. ln 指令默认创建的是硬链接