在 CentOS/Fedora/RHEL 版本的 Linux 中则使用下面的命令进行安装。
yum install lsof
lsof
也是有着最多选项的 Linux/Unix 命令之一。lsof
可以查看打开的文件是:
普通文件
目录
网络文件系统的文件
字符或设备文件
(函数) 共享库
管道、命名管道
符号链接
网络文件(例如:NFS file、网络 socket,unix 域名 socket)
还有其它类型的文件,等等
虽然lsof
命令有着 N 多的选项,但是常用的只有以下几个:
-a
:使用 AND 逻辑,合并选项输出内容
-c
:列出名称以指定名称开头的进程打开的文件
-d
:列出打开指定文件描述的进程
+d
:列出目录下被打开的文件
+D
:递归列出目录下被打开的文件
-n
:列出使用 NFS 的文件
-u
:列出指定用户打开的文件
-p
:列出指定进程号所打开的文件
-i
:列出打开的套接字
总的说来,lsof
命令还是一个比较复杂的命令,那么多选项,用起来还是蛮累的,但是这不能否定它是一个出色的工具,一个我们不得不学习的命令。下面就来说一些lsof
的惯用用法。– 命令:
lsof
输出:
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,1 4096 2 /
systemd 1 root rtd DIR 253,1 4096 2 /
systemd 1 root txt REG 253,1 1523568 1053845 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,1 20040 1050452 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,1 261336 1051899 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 253,1 90664 1050435 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 253,1 157424 1050447 /usr/lib64/liblzma.so.5.2.2
systemd 1 root mem REG 253,1 23968 1050682 /usr/lib64/libcap-ng.so.0.0.0
systemd 1 root mem REG 253,1 19888 1050666 /usr/lib64/libattr.so.1.1.0
输出内容详解:
COMMAND
:进程的名称PID
:进程标识符TID
:线程标识符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 xxm86
:DOS Merge mapped filemem
:memory-mapped filemmap
:memory-mapped devicepd
:parent directoryrtd
:root directorytr
:kernel trace file (OpenBSD)v86
:VP/ix mapped file0
:表示标准输出1
:表示标准输入2
:表示标准错误TYPE
:文件类型,常见的文件类型有以下几种:命令:
lsof abc.txt
说明:显示开启文件 abc.txt 的进程命令:
lsof -i :80
说明:列出 80 端口目前打开的文件列表命令:
lsof -i tcp
说明:列出所有的 TCP 网络连接信息命令:
lsof -i udp
说明:列出所有的 UDP 网络连接信息命令:
lsof -i tcp:80
说明:列出 80 端口 TCP 协议的所有连接信息命令:
lsof -i udp:25
说明:列出 25 端口 UDP 协议的所有连接信息命令:
lsof -c ngin
说明:列出以 ngin 开头的进程打开的文件列表命令:
lsof -p 20711
说明:列出指定进程打开的文件列表命令:
lsof -u uasp
说明:列出指定用户打开的文件列表命令:
lsof -u uasp -i tcp
说明:将所有的 TCP 网络连接信息和指定用户打开的文件列表信息一起输出命令:
lsof -a -u uasp -i tcp
说明:将指定用户打开的文件列表信息,同时是 TCP 网络连接信息的一起输出;注意和上一条命令进行对比命令:
lsof +d /usr/local/
说明:列出目录下被进程打开的文件列表命令:
lsof +D /usr/local/
说明:递归搜索目录下被进程打开的文件列表命令:
lsof -i @peida.linux:20,21,22,25,53,80 -r 3
说明:列出目前连接到主机 peida.linux 上端口为 20,21,22,25,53,80 相关的所有文件信息,且每隔 3 秒不断的执行lsof
指令命令:
命令:
lsof abc.txt
说明:显示开启文件 abc.txt 的进程命令:
lsof -i :80
说明:列出 80 端口目前打开的文件列表
DIR
:表示目录
CHR
:表示字符类型
BLK
:块设备类型
UNIX
:UNIX 域套接字
FIFO
:先进先出 (FIFO) 队列
IPv4
:网际协议 (IP) 套接字
DEVICE
:指定磁盘的名称
SIZE/OFF
:文件的大小
NODE
:索引节点(文件在磁盘上的标识)
NAME
:打开文件的确切名称
输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 8838 root 8u IPv4 114512623 0t0 TCP *:http (LISTEN)
nginx 12886 jelly 8u IPv4 114512623 0t0 TCP *:http (LISTEN)
nginx 12887 jelly 8u IPv4 114512623 0t0 TCP *:http (LISTEN)
命令:
lsof -i
说明:列出所有的网络连接
输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ntpd 856 ntp 16u IPv4 13105 0t0 UDP *:ntp
ntpd 856 ntp 17u IPv6 13106 0t0 UDP *:ntp
ntpd 856 ntp 18u IPv4 13210 0t0 UDP localhost:ntp
ntpd 856 ntp 19u IPv4 13211 0t0 UDP jellythink:ntp
vsftpd 1613 root 3u IPv6 17867 0t0 TCP *:ftp (LISTEN)
sshd 8503 root 3u IPv4 197060 0t0 TCP *:50022 (LISTEN)
nginx 8838 root 8u IPv4 114512623 0t0 TCP *:http (LISTEN)
nginx 8838 root 9u IPv4 114512624 0t0 TCP *:https (LISTEN)
版权声明:本文内容来自个人博客:二丫讲梵,遵循CC 4.0 BY-SA版权协议上原文接及本声明。
本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。
原文链接:https://wiki.eryajf.net/pages/5286.html
如有涉及到侵权,请联系,将立即予以删除处理。
在此特别鸣谢原作者:二丫讲梵的创作,Powered by 二丫讲梵。
本文已获原作者授权发布。
此篇文章的所有版权归原作者所有,与本公众号无关,商业转载建议请联系原作者,非商业转载请注明出处。