术语表/出问题的时候

lsof

又称:列出打开的文件

简要回答

lsof是一条“终端”命令,会列出每个进程打开的文件、文件夹和网络连接。在Mac上,它能回答哪个进程在使用某个文件、是什么让磁盘无法推出,以及是什么在监听某个端口。

lsof是list open files(列出打开的文件)的缩写,macOS自带。后面什么都不加就运行,它会打印成千上万行,每个打开的文件一行,所以几乎总要给它一个文件、文件夹、磁盘或端口来缩小范围。

不加sudo时,它只显示你自己的进程。加上之后,macOS自己的进程也会包括在内,比如“聚焦”的进程。

值得了解的lsof命令

每条命令都用一个路径、端口或进程来缩小范围。

  • lsof /path/to/file:是什么打开了这个文件
  • sudo lsof /Volumes/NAME:某个磁盘上打开的所有东西
  • lsof +D /path/to/folder:某个文件夹里打开的所有东西
  • lsof -nP -iTCP:3000 -sTCP:LISTEN:是什么在监听端口3000
  • lsof -p <PID>:某个进程打开的每个文件

如何读懂输出

COMMAND是进程名,最多显示九个字符;PID是进程号;USER是运行它的用户。FD说明文件是怎样打开的:数字后跟r表示读取,w表示写入,u表示两者都有;cwd表示进程工作所在的文件夹,txt表示程序本身及它载入的库。NAME是路径或网络地址。

为什么lsof很慢,或会打印警告

用+D查看一个大文件夹时,它会读取其中的每个文件,可能要花几分钟。不用sudo时,出现读不了某些文件的警告是正常的。

常见问题

lsof是什么的缩写?

List open files,即列出打开的文件。

Mac上装有lsof吗?

装有。它是macOS自带的,位于/usr/sbin/lsof。

为什么lsof什么都不显示?

你自己的进程都没有打开这个文件。加上sudo运行,即可包括macOS和其他用户运行的进程。

相关条目

分步指南:磁盘推不出。

想找比活动监视器更好的工具?请看Mac上最好用的活动监视器替代品,或者浏览术语表中的所有条目。