Linux inode
经典面试知识点。
inode:index node,索引节点。
Linux中,文件完整路径(如文件/test1.txt),并不是文件的唯一身份证。
文件的inode编号才是文件的唯一身份证。
创建文件时,会为文件分配一个inode,inode编号是一个数值。
文件的inode信息包括:inode编号、链接数Links、文件大小、创建时间、最后访问时间、修改时间、权限信息等。不包括文件路径。
1 查看inode信息
查看inode编号的方法一
stat文件名
例:
stat /xiaobu1.txt
Inode编号为73040。
并且链接数Links为1。
说明:上述各项目信息中,除了文件名,其它信息都存储在Inode区。
查看inode编号的方法二
ls -i 文件名
-i选项表示查看文件的inode编号。
准备文件
rm -rf /xiaobu1.txt
touch /xiaobu1.txt
查看inode编号
ls -i /xiaobu1.txt
其中73040为文件/test1.txt的inode编号。
2 通过inode查询文件名称
find 路径 -inum inode编号
在路径下搜索inode编号,显示文件名。
查询inode编号73040的文件
这里一个inode编号对应一个文件。
当创建硬链接后,这里会出现对应多个文件。
3 通过inode编号删除文件
在find命令的基础上加选项-delete。
find 路径 -inum inode编号 -delete
在指定路径下搜索inode编号,并删除搜索到的文件
删除上述创建的xiaobu1.txt文件(inode编号 73040)
find / -inum 73040 -delete
通过ls -i查看文件/xiaobu1.txt已经不存在;
通过find -inum查看inode编号73040已经不存在对应的文件。
应用场景
有些文件名称使用特殊字符,无法直接通过命令删除,可以通过inode编号的方式来删除文件。
4 inode原理
文件的三个逻辑区域
文件的三个逻辑区域:1、文件内容区;2、文件inode区;3、文件路径区
文件内容对应唯一的inode编号;
一个inode编号对应多个文件路径。即通过硬链接创建多个路径。
磁盘的inode
磁盘在格式化时会为Inode区预留一定的空间,并且设定Inode数量。当创建文件时,会占用Inode,直到消耗完。
查看磁盘的inode数量
df -i
Inodes表示Inode总数,IUsed表示已使用数量,IFree表示可使用数量。
创建文件/xiaobu2.txt,再次观察inode数量。
已使用数量加1。
文件链接数与删除
当文件链接数Links为0时,文件才彻底删除。
首次创建文件时,文件链接数为1;
再次创建硬链接时,文件链接数加1;
每次删除文件,文件链接数减1;
当链接数为1,再次删除时,则文件彻底删除。
示例
步骤1:首次创建stat查看链接数,Links为1。
rm -rf /xiaobu1.txt
echo test1 > /xiaobu1.txt
stat /xiaobu1.txt
步骤2:建立第1个硬链接,再次查看链接数
link /xiaobu1.txt /xiaobu1_link1.txt
stat /xiaobu1.txt
stat /xiaobu1.txt,除文件名不同,其它数据相同。
步骤3:建立第2个硬链接,再次查看链接数
ln /xiaobu1.txt /xiaobu1_link2.txt
stat /xiaobu1.txt
Links结果为3。
步骤4:删除创建文件
rm -rf /xiaobu1.txt
Links结果为2。
cat查看/xiaobu1_link1.txt,文件与数据仍然在。
cat /xiaobu1_link1.txt
查看inode对应文件
find / -inum 73040
步骤5:删除第1个硬链接
rm -rf /xiaobu1_link1.txt
Links为1。
步骤6:删除第2个硬链接
rm -rf /xiaobu1_link2.txt
文件已经彻底删除。