进程与文件的关系--lsof

2023-05-16

lsof命令

作用:

1.列出指定文件被哪些进程打开(此处的文件是广义上的文件,可以表示linux上的一切东西)
2.列出指定端口被哪些进程所占用
3.根据用户或组来查询进程
4.根据文件描述符来查找进程
5.根据字符串来过滤进程
6.遍历某个目录来查找进程
7.扩展:恢复误删除的文件

本文使用到的选项
-c:根据字符串来搜索进程
-p:列出指定进程号所打开的文件
-a:合并多个选项
-g:列出相应组的进程所打开的文件
+d:列出指定目录下所有文件的打开情况
-n:不将ip转换为hostname
-i:列出占用指定端口或协议的进程

本文拓展
怎样恢复删除的文件


选项及用法:
-c:根据字符串来搜索进程

用法:
lsof -c string # 列出以字符串string开头的命令所打开的文件
~]# lsof -c sys   ##列出以sys开头的进程,此输出结果已被省略
~]# lsof -c redis  ##列出包含redis的进程
COMMAND    PID  USER   FD      TYPE             DEVICE  SIZE/OFF     NODE NAME
redis-ser 4233 redis  cwd       DIR              253,0        22 38780782 /var/lib/redis
redis-ser 4233 redis  rtd       DIR              253,0       288       64 /
redis-ser 4233 redis  txt       REG              253,0    975208    83904 /usr/bin/redis-server
redis-ser 4233 redis  mem       REG              253,0 106070960 33797329 /usr/lib/locale/locale-archive
redis-ser 4233 redis  mem       REG              253,0   2173512 33797336 /usr/lib64/libc-2.17.so
redis-ser 4233 redis  mem       REG              253,0    144792 33797370 /usr/lib64/libpthread-2.17.so
redis-ser 4233 redis  mem       REG              253,0    212096 38780776 /usr/lib64/libjemalloc.so.1
redis-ser 4233 redis  mem       REG              253,0     19776 33797342 /usr/lib64/libdl-2.17.so
redis-ser 4233 redis  mem       REG              253,0   1139680 33797345 /usr/lib64/libm-2.17.so
redis-ser 4233 redis  mem       REG              253,0    164240 33797328 /usr/lib64/ld-2.17.so
redis-ser 4233 redis    0r      CHR                1,3       0t0     5999 /dev/null
redis-ser 4233 redis    1u     unix 0xffff880015f48800       0t0    27946 socket
redis-ser 4233 redis    2u     unix 0xffff880015f48800       0t0    27946 socket
redis-ser 4233 redis    3u  a_inode                0,9         0     5995 [eventpoll]
redis-ser 4233 redis    4u     IPv4              28618       0t0      TCP node1.xjwlearn.com:6379 (LISTEN)

>>从输出结果中我们可以查看到包含redis字符串的所有进程信息,包括进程号,用户,inode号以及打开的文件路径等

-p:列出指定进程号所打开的文件

用法:
lsof -p PID #列出进程号为PID的进程所打开的文件
lsof -p PID1,PID2,...,PIDn
~]# lsof -p 4233 ##根据上面的结果我们知道redis的进程号为4233,此方式与上面的结果是完全一样的
redis-ser 4233 redis  cwd       DIR              253,0        22 38780782 /var/lib/redis
redis-ser 4233 redis  rtd       DIR              253,0       288       64 /
redis-ser 4233 redis  txt       REG              253,0    975208    83904 /usr/bin/redis-server
redis-ser 4233 redis  mem       REG              253,0 106070960 33797329 /usr/lib/locale/locale-archive
redis-ser 4233 redis  mem       REG              253,0   2173512 33797336 /usr/lib64/libc-2.17.so
redis-ser 4233 redis  mem       REG              253,0    144792 33797370 /usr/lib64/libpthread-2.17.so
redis-ser 4233 redis  mem       REG              253,0    212096 38780776 /usr/lib64/libjemalloc.so.1
redis-ser 4233 redis  mem       REG              253,0     19776 33797342 /usr/lib64/libdl-2.17.so
redis-ser 4233 redis  mem       REG              253,0   1139680 33797345 /usr/lib64/libm-2.17.so
redis-ser 4233 redis  mem       REG              253,0    164240 33797328 /usr/lib64/ld-2.17.so
redis-ser 4233 redis    0r      CHR                1,3       0t0     5999 /dev/null
redis-ser 4233 redis    1u     unix 0xffff880015f48800       0t0    27946 socket
redis-ser 4233 redis    2u     unix 0xffff880015f48800       0t0    27946 socket
redis-ser 4233 redis    3u  a_inode                0,9         0     5995 [eventpoll]
redis-ser 4233 redis    4u     IPv4              28618       0t0      TCP node1.xjwlearn.com:6379 (LISTEN)

