【Linux学习】深入理解软硬链接


🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊

目录


🎈软硬链接

观察软硬链接现象以及指令
命令:ln

作用:给指定文件建立软链接

🐧软链接

指令:ln -s 指定文件 软链接名称

根据下图的例子,我们可以直观上发现:

  • 软链接本质上是一个独立的文件,有独立的inode,该文件的数据区里面存储的是指定文件所在的路径

示例:

🐬硬链接

指令:ln 指定文件 硬链接名称

根据下面示例的的现象可以发现:

  • 硬链接本质不是一个独立的文件,因为它的inode编号与目标文件一样。本质是新的文件名,和目标文件的inode编号的映射关系!将映射关系写入到指定的目录的数据块中,并将该目录的inode属性中的引用计数++

我们在删除文件时干了两件事情:

  • 在目录中将对应的记录删除。
  • 将硬链接数-1,如果为0,则将对应的磁盘释放。

示例:

删除软硬链接文件,可以使用rm指令删除,也可以使用指令:unlink 软硬链接文件名。其中unlink也可删除普通文件。二者整体区别不大。

`🐸总结软硬链接的原理

硬链接本质:是新的文件名,和目标文件的inode编号的映射关系!将映射关系写入到指定的目录的数据块中,并将该目录的inode属性中的引用计数++。

软链接本质:上是一个独立的文件,有独立的inode,该文件的数据区里面存储的是指定文件所在的路径。 类似windows下的快捷方式。

当我们右键点击软件图标,查看属性,我们可以发现其中的目标就是软链接文件的内容(目标文件的所在路径):

🐍软硬链接的应用场景

🐉软链接应用场景

软链接的应用场景:快捷方式

  • 当我们的可执行程序的位置距离当前位置较深的时候,每次执行的时候都需要 ./路径 都需要加很长的路径,较麻烦,可以直接在当前位置给可执文件建立软链接,就可以直接在当前位置使用 ./软链接名 即可。
    示例:

🦎硬链接应用场景

当我们新建立一个文件,文件的硬链接数为1,因为当前目录的数据块中,对应文件和文件inode的映射关系只有一个,这个很好理解,但是当我们新建立一个目录时,硬链接数却为2,为什么呢?

  • 因为新建立的目录中,有两个隐藏的目录,分为别为... 如图:其中的 .目录的inode与empty目录的inode编号一样,对于一个inode编号,有两个文件名与之对应,所以硬链接数为2。
    这里就很好解释..文件的硬链接数为什么为3了,这里不赘诉。

所以这里可以得出结论一个目录下有多少个子目录,等于该目录的 硬链接数-2 得到

  • 解释:一个空目录,默认硬链接数为2,上面已经解释了,当我们在这个目录里面每新建立一个目录,新建的目录里面都会有一个隐藏的...文件,该...文件是上级目录的一个链接硬,所以硬链接数会+1,每新建立一个都会+1,所以可以得出结论。

注意:用户对一个文件可以建立软硬连接,但是目录只能建立软链接不能建立硬链接(系统可以建立,其中.与...就是例子)。

  • 解释:因为如果用户可以建立硬链接的话,当我们如果给/目录建立硬链接的话,当我们在查找文件的时候,会根据文件路径
    前缀进行路径解析,当从/目录开始向下进行查找的时候,会发生环路问题。如果是系统建立的硬链接,系统会避免环路问题。

相关推荐
Michaelwubo1 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
远游客07131 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<1 小时前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟1 小时前
centos-stream9系统安装docker
linux·docker·centos
好像是个likun2 小时前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器
超爱吃士力架2 小时前
邀请逻辑
java·linux·后端
南宫生2 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__2 小时前
Web APIs学习 (操作DOM BOM)
学习
数据的世界014 小时前
.NET开发人员学习书籍推荐
学习·.net
cominglately4 小时前
centos单机部署seata
linux·运维·centos