Linux运维基础之lsof命令详解

Linux运维基础之lsof命令详解

lsof 命令是 “List Open Files(列出打开的文件)” 的缩写,它是 Linux 操作系统中的一个强大工具,可提供有关各种进程打开的文件的重要信息。这条多功能命令允许系统管理员监控和管理文件、套接字和网络连接,提供系统内资源使用情况的全面视图。

netstatfuser 命令类似,lsof 命令用于识别不同进程正在访问的文件,是故障排除和系统维护不可或缺的工具。无论你是寻求解决冲突的网络管理员,还是希望优化资源分配的开发人员,lsof 命令(通常与 grep 等命令一起使用)都是你工具包中的得力助手。

如何安装 lsof 命令

许多 Linux 发行版都预装了 lsof 命令。不过,如果你的系统上没有,也可以使用发行版专用的软件包管理器轻松安装。

基于 Debian 的系统(如 Ubuntu)

安装:

sudo apt-get update
sudo apt-get install lsof

卸载:

sudo apt-get remove lsof

基于红帽的系统(如 CentOS、RHEL)

使用 Yum 安装(旧版本):

sudo yum install lsof

使用 DNF 安装(较新版本):

sudo dnf install lsof

使用 Yum 卸载:

sudo yum remove lsof

使用 DNF 卸载:

sudo dnf remove lsof

Fedora

安装(旧版本使用 Yum):

sudo yum install lsof

安装(使用 DNF 的较新版本):

sudo dnf install lsof

使用 Yum 卸载:

sudo yum remove lsof

使用 DNF 卸载:

sudo dnf remove lsof

如何使用 lsof

1. 列出所有打开的文件

语法: lsof

说明:列出系统中所有打开的文件。

示例: lsof

输出:

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
systemd    1 root  cwd    DIR  253,1     4096      2 /
bash    1234 user  txt    REG  253,1   111350 123456 /bin/bash

该输出会显示所有打开的文件,包括命令名称、进程 ID ( PID )、用户、文件描述符 ( FD )、类型、设备、大小和文件路径。

2. 列出特定用户打开的文件

语法: lsof -u <username>

说明:列出特定用户打开的所有文件。

示例: lsof -u john

输出:

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    5678 john  cwd    DIR  253,1     4096  78901 /home/john

该输出会列出用户 john 打开的所有文件,包括命令名称、PID、用户和其他详细信息。

3. 列出特定进程使用的文件

语法: lsof -p <PID>

说明:列出特定进程 ID 使用的所有文件。

示例: lsof -p 1234

输出:

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    1234 user  cwd    DIR  253,1     4096  78901 /home/user

该输出列出了 PID 为 1234 的进程使用的所有文件,包括命令名称、PID、用户和其他详细信息。

4. 列出特定端口上的文件

语法: lsof -i :<port>

说明:列出与特定网络端口相关联的所有文件。

示例: lsof -i :80

输出:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
apache  1234 www-data  4u  IPv4  12345      0t0  TCP *:http (LISTEN)

此输出列出了与 80 端口(通常用于 HTTP)相关的所有文件。其中包括命令名称、PID、用户和其他与网络连接相关的详细信息。

5. 列出特定命令打开的文件

语法: lsof -c <command_name>

说明:列出特定命令打开的所有文件。

示例: lsof -c sshd

输出:

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
sshd    1234 root  cwd    DIR  253,1     4096      2 /

该输出会列出 sshd 命令打开的所有文件,包括命令名称、PID、用户和其他详细信息。

6. 列出在特定文件系统上打开的文件

语法: lsof +D <directory>

说明:列出在特定目录或文件系统中打开的所有文件。

示例: lsof +D /var

输出:

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
syslog  567 root    5w   REG  253,2     4096  12345 /var/log/syslog

该输出会列出在 /var 目录中打开的所有文件,包括命令名称、PID、用户和其他详细信息。

7. 列出特定协议的网络文件

语法: lsof -i <protocol>

说明:列出使用特定协议(如 TCP 或 UDP)的所有网络文件。

示例: lsof -i TCP

输出:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1234 root    3u  IPv4  56789      0t0  TCP *:ssh (LISTEN)

此输出会列出所有 TCP 网络连接,包括命令名称、PID、用户和其他与网络连接相关的详细信息。

8. 列出不包括特定用户打开的文件

语法: lsof -u ^<username>

说明:列出所有文件,但不包括特定用户打开的文件。

示例: lsof -u ^john

输出:

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
systemd    1 root  cwd    DIR  253,1     4096      2 /

该输出列出了除用户 john 打开的文件外的所有文件,包括命令名称、PID、用户和其他详细信息。

更多 Linux 命令

目录操作 rmdir · cd · pwd · exa · ls
文件操作 cat · cp · dd · less · touch · ln · rename · more · head
文件系统操作 chown · mkfs · locate
网络 ping · curl · wget · iptables · mtr
搜索和文本处理 find · grep · sed · whatis · ripgrep · fd · tldr
系统信息和管理 env · history · top · who · htop · glances · lsof
用户和会话管理 screen · su · sudo · open

评论留言