lsof-仅将输出限制为物理文件-如何?


30

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


首先,您需要确定所需的功能。说“物理文件”太笼统了。lsof将为您提供已使用文件描述符打开的文件。它将为您提供线程已将其作为内存映射文件打开的文件。它将为您提供已由过程打开的库文件。所有这些都是物理文件,但是它们的使用方式不同。
Michael Martinez

Answers:


37

只是浏览了一些手册页,似乎您使用了以下命令:

sudo lsof /

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

更多示例:

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

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


2
还将包括FIFO。
凯尔·布​​兰特

1
漂亮又简单。如果只需要最后一列,则可以附加|。awk {'print $ 9'}有趣。我的输出也没有得到fifo。Fedora 12的和CentOS 5.3
egorgry

CentOS 5.2和Ubuntu 9.04为我返回了fifo,可能会有所变化,但是您确定有fifos吗?我会先尝试一下,并确保它在那里,然后再尝试/
凯尔·勃兰特

另外,我只是在挑剔,听起来好像他只是不想要噪音,而且可能不会有太多的fifo。
凯尔·布​​兰特

4
lsof /仅包含根文件系统上的文件。如果安装了多个文件系统,它们将不会出现在输出中。我发现最好的方法是只使用grep。
詹姆斯

9

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

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


24
可能会有一个切换,但是联机帮助页上的内容就像某人的博士学位论文一样……:)
Cawflands 2010年

1
是的... lsof人非常难以阅读...; p)
弗拉迪斯拉夫·拉斯特鲁斯尼(Fladislav Rastrusny

对该评论+1。:)
egorgry 2010年

在具有足够客户端的vpn服务器上,lsof将不会返回,因此对于我来说,无法选择gread
Ohad Cohen

如果您限制寻找的内容,@ OhadCohen lsof将返回。参见联机帮助页中的“ FD”(mem,cwd,pd等)
Michael Martinez

2

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

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

-F n选项lsof将导致它只能打印出名字的打开的文件。每一个具有打开文件名称的输出行都将以单个字符n开头,后跟名称常规文件将始终是文件的绝对完整名称。该grep ^n/会只选择与起始的名称那些线/(指绝对的,完全合格的文件名); 这样就消除了诸如打开端口,套接字,管道(如FIFO)之类的东西。cut -c2-会消除第一个字符n,而只留下文件名。最后,sort -u它将消除所有重复的条目。

请注意,只要文件名以a开头,它们将包括不规则的文件/。例如,将包括以下所有文件:

  • / dev
  • / proc
  • / sys

可能还有其他取决于您的操作系统。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.