linux下的一個診斷分析工具lsof(轉)

BSDLite發表於2007-08-15
linux下的一個診斷分析工具lsof(轉)[@more@]lsof能顯示出由系統里正在執行的程式所開啟的檔案,也能顯示出每一個程式的通訊socket.



下面,lsof的用法總結:




1、檢視檔案系統阻塞
lsof 目錄名 可以檢視還有哪些程式在使用這個目錄,例:
當一個使用者以oracle的身份telnet到伺服器,那麼用lsof /home/oracle 就可以看到它的程式號.
[root@vm4 ~]# lsof /home/oracle
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
tnslsnr 2709 oracle cwd DIR 8,3 4096 1087047 /home/oracle
bash 3827 oracle cwd DIR 8,3 4096 1087047 /home/oracle



2、搜尋開啟的網路連線
搜尋某個ip開啟的所有網路連線:
我從一個windows客戶端用sqlplus連線伺服器,在伺服器上可以看到:
[root@vm4 ~]# lsof -i@192.168.5.168
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 3354 root 3u IPv6 9276 TCP 192.168.2.134:ssh->192.168.5.168:2030 (ESTABLISHED)
sshd 3356 oracle 3u IPv6 9276 TCP 192.168.2.134:ssh->192.168.5.168:2030 (ESTABLISHED)
oracle 3860 oracle 13u IPv4 12962 TCP 192.168.2.134:1521->192.168.5.168:2372 (ESTABLISHED)



其中前2個是telnet的連結,第3個是sqlplus的連結,埠是2372



3、尋找本地斷開的開啟檔案
lsof +L1



4、搜尋被程式開啟的所有檔案及開啟的檔案相關聯程式



我在windows的機器上sqlplus連線一個linux上面的oracle10g,在linux上面會有一個process作為我的連結的server process.
ps看一下:
[root@vm4 ~]# ps -ef | grep oracle
oracle 2709 1 0 20:17 ? 00:00:00 /u01/oracle/product/10.2.0/db_1/bin/tnslsnr LISTENER -inherit
root 3354 2218 0 20:33 ? 00:00:00 sshd: oracle [priv]
oracle 3356 3354 0 20:34 ? 00:00:00 sshd: oracle@pts/1
oracle 3357 3356 0 20:34 pts/1 00:00:00 -bash
oracle 3390 1 0 20:35 ? 00:00:00 ora_pmon_rawdb
oracle 3392 1 0 20:35 ? 00:00:00 ora_psp0_rawdb
oracle 3394 1 0 20:35 ? 00:00:00 ora_mman_rawdb
oracle 3396 1 0 20:35 ? 00:00:00 ora_dbw0_rawdb
oracle 3398 1 0 20:35 ? 00:00:00 ora_lgwr_rawdb
oracle 3400 1 0 20:35 ? 00:00:00 ora_ckpt_rawdb
oracle 3402 1 0 20:35 ? 00:00:00 ora_smon_rawdb
oracle 3404 1 0 20:35 ? 00:00:00 ora_reco_rawdb
oracle 3406 1 0 20:35 ? 00:00:00 ora_cjq0_rawdb
oracle 3408 1 0 20:35 ? 00:00:01 ora_mmon_rawdb
oracle 3410 1 0 20:35 ? 00:00:00 ora_mmnl_rawdb
oracle 3414 1 0 20:35 ? 00:00:00 ora_qmnc_rawdb
oracle 3420 1 0 20:35 ? 00:00:00 ora_q000_rawdb
oracle 3422 1 0 20:35 ? 00:00:00 ora_q001_rawdb
oracle 3464 1 1 20:38 ? 00:00:00 oraclerawdb (LOCAL=NO)
root 3499 3466 0 20:39 pts/1 00:00:00 grep oracle



