替代" lsof" Linux中的命令

时间:2017-11-20 07:06:54

标签: linux shell redhat suse

我需要在Linux(SUSE& RHEL)中使用命令来查找打开文件的列表,因为" lsof"命令是花时间给出输出。即使" lsof -n"命令也需要很多时间。我们对" lsof"?

有任何替代命令

谢谢, 僧伽蜜多

2 个答案:

答案 0 :(得分:1)

您可以从proc文件系统中读取打开的文件。

for p in /proc/{0..9}*; do
  i=$(basename "$p")
  for f in "$p"/fd/*; do
    l=$(readlink -e "$f")
    if [ "$l" ]; then
      echo "$i: $l"
    fi
  done
done | sort -u | sort -n

答案 1 :(得分:1)

简而言之,请使用lsof -n

lsof等了很多,因为

  1. 使用大量时间扫描/dev
  2. 中的所有设备
  3. 它还花费大量时间从它找到的网络套接字的所有端点获取反向DNS查询。其中许多没有有效的revdns(如0.0.0.0),并查询结果超时。
  4. 它是一个单线程,而不是面向事件的应用程序。
  5. 您可以通过使用-n禁用dns解析部分来显着加速。

    无论如何,扩展@ceving的答案,您不仅可以查看已打开文件描述符的列表,还可以查看映射到进程地址空间(cat /proc/<pid>/map)的文件列表。 / p>

    通常情况下,如果您的流程运行得非常缓慢,那么

    strace -f -tt -o sux <your command line>
    

    将转储到文件sux中,内核通过时间戳调用进程执行的操作。从本质上讲,您将能够跟踪,这个过程究竟做了什么以及持续多长时间