Linux之索引节点inode(index node)

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


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

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


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

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

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

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

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

  • 有关文件的其他数据


如图:

blob.png

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

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

blob.png

使用stat filename可以查看

blob.png

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

blob.png

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

blob.png


    

    使用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

    blob.png


file命令

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

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

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

    

参数:

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

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

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

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

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

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

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

  • –help显示命令在线帮助

    

查看文件类型:

blob.png

blob.png

类似文章