3464就是那個為我的客戶端服務的server process的程式號.用lsof來看看他使用的檔案和通訊埠.
lsof -p 3464
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
oracle 3464 oracle cwd DIR 8,3 4096 1184867 /u01/oracle/product/10.2.0/db_1/dbs
oracle 3464 oracle rtd DIR 8,3 4096 2 /
oracle 3464 oracle txt REG 8,3 86175221 551701 /u01/oracle/product/10.2.0/db_1/bin/oracle
oracle 3464 oracle mem REG 8,3 106441 391214 /lib/ld-2.3.4.so
oracle 3464 oracle mem REG 8,3 1451681 391215 /lib/tls/libc-2.3.4.so
oracle 3464 oracle mem REG 8,3 15340 391217 /lib/libdl-2.3.4.so
oracle 3464 oracle mem REG 8,3 178307 391216 /lib/tls/libm-2.3.4.so
oracle 3464 oracle mem REG 8,3 93993 391218 /lib/tls/libpthread-2.3.4.so
oracle 3464 oracle mem REG 8,3 95192 391226 /lib/libnsl-2.3.4.so
oracle 3464 oracle DEL REG 0,6 163841 /SYSV9a02403c
oracle 3464 oracle mem CHR 1,5 1608 /dev/zero
oracle 3464 oracle mem REG 8,3 45816 389426 /lib/libnss_files-2.3.4.so
oracle 3464 oracle mem REG 8,3 2628 696392 /usr/lib/libaio.so.1.0.1
oracle 3464 oracle mem REG 8,3 5480533 1188614 /u01/oracle/product/10.2.0/db_1/lib/libnnz10.so
oracle 3464 oracle mem REG 8,3 98079 1187068 /u01/oracle/product/10.2.0/db_1/lib/libdbcfg10.so
oracle 3464 oracle mem REG 8,3 70077 1188456 /u01/oracle/product/10.2.0/db_1/lib/libclsra10.so
oracle 3464 oracle mem REG 8,3 9017903 1185770 /u01/oracle/product/10.2.0/db_1/lib/libjox10.so
oracle 3464 oracle mem REG 8,3 728411 1188452 /u01/oracle/product/10.2.0/db_1/lib/libocrutl10.so
oracle 3464 oracle mem REG 8,3 1211519 1188451 /u01/oracle/product/10.2.0/db_1/lib/libocrb10.so
oracle 3464 oracle mem REG 8,3 854560 1188450 /u01/oracle/product/10.2.0/db_1/lib/libocr10.so
oracle 3464 oracle mem REG 8,3 8069 1187147 /u01/oracle/product/10.2.0/db_1/lib/libskgxn2.so
oracle 3464 oracle mem REG 8,3 2365801 1188455 /u01/oracle/product/10.2.0/db_1/lib/libhasgen10.so
oracle 3464 oracle mem REG 8,3 143485 113871 /u01/oracle/product/10.2.0/db_1/lib/libskgxp10.so
oracle 3464 oracle 0u CHR 1,3 1607 /dev/null
oracle 3464 oracle 1u CHR 1,3 1607 /dev/null
oracle 3464 oracle 2u CHR 1,3 1607 /dev/null
oracle 3464 oracle 3r REG 0,1 955 34 /init
oracle 3464 oracle 4r CHR 1,3 1607 /dev/null
oracle 3464 oracle 5r CHR 1,3 1607 /dev/null
oracle 3464 oracle 6r CHR 1,3 1607 /dev/null
oracle 3464 oracle 7r CHR 1,3 1607 /dev/null
oracle 3464 oracle 8r CHR 1,5 1608 /dev/zero
oracle 3464 oracle 9r REG 8,3 834560 568806 /u01/oracle/product/10.2.0/db_1/rdbms/mesg/oraus.msb
oracle 3464 oracle 10u CHR 162,10 5795 /dev/raw/raw10
oracle 3464 oracle 11u CHR 162,6 5682 /dev/raw/raw6
oracle 3464 oracle 12r REG 8,3 584704 568815 /u01/oracle/product/10.2.0/db_1/rdbms/mesg/orazhs.msb
oracle 3464 oracle 13u IPv4 9944 TCP 192.168.2.134:1521->192.168.5.168:2057 (ESTABLISHED)
oracle 3464 oracle 14r REG 8,3 834560 568806 /u01/oracle/product/10.2.0/db_1/rdbms/mesg/oraus.msb



其中:
oracle 3464 oracle 13u IPv4 9944 TCP 192.168.2.134:1521->192.168.5.168:2057 (ESTABLISHED)
說明了這個server process 這在用tcpip連結我機器的2057埠.
其它資訊表明了他所使用的檔案.



5、 其它使用命令
-c c 顯示出以字母 c開頭程式現在開啟的檔案
例:顯示以init程式現在開啟的檔案
[root@vm4 ~]# lsof -c init
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,3 4096 2 /
init 1 root rtd DIR 8,3 4096 2 /
init 1 root txt REG 8,3 32684 324537 /sbin/init
init 1 root mem REG 8,3 106441 391214 /lib/ld-2.3.4.so
init 1 root mem REG 8,3 1451681 391215 /lib/tls/libc-2.3.4.so
init 1 root mem REG 8,3 53736 389497 /lib/libsepol.so.1
init 1 root mem REG 8,3 56320 391229 /lib/libselinux.so.1
init 1 root 3r REG 0,1 955 34 /init
init 1 root 10u FIFO 0,13 1094 /dev/initctl

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-960342/,如需轉載,請註明出處,否則將追究法律責任。

相關文章