Linux命令神器-lsof

简介:

lsof(list open files)可以列出当前系统中进程打开的所有文件,在Linux环境下,我们可以理解为一切(包括网络套接口)皆文件。在实际使用过程中,lsof是一款非常强大的系统监控和系统诊断工具。在终端下输入lsof 即可显示系统打开的文件, lsof 一般需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。

** 01**

lsof使用

Centos安装

yum -y install lsof命令安装lsof工具

使用方法

lsof --h显示使用方法

usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]

终端下输入lsof命令,可以显示系统打开的文件

[root@localhost dockerbuild]# lsof |head

lsof输出每列含义如下
COMMAND:进程的名称
PID:进程标识符
TID:任务 ID。Linux 下 TID 为空表示该行为进程
USER:进程所有者
FD:文件描述符。主要有:
cwd:应用程序当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
lnn:库引用(AIX)
err:FD 信息错误
jld:监狱目录(FreeBSD)
ltx:共享库文本(代码和数据)
mxx:十六进制内存映射类型号 xx
m86:DOS合并映射文件
mem:内存映射文件
mmap:内存映射设备
pd:父目录
rtd:根目录
tr:内核跟踪文件(OpenBSD)
v86:VP/ix 映射文件
0:标准输出
1:标准输入
2:标准错误

文件描述符后一般还跟着文件状态模式:
r:只读模式
w:写入模式
u:读写模式
空格:文件的状态模式为 unknow,且没有锁定
-:文件的状态模式为 unknow,且被锁定

同时在文件状态模式后面,还跟着相关的锁:
N:对于未知类型的 Solaris NFS 锁
r:文件部分的读锁
R:整个文件的读锁
w:文件的部分写锁
W:整个文件的写锁
u:任何长度的读写锁
U:用于未知类型的锁
x:用于部分文件上的 SCO OpenServer Xenix 锁
X:用于整个文件上的 SCO OpenServer Xenix 锁
space:无锁

TYPE:文件类型。常见的文件类型有:
REG:普通文件
DIR:表示目录
CHR:表示字符类型
BLK:块设备类型
UNIX:UNIX 域套接字
FIFO:先进先出队列
IPv4:IPv4 套接字
DEVICE:磁盘名称
SIZE:文件的大小或文件偏移量(以字节为单位)
NODE:索引节点
NAME:打开文件的确切名称</pre>

下面我们举例在Linux上常用的几种用法

lsof -i 显示所有网络连接

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 --> 端口号 (可以不只一个)

显示指定端口占用进程

[root@localhost ~]# lsof -i:22

lsof /data ,这在 umount 某个文件系统失败时非常有用(通常会报该 FS is busy)

02

LSOF实战训练营

1、Lsof诊断Device is busy问题

在系统运维过程中,我们会遇到磁盘卸载报umount: /home: device is busy之类的提示,如下我们给/home单独挂载了磁盘/dev/sdb1

Filesystem            Size  Used Avail Use% Mounted on

卸载磁盘的时候提示如下

[root@localhost ~]# umount /home/

umount: /home: device is busy.

我们可以使用lsof命令找出占用磁盘的进程

[root@localhost ~]# lsof /home

直接kill掉此进程,磁盘成功卸载

[root@localhost ~]# kill -9 5689

当然除了kill进程外也可以使用如下方法:

  • umount -l /home 强行解除挂载

  • fuser -mv -k /homeh直接杀死占用磁盘的进程

2 、Lsof解决文件已删除空间未释放问题

磁盘空间达到100%会导致数据无法正常写入文件造成程序异常,如下/home空间达到100%,一般的解决方法是先删除大文件,然后有必要的情况下对磁盘进行扩容。

按照排查步骤,先进入/home目录查找占用磁盘的大文件(命令du -h --max-depth=1 /home),如下发现/home目录下并没有占用空间大的文件和目录。

image

那么为什么磁盘空间显示占用100%呢?原因是磁盘上文件已经被删除,但是存在进程仍然占用这些文件,因此其原来占用的磁盘空间并没有被释放,当然重启操作系统,空间会被释放出来,但是重启并不是最好的解决方法。

lsof -n | grep delete检查出占用文件的进程

[root@192 home]# lsof -n | grep delete

从进程显示上可以看出,/home目录下占用文件已经删除,仍然有3个进程在占用,我们采用kill方式杀死进程,释放空间。

[root@192 home]# kill -9 8400 8406 8415

3、巧用losf恢复已删除文件

利用lsof可以恢复一些系统日志,前提是这个进程必须存在,具体请参考下面实验步骤

[root@192 ~]# echo "Lsof test" >lsof.log

按照上面所示,我们创建文件lsof.log,然后使用tail命令产生一个后台进程

[root@192 ~]# ls

我们删除lsof.log文件,然后losf | grep lsof.log

[root@192 ~]# lsof |grep lsof.log

从进程占用上可以看出

PID:9933 FD:3 那我们有直接进入/proc/9933/FD/3查看一下

image

已经将文件重定向恢复到原路径

[root@192 fd]# cat /root/lsof.log 

数据恢复完成,注意这个是有前提条件哦,占用进程需要存在。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容