?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進程打開的文件。
- 列出除root用戶外的所有用戶打開的文件
# lsof -u ^root
注意root前面的^符號,它執行取反操作,因此lsof會列出所有root用戶之外的用戶打開的文件。
- 列出所有由某個PID對應的進程打開的文件
# lsof -p 1
-p選項讓你可以使用進程id來過濾輸出。
記住你也可以用都好來分離多個pid。
# lsof -p 450,980,333
- 列出所有進程打開的文件除了某個pid的
# lsof -p ^1
同前面的用戶一樣,你也可以對-p選項使用^來進行取反。
- 列出所有網絡連接
# lsof -i
lsof的-i選項可以列出所有打開了網絡套接字(TCP和UDP)的進程。
- 列出所有TCP網絡連接
# lsof -i tcp
也可以為-i選項加上參數,比如tcp,tcp選項會強制lsof只列出打開TCP sockets的進程。
- 列出所有UDP網絡連接
# 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列出某個用戶的所有網絡行為。
- 列出所有NFS(網絡文件系統)文件
# lsof -N
這個參數很好記,-N就對應NFS。
- 列出所有UNIX域Socket文件
# lsof -U
這個選項也很好記,-U就對應UNIX。
- 列出所有對應某個組id的進程
# lsof -g 1234
進程組用來來邏輯上對進程進行分組,這個例子查找所有PGID為1234的進程打開的文件。
- 列出所有與某個描述符關聯的文件
# lsof -d 2
這個命令會列出所有以描述符2打開的文件。
你也可以為描述符指定一個范圍:
# lsof -d 0-2
這會列出所有描述符為0,1,2的文件。
-d選項還支持其它很多特殊值,下面的命令列出所有內存映射文件:
# lsof -d mem
txt則列出所有加載在內存中并正在執行的進程:
# lsof -d txt
- 輸出使用某些資源的進程pid
# 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命令
[root@10.10.90.97 ~]# 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 已報告模式顯示
[root@10.10.90.97 ~]# 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來指定。
[root@10.10.90.97 ~]# 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