当前位置: 首页 > news >正文

详解lsof

lsof (List Open Files) 是一个强大的命令行工具,用于列出当前系统中被进程打开的文件。由于在类 UNIX 系统中,几乎所有的东西都可以被视为文件,包括常规文件、目录、设备文件、网络套接字等,因此 lsof 可以用于监视文件使用情况、调试、系统维护和安全性检查。

基本语法:

lsof [options] [file | directory | device]

常见用法:

1. 列出所有打开的文件
lsof

这会列出系统上所有进程打开的文件。输出信息较多,通常会结合其他选项或命令来缩小范围。

2. 查看特定用户打开的文件
lsof -u 用户名

例如,查看用户 alice 打开的文件:

lsof -u alice
3. 查看某个进程的打开文件
lsof -p 进程ID

例如,查看 PID 为 1234 的进程打开的文件:

lsof -p 1234
4. 列出某个文件或目录被哪些进程打开
lsof 文件路径

例如,查看 /var/log/syslog 被哪些进程打开:

lsof /var/log/syslog
5. 查找打开某个端口的进程
lsof -i :端口号

例如,查看哪个进程正在使用端口 80:

lsof -i :80

或者查找正在使用所有网络接口的 TCP 连接:

lsof -i tcp
6. 查找使用网络的进程
lsof -i

列出所有通过网络连接打开的文件,包括 TCP 和 UDP 连接。

7. 查找某个协议的网络连接
lsof -i tcp lsof -i udp

例如,列出所有 TCP 连接:

lsof -i tcp
8. 查看某个设备上的进程
lsof /dev/sda1

这将显示访问 /dev/sda1 设备的所有进程。

9. 查找已删除但仍被使用的文件
lsof +L1

有时文件被删除但仍被某些进程占用,这个命令可以帮助找出此类文件。

10. 列出某个进程组中的文件
lsof -g 进程组ID
11. 过滤出特定命令打开的文件
lsof -c 命令名

例如,列出所有由 nginx 打开的文件:

lsof -c nginx
12. 列出某个目录中的所有打开文件
lsof +D 目录路径

例如,列出 /var/log 目录下所有文件被哪些进程打开:

lsof +D /var/log

输出字段解释:

  • COMMAND:打开文件的进程名。
  • PID:进程的 ID。
  • USER:进程所有者的用户名。
  • FD:文件描述符,标识进程如何访问文件(例如,cwd 表示当前工作目录,txt 表示程序代码,mem 表示内存映射文件)。
  • TYPE:文件类型(如 DIR 表示目录,REG 表示常规文件,CHR 表示字符设备,FIFO 表示命名管道等)。
  • DEVICE:文件所在的设备编号。
  • SIZE/OFF:文件的大小或文件偏移量。
  • NODE:文件的节点编号。
  • NAME:文件名或路径。

常用选项:

  • -n:不进行 DNS 解析,提升运行速度。
  • -P:不将端口号转换为服务名称,直接显示端口号。
  • -r:重复运行 lsof 命令,通常用于监视文件或网络连接的变化。
  • +D:递归列出目录中打开的文件。
  • +L1:列出已被删除但仍被进程使用的文件。

示例场景:

查找正在使用的端口和进程:
lsof -i :8080

用于检测是否有进程占用了某个服务端口。

查找进程占用的文件:
lsof -p 1234

查看特定进程所使用的文件,可以用于分析应用程序资源占用情况。

查找文件系统上的删除文件:
lsof +L1

用于解决磁盘空间问题,确认是否有删除的文件仍然被进程占用。

组合使用:

lsof 常与其他命令一起使用,例如使用 grep 过滤结果:

lsof | grep "/var/log"

这样可以查找特定路径下的打开文件。

总结:

lsof 是非常灵活且功能强大的工具,可以用于检测文件、网络连接、设备和进程之间的关系。通过合理组合选项,可以在日常系统监控、排错和安全审计中极大提升效率。


http://www.mrgr.cn/news/32968.html

相关文章:

  • 嵌入式课程day14-C语言指针进阶
  • [OpenGL]使用OpenGL实现硬阴影效果
  • rust智能指针
  • Qt_day10_程序打包(完结)
  • 在 Service Worker 中caches.put() 和 caches.add()/caches.addAll() 方法他们之间的区别
  • 计算机网络(10)网络性能
  • NXP官方或正点原子mfgtool下载系统报错initialize the library falied error code:29
  • 【读书笔记-《网络是怎样连接的》- 0】全书整体结构
  • 直通滤波-PassThrough Filter-原理-代码实现
  • 数据结构——二叉搜索树
  • grbl移植日志第二天移植串口数据接收
  • 图像锐化的算法总结
  • LeetCode --- 139双周赛
  • python:给1个整数,你怎么判断是否等于2的幂次方?
  • KVM环境下制作ubuntu qcow2格式镜像
  • Java面试——集合篇
  • Python基于TensorFlow实现Transformer分类模型(Transformer分类算法)项目实战
  • C语言的一些小知识(四)
  • 跨游戏引擎的H5渲染解决方案(腾讯)
  • 美学心得(第二百六十七集) 罗国正
  • 数据结构之顺序表
  • 【数学二】无穷小量定义、性质、比较
  • Java异常架构与异常关键字
  • MySQL基础基础篇 - SQL
  • python有main函数吗
  • C++ 单例模式