Linux- 系统随你玩之--好用到炸裂的系统级监控、诊断工具

news2024/11/13 20:35:58

文章目录

  • 1、前言
  • 2、lsof介绍
    • 2.1、问题来了: 所有用户都可以采用该命令吗?
  • 3、 服务器安装lsof
    • 3.1、安装
    • 3.2、检查安装是否正常。
  • 4、lsof 命令
    • 4.1、常用功能选项
    • 4.2、输出内容
      • 4.2.1 、FD和 TYPE列
  • 5、 lsof 命令实操常见用法
  • 6 、常用组合命令
  • 7、 结语

1、前言

在服务器领域Linux占有绝对地位,我们日常大量需要与它打交到。上线部署的应用与相关软件安装后运行状况我们需要了解,这时我们就需要用到监控、诊断工具了,这可是各位运维大神们的拿手菜,so easy!
今天的主角 是系统级的监控、诊断工具---- lsof
本文主要介绍了Linux lsof命令使用详解,文中会通过非常详细的示例代码介绍,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随我来一起学习吧!

2、lsof介绍

lsof ( List Open Files) ,是 linux 下的一个极其实用的系统级监控、诊断工具。
List Open Files,让我们很容易就记住了它是 "ls + of"的组合,它可以用来列出被各种进程打开的文件信息。
记住:在linux环境下 “一切皆文件”,任何事物都以文件的形式存在,用户通过文件不仅可以访问常规数据,还可以访问网络连接和硬件;
如传输控制协议 (TCP) 和用户数据报协议 (UDP)套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于此应用程序的信息。
因此,使用 lsof,你可以获取任何被打开文件的各种信息,只需输入 lsof 就可以生成大量的信息。

2.1、问题来了: 所有用户都可以采用该命令吗?

因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能

3、 服务器安装lsof

3.1、安装

在 linux服务器上我们使用 yum -y install lsof命令来安装lsof工具
lsof -h查看命令帮助。
在这里插入图片描述
你也可以直接下载源代码:~abe/。
BSD系统有一个类似的工具可以做同样的事情,叫做fstat。
你可以通过man lsof来了解关于lsof的完整文档,或者通过lsof -h查看。

3.2、检查安装是否正常。

lsof -i 显示端口占用的进程
lsof -i: 8801 如图可以看到端口启动的服务是nginx。
在这里插入图片描述

4、lsof 命令

4.1、常用功能选项

lsof, LiSt Opened Files, 列出打开的文件, 听起来很简单的样子. 因Linux认为”一切皆文件”, 那么”打开的文件”就不仅仅是传统意义上打开的文件了, 还可以是网络/Unix域套接字, 匿名/具名管道, 共享库文件, 目录文件, 设备文件等等. 很多场景下, 查看进程或系统打开的文件会给调试带来极大的帮助。
下面我们简单地介绍lsof常被使用的功能选项:

-a 指示其它选项之间为与的关系
-c <进程名> 输出指定进程所打开的文件
-d <文件描述符> 列出占用该文件号的进程
+d <目录> 输出目录及目录下被打开的文件和目录(不递归)
+D <目录> 递归输出及目录下被打开的文件和目录
-i <条件> 输出符合条件与网络相关的文件
-n 不解析主机名
-p <进程号> 输出指定 PID 的进程所打开的文件
-P 不解析端口号
-t 只输出 PID
-u 输出指定用户打开的文件
-U 输出打开的 UNIX domain socket 文件
-h 显示帮助信息
-v 显示版本信息

4.2、输出内容

如果我们不带任何选项执行 lsof 命令,会输出系统中所有 active 进程打开的所有文件,结果就是我们被输出的信息所淹没,这没有任何的意义。
我们先让 lsof 命令输出当前 Bash 进程打开的文件,并截取其中的一部分结果来介绍输出内容中都包含哪些信息:
在这里插入图片描述

COMMAND:程序的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件
TYPE:文件类型,如 DIR、REG 等
DEVICE:以逗号分隔设备编号
SIZE:文件的大小(bytes)
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称

使用时 我们可以 

4.2.1 、FD和 TYPE列

很多人可能比较陌生FD和 TYPE列表示什么,下面我们来介绍一下。
1. FD 列中的常见内容有 cwd、rtd、txt、mem 和一些数字等等。

