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

这篇具有很好参考价值的文章主要介绍了Linux shell编程学习笔记47:lsof命令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux shell编程学习笔记47:lsof命令,麒麟操作系统,Linux世界,编程资料,linux,学习笔记,shell编程,脚本编程,lsof命令

0 前言

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

Linux shell编程学习笔记39:df命令https://blog.csdn.net/Purpleendurer/article/details/135577571于是开始清理磁盘空间。

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

这里要用到 lsof命令。

1 lsof命令的安装

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

Linux shell编程学习笔记47:lsof命令,麒麟操作系统,Linux世界,编程资料,linux,学习笔记,shell编程,脚本编程,lsof命令 

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 ~ $ 
 

Linux shell编程学习笔记47:lsof命令,麒麟操作系统,Linux世界,编程资料,linux,学习笔记,shell编程,脚本编程,lsof命令 

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 ~ $ 
 

Linux shell编程学习笔记47:lsof命令,麒麟操作系统,Linux世界,编程资料,linux,学习笔记,shell编程,脚本编程,lsof命令

尽管 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 显示帮助信息
-a AND选择(默认是或)
-b 避免内核块
-c c cmd 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信息
-Tqs TCP/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)
 

Linux shell编程学习笔记47:lsof命令,麒麟操作系统,Linux世界,编程资料,linux,学习笔记,shell编程,脚本编程,lsof命令

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

1. COMMAND:进程名称

2.PID:进程ID

3.TID:线程ID

4.USER:所属用户

5.FD:文件描述符

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

FD 说明
cwd 当前目录
txt txt文件
rtd root目录
mem 内存映射文件

6. TYPE:文件类型

可能的值以及说明如下:

TYPE 说明
DIR 目录
REG 普通文件
CHR 字符
a_inode Inode文件
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 / $ 

 Linux shell编程学习笔记47:lsof命令,麒麟操作系统,Linux世界,编程资料,linux,学习笔记,shell编程,脚本编程,lsof命令

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 / $ 

Linux shell编程学习笔记47:lsof命令,麒麟操作系统,Linux世界,编程资料,linux,学习笔记,shell编程,脚本编程,lsof命令

由于我们使用了 -l选项,所以执行结果中USER列显示的1000是UID文章来源地址https://www.toymoban.com/news/detail-860058.html

