Linux文件与进程交互的窥探者lsof

lsof 是一个 Linux 和 UNIX 系统中的实用工具,用于列出系统中打开文件的所有信息。这个名字代表 “List Open Files”,但它也可以显示进程相关的其他信息,如:

打开的文件描述符列表
打开网络连接的列表
被进程使用的信号和内核对象等

在Linux系统中,有一个经典的概念:
一切皆文件”(Everything is a file),而lsof是一个列出当前系统打开文件的工具。这个命令可以列出被进程打开的文件、网络连接、设备、文件描述符等信息,帮助用户了解系统资源的使用情况。

命令及常用参数
语法格式:lsof [options] filename

1.1 常用参数

-p<进程PID>: 输出指定pid的进程打开的文件;

-l:使用用户ID代替输出中的用户名;

-u<用户名> : 输出指定用户打开的文件;

-c <字符串>: 过滤出 COMMAND 列中包含 指定字符的记录;

-d<文件描述符>: 输出包含指定文件描述符(FD列)的项;

-n :禁止解析主机名;

-i : 输出符合指定条件的项

-i [4|6] :分别指 IPv4、IPv6

-i [TCP|UDP]:指 TCP 或 UDP连接;

-i @[hostname |hostaddr]:指 主机名或地址;

-i:port : 端口号,可以是多个。

1.2 输出列含义

在这里插入图片描述

常用场景
2.1 监控主机当前打开文件句柄总量

当Linux系统中的文件句柄数量达到上限时,可能会引发一系列风险和问题,如程序崩溃、系统资源耗尽、主机性能下降等。

以suse系统为例:

#/bin/bash
#################文件句柄监控###################
#####全局变量#####
threshold_value_user="40000"
threshold_value_system="50000"
username=`whoami`
ip_addr=`ip addr show | grep 'inet ' | grep -v '127.0.0' | awk '{print $2}' | cut -d/ -f1|head -1`
#####判断当前主机系统版本#####
system_version=`cat /etc/SuSE-release|grep VERSION|awk -F"=" '{print $2}'`
system_leven=`cat /etc/SuSE-release|grep PATCHLEVEL|awk -F"=" '{print $2}'`
##根据系统信息执行句柄数统计命令
if [ ${system_version} -eq 12 -a ${system_leven} -ge 4 ];then
    handle_user=`lsof -Ki -u ${username}|wc -l`
    handle_system=`lsof -Ki|wc -l`
else
    handle_user=`lsof -u ${username}|wc -l`
    handle_system=`lsof|wc -l`
fi
#####告警发送#####
if [ ${handle_user} -ge ${threshold_value_user} ];then
msg1="【告警】:${ip_addr};${username}用户下的文件句柄数量达到${handle_user},请核查!"
fi

if [ ${handle_system} -ge ${threshold_value_system} ];then
    msg2="【告警】:${ip_addr}系统文件句柄数总量达到${handle_system},请核查!"
fi
……

以centos为例子:

在 CentOS 上,你可以使用 lsof 命令结合其他工具来监控主机当前打开的文件句柄总量。但是,需要注意的是,lsof 本身并不直接提供一个选项来显示打开的文件句柄总量。不过,你可以通过一些间接的方法来获取这个信息。

一种方法是使用 lsof 命令结合 wc(word count)命令来统计打开的文件句柄数量。例如:

bash
lsof | wc -l
这个命令会列出所有打开的文件,并使用 wc -l 来计算行数。请注意,这个方法可能会包括一些额外的行,比如标题行,所以得到的结果可能会比实际的文件句柄数量稍高一些。

另一种更精确的方法是使用 /proc/sys/fs/file-max 文件来查看系统允许的最大文件句柄数量,以及 /proc/sys/fs/file-nr 文件来查看当前已分配的文件句柄数量。例如:

bash
cat /proc/sys/fs/file-nr
这个命令会输出三个值,分别是:

已分配的文件句柄数量
已分配但尚未使用的文件句柄数量
系统允许的最大文件句柄数量
你关注的是第一个值,即已分配的文件句柄数量。这个值表示当前系统中所有进程打开的文件句柄总数。

如果你想要实时监控这个值,你可以使用 watch 命令来周期性地运行上述命令并查看结果:

