提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、inode表结构
每个文件的属性信息,比如:文件的大小,时间,类型,权限等,称为文件的元数据(meta data)
元数据是存放在inode(index node)表中。inode 表中有很多条记录组成,第一条记录对应的存放了一个
文件的元数据信息。
每一个inode表记录对应的保存了以下信息:
- inode number 节点号
- 文件类型
- 权限
- UID
- GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
如何查看inode号
ls -i
stat
有3个时间:
最近访问atime:查看文件的时间
最近更改mtime:最近更改文件内容的时间,注意:更改完内容之后,ctime也会改变
最近改动ctime:最近更改文件元信息的时间,比如改变权限等
-
文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。
-
一般连续八个扇区组成一个"块”(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。4k一读,8个扇区一读
-
文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode表。 因此,一个文件必须占用一个inode,并且至少占用一个block。du 显示
-
inode不包含文件名。文件名是存放在目录文件夹当中的。Linux 系统中一切皆文件,因此目录也是一种文件。
-
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个或多个文件名。
唯一 同一文件系统() 不同的文件
-
所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码:通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。
硬盘上最小的存储单位为扇区(512字节)
文件存储的最小单位为块8个扇区组成为4k
扇区 512字节 块block 一般连续8个扇区组成一个块, 4096字节 4Ki 是文件存取的最小单位
目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。
目录
目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系
文件引用一个是 inode号
是通过文件名来引用一个文件
一个目录是目录下的文件名和文件inode号之间的映射
文件是如何找到实际数据的
linux 通过文件夹中会有一张 文件名和inode一一对应关系的表 (名字) 去找inode号 inode指向对应的实际数据
cp 和 inode
cp 命令:
- 分配一个空闲的inode号,在inode表中生成新条目
- 在目录中创建一个目录项,将名称与inode编号关联
- 拷贝数据生成新的文件
rm 命令:
- 硬链接数递减,从而释放的inode号可以被重用
- 把数据块放在空闲列表中
- 删除目录项
- 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv和inode
-
如果mv命令的目标和源在同一设备,
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
删除旧的目录对应关系新建目录对应关系
[root@localhost a]#find -inum 69 -exec rm {
} \;
#通过find命令查找indoe号来删除指定的文件
[root@localhost a]#find -inum 69 -delete
三种时间戳
当新创建一个文件时,这个文件的最后访问时间、最后内容修改时间、最后状态更新时间都是一致的。
修改一个文件的权限状态信息,只会更新这个文件的最后状态修改时间
对比事例2,这里最后状态时间、最后内容改变时间都被更新了。 当修改一个文件时,文件的Modify、Change会被更新
当查看文件时,文件的 Access time 会更新。
当需要了解这个文件有没有被修改过 - Modify Time
当需要了解这个文件最后被查看的时间 - Access Time
当需要了解这个文件权限最后变动的时间 - Change Time
有3个时间:
最近访问atime:查看文件的时间
最近更改mtime:最近更改文件内容的时间,注意:更改完内容之后,ctime也会改变
最近改动ctime:最近更改文件元信息的时间,比如改变权限等
文件:"1.txt"
大小:4 块:8(扇区数) IO 块:4096(一块4096) 普通文件
设备:fd00h/64768d Inode:68962769 硬链接:1
权限:(0777/-rwxrwxrwx) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:default_t:s0
最近访问:2022-03-12 16:10:53.910127740 +0800
最近更改:2022-03-12 16:24:10.406251486 +0800
最近改动:2022-03-12 16:24:32.306090597 +0800
创建时间:-
删除文件空间不释放
[root@localhost opt]#cp /dev/zero /boot/bigfile
cp: 写入"/boot/bigfile" 出错: 设备上没有空间
cp: 扩展"/boot/bigfile" 失败: 设备上没有空间
[root@localhost opt]#ls -S /boot
[root@localhost opt]#w
02:28:24 up 1:18, 6 users, load average: 0.13, 0.06, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.91.1 069月21 183days 0.07s 0.07s -bash
root pts/1 192.168.91.1 079月21 183days 0.08s 0.08s -bash
root pts/2 192.168.91.1 149月21 175days 0.07s 0.07s -bash
root pts/3 192.168.91.1 01:20 1:04m 0.07s 0.07s -bash
root pts/4 192.168.91.1 02:26 8.0