Linux好用命令之lsof命令
文章发布较早,内容可能过时,阅读注意甄别。
在 CentOS/Fedora/RHEL 版本的 Linux 中则使用下面的命令进行安装。
yum install lsof
1
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
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
输出内容详解:
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
:文件类型,常见的文件类型有以下几种:DIR
:表示目录CHR
:表示字符类型BLK
:块设备类型UNIX
:UNIX 域套接字FIFO
:先进先出 (FIFO) 队列IPv4
:网际协议 (IP) 套接字
DEVICE
:指定磁盘的名称SIZE/OFF
:文件的大小NODE
:索引节点(文件在磁盘上的标识)NAME
:打开文件的确切名称- 命令:
lsof abc.txt
说明:显示开启文件 abc.txt 的进程 - 命令:
lsof -i :80
说明:列出 80 端口目前打开的文件列表
输出:
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)
1
2
3
4- 命令:
lsof -i
1说明:列出所有的网络连接
输出:
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) php-fpm 4037 jelly 0u IPv4 60908335 0t0 TCP localhost:cslistener (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) php-fpm 9059 jelly 0u IPv4 60908335 0t0 TCP localhost:cslistener (LISTEN) php-fpm 9137 jelly 0u IPv4 60908335 0t0 TCP localhost:cslistener (LISTEN)
1
2
3
4
5
6
7
8
9
10
11
12- 命令:
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
指令
- 命令:
原文地址:http://t.cn/AiOgYZox
上次更新: 2024/11/19, 23:11:42