lsof – 仅限制输出到物理文件 – 如何?

lsof – 仅限制输出到物理文件 – 如何?

我如何告诉 lsof 我只需要列出物理文件(不是套接字,不是 TCP/IP 连接,只有物理文件)?

答案1

刚刚浏览了一些手册页,看来您使用了以下命令:

sudo lsof /

这将列出 / 目录中所有打开的文件,也就是 Linux 文件系统上的所有内容。刚刚测试过,它只显示 REG 和 DIR。

更多示例:

lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /

0-999 将其限制为具有文件描述符编号的文件。

答案2

可能有一个开关,但如果您不介意通过 grep 进行过滤,您可以这样做sudo lsof | egrep 'REG|DIR',假设“物理文件”是指常规文件和目录。

请参阅手册页的 OUTPUT :: TYPE 部分,man lsof了解该列可能存在的所有类型。

答案3

这是我所做的并且对我来说非常有效:

lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u

选项-F nlsof导致它只打印出名称打开的文件。每个包含打开文件名称的输出行都将以单个字符开头n紧接着姓名常规的files 始终是文件的绝对、完全限定名称。 将grep ^n/仅选择名称以 开头的行/(表示绝对、完全限定的文件名);从而消除诸如开放端口、套接字、管道(如 FIFO)等。 将cut -c2-消除第一个字符,n,仅留下文件名。 最后,sort -u将消除任何重复条目。

需要注意的是,这将包括不常规的只要其名称以 开头/。例如,所有以以下内容开头的文件都将包含在内:

  • /dev
  • /进程
  • /系统

可能还有其他内容,具体取决于您的操作系统。

答案4

如果您使用lsof /它,它将仅列出直接安装在 / 下的文件系统上的打开文件 - 也就是说,如果您将 /home 安装在 / 下,则其内容将被忽略。我尝试了 lsof 的各种选项组合,但都存在问题。我能想到的最好的方法是:

lsof `readlink -f /dev/block/*`

这使用 readlink -f 来获取所有块设备并将它们作为列表提供到搜索。lsof 会忽略未安装的块设备。

如果您有任何其他选项来限制搜索,例如 pid,请记住以-aAND 结尾 lsof 命令,并将它们与块设备列表进行连接:

lsof -p 982482 -a `readlink -f /dev/block/*`

相关内容