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

news/2024/5/4 6:57:05/文章来源:https://blog.csdn.net/fyydlz/article/details/129308213

文章目录

  • 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.luyixian.cn/news_show_76560.aspx

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

相关文章

Android开发如何自定义View实现圆弧进度效果

在Android开发中&#xff0c;通过自定义View实现自己想要的效果是作为android开发程序员的一项必备技能&#xff0c;自定义View对于android开发来说也是比较难的一项技术。 涉及到的知识Canvas&#xff08;画布&#xff09;,Paint&#xff08;画笔&#xff09;&#xff0c;自定…

测试人员如何在测试环境数据库批量生成测试数据?方案分享

测试人员为了测试某个特定场景&#xff0c;往往需要在测试环境数据库中插入特定的测试数据来满足需求&#xff1b;性能测试时&#xff0c;常需要在测试环境生成大量可用测试数据来支持性能测试&#xff1b;建设持续集成持续交付体系时&#xff0c;我们往往也需要在测试环境生成…

Linux基础命令-nice调整进程的优先级

文章目录 Nice 命令介绍 语法格式 常用参数 参考实例 1 调整bash的优先级为-10 2 调整脚本的优先级为6 3 调整指令的优先级 4 默认使用nice命令调整优先级 命令总结 Nice 命令介绍 nice命令的主要功能是用于调整进程的优先级&#xff0c;合理分配系统资源。Linux系…

代码随想录算法训练营day47 |动态规划 198打家劫舍 213打家劫舍II 337打家劫舍III

day47198.打家劫舍1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组213.打家劫舍II情况一&#xff1a;考虑不包含首尾元素情况二&#xff1a;考虑包含首元素&#xff0c;不包含尾元素情况三&#x…

taobao.item.img.delete( 删除商品图片 )

&#xffe5;开放平台免费API必须用户授权 删除商品图片 公共参数 请求地址: HTTP地址&#xff1a;http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请求参数 响应参数 点击获取key和secret 请求示例 TaobaoClient client new DefaultTaobaoClient(url…

论坛性能测试难点有哪些?

1 测试工具方面 用户和业务模型分析搭建合适的脚本开发&#xff08;不根据用户和业务的模型来开发脚本&#xff0c;认为要回归成功即可&#xff09;合适的需求分析转化为场景设计&#xff08;不知道如何根据需求进行场景设计&#xff09;大容量系统的数据生成和使用大型系统的…

MyBatis-Plus框架解析?

简单介绍&#xff1a;MyBatis-Plus&#xff08;简称 MP&#xff09;&#xff08;由苞米豆公司开源&#xff09;是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。MP会内置集成部分SQL方法&#xff0c;可以直接…

错误:PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。“+文件路径“的解决方案

最近在使用python进行筛选图片的时候&#xff0c;想到用python里面的os库进行图片的删除。 具体筛选方法就是&#xff0c;删除掉图片长度或宽度小于100像素的图片&#xff0c;示例代码如下所示&#xff1a; for file in os.listdir(img_path):if file .split( . )[ - 1 ] j…

【OJ比赛日历】快周末了,不来一场比赛吗? #03.04-03.10 #12场

CompHub 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号同时会推送最新的比赛消息&#xff0c;欢迎关注&#xff01;更多比赛信息见 CompHub主页 或 点击文末阅读原文以下信息仅供参考&#xff0c;以比赛官网为准目录2023-03-04&…

一文说清Kubernetes的本质

文章目录Kubernetes解决了什么问题&#xff1f;Kubernetes的全局架构Kubernetes的设计思想Kubernetes的核心功能Kubernetes如何启动一个容器化任务&#xff1f;Kubernetes解决了什么问题&#xff1f; 编排&#xff1f;调度&#xff1f;容器云&#xff1f;还是集群管理&#xf…

Python 虚拟环境的使用

PyCharm 创建的虚拟环境与使用 workon 命令创建的虚拟环境在本质上没有区别&#xff0c;它们都是 Python 的虚拟环境。 使用 PyCharm 创建工程时&#xff0c;使用可以使用曾经工程的虚拟环境&#xff0c;或者新建一个虚拟环境来安装 Python 的库&#xff0c;又或者使用 workon…

rk3288-android8-IR-mouse

IR问题: mouse按键使用不了 然后排查: 1.排查上报 ir_key6{ rockchip,usercode <0xbf00>;rockchip,key_table <0xff KEY_POWER>,<0xfe KEY_MUTE>, <0xfd KEY_1>, <0xfc KEY_2>, <0xfb KEY_3>, <0xfa KEY_4>, <0xf9 KEY_5>…

2023年天津财经大学珠江学院专升本专业课考试题型

天津财经大学珠江学院关于2023年高职升本科专业课考试时间及题型一、专业课考试 &#xff08;一&#xff09;时间安排 2023年天津财经大学珠江学院高职升本科专业课考试定于2023年3月25日14&#xff1a;00-17:00进行&#xff0c;凡报考工商管理、旅游管理、税收学专业的考生&am…

卡特兰数及常见模型

卡特兰数 英文名Catalan number&#xff0c; 是组合数学中一个常出现在各种计数问题中出现的数列。其前几项为: 1 1 2 5 14 42 132 429 1430 4862 16796 58786 208012 742900 2674440 9694845 35357670 129644790 477638700 1767263190 6564120420 24466267020 91482563640 343…

网络安全入门学习:社会工程学

在电影《我是谁&#xff1a;没有绝对安全的系统》中&#xff0c;主角本杰明充分利用自己高超的黑客技术&#xff0c;非法入侵国际安全系统&#xff0c;并在最后逃之夭夭。在电影中&#xff0c;有一句经典的台词&#xff1a; 所有黑客手段中最有效的、最伟大的幻想艺术——社会…

Qt std :: bad_alloc

文章目录摘要问题出现原因第一种 请求内存多余系统可提供内存第二种 地址空间过于分散&#xff0c;无法满足大块连续内存的请求第三种 堆管理数据结构损坏稍微总结下没想到还能更新参考关键字&#xff1a; std、 bad、 alloc、 OOM、 异常退出摘要 今天又是被BUG统治的一天&a…

系列九、视图/存储过程/存储函数/触发器

一、视图 1.1、概述 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的。 通俗的讲&#xff0c;视图只保存了查询的SQL逻辑&#xff0c;…

(JUC)核心线程 和 救急线程的区别;Executors-固定大小线程池单线程线程池

核心线程 和 救急线程的区别 救急线程是有个生存时间的&#xff0c;它执行完任务了&#xff0c;过了一段时间&#xff0c;没有新任务了&#xff0c;救急线程就会销毁掉&#xff0c;变成结束的状态 核心线程没有生存时间&#xff0c;它执行完任务后&#xff0c;它仍然会被保存…

Acwing 165. 小猫爬山 java

&#x1f437; 输入案列 5 1996 1 2 1994 12 29&#x1f437; 输出案列 2&#x1f475; 优先搜索可能方案比较少的分支 &#x1f920; DFS剪枝&#xff1a;排序&#xff0c;优先处理大的 &#x1f920; 枚举 猫&#xff1f;枚举 车&#xff1f;不重不漏&#xff0c;猫放缆车&…

java Object 万字详解 (通俗易懂)

基本介绍构造方法成员方法hashCode()getClass()toString()equals()finalize()JavaBean重写Object类的方法重写toString重写equals一、基本介绍Object类是java类层次最顶层的基类&#xff08;父类&#xff09;&#xff0c;所有类都是直接或间接继承自Object类&#xff0c;因此&a…