cwd 表示当前的工作目录;
rtd 表示根目录;
txt 表示程序的可执行文件;
mem 表示内存映射文件。
还有一部分 FD 是以数字表示的,比如标准输入输出文件:
在这里插入图片描述
数字后面的字母表示进程对该文件的读写模式,如上图中的 u 表示该文件被打开并处于读取/写入模式。除了 u,还有 r 表示只读模式,w 表示只写模式,
我们还可以同时应用 W 表示该进程拥有对文件写操作的锁。
如下图是截取的 docker daemon 进程打开的文件列表,其中显示了 FD 的不同模式:
在这里插入图片描述

2. TYPE 列中常见的 REG 和 DIR 分别表示普通文件和目录。
CHR 和 BLK 则分别表示字符和块设备,unix、fifo 和 IPv4/IPv6 分别表示 UNIX domain 套接字、先进先出(FIFO)队列和 IPv4/IPv6 套接字。

5、 lsof 命令实操常见用法

lsof : 简单地执行lsof会列出当前系统中所有被打开的文件, 但为了看到完整的信息, 通常需要具有root权限;

1. 显示与指定目录交互的所有一切
lsof /var/log/messages/
2. 用户信息
你也可以获取各种用户的信息,以及它们在系统上正干着的事情,包括它们的网络活动、对文件的操作等。
使用-u显示指定用户打开了什么
lsof -u fyydlz : 列出用户fyydlz打开的文件, 可指定多个用户, 默认是OR的关系;

3. 使用-c查看指定的命令正在使用的文件和网络连接

lsof  -c syslog-ng
lsof -c indp : 列出名称以indp开头的进程打开的文件, c for command, 可指定多个;
lsof -c /^t.*r$/ : 列出名称以t开头, r结尾的进程打开的文件;

4. 使用-p查看指定进程ID已打开的内容
查看指定进程号打开的文件,对于查看日志很有帮助。
lsof -p 8081 : 列出进程号为8081的进程打开的文件, 可指定多个;

其它类似常见命令如下:
lsof server.log : 列出打开server.log文件的进程, 可指明多个文件;
lsof . : 列出打开当前目录的进程;
lsof +D . : 递归地列出当前目录中被打开的文件, 当然也可以lsof | grep pwd;
lsof -i : 列出打开的套接字;
lsof -i tcp : 列出打开的tcp套接字;
lsof -i :5198 : 列出打开5198端口的进程;
lsof -i :ssh : 列出打开22端口的进程;
lsof -i tcp:5198 : 列出打开5198号tcp端口的进程;
lsof -U : 列出打开Unix域套接字的进程;
lsof -d 0-2 : 列出在0到2文件描述符上打开文件的进程;
lsof -d mem : 列出打开映射文件的进程;
lsof -d txt : 列出打开的可执行文件.

还有其他一些非常有用的选项, 可以对lsof的行为进行控制.
lsof -a: 上述功能性选项可以组合使用, 但默认采用OR逻辑列出, -a选项令lsof使用AND逻辑;

6 、常用组合命令

1. 列出进程号,杀死指定用户所做的一切事情
可以消灭指定用户运行的所有东西,这真不错。
lsof -t: 只列出进程号, 可以借此得到特定的进程列表, 以方便对这些进程的自动处理, 比如kill lsof -t -i :5198会杀死所有打开5198端口的进程;
lsof -r [seconds]: -r选项可以让lsof以一定的时间间隔连续执行, 在监视文件/进程时会非常实用.

2. 查看有哪些进程占用指定目录
lsof | grep /usr/local

磁盘空间达到100% 现象
lsof | grep delete 有时候会发现linux上磁盘空间达到100%,但是占用的文件没有这么大,就会出现此种进程,原因为文件实际上已经删除,
但是进程没有释放,可以使用kill -9 pid杀死进程的方式进行释放。

7、 结语

在linux环境下 “一切皆文件”,作为系统管理员,lsof 允许用户对核心内存进行查看,以找出系统当前如何使用这些文件。
lsof的简单用法可以告诉用户哪些进程打开了哪些文件,以及哪些文件由哪些进程打开。
在收集关于应用程序工作情况的信息或在进行某些可能损坏数据的操作前,要确保文件未被使用,这一点尤其重要。
lsof 更高级的用法可以帮助用户查找删除的文件,并获得关于网络连接的信息。lsof 是一个功能强大的工具,它几乎可以用于任何地方哦。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenHarmony 3.2 Beta Audio——音频渲染

