[转]lsof详解
lsof是一个功能强大的诊断工具,它可以通过进程与打开的文件进行联系,可以列出一个进程打开的所有文件信息.
1 寻找与打开的文件相关联的进程
通过指定文件,可以发现正在使用这个文件的进程
# lsof /var/log/messages
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
syslogd 1968 root 1w REG 3,9 219245 780490 /var/log/messages
可以看出,只有系统记录后台程序(syslogd)打开了这个文件.
2 用lsof解除阻塞
有时你想用umount卸载一个文件系统,但是程序报告该文件系统正忙,则需要直到哪些文件,程序或者用户
仍在使用该系统,可以执行下面命令
#lsof mountpoint //mountpoint是挂载点
注意,有时lsof不能在某部分发现任何打开的文件,但它仍显示为忙状态.在此情况下,说明该文件系统中的内核
拥有一个或多个文件的内部引用.在这种情况下,唯一的解决方案是等待引用消失或在/etc/fstab目录下激活该
文件系统适当的安装实体并且重新启动.
3 搜索打开的网络连接
参数i可以搜索系统中所有打开的套接字
如果想搜索IP地址为192.168.0.100的远程主机的所有网络连接,可以执行lsof -i@192.168.0.100
因为本机试验,假设远程主机IP也为127.0.0.1
# lsof -i@127.0.0.1
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
xinetd 2119 root 5u IPv4 2409 TCP localhost.localdomain:32769 (LISTEN)
cupsd 2160 root 0u IPv4 2537 TCP localhost.localdomain:ipp (LISTEN)
fam 2401 root 0u IPv4 2409 TCP localhost.localdomain:32769 (LISTEN)
fam 2401 root 1u IPv4 2409 TCP localhost.localdomain:32769 (LISTEN)
fam 2401 root 2u IPv4 2409 TCP localhost.localdomain:32769 (LISTEN)
lsof报告了几条连接到127.0.0.1地址的命令.
netstat和lsof可以配合使用.lsof -iTCP@192.168.0.100可以得到和远程主机192.168.0.100进行连接的进程,
该进程运行在本地主机的某个端口上
# lsof -iTCP@127.0.0.1
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
xinetd 2119 root 5u IPv4 2409 TCP localhost.localdomain:32769 (LISTEN)
cupsd 2160 root 0u IPv4 2537 TCP localhost.localdomain:ipp (LISTEN)
fam 2401 root 0u IPv4 2409 TCP localhost.localdomain:32769 (LISTEN)
fam 2401 root 1u IPv4 2409 TCP localhost.localdomain:32769 (LISTEN)
fam 2401 root 2u IPv4 2409 TCP localhost.localdomain:32769 (LISTEN)
4 搜索被程序打开的所有文件
要知道一个特定的程序打开了哪些文件,可以执行 lsof -p PID,一般配合ps使用
#ps -aux
.......
root 2324 0.1 3.6 14860 9236 ? S 21:22 0:02 fcitx
......
# lsof -p 2324
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
fcitx 2324 root cwd DIR 3,9 4096 290881 /root
fcitx 2324 root rtd DIR 3,9 4096 2 /
fcitx 2324 root txt REG 3,9 125784 341397 /usr/bin/fcitx
fcitx 2324 root mem REG 3,9 103044 775758 /lib/ld-2.3.2.so
fcitx 2324 root mem REG 3,9 21040 81056 /usr/lib/gconv/gconv-modules.cache
fcitx 2324 root mem REG 3,9 6404 80912 /usr/lib/gconv/GBGBK.so
fcitx 2324 root mem REG 3,9 19960 759919 /usr/X11R6/lib/X11/locale/lib/common/xlibi18n.so.2
fcitx 2324 root mem REG 3,9 3740 759918 /usr/X11R6/lib/X11/locale/lib/common/xlcUTF8Load.so.2
fcitx 2324 root mem REG 3,9 908016 420807 /usr/X11R6/lib/libX11.so.6.2
fcitx 2324 root mem REG 3,9 15084 775769 /lib/libdl-2.3.2.so
fcitx 2324 root mem REG 3,9 30301680 468656 /usr/lib/locale/locale-archive
fcitx 2324 root mem REG 3,9 105776 80913 /usr/lib/gconv/GBK.so
fcitx 2324 root mem REG 3,9 36456 759921 /usr/X11R6/lib/X11/locale/lib/common/xomGeneric.so.2
fcitx 2324 root mem REG 3,9 177636 80910 /usr/lib/gconv/GB18030.so
fcitx 2324 root mem REG 3,9 1531064 290959 /lib/tls/libc-2.3.2.so
fcitx 2324 root 0r CHR 1,3 66358 /dev/null
fcitx 2324 root 1w REG 3,9 587 293627 /root/.xsession-errors
fcitx 2324 root 2w REG 3,9 587 293627 /root/.xsession-errors
fcitx 2324 root 3u unix 0xcc01a580 2750 socket
上面的输出信息显示了该进程打开的所有文件,设备,库以及网络套接字
如果想找到一条命令的所有实例及每个实例所打开的文件,可以使用参数c,如
[root@www root]# lsof -c sshd
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 2105 root cwd DIR 3,9 4096 2 /
sshd 2105 root rtd DIR 3,9 4096 2 /
sshd 2105 root txt REG 3,9 278552 388141 /usr/sbin/sshd
sshd 2105 root mem REG 3,9 103044 775758 /lib/ld-2.3.2.so
sshd 2105 root mem REG 3,9 28452 355792 /usr/lib/libwrap.so.0.7.6
sshd 2105 root mem REG 3,9 30448 776067 /lib/libpam.so.0.75
sshd 2105 root mem REG 3,9 15084 775769 /lib/libdl-2.3.2.so
sshd 2105 root mem REG 3,9 76552 775789 /lib/libresolv-2.3.2.so
sshd 2105 root mem REG 3,9 12696 775795 /lib/libutil-2.3.2.so
sshd 2105 root mem REG 3,9 52616 355669 /usr/lib/libz.so.1.1.4
sshd 2105 root mem REG 3,9 91604 775773 /lib/libnsl-2.3.2.so
sshd 2105 root mem REG 3,9 968956 776055 /lib/libcrypto.so.0.9.7a
sshd 2105 root mem REG 3,9 385220 759686 /usr/kerberos/lib/libkrb5.so.3.1
sshd 2105 root mem REG 3,9 63880 759676 /usr/kerberos/lib/libk5crypto.so.3.0
sshd 2105 root mem REG 3,9 5572 759666 /usr/kerberos/lib/libcom_err.so.3.0
sshd 2105 root mem REG 3,9 73756 759672 /usr/kerberos/lib/libgssapi_krb5.so.2.2
sshd 2105 root mem REG 3,9 52472 775779 /lib/libnss_files-2.3.2.so
sshd 2105 root mem REG 3,9 1531064 290959 /lib/tls/libc-2.3.2.so
sshd 2105 root 0u CHR 1,3 66358 /dev/null
sshd 2105 root 1u CHR 1,3 66358 /dev/null
sshd 2105 root 2u CHR 1,3 66358 /dev/null
sshd 2105 root 3u IPv4 2377 TCP *:ssh (LISTEN)
显示sshd服务器的所有实例及它们所打开的文件
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mysql 4818 secu 3u IPv4 1299676962 TCP 172.27.32.33:50435->10.128.12.99:mysql (ESTABLISHED)
GetNetAla 12543 secu 3u IPv4 1299638828 TCP 172.27.32.33:36972->172.27.32.33:mysql (ESTABLISHED)
GetNetAla 12543 secu 4u IPv4 1299653048 TCP 172.27.32.33:44175->10.128.12.99:mysql (ESTABLISHED)
perl 21621 secu 4u IPv4 1299702234 TCP 172.27.32.33:42349->172.27.57.13:mysql (ESTABLISHED)
perl 21623 secu 4u IPv4 1299702235 TCP 172.27.32.33:42350->172.27.57.13:mysql (ESTABLISHED)
lsof 工具可列出某个Unix 进程所打开文件信息的清单,被打开文件的类型可能包括了:本地文件,目录,网络共享文件,块设备文件,字符设备文件,共享库,管道,软链接,套接字等等.
以下是具体的lsof 操作实例总结:
1,列出所有被打开文件信息
#lsof
2,查看某个被打开文件信息
#lsof /path/to/file
#lsof /path/to/file1 /path/to/file2
3,列出某个目录下的被打开文件
#lsof +D /path
#lsof | grep “/path”
4,列出某个用户下的被打开文件
#lsof -u nobody
#lsof -u nobody,root
5,列出某个进程下的被打开文件
#lsof -c httpd
#lsof -c httpd -c mysqld
6,复合查询(OR)被打开文件信息
#lsof -u nobody -c httpd
7,复合查询(AND)被打开文件信息
#lsof -a -u root -c httpd
8,查看除root之外所有用户的被打开文件
#lsof -u ^root
9,查看具体进程PID的被打开文件
#lsof -p 10101
#lsof -p 10101,10102,10103
10,列出所有网络连接
#lsof -i
11,列出所有网络TCP或者UDP连接
#lsof -i tcp
#lsof -i udp
12,查看具体网络端口信息
#lsof -i :80
#lsof -i tcp:80
#lsof -i udp:53
13,查看具体用户下所有网络连接
#lsof -a -u www -i
14,列出NFS 文件
#lsof -N
15,列出Unix 套接字文件
#lsof -U
16,列出某个特定文件描述符相关联的文件
#lsof -d 2
#lsof -d 0-2
#lsof -d mem0 1 2 => FD: standard input, output, and error
17,列出所有网络连接关联的PID
#lsof -t -i
#kill -9 `lsof -t -i` => kill all process use network
18,重复lsof 输出
#lsof -r 1 -a -u www -i
from: http://feedproxy.google.com/~r/blogspot/HpnK/~3/v-rLmhbiVmA/lsof.html
在这里,如果是innodb_file_per_table = 1 and innodb_open_files = X,则可利用lsof工具:lsof | grep -c “\.ibd$” 来查看有多少.ibd files InnoDB文件被打开,在mysql中,不管是show status 还是SHOW ENGINE INNODB STATUS都不能显示这个。
[转]lsof详解的更多相关文章
- Linux lsof详解
简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控 ...
- lsof详解
from:https://www.cnblogs.com/the-study-of-linux/p/5501593.html lsof (list open files)是一个列出当前系统打开文件的工 ...
- linux分析工具之lsof详解
一.概述 在linux中,所有东西都是以文件的形式存在的,所以我们在linux上的操作都是通过对文件的操作来执行我们所需要的逻辑,比如我们对文件数据的访问,修改,访问网络的连接等,刚好lsof(lis ...
- lsof 详解
lsof常用参数 lsof 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位lsof -i 列出所有网络连接lsof -i tcp 列出所有tcp连接信息lsof -i udp ...
- lsof命令详解(转)
lsof命令详解(转) 上一篇 / 下一篇 2011-06-09 21:56:41 / 个人分类:Linux 查看( 351 ) / 评论( 0 ) / 评分( 0 / 0 ) 在Linux中,ls ...
- linux lsof命令详解
linux lsof命令详解 简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访 ...
- Linux lsof命令详解和使用示例【转】
所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接 ...
- lsof 命令用法详解
lsof 命令用法详解 作用 用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP.UDP).找回/恢复删除的文件.是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所 ...
- [转贴]linux lsof命令详解
linux lsof命令详解 https://www.cnblogs.com/sparkbj/p/7161669.html 简介 lsof(list open files)是一个列出当前系统打开文件的 ...
随机推荐
- C++ 11 nullptr关键字
熟悉C++的童鞋都知道,为了避免“野指针”(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作.如果暂时不明确该指针指向哪个变量,则需要赋予NULL值.除了NUL ...
- Cocos-2d 坐标系
Cocos-2d中,涉及到4种坐标系: GL坐标系:Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系.GL坐标系原点在屏幕左下角,x轴向右,y轴向上. getLocation ...
- grails3.1.5 com.mysql.jdbc.Driver
[报错] Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at java.net.URLClassLoader$1 ...
- 在腾讯开发 QQ IM 的工作体验是怎样的?
转载 http://blog.csdn.net/kobejayandy/article/details/8685271 目录 一.引言 二.个人网站 三.Oracle/支付宝/旺旺 四.淘宝技术发展( ...
- spring报错:Caused by: java.lang.IllegalStateException: Cannot convert value of type for property : no matching editors or conversion strategy found
原因分析:是因为类返回的类型跟期望的类型没有继承关系,返回的类型就SqlMapClient,它是通过实现了FactoryBean<SqlMapClient>接口的SqlMapClientF ...
- 找你妹+ipad+wifi,回顾那年的经典游戏
昨天,不是从前天同事拿平板给我后,就没睡过一个安稳觉. 先是看电视看得爽歪了,再就是昨天晚上的游戏之夜.IPAD比較老.连系统都不好更新了.就用了留存的应用. 打开酷我看看有什么音乐推荐,听到一首&l ...
- Linux 下 ps 命令
简述 Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,动态的显示进程信息 ...
- spring4.1.6配置quartz2.2.1(maven) <转>
Spring3.0不支持Quartz2.0,因为org.quartz.CronTrigger在2.0从class变成了一个interface造成IncompatibleClassChangeError ...
- java中常见的异常(转)
1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对 ...
- linu 把文件中的字母小写转换为大写,大写转换为小写awk toupper tolower
cat aa.txt|tr "[a-z]" "A-Z" [root@ob2 mytmp]# awk '{print toupper($0)}' aa2.txt ...