bash
watch -n 1 cat /proc/sys/fs/file-nr
这个命令会每秒更新一次输出,让你能够实时看到文件句柄数量的变化。


2.2 查找文件句柄未释放进程以及文件恢复

日常运维中经常遇到磁盘空间被占用,du查看文件实际大小小于文件系统使用率,此现象一般文件句柄未释放导致,可以通过lsof查找指定进程后,重启释放空间;

查找文件句柄未释放:

lsof |grep delete |sort -k7 -nr |head -20

删除文件恢复:

上述句柄未释放的文件,也可手动恢复:通过lsof找出需要恢复的文件信息,根据信息中的PID和FD信息,找到/proc/${PID}/${FD}下的文件,在重定向恢复文件即可。

图片

卸载文件系统时繁忙无法卸载,也可通过lsof查出进程占用,通过停止对应进程后再进行卸载。

2.3 常用查找进程与文件命令

查看指定文件被哪些进程打开:lsof /path/file

查看指定端口被什么进程占用:lsof -i:protNumber

查看指定用户打开的文件:lsof -u username

查看指定进程打开的文件:lsof -p pid

查看指定目录下被打开的文件:lsof +D /path/directory

查看套接字和网络连接:lsof -i
列出所有打开的文件:

lsof
列出特定进程打开的文件:

lsof -p <进程ID>
列出特定用户打开的文件:

lsof -u <用户名>
列出特定文件被哪些进程使用:

lsof /path/to/file
列出特定网络端口被哪些进程使用:

lsof -i :<端口号>
列出特定进程使用的信号:

lsof -p <进程ID> | grep REG

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/510387.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS实战开发-为应用添加运行时权限

介绍 通过AbilityAccessCtrl动态向用户申请“允许不同设备间的数据交换”的权限&#xff0c;使用设备管理实例获取周边不可信设备列表。 说明&#xff1a; 查询周边不可信设备之前&#xff0c;请确保本设备与周边设备未进行配对。如果已配对&#xff0c;则恢复出厂设置之后重新…

Python中的全栈开发前端与后端的完美融合【第160篇—全栈开发】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python中的全栈开发&#xff1a;前端与后端的完美融合 全栈开发已成为当今软件开发领域中的…

Linux权限提升总结

几个信息收集的项目推荐 运行这几个项目就会在目标主机上收集一些敏感信息供我们参考和使用 一个综合探针&#xff1a;traitor 一个自动化提权&#xff1a;BeRoot(gtfo3bins&lolbas) 使用python2运行beroot.py就可以运行程序&#xff0c;然后就可以收集到系统中的大量信…

景顺长城:《重塑与创造——2024 ai+洞察报告》

近期&#xff0c;景顺长城发布了《重塑与创造——2024 ai洞察报告》,报告深入探讨了人工智能&#xff08;AI&#xff09;产业的发展现状、未来趋势以及对各行业的潜在影响。报告认为&#xff0c;AI产业发展是多层次、多浪潮的&#xff0c;目前我们处于第二阶段但未来将持续伴随…

企业案例:金蝶云星空集成钉钉,帆软BI

正文&#xff1a;在数字化转型的大潮中&#xff0c;众多企业开始探索并实践高效的数据流转与集成&#xff0c;以提升内部管理效率和决策质量。本文将以某企业为例&#xff0c;详细介绍如何通过将钉钉审批流程的数据实时同步至金蝶云星空&#xff0c;并进一步在帆软报表平台上实…

缺省参数

