• _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节点访问源文件(其实本质上来说与源文件没区别)就像一个别名。
  • 相关阅读:
    Mysql ProxySQL的学习
    ArrayList与LinkedList区别
    第9章、内存模型和名称空间
    SQL练习 2022/7/2
    Python之字符串
    Linux 10:生产者消费者问题
    【攻破css系列——第四天】元素显示模式
    ActiveMQ(二)
    python+pytest接口自动化之日志管理模块loguru简介
    电脑重装系统桌面图标变成白色文件怎么恢复?
  • 原文地址:https://blog.csdn.net/Dingyuan0/article/details/127633914