lsof 是一个 Linux 和 UNIX 系统中的实用工具,用于列出系统中打开文件的所有信息。这个名字代表 “List Open Files”,但它也可以显示进程相关的其他信息,如:
打开的文件描述符列表
打开网络连接的列表
被进程使用的信号和内核对象等
在Linux系统中,有一个经典的概念:
“一切皆文件”(Everything is a file),而lsof是一个列出当前系统打开文件的工具。这个命令可以列出被进程打开的文件、网络连接、设备、文件描述符等信息,帮助用户了解系统资源的使用情况。
命令及常用参数
语法格式:lsof [options] filename
1.1 常用参数
-p<进程PID>: 输出指定pid的进程打开的文件;
-l:使用用户ID代替输出中的用户名;
-u<用户名> : 输出指定用户打开的文件;
-c <字符串>: 过滤出 COMMAND 列中包含 指定字符的记录;
-d<文件描述符>: 输出包含指定文件描述符(FD列)的项;
-n :禁止解析主机名;
-i : 输出符合指定条件的项
-i [4|6] :分别指 IPv4、IPv6
-i [TCP|UDP]:指 TCP 或 UDP连接;
-i @[hostname |hostaddr]:指 主机名或地址;
-i:port : 端口号,可以是多个。
1.2 输出列含义
常用场景
2.1 监控主机当前打开文件句柄总量
当Linux系统中的文件句柄数量达到上限时,可能会引发一系列风险和问题,如程序崩溃、系统资源耗尽、主机性能下降等。
以suse系统为例:
#/bin/bash
#################文件句柄监控###################
#####全局变量#####
threshold_value_user</