Vladislav Rastrusny Asked: 2010-01-27 06:13:04 +0800 CST2010-01-27 06:13:04 +0800 CST 2010-01-27 06:13:04 +0800 CST lsof - 仅将输出限制为物理文件 - 如何? 772 我如何告诉 lsof 我只需要列出物理文件(不是套接字,不是 TCP/IP 连接,只有物理文件)? linux lsof 5 个回答 Voted Best Answer Dave Drager 2010-01-27T06:32:33+08:002010-01-27T06:32:33+08:00 刚刚浏览了一些手册页,您似乎使用了以下命令: sudo lsof / 这将列出 / 目录中所有打开的文件,这是 Linux 文件系统上的所有内容。刚刚测试,它只显示 REG 和 DIR。 更多示例: lsof -a -d 0-999 -c <command name> / lsof -a -d 0-999 -p <pid> / 0-999 将其限制为具有文件描述符编号的文件。 Kyle Brandt 2010-01-27T06:16:36+08:002010-01-27T06:16:36+08:00 可能有一个开关,但如果你不介意通过 grep 过滤它,你可以这样做sudo lsof | egrep 'REG|DIR',假设“物理文件”是指常规文件和目录。 man lsof有关该列中可能存在的所有类型,请参见手册页的 OUTPUT :: TYPE 部分。 Greg Barrett 2018-09-21T14:10:15+08:002018-09-21T14:10:15+08:00 这就是我所做的,对我来说非常有效: lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u -F n选项将lsof导致它只打印打开文件的名称。每个具有打开文件名称的输出行都以单个字符n开头,后跟name。常规文件将始终是文件的绝对、完全限定名称。将grep ^n/仅选择名称以 a 开头的那些行/(表示绝对的、完全限定的文件名);从而消除诸如开放端口、套接字、管道(如 FIFO)等之类的东西。cut -c2-将消除第一个字符 the n,只留下文件名。最后,sort -u将消除任何重复的条目。 需要注意的是,这将包括不规则的文件,只要它们的名称以/. 例如,将包含以下开头的所有文件: /dev /proc /系统 可能还有其他取决于您的操作系统。 Horror Vacui 2021-04-29T02:03:04+08:002021-04-29T02:03:04+08:00 如果您使用lsof /它,它只会列出直接安装在 / 下的文件系统上的打开文件 - 也就是说,如果您将 /home 安装在 / 下,它的内容将被忽略。我尝试了 lsof 的各种选项组合,但都有问题。我能想到的最好的是: lsof `readlink -f /dev/block/*` 这使用 readlink -f 获取所有块设备并将它们作为搜索列表提供。lsof 忽略未安装的那些。 如果您有任何其他选项来限制搜索,例如 pid,请记住以 to 结束 lsof 命令-a并将它们与块设备列表一起: lsof -p 982482 -a `readlink -f /dev/block/*` no_ripcord 2020-04-19T09:38:47+08:002020-04-19T09:38:47+08:00 这在 mac os 上运行良好: $ lsof / 我喜欢这样,因为它很快。如果指定 -p 会更快 $ lsof -a -p <comma,sep,pids> /
刚刚浏览了一些手册页,您似乎使用了以下命令:
这将列出 / 目录中所有打开的文件,这是 Linux 文件系统上的所有内容。刚刚测试,它只显示 REG 和 DIR。
更多示例:
0-999 将其限制为具有文件描述符编号的文件。
可能有一个开关,但如果你不介意通过 grep 过滤它,你可以这样做
sudo lsof | egrep 'REG|DIR'
,假设“物理文件”是指常规文件和目录。man lsof
有关该列中可能存在的所有类型,请参见手册页的 OUTPUT :: TYPE 部分。这就是我所做的,对我来说非常有效:
-F n
选项将lsof
导致它只打印打开文件的名称。每个具有打开文件名称的输出行都以单个字符n开头,后跟name。常规文件将始终是文件的绝对、完全限定名称。将grep ^n/
仅选择名称以 a 开头的那些行/
(表示绝对的、完全限定的文件名);从而消除诸如开放端口、套接字、管道(如 FIFO)等之类的东西。cut -c2-
将消除第一个字符 then
,只留下文件名。最后,sort -u
将消除任何重复的条目。需要注意的是,这将包括不规则的文件,只要它们的名称以
/
. 例如,将包含以下开头的所有文件:可能还有其他取决于您的操作系统。
如果您使用
lsof /
它,它只会列出直接安装在 / 下的文件系统上的打开文件 - 也就是说,如果您将 /home 安装在 / 下,它的内容将被忽略。我尝试了 lsof 的各种选项组合,但都有问题。我能想到的最好的是:这使用 readlink -f 获取所有块设备并将它们作为搜索列表提供。lsof 忽略未安装的那些。
如果您有任何其他选项来限制搜索,例如 pid,请记住以 to 结束 lsof 命令
-a
并将它们与块设备列表一起:这在 mac os 上运行良好:
我喜欢这样,因为它很快。如果指定 -p 会更快