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