linux查檔案被哪些程式佔用—fuser和lsof的使用

來源:互聯網
上載者:User

標籤:使用   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進程開啟的檔案。

  • 列出除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命令

[[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包的平均時延
  • 第六列:是最好或者說時延最短的
  • 第七列:是最差或者說時延最常的
  • 第八列:是標準差

接下來接著說相關參數:

  1. mtr -s 用來指定ping資料包的大小
  2. mtr -n no-dns不對IP地址做網域名稱解析
  3. mtr -a 來設定發送資料包的IP地址 這個對一個主機由多個IP地址是有用的
  4. mtr -i 使用這個參數來設定ICMP返回之間的要求預設是1秒
  5. mtr -4 IPv4
  6. mtr -6 IPv6

 

網路判斷
traceroute www.baidu.com
mtr www.baidu.com
nslookup www.baidu.com

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.