在 unix 環境中,檔案無處不在,這便產生了一句格言:「任何事物都是檔案」。通過檔案不僅僅可以訪問常規資料,通常還可以訪問網路連線和硬體。在有些情況下,當您使用ls
請求目錄清單時,將出現相應的條目。在其他情況下,如傳輸控制協議 (tcp) 和使用者資料報協議 (udp) 套接字,不存在相應的目錄清單。但是在後台為該應用程式分配了乙個檔案描述符,無論這個檔案的本質如何,該檔案描述符為應用程式與基礎作業系統之間的互動提供了通用介面。
因為應用程式開啟檔案的描述符列表提供了大量關於這個應用程式本身的資訊,所以能夠檢視這個列表將是很有幫助的。完成這項任務的實用程式稱為lsof
,它對應於「list open files」(列出開啟的檔案)。
可以被開啟的檔案可以是:1.普通的檔案,2.目錄 3.網路檔案系統的檔案,4.字元裝置檔案 5.(函式)共享庫 6.管道,命名管道 7.符號鏈結 8.底層的socket字流,網路socket,unix網域名稱........
一、檢視某埠是否被占用。
lsof -i :port, 檢視某埠是否被占用,若違背占用,則什麼都不顯示。 否則,會顯示占用該埠的程式的資訊。
舉例:minizhu@ubuntu:~$ lsof -i :8080
可見,8080埠被nc占用了。
二、檢視所屬使用者程序所開啟的某種型別的檔案
比如檢視root使用者程序所開啟的檔案型別為txt的檔案
# lsof -a -u root -d txt
auditd 2639 root txt reg 3,2 102136 44536 /sbin/auditd
owcimomd 2643 root txt reg 3,2 24560 90676 /usr/sbin/owcimomd
irqbalanc 2737 root txt reg 3,2 25880 62557 /usr/sbin/irqbalance
nscd 2771 root txt reg 3,2 129908 44802 /usr/sbin/nscd
vsftpd 2809 root txt reg 3,2 129792 132934 /usr/sbin/vsftpd
xinetd 2812 root txt reg 3,2 165952 60679 /usr/sbin/xinetd
smpppd 2825 root txt reg 3,2 193752 99524 /usr/sbin/smpppd
sshd 2827 root txt reg 3,2 376768 98762 /usr/sbin/sshd
zmd 2847 root txt reg 3,2 1895856 86524 /usr/bin/mono
gdm 2893 root txt reg 3,2 268424 126353 /opt/gnome/sbin/gdm
三、查詢誰在使用某個檔案系統
在解除安裝檔案系統時,如果該檔案系統中有任何開啟的檔案,操作通常將會失敗。那麼通過lsof可以找出那些程序在使用當前要解除安裝的檔案系統。
# lsof /testdata/
command pid user fd type device size node name
bash 4208 root cwd dir 3,1 4096 2 /testdata/
vim 4230 root cwd dir 3,1 4096 2 /testdata/
四、列出相關資訊
1、列出某個使用者開啟的檔案資訊
lsof -u username
備註: -u 選項,u其實是user的縮寫
如 # lsof -u db2inst1
command pid user fd type device size node name
db2sysc 4390 db2inst1 del reg 0,8 294917 /sysv33984761
db2sysc 4390 db2inst1 del reg 0,8 327686 /sysv00000000
db2sysc 4390 db2inst1 mem reg 3,2 132847 19074 /lib64/ld-2.4.so
db2sysc 4390 db2inst1 mem reg 3,2 217016 158186 /var/run/nscd/passwd
db2sysc 4390 db2inst1 mem reg 3,2 123722 19107 /lib64/libpthread-2.4.so
db2sysc 4390 db2inst1 mem reg 3,2 102866497 137967 /opt/ibm/db2/v9.7/lib64/libdb2e.so.1
db2sysc 4390 db2inst1 mem reg 3,2 7889612 135807 /opt/ibm/db2/v9.7/lib64/libdb2osse.so.1
db2sysc 4390 db2inst1 mem reg 3,2 399985 19089 /lib64/libm-2.4.so
2. 列出某個程式所開啟的檔案資訊
#lsof -c mysql
備註: -c 選項將會列出所有以mysql開頭的程式的檔案,其實你也可以寫成 lsof | grep mysql, 但是第一種方法明顯比第二種方法要少打幾個字元了
3. 列出多個程式多開啟的檔案資訊
#lsof -c mysql -c apache
4. 列出某個使用者以及某個程式所開啟的檔案資訊
#lsof -u test -c mysql
5. 列出除了某個使用者外的被開啟的檔案資訊
#lsof -u ^root
備註:^這個符號在使用者名稱之前,將會把是root使用者開啟的程序不讓顯示
6. 通過某個程序號顯示該程序開啟的檔案
#lsof -p 19552
command pid user fd type device size node name
rpc.mount 19552 root cwd dir 3,2 256 91560 /var/lib/nfs
rpc.mount 19552 root rtd dir 3,2 584 2 /
rpc.mount 19552 root txt reg 3,2 77304 98667 /usr/sbin/rpc.mountd
rpc.mount 19552 root mem reg 3,2 132847 19074 /lib64/ld-2.4.so
rpc.mount 19552 root del reg 3,2 132550 /var/run/nscd/db5bu1ww
7. 列出多個程序號對應的檔案資訊
#lsof -p 123,456,789
8. 列出除了某個程序號,其他程序號所開啟的檔案資訊
#lsof -p ^1523
9 . 列出所有的網路連線
#lsof -i
10. 列出所有tcp 網路連線資訊
#lsof -i tcp
11. 列出所有udp網路連線資訊
#lsof -i udp
12. 列出誰在使用某個特定的udp、tcp埠
#lsof -i udp:55
特定的tcp埠
#lsof -i tcp:80
13. 列出某個使用者的所有活躍的網路埠
#lsof -a -u test -i
14. 檢視誰正在使用某個檔案
#lsof /filepath/file
15.遞迴檢視某個目錄的檔案資訊
#lsof +d /filepath/filepath2/
備註: 使用了+d,對應目錄下的所有子目錄和檔案都會被列出
unix linux常用網路命令系列 前言
本文主要介紹unix的常用網路命令,以期可以更好的除錯我們的網路程式,更好的理解網路,以及做很多其他的事情。計畫的命令如下 1.host 得到網路主機的有關資訊。2.ifconfig 顯示ip位址資訊。3.netstat 顯示路由資訊和網路統計數字 4.ip 顯示ip位址資訊。5.ss ss is ...
最常用的Unix Linux命令
壓縮資料夾 tar zcvf archive name.tar dirname 解壓資料夾 tar xvf archive name.tar在檔案中查詢字串 不區分大小寫 grep i the demo file輸出成功匹配的行,以及該行之後的三行 grep a3 i example demo te...
Unix Linux常用命令
檢視磁碟剩餘完間 df h 顯示當前目錄的目錄和檔案的大小 du d1 h 檢視埠占用情況 netstat tunlp 檢視某埠tcp連線數 netstat nat grep i 80 wc l 檢視程序資訊 ps aux ps ef 指定埠啟動svn服務 svnserve d r svndata ...