linux命令-lsof

简单来讲  lsof是一个可以查看进程打开文件的情况的命令   日常运维工作中 使用到的场景有很多

而之所以lsof命令这么强大 就是因为在linux中  一切皆文件

  • 简单介绍

命令安装:

如果你的linux没有lsof命令  yum install lsof  安装就好

参数介绍:

默认 : 没有选项,lsof列出活跃进程的所有打开文件
组合 : 可以将选项组合到一起,如-abc,但要当心哪些选项需要参数

-a 列出打开文件存在的进程
-c<进程名> 列出指定进程所打开的文件
-g  列出GID号进程详情
-d<文件号> 列出占用该文件号的进程
+d<目录>  列出目录下被打开的文件
+D<目录>  递归列出目录下被打开的文件
-n<目录>  列出使用NFS的文件
-i<条件>  列出符合条件的进程。(4、6、协议、:端口、 @ip )
-p<进程号> 列出指定进程号所打开的文件
-u  列出UID号进程详情
-h 显示帮助信息
-v 显示版本信息
-t 仅获取进程ID
-F 格式化输出结果,用于其它命令。可以通过多种方式格式化,如-F pcfn(用于进程id、命令名、文件描述符、文件名,并以空终止)
-l 在输出显示用户ID而不是用户名
-U 获取UNIX套接口地址

输出介绍

【command】进程名称/命令

【pid】进程id

【tid】线程id

【user】进程所有者

【fd】文件描述符

cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录
txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库
lnn:library references (AIX)
er:FD information error (see NAME column)
jld:jail directory (FreeBSD)
ltx:shared library text (code and data)
mxx:hex memory-mapped type number xx
m86:DOS Merge mapped file
mem:memory-mapped file
mmap:memory-mapped device
pd:parent directory
rtd:root directory
tr:kernel trace file (OpenBSD)
v86:VP/ix mapped file
0:表示标准输出
1:表示标准输入
2:表示标准错误

【type】文件类型

DIR:表示目录
CHR:表示字符类型
BLK:块设备类型
UNIX:UNIX域套接字
FIFO:先进先出(FIFO)队列
IPv4:网际协议(IP)套接字

【device】磁盘名称

【size/off】文件大小

【node】索引节点(文件在磁盘上的标识)

【name】打开文件的确切名称

 

  • 使用场景

【1】查看端口被哪个进程占用

lsof -i:端口

[root@localhost sbin]# lsof -i:80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   1087   root    6u  IPv4  21571      0t0  TCP *:http (LISTEN)
nginx   1088 nobody    6u  IPv4  21571      0t0  TCP *:http (LISTEN)

[root@localhost sbin]# lsof -i :22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     912 root    3u  IPv4  18920      0t0  TCP *:ssh (LISTEN)
sshd     912 root    4u  IPv6  18929      0t0  TCP *:ssh (LISTEN)
sshd    1044 root    3u  IPv4  20554      0t0  TCP localhost.localdomain:ssh->192.168.30.1:51424 (ESTABLISHED)
sshd    1048 root    3u  IPv4  20616      0t0  TCP localhost.localdomain:ssh->192.168.30.1:51431 (ESTABLISHED)

【2】恢复被删除的文件

有时候 不小心删除了一个文件   lsof可以提供一个简单的恢复方法(前提是该文件被当前还在执行的进程打开)

例如lsof_test.txt文件我不小心rm -rf 删除掉了  数据比较重要   lsof命令就是一个简单的可能恢复的选择

这个时候 执行命令lsof |grep lsof_test.txt  发现另一个有人正在用less命令查看这个文件  并且可以看到最后位置的文件名称后面有个(deleted),说明这个文件已经被删除了,这个进程结束,文件就不能轻易恢复了,就需要更专业的操作

查出来的信息,可以得到进程id,文件描述符

这个时候我们就可以去 /proc/进程id/fd 下面找到这个文件了,如下面 这个4就是这个文件的副本(上面查到的文件描述符)

然后 cat 4 >> /root/lsof_test.txt  就可以将文件内容导出  重新生成文件了

 

【3】网络分析辅助:

列出所有的TCP网络连接信息:lsof -i tcp

列出80端口TCP协议的所有连接信息:lsof -i tcp:80

列出相关IP的连接信息(也可以加端口):lsof -i @172.0.0.1

(以上tcp也可换成udp)

【4】关于用户

列出指定用户打开的文件列表:lsof -u uasp -i tcp (可以看看某个用户都在干啥)

杀掉指定用户运行的所有东西:kill -9 'lsof -t -u xxuser' 

【5】其他

列出指定进程(进程名)打开的文件:lsof -c nginx

列出指定进程打开的文件列表:lsof -p 20711

指定目录下(递归查询)被进程打开的文件列表:lsof +D /usr/local/

 

后记

lsof命令很强大    尤其是通过各种参数或者与其他linxu 命令组合   更显其强大

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙叔运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值