lsof命令常见使用方法

lsof命令列举和文件相关的信息
在linux系统中一切皆文件,所以和在linux上访问文件并不只是可以访问储存在磁盘上的文件还包括其他的很多东西,像是设备或者socket信息。

在本片文章中使用的“文件”的概念都是依据上面的解释

命令列表

  • -a 列出打开文件存在的进程
  • -c <进程名> 列出指定进程所打开的文件
  • -g 列出GID号进程详情
  • -d <文件描述符> 列出占用该文件号的进程(关于文件描述符号,在下面有解释)
  • +d <目录> 列出目录下被打开的文件
  • +D <目录> 递归列出目录下被打开的文件
  • -n <目录> 列出使用NFS的文件
  • -n 不进行域名转换
  • -i <条件> 列出符合条件的进程。(4、6、协议、:<端口号>、 @ip )
  • -p <进程号> 列出指定进程号所打开的文件
  • -u 列出UID号进程详情
  • -h 显示帮助信息
  • -v 显示版本信息
  • -u <用户> 列出该用户的所有进程

例子

查看占用的所有进程

# -c 命令查看vscode进程占用的所有文件, -i 命令显示所有建立的socks链接 -a 表示对所有命令的输出取并集
lsof -c code -i -a

查看占用的文件

# 查看占用该文件的所有进程
lsof <文件>
# 查看占用bash文件的所有进程
lsof /bin/bash

# 查看占用该文件夹的所有进程
lsof +D <文件夹>
# 查看占用/usr/bin的所有进程
lsof +D /usr/bin

# 查看占用某个端口的进程
lsof -i :<端口号>
lsof -i :80

你使用fuser命令也可以查看某个文件是否被进程使用。这个命令是提供在核心的包中,所以不需要额外下载

# 会输出一个进程号
fuser <文件名>

文件描述符号

  • 0:标准输入(stdin) 用作读取数据
  • 1:标准输出(stdout) 用作输出数据
  • 2:标准错误(stderr) 用作输出错误
# 查看所有使用标准输出的文件
lsof -d 1

查看systemd的方法


sudo lsof -i :9090
# 下面是命令输出结果
COMMAND PID USER FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd   1 root 67u  IPv6  11936      0t0  TCP *:websm (LISTEN)

对于上面的lsof命令输出的是systemd,而并不是实际使用这个端口的cockpit这个进程,所以我们需要使用到systemctl命令去他里面找这个端口对应的进程`

systemctl list-sockets
# 得到的结果如下(省略了部分内容)
LISTEN                            UNIT                            ACTIVATES
[::]:9090                         cockpit.socket                  cockpit.service

下面是使用的例子

查看命令目录下的所有命令,都被哪些进程使用了

查看9090端口被什么应用占用了

posted @ 2023-12-20 13:54  index72  阅读(312)  评论(0)    收藏  举报