日期:2014-05-16  浏览次数:20802 次

Linux Inode相关知识

转自:http://blog.fangjian.me/posts/2010/10/21/linux-inode/

Linux Inode相关知识

这篇文章主要讲一下Linux底下inode相关的一些知识,同时介绍一下,文件系统上的inode数目是如何计算,如何管理的。

什么是inode?

inode是文件系统(File System)上的一个概念,是文件系统上用来保存文件信息的一种结构。

从根本上讲, inode 中包含有关文件的所有信息(除了文件的实际名称以及实际数据内容之外),inode包含了如下基本信息(只列出了常用的):

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

下图为inode的结构图:

Linux下对inode进行查看的方式

df命令查看剩余inode数量

1
2
3
4
5
6
7
8
9
root@frank-laptop:~$ df -i -h
文件系统            Inode (I)已用 (I)可用 (I)已用% 挂载点
/dev/sda6               3.6M    346K    3.3M   10% /
none                    212K     914    211K    1% /dev
none                    214K      10    214K    1% /dev/shm
none                    214K      78    214K    1% /var/run
none                    214K       4    214K    1% /var/lock
none                    214K       1    214K    1% /lib/init/rw
/dev/sda7               4.8M    301K    4.5M    7% /home

这个命令-i的意思是列出inode数目,-h是以一种人们易于理解的方式呈现结果,我们通过这个命令可以看到各个分区inode数目的使用情况。有一个你必须要清楚的是,一旦inode用完,你的文件系统将无法创建任何内容,就算有剩余的空间。这点我相信应该道理很清楚

stat命令查看指定文件信息

1
2
3
4
5
6
7
8
root@frank-laptop:~$ stat /bin/bash
  File: "/bin/bash"
  Size: 818232        Blocks: 1600       IO Block: 4096   普通文件
Device: 806h/2054d    Inode: 131084      Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2010-10-20 10:22:38.041508828 +0800
Modify: 2010-04-19 09:51:35.000000000 +0800
Change: 2010-05-15 20:06:53.468309411 +0800

使用这个命令,我们可以找到特定文件的索引编号,以及其他的 inode 项目,如权限、文件类型、UID、GID、链接的数目(非符号链接)、文件大小和最近一次更新、最近一次修改以及最近一次访问的时间戳。

ls命令

在我们的日常工作中总会碰到这样的情况,难以删除或者管理某些文件,因为这些文件的文件名中使用了短横线或者其他特殊字符、或者其文件名完全不正确。这很可能是有人对该文件进行了错误命名。

因为 UNIX 中的大多数命令,包括开关或者选项在内,都是以连字符 (-) 或者双连字符 (–) 开头的,很难使用诸如 rm、mv 和 cp 之类常用的命令来操作这些文件。幸运的是,某些命令提供了一些选项,以用来显示相关文件所关联的 inode 的索引编号。ls 命令就提供了一个这样的选项:

1
2
3
4
5
root@frank-laptop:~$ ls -i