一、简介Audio是多媒体子系统中的一个重要模块&#xff0c;其涉及的内容比较多&#xff0c;有音频的渲染、音频的采集、音频的策略管理等。本文主要针对音频渲染功能进行详细地分析&#xff0c;并通过源码中提供的例子&#xff0c;对音频渲染进行流程的梳理。二、目录foundatio…

无线WiFi安全渗透与攻防(一)之无线安全环境搭建

无线安全环境搭建 1.802.11标准 &#xff08;1&#xff09;.概念 802.11标准是1997年IEEE最初制定的一个WLAN标准&#xff0c;工作在2.4GHz开放频段&#xff0c;支持1Mbit/s和2Mbit/s的数据传输速率&#xff0c;定义了物理层和MAC层规范&#xff0c;允许无线局域网及无线设备…

Crack:LightningChart .NE​​T 10.4.1中的新功能

数据游标 Lightningchart .NET UWP 展示应用 在以前的版本中&#xff0c;LightningChart .NET 提供了不同的工具来实现数据跟踪功能&#xff0c;但都需要额外的用户编码。 现在可以使用 DataCursor 浏览 ViewXY 系列。系列数据值由这个新类/对象显示在鼠标位置或鼠标位置附近。…

【matplotlib】可视化解决方案——如何解决matplotlib中文乱码问题

问题概述 Matplotlib 默认不支持中文字体&#xff0c;这是因为 matplotlib 只支持 ASCII 字符&#xff0c;但是国人使用 matplotlib 肯定需要中文标注。如下图所示&#xff0c;当不对 Matplotlib 进行设置&#xff0c;而直接使用中文时&#xff0c;绘制的图像会出现中文乱码。…

为什么我选择收费的AdsPower指纹浏览器?

在决定开始用指纹浏览器之前&#xff0c;东哥我们团队找了市面上很多产品去测试。最后&#xff0c;还是决定用AdsPower。每个人的使用感受都不一样&#xff0c;我就说几个东哥和我们团队用得顺手的点&#xff0c;大家在选择指纹浏览器的时候也可以做一个参考。 一、指纹环境强大…

3月5日,加入线上对话,点燃科技行业女性影响力!

对话升级&#xff0c;点燃科技行业女性影响力&#xff01; &#x1f44b; 2022 年&#xff0c;Jina AI 联合 14 家合作伙伴&#xff0c;首次举办了「Impact Tech, She Can」线上对话&#xff0c;11 位嘉宾与 200 多位参会者分享了如何在科技行业内打造自身影响力。 &#x1f38…

html基础(h、p、br、hr、文本加粗倾斜下划线删除线、资源路径、音频、视频、超链接)

1标题<h><h1>1级标题</h1><h2>2级标题</h2><h3>3级标题</h3><h4>4级标题</h4><h5>5级标题</h5><h6>6级标题</h6>2段落<p>和换行<br><p>段落标签</p><p> fgghikg…

大数据技术——面向对象编程基础

类类的定义字段定义:用val或var关键字进行定义方法定义:使用new关键字创建一个类的实例类成员可见性Scala类中所有成员的默认可见性为公有&#xff0c;任何作用域内都能直接访问公有成员除了默认的公有可见性&#xff0c;Scala也提供private和protected其中&#xff0c;private…

真涨脸,我用 Python 为朋友自动化整理表格

今天&#xff0c;在工作的时候&#xff0c;我的美女同事问我有没有办法自动生成一个这样的表格&#xff1a; 第一列是院校科目&#xff0c;第二列是年份&#xff0c;第三列是数量。 这张表格是基于这一文件夹填充的&#xff0c;之前要一个文件夹一个文件夹打开然后手动填写年份…

测牛学堂:软件测试python之unittest框架总结(3)

python之unittest添加整个测试类执行 如果我们的测试用例比较多的话&#xff0c;测试套件对象通过addTest一个一个添加比较麻烦&#xff0c;可以通过添加一个类的方法&#xff0c; 去执行这个类里面的所有测试方法 套件对象.addTest(unittest.makeSuite(测试类名)) import un…

