当我们在 LIiux 中输入 ll-i 指令时,会显示文件信息:

权限、拥有者、所属组等这些我都知道,但是最前面的比如 1051810 是什么,还有权限后面的3和6是什么呢?本章我们就来讲解一下 inode 和 硬链接数。

透析文件系统:

在磁盘文件中,包含了文件属性+文件内容,文件属性包含了文件的元信息,每一个文件为了方便查找,会起一个唯一的编号:inode,为了方便理解,inode 号我们可以认为它是一个文件的身份证。

inode 是任何一个文件的属性集合,是储存文件元信息的区域,中文译名为"索引节点"。Linux 中几乎每个文件都有,因为存在大量的文件,为了区分才有的 inode。我们的文件内容一般存在硬盘中,硬盘中会有许多扇区,扇区中的块,块就是用来储存内容的,现在的块一般大小是 4k。

我们日常输入的 ls 和 cat 指令,其实本质就是指令变成进程,在磁盘上找到对应的文件信息和文件内容,把其加载到操作系统上,给到用户。

磁盘结构:

我们先来了解一下磁盘文件系统图:

1 和 2 一般是用来描述 inode 和 data blocks 的使用情况,使用了多少?还剩多少?

inode Table 中包含了文件属性信息,而 Data table 包含了文件的数据,它们的空间使用由对应的位图 Bitmap 决定。

iode Table 中包含了属性 inode ID 和 数据 inode blocks[15] 等,数组中的每个下标对应的是使用的块,每一块储存数据后,写入到 blocks 中,每一块是 4kb。

查看文件信息时,就是通过指针或者 inode ID 找到属性,在找到数据;而 inode Bitmap 和 Block Bitmap 是为了查看 inode Table 和 Data Blocks 有哪些被占用,用位图查看比特位的方式。

对常见现象的一些理解:

1、如何理解空文件?

空文件的数据为 0kb,但空文件也有对应的属性信息,所以在 inode Table 上占用了空间,没有在 Data Table 占用空间。

2、创建文件的过程,写入 1kb 是什么过程:

在 touch test.c 后,首先遍历 inode Bitmap,从右向左或者从左向右查找哪个比特位为 0,把它置为 1,随后再区 inode Table 中申请空间给 test.c,填充文件属性信息。

写入 1kb 数据时,先在 Bitmap 中找到 indoe 是几,在 inode Table 中找到 inode {},找到 int blocks[],发现没有开辟空间,要去申请空间,扫描 Block Bitmap,置 1 表示占用,把数据写到 bock 块中。

3、如何理解删除数据?

假设要删除 inode 为 1 的文件,只需区 inode Bitmap 中找到对应的比特位,置为 0,找到 inode 对应的数据块,在 Block Bitmap 中置为 0。

通常我们理解的删除并非完全删除,而是假删除,所以我们就能理解,删除文件为何特别快,拷贝时特别慢,删除了文件还可以恢复,因为闪一个文件只需置为无效即可,不会占空间,下次只需覆盖就行。而拷贝文件需要区位图上申请空间,拷贝数据,所以慢。

4、如何理解目录?

目录的 inode 保存在 inode Table 中,blocks 中放的是目录的数据,数据是里面的文件名与其对应的映射关系 inode 号。但是,目录的文件名并不存在于 inode 中,因为 Linux 底下一切皆文件,所以是保存到数据当中,比如 ' . '。

我们的指令都是通过 inode 号到 inode Table 中找的,而不是通过文件名找的。

软硬链接:

软链接指令:

ln -s 文件名 链接文件名

硬链接:

ln 文件名 链接文件名

我们在软链接后,可以看到权限属性,是 L,代表着是软连接文件。

通俗易懂地理解,我们可以把软链接看作是文件的快捷方式,大小特别小;硬链接可以看作是给文件起别名,类似 C++ 的引用,其实 a.out 和 c.out 都是一个文件罢了。

软硬链接的区别:

1、软链接是一个独立的文件,有自己的 inode;

2、硬链接的作用是恢复数据,方便目录之间通过相对路径跳转;

3、目录下多个文件为何硬链接数那么多,因为目录下的 . 和 .. 都是别名。

这个3怎么理解呢?

我们可以看得出,其实 . 和 .. 都是硬链接,它们是上级目录和上上级目录的别名,有的时候看到硬链接数就可以找到底下有多少个目录。

ls -id // 查看上级目录
ls -i  // 查看当前目录

在 inode 中有一个整型变量 ret,可以看作是 count,代表着硬链接数,硬链接加一 ret 加一,当捡到 0 时,才说明文件被干掉了。

其他

Boot Block:

表示分区码,在磁盘分区的开头,起引导找到操作系统代码的作用。

