Linux软硬链接

Posted 好想有猫猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux软硬链接相关的知识,希望对你有一定的参考价值。

前言

上篇Linux的文章,我们学习到了文件系统中,对磁盘文件的管理。
而本篇文章,我们要以文件系统的基础知识,了解软硬链接
话不多说,马上开始今天的学习。

文章目录

一. 软链接

1. 软链接的语法

我们先创建一个myfile.txt的文件,并写入一些内容

软链接
ln -s 文件名 软链接名

2. 软链接的本质

我们通过cat软链接,也可以查看my_file.txt的内容
同时我们发现可以通过ll -i指令查看文件的inode编号


蓝色部分都是文件的inode编号

我们发现软链接my_soft的inode和myfile.txt不一样

my_soft软链接是一个独立的新的链接文件,有自己的inode编号,也一定有自己的属性和内容
软链接内部放的是自己所指向的文件的路径

3. 软链接的应用

有了对软链接的认识,我们接下来接触软链接的应用

比如我们创建一个路径

然后写一个打印hello world的小程序,放到这个深路径中

然后我们可以通过软链接链接这个小程序


然后我们可以通过这个软链接使用程序

这样看下来,我们可以通过软链接,将一个不存在本目录之下的程序,不用指明路径就可以直接使用

软链接其实就相当于Window下的快捷方式

二. 硬链接

1. 硬链接的语法

硬链接
ln 文件名 硬链接名

2. 硬链接的本质


我们通过cat指令,同样可以查看到myfile.txt的内容
那硬链接和软链接有什么不同呢?
我们再用ll -i指令查看一下文件的inode

我们发现硬链接和软链接形成的文件的inode编号不同,我们上面说了,软链接是新的独立的文件,会有自己的inode,但我们这里发现硬链接的文件的inode和链接文件的inode一样,所以可以肯定的是硬链接并没有产生新文件。

my_hard硬链接和目标文件共用一个inode编号,这代表硬链接和目标文件共用一个inode
硬链接本质其实是在目录里新建一个文件名和该文件inode的映射关系
硬链接个数是inode属性之一,记录该文件同时被几个文件名/硬链接指向。

当一个文件有多个硬链接时,rm删除并不会达成效果,因为硬链接个数属于属性之一,当文件的硬链接个数大于1时,rm指令本质只会将硬链接个数-1,并不会真正删除文件,只会删除指定的硬链接。当硬链接个数为1时,rm删除,才会真正的删除文件。

3. 软链接补充知识

这里想通过软硬链接,证明软链接文件存储的内容是文件的路径。

我们创建一个myfile.txt文件,并且该文件还有两个硬链接,和一个软链接
myfile.txt内容是5句"hello world"

接下来,我们尝试删除myfile.txt这个硬链接,此时,因为硬链接个数大于1,rm并不会删除源文件,只会将硬链接个数-1

myfile.txt删除后,my_hard和my_hard1这两个硬链接没有问题,硬链接个数确实-1,文件内容也还是5句"hello world",但是我们发现软链接失效了。

这是因为软链接内容存储的是绝对路径,类似~/lesson/mydemo/myfile.txt,当我们将myfile.txt这个文件名删除,软链接自然找不到,所以就失效了。

4. 硬链接的应用

我们知道目录也是文件,所以目录的inode结构体和普通文件的inode结构体是相同的,那么目录也会有其硬链接个数,我们创建一个目录,并查看其硬链接个数

我们发现目录一创建,其硬链接数就是2。那除了dir1这个硬链接,还有什么硬链接呢?
我们再通过ll -a -i指令同时显示隐藏文件和文件inode编号

这时我们想起来,.也指向当前目录,并且二者的inode编号相同,所以. 是当前目录的一个硬链接
既然 . 是目录的一个硬链接,那 . . 自然也是目录的硬链接,是上级目录的硬链接

我们知道,目录也是文件,这样文件就会像一棵多叉树,但是要想目录的上下级切换,就需要 .. 和当前目录的子目录名 . . 实现向上级目录的跳跃,子目录名实现向下级目录的跳跃
但是,除了. 和. .这两个硬链接,Linux不允许对目录做硬链接,因为可能出现环形目录的情况,可能会打破文件系统目录的有向无环图结构,可能创建目录循环。

结束语

软硬链接的学习大致如此,感谢阅读

如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。

Linux的软硬链接

  Linux链接分为两种,一种是硬链接一种是符号链接。

  硬链接:

    硬链接是指通过索引节点来进行。再Linux文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点(Inode Index)。在Linux中,多个文件指向同一个索引节点是存在的,一般这种连接就是硬链接。硬链接的作用就是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接给重要文件,防止“误删”。当删除文件的时候只删除一个链接并不影响索引本身和其他的链接,只有当最后一个链接被删除后,文件的数据块和目录的链接才会被真正的释放。也就是说,文件真正删除的条件是与之相关的所有硬链接和文件均被删除。

  软链接:

    软链接也叫作符号链接。软链接文件类似于windows的快捷方式。他其实是一个特殊的文件。在软链接中,文件实际上是一个文本文件,其中包含另一文本的位置信息。

以上是关于Linux软硬链接的主要内容,如果未能解决你的问题,请参考以下文章

Linux软硬链接

Linux课程笔记 软硬链接

Linux的软硬链接

Linux软硬链接

Linux学习之Rsync为何是运维必备工具?

Linux中软硬链接那些事儿