详解Linux inode

文件是文件系统对数据的分割单元。文件系统用目录来组织文件,赋予文件以上下分级的结构。在硬盘上实现这一分级结构的关键,Linux使用inode来虚拟普通文件和目录文件对象,下面为大家详细讲解一下Linux inode。

inode在文件系统创建是确定,并且每个文件系统都有一个inode集合。最大的目录大小取决于不同的文件系统。为了获得更好的性能,通常将文件放入不同的子目录中,而不是将所有文件放入同一个目录。

什么是inode number

inode是inode table中的一个条目,包含有关目录和常规文件的元数据。inode是传统Unix风格文件系统 (比如ext3/ext4) 上的数据结构。Linux扩展文件系统 (如ext2/ext3) 维护了一个inode的数组:inode table。inode table包含该文件系统中所有文件的列表。inode table中的各个inode项具有唯一的编号 (该文件系统唯一),即inode number。深入inode数据结构,我们发现它存储了如下信息:

  • 文件类型: 普通文件,目录,管道等等
  • 权限:可读,可写,可执行
  • 链接数:链接到该inode的硬链接数
  • User ID:文件所有者
  • Group ID:所有者组ID
  • 文件大小
  • 时间信息
  • 属性:比如,不可改变位
  • 访问控制列表
  • 文件数据存储的实际位置
  • 其他元数据

注意:inode中不存储文件名数据

如何查看inode信息

如果你希望查看文件系统的inode信息,你可以使用一些shell命令来查看文件系统的属性

a. 显示指定文件信息

你可以使用stat命令显示某个文件或目录的inode信息,你必须指定文件或目录名

# stat log.txt
 File: 'log.txt'
 Size: 212             Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 591912      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-11-26 11:27:13.683598803 +0800
Modify: 2018-12-06 17:18:49.799424595 +0800
Change: 2018-12-06 17:18:49.799424595 +0800
Birth: -

命令的输出告诉了你该文件的各种时间信息,它的所有权和权限,以及文件存储的位置。存储文件数据的磁盘块信息也展示在stat命令的输出中。

你也可以选择只列出文件的inode number:

# stat --format=%i log.txt
591912
b. 打印文件的inode number

ls命令用于列出文件/文件夹的信息。参数 -i 说明需要显示每个文件的inode number。我们可以结合参数 -l 一起使用以列出详细信息:

# ls -li
total 16
592404 drwxr-xr-x 6 root root 4096 Nov  2 15:01 config
591900 -rw-r--r-- 1 root root  453 Nov 25 22:25 docker-compose-single.yml
592414 -rw-r--r-- 1 root root 2714 Nov  2 15:01 docker-compose.yml
592415 drwxr-xr-x 2 root root 4096 Nov  2 15:01 mariadb

输出的第一列显示了文件的inode number。

c. 显示文件系统inode的使用信息

默认情况下,df命令汇总可用和已用的磁盘空间。你可以通过传递 -i--inodes 选项来接收有关可用和已使用的inode报告。

# df -i
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
udev           2032387    398 2031989    1% /dev
tmpfs          2037595   1224 2036371    1% /run
/dev/vda1      3276800 325180 2951620   10% /
tmpfs          2037595      7 2037588    1% /dev/shm
tmpfs          2037595      4 2037591    1% /run/lock
tmpfs          2037595     16 2037579    1% /sys/fs/cgroup
overlay        3276800 325180 2951620   10% /var/lib/docker/overlay2/c1955f95c338497d2f669ee0baf2706f93c2765001cafd3568b5af9ebfbe0dfd/merged
overlay        3276800 325180 2951620   10% /var/lib/docker/overlay2/85a6ee4a64760a9e52efa312094092121160030132aaaf4bd32ecf5585324dfd/merged
overlay        3276800 325180 2951620   10% /var/lib/docker/overlay2/692ed70766a4ee954c0f0f1b19d69b906c33ae54a618f8686f66e31e9ac05606/merged
shm            2037595      1 2037594    1% /var/lib/docker/containers/2a09d78972ebb74a7631dfd5e567a2b54282886ac8d8dc54dc1f5badffc692b8/mounts/shm
shm            2037595      1 2037594    1% /var/lib/docker/containers/fd9619309707c1026876a401ac22eaf8dd9bfbaceb237ee927017818a6ffa3ff/mounts/shm
shm            2037595      1 2037594    1% /var/lib/docker/containers/080d0d79e069041a2997dfaf2c07e69a0518ad44271dad4688f459958dac09c5/mounts/shm
tmpfs          2037595      4 2037591    1% /run/user/1000

如果分区包含很多小文件,这些信息可能会有帮助,这可能会比耗尽可用磁盘空间更快的耗尽可用的inode。

