查看Unix/Linux文件的inode

Unix/Linux系统上可以使用stat命令查看文件的inode信息。NetBSD系统:

# stat -f %i foo
1400196

Linux系统:

# stat -c %i foo
277428

也可以使用ls命令:

# ls -i foo
1400196 foo

df命令可以显示整个文件系统的inode使用情况,仍以Linux为例:

# df -i
Filesystem     Inodes  IUsed  IFree IUse% Mounted on
devtmpfs        55113    371  54742    1% /dev
tmpfs           61625      1  61624    1% /dev/shm
tmpfs           61625    371  61254    1% /run
/dev/sda1      524288 116074 408214   23% /
cgroup          61625     13  61612    1% /sys/fs/cgroup
tmpfs           61625      3  61622    1% /tmp

要注意inode的数量是预先分配好的。我曾经经历过的一个短信网关项目最初的设计的就是每条短信都存到一个文件里,结果很快就把inode用光了:-)。

/proc/self/mountinfo文件

Linux系统的/proc/self/mountinfo记录当前系统所有挂载文件系统的信息:

# cat /proc/self/mountinfo
17 61 0:16 / /sys rw,nosuid,nodev,noexec,relatime shared:6 - sysfs sysfs rw,seclabel
18 61 0:3 / /proc rw,nosuid,nodev,noexec,relatime shared:5 - proc proc rw
19 61 0:5 / /dev rw,nosuid shared:2 - devtmpfs devtmpfs rw,seclabel,size=6024144k,nr_inodes=1506036,mode=755
......

关于这个文件各个字段的解释,可以参考这里Linux系统df命令的实现也会读取这个文件,比如获得文件系统类型:

# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root   50G   44G  6.5G  88% /
devtmpfs               5.8G     0  5.8G   0% /dev
tmpfs                  5.8G   84K  5.8G   1% /dev/shm
......