• Linux文件索引节点相关概念


    一.  概念

           1.  inode(index node)表中包含文件系统所有文件列表

               一个节点 (索引节点)是在一个表项,包含有关文件的信息( 元数据 ),包括:

    •     文件类型,权限,UID,GID

    •     链接数(指向这个文件名路径名称个数)

    •     该文件的大小和不同的时间戳

    •     指向磁盘上文件的数据块指针

    •     有关文件的其他数据

    •     inode  索引节点编号

           2. inode 表结构

              

           3. inode号

            系统中将目录下的文件名和文件inode号之间的映射作为目录的数据存放;人们通过文件名进行操作时,系统会通过对应路径目录的inode号找到目录的inode表数据,进而通过数据指针指向目录的数据,匹配文件名,得到文件的inode号;再到inode表中找到此文件的表项,再由文件数据指针指向真正的文件数据。

            i.  系统中同一分区的索引节点编号是唯一的,即在一个分区中,索引编号相同的文件指向的数据是同一个;(硬链接)

            ii.  系统中每个分区的索引节点划分是独立的,不同分区的索引节点编号可能相同,但不是同一个文件;

            iii.  分区中的索引节点编号是有限的;当分区中索引节点编号用完后,新建文件夹会提示系统内存不足,导致新建失败;但系统中仍有剩余磁盘空间,原因是索引节点编号不足,无法为文件分配节点编号,因而新建失败。

       ls -i                                 查看文件节点编号        
       df -i                                 查看分区节点编号使用情况
       echo file{1..500000} |xargs touch     批量新建大量文件;参数过多,touch无法直接创建
       echo file{1..500000} |xargs rm        批量删除大量文件;参数过多,rm无法直接删除

     

         4. 文件操作与inode的关系

            i.  cp命令执行原理
                   系统分配一个空闲的inode号,在inode表中生成新条目;在目录中创建一个目录项,将名称与inode编号关联;拷贝数据生成新的文件
           ii.  rm 命令执行原理
                   链接数递减,减到零后,进而释放inode号,被系统重用;把数据块放在空闲列表中;删除目录项;数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖。
           iii.  mv命令执行原理
                  如果mv命令的目标和源在相同的文件系统,作为mv 命令用新的文件名创建对应新的目录项;删除旧目录条目对应的旧的文件名;不影响inode表(除时间戳)或磁盘上的数据位置:没有数据   被移动!
                  如果目标和源在一个不同的文件系统, mv相当于cp和rm

    二 . 软连接与硬链接

         1. 硬链接

        创建方式:   ln filename  filename2 
              a. 硬链接的新建是为同一inode号添加文件名  (本质是在目录条目里为inode号增添一个文件名映射,指向同一个inode表数据,因此数据相同)
              b. 新建硬链接,链接数增加(链接数实质就是 inode号 对应文件名的个数;当 inode 号映射的文件名不存在时,此 inode号就会被系统回收重用)
              c. 硬链接文件和原文件之间数据共享,但又互相独立;(修改其中任意一个文件的数据,其他的文件数据都会改变,因为共用同一数据指针;删除其中任意一个文件,链接数减少,即减少一个inode和文件名之间的映射,但对数据指针没影响,所以其他文件数据没影响)
              d. 不能跨分区创建硬链接 (各分区之间 inode 互相独立)
              e. 不能对目录创建硬链接 (目录最多有三个硬链接,目录本身,目录下的 . ,子目录下的 ..)

           2.  软连接

        1. 创建方式: ln -s file_path file_link    file_path :原文件绝对路径或原文件相对与 file_link 的相对路径, 推荐使用相对路径,可移植性强
        2. readlink file_link                     读取软连接原始文件路径
        3. 软连接指向新文件
             rm -f file_link                      删除原软连接
             ln -s newfile_path file_link         创建新软连接
              a.  软链接实质是新建一个文件快捷方式,存放的数据是原文件的文件名,文件数据大小是原文件名字的字节数;访问时通过文件名指向到原文件数据
              b.  软链接支持跨分区  (通过原始文件路径进行映射)
              c.  可以创建目录软连接
              d.  软连接文件依赖于原始文件 ;删除原始文件,软链接文件会失效
  • 相关阅读:
    06 继承与多态
    动手动脑 4 String 类
    字串加密
    课后作业(查询类对象创建个数)
    动手动脑 3 类与对象
    动手动脑 (第二次)
    IOS 网络判断
    ios常用的几个动画代码
    iOS Get方式带中文不能请求网络
    UILabel Text 加下划线
  • 原文地址:https://www.cnblogs.com/Dlg-Blog/p/8684352.html
Copyright © 2020-2023  润新知