d. 列出文件系统超级块的信息

你可以使用 tune2fs -l 命令来显示所有与inode相关的信息。

# tune2fs -l /dev/vda1  | grep inode
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent sparse_super large_file uninit_bg
Free inodes:              2952348
First inode:              11
Journal inode:            8
First orphan inode:       221187
Journal backup:           inode blocks

目录的inode结构

上面提到过,Linux中的目录也被视为文件。目录是将文件名映射到其inode number的特殊文件 (此映射称为dentry)。因此,当我们说某个目录包含文件和其他目录时,我们的意思是该目录将这些文件和目录映射到它们的inode number。这就是目录无法容纳两个具有相同名称的文件的原因,因为它无法使用两个不同的inode number映射一个名称。

当一个文件通过其父目录映射到它到inode时,那么最顶层的目录(即 / 目录)如何映射到它的inode?实际上,/ 目录的inode number是固定的,始终为2。

# stat /
File: '/'
 Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: fd01h/64769d    Inode: 2           Links: 24
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-07-24 17:05:52.740982553 +0800
Modify: 2018-12-21 18:02:05.258315357 +0800
Change: 2018-12-21 18:02:05.258315357 +0800
Birth: -

链接

在命令 ls -l 的输出中,权限之后和所有者之前的列是链接计数。 链接计数是指文件的硬链接数。 要理解硬链接,我们从链接开始。 链接是指向另一个文件的指针。 在Linux世界中,存在两种类型的链接:

a. 符号链接 (软链接)

符号链接是一个单独的文件,其内容指向被链接的文件。 要创建符号链接,请使用带有-s选项的ln命令。 使用ln命令时,请确保首先引用原始文件的名称,然后引用要创建的链接的名称。

# ln -s /home/opt/sync.sh filesync

这里filesync是sync.sh的符号链接。 把它想象成一个快捷方式。 编辑filesync就像直接编辑原始文件一样。 如果我们删除或移动原始文件,链接将被破坏,我们的filesync文件将不再可用。

ls -l 命令显示生成的文件是符号链接。 这由 ls -l 输出的第一个位置中的字母l以及列表末尾的箭头指示,该箭头表示链接所指向的文件。

# ls -l filesync
lrwxrwxrwx 1 root root 20 Apr 7 06:08 filesync -> /home/opt/sync.sh

比较符号链接和原始文件时,您会发现它们之间存在明显差异。

# ls -il /home/opt/sync.sh filesync
258674 lrwxrwxrwx 1 root root 20 Apr 7 06:08 filesync -> /home/opt/sync.sh
517333 -rw-r----- 1 root root 5 Apr 7 06:09 /home/opt/sync.sh

原始文件只是一个直接连接到inode的文件,而符号链接指向该文件。 符号链接的大小是它引用的文件名称的字节数,因为符号链接中没有其他信息可用。

b. 硬链接

要了解硬链接是什么,关键是要了解文件的标识是其inode编号,而不是其名称。 硬链接是一个引用inode的名称。 这意味着如果file1有一个名为file2的硬链接,那么这两个文件都引用相同的inode。 因此,当您为文件创建硬链接时,您真正要做的就是为inode添加一个新名称。 为此,请使用不带选项的ln命令。

# ls -l /home/opt/sync.sh  
-rw-r----- 1 root root 5 Apr 7 06:09 /home/bobbin/sync.sh
# ln /home/opt/sync.sh synchro

让我们来比较这两个文件

# ls -il /home/bobbin/sync.sh synchro
517333 -rw-r----- 2 root root 5 Apr 7 06:09 /home/opt/sync.sh
517333 -rw-r----- 2 root root 5 Apr 7 06:09 synchro

关于硬链接的有趣之处在于原始文件和链接之间没有区别:它们只是连接到同一个inode的两个名称。

正如您必须注意到的,与软链接不同,硬链接不是特殊文件。 现在,链接计数是文件硬链接的数字。 因此,创建硬链接后链接计数会增加,如上图所示。 这些硬链接有两个限制:

  • 目录不能硬链接。 Linux不允许这样做以维护目录的非循环树结构。
  • 无法跨文件系统创建硬链接。 这两个文件必须位于相同的文件系统上,因为不同的文件系统具有不同的独立inode表(不同文件系统上具有相同inode编号的两个文件是不同的)。

结论

每个Linux文件都有一个inode数据结构,inode包含文件的所有属性,但不包含文件名。 符号链接类似于指向原始文件的快捷方式,而硬链接类似于文件的一份拷贝。 原始文件和硬链接之间没有区别,他们都引用同一个inode。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/208812.html<

(0)
运维的头像运维
上一篇2025-04-09 04:34
下一篇 2025-04-09 04:35

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注