[转]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 [email protected]
因为本机试验,假设远程主机IP也为127.0.0.1
# lsof [email protected]
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 [email protected]可以得到和远程主机192.168.0.100进行连接的进程,
该进程运行在本地主机的某个端口上
# lsof [email protected]
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,如
[[email protected] 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服务器的所有实例及它们所打开的文件

要查看一个端口在被那个程序使用的话可以

[[email protected] root]#  lsof -i:3306
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 mem

0 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都不能显示这个。

时间: 2024-10-22 21:49:21

[转]lsof详解的相关文章

Linux命令之 lsof详解

简介: lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件(来源百度百科). lsof在查找进程占用的那些文件或pid号由那些文件发起的等方面作用很大:尤其在Linux系统被黑后的溯源工作上绝对可以称之为一个重量级的命令. 格式详解: [[email protected] ~]# lsof -c httpd | head -5 COMMAND  PID   USER 

linux lsof详解

lsof 简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口.因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看

Linux性能监控命令之lsof详解

1. lsof 命令介绍 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口.因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工

linux lsof 详解

lsof(list open files)是一个查看当前系统文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于这个应用程序本身的信息. [lsof可打开的文件] 普通文件 目录 网络文件系统的文件 字符或设备文件 (函数)共享库 管道,命名管道 符号链接 网络文件(例如:NFS file.网

lsof 命令详解

lsof 命令详解原址:http://home.51.com/taiyangzhizi520/diary/item/10038365.htmllsof命令的原始功能是列出打开的文件的进程,但LINUX下,所有的设备都是以文件的行式存在的,所以一般root用户才能执行lsof命令,普通用户可以看见/usr/sbin/lsof命令,但是普通用户执行会显示“permission denied”:总结一下lsof指令的用法: lsof abc.txt 显示开启文件abc.txt的进程lsof -i :2

31个有用的系统管理员命令详解(linux)

在开始之前,你必须了解一下linux 基本知识: centos7目录结构.文件类型及权限.inode解析.信号 最常用的linux命令行快捷键.centos7 vi编辑器及环境变量的使用 Linux进程优先级及调度原理 1.Uptime 命令显示:运行时间.登陆用户数及1,5,15分钟间隔负载. # uptime 08:16:26 up 22 min,  1 user,  load average: 0.00, 0.03, 0.22 Uptime 命令仅有一个版本选项而且仅显示一天内的小时:分钟

mount命令使用详解

一.挂载(mount)初识 1.什么是挂载 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录作为其它文件访问入口的行为. 2.常用的文件系统类型 光盘或光盘镜像:iso9660 DOS fat16文件系统:msdos Windows 9x fat32文件系统:vfat Windows NT ntfs文件系统:ntfs Mount Windows文件网络共享:smbfs UNIX(LINUX) 文件网络共享:nfs 3.挂载点 文件系统的入口,挂载点下原有文件在挂载完成后会被临

linux之LVM详解

Linux的LVM详解 LVM组成; LVM:logic volume manager .LVM即逻辑卷管理,现在使用版本为第二版,即version2 逻辑卷:pv,physical volume,即计算机上的磁盘设备,例如我的计算机上的/dev/sda3,/dev/sda5. 卷组:vg,volume group.一般由多个pv组成. 逻辑卷:lv,logical volume是在vg上是划分好可以直接使用分区 pe:physical extend,是在pv加入vg后vg把所有pv划分成的很多

Linux procfs详解

1.0 proc文件系统总览在类Unix系统中体现了一种良好的抽象哲学,就是几乎所有的数据实体都被抽象成一个统一的接口--文件来看待,这样我们就可以用一些简单的基本工具完成大量复杂的操作.在Linux中存在着一类特殊的伪文件系统,用于使用与文件接口统一的操作来完成各种功能,例如ptyfs.devfs.sysfs和procfs.而procfs就是其中应用最广泛的一种伪文件系统.procfs是Linux内核信息的抽象文件接口,大量内核中的信息以及可调参数都被作为常规文件映射到一个目录树中,这样我们就