Linux教程网

Linux系统性能分析利器lsof

在 Linux 系统管理和开发中,命令行工具扮演着至关重要的角色。lsof(List Open Files 的缩写)是一款强大的命令行工具,专用于列出当前系统中打开的文件及其相关进程。

由于 Linux 的一切皆文件的设计理念,lsof 可以显示包括网络连接、设备、目录、普通文件等在内的多种类型的打开文件,与系统的运行状态密切相关。因此,掌握 lsof 的使用,对于系统管理员和开发者来说都是一种必备的技能。

作用场景

lsof 主要用于以下几种场景:

  • 系统监控:帮助系统管理员监控资源使用情况,发现哪些文件被哪些进程占用;
  • 故障排查:应用程序发生异常时,使用 lsof 确定是哪些文件或端口导致了问题,进行针对性的处理;
  • 网络分析:用于查看网络连接的状态,帮助开发者调试网络应用;
  • 资源清理:在删除文件或设备之前,使用 lsof 确认它们是否仍在被使用,以避免潜在的系统错误;

常用示例

以下是一些常见的 lsof 命令及其示例

1. 获取网络信息

  • 使用 -i 显示所有网络连接
1
$ lsof -i
  • 仅获取 IPv6 流量
1
$ lsof -i 6
  • 仅显示 TCP 连接
1
2
3
4
$ lsof -i TCP

# 同理可以仅获取 UDP 连接
$ lsof -i UDP
  • 显示与指定端口相关的网络信息
1
$ lsof -i :22
  • 显示与指定主机相关的连接
1
$ lsof -i @10.0.2.15
  • 显示基于主机与端口的连接
1
$ lsof -i @10.0.2.15:22
  • 显示所有端口范围的连接
1
$ lsof -i TCP:60000-65000
  • 找出显示处于 LISTEN 状态的连接
1
2
3
$ lsof -i -s TCP:LISTEN
# 显示 ESTABLISHED 状态
$ lsof -i -s TCP:ESTABLISHED

2. 获取用户信息

  • 列出指定用户打开了什么文件
1
2
3
4
$ lsof -u root

# 查看除 root 用户外,其它用户打开了哪些文件
$ lsof -u ^root

如果想知道这个用户打开了哪些 TCP 连接,可以使用下边的命令

1
$ lsof -a -u root -i TCP

-a 选项可以使多个条件变成”与”的关系

  • 查看指定的进程(命令)正在使用的文件和网络连接
1
$ lsof -c nginx
  • 查看指定进程ID已打开的文件
1
$ lsof -p 9876

3. 文件和目录

  • 显示哪些程序打开了指定的目录或文件
1
2
3
4
$ lsof /var/log/message

# 查看哪些程序打开了 /var/log 目录
$ lsof +D /var/log/
  • 显示所有打开的链接数小于 1 的文件
1
$ lsof +L1

4. 高级用法

杀掉某个用户打开了文件的所有进程

1
$ kill -9 $(lsof -t -u linux)

常用选项

  • -i 输出与网络相关的文件
  • -P 不解析端口号;
  • -n 不解析主机名;
  • -r 重复间隔 N 秒;
  • -a 选项之间为 的关系
  • -d 打开指定文件描述符的进程
  • +d 打开目录下的文件或目录的进程
  • +D 打开目录下的文件或目录的进程(递归)
  • -t 只输出 PID
  • -u 指定用户打开的文件
  • -U 输出打开 Unix 域套接字文件

写在最后

通过熟练使用这些选项,用户可以更高效地管理系统资源,优化程序性能以及快速排查故障。总之,lsof 作为 Linux 系统的核心工具之一,在日常工作中极为重要,掌握它将为你的系统管理技能增添不小的助力。


专题:

本文发表于 2024-12-23,最后修改于 2024-12-23。

本站永久域名「 golinuxblog.com 」,也可搜索「 Linux教程网 」找到我。


上一篇 « 使用knot搭建DNS域名服务

推荐阅读

Big Image