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 |
評論留言