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

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

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

相关文章

LeetCode_链表的回文结构

✨✨所属专栏&#xff1a;LeetCode刷题专栏✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ 题目描述&#xff1a; 对于一个链表&#xff0c;请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法&#xff0c;判断其是否为回文结构。给定一个链表的头指针A&#xff0c;请返回一个bo…

【telnet 命令安装】centos8 linux下安装telnet命令

在CentOS 8上安装Telnet服务&#xff0c;您需要分别安装Telnet客户端和服务器端。以下是安装步骤的概述&#xff1a; 检查是否已安装Telnet&#xff1a; 您可以使用rpm命令来检查系统是否已经安装了Telnet客户端或服务器端。例如&#xff1a; rpm -qa | grep telnet-client rpm…

标准 数字化

政策法规&#xff1a; 标准化建设相关政策&#xff0c;包括《国家标准化发展纲要》&#xff0c;《重庆市的标准化条例》 标准数字化转型路线&#xff1a;标准数字化转型的白皮书、发展跟踪报告之类 相关文献&#xff1a;标准数字化转型发展现状与工作路线(大多是电力方面)、数…

uni-app canvas 签名

调用方法 import Signature from "/components/signature.vue" const base64Img ref() //监听getSignImg uni.$on(getSignImg, ({ base64, path }) > {base64Img.value base64//console.log(签名base64, path >, base64, path) //拿到的图片数据// 之后取消…

基于51单片机的矩阵按键扫描的proteus仿真

文章目录 一、按键按键按键消抖 二、独立按键仿真图仿真程序 三、矩阵按键仿真图仿真程序 四、总结 一、按键 按键 按键通常指的是电子设备上的一种输入装置&#xff0c;用于在按下时发送信号&#xff0c;以便设备执行相应的操作。按键可以分为独立按键和矩阵按键两种类型。 …

无人机GB42590接收端 +接收端模组,同时支持2.4G与5.8G双频

严格按照GB42590的协议开发的发射端&#xff0c;通过串口和模块通讯&#xff0c;默认波特率 921600。 http://www.doit.am/深圳四博智联科技有限公司https://shenzhendoit.taobao.com/category-1734422372.htm?spma1z10.1-c-s.0.0.560c74d77eT01G&searchy&catNameGB4…

Qt开发(二)打包发布

注意qt6生成的exe不能再win7&#xff08;包含win7&#xff09;以下运行 1、编译程序 编译程序不演示 2、找到exe文件 在这个路径下找到该exe文件 3、打包 新建一个文件夹 将exe放在该文件夹下除了exe开始这里面没有其他文件 找到安装目录下 在cmd中运行 把这个文件和编…

【Java】文件大小转换工具类(B,KB,MB,G,TB,PB)

说明 使用方法&#xff1a;FileMemoryUtil.prettyByteSize(35871)&#xff0c;参数为字节个数 返回结果&#xff1a;保留一位小数的自适应结果&#xff08;例如&#xff1a;4.1KB&#xff09;。可以留意在浏览器上下载的文件&#xff0c;会根据文件大小展示不同的单位&#xff…

Docker创建redis容器

Docker运行Redis 一&#xff1a;Docker安装Redis docker search redis二&#xff1a;Docker拉取镜像 下面两个命令看自己的需求 docker pull <镜像名称>&#xff1a;<版本号> #需要自己清楚自己需要什么般本的redisdocker pull redis #这个命令会自动下载最新…

C语言入门课程学习笔记3

C语言入门课程学习笔记3 第12课 - if 语句编程练习第13课 - switch 多分支选择语句第14课 - 程序中的循环结构第15课 - while 语句编程练习第16课 - do...while 与 for第17课 - break 与 continue 本文学习自狄泰软件学院 唐佐林老师的 C语言入门课程&#xff0c;图片全部来源于…

BUUCTF-Misc21

