本网站相关文章:

Introduction

list open files – 一切皆文件. 通过文件不仅可以访问常规数据,而且可以访问网络连接和硬件设备,例如 TCP,UDP 信息. 一般使用 root 超级权限来进行操作,获取完全信息.

File object

  • 普通文件–file
  • 目录–directory
  • 网络文件系统的文件
  • 字符或设备文件
  • (函数)共享库
  • 管道,命名管道
  • 符号链接
  • 网络文件(例如:NFS file,网络 socket,unix 域名 socket)
  • 还有其它类型的文件,等等

Output

输出

  • COMMAND 进程的名称
  • PID 进程标识符
  • PPID 父进程标识符(需要指定-R 参数)
  • USER 进程所有者
  • PGID 进程所属组
  • FD 文件描述符,应用程序通过文件描述符识别该文件.如 cwd,txt 等:
  • TYPE 文件类型,如 DIR,REG 等,常见的文件类型
  • DEVICE 指定磁盘的名称
  • SIZE 文件的大小
  • NODE 索引节点(文件在磁盘上的标识)
  • NAME 打开文件的确切名称

FD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 xx.
m86:DOS Merge mapped file;
mem:memory-mapped file;
mmap:memory-mapped device;
pd:parent directory;
rtd:root directory;
tr:kernel trace file (OpenBSD);
v86 VP/ix mapped file;
文件描述符:
0/1/2/...,例如0r/1u,其中u表示读写模式

TYPE

  • DIR:表示目录
  • CHR:表示字符类型
  • BLK:块设备类型
  • UNIX: UNIX 域套接字
  • FIFO:先进先出 (FIFO) 队列
  • IPv4:网际协议 (IP) 套接字

Command Options

format

lsof [options] [names]

options

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-a              列出打开文件存在的进程
-c <进程名> 列出指定进程所打开的文件
-g 列出GID号进程详情
-p <进程号> 列出指定进程号所打开的文件
-u 列出UID号进程详情

-d <文件号> 列出占用该文件号的进程
+d <目录> 列出目录下被打开的文件
+D <目录> 递归列出目录下被打开的文件
-n <目录> 列出使用NFS的文件

-i <条件> 列出符合条件的进程,条件非常重要

+|-r <t> repeat every t seconds; + until no files, - forever

-h 显示帮助信息
-v 显示版本信息

condition

格式:lsof -i[46] [protocol][@hostname|hostaddr][:service[,servcie2]|port[, port2]]

其中各项:

1
2
3
4
5
6
46          ipv4, ipv6
protocol TCP或者UDP
hostname 域名
hostaddr ip
service /etc/serice中的service,可以有多个
port 端口号

Example

某一个用户

1
2
3
4
5
6
7
# 查看所有用户所有进程的文件打开数目
sudo lsof | wc -l
# 查看当前用户所有进程的文件打开数目
lsof | wc -l
# 查看某个用户打开的文件信息
lsof -u user1
lsof -u user2 <exec_file>

某一个进程

1
2
3
4
5
6
7
8
9
10
11
12
13
# 查看指定的进程
lsof -p <PID>

# 查看某一个文件关联的进程信息
lsof <file>

# 查看某个进程名关联的进程信息
lsof -c <proc_name>
lsof -c mysql
# 列出所有以mysql开头的进程名的文件信息,等价于lsof | grep mysql

# 列出被指定进程打开的所有的IPV4网络描述符(组合)
lsof -i 4 -a -p <pid1>

网络连接

1
2
3
4
5
6
7
8
9
10
#
lsof -i
lsof -i tcp
lsof -i :3306

# 列出某个用户所有活跃的网络端口
lsof -a -u user1 -i

# 列出tcp
lsof -i tcp

hostname

1
2
# 列出指定主机上端口为10/12/80的所有文件信息,每3秒刷新一次
lsof -i @bamboo:10,12,80 -r 3

port

1
2
3
4
# MAC上查看某一个端口的进程号
sudo lsof -nP -iTCP:端口号 -sTCP:LISTEN
# Linux查看某一个端口
lsof -i:port

Mac Example

Port

1
2
3
4
# 查看某一个端口的进程
sudo lsof -nP -iTCP:端口号 -sTCP:LISTEN
# 查看所有
sudo lsof -nP -iTCP -sTCP:LISTEN

Process

1
2
# 查看某一个进程占用的端口
sudo lsof -nP -iTCP -sTCP:LISTEN | grep <pid>