如何知道Linux系统上一共有多少个文件?


=Start=

缘由:

最近由我编写的一个安全扫描功能导致了一个故障,虽然在上线前就想到过这个操作比较危险,但是又没有其它的替代方法,所以就上了,然后引发了部分机器的磁盘IO、内存报警等问题。

磁盘IO其实比较好理解,因为是对根目录的find操作,所以需要遍历的文件比较多,IO操作也多;内存占用这个问题之前没想到,但知道在小文件、目录特别多的情况下可能存在这个问题,然后就真如Murphy定律所说——凡事可能发生,就将要发生

所以这里先学习一下获取Linux系统上一共有多少文件的方法。

正文:

参考解答:
# GNU find
# find / -xdev -type f -printf '\n' | wc -l
# POSIX find
# find / -xdev -type f | wc -l
[OR]
# { printf 0; find / -xdev -type f -exec sh -c 'printf "+ $#"' sh {} +; echo; } | bc
[OR]
# find / -xdev -type f -exec printf '%s\0' {} + | tr '\n\0' '?\n' | wc -l
# 在上面的计算中存在一个问题——对于同一个文件的不同硬链接也被算作是不同的文件
# GNU find
# find / -xdev -type f -printf '%i\n' | sort -u | wc -l
# POSIX find
# find / -xdev -type f -exec ls -iq {} + | sort -buk 1,1 | wc -l

&

$ df --inodes / /home
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1            3981312  641704 3339608   17% /
/dev/sda8            30588928  332207 30256721    2% /home
$ sudo find / -xdev -print | wc -l
642070
$ sudo find /home -print | wc -l
332158
$ sudo find /home -type f -print | wc -l
284204
参考链接:

=END=

,

发表回复

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