“终于我从字节离职了...“一个年薪50W的测试工程师的自白...

我递上了我的辞职信&#xff0c;不是因为公司给的不多&#xff0c;也不是因为公司待我不好&#xff0c;但是我觉得&#xff0c;我每天看中我憔悴的面容&#xff0c;每天晚上拖着疲惫的身体躺在床上&#xff0c;我都不知道人生的意义&#xff0c;是赚钱吗&#xff1f;是为了更好…

3.2滑动窗口

滑动窗口*** 题目链接 视频讲解 属于单调队列的模板题 如果每次移动窗口&#xff0c;然后在窗口中循环遍历查找最大值&#xff0c;时间复杂度太高 解决思路&#xff1a; 维护一个单调队列&#xff0c;其中head永远指的是当前窗口中最大的值&#xff0c;从head到tail元素递减。…

【Unity VR开发】结合VRTK4.0:创建圆盘

语录&#xff1a; 茶若相似&#xff0c;味不必如一。但凡茗茶&#xff0c;一泡苦涩&#xff0c;二泡甘香&#xff0c;三泡浓沉&#xff0c;四泡清洌&#xff0c;五泡清淡&#xff0c;此后&#xff0c;再好的茶也索然无味。诚似人生五种&#xff0c;年少青涩&#xff0c;青春芳…

【并发基础】Java中线程的创建和运行以及相关源码分析

目录 一、线程的创建和运行 1.1 创建和运行线程的三种方法 1.2 三者之间的继承关系 二、Thread类和Runnable接口的区别 2.1 Runnable接口可以实现线程之间资源共享&#xff0c;而Thread类不能 2.2 实现Runnable接口相对于继承Thread类的优点 三、实现 Runnable 接口和实现 Call…

【python学习笔记】:Excel 数据的封装函数

对比其它编程语言&#xff0c;我们都知道Python最大的优势是代码简单&#xff0c;有丰富的第三方开源库供开发者使用。伴随着近几年数据分析的热度&#xff0c;Python也成为最受欢迎的编程语言之一。而对于数据的读取和存储&#xff0c;对于普通人来讲&#xff0c;除了数据库之…

程序员推荐的良心网站合集!(第二期)

今天来给大家推荐几个程序员必看的国外良心网站合集第二期合集。 Semantic Schoolar 由微软联合创始人Paul Allen开发的免费学术搜索引擎&#xff0c;不仅可以通过时间线快速定位想要的文献&#xff0c;还有强大的筛选功能可以精准的找到自己想要的文献&#xff0c;想要什么搜…

服务器部署

文章目录目录前言1、前端服务器选型1.1、Nginx1.1.1、Nginx介绍1.1.2、正向代理&反向代理1、正向代理2、反向代理1.1.3、优点1、支持高并发2、内存消耗少3、成本低廉4、配置文件非常简单5、支持Rewrite重写6、内置的健康检查功能7、节省带宽8、稳定性高9、支持热部署1.2、N…

[oeasy]python0098_个人计算机浪潮_IBM5100_微软成立_苹果II_VisCalc

个人计算机浪潮 回忆上次内容 个人电脑(PC) 在爱好者之间疯传 人人都有一台计算机 从attair-8800到apple-1个人电脑 离普通人 更近了 如果 人人都有 自己的电脑 谁还去 用终端连接大型机 呢&#xff1f; IBM真的被干掉了吗&#xff1f;&#x1f914; 时代背景 计算机 逐渐…

JVM 全面了解

JVM包含两个子系统和两个组件&#xff0c;两个子系统为Class loader(类装载器)、Execution engine(执行引擎)&#xff1b;两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。 方法区&#xff1a;存储已被虚拟机加载的类元数据信息(元空间) 堆&#xf…

数据分析-深度学习 NLP Day3句法分析

第六章句法分析在本章中&#xff0c;你将学到与句法分析相关的一些算法和技术 。 很多技术手段可以用来实 现句法分析&#xff0c;包括基于规则的和基于统计的&#xff0c;在本章中读者将会了解其基本原理和使用方法 。本章要点主要如下&#xff1a;句法分析及其难点句法分析相…