我需要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
等待了很多时间,因为
- 扫描
/dev
中的所有设备需要花费大量时间 - 它还需要花费大量时间从它找到的网络套接字的所有端点获取反向dns查询。其中许多没有有效的revdns(如
0.0.0.0
),查询它们会导致超时 - 它是作为一个单线程的应用程序来实现的,而不是面向事件的应用程序
您可以通过使用-n
禁用dns解析部分来显著加速它。
无论如何,扩展@ceving的答案,您不仅可以查看打开的文件描述符列表,还可以查看映射到进程地址空间(cat /proc/<pid>/map
)的文件列表。
通常,如果进程运行速度慢得惊人,
strace -f -tt -o sux <your command line>
将转储到文件sux
中,内核调用进程所做的操作,并带有时间戳。从本质上讲,您将能够跟踪这个过程到底做了什么以及持续了多久。