【Linux】软硬链接

前言

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

【Linux】软硬链接_第1张图片

文章目录

  • 前言
  • 一. 软链接
    • 1. 软链接的语法
    • 2. 软链接的本质
    • 3. 软链接的应用
  • 二. 硬链接
    • 1. 硬链接的语法
    • 2. 硬链接的本质
    • 3. 软链接补充知识
    • 4. 硬链接的应用
  • 结束语

一. 软链接

1. 软链接的语法

我们先创建一个myfile.txt的文件,并写入一些内容
【Linux】软硬链接_第2张图片

软链接
ln -s 文件名 软链接名
【Linux】软硬链接_第3张图片

2. 软链接的本质

【Linux】软硬链接_第4张图片

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

【Linux】软硬链接_第5张图片
蓝色部分都是文件的inode编号

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

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

3. 软链接的应用

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

比如我们创建一个路径
【Linux】软硬链接_第6张图片
然后写一个打印hello world的小程序,放到这个深路径中
【Linux】软硬链接_第7张图片
然后我们可以通过软链接链接这个小程序

【Linux】软硬链接_第8张图片
然后我们可以通过这个软链接使用程序
【Linux】软硬链接_第9张图片
这样看下来,我们可以通过软链接,将一个不存在本目录之下的程序,不用指明路径就可以直接使用

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

二. 硬链接

1. 硬链接的语法

硬链接
ln 文件名 硬链接名
【Linux】软硬链接_第10张图片

2. 硬链接的本质

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

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

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

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

3. 软链接补充知识

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

我们创建一个myfile.txt文件,并且该文件还有两个硬链接,和一个软链接
myfile.txt内容是5句"hello world"
【Linux】软硬链接_第13张图片

接下来,我们尝试删除myfile.txt这个硬链接,此时,因为硬链接个数大于1,rm并不会删除源文件,只会将硬链接个数-1
【Linux】软硬链接_第14张图片
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编号
【Linux】软硬链接_第15张图片

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

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

结束语

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

如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
【Linux】软硬链接_第17张图片

你可能感兴趣的:(Linux学习笔记,linux,运维,服务器)