lsof是list open files的简称,用于列出系统中所有打开的文件。由于在linux系统下,所有 对象都是文件,所以这个指令十分有用。

下面就给出了几种常见的用法,需要注意的是有些指令需要root权限执行。

1. 查看打开指定文件的进程

lsof /var/syslog.log

2. 查看指定目录下打开的文件

lsof +D /home/

3. 查看以指定进程名所有打开的文件

使用 -c 命令能够查看指定进程名使用的文件,允许在一个命令行指令中使用多个 -c 参数。

lsof -c procname

4. 查看使用指定挂载点的进程

在停止挂载某个目录时,系统会告诉我们“设备资源繁忙”,所以我们需要找出使用挂载点的程序,终止这些进程,解除目录的占用状态。

lsof /home


lsof +D /home/

5. 查看指定用户打开的文件

lsof -u username

另外还可以进行反向过滤,在输出中不显示指定用户的文件,语法如下。

lsof -u ^username

6. 查看指定进程打开的文件

lsof -p pid

7. 终止属于某个用户的所有进程

kill `lsof -t -u username`

相似的,可以使用 -t 参数打印使用某个文件的进程id。

lsof -t /var/log

8. 让结果同时满足多个选项

默认情况下,多个参数是以或(or)进行操作的,可以使用 -a 选项让结果同时满足多个参数。

lsof -a -u username -c procname

9. 让命令重复执行

可以使用 -r 参数让命令重复执行。以下命令会每隔5s执行一次,每次的执行结果会用 “====” 分割开。

lsof -u username -c procname -a -r5

10. 列出所有的网络连接

lsof -i

让结果中的ip地址和端口号显示数字而不是英文别名

lsof -i -Pn

显示所有的 AF_UNIX socket

lsof -U

11. 列出指定进程使用的网络连接

lsof -i -a -p pid

12. 查看指定端口上的监听

lsof -i :portid

13. 列出所有tcp和udp连接

lsof -i tcp; lsof -i udp

14. 列出所有的网络文件系统

网络文件系统(network file system)

lsof -N -u username