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:是什么在监听端口3000lsof -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上最好用的活动监视器替代品,或者浏览术语表中的所有条目。