歡迎您光臨本站 註冊首頁

lsof 使用

←手機掃碼閱讀     火星人 @ 2014-03-24 , reply:0

lsof的功能很多,-c,-g,-p,-u,

1、查看文件系統阻塞
可以使用lsof識別正在打開一個特定文件系統的進程,執行如下命令:
CODE:
/usr/sbin/lsof /mountpoint

在這裡,mountpoint就是安裝位置。

2、搜索打開的網路連接
如果想搜索IP地址為10.645.64.23的遠程連接主機的所有網路連接,可以執行如下命令:
/usr/sbin/lsof ?i@10.65.64.23可以打開系統中該遠程知己所有打開的套接字。

3、尋找本地斷開的打開文件
用戶經常遇到這種情況,當一個進程正在向一個文件寫數據時,該文件的目錄可能被移動。這就產生了一個非常大的問題。例如,用戶可能發現正在向/data寫數據,但是卻看不到文件增大,LSOF這個工具可以找到這樣的錯誤,例如:
CODE:
/usr/sbin/lsof +L1,通常可以看到下面的信息:
限制到/data部分的輸出,可以輸入:/usr/sbin/lsof ?a +L1 /data

4、搜索被程序打開的所有文件及打開的文件相關聯進程
如果想知道執行PID號為637的sendmail命令打開了哪些文件的話,可以執行lsof -p 637命令。
顯示該程序當前打開的所有文件、設備、庫及套接字等。

5、 其它使用命令(更詳細的資料請man lsof,這部分參看了一些資料給大家總結一下)
若?]有加上任何的參數,lsof 會列出所有被程序打開的文件。
參數可以相互結合,ex: -a -b -c 等同於 -abc
-? -h 這兩個參數意思相同,顯示出 lsof 的使用說明。

-a 參數被視為 AND (注意:-a參數一但加上 ,會影響全部的參數。)

-c c 顯示出以字母 c開頭進程現在打開的文件
例:顯示以init進程現在打開的文件
CODE:
# lsof -c init
COMMAND PID USER FD TYPE DEVICE SIZE/OFF INODE NAME
init 1 root cwd VDIR 4095,365376 8192 2 /
init 1 root txt VREG 4095,365376 286720 463 /sbin/init

-u s 以login name(登入名稱)或UID,列出所正在打開文件。
CODE:
# lsof -u tongxl

-i 用以監聽有關的任何符合的位址。
若沒有相關位置被指定,則監聽全部。
語法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 -->; IPv4 or IPv6
protocol -->; TCP or UDP
hostname -->; Internet host name
hostaddr -->; IPv4位置
service -->; /etc/service中的 service name (可以不只一個)
port -->; 埠號 (可以不只一個)
CODE:
# lsof -i tcp@xp001
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
telnetd 26862 root 0u inet 0x0c349000 0t0 TCP xpp3:telnet->;xp001:3807 (ESTABLISHED)
telnetd 26862 root 1u inet 0x0c349000 0t0 TCP xpp3:telnet->;xp001:3807 (ESTABLISHED)
telnetd 26862 root 2u inet 0x0c349000 0t0 TCP xpp3:telnet->;xp001:3807 (ESTABLISHED)
telnetd 26986 root 0u inet 0x1ab27100 0t0 TCP xpp3:telnet->;xp001:3988 (ESTABLISHED)
telnetd 26986 root 1u inet 0x1ab27100 0t0 TCP xpp3:telnet->;xp001:3988 (ESTABLISHED)
telnetd 26986 root 2u inet 0x1ab27100 0t0 TCP xpp3:telnet->;xp001:3988 (ESTABLISHED)

