Linux 中"lsof"命令的替代方法



我需要Linux(SUSE&RHEL)中的一个命令来查找打开的文件列表,因为"lsof"命令需要时间才能给出输出。即使是"lsof-n"命令也需要花费大量时间。除了"lsof",我们还有其他命令吗?

谢谢,Sanghamitra

您可以从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

简而言之,使用lsof -n


lsof等待了很多时间,因为

  1. 扫描/dev中的所有设备需要花费大量时间
  2. 它还需要花费大量时间从它找到的网络套接字的所有端点获取反向dns查询。其中许多没有有效的revdns(如0.0.0.0),查询它们会导致超时
  3. 它是作为一个单线程的应用程序来实现的,而不是面向事件的应用程序

您可以通过使用-n禁用dns解析部分来显著加速它。

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


通常,如果进程运行速度慢得惊人,

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

将转储到文件sux中,内核调用进程所做的操作,并带有时间戳。从本质上讲,您将能够跟踪这个过程到底做了什么以及持续了多久

相关内容

  • 没有找到相关文章

最新更新