Carry の Blog Carry の Blog
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carry の Blog

好记性不如烂键盘
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 工作笔记

    • 实用linux命令-nc
    • 实用linux命令-lsof
    • 实用linux命令-ss
    • Bash 备忘清单
    • Ansible 备忘清单
    • linux 文件的权限和属性
    • GPT分区使用 `parted` 扩展分区的操作流程
    • 实用linux命令-sed
    • VSCode快捷键备忘录
  • K8S

  • Systemd

  • Nginx

  • Supervisord

  • OpenLdap

  • OpenVPN

  • GitLab

  • Sshd

  • WebDev

  • Docker

  • Prometheus

  • Rclone

  • Iptables

  • Firewalld

  • Linux笔记
  • 工作笔记
Carry の Blog
2025-03-30

实用linux命令-lsof

lsof命令简介

lsof(List Open Files)是一个非常强大的工具,用于显示当前系统中被打开的文件信息。由于在Linux中几乎所有内容都是文件(包括普通文件、目录、套接字、管道、设备等),lsof的作用非常广泛,可用于系统监控、故障排查和安全审计等场景。


lsof常见用法

  1. 查看所有打开的文件

    lsof
    
    1

    说明:

    • 不带参数时,显示所有进程打开的所有文件。
    • 输出可能非常多,通常需要结合过滤命令使用。
  2. 查看被某个进程打开的文件

    lsof -p <PID>
    
    1

    说明:

    • <PID>:指定进程ID。
    • 列出该进程打开的所有文件,包括普通文件、目录、库文件等。
  3. 查看某个文件被哪些进程打开

    lsof <文件路径>
    
    1

    说明:

    • 显示打开该文件的所有进程信息。
    • 对于排查文件锁定或无法删除文件的情况很有用。
  4. 查看某个端口被哪个进程占用

    lsof -i:<端口号>
    
    1

    说明:

    • <端口号>:指定端口号。
    • 常用于排查端口占用问题,如确认服务是否正在运行。
  5. 查看所有网络连接

    lsof -i
    
    1

    说明:

    • 显示所有与网络相关的文件,包括TCP、UDP连接。
    • 可以看到每个连接的本地地址、远程地址、状态等信息。
  6. 列出某用户打开的文件

    lsof -u <用户名>
    
    1

    说明:

    • <用户名>:指定用户名。
    • 列出该用户打开的所有文件,可用于监控用户活动。

lsof高级用法

  1. 查看特定类型的文件

    lsof -d <文件描述符>
    
    1

    说明:

    • <文件描述符>可以是数字或名称,如cwd(当前工作目录)、txt(程序代码)、mem(内存映射文件)。
    • 例如:lsof -d cwd查看所有进程的当前工作目录。
  2. 监控文件的实时变化

    watch -n 1 'lsof <文件路径>'
    
    1

    说明:

    • 每秒钟刷新一次,实时监控文件的打开情况。
    • 对于排查文件访问问题非常有用。
  3. 查看某进程的网络连接

    lsof -p <PID> -i
    
    1

    说明:

    • 结合-p和-i选项,显示指定进程的所有网络连接。
    • 可以精确了解某应用程序的网络活动。
  4. 按协议过滤网络连接

    lsof -i <协议>
    
    1

    说明:

    • <协议>可以是tcp或udp。
    • 例如:lsof -i tcp只显示TCP连接。
  5. 查看特定网络地址的连接

    lsof -i@<主机名或IP>
    
    1

    说明:

    • 过滤显示与特定主机相关的连接。
    • 例如:lsof -i@192.168.1.1显示与该IP相关的所有连接。
  6. 杀死占用某文件的进程

    kill -9 $(lsof -t <文件路径>)
    
    1

    说明:

    • -t选项只输出进程ID,结合kill命令可以快速终止占用文件的进程。
    • 在无法删除或修改文件时特别有用。

lsof与其他工具的配合

  1. 与grep结合使用

    lsof | grep <关键词>
    
    1

    说明:

    • 通过关键词过滤lsof的输出结果,提高查找效率。
    • 例如:lsof | grep '/var/log'查找打开日志目录文件的进程。
  2. 与网络工具对比

    • lsof -i与netstat、ss命令功能有重叠,但lsof提供了更多与进程相关的信息。
    • 对于网络连接排查,可以根据具体需求选择最合适的工具。
  3. 与文件系统工具结合

    lsof +D <目录路径>
    
    1

    说明:

    • 递归显示指定目录下被打开的所有文件。
    • 例如:lsof +D /var/www查看Web目录下所有被访问的文件。

lsof注意事项

  1. 权限要求

    • 普通用户只能查看自己拥有权限的进程和文件信息。
    • 使用sudo或root用户可以查看系统中所有的文件打开情况。
  2. 性能影响

    • lsof需要扫描整个系统的文件表,在大型系统上可能会消耗较多资源。
    • 建议在必要时使用,并尽可能使用过滤条件限制输出范围。
  3. 输出格式

    • lsof的默认输出包含多列信息,可使用-F选项生成更易于脚本处理的格式。
    • 使用-l选项可以显示用户ID而非用户名,提高处理速度。

上次更新: 4/24/2025

← 实用linux命令-nc 实用linux命令-ss→

最近更新
01
tidb fast ddl
04-04
02
TiDB配置文件调优 原创
04-03
03
如何移除TiDB中的表分区 原创
04-03
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式