到了这里,关于Linux shell编程学习笔记47:lsof命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Linux shell编程学习笔记41:lsblk命令

    Linux shell编程学习笔记41:lsblk命令

    边缘计算面临着数据安全与隐私保护、网络稳定性等挑战,但同时也带来了更强的实时性和本地处理能力,为企业降低了成本和压力,提高了数据处理效率。因此,边缘计算既带来了挑战也带来了机遇,需要我们不断地研究 前几节学习我们均涉及到磁盘和文件存储,今天我们

    2024年01月24日
    浏览(12)
  • Linux shell编程学习笔记37:readarray命令和mapfile命令

    Linux shell编程学习笔记37:readarray命令和mapfile命令

      目录   0 前言 1  readarray命令的格式和功能 1.1 命令格式 1.2 命令功能 1.3 注意事项 2 命令应用实例 2.1 从标准输入读取数据时不指定数组名,则数据会保存到MAPFILE数组中 2.2 从标准输入读取数据并存储到指定的数组 2.3 使用 -O 选项指定起始下标 2.4 用-n指定有效行数 2.5 

    2024年02月03日
    浏览(15)
  • Linux shell编程学习笔记45:uname命令-获取Linux系统信息

    Linux shell编程学习笔记45:uname命令-获取Linux系统信息

    linux 有多个发行版本,不同的版本都有自己的版本号。 如何知道自己使用的Linux的系统信息呢? 使用uname命令、hostnamectl命令,或者通过查看/proc/version文件来了解这些信息。 我们先看看uname命令。 我们可以使用命令 uname --help命令 查看它的用法: purpleEndurer @  bash ~ $ uname --

    2024年04月10日
    浏览(14)
  • Linux shell编程学习笔记6:查看和设置变量的常用命令

    Linux shell编程学习笔记6:查看和设置变量的常用命令

    上节我们介绍了变量的变量命名规则、变量类型、使用变量时要注意的事项,今天我们学习一下查看和设置变量的一些常用命令,包括变量的提升,有些命令在之前的实例中已经使用过了。 语法格式:echo [参数] [输出内容] 常用参数: -e:支持反斜线控制的字符转换(具体参

    2024年02月07日
    浏览(10)
  • Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名

    Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名

    目录 0 前言 1 定义别名 2 查看别名 2.1 查看所有别名 2.2 查看某个别名 2.2.1  alias 别名 2.2.2 alias | grep 别名字符串 2.2.3 使用 Ctrl+Alt+E 组合键 3 unalias:删除别名 4 如何执行命令本身而非别名 4.1 方法1:使用 Ctrl+Alt+E 组合键  unalias 4.2 方法2:在命令前加上命令文件的绝对路径

    2024年02月05日
    浏览(10)
  • Linux shell编程学习笔记46:awk命令的由来、功能、格式、选项说明、版权、版本

    Linux shell编程学习笔记46:awk命令的由来、功能、格式、选项说明、版权、版本

    在编写Linux Shell脚本的过程中,我们经常要对Linux命令执行的结果进行分析和提取,Linux也在文本分析和提取这方面提供了不少的命令。比如我们之前研究过的cut命令。 Linux shell编程学习笔记43:cut命令 https://blog.csdn.net/Purpleendurer/article/details/135730679?spm=1001.2014.3001.5501 除了cut命

    2024年04月24日
    浏览(9)
  • Linux shell编程学习笔记44:编写一个脚本,将md5sum命令执行结果保存到变量中,进而比较两个文件内容是否相同

    Linux shell编程学习笔记44:编写一个脚本,将md5sum命令执行结果保存到变量中,进而比较两个文件内容是否相同

    在  Linux shell编程学习笔记42:md5sum https://blog.csdn.net/Purpleendurer/article/details/137125672?spm=1001.2014.3001.5501 中,我们提到编写一个在Linux系统下比较两个文件内容是否相同的脚本。 基本思路是: 其中有两个难点: 1.文件的md5值的获取 2.md5值的比较 对于第1个难点,我们的解决办法是

    2024年04月10日
    浏览(15)
  • Linux、银河麒麟操作系统——终端命令解析

    Linux、银河麒麟操作系统——终端命令解析

    目录  Ⅰ  Linux系统管理命令 Ⅱ  Linux内核基本配置 Ⅲ  银河麒麟操作系统管理命令 Ⅳ  查看Linux/centos系统cpu架构   命令说明 命令行 参数 新增用户账号 adduser / useradd 改变finger指令显示的信息 chfn (change finger information) 语法示例:chfn -f -f:设置真实姓名 -h:设置家中的电

    2024年01月16日
    浏览(9)
  • 麒麟操作系统(Linux)使用和维护:进程相关的操作命令

    麒麟操作系统(Linux)使用和维护:进程相关的操作命令

      目录 1. 查看进程 2. top命令实时监控进程 3. 杀死进程 4. 图形界面查看和杀死进程         作为国产操作系统,无论是银河麒麟,还是中标麒麟,它们的服务器操作系统或者桌面操作系统,已经广泛应用于工业生产和科学研究领域。因为麒麟操作系统的内核是Linux系统内

    2024年02月04日
    浏览(10)
  • Linux shell编程学习笔记27:tput

    Linux shell编程学习笔记27:tput

    除了stty命令,我们还可以使用tput命令来更改终端的参数和功能。 tput 命令的主要功能有:移动更改光标、更改文本显示属性(如颜色、下划线、粗体),清除屏幕特定区域等。  tput [选项] [参数] 命令格式:   tput setab n : 设置背景色,set text attributes background color   tput

    2024年02月05日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包