详解Linux lsof命令:列出当前系统打开的文件

  • Post category:Linux

下面是Linux lsof命令的详细作用与使用方法:

一、lsof命令的作用

lsof是一个用于列出系统打开文件的工具,它能够列出所有被打开的文件,以及每个文件被哪些进程所使用。通过lsof命令,我们可以快速查找出哪些文件被进程所占用,以及哪些进程打开了哪些文件。lsof命令的基本操作为:对被打开的各种文件进行查询、统计和输出,特别是对TCP、UDP等网络文件,其中提供的TCP网络连接查询功能非常强大。

二、lsof命令的使用方法

lsof命令的语法为:

lsof [参数] [文件或目录名]

使用lsof命令列出所有打开的文件:

lsof

使用lsof命令查看某个进程所打开的所有文件:

lsof -p 进程号

使用lsof命令查看那些TCP端口被进程所占用:

lsof -i TCP

使用lsof命令查看那些UDP端口被进程所占用:

lsof -i UDP

使用lsof命令查看那些文件被某个用户所占用:

lsof -u 用户名

使用lsof命令查看那些文件被某个程序所占用:

lsof -c 程序名

可以使用通配符来匹配文件名:

lsof /mnt/*

三、lsof命令的示例

  1. 查看Nginx占用的80端口信息
lsof -i:80

输出结果:

COMMAND  PID     USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nginx   1114     root    6u  IPv4 92448786      0t0  TCP *:http (LISTEN)
nginx   1115 nginx 6u IPv4 92448786      0t0 TCP *:http (LISTEN)
nginx   1116 nginx 6u IPv4 92448786      0t0 TCP *:http (LISTEN)

从中可以看出,Nginx正在监听80端口。

  1. 查看当前用户所打开的文件列表
lsof -u $(whoami)

输出结果:

COMMAND    PID     USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
bash     15034    user1  cwd       DIR              253,2     4096 424673177 /home/user1
bash     15034    user1  rtd       DIR              253,0     4096          2 /
bash     15034    user1  txt       REG              253,2  1112208 368746284 /bin/bash
bash     15034    user1  mem       REG              253,0  3235144   3577507 /lib/x86_64-linux-gnu/libc-2.27.so
...

上述结果中,我们可以看到当前用户打开的部分文件。