zoukankan      html  css  js  c++  java
  • linux文件系统节点详解

    linux文件系统有两层结构,逻辑结构和物理结构。也就是inode和block。

    每个文件都有一个inode, 记录文件属性:权限,时间还有最重要的block号码。

    block是实际存放文件内容的地方。

    但文件名不在这里。在哪?在目录的block里面。

    目录也有一个唯一的inode,记录内容与文件inode大体相似。

    block是记录该目录下文件名,子目录名与它们的inode信息的地方。

    所以我们在找文件时,比如/etc/issue,先读/目录的inode,找到/的内容block,再从中找出etc/的inode,

    然后读etc/的block,找出issue的inode,再读issue的block,得出内容。当然前提是所有权限支持。

    这也是为什么新建文件,删文件时要目录权限配合的原因。

    因为文件本身不记录文件名,文件名记录在其父目录的block中。

    那/目录的inode记录在哪里?这是鸡生蛋,蛋生鸡的问题。解决循环要有外力介入。

    先有鸡还是先有蛋?先有鸡,因为鸡是恐龙进化来的。恐龙下蛋,但那毕竟不是鸡蛋.....

    所以还是先有鸡,后有鸡蛋。这也解决了没有鸡蛋,鸡是从哪里来的问题。

    根目录的inode是挂载时候记录的,因此有了/的inode,找文件就是一路顺藤摸瓜。

    再谈谈linux下的link。

    它分硬链接和软链接两种。软链接应用较广。

    硬链接只是在相应目录的block里面记录了目标文件的inode。也就是多写了一行。它,不是真正意义上的文件,没有自己的inode,所以不会占用inode和block,但目标文件的inode引用计数会+1。

    删除目标文件,硬链接依旧可以打开,毕竟删除只是删block里的文件名映射而已,由于硬链接里有完整的文件名映射,所以依然可以打开。

    软链接则不同。软链接记录的是目标文件的文件名。会占用新的inode和block,block里记录的是目标文件的文件名。打开软链接时,先找到目标文件的文件名,在去相应目录去找inode, 相当于中间多了一层。

    删除目标文件后,软链接无法打开。因为目标文件的文件名已经被删除,中间层不存在,所以即使目标文件的inode和block还在,但逻辑上它已经不存在了。所以无法打开。

    但,无论更改软链接或者硬链接,都相当于更改原文件!

    另外新建目录时会自动建两个硬链接.和..,所以本目录初始化时,link为2。上层目录link数会+1.

     ln 默认建硬链接,-s 建软链接。

  • 相关阅读:
    IntellJ IDEA 使用技巧之组件窗口设置
    记springboot + MP +Hikari动态数据源配置
    manjaro升级后_sogou输入法异常
    python_mysql库安装问题
    通讯录制作(.csv文件转.vcf文件即vcard格式)
    win10_bat _运行python程序
    yield()返回参数函数使用
    python交换两个整型数据的数值
    Mongodb 4.0+安装
    C# winform 记住密码实现代码
  • 原文地址:https://www.cnblogs.com/zqiguoshang/p/6247745.html
Copyright © 2011-2022 走看看