linux進程信息查詢命令lsof詳解
Lsof是遵從Unix哲學的典範,它只完成一個功能,並且做的相當完美——它可以列出某個進程打開的所有文件信息。打開的文件可能是普通的文件、目錄、NFS文件、塊文件、字元文件、共享庫、常規管道、命名管道、符號鏈接、Socket流、網路Socket、UNIX域Socket,以及其它更多類型。因為「一切皆文件」乃為Unix系統的重要哲學思想之一,因此可以想像lsof命令的重要地位。
lsof [options] filename
lsof /path/to/somefile:顯示打開指定文件的所有進程之列表
lsof -c string:顯示其COMMAND列中包含指定字元(string)的進程所有打開的文件;此選項可以重複使用,以指定多個模式;
lsof -p PID:查看該進程打開了哪些文件;進程號前可以使用脫字元「^」取反;
lsof -u USERNAME:顯示指定用戶的進程打開的文件;用戶名前可以使用脫字元「^」取反,如「lsof -u ^root」則用於顯示非root用戶打開的所有文件;
lsof -g GID:顯示歸屬gid的進程情況
lsof +d /DIR/:顯示指定目錄下被進程打開的文件
lsof +D /DIR/:基本功能同上,但lsof會對指定目錄進行遞歸查找,注意這個參數要比grep版本慢:
lsof -a:按「與」組合多個條件,如lsof -a -c apache -u apache
lsof -N:列出所有NFS(網路文件系統)文件
lsof -d FD:顯示指定文件描述符的相關進程;也可以為描述符指定一個範圍,如0-2表示0,1,2三個文件描述符;另外,-d還支持其它很多特殊值,如:
mem: 列出所有內存映射文件;
mmap:顯示所有內存映射設備;
txt:列出所有載入在內存中並正在執行的進程,包含code和data;
cwd:正在訪問當前目錄的進程列表;
lsof -n:不反解IP至HOSTNAME
lsof -i:用以顯示符合條件的進程情況
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46:IPv4或IPv6
protocol:TCP or UDP
hostname:Internet host name
hostaddr:IPv4地址
service:/etc/service中的服務名稱(可以不只一個)
port:埠號 (可以不只一個)
例如: 查看22埠現在運行的情況
[root@www ~]# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1390 root 3u IPv4 13050 0t0 TCP *:ssh (LISTEN)
sshd 1390 root 4u IPv6 13056 0t0 TCP *:ssh (LISTEN)
上述命令中,每行顯示一個打開的文件,若不指定條件默認將顯示所有進程打開的所有文件。lsof輸出各列信息的意義如下:
COMMAND:進程的名稱
PID:進程標識符
USER:進程所有者
FD:文件描述符,應用程序通過文件描述符識別該文件。如cwd、txt等
TYPE:文件類型,如DIR、REG等
DEVICE:指定磁碟的名稱
SIZE:文件的大小
NODE:索引節點(文件在磁碟上的標識)
NAME:打開文件的確切名稱
在實際工作者,對於維護一個不熟悉的系統的時候,通過lsof查看進程,可以快速詳細的定位到進程加快了解系統應用關係,是一個非常有用的命令


※容忍是一切自由的根本
※泥萌知道幾十塊錢的男士襯衫和幾百塊錢的男士襯衫差在了哪裡嗎?雅戈爾7021、雅戈爾8045的襯衫對比·,讓·你們買的明白
TAG:全球大搜羅 |