『运维备忘录』之 Lsof 命令详解

2024-02-15 12:44

本文主要是介绍『运维备忘录』之 Lsof 命令详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

运维人员不仅要熟悉操作系统、服务器、网络等只是,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大家喜欢。

今天我们要讲的是 Lsof 命令

一、简介

lsof 是 Linux 下的一个非常实用的系统级的监控、诊断工具,它的功能非常强大。它的意思是 List Open Files,字面意思是“打开文件列表“。我们知道,linux 下 “一切皆文件”,所以lsof的作用就显而易见了,它可以用来列出被各种进程打开的文件信息。

二、基本语法

lsof [选项] [绝对路径的文件名]

因为权限等原因,建议使用root用户执行该命令,可以看到全面的信息。 

相关参数:

参数说明
-a        列出打开文件存在的进程
-c<进程名>列出指定进程所打开的文件
-g        列出GID号进程详情
-d<文件号>列出占用该文件号的进程
+d<目录>  列出目录下被打开的文件
+D<目录>  递归列出目录下被打开的文件
-n<目录>  列出使用NFS的文件
-i<条件>  列出符合条件的进程(协议,:端口,@ip)
-p<进程号>列出指定进程号所打开的文件
-u        列出UID号进程详情
-h        显示帮助信息
-v        显示版本信息

 示例: 

$ lsof
command     PID USER   FD      type      DEVICE     SIZE       NODE NAME
init          1 root  cwd       DIR         8,2     4096          2 /
init          1 root  rtd       DIR         8,2     4096          2 /
init          1 root  txt       REG         8,2    43496    6121706 /sbin/init
init          1 root  mem       REG         8,2   143600    7823908 /lib64/ld-2.5.so
init          1 root  mem       REG         8,2  1722304    7823915 /lib64/libc-2.5.so
init          1 root  mem       REG         8,2    23360    7823919 /lib64/libdl-2.5.so
init          1 root  mem       REG         8,2    95464    7824116 /lib64/libselinux.so.1
init          1 root  mem       REG         8,2   247496    7823947 /lib64/libsepol.so.1
init          1 root   10u     FIFO        0,17                1233 /dev/initctl
migration     2 root  cwd       DIR         8,2     4096          2 /
migration     2 root  rtd       DIR         8,2     4096          2 /
migration     2 root  txt   unknown                                 /proc/2/exe

上述每一列的意思如下:

列名说明
COMMAND进程名称
PID进程标识符
USER进程所有者
FD文件描述符,应用程序通过它识别到该文件,如cwd、txt等
TYPE文件类型,如DIR,REG
DEVICE指定磁盘名称
SIZE文件大小
NODE索引节点(文件在磁盘上的标识)
NAME打开文件的确切名称

2.1. 文件描述符列表(FD)

  • cwd:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
  • txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
  • lnn:库引用 (AIX)
  • er:FD 信息错误
  • jld:jail 目录 (FreeBSD)
  • ltx:共享库文本(代码和数据)
  • mxx:十六进制内存映射类型编号xx
  • m86:DOS合并映射文件
  • mem:内存映射文件
  • mmap:内存映射设备
  • pd:父目录
  • rtd:根目录
  • tr:内核跟踪文件 (OpenBSD)
  • v86:VP/ix 映射文件
  • 0:表示标准输出
  • 1:表示标准输入
  • 2:表示标准错误

2.2. 标准输出/输入/错误文件状态模式(FD)

一般在标准输出/输入/错误后还跟着文件状态模式。

文件状态说明
u表示该文件被打开并处于读取/写入模式
r表示该文件被打开并处于只读模式
w表示该文件被打开并处于写入模式
空格表示该文件的状态模式为 unknow,且没有锁定
-表示该文件的状态模式为 unknow,且被锁定

2.3. 文件状态模锁 (FD)

一般在文件状态模式后面,还跟着相关的锁。

参数说明
N对于未知类型的Solaris NFS锁
r用于部分文件的读取锁定
R对整个文件进行读取锁定
w对文件的一部分进行写锁定(文件的部分写锁)
W对整个文件进行写锁定(整个文件的写锁)
u用于任何长度的读写锁
U对于未知类型的锁
x对于文件部分的SCO OpenServer Xenix锁
X对于整个文件的SCO OpenServer Xenix锁
space如果没有锁

2.4. 文件类型(type) 

类型说明
DIR表示目录
CHR表示字符类型
BLK块设备类型
UNIXUNIX 域套接字
FIFO先进先出 (FIFO) 队列
IPv4网际协议 (IP) 套接字
DEVICE指定磁盘的名称
SIZE文件的大小
NODE索引节点(文件在磁盘上的标识)
NAME打开文件的确切名称
REG常规文件

三、Lsof 实例

3.1. Lsof 用户

$ lsof -u test
$ lsof -u test -u ubuntu
$ lsof -i -u ^root   # 特定用户除外

3.2. Lsof 文件目录

$ lsof /var/log/messages
$ lsof /etc/passwd
$ lsof +D /var/log   # 在目录内,对应目录下的所有子目录和文件都会被列出

3.3. Lsof 端口

$ lsof -i :8080
$ lsof -i :80 -i :22
$ lsof -i TCP:22
$ lsof -i TCP:1-1024
$ lsof -i UDP
$ lsof -i @192.168.1.11

3.4. Lsof 网络

$ lsof -i 4   # 仅 IPv4
$ lsof -i 6   # 仅 IPv6

3.5. Lsof 进程

$ lsof -c mysql
$ lsof -c java
$ lsof -c ssh
$ lsof -c nginx
$ lsof -c ssh -c httpd
$ lsof -p 1753
$ lsof -p ^3   # 除了某些pid

-c 选项将会列出所有以mysql这个进程开头的程序的文件

3.6. 其他

$ lsof -p $pid     # 列出指定进程号所打开的文件
$ lsof $filename   # 列出打开文件的进程
$ lsof -i:9981 -P -t -sTCP:LISTEN   # 获取端口对应的进程 ID

这篇关于『运维备忘录』之 Lsof 命令详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/711421

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML