標籤:使用 os io strong 檔案 資料 ar div
fuser 用途:使用檔案或檔案結構識別進程,即:查詢都有哪些進程佔用了制定的檔案、目錄、裝置或通訊端;
lsof
MTR
fuser命令
用途:使用檔案或檔案結構識別進程,即:查詢都有哪些進程佔用了制定的檔案、目錄、裝置或通訊端;
文法:
fuser [-c|-d|-f] [-k] [-u] [-x] [-V] 檔案/目錄/通訊端/裝置 ...
說明:fuser命令列出了本地進程的進程號,那些本地進程使用File參數指定的本地或遠程檔案.對於阻塞特別裝置,此命令列出了使用該裝置上任何檔案的進程.
每個進程號後面都跟隨一個字母,該字母指示進程如何使用檔案.
c 將此檔案作為目前的目錄使用.
e 將此檔案作為程式的可執行對象使用.
r 將此檔案作為根目錄使用.
s 將此檔案作為共用庫(或其它可裝載對象)使用.
進程號被寫入標準輸出(在進程號之間有空格的行中).一個分行符號被寫入標準錯誤(在每個檔案運算元的最後一個輸出之後).其他所有輸出被寫入標準錯誤.
fuser命令不會檢測有mmap地區的進程,其中相關的檔案描述符已從此被關閉.
標記:
-c 包含 File的檔案系統中關於任何開啟的檔案的報告.
-d 暗示使用了 -c 和 -x 標誌.關於任何與檔案系統(自父目錄刪除的)無連結的開啟檔案的報告.當與 -V 標誌一起使用時,它也會報告被刪除檔案的節點號和大小.
-f 僅對檔案的開啟執行個體報告.
-k 將 SIGKILL 訊號發送到每個本地進程.僅有根使用者能終止另一使用者的進程.
-u 為進程號後圓括弧中的本地進程提供登入名稱.
-V 提供詳細輸出.
-x 與 -c 或 -f 連用,報告除標準fuse 輸出以外的可執行檔和可載入的對象.
樣本:
若要列出使用 /etc/passwd 檔案的本地進程的進程號,請輸入:
fuser -u /etc/passwd
要列出使用 /etc/filesystems 檔案的進程的進程號和使用者登入名稱,請輸入:
fuser -u /etc/filesystems
要終止全部使用給定的檔案系統的進程,請輸入:
fuser -k -x -u /dev/hd1 -OR-
fuser -kxuc /home
任一命令都列出了進程號和使用者名稱,然後終止每個正在使用/dev/hd1(/home)檔案系統的進程.僅有根使用者能終止屬於另一使用者的進程.如果你正在試圖卸下/dev/hd1檔案系統,而一個正在訪問/dev/hd1檔案系統的進程不允許這樣,您可能希望使用此命令.
要列出正在使用檔案(已從給定檔案系統刪除的檔案)的全部進程,請輸入:
fuser -d /usr 檔案
/dev/kmem 用於系統映象.
/dev/mem 也用於系統映象.
如何使用lsof?
這篇文章中我會儘力列舉我能想到的所有lsof的用法,讓我們先從最簡單的開始(或許你已經知道了),然後逐漸增加複雜度:
# lsof
不帶任何參數運行lsof會列出所有進程開啟的所有檔案。
# lsof /path/to/file
只需要執行檔案的路徑,lsof就會列出所有使用這個檔案的進程,你也可以列出多個檔案,lsof會列出所有使用這些檔案的進程。
你也可以一次制定多個檔案:
# lsof /path/to/file1 /path/to/file2
# lsof +D /usr/lib
加上+D參數,lsof會對指定目錄進行遞迴尋找,注意這個參數要比grep版本慢:
# lsof | grep ‘/usr/lib’
之所以慢是因為+D首先尋找所有的檔案,然後一次性輸出。
# lsof -u pkrumins
-u選項限定只列出所有被使用者pkrumins開啟的檔案,你可以通過逗號指定多個使用者:
# lsof -u rms,root
這條命令會列出所有rms和root使用者開啟的檔案。
你也可以像下面這樣使用多個-u做同樣的事情:
# lsof -u rms -u root
# lsof -c apache
-c選項限定只列出以apache開頭的進程開啟的檔案:
所以你可以不用像下面這樣寫:
# lsof | grep foo
而使用下面這個更簡短的版本:
# lsof -c foo
事實上,你可以只制定進程名稱的開頭:
# lsof -c apa
這會列出所有以apa開頭的進程開啟的檔案
你同樣可以制定多個-c參數:
# lsof -c apache -c python
這會列出所有由apache和python開啟的檔案
# lsof -u pkrumins -c apache
你也可以組合使用多個選項,這些選項預設進行或關聯,也就是說上面的命令會輸入由pkrumins使用者或是apache進程開啟的檔案。
# lsof -a -u pkrumins -c bash
-a參數可以將多個選項的組合條件由或變為與,上面的命令會顯示所有由pkrumins使用者以及bash進程開啟的檔案。
# lsof -u ^root
注意root前面的^符號,它執行取反操作,因此lsof會列出所有root使用者之外的使用者開啟的檔案。
# lsof -p 1
-p選項讓你可以使用進程id來過濾輸出。
記住你也可以用都好來分離多個pid。
# lsof -p 450,980,333
# lsof -p ^1
同前面的使用者一樣,你也可以對-p選項使用^來進行取反。
# lsof -i
lsof的-i選項可以列出所有開啟了網路通訊端(TCP和UDP)的進程。
# lsof -i tcp
也可以為-i選項加上參數,比如tcp,tcp選項會強制lsof只列出開啟TCP sockets的進程。
# lsof -i udp
同樣udp讓lsof只列出使用UDP socket的進程。
# lsof -i :25
:25和-i選項組合可以讓lsof列出佔用TCP或UDP的25連接埠的進程。
你也可以使用/etc/services中制定的連接埠名稱來代替連接埠號碼,比如:
# lsof -i :smtp
找到使用某個udp連接埠號碼的進程
# lsof -i udp:53
同樣的,也可以找到使用某個tcp連接埠的進程:
# lsof -i tcp:80
# lsof -a -u hacker -i
使用-a將-u和-i選項組合可以讓lsof列出某個使用者的所有網路行為。
# lsof -N
這個參數很好記,-N就對應NFS。
# lsof -U
這個選項也很好記,-U就對應UNIX。
# lsof -g 1234
進程組用來來邏輯上對進程進行分組,這個例子尋找所有PGID為1234的進程開啟的檔案。
# lsof -d 2
這個命令會列出所有以描述符2開啟的檔案。
你也可以為描述符指定一個範圍:
# lsof -d 0-2
這會列出所有描述符為0,1,2的檔案。
-d選項還支援其它很多特殊值,下面的命令列出所有記憶體對應檔:
# lsof -d mem
txt則列出所有載入在記憶體中並正在執行的進程:
# lsof -d txt
# lsof -t -i
-t選項輸出進程的PID,你可以將它和-i選項組合輸出使用某個連接埠的進程的PID,下面的命令將會殺掉所有使用網路的進程:
# kill -9 `lsof -t -i`
# lsof -r 1
-r選項讓lsof可以迴圈列出檔案直到被中斷,參數1的意思是每秒鐘重複列印一次,這個選項最好同某個範圍比較小的查詢組合使用,比如用來監測網路活動:
# lsof -r 1 -u john -i -a
************************************************************************************************************************
MTR命令
[[email protected] ~]# mtr -h
usage: mtr [-hvrctglspni46] [--help] [--version] [--report]
[--report-cycles=COUNT] [--curses] [--gtk]
[--raw] [--split] [--no-dns] [--address interface]
[--psize=bytes/-s bytes]
[--interval=SECONDS] HOSTNAME [PACKETSIZE]
mtr -h 提供協助命令
mtr -v 顯示mtr的版本資訊
mtr -r 已報告模式顯示
[[email protected] ~]# mtr -r 202.108.33.94
FOCUS9097 Snt: 10 Loss% Last Avg Best Wrst StDev
220.181.61.252 0.0% 6.8 3.3 1.8 7.4 2.2
220.181.17.217 0.0% 0.4 0.5 0.4 0.7 0.1
220.181.16.17 0.0% 0.6 0.5 0.5 0.6 0.0
202.97.53.14 10.0% 0.7 0.7 0.7 0.8 0.0
219.158.35.1 0.0% 0.8 0.8 0.8 0.9 0.0
219.158.5.81 0.0% 1.2 1.3 1.2 1.6 0.1
123.126.0.138 0.0% 1.2 1.1 1.1 1.3 0.1
61.148.153.126 0.0% 1.9 10.5 1.5 89.9 27.9
61.148.143.22 0.0% 1.5 1.6 1.5 1.7 0.0
210.74.178.198 0.0% 1.6 1.6 1.5 1.9 0.1
202.108.33.94 0.0% 1.5 1.5 1.4 1.5 0.0
報告說明:
第一列:顯示的是IP地址和本機網域名稱,這點和tracert很像
第二列:snt:10 設定每秒發送資料包的數量,預設值是10 可以通過參數 -c來指定。
[[email protected] ~]# mtr -r -c 15 202.108.33.94
FOCUS9097 Snt: 15 Loss% Last Avg Best Wrst StDev
220.181.61.252 0.0% 1.9 3.4 1.8 12.9 3.1
220.181.17.217 0.0% 0.5 0.5 0.4 0.8 0.1
220.181.16.17 0.0% 0.5 0.6 0.5 2.3 0.5
202.97.53.14 0.0% 0.7 0.7 0.7 0.7 0.0
219.158.35.1 0.0% 0.9 0.8 0.8 0.9 0.0
219.158.5.81 0.0% 1.3 2.8 1.2 22.8 5.5
123.126.0.138 0.0% 1.1 1.1 1.1 1.2 0.0
61.148.153.126 0.0% 13.8 7.4 1.6 60.4 15.5
61.148.143.22 0.0% 1.7 1.6 1.5 1.8 0.1
210.74.178.198 0.0% 1.6 1.6 1.4 1.7 0.1
202.108.33.94 0.0% 1.5 1.5 1.4 1.7 0.1
其中-c的說明是:–report-cycles COUNT
- 第三列:是顯示的每個對應IP的丟包率
- 第四列:顯示的最近一次的返回時延
- 第五列:是平均值 這個應該是發送ping包的平均時延
- 第六列:是最好或者說時延最短的
- 第七列:是最差或者說時延最常的
- 第八列:是標準差
接下來接著說相關參數:
- mtr -s 用來指定ping資料包的大小
- mtr -n no-dns不對IP地址做網域名稱解析
- mtr -a 來設定發送資料包的IP地址 這個對一個主機由多個IP地址是有用的
- mtr -i 使用這個參數來設定ICMP返回之間的要求預設是1秒
- mtr -4 IPv4
- mtr -6 IPv6
網路判斷
traceroute www.baidu.com
mtr www.baidu.com
nslookup www.baidu.com