-l 此參數禁止將user ID轉換為登入名稱。(預設顯示登入名稱)
CODE:
# lsof -l|more
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
kernel 0 0 cwd VDIR 8,0 2560 2 /
init 1 0 cwd VDIR 8,0 2560 2 /
init 1 0 txt VREG 8,0 286720 16015 / (/dev/rz0a)
kloadsrv 3 0 cwd VDIR 8,0 2560 2 /
kloadsrv 3 0 txt VREG 8,0 221184 16041 /sbin/kloadsrv
kloadsrv 3 0 0r VCHR 0,0 0t0 9608 /dev/console
kloadsrv 3 0 1w VCHR 0,0 0t0 9608 /dev/console
kloadsrv 3 0 2w VCHR 0,0 0t0 9608 /dev/console

+|-L [l] +或-表示正在打開或取消顯示文件連結數. 若只有單純的+L,後面沒有任何數字,則表示顯示全部。若其後有加上數字,只有文件連結數少於該數字的會被列出。
+d s 依照文件夾s來搜尋,此參數將不會繼續深入搜尋此文件夾
例:顯示在/usr/users/tongxl目錄下被程序正在打開的文件(如下所示)
CODE:
# lsof +d /usr/users/tongxl
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ksh 26946 root cwd VDIR 8,6 512 51281 /usr/users/tongxl/c
a.out 26953 root cwd VDIR 8,6 512 51281 /usr/users/tongxl/c

+D D 同上,但是會搜索目錄下的目錄,時間較長。(注意?lsof以此參數進行時,須花費較多的動態記憶體。尤其在處理較大的文件夾時,請務必審慎使用之。)
例:顯示在/usr/local/文件夾下被程序正在打開的文件(如下)很明顯可以看出二者的差別
CODE:
# lsof +D /usr/users/tongxl
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ksh 26946 root cwd VDIR 8,6 512 51281 /usr/users/tongxl/c
a.out 26953 root cwd VDIR 8,6 512 51281 /usr/users/tongxl/c
a.out 26953 root txt VREG 8,6 24576 51311 /usr/users/tongxl/c/a.out

-d s 此參數以file descriptor (FD)值顯示結果,可以採用範圍表示,如 1-3 或 3-10 但 最前面的數一定要比最後面的數小。
舉例:以FD為4顯示
CODE:
# lsof -d 4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
syslogd 147 root 4u inet 0x1fe0b980 0t0 UDP *:syslog
binlogd 151 root 4u inet 0x1fe0bd40 0t0 UDP *:*
portmap 319 root 4u inet 0x1fe0b740 0t0 UDP *:111
mountd 321 root 4u VREG 8,6 253 22516 /usr (/dev/rz0g)
nfsd 323 root 4u inet 0x0c349e00 0t0 TCP *:2049 (LISTEN)
rpc.statd 330 root 4u inet 0x1ab42000 0t0 TCP xpp3:1024 (LISTEN)
rpc.lockd 332 root 4u inet 0x1fe0bbc0 0t0 UDP xpp3:1028
snmpd 449 root 4u unix 0x1aaf6500 0t0 /var/esnmp/esnmpd
svrMgt_mi 457 root 4r VREG 8,0 0 3424 / (/dev/rz0a)
os_mibs 458 root 4u inet 0x1ab475c0 0t0 UDP *:*
cpq_mibs 460 root 4u unix 0x1aaf77c0 0t0 /var/esnmp/esnmp_sub460
advfsd 472 root 4u inet 0x0c320000 0t0 TCP *:AdvFS (LISTEN)
insightd 475 root 4r VDIR 8,6 512 25610 /usr (/dev/rz0g)
inetd 506 root 4u inet 0x1ab26700 0t0 TCP *:ftp (LISTEN)
lpd 567 root 4wW VREG 8,6 4 451219 /usr (/dev/rz0g)
dtlogin 605 root 4w VREG 8,6 4 344028 /usr (/dev/rz0g)
Xdec 616 root 4w VREG 8,6 4 344028 /usr (/dev/rz0g)
sendmail 702 root 4u inet 0x0c321900 0t0 TCP *:smtp (LISTEN)
dtlogin 891 root 4w VREG 8,6 4 344028 /usr (/dev/rz0g)
dxconsole 907 root 4w VREG 8,6 4 344028 /usr (/dev/rz0g)
dtgreet 908 root 4w VREG 8,6 4 344028 /usr (/dev/rz0g)

