Linux shell编程学习笔记47:lsof命令

0 前言

今天国产电脑提示磁盘空间已耗尽,使用用df命令检查文件系统情况,发现/dev/sda2已使用100%。

Linux shell编程学习笔记39:df命令icon-default.png?t=N7T8https://blog.csdn.net/Purpleendurer/article/details/135577571于是开始清理磁盘空间。

第一步是查看已删除、但空间却没有释放的进程。

这里要用到 lsof命令。

1 lsof命令的安装

PurpleEndurer @  bash ~ $ lsof --help
bash: lsof: command not found
PurpleEndurer @  bash ~ $ 

 

lsof 命令默认是没有安装的,如果你的系统中没有安装这个命令,那么可以 使用以下命令安装:

yum install -y lsof

PurpleEndurer @  bash ~ $ yum install -y lsof
Loaded plugins: fastestmirror, ovl
ovl: Error while doing RPMdb copy-up:
[Errno 13] Permission denied: '/var/lib/rpm/Providename'
You need to be root to perform this command.
PurpleEndurer @  bash ~ $ 
 

 

2  lsof命令的功能、格式和选项说明

我们像往常输入lsof --help命令,想查看 lsof命令的帮助信息。

purpleEndurer @bash ~ $  lsof --help
lsof: illegal option character: -
lsof: -e not followed by a file system path: "lp"
lsof 4.89
 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-E] [+|-e s] [+|-f[gG]]
 [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
 [+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Defaults in parentheses; comma-separated set (s) items; dash-separated ranges.
  -?|-h list help          -a AND selections (OR)     -b avoid kernel blocks
  -c c  cmd c ^c /c/[bix]  +c w  COMMAND width (9)    +d s  dir s files
  -d s  select by FD set   +D D  dir D tree *SLOW?*   +|-e s  exempt s *RISKY*
  -i select IPv[46] files  -K list tasKs (threads)    -l list UID numbers
  -n no host names         -N select NFS files        -o list file offset
  -O no overhead *RISKY*   -P no port names           -R list paRent PID
  -s list file size        -t terse listing           -T disable TCP/TPI info
  -U select Unix socket    -v list version info       -V verbose search
  +|-w  Warnings (+)       -X skip TCP&UDP* files     -Z Z  context [Z]
  -- end option scan     
  -E display endpoint info              +E display endpoint info and files
  +f|-f  +filesystem or -file names     +|-f[gG] flaGs 
  -F [f] select fields; -F? for help  
  +|-L [l] list (+) suppress (-) link counts < l (0 = all; default = 0)
                                        +m [m] use|create mount supplement
  +|-M   portMap registration (-)       -o o   o 0t offset digits (8)
  -p s   exclude(^)|select PIDs         -S [t] t second stat timeout (15)
  -T qs TCP/TPI Q,St (s) info
  -g [s] exclude(^)|select and print process group IDs
  -i i   select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]
  +|-r [t[m<fmt>]] repeat every t seconds (15);  + until no files, - forever.
       An optional suffix to t is m<fmt>; m must separate t from <fmt> and
      <fmt> is an strftime(3) format for the marker line.
  -s p:s  exclude(^)|select protocol (p = TCP|UDP) states by name(s).
  -u s   exclude(^)|select login|UID set s
  -x [fl] cross over +d|+D File systems or symbolic Links
  names  select named files or files on named file systems
Anyone can list all files; /dev warnings disabled; kernel ID check disabled.
purpleEndurer @bash ~ $ 
 

尽管 lsof命令不支持--help选项,但给出了帮助信息。

查看 lsof命令 帮助信息正确选项是 -? 或 -h。

2.1 命令功能

lsof 是 List Open File 的缩写, 主要功能是获取和显示被进程打开文件的信息。

2.2 命令格式

lsof [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-E] [+|-e s] [+|-f[gG]]
 [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
 [+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]

2.3 选项说明

选项描述
-h显示帮助信息
-aAND选择(默认是或)
-b避免内核块
-c ccmd c ^c /c/[bix]
+c w命令宽度(默认为9)
+d s显示目录集合s下被打开的文件
-d s通过文件描述符(FD)集合s来选择
+D D递归处理所有子文件 *慢?*
+|-e s豁免 s *风险*
-E显示端点信息
+E显示端点信息和文件
+f|-f+文件系统或 -文件名
+|-f[gG]flaGs
-F [f]选择字段;-F?寻求帮助
-g [s]排除(^)或选择并打印进程组ID
-i 按 IPv[46] 地址选择:[46][proto][@host|addr][:svc_list|port_list]
-K列出tasKs(线程)
-l列出UID号
+|-L [l]列表 (+) 抑制 (-) 链路计数 < l (0 = all; default = 0)
+m [m]使用或创建安装补充
+|-M端口映射注册 (-) 
-n没有主机名
-N选择NFS文件列表
-o列出文件偏移量 -o o o 0t 偏移位数(8)
-O无开销 *风险*
-p s排除(^)或选择PIDs -S [t]  t秒统计超时(15)
-P无端口名称
-R列出paRent PID
+-r [t[m<fmt>]]
-s列表文件大小
-s p:s排除(^)或选择protocol(p = TCP|UDP) 按名称表示。
S [t]t 秒统计超时 (默认为15秒)
-t简洁列表
-T禁用TCP/TPI信息
-TqsTCP/TPI Q,St(s)信息
-u s排除(^)或 选择登录 或 UID集s
-U选择Unix套接字
-v显示版本信息
-V详细搜索
+|-w    警告
-x [fl]跨越 +d|+D 文件系统或符号链接
-X跳过TCP&UDP*文件
-Z Z上下文[Z]
--结束选项扫描
name选择命名文件或命名文件系统上的文件
  • 括号中的是默认值
  • 集合项使用逗号分隔
  • 范围使用破折号分隔

3 使用实例

3.1 lsof : 显示当前所有活跃进程打开的所有文件

显示的内容很多,不好截图。

3.2 lsof | more:分页显示显示当前所有活跃进程打开的所有文件

我们可以使用管道操作符和more命令来分实现分页显示

purpleEndurer @bash / $ lsof | more
COMMAND     PID   TID             USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd       1                   root  cwd   unknown                                         /proc/1/cwd (
readlink: Permission denied)
systemd       1                   root  rtd   unknown                                         /proc/1/root 
(readlink: Permission denied)
systemd       1                   root  txt   unknown                                         /proc/1/exe (
readlink: Permission denied)
systemd       1                   root NOFD                                                   /proc/1/fd (o
pendir: Permission denied)
kthreadd      2                   root  cwd   unknown                                         /proc/2/cwd (
readlink: Permission denied)
kthreadd      2                   root  rtd   unknown                                         /proc/2/root 
(readlink: Permission denied)
kthreadd      2                   root  txt   unknown                                         /proc/2/exe (
readlink: Permission denied)
kthreadd      2                   root NOFD                                                   /proc/2/fd (o
pendir: Permission denied)
ksoftirqd     3                   root  cwd   unknown                                         /proc/3/cwd (
readlink: Permission denied)
ksoftirqd     3                   root  rtd   unknown                                         /proc/3/root 
(readlink: Permission denied)
ksoftirqd     3                   root  txt   unknown                                         /proc/3/exe (
readlink: Permission denied)
ksoftirqd     3                   root NOFD                                                   /proc/3/fd (o
pendir: Permission denied)
kworker/0     5                   root  cwd   unknown                                         /proc/5/cwd (
readlink: Permission denied)
kworker/0     5                   root  rtd   unknown                                         /proc/5/root 
(readlink: Permission denied)
 

命令执行后返回的信息默认有10列,说明如下:

1. COMMAND:进程名称

2.PID:进程ID

3.TID:线程ID

4.USER:所属用户

5.FD:文件描述符

可能的类型以及说明如下:

FD说明
cwd当前目录
txttxt文件
rtdroot目录
mem内存映射文件

6. TYPE:文件类型

可能的值以及说明如下:

TYPE说明
DIR目录
REG普通文件
CHR字符
a_inodeInode文件
FIFO管道或者socket文件
netlink网络
unknown未知

7.DEVICE:设备ID

8. SIZE/OFF:进程大小

9.NODE:文件的Inode号

10.NAME:路径或者链接

后面备注(readlink: Permission denied),是因为当前用户相应的访问权限。

所以使用lsof命令最好有root权限或者赋予普通用于sudo权限。

3.3 lsof +d proc:显示当前目录下的proc目录中被打开的文件信息

purpleEndurer @bash / $ lsof +d proc | more
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF       NODE NAME
systemd    2641 gxxc   12r   REG    0,4        0 4026531994 proc/swaps
lsof      12178 gxxc    3r   DIR    0,4        0          1 proc
qaxbrowse 14744 gxxc   12r   DIR    0,4        0          1 proc
qaxbrowse 14770 gxxc   19r   DIR    0,4        0          1 proc
purpleEndurer @bash / $ 

 

3.4 lsof +d proc +l:显示当前目录下的proc目录中被打开的文件信息,其中USER列不显示用户名而显示UID

purpleEndurer @bash / $ lsof +d proc -l | more
COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF       NODE NAME
systemd    2641     1000   12r   REG    0,4        0 4026531994 proc/swaps
qaxbrowse 14744     1000   12r   DIR    0,4        0          1 proc
qaxbrowse 14770     1000   19r   DIR    0,4        0          1 proc
lsof      14916     1000    3r   DIR    0,4        0          1 proc
purpleEndurer @bash / $ 

由于我们使用了 -l选项,所以执行结果中USER列显示的1000是UID

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

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

相关文章

第二篇、SD真人视频转卡通动画 学习笔记

接着第一篇 2K转4K 生成玩卡通视频后&#xff0c;如何转换成更高分辨率的视频 1、将第一篇生成的工作目录下的output目录改成output-old&#xff0c;新建一个output目录 2、进入0&#xff0c;1子目录&#xff0c;把EbSynth生成的Outputxxx都删掉&#xff0c;frames和keys下…

IP5306 2.1A充电2.4 A放电电高集成度移动电源SOC IC,为移动电源提供完美电源解决方案

IP5306是一款集成升压转换器、锂电池充电管 理、电池电量指示的多功能电源管理 SOC&#xff0c;为移动 电源提供完整的电源解决方案。 IP5306的高集成度与丰富功能&#xff0c;使其在应用时 仅需极少的外围器件&#xff0c;并有效减小整体方案的尺寸&#xff0c; 降低 BOM 成本…

Unity射击游戏开发教程:(5)使用 GetComponent 在 Unity 中进行脚本通信

我认为脚本通信是刚开始使用 Unity 时较难掌握的概念之一,我将继续讨论这个概念。在本文中,我将介绍如何在游戏对象发生碰撞时使用 GetComponent 来访问另一个脚本。 在这个游戏场景中,我有两个游戏对象,它们都有自己的脚本,需要进行通信。我们有玩家脚本和敌人脚本。Enem…

CC++的内存管理

C&C的内存管理 栈&#xff1a;即用即销毁 堆&#xff1a;有需求再申请空间&#xff0c;手动销毁 注意&#xff1a;const 修饰可以使变量有常性&#xff0c;但是变量存储的域与没有const修饰是相同的。 即&#xff1a; 在 main函数中&#xff0c; const int a 0; int b…

1个月,从估值3.5亿美元到卷款3000万,ZKasino做了什么?

项目rug跑路&#xff0c;对于加密圈的人而言&#xff0c;并不少见。 但rug得这么理直气壮&#xff0c;甚至在圈内掀起了一波对投资机构和KOL的口诛笔伐的项目&#xff0c;ZKasino&#xff0c;也算是头几个。 短短一个月时间&#xff0c;从估值3.5亿美元、众人吹捧的明星级项目&…

深入了解Redis内存淘汰策略中的LRU算法应用

LRU算法简析 LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;算法是一种常见的内存淘汰策略&#xff0c;它根据数据的访问时间来决定哪些数据会被淘汰。LRU算法的核心思想是&#xff1a;最久未被访问的数据&#xff0c;被认为是最不常用的数据&#…

基于Tensorflow完成mnist数据集的数字手写体识别

基于Tensorflow完成mnist数据集的数字手写体识别 关于知识背景CNNFCNN 关于数据集新的改变 关于知识背景 CNN 卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是一种具有局部连接、权值共享等特点的深层前馈神经网络&#xff08;Feed…

【大数据】LSM树,专为海量数据读写而生的数据结构

目录 1.什么是LSM树&#xff1f; 2.LSM树的落地实现 1.什么是LSM树&#xff1f; LSM树&#xff08;Log-Structured Merge Tree&#xff09;是一种专门针对大量写操作做了优化的数据存储结构&#xff0c;尤其适用于现代大规模数据处理系统&#xff0c;如NoSQL数据库&#xff…

C# winform OpenProtocol中数据中的UI是什么类型?

C# winform OpenProtocol中数据中的UI是什么类型&#xff1f;

vue2项目升级到vue3经历分享

依据vue官方文档&#xff0c;vue2在2023年12月31日终止维护。因此决定将原来的岁月云记账升级到vue3&#xff0c;预计工作量有点大&#xff0c;于是想着把过程记录下来。 原系统使用的技术栈 "dependencies": {"axios": "^0.21.1","babel-…

C++-DAY1

思维导图 有以下定义&#xff0c;说明哪些量可以改变哪些不可以改变&#xff1f; const char *p; const (char *) p; char *const p; const char* const p; char const *p; (char *) const p; char const* const p; const char *p&#xff1a;指针 p 所指向的内容不可改…

【嵌入式】Arduino IDE + ESP32开发环境配置

一 背景说明 最近想捣鼓一下ESP32的集成芯片&#xff0c;比较了一下&#xff0c;选择Arduino IDE并添加ESP32支持库的方式来开发&#xff0c;下面记录一下安装过程以及安装过程中遇到的坑。 二 下载准备 【1】Arduino IDE ESP32支持一键安装包&#xff08;非常推荐&#xff0…

如何将web content项目导入idea并部署到tomcat

将Web Content项目导入IntelliJ IDEA并部署到Tomcat主要涉及以下几个步骤&#xff1a; 1. 导入Web Content项目 打开IntelliJ IDEA。选择“File” -> “New” -> “Project from Existing Sources…”。浏览到你的Web Content项目的文件夹&#xff0c;并选择它。Intell…

Spring的9个核心功能(一)

目录 资源管理 Java资源管理 1、来个Demo 2、原理 Spring资源管理 1、资源抽象 Resource WritableResource 2、资源加载 3、小结 环境 1、Environment 2、配置属性源PropertySource 3、SpringBoot是如何解析配置文件 类型转换 1、类型转换API …

什么是IIoT?

什么是IIoT? IIoT,即工业物联网(Industrial Internet of Things),是指将物联网技术应用到工业领域,通过微型低成本传感器、高带宽无线网络等技术手段,实现工业设备、系统和服务的互联互通,从而提高生产效率、降低能耗和成本,实现智能化和自动化生产。 IIoT的应用范围…

网络安全是否有需求

● 由于网络威胁数量不断增加&#xff0c;网络安全的需求很高。 ● 组织正在大力投资网络安全以保护其数据。 ● 就业市场缺乏熟练的网络安全专业人员。 ● 网络安全认证可以提升您在网络安全领域的职业前景。 ● 持续学习并了解最新的安全趋势在该领域至关重要。 随着对技术和…

vue3去掉el-table底部白色边框

加入下面这一行代码就行了&#xff0c;我用的是less :deep(.el-table__inner-wrapper:before) {background: none;}效果图

使用PyCharm开发工具创建工程

一. 简介 前面文章实现了开发 python程序使用的 开发工具PyCharm&#xff0c;本文来学习使用 PyCharm开发工具创建一个 python工程。 二. 使用PyCharm开发工具创建工程 1. 首先&#xff0c;打开 PyCharm开发工具&#xff0c;打开 "New project" 选项&#xff1a; …

详解数据结构:队列(含栈与队列扩展)

一、顺序队列 有一种线性序列&#xff0c;特点是先进先出&#xff0c;这种存储结构称为队列。队列也是一种线性表&#xff0c;只不过它是操作受限的线性表&#xff0c;只能再两端操作&#xff1a;一端进、一端出。进的一端称为队尾&#xff0c;出的一端称为队头。队列可以用顺…

20240424codeforces刷题题解

240424刷题题解 Walk on Matrix CodeForces - 1332D 思路 构造题&#xff0c;每个 d p i , j dp_{i,j} dpi,j​​​都是由其左上方向中的按位与最大值决定的。 我们需要从使得贪心解与正确解的差值为 k k k。 为了方便获得 k k k&#xff0c;可以考虑构造一个贪心解为 0…