[GXYCTF2019]SXMgdGhpcyBiYXNlPw1 1.打开附件 是一个文本文档 里面有很多字符串 2.PuzzleSolver 用PuzzleSolver工具进行多组base64解码 3.得到flag 间谍启示录1 1.打开附件 是一个.iso文件 2.foremost 用foremost 分离文件 查看分离的文件 发现一个压缩包 3.运行 解压之…

Python | Leetcode Python题解之第47题全排列II

题目&#xff1a; 题解&#xff1a; class Solution:def permuteUnique(self, nums: List[int]) -> List[List[int]]:def dfs(x):if x len(nums) - 1:res.append(list(nums)) # 添加排列方案returndic set()for i in range(x, len(nums)):if nums[i] in dic: continue …

历史遗留问题-Oracle 19c RAC 安装时节点连接性问题

测试服务器的二节点数据库宕掉了&#xff0c;原因不明&#xff0c;需要产环境重新安装。我想上次在自己虚拟机安装实验过一次&#xff0c;应该一天能搞定&#xff0c;事实证明&#xff0c;你永远有学不完的bug&#xff01;&#xff01;&#xff01;&#xff01; 首先查看一下系…

算法基础:并查集详解

并查集 并查集&#xff0c;在一些有N个元素的集合应用问题中&#xff0c;我们通常是在开始时让每个元素构成一个单元素的集合&#xff0c;然后按一定顺序将属于同一组的元素所在的集合合并&#xff0c;其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学…

Web前端开发之HTML_2

HTML5简介与基础骨架标题标签标签之段落、换行、水平线标签之图片标签之超文本链接标签之文本列表标签之有序列表列表标签之无序列表 1. HTML5简介与基础骨架 1.1 HTML5简介 HTML5是用来描述网页的一种语言&#xff0c;被称为超文本标记语言。用HTML5编写的文件&#xff0c;后…

伴游平台搭建重点,会用到哪些三方服务?

伴游平台搭建的重点在于确保用户的安全与体验&#xff0c;提供便捷的服务&#xff0c;同时维护平台的稳定运营。在搭建过程中&#xff0c;可能会用到以下三方服务&#xff1a; 身份验证与背景调查服务&#xff1a;由于伴游服务涉及到用户的个人安全和信任问题&#xff0c;因此需…

企业微信代开发应用登录操作

首先声明&#xff1a;企微的文档写得真烂&#xff01;&#xff01;&#xff01;有一些问题&#xff0c;官方情愿在问答区给用户一个个解答&#xff0c;也不愿意在文档写清楚&#xff0c;生怕自己工作量不饱和被优化。 概念说明 代开发应用&#xff0c;是相对于自建应用来说的。…

如何解决 IntelliJ IDEA 2024 启动总闪退问题?一站式解决方案!

&#x1f9e0; 如何解决 IntelliJ IDEA 2024 启动总闪退问题&#xff1f;一站式解决方案&#xff01; 文章目录 &#x1f9e0; 如何解决 IntelliJ IDEA 2024 启动总闪退问题&#xff1f;一站式解决方案&#xff01;摘要引言正文一级标题&#xff1a;检查和优化内存设置一级标题…

经验丰富也被裁了,失业快2年找不到工作?

前几天徐工说&#xff0c;他有个邻居&#xff0c;最近逮到他总是要跟他扯上几句。 原因是徐工一直是做嵌入式开发&#xff0c;而他一直做纯软件开发&#xff0c;具体不知道做后端还是前端。 他说&#xff0c;他至少有半年没上班了&#xff0c;之前在一家龙头物流公司上班。 碰上…

五年Python从业者,谈谈Python的一些优缺点

前言 Python它是作为年轻的血液&#xff0c;融入到编程语言这个大家庭里面&#xff0c;作为具有年轻人的蓬勃朝气的python&#xff0c;那它同时就会有年轻人的桀骜焦躁。 今天就来谈谈Python的一些优缺点。 先从优点说起&#xff0c;我是把它分为5部分。 1.简单————Pyth…