-a:合并多个选项
注意:-a的使用方式很简单,只需要在添加-a选项后陆续添加其他的几个选项即可

~]# lsof -a -c redis  -u redis -d mem ##列出包含字符串redis并且文件描述符为mem且用户为redis的进程所打开的文件
COMMAND    PID  USER  FD   TYPE DEVICE  SIZE/OFF     NODE NAME
redis-ser 4233 redis mem    REG  253,0 106070960 33797329 /usr/lib/locale/locale-archive
redis-ser 4233 redis mem    REG  253,0   2173512 33797336 /usr/lib64/libc-2.17.so
redis-ser 4233 redis mem    REG  253,0    144792 33797370 /usr/lib64/libpthread-2.17.so
redis-ser 4233 redis mem    REG  253,0    212096 38780776 /usr/lib64/libjemalloc.so.1
redis-ser 4233 redis mem    REG  253,0     19776 33797342 /usr/lib64/libdl-2.17.so
redis-ser 4233 redis mem    REG  253,0   1139680 33797345 /usr/lib64/libm-2.17.so
redis-ser 4233 redis mem    REG  253,0    164240 33797328 /usr/lib64/ld-2.17.so

-g:列出相应组的进程所打开的文件

用法:
lsof -g GID  ##列出组号为GID的进程所打开的文件
~]# lsof -g 1000 ##列出组号为1000的进程所打开的文件

+d:列出指定目录下所有文件的打开情况

用法:
lsof +d directory
~]# lsof +d /etc
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF       NODE NAME
systemd     1 root   11r   REG    0,3        0 4026532025 /proc/swaps
lsof    10698 root    3r   DIR    0,3        0          1 /proc

注意:+d选项只能列出当前目录下的文件,子目录下的文件是不会被列出的,如若需要遍历所有文件,可以使用+D选项

-n与-i的组合使用:
-n:不将ip转换为hostname
-i:列出占用指定端口或协议的进程

用法:
lsof -i:port:根据端口查询
lsof -i tcp 查询tcp连接
lsof -i udp 查询udp连接
lsof -i tcp:22 查询占用tcp22号端口的进程
[root@docker fd]# lsof -i:22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    4231 root    3u  IPv4  28632      0t0  TCP *:ssh (LISTEN)
sshd    4231 root    4u  IPv6  28634      0t0  TCP *:ssh (LISTEN)
sshd    7875 root    3u  IPv4 108289      0t0  TCP node1.xjwlearn.com:ssh->192.168.99.1:62006 (ESTABLISHED)
[root@docker fd]# lsof -n -i:22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    4231 root    3u  IPv4  28632      0t0  TCP *:ssh (LISTEN)
sshd    4231 root    4u  IPv6  28634      0t0  TCP *:ssh (LISTEN)
sshd    7875 root    3u  IPv4 108289      0t0  TCP 192.168.99.100:ssh->192.168.99.1:62006 (ESTABLISHED)

列出文件或目录被哪些进程所使用:

lsof filename
lsof directory

lsof恢复误删除的文件
场景描述:应用程序正在对输出日志到文件a.log,此时若执行rm -f a.log,则此文件在系统中是不存在的,不能通过常规的命令去查看文件信息和内容,但是数据还是存储在磁盘。此时由于应用进程没有释放此文件,所以可以通获取此文件的描述符来恢复文件

