=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 |
参考链接:
- http://unix.stackexchange.com/questions/123531/how-can-i-count-all-the-files-on-my-system-from-root
- http://unix.stackexchange.com/questions/20944/how-can-i-find-the-number-of-files-on-a-filesystem # 用 df 命令进行计算
- http://stackoverflow.com/questions/9157138/recursively-counting-files-in-a-linux-directory
- http://stackoverflow.com/questions/3702104/find-the-number-of-files-in-a-directory
=END=