我们如何计算/列出特定程序/命令打开的所有文件?

我们如何计算/列出特定程序/命令打开的所有文件?

我们可以仅列出由特定 PID 打开的文件,如下所示

lsof -p 1000
lsof -p 1000 | wc -l

我们如何列出/统计特定程序/命令(例如 java)打开的文件?

如果我们能够对每个程序打开的文件数量进行分组,那就更好了。我想检查哪些程序打开的文件数量较多。

我想要类似的东西

lsof -c "java" # -c is an imaginary argument similar to -p for process

我使用Ubuntu 20.04。

答案1

我认为在 lsof 上实现这样的事情没有争议,而且我不知道 lsof 二进制文件上有哪些可用的标志。
我认为你可以用这样的东西来实现你想要的,也许用“grep java”替换头部:

lsof | awk '{print $1}' | sort | uniq -c | sort -rn | head


拉索夫:基本上我列出了所有打开的文件
awk '{打印$1}':仅打印第一列,即进程名称
种类:您需要在应用 uniq 之前进行排序,否则它将分割计数,因此 java 可能会出现多次,具体取决于 lsof 打印的顺序。
优衣库-c:按进程名称和计数行进行分组
最后 2 个是为了可读性。

这样做的问题是所有的java实例都会被组合起来,我想你可以对PID应用相同的逻辑,然后通过PID过滤你的java实例和子进程。

希望能帮助到你。

相关内容