我正在寻找一个命令,可以列出每个用户打开的文件数,按降序排列。
例如lsof -u postgres | wc -
只会为 postgres 用户列出它们,但我确实想看看我可能会在哪个用户上丢失处理程序。
注意:有些问题可能适用于 PID 而不是用户名,但我仍然在寻找一行代码。
答案1
我运行了 Warren Lavallee 的脚本,发现它很难解释。
相反,我扩展了原始脚本,逐步遍历所有用户,得到以下内容:-
for f in $(sed</etc/passwd 's/:.*$//g'); do ( echo -n $f ' '; lsof -u $f 2>/dev/null | wc -l ); done | grep -v ' 0$'
这在 Ubuntu 14.04 上工作正常。最后grep
删除了零条目,因为很多用户没有活动进程。您还可以| sort -rnk 2
在命令末尾添加以按文件计数降序排序。
您需要处于 root shell 中,以确保您能看到所有用户的文件。
答案2
如果您对管道持开放态度,那么这样怎么样:
lsof | perl -pe 's/\s\s+/ /g' | cut -d' ' -f3 | grep -v ^USER | sort | uniq -c | sort -rn
我在 MacOS 10.10.2(Yosemite)、OEL 6.6 和 Ubuntu 10.04.01 上进行了测试。