查看原文
其他

Linux硬盘与文件系统(11)

Cloud研习社 Cloud研习社 2023-06-06

今天我们来看Linux系统中的两种链接:一种为硬链接(hard link),另一种为软连接或叫符号链接(symbol link or soft link),创建链接的命令为ln,在默认不带参数的情况下,执行ln命令创建的链接是硬链接。如果使用ln -s命令创建链接则为软连接。

  • 硬链接:ln 原文件(实体文件)  链接文件
  • 软连接:ln -s原文件(实体文件)  链接文件(快捷方式文件)
  • 注意:目标文件不能事先存在


硬链接


硬链接是指通过索引节点inode来链接,在Linux文件系统中,保存在硬盘分区中的文件不管是什么类型都会给他分配一个编号,这个编号被称为索引节点编号(Index node),简称inode,即在系统中文件的编号。
在linux文件系统中,多个文件指向同一个索引节点是正常的,这种情况的文件就被称为硬链接。提示:硬链接文件就相当于文件的另外一个入口。硬链接的作用之一是允许一个文件拥有多个有效路径名(多个入口),这样用户就可以建立硬链接到重要的文件,以防止误删原数据(这也是快照的原理),为什么一个文件建立了硬链接就会防止数据误删呢?因为文件系统的原理是,只要文件的索引节点还有一个以上的硬链接,只删除其中一个硬链接并不影响索引节点本身和其他的链接(即数据实体没有被删除)。只有当文件的最后一个连接被删除以后,文件才会被彻底删除并释放空间。硬链接原理图如下:
上图中,Filename1_hl和Filename2_hl两个文件是硬链接文件,都指向了同一个inode,Filename1_hl和Filename2_hl两个文件无论删除哪一个,都不会删除最终的文件,只有Filename1_hl和Filename2_hl两个文件同时都删除了,那么文件才会被删除。
硬链接的创建:
[root@studyclub ~]# ll
-rw-r--r--. 1 root root        76 Jan 27 18:36 jason.txt
[root@preparelessons ~]# ln jason.txt jason.txt-hl

[root@studyclub ~]# ls -li jason*
33623749 -rw-r--r--. 2 root root 76 Jan 27 18:36 jason.txt
33623749 -rw-r--r--. 2 root root 76 Jan 27 18:36 jason.txt-hl

接下来我们看看删除会有什么现象:
[root@studyclub ~]# cat jason.txt
zhuo james
I am a student,my name is Jason,this is my telephone 17183859
[root@studyclub ~]# cat jason.txt-hl
zhuo james
I am a student,my name is Jason,this is my telephone 17183859

# 下面我们删除一个连接并查看另一个连接
[root@studyclub ~]# rm -rf jason.txt

# 查看另一个连接,文件依然存在
[root@studyclub ~]# cat jason.txt-hl
zhuo james
I am a student,my name is Jason,this is my telephone 17183659

硬链接知识小结:
  • 具有相同inode节点号的多个文件是互为硬链接文件
  • 删除硬链接文件或者删除原文件任意之一,文件实体并未被删除
  • 只有删除了原文件及所有对应的硬链接文件,文件实体才会被删除
  • 当所有的硬链接文件和原文件被删除后,再存放新的数据会占用这个文件的空间。或者硬盘fsck检查的时候,删除的数据才会被系统回收
  • 硬链接文件就是文件的另一个入口(相当于超市的前门、后门一样)
  • 可以通过给文件设置硬链接文件,来防止重要文件被误删
  • 通过执行命令“ln sorce_file dest_file”,即可完成创建硬链接
  • 硬链接文件可以用rm命令删除
  • 对于静态文件(没有进程正在调用的文件)来讲,当对应的硬连接数为0,文件就被删除。


软连接(符号链接)


软连接(soft link)也称为符号链接(symbolic link)。linux里的软连接文件就类似于windows系统中的快捷方式。linux里的软连接文件实际上是一个特殊的文件,文件类型是l。软连接文件实际上可以理解为一个文本文件,这个文件里包含有软连接指向另一个原文件的位置信息,因此,通过访问这个“快捷方式”就可以迅速定位到软连接指向的原文件实体。

软连接的创建:
[root@studyclub ~]# ln -s jason.txt jason.txt-softlink
[root@studyclub ~]# ll
lrwxrwxrwx   1 root root        12 Feb  7 10:29 jason.txt-softlink -> jason.txt

上面创建软连接后的效果如下:
jason.txt-softlink是一个独立的文件(有自己的inode和block),只是这个文件比较特殊,它的内容是指向jason.txt这个文件的。
软连接知识小结:
  • 软连接类似windows的快捷方式(可以通过readlink查看其指向)
  • 软连接类似一个文本文件,里面存放的是原文件的路径,指向源文件的实体
  • 删除原文件,软连接文件依然存在,但是无法访问指向的原文件了
  • 软连接指向的原文件失效的时候,一般是白色红底闪烁提示。
  • 执行命令“ln -s 原文件  目的文件”即可完成文件软连接(目标不能存在)
  • 软连接和原文件是不同类型的文件,也是不同的文件。inode号也不相同

关于目录的连接说明

  • 对于目录,不可以创建硬链接,但可以创建软连接
  • 对于目录的软连接是生产场景运维中常用的技巧
  • 目录的硬链接不能跨越文件系统(从硬链接原理可以理解)
  • 每个目录下面都有一个硬链接”.”符号,和对应的上级目录的硬链接“..”
  • 在父目录创建一个子目录,父目录的连接数增加1(子目录里有..来指向父目录)


练习题

我们前面提到过,执行“ll”结果的第二列和“ls -li”结果的第三列是文件的硬链接数,请问在什么情况下目录的硬连接数是15。

[root@studyclub ~]# ll
drwxr-xr-x. 15 root root 154 Jan 21 05:51 test

面试题

描述linux下软连接和硬链接的区别。
答:
默认不带参数情况下,ln命令创建的是硬链接,带-s参数的ln命令创建的是软连接
硬链接文件和原文件的inode号相同,而软连接文件的inode号与原文件不同
ln命令不能对目录创建硬链接,但可以创建软连接,对目录的软连接会被经常用到
删除软连接文件对源文件以及硬链接没有任何影响。
删除文件的硬链接文件,对原文件及软连接文件无任何影响
删除连接文件的原文件,对硬链接文件无影响,会导致其软连接失败(红底白字闪烁)
同时删除原文件及其硬链接文件,整个文件会被真正的删除
很多硬件设备中的快照功能,使用的就是类似硬链接的原理。
软连接可以跨文件系统,硬链接不可以跨文件系统。
上述企业面试答题必胜思路1:
  • 介绍软硬链接的概念
  • 如何创建软硬链接
  • 对于文件的软硬链接区别
  • 对于目录的软硬链接区别
必胜思路2:
画图进行形象化表示:

下节预告:
学完了软、硬链接,我们就可以来仔细的研究一下文件是怎么被删除的。


新手应知:
    尝鲜Rocky Linux
《Linux基础及进阶》:
    021 - Linux硬盘与文件系统(6)
    022 - Linux硬盘与文件系统(7)
    023 - Linux硬盘与文件系统(8)
    024 - Linux硬盘与文件系统(9)
    025 - Linux硬盘与文件系统(10)

看完本文有收获?请分享给更多人

推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

微信号|bjdream-1


Cloud研习社 · 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存