-g [s] 以程序的PGID (process group IDentification)顯示,也可以採用範圍(1-3)或個別(3,5)表示,若沒有特別指定,則顯示全部。
舉例:以PGID為3顯示
CODE:
# lsof -g 3
COMMAND PID PGID USER FD TYPE DEVICE SIZE/OFF NODE NAME
kloadsrv 3 3 root cwd VDIR 8,0 2560 2 /
kloadsrv 3 3 root txt VREG 8,0 221184 16041 /sbin/kloadsrv
kloadsrv 3 3 root 0r VCHR 0,0 0t0 9608 /dev/console
kloadsrv 3 3 root 1w VCHR 0,0 0t0 9608 /dev/console
kloadsrv 3 3 root 2w VCHR 0,0 0t0 9608 /dev/console

-n 不將IP位址轉換成hostname,預設是不加上-n參數。
舉例: lsof -i tcp@xp001 -n
(您可以和上兩張圖比較一下,原先的hostname便回ip位置了)
CODE:
# lsof -i tcp@xp001 -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
telnetd 26862 root 0u inet 0x0c349000 0t0 TCP 10.65.69.147:telnet->;10.65.69.131:3807 (ESTABLISHED)
telnetd 26862 root 1u inet 0x0c349000 0t0 TCP 10.65.69.147:telnet->;10.65.69.131:3807 (ESTABLISHED)
telnetd 26862 root 2u inet 0x0c349000 0t0 TCP 10.65.69.147:telnet->;10.65.69.131:3807 (ESTABLISHED)
telnetd 26986 root 0u inet 0x1ab27100 0t0 TCP 10.65.69.147:telnet->;10.65.69.131:3988 (ESTABLISHED)
telnetd 26986 root 1u inet 0x1ab27100 0t0 TCP 10.65.69.147:telnet->;10.65.69.131:3988 (ESTABLISHED)
telnetd 26986 root 2u inet 0x1ab27100 0t0 TCP 10.65.69.147:telnet->;10.65.69.131:3988 (ESTABLISHED)
# lsof -i tcp@xp001
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
telnetd 26862 root 0u inet 0x0c349000 0t0 TCP xpp3:telnet->;xp001:3807 (ESTABLISHED)
telnetd 26862 root 1u inet 0x0c349000 0t0 TCP xpp3:telnet->;xp001:3807 (ESTABLISHED)
telnetd 26862 root 2u inet 0x0c349000 0t0 TCP xpp3:telnet->;xp001:3807 (ESTABLISHED)
telnetd 26986 root 0u inet 0x1ab27100 0t0 TCP xpp3:telnet->;xp001:3988 (ESTABLISHED)
telnetd 26986 root 1u inet 0x1ab27100 0t0 TCP xpp3:telnet->;xp001:3988 (ESTABLISHED)
telnetd 26986 root 2u inet 0x1ab27100 0t0 TCP xpp3:telnet->;xp001:3988 (ESTABLISHED)

-s 列出文件的大小,若該文件沒有大小,則留下空白。
CODE:
# lsof -s
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
kernel 0 root cwd VDIR 8,0 2560 2 /
init 1 root cwd VDIR 8,0 2560 2 /
init 1 root txt VREG 8,0 286720 16015 / (/dev/rz0a)
kloadsrv 3 root cwd VDIR 8,0 2560 2 /
kloadsrv 3 root txt VREG 8,0 221184 16041 /sbin/kloadsrv
kloadsrv 3 root 0r VCHR 0,0 9608 /dev/console
kloadsrv 3 root 1w VCHR 0,0 9608 /dev/console
kloadsrv 3 root 2w VCHR 0,0 9608 /dev/console


[火星人 ] lsof 使用已經有579次圍觀

http://coctec.com/docs/linux/show-post-134717.html