~]# lsof deleted.filename   ##可显示出PID,FD,NUMBER等参数,这些参数可唯一确定一个文件,前提是此文件正在被某个进程使用
~]# cat /proc/PID/fd/NUMBER > somefile  ##将已经删除的文件重定向到somefile中
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进程与文件的关系--lsof 的相关文章

  • 步进电机控制与LCD显示L297与L298

    步进电机控制与LCD显示L297与L298 上次介绍了PWM和L298结合的电机调速 xff01 接下来介绍L297与L298结合的例子 xff01 PWM电机调速 下面是L297的简介 xff1a L297是步进电机专用控制器 xff0c
  • 变分自编码器(一):原来是这么一回事

    https kexue fm archives 5253 过去虽然没有细看 xff0c 但印象里一直觉得变分自编码器 xff08 Variational Auto Encoder xff0c VAE xff09 是个好东西 于是趁着最近看概
  • Linux 安装npm

    1 root 登录linux 2 cd usr loacl node 没有目录就自己创建一个 3 wget https npm taobao org mirrors node v4 4 7 node v4 4 7 linux x64 tar
  • DE1-SOC开发笔记

    verilog FPGA 采用verilog开发语言 xff0c 使用时序和组合逻辑 进行行为 xff0c 数据流 xff0c 结构建模 RTL级编程 xff0c 在实际板卡上面验证逻辑的正确性 sopc xff1a 软硬件结合的开发方式
  • 关于立创EDA使用的几点心得

    对于立创EDA 与AD仅为小白 xff0c 仅布过简单的双层板 xff0c 以下仅记录自己的几点心得 1 如果想要在立创商城 xff0c 嘉立创实现打板贴片一体化 xff0c 采用的普遍的两种方法 xff1a 立创EDA xff0c 有在线
  • 《当下即是生活》季羡林——读书笔记

    目录 书籍简介 经典摘录 三思而行 满招损 xff0c 谦受益 牵就与适应 睁一只眼 闭一只眼 论压力 论恐惧 难得糊涂 春色满寰中 槐花 书籍简介 作者季羡林 本书精选季羡林关于人生活法的散文 xff0c 阐述一个人怎样活在当下 xff0
  • Python装饰器

    Python的装饰器 decorator 可以说是Python的一个神器 xff0c 它可以在不改变一个函数代码和调用方式的情况下给函数添加新的功能 Python的装饰器同时也是Python学习从入门到精通过程中必需要熟练掌握的知识 小编我
  • Python学习笔记--带参数的装饰器

    带参数的装饰器 装饰器的副作用柯里化functools带参数的装饰器多参数小结 装饰器的副作用 def fn 39 39 39 this is fn 39 39 39 help fn 结果 xff1a Help on function fn
  • 六、51单片机之定时器/计数器_理论

    1 什么是定时器 计数器 定时器就是单片机设定一个时间间隔 xff0c 时间间隔到后通知单片机 例如设置100ms的定时器 xff0c 100ms后定时器通知单片机时间到了 1 定时器是单片机的一种内部外设 以前的单片机只有CPU 也就是只
  • 八、51单片机之蜂鸣器

    1 蜂鸣器的原理 蜂鸣器分为有源蜂鸣器和无源蜂鸣器 这里的 源 不是指电源 xff0c 而是指震荡源 1 1 无源蜂鸣器 1 早期蜂鸣器都是无源的 2 内部没有震荡电路 xff0c 无源蜂鸣器比有源蜂鸣器更便宜 3 无源蜂鸣器内部没有震荡源
  • CSS3实现loading效果

    前言 晚上躺床上刷视频的时候看到有个前端大佬写了一个loading xff0c 这是效果 xff1a loading 感觉也挺有意思哈 xff0c 要不自己也写一个 xff0c 学习 43 复习 两不误 但是又因为太晚了 xff0c 不想起
  • C#应用程序界面开发基础——窗体控制(2)——MDI窗体

    MDI窗体 单文档界面 xff08 SDI xff09 多文档界面 xff08 MDI xff09 MDI窗体的概念 MDI窗体 xff08 Multiple Document Interface xff0c 多文档界面 xff09 用于同

