【158】Linux 命令神器:lsof

2024-05-26 23:48
文章标签 linux 命令 神器 158 lsof

本文主要是介绍【158】Linux 命令神器:lsof,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内容目录(原文见公众号python宝)

一、lsof命令介绍二、lsof命令功能和常用的参数列表三、常用命令www.xmmup.com

一、lsof命令介绍

  lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如TC和UDP等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

lsof命令输出说明

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

FD和type详解

FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等(1)cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改(2)txt :该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序(3)lnn:library references (AIX);(4)er:FD information error (see NAME column);(5)jld:jail directory (FreeBSD);(6)ltx:shared library text (code and data);(7)mxx :hex memory-mapped type number xx.(8)m86:DOS Merge mapped file;(9)mem:memory-mapped file;(10)mmap:memory-mapped device;(11)pd:parent directory;(12)rtd:root directory;(13)tr:kernel trace file (OpenBSD);(14)v86  VP/ix mapped file;(15)0:表示标准输出(16)1:表示标准输入(17)2:表示标准错误一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等(1)u:表示该文件被打开并处于读取/写入模式(2)r:表示该文件被打开并处于只读模式(3)w:表示该文件被打开并处于(4)空格:表示该文件的状态模式为unknow,且没有锁定(5)-:表示该文件的状态模式为unknow,且被锁定同时在文件状态模式后面,还跟着相关的锁(1)N:for a Solaris NFS lock of unknown type;(2)r:for read lock on part of the file;(3)R:for a read lock on the entire file;(4)w:for a write lock on part of the file;(文件的部分写锁)(5)W:for a write lock on the entire file;(整个文件的写锁)(6)u:for a read and write lock of any length;(7)U:for a lock of unknown type;(8)x:for an SCO OpenServer Xenix lock on part      of the file;(9)X:for an SCO OpenServer Xenix lock on the      entire file;(10)space:if there is no lock.TYPE:文件类型,如DIR、REG等,常见的文件类型(1)DIR:表示目录(2)CHR:表示字符类型(3)BLK:块设备类型(4)UNIX:UNIX 域套接字(5)FIFO:先进先出 (FIFO) 队列(6)IPv4:网际协议 (IP) 套接字

二、lsof命令功能和常用的参数列表

        用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为 lsof 需要访问核心内存和各种文件,所以需要root用户执行。 

lsof filename 显示打开指定文件的所有进程
lsof -a 表示两个参数都必须满足时才显示结果
lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username 显示所属user进程打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -i 用以显示符合条件的进程情况
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 –> IPv4 or IPv6
protocol –> TCP or UDP
hostname –> Internet host name
hostaddr –> IPv4地址
service –> /etc/service中的 service name (可以不只一个)
port –> 端口号 (可以不只一个)

 查看22端口现在运行的情况 # lsof -i :22

        要指定端口范围, 可以指定要检查的端口范围。在下面的示例中, 我们正在检查端口22到25之间的所有连接。  lsof -i:22-25

查看所属root用户进程所打开的文件类型为txt的文件: # lsof -a -u root -d txt

当传递给lsof 一个-p参数,可以列出特定进程打开的文件。

linux如何查看ipv4或者ipv6的链接

        有时候我们用df -h查看磁盘空间发现满了,但是使用du -sh 查看却看到实际大小很小。那么我们可以通过  lsof -a +L1  /目录 命令查看哪些进程没有及时释放空间。

摘录总结lsof用法:

lsof filename.txt 显示开启文件filename.txt的进程lsof -i :22 知道22端口现在运行什么程序lsof -c abc 显示abc进程现在打开的文件lsof -g gid 显示归属gid的进程情况lsof +d /usr/local/ 显示目录下被进程开启的文件lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长lsof -d 4 显示使用fd为4的进程lsof -i 用以显示符合条件的进程情况

三、常用命令

1)列出某个进程打开的所有文件
lsof -p 1149
2)列出某个用户打开的文件
lsof -u root
3)列出所有不是某个用户打开的文件,也就是取反,在用户名前添加^符号
lsof -u ^root
4)列出某个文件被哪些进程打开使用
lsof /dev/null
5)列出访问某个目录的所有进程
lsof +d /dev/
6)递归列出访问某个目录下所有进程
lsof +D /var/
7)列出某个进程名使用的文件信息
lsof -c dhcpd
3、lsof查看网络信息
# lsof也可以查看网络信息,如查看某个端口的使用情况
1)列出所有的网络链接信息
lsof -i
2)只列出某个协议类型的网络链接信息
lsof -i TCP
3)查看某个端口的网络链接状态
lsof -i :67
4)查看链接到某个主机的网络状态
lsof -i @192.168.146.1
5)查看连接到某个主机的特定端口的网络状态
lsof -i @192.168.146.1:80
6)列出当前主机监听的端口
lsof -i -s TCP:LISTEN
-s P:S参数跟着两个字段,协议和状态,中间用冒号隔开,如上表示TCP协议的监听状态,也可以查看处于连接的TCP网络状态:
# lsof -i -s TCP:ESTABLISHED
实用的命令:
lsof `which httpd`    #列出那个进程使用了apache的执行文件
lsof /dev/cdrom      #列出那个进程在使用光驱
lsof -u 1000         #查看UID为1000的用户使用的进程
lsof -i TCP@[url]  #查看哪个进程打开了TCP链接到主机的80端口 
lsof -i tcp@ -r  #不断查看目前tfp链接的情况4、通过lsof恢复删除的文件
通过lsof恢复已删除的文件,前提条件的是这个文件有程序正在使用,可以通过lsof /path/to/filename能查看到正在使用此文件的程序,下面我们以日志文件message为例实验下:
1)查看使用文件的实用程序lsof /var/log/messages
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
abrt-watc  671 root    4r   REG    8,2   516027 1311595 /var/log/messages
rsyslogd  1148 root    6w   REG    8,2   516027 1311595 /var/log/messages
2)删除message文件
rm -rf /var/log/messages
3)通过上面查看的进程ID我们在/proc目录下找到该进程的文件目录,然后通过FD,找到FD目录的文件编号,然后对文件进行恢复
如:上面PID为1148那我们先找到/proc目录下进程为1148的目录,然后cd到FD目录下,上面FD显示文件使用6w打开,表示在6文件中以锁的方式打开
cd /proc/1148/fd
查看下6文件中的文件内容,是不是和之前删除的文件一样呢:
tail -n 10 6

tips
    lsof 默认是将各种选项以 or 的方式过滤的, 如果想要以 and 的方式过滤, 加上 -a 吧
    lsof 在查看其它用户的进程时需要 sudo 权限 

About Me:小麦粒

● 本文作者:小麦粒,专注于python、数据分析、数据挖掘、机器学习相关技术,也注重技术的运用

● 作者博客地址:https://blog.csdn.net/u010986753

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 个人微信号:pythonbao 联系我加微信群

●个人 QQ:87605025

● QQ交流群pythonbao :483766429

● 公众号:python宝 或 DB宝

● 提供OCP、OCM和高可用最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

欢迎赞赏哦!有您的支持,小麦粒一定会越来越好!

这篇关于【158】Linux 命令神器:lsof的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级