站内搜索

搜索

06-02 13:26
05-31 17:11

Linux查看信息工具-lsof

494

主题

45

点数

1224

积分

管理员

积分
1224

柴到了三倍冰淇淋无人之境【一阶】立华奏小樱(小丑装)⑨的冰沙

发表于 2025-3-12 02:15:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x

前言

lsof 是 List Open File 的缩写, 它主要用来获取被进程打开文件的信息,我们都知道,在Linux中,一切皆文件,lsof命令可以查看所有已经打开了的文件,比如: 普通文件,目录,特殊的块文件,管道,socket套接字,设备,Unix域套接字等等,同时,它还可以结合 grep 以及 ps 命令进行更多的高级搜索

安装命令

yum -y install lsof #Centos
apt -y install lsof #Ubuntu

常用参数

lsof | more 来分页显示命令输出结果

列 COMMAND 、PIDUSER 分别表示进程名、进程ID、所属用户

列 FD 是文件描述符,下面是可能的类型以及说明

FD 说明
cwd 当前目录
txt txt文件
rtd root目录
mem 内存映射文件

列 TYPE 是文件类型,下面是可能的值以及说明

TYPE 说明
DIR 目录
REG 普通文件
CHR 字符
a_inode Inode文件
FIFO 管道或者socket文件
netlink 网络
unknown 未知

列 DEVICE 表示设备ID

列 SIZE/OFF 表示进程大小

列 NODE 表示文件的Inode号

NAME 表示路径或者链接

  • 列出所有打开了的网络文件

    使用 lsof -i:端口号 可以获得所有在指定端口号上打开的文件

    例:

    lsof -i:22

    上面例子列出了所有在22号端口上打开的文件

    在服务器开发中,经常会部署一个网关或者代理程序,用来和客户端通讯,网关或者代理程序需要开放一个固定的端口供客户端连接用

    如果客户端连接不上网关或者代理程序,我们可以用上述命令检查网关或代理程序的端口是否开启,来排除因为端口关闭了导致连接不上网关的情况

  • 列出指定用户已打开的文件

    使用 -u 选项可以列出指定用户已经打开的文件,该选项后面可以接多个用户名,每个用户名之间用空格隔开,表示列出所有指定用户已打开的所有文件

    如果要排除指定用户已经打开的文件,可以在用户名前加 ^ 符号,下面的命令会列出除 tt用户外其他所有用户已打开了的文件

    lsof -u ^tt | more
  • 找出打开着但已被删除了的文件

    有这样一种场景,有一个服务正在往日志文件中写日志,这个时候,不小心把正在写入的日志文件删除了

    上面的场景中,日志文件虽然被删除了,但是文件仍然是打开着的,它仍然占用文件系统的空间,我们可以结合 grep 命令找出这种打开着,但是已经被删除的文件

    lsof -u tt | grep deleted
  • 列出所有已经打开了的 ipv4 网络文件

    lsof -i 4
  • 列出所有已经打开了的 ipv6 网络文件

    lsof -i 6
  • 列出使用了指定协议(TCP/UDP) 的文件

    lsof -i TCP | more

    使用 lsof -i TCP:3306 列出使用了TCP 协议并且端口为3306的文件

    lsof -i TCP:3306

    使用 lsof -i TCP:1-1024 列出使用了TCP协议并且端口范围为 1 到 1024 的文件

    lsof -i TCP:1-1024
  • 列出目录中所有打开的文件

    可以使用 lsof命令列出指定目录中的所有打开文件

    列出 data 目录中打开的文件

    lsof +D ./data/

    +D 选项会列出一个目录和其子目录中打开的文件,而 +d 选项只会列出当前目录下已打开的文件

  • 列出指定进程ID打开的文件

    进程ID是操作系统进程的唯一标识,以下命令从可以知道这个进程ID对应的进程名称

    lsof -p 1053

    上述命令中,-p 选项后面可以指定多个进程ID,每个进程ID之间用逗号分隔,如果想排除掉某个进程打开的文件,可以在该进程ID前面加上 ^符号

    lsof -p 1,2,3,^4
  • 杀死指定用户的所有进程

    前面介绍了列出指定用户所有打开的文件,我们可以组合 kill 命令一起使用,实现杀死指定用户的所有进程的功能,具体的命令如下

    kill -9 lsof -t -u tt
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入社群

加入社群

Pixtech

Powered by Pixtech

© 2025 Pixtech Team.