可以是文件权限(rwx)的记录,文件的属组,属主,文件大小,时间戳等,这种存储文件元信息的区域聚焦做inode,中文译名“索引节点”,也叫 i 节点。因此一个文件必须占用一个inode,但至少占用一个block。
注1:inode并不包括文件名,其实文件名是存放在目录当中的,linux系统中一切皆文件,因此目录也是一种文件。即查看目录中的文件,cd 跳转到指定目录后,通过 ls 查看目录中的文件名。每个inode都有一个号码,系统用inode号码识别不同的文件。对于用户,文件名只是inode号码便于识别的别称。
一、
ls -ihl
每一列的含义二、inode和block
理解inode要从文件存储说起。
inode和block的作用
inode 详细介绍
inode可以记录的信息有哪些?
可以是文件权限(rwx)的记录,文件的属组,属主,文件大小,时间戳等,这种存储文件元信息的区域聚焦做inode,中文译名“索引节点”,也叫 i 节点。因此一个文件必须占用一个inode,但至少占用一个block。
注1:inode并不包括文件名,其实文件名是存放在目录当中的,linux系统中一切皆文件,因此目录也是一种文件。即查看目录中的文件,
cd
跳转到指定目录后,通过ls
查看目录中的文件名。每个inode都有一个号码,系统用inode号码识别不同的文件。对于用户,文件名只是inode号码便于识别的别称。注2:inode 也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是 inode 区,存放 inode 所包含的信息。每个 inode 的大小,一般是128字节或256字节。通常情况下不需要关注单个 inode 的大小,而是需要重点关注 inode 总数。inode总数在格式化的时候就确定了。
inode编号
每一个 inode 都有一个编号,系统根据 inode 编号可以快速的计算出 inode 信息在磁盘 inodes 存储区的偏移,然后从中获取 inode 信息,再根据 inode信息中记录的 Block 块位置,从Block存储区读出文件内容每个inode都有一个号码,操作系统用inode号来识别不同的文件。
inode 编号在一个文件系统中是唯一的,多个文件系统之间可能会出现相同的编号,下图磁盘存储结构示意图中 /dev/vda1 和 /dev/vda2 在各自的文件系统中 inode 编号是唯一的。
Unix/Linux系统内部不是用文件名,而使用inode号来识别文件。对于系统来说,文件名只是inode号便于识别的别名。表面上用户是通过文件名打开文件,实际上系统内部分成三个步骤:
其实系统还要根据inode信息,看用户是否具有访问的权限,由就指向对应的数据block,没有就返回权限拒绝。
查看 inode 信息
使用
stat
命令查看inode信息ls -i
直接查看文件 i 节点号也可以通过 stat 查看文件 inode 信息,查看 i 节点号
df -i 查看硬盘分区的 inode总数 和 已使用 情况
上述文件字段解释:
inode 特性带来的问题
由于 inode 号码和文件名分离,导致一些Unix/Linux 系统具备以下几种特有的现象。
这种情况使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过 inode 号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的 inode ,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的 inode 则被回收。
硬链接与软链接
硬链接
通过文件系统的 inode 链接来产生新的文件名,而不是产生新的文件,称为硬链接。
一般情况下,每个 inode 号码对应一个文件名,但是 linux 允许多个文件名指向同一个 inode 号码。意味着可以使用不同的文件名访问相同的内容。
运行该命令之后,源文件与目标文件的 inode 号码相同,都指向同一个 inode。inode 信息中的链接数这时就会增加1。
当一个文件拥有多个硬链接时,对文件内容修改,会影响到所有文件名;但是删除一个文件名,不影响另一个文件名的访问。删除一个文件名,只会使得 inode 中的链接数减1.
需要注意的是:不能对目录做硬链接。
通过 mkdir命令创建一个新目录,其硬连接数应该有2个,应为常见的目录本身为1个硬链接,而目录下的隐藏目录 .(点号)是该目录的又一个硬链接,也算是1个硬链接数。
隐藏目录中的
.
表示当前目录,它是当前目录的一个硬链接,和当前目录拥有相同的inode编号。我们执行一个文件需要输入类似./test
的命令,命令中的.
表示的就是当前目录;..
表示当前目录的父目录,它是父目录的一个硬链接,和父目录拥有相同的inode编号。还记得返回上一层的命令cd ..
吗?这里的cd ..
表示的就是当前目录的父目录。软链接
软链接就是再创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。
例如,文件A 和 文件B 的 inode 号码虽然不一样,但是 文件A 的内容是 文件B 的路径。读取 文件A 时,系统会自动将访问者导向 文件B 。这时,文件A 就称为 文件B 的软链接 soft link 或者符号链接 symblic link。
这意味着,文件A 依赖于 文件B 而存在,如果删除了 文件B,打开 文件A 就会报错。这是软链接与硬链接最大的不同:文件A 指向 文件B 的文件名,而不是 文件B 的 inode 号码,文件B 的 inode 链接数不会因此发生变化。