【linux】lsof的常用命令汇总

lsof,就是"ls open file"的意思,是一个显示文件打开句柄的工具,下面汇总一些常用的命令

展示系统中所有

直接执行lsof,就是现实系统中所有打开句柄

# lsof

COMMAND  PID       USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
init       1       root  cwd       DIR        8,1      4096          2 /
init       1       root  txt       REG        8,1    124704     917562 /sbin/init
init       1       root    0u      CHR        1,3       0t0       4369 /dev/null
init       1       root    1u      CHR        1,3       0t0       4369 /dev/null
init       1       root    2u      CHR        1,3       0t0       4369 /dev/null
init       1       root    3r     FIFO        0,8       0t0       6323 pipe

展示title中的字段解释

  • COMMAND
    调用命令
  • PID
    process ID
  • USER
    用户
  • FD
    file description
    cwd – Current Working Directory 当前位置
    txt – Text file 文本文件
    mem – Memory mapped file 内存映射文件
    mmap – Memory mapped device 内存映射设备
    NUMBER – r for read, w for write, u for read and write. 权限数字表示
  • TYPE
    REG – Regular File 普通文件
    DIR – Directory 文件夹
    FIFO – First In First Out 先入先出文件(一般为管道文件)
    CHR – Character special file 字符串文件

查看文件被那些进程使用

# lsof /var/log/syslog

COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsyslogd 488 syslog    1w   REG    8,1     1151 268940 /var/log/syslog

显示文件夹下所有占用文件的句柄信息

# lsof +D /var/log/

COMMAND   PID   USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsyslogd  488 syslog   1w   REG    8,1     1151 268940 /var/log/syslog
rsyslogd  488 syslog   2w   REG    8,1     2405 269616 /var/log/auth.log
console-k 144   root   9w   REG    8,1    10871 269369 /var/log/ConsoleKit/history

显示某个程序执行的句柄

通过-c 指定, 它是字符串前缀匹配

# lsof -c ssh -c init

COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
init         1       root  txt    REG        8,1   124704  917562 /sbin/init
init         1       root  mem    REG        8,1  1434180 1442625 /lib/i386-linux-gnu/libc-2.13.so
init         1       root  mem    REG        8,1    30684 1442694 /lib/i386-linux-gnu/librt-2.13.so
...
ssh-agent 1528 lakshmanan    1u   CHR        1,3      0t0    4369 /dev/null
ssh-agent 1528 lakshmanan    2u   CHR        1,3      0t0    4369 /dev/null
ssh-agent 1528 lakshmanan    3u  unix 0xdf70e240      0t0   10464 /tmp/ssh-sUymKXxw1495/agent.1495

查看mount文件或者文件夹被谁占用

# lsof +D /mnt/glusterFS/cache/
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF                 NODE NAME
test        29757 root   84u   REG  0,331   122880 13547194176911157464 /mnt/glusterFS/cache/365701222416481548_767717188491542528.mp3

查看某个用户打开的句柄

# lsof -u lakshmanan

COMMAND    PID       USER   FD   TYPE     DEVICE SIZE/OFF       NODE NAME
update-no 1892 lakshmanan   20r  FIFO        0,8      0t0      14536 pipe
update-no 1892 lakshmanan   21w  FIFO        0,8      0t0      14536 pipe
bash      1995 lakshmanan  cwd    DIR        8,1     4096     393218 /home/lakshmanan

如果你希望列出所有但是排除用户lakshmanan,可以这样

# lsof -u ^lakshmanan

COMMAND    PID       USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
rtkit-dae 1380      rtkit    7u     0000        0,9         0       4360 anon_inode
udisks-da 1584       root  cwd       DIR        8,1      4096          2 /

如果想找到某个用户下使用的进程ID信息,可以执行
lsof -t -u lakshmanan

配合kill可以执行按用户杀进程
kill -9 `lsof -t -u lakshmanan

查看某个进程的句柄

# lsof -p 1753

COMMAND  PID       USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
bash    1753 lakshmanan  cwd    DIR    8,1     4096  393571 /home/lakshmanan/test.txt
bash    1753 lakshmanan  rtd    DIR    8,1     4096       2 /
bash    1753 lakshmanan  255u   CHR  136,0      0t0       3 /dev/pts/0
...

按AND组合条件

如果将不同的命令条件组合使用,这里默认是OR的关系,如

# lsof -u lakshmanan -c init

COMMAND    PID       USER   FD   TYPE     DEVICE SIZE/OFF       NODE NAME
init         1       root  cwd    DIR        8,1     4096          2 /
init         1       root  txt    REG        8,1   124704     917562 /sbin/init
bash      1995 lakshmanan    2u   CHR      136,2      0t0          5 /dev/pts/2
bash      1995 lakshmanan  255u   CHR      136,2      0t0          5 /dev/pts/2
...

如果要实现AND的组合,需要添加-a,如lsof -u lakshmanan -c init -a

repeat模式

有点类似ping的方式,通过-r参数来让命令重复执行
lsof -u lakshmanan -c init -a -r5
r后面的数字表示间隔秒数

特别注意的是,可以使用==+r== 表示直到没有结果返回结束

显示所有网络连接

# lsof -i

COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
avahi-dae  515 avahi   13u  IPv4   6848      0t0  UDP *:mdns
avahi-dae  515 avahi   16u  IPv6   6851      0t0  UDP *:52060
cupsd     1075  root    5u  IPv6  22512      0t0  TCP ip6-localhost:ipp (LISTEN)

可以指定-i4或者-i6单独来看IPv4或者IPv6

可以指定tcp/udp来单独看,如lsof -i tcp; lsof -i udp;

查看指定端口的占用情况

# lsof -i :25

COMMAND  PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4   2541 Debian-exim    3u  IPv4   8677       TCP localhost:smtp (LISTEN)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值