linux/unix inode的一个面试问题及一些概念

网友投稿 965 2022-09-23

linux/unix inode的一个面试问题及一些概念

linux/unix inode的一个面试问题及一些概念

最近一个同事面试的时候,碰到一道面试题,大致意思是这样:一台linux服务器,磁盘空间还剩余很多,但是却报磁盘空间不足,为什么?

这个问题应该是inode使用完导致的。要处理这个问题,要么删除不再使用的文件,要么增加文件系统的空间。 使用命令df -i可以查看文件系统inode的使用情况,例如 root@debian:/tmp# df -i Filesystem            Inodes   IUsed   IFree IUse% Mounted on /dev/sda1             499712  133153  366559   27% / tmpfs                 129310       5  129305    1% /lib/init/rw udev                  128223     612  127611    1% /dev tmpfs                 129310       1  129309    1% /dev/shm 使用ls -i可以查看文件或目录的inode信息: root@debian:/mnt# ls -li total 1154 2250 -r--r--r-- 1 root root     27 Feb  5 08:27 autorun.inf 2496 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 css 2258 lr-xr-xr-x 1 root root      1 Feb  5 08:27 debian -> . 2560 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 dists 3072 dr-xr-xr-x 1 root root   4096 Feb  5 08:27 doc 14080 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 firmware 2272 -r--r--r-- 1 root root 110070 Jan 17 04:12 g2ldr 2275 -r--r--r-- 1 root root   8192 Jan 17 04:12 g2ldr.mbr 14144 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 install 14208 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 install.386 14336 dr-xr-xr-x 1 root root   4096 Feb  5 08:27 isolinux 2290 -r--r--r-- 1 root root 481874 Feb  5 08:30 md5sum.txt 14656 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 pics 14720 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 pool 2304 -r--r--r-- 1 root root   9561 Feb  5 08:30 README.html 2315 -r--r--r-- 1 root root 142252 Feb  4 22:52 README.mirrors.html 2319 -r--r--r-- 1 root root  76632 Feb  4 22:52 README.mirrors.txt 2307 -r--r--r-- 1 root root    398 Feb  5 08:27 README.source 2311 -r--r--r-- 1 root root   6062 Feb  5 08:30 README.txt 2324 -r--r--r-- 1 root root 319525 Jan 17 04:12 setup.exe 156096 dr-xr-xr-x 1 root root   2048 Feb  5 08:27 tools 2331 -r--r--r-- 1 root root    237 Feb  5 08:27 win32-loader.ini

以下是inode的一些概念性的东西,在此记录,以备不时之需。

inode 是 UNIX 操作系统中的一种数据结构,它包含了与文件系统中各个文件相关的一些重要信息。在 UNIX 中创建文件系统时,同时将会创建大量的 inode 。通常,文件系统磁盘空间中大约百分之一空间分配给了 inode 表。

有 时,人们使用了一些不同的术语,如 inode 和索引编号 (inumber)。这两个术语非常相似,并且相互关联,但它们所指的并不是同样的概念。 inode 指的是数据结构;而索引编号实际上是 inode 的标识编号,因此也称其为 inode 编号 或者索引编号。索引编号只是文件相关信息中一项重要的内容。下一个部分将介绍 inode 中的其他一些属性。

inode 表包含一份清单,其中列出了对应文件系统的所有 inode 编号。当用户搜索或者访问一个文件时,UNIX 系统通过 inode 表查找正确的 inode 编号。在找到 inode 编号之后,相关的命令才可以访问该 inode ,并对其进行适当的更改。

例如,使用 vi 来编辑一个文件。当您键入 vi 时,在 inode 表中找到 inode 编号之后,才允许您打开该 inode 。在 vi 的编辑会话期间,更改了该 inode 中的某些属性,当您完成操作并键入 :wq 时,将关闭并释放该 inode 。通过这种方式,如果两个用户试图对同一个文件进行编辑, inode 已经在第一个编辑会话期间分配给了另一个用户 ID (UID),因此第二个编辑任务就必须等待,直到该 inode 释放为止。

inode 的结构

对于经验丰富的 UNIX 开发人员或者管理员来说, inode 的结构相对比较简单,但是可能还有一些您尚不了解的、令人惊讶的有关 inode 的内幕。下面的定义仅给出了 inode 中所包含的、UNIX 用户经常使用的一些重要信息:

* inode 编号 * 用来识别文件类型,以及用于 stat C 函数的模式信息 * 文件的链接数目 * 属主的 UID * 属主的组 ID (GID) * 文件的大小 * 文件所使用的磁盘块的实际数目 * 最近一次修改的时间 * 最近一次访问的时间 * 最近一次更改的时间

从根本上讲, inode 中包含有关文件的所有信息(除了文件的实际名称以及实际数据内容之外)。

以上所列举的信息对于文件来说非常重要,并且在 UNIX 中频繁使用。如果没有这些信息,那么文件将被认为遭到破坏和不可用。

与 其他的操作系统相比,UNIX 系统中的目录和文件可能看起来有所不同,但事实并非如此。在 UNIX 中,目录本身就是文件,只是在它们的 inode 中使用了一些附加的设置。目录 本质上就是一个包含了其他文件的文件。另外,其模式信息中设置了一些相应的标志,以告知系统该文件实际上是一个目录。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:rzsz的安装使用
下一篇:python经典算法题:无重复字符的最长子串(不含有重复字符的最长子串长度 python)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~