acm:

stat xxx

文件三个时间,a 代表最后访问时间,m 代表文件内容修改时间,c 代表文件属性修改时间。

【Linux】文件系统的inode是什么?软硬链接是什么?了解意义相关推荐

  1. 【Linux系统编程:基础IO 下】dup2 实现输出重定向、输入重定向、追加重定向 | 理解磁盘 | 理解文件系统中inode的概念 | 软硬链接

    写在前面 这里先接着<基础IO 上>中的缓冲区的内容作些补充,这里主要补充 dup2 接口. ✔ 测试用例一: #include<stdio.h> #include<sy ...

  2. Linux文件系统之inode,block,superblock

            文件存储在硬盘上,硬盘的最小存储单位叫做扇区sector,每个扇区存储512个字节(0.5)kb,系统读取文件时不会一个一个扇区的读,而是一次性连续读取多个扇区,即一次性读1个'块'( ...

  3. Linux 文件系统与inode,软硬链接

    目录 磁盘的结构 磁盘的抽象(虚拟,逻辑)结构 分区 Block Group 块组: 分析: 文件名 vs inode编号 创建/删除/查看 一个文件,操作系统做了什么? 软硬链接 软连接 硬链接 对 ...

  4. Linux文件系统之inode与软硬连接

    一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统 ...

  5. 理解Linux文件系统之 inode

    一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统 ...

  6. Linux 文件系统之 inode 概述

    inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统操作水平,还有助于体会Unix设计哲学,即如何把底层的复杂性抽象成一个简单概念 ...

  7. 以下关于linux文件系统中inode,linux文件系统—inode及相关概念.docx

    linux文件系统-inode及相关概念 linux文件系统-inode及相关概念 博客分类: /category/156693Linux/blogs/tag/LinuxLinux/blogs/tag ...

  8. 源码 linux下编译_Linux云服务器软硬链接及源码编译安装python3.8的一些备注

    推荐一个简书作者写的从零开始学习Linux,非常细,授人以鱼不如授人以渔. https://www.jianshu.com/p/54c0e6a1da99 正文:看一下服务器的版本 cat /proc/ ...

  9. 【Linux】理解文件系统——软硬链接

    我们之前讨论的都是进程和被打开文件的关系,而如果一个文件是没有被打开呢?没有被打开的文件操作系统如何管理? 没有被打开的文件在磁盘上,所以磁盘上有大量的文件,这些文件要被静态管理起来,方便我们随时打开 ...

  10. 【Linux】文件系统/inode/软硬链接

    目录 一.了解磁盘 1.磁盘的概念 2.磁盘的物理结构 3.磁盘的逻辑结构 4.磁盘区域的划分 二.linux文件系统 三.inode 四.软硬链接 1.软链接 2.硬链接 一.了解磁盘 前言: 一般 ...

最新文章

  1. 学习quartz定时
  2. 2020年数据中心行业研究报告
  3. 实例化bean的三种方式
  4. Redis实现延迟队列
  5. 【ElasticSearch】Es 源码之 Exporters 源码解读
  6. apk部分手机安装失败_3关于Apk安装失败问题的解决方法
  7. Dubbo实战快速入门 (转)
  8. spark生态及各个功能
  9. python解压文件(自用)
  10. HTML+CSS+JavaScript网页特效源代码(复制代码保存即可使用)
  11. 根据列表内车牌号,统计各省市车牌占有量
  12. 如何将pdf转换成word的3种免费方法
  13. python 3维正态分布图_三维正态分布图
  14. 转:Mac操作技巧 | 键盘侠必备快捷键
  15. JQuery使用及基础原理解析相关笔记(一)
  16. python为循环线条增加颜色_python – Matplotlib:如何将线条颜色设置为橙色,并指定线条标记?...
  17. XAF 与 CIIP
  18. requests.exceptions.SSLError: HTTPSConnectionPool(host=‘edith.xiaohongshu.com‘, port=443): Max retri
  19. 台式计算机的选购标准,如何选购台式电脑机箱?小白装机选购电脑机箱知识指南(2)...
  20. 修改win7开机登陆界面背景图片

热门文章

  1. windows Server2016 开启多用户登录
  2. 年休假扣减顺序存储过程
  3. matlab鼠标三维坐标点,Matlab获取鼠标坐标值的两种途径
  4. Coordinated Universal Time (UTC)与系统时间的误差
  5. Linux 命令(203)—— tracepath 命令
  6. css画图(*****************)
  7. 消费积分与顾客忠诚计划
  8. 翻转内衬法用于供水管道修复浅析
  9. 网络广告颠覆传统模式
  10. Linux 踩坑记录