随机推荐

  • windows 10 + GTX1650 环境下基于TensorFlow的深度学习环境配置

    因论文需要 xff0c 简单的记录一个深度学习环境的配置过程 说明 xff1a 与广为应用的基于Anaconda的深度学习环境配置方法不同的是 xff0c 本文直接基于Python基础环境 43 Pycharm进行环境的配置 xff0c 不
  • TX2硬盘扩展

    TX2硬盘扩展 硬件平台 xff1a NVIDIA TX2 Samsung SSD 860EVO 系统平台 xff1a Ubuntu 18 04 LTS 安装 将硬盘连接至侧边SATA接口 扩展home 1 查看硬盘所有分区 sudo fd
  • Android手机4G网络设置ipv6

    我的卡是联通的 xff0c 所以下面截图也是联通的 xff0c 移动和电信的卡类似 xff1b 1 进入目录 xff1a 设置 移动网络 接入点名称 xff08 APN xff09 xff1b 2 点击默认的连接项 xff0c 进入详情页
  • 简单TCP编程

    1 TCP服务端 span class token macro property span class token directive hash span span class token directive keyword include
  • Redis的基本使用

    Redis简介 什么是Redis Redis是一款开源的内存数据库 xff0c 也称为键值存储 database 缓存 database 和消息队列 database 系统 它提供了丰富的数据结构和高效的操作方式 xff0c 并且支持多种编
  • Ubuntu16.04通过VNC远程桌面并开机自启动

    前置条件 xff0c 远程客户端已经安装VNC Viewer x11vnc安装 在Ubuntu 16 04中安装x11vnc xff0c 可以按照以下步骤操作 xff1a span class token comment 输入以下命令以更新
  • SpringBoot数据库读写分离

    导入maven坐标 span class token tag span class token tag span class token punctuation lt span dependency span span class toke
  • 滑模控制

    滑动模态的定义 人为设定一经过平衡点的相轨迹 xff0c 通过适当设计 xff0c 系统状态点沿着此相轨迹渐近稳定到平衡点 xff0c 或形象地称为滑向平衡点的一种运动 xff0c 滑动模态的 滑动 二字即来源于此 滑模控制的优点 xff1
  • FPGA基础之VGA(一)满屏红色

    一 项目分析 用VGA显示全屏的红色 xff0c VGA xff08 Video Graphics Array xff0c 视频图形阵列 xff09 是一种电脑显示标准 开发板采用至芯科技zx 1学习板 xff0c VGA视频显示接口是25
  • docker基础学习入门(六)------ DockerFile解析

    DockerFile是什么 Dockerfile是用来构建Docker镜像的构建文件 xff0c 是由一系列命令和参数构成的脚本 构建三步骤 xff1a 编写Dockerfile文件docker builddocker run 构建的文件什
  • C#应用程序界面开发基础——窗体控制(5)——分组类控件

    分组类控件 分组类控件有容器 xff08 Panel xff09 控件 分组框 xff08 GroupBox xff09 控件 选项卡 xff08 TabControl xff09 控件等 容器控件 容器控件是由System Windows
  • openmv4修改好的原理图和pcb文件

    openmv4修改好的原理图和pcb文件以及试验过的了 xff0c 生产过pcb文件 download csdn net download weixin 42741023 11953091
  • stm32h750/stm32h743原理图和pcb源文件

    stm32在目前使用非常广泛 xff0c 但是目前很多人都还停留在stmf1 f4仅仅只有72 128m主频阶段 xff0c stm32h743采用arm m7架构 xff0c 高达400m主频的处理器 xff0c 为我们的控制提供强有力的
  • Mac 安装brew时遇到curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused

    MAC电脑 有梯子但是感觉不好用 下面是我的折腾历程 xff0c 不想看的直接空降到最后 当时的想法 1 可能是ip被墙了 xff0c 笔记本电脑连接手机热点安装 xff0c 可解决问题 但是用手机每次到46 就停了 xff0c 然后就上网
  • docker部署Mysql并创建远程连接账号并赋权

    span class token comment 启动mysql容器 span docker run span class token operator span itd span class token operator span spa
  • Feature Squeezing

    对于 Feature Squeezing Detecting Adversarial Examples in Deep Neural Networks 的理解 很多先前的防止adversarial example的方法都是 xff0c ad
  • Linux下C语言基础——arm交叉编译器安装

    ubuntu 16 04下输入该命令 apt install gcc arm linux gnueabi 重新编译main c文件 arm linux gnueabi gcc o mian main c 执行main xff0c 如果是原来
  • error while loading shared libraries错误的原因及解決方法

    使用openCV库的时候出现的问题 xff0c 记录一下 xff1a 报错内容 xff1a error span class token keyword while span loading shared libraries libopen
  • zsh: command not found: pyinstaller

    使用pip3安装pyinstaller xff0c 如下图已安装成功 mac 64 fwkmbp pip3 install pyinstaller Requirement already satisfied pyinstaller in L
  • 进程与文件的关系--lsof

    lsof命令 作用 xff1a 1 列出指定文件被哪些进程打开 xff08 此处的文件是广义上的文件 xff0c 可以表示linux上的一切东西 xff09 2 列出指定端口被哪些进程所占用 3 根据用户或组来查询进程 4 根据文件描述符来