缺省参数 缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实 参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void Func(int a 0) {cout<<a<<endl; } int main() {Func(); // 没有传…

力扣刷题Days31-2.两数相关(js)

1&#xff0c;题目 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;…

基于ssm的企业销售人员培训系统(java项目+文档+源码)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的企业销售人员培训系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 企业销售人员培训系统主要…

ios应用内支付

用uniapp开发iOS应用内支付 准备前端代码服务器端处理如果iOS支付遇到问题实在解决不了&#xff0c;可以联系我帮忙解决&#xff0c;前端后端都可以解决&#xff08;添加的时候一定要备注咨询iOS支付问题&#xff09; 准备前端代码 获取支付通道 (uni.getProvider) uni.getPr…

idea端口占用

报错&#xff1a;Verify the connector‘s configuration, identify and stop any process that‘s listening on port XXXX 翻译&#xff1a; 原因&#xff1a; 解决&#xff1a; 一、重启大法 二、手动关闭 启动spring项目是控制台报错&#xff0c;详细信息如下&#xff…

跨境独立站pandabuy cssbuy 跨境Micro微店商品详情

跨境独立站运用微店详情API接口&#xff1a;实现高效运营与营销新突破 在全球化日益加速的今天&#xff0c;跨境独立站成为越来越多商家拓展海外市场、提升品牌影响力的关键平台。为了更好地满足用户需求&#xff0c;提升用户体验&#xff0c;跨境独立站需要不断引入先进的技术…

PostgreSQL的学习心得和知识总结(一百三十五)|深入理解PostgreSQL数据库之查找 PostgreSQL C 代码中的内存泄漏

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

前端学习<三>CSS进阶——03-网页设计和开发中,那些困扰大神的关于字体的知识

前言 我周围的码农当中&#xff0c;有很多是技术大神&#xff0c;却常常被字体这种简单的东西所困扰。 这篇文章&#xff0c;我们来讲一讲关于字体的常识。这些常识所涉及到的问题&#xff0c;有很强的可操作性&#xff0c;都是在实际业务中真实遇到的&#xff0c;都是需要开…

Xinstall带你解锁新姿势:网页直接拉起iOS应用!

在移动互联网时代&#xff0c;用户体验至关重要。对于iOS用户来说&#xff0c;能够在使用网页时直接拉起对应的应用&#xff0c;无疑会大大提升操作便利性和效率。然而&#xff0c;要实现这一功能&#xff0c;往往需要繁琐的开发流程和高昂的维护成本。这时&#xff0c;一个名为…

【JavaWeb】Day31.SpringBootWeb请求响应——分层解耦(二)

3.IOC&DI 3.1 IOC&DI入门 完成Controller层、Service层、Dao层的代码解耦 思路&#xff1a; 1. 删除Controller层、Service层中new对象的代码 2. Service层及Dao层的实现类&#xff0c;交给IOC容器管理 3. 为Controller及Service注入运行时依赖的对象 Controller程序…

服务注册与发现

服务注册与发现 传统单体架构与分布式架构 单体架构的不足&#xff1a; 所有的服务都集中在一个应用中&#xff0c;一个服务出错&#xff0c;可能导致整个系统宕机随着用户越来越多&#xff0c;程序承受的并发越来越高&#xff0c;单体应用的并发能力有限。数据库瓶颈&#x…

RTSP/ONVIF安防监控云平台EasyNVR激活码授权异常(状态码-2)的原因排查:服务器时间异常

EasyNVR平台优秀的视频能力在于通过RTSP/ONVIF协议&#xff0c;将前端接入设备的音视频资源进行采集&#xff0c;并转码成适合全平台、全终端分发的视频流格式&#xff0c;包括RTMP、RTSP、FLV、HLS、WebRTC等格式。平台可提供视频直播监控、录像、检索与回看、云存储、国标级联…

蓝桥杯算法题——暴力枚举法

先估算这个数小于3的50次方 cnt0 for i in range(50):for j in range(50):for k in range(50):a3**ib5**jc7**kif a*b*c<59084709587505:cnt1 print(cnt-1)#当ijk都为0时&#xff0c;a*b*c1不是幸运数字所以要减去

2024 年每个程序员都应该尝试的 8 个AI工具

随着人工智能技术的极速发展&#xff0c;新的 AI 工具正以前所未有的速度涌现&#xff0c;为开发者们带来了前所未有的机会和挑战。在这个不断演进的时代&#xff0c;掌握最新的 AI 技术已成为每个程序员的必修课。 在本文中&#xff0c;我们收集了8 个程序员在 2024 年值得尝…

持续交付/持续部署流水线介绍(CD)

目录 一、概述 二、典型操作流程 2.1 CI/CD典型操作流 2.2 CI/CD操作流程说明 2.3 总结 三、基于GitHubDocker的持续交付/持续部署流水线&#xff08;公有云&#xff09; 3.1 基于GitHubDocker的持续交付/持续部署操作流程示意图 3.2 GitHubDocker持续交付/持续部署流水…