企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## inode 我们文件数据存储在硬盘上,硬盘最小的单位是扇区,一个扇区是512个字节。操作系统读取硬盘每次读取4Kb。成为一个块。文件都存在块中。同时操作系统还会有一个区域记录文件的基本信息。这个基本信息成为文件的**元信息**。 ### 一、inode信息 元信息存储的位置成为inode、中文名索引节点(index node) inode包括的文件信息如下   * 文件的字节数   * 文件拥有者的User ID   * 文件的Group ID   * 文件的读、写、执行权限   * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。   * 链接数,即有多少文件名指向这个inode   * 文件数据block的位置 ### 二、inode大小 inode也是存储在硬盘上。需要耗费硬盘空间。 每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode 可以使用 ```shell df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/vda1 2621440 262203 2359237 11% / tmpfs 128788 2 128786 1% /dev/shm ``` ### 三、inode id 每个inode都有一个id。操作系统根据这个id识别文件 类似人的身份证号。我们通过识别身份证来区别人。人名只是一个称号。 打开文件,一般会有三步, - 找到inode 的id - 获取**inode**信息 - 找到文件数据所在的块。读取内容 ### 四、目录文件 目录也是一种文件。linux一切都是文件。目录文件的读权限(r)和写权限(w),都是针对目录文件本身。由于目录文件内只有文件名和inode号码 ### 五、硬链接 一般情况,文件名和**inode** id是一对 一的关系。但是linux下允许多个文件名指向一个**innode** id 可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名。这种情况就被称为"硬链接"(hard link)。 ![hard](hard.png) ```shell ln 源文件 目标文件 ``` 运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。 这个就像PHP的zval结构。zval中含有一个refcount 和一个is_ref.当有引用的时候。会让ref_count+1.is_ref设置1。 ### 六、软链接 文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。这种就是类似windows下的快捷方式。 ```shell ln -s 源文文件或目录 目标文件或目录 ```