_Linux理解软硬链接

0. 准备(文件系统)

  • 我们使用ls -l的时候看到的除了看到文件名,还看到了文件数据。

[Ding@VM-4-6-centos ~]$ ls -l
total 168
drwxrwxr-x 3 Ding Ding 4096 Jul 21 10:25 dir
drwxrwxr-x 3 Ding Ding 4096 Jul 19 19:50 excise
-rw-rw-r-- 1 Ding Ding 148906 Jul 13 15:56 file.txt
drwxrwxr-x 22 Ding Ding 4096 Nov 1 14:57 my
drwxrwxr-x 2 Ding Ding 4096 Jul 15 16:36 project
-rw-rw-r-- 1 Ding Ding 77 Jul 14 17:31 world.c

每行包含7列:

  • 模式
  • 硬链接数
  • 文件所有者
  • 大小
  • 最后修改时间
  • 文件名

其实这个信息除了通过这种方式来读取,还有一个stat命令能够看到更多信息

[Ding@VM-4-6-centos ~]$ stat world.c
File: ‘world.c’
Size: 77 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 655769 Links: 1
Access: (0664/-rw-rw-r–) Uid: ( 1001/ Ding) Gid: ( 1001/ Ding)
Access: 2022-07-20 10:47:00.493716456 +0800
Modify: 2022-07-14 17:31:51.882251084 +0800
Change: 2022-07-14 18:07:49.021094627 +0800
Birth: -

下面解释一下文件的三个时间:

  • Access 最后访问时间
  • Modify 文件内容最后修改时间
  • Change 属性最后修改时间

01. inode

为了能解释清楚inode我们先简单了解一下文件系统
在这里插入图片描述

磁盘是典型的块设备,硬盘分区被划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。

  • Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。政府管理各区的例子
  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了
  • GDT,Group Descriptor Table:块组描述符,描述块组属性信息
  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用
  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
  • i节点表:存放文件属性 如 文件大小,所有者,最近修改时间等
  • 数据区:存放文件内容

011. inode 与 文件名关系

找到文件:
inode编号—>分区特定的Block group —> inode—> 属性—> 内容
然而inode编号来自目录结构

  1. 一个目录可以有很多文件,但这些文件名字一定不同
  2. 目录是文件,看下面一个文件的inode编号

[Ding@VM-4-6-centos my]$ ls -i 22111
789870 abc

总结:
文件名:inode编号的映射关系,互为Key值
进入目录:需要x(执行权限)
创建文件:需要w(写权限)
显示文件名与属性:需要r(读权限)

1. 软硬链接

1.1. 理解硬链接

通过上面知识储备我们知道,真正找到磁盘上文件的并不是文件名,而是inode。 其实在linux中可以让多个文件名对应于同一个inode。

  • 例如:

[Ding@VM-4-6-centos 22111]$ touch abc
[Ding@VM-4-6-centos 22111]$ ln abc def
[Ding@VM-4-6-centos 22111]$ ll -i
total 0
789870 -rw-rw-r-- 2 Ding Ding 0 Nov 1 15:22 abc
789870 -rw-rw-r-- 2 Ding Ding 0 Nov 1 15:22 def

在这里插入图片描述

  • abc和def的链接状态完全相同,他们被称为指向文件的硬链接。内核记录了这个连接数,inode 789870 的硬连接数为2。
  • 我们在删除文件时干了两件事情:1.在目录中将对应的记录删除,2.将硬连接数-1,如果为0,则将对应的磁盘释放。

有什么用娜?我们可以知道一个目录下有多少个文件
在这里插入图片描述

通过上面我们知道一个空目录下的硬链接数是2,因为还有2个(.)它也是一个文件,指当前目录(即自己目录名);(…)它也是一个文件指上一级目录(即自己目录内部)
在这里插入图片描述

1.2. 理解软链接

  • 硬链接是通过inode引用另外一个文件,软链接是通过名字引用另外一个文件,在shell中的做法
    加一个-s就是软链接:

[Ding@VM-4-6-centos ~]$ ln -s ./my/22111/exe exe

作用:
看下图:

在这里插入图片描述
原本很长的路径,有软链接就可以直接运行了。

总结:

  • 软链接文件是一个独立的文件有自己的inode节点,文件中保存了源文件路径,通过数据中保存的源文件路径访问源文件(相当于快捷键)
  • 硬链接是文件的一个目录项,与源文件共用同一个inode节点,直接通过自己的inode节点访问源文件(其实本质上来说与源文件没区别)就像一个别名。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昨天;明天。今天。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值