• Linux之索引节点inode(index node)


    inode就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。

     

    inode 是 UNIX/Linux 操作系统中的一种数据结构,其本质是结构体

    它包含了与文件系统中各个文件相关的一些重要信息

     

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

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

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

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

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

    • 有关文件的其他数据

     

    如图:

        因此,在Linux中创建文件系统时,同时将会创建大量的inode通常,文件系统磁盘空间中大约百分之一空间分配给了inode表

        文件引用的是一个inode号,因此,当用户搜索或者访问一个文件时,Linux系统通过 inode 表查找正确的 inode 编号。在找到 inode 编号之后,相关的命令才可以访问该 inode ,并对其进行适当的更改,所以,一个目录是目录下的文件名和文件inode号之间的映射,如下图:

    使用stat filename可以查看

    使用df -i 可以查看分区的inode使用率

    使用 ls -i filename可以查看inode号


        

        使用cp命令时,系统会分配一个空闲的inode号,在inode表中生成新条目 在目录中创建一个目录项,将名称与inode编号关联 拷贝数据生成新的文件

     

        使用rm命令时,会使链接数递减,从而释放的inode号可以被重用,把数据块放在空闲列表中,删除目录项数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖。

     

        使用mv命令时,如果mv命令的目标和源在相同的文件系统,作为mv命令,用新的文件名创建对应新的目录项,删除旧目录条目对应的旧的文件名,不影响inode表(除时间戳)或磁盘上的数据位置,没有数据被移动!如果目标和源在一个不同的文件系统,mv相当于cp和rm

     


    硬链接

    硬链接就是一个文件拥有多个文件名字,多个文件名都指向同一个文件

    当硬连接建立以后,硬连接双方任何一个对象被修改,都会造成对应的连接对象被修改

    硬连接是不会建立inode的,他只是在文件原来的inode link count域再增加1而已,也因此硬链接是不可以跨越文件系统的

    特性:

    •     硬链接不允许给目录创建,也不能跨分区创建

    •     创建硬链接会增加额外的记录项以引用文件 

    •     每个文件引用相同的inode号 

    •     创建时链接数递增 

    语法:ln filename linkfilename


    软链接,又称符号链接,和Windows系统的快捷方式类似

    软链接文件只是其源文件的一个标记,当删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但却不能查看软链接文件的内容了

    特性:

    •    一个符号链接指向另一个文件

    •    可以使用ls - l的 显示链接的名称和引用的文件

    •    一个符号链接的内容是它引用文件的名称 

    •    可以对目录进行 ,可以跨分区

    •    指向的是另一个文件的路径;其大小为指向的路径字符串的长度;

          不增加或减少目标文件inode的引用计数; 

    语法:ln -s filename linkfilename

        


    file命令

    该命令可以用来识别文件类型,确定文件内容

    它可以检查文件类型,然后确定适当的开发命令或应用程序使用

    语法:  file [OPTION...] [FILE...]

        

    参数:

    • -b列出文件辨识结果时,不显示文件名称。 

    • -c详细显示指令执行过程,便于排错或分析程序执行形 

    • -f列出文件中文件名的文件类型 

    • -F使用指定分隔符号替换输出文件名后默认的”:”分隔符 

    • -i输出mime类型的字符串 

    • -L查看对应软链接对应文件的文件类型 

    • -z尝试去解读压缩文件的内容 

    • --help显示命令在线帮助

        

    查看文件类型:

  • 相关阅读:
    向日葵远控无法启动——[rpcclient]rpcclient_default::connect is error
    Qt 一个简单的word文档编辑器
    【Python深度学习】Python全栈体系(三十二)
    Mojo 实现排序功能
    把自己本地项目发布到Gitee
    嵌入式4-24
    Docker创建enrollment token错误异常
    MySQL-DDL数据定义语言-约束
    R-YOLOv7-tiny检测浸水玉米胚乳裂纹
    SpringCloud&Gateway理论与实践
  • 原文地址:https://blog.csdn.net/ly1358152944/article/details/126279438