【发布时间】:2018-05-03 08:32:33
【问题描述】:
我需要在 Linux(SUSE 和 RHEL)中使用命令来查找打开文件的列表,因为“lsof”命令需要时间来提供输出。即使“lsof -n”命令也需要很多时间。我们有任何替代“lsof”的命令吗?
谢谢, 僧团
【问题讨论】:
-
你是如何运行
lsof命令的?
我需要在 Linux(SUSE 和 RHEL)中使用命令来查找打开文件的列表,因为“lsof”命令需要时间来提供输出。即使“lsof -n”命令也需要很多时间。我们有任何替代“lsof”的命令吗?
谢谢, 僧团
【问题讨论】:
lsof 命令的?
您可以从 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中的所有设备会花费大量时间
0.0.0.0),并且查询它们会导致超时。您可以通过使用-n 禁用 dns 解析部分来显着加速。
无论如何,扩展@ceving 的答案,您不仅可以查看打开的文件描述符列表,还可以查看映射到进程地址空间的文件列表 (cat /proc/<pid>/map)。
通常,如果您的进程运行速度非常慢,则
strace -f -tt -o sux <your command line>
将转储到文件sux 内核调用进程所做的事情,并带有时间戳。从本质上讲,您将能够跟踪这个过程究竟做了什么以及持续了多长时间。
【讨论】: