一、lsof介紹和使用
1.lsof
通過lsof命令工具可以查看某個進程佔用了哪些控制代碼。同時也可以看某個檔案被哪些進程使用了。
2.lsof常見的用法
(A)尋找應用程式開啟的檔案
lsof -p pid 可以查看進程號為pid的進程開啟了哪些檔案或者佔用了哪些fd。
(B)尋找開啟某個檔案的應用程式
lsof filename 可以查看名稱為filename的檔案被哪些進程開啟了。
(C)使用lsof查看網路連接
命令格式為:
lsof -i protocol:@ip:port
其中protocol可以是tcp或udp,ip是主機ip,port是連接埠
具體使用命令有:
lsof -i #列出所有網路連接的進程lsof -i tcp #列出所有正式使用tcp協議的進行網路通訊的進程lsof -i :8080 #列出正在監聽8080連接埠的進程lsof -i tcp:80 #列出正在使用tcp協議監聽80連接埠的進程
(D)lsof還有一些其他進階的用法
例如,恢複已經被刪除的檔案等等。
備忘:
(1)使用/usr/sbin/lsof |grep delete查看被rm的檔案,仍然被進程佔用,最終導致磁碟空間釋放不了。當進程開啟了某個檔案時,只要該進程保持開啟該檔案,即使將其刪除,它依然存在於磁碟中。這意味著,進程並不知道檔案已經被刪除,它仍然可以向開啟該檔案時提供給它的檔案描述符進行讀取和寫入。除了該進程之外,這個檔案是不可見的,因為已經刪除了其相應的目錄條目。
(2)lsof輸出的資訊中,有一列SIZE值,表示檔案的大小,單位是Byte
學習資料來源:
http://www.ibm.com/developerworks/cn/aix/library/au-lsof.html
二、fuser介紹和使用
1.fuser
fuser能識別出正在對某個檔案或連接埠訪問的所有進程,類似於lsof。但從區別上來說,lsof可以通過檔案名稱找到正在使用該檔案的所有進程,同時也可以根據進程id找出該進程使用的哪些檔案。fuser則是可以通過檔案名稱找到使用該檔案的所有進程。但是fuser有一個特別的用法在於它可以一次殺死那些正在訪問指定檔案的進程。
2.fuser的命令格式和常用選項
命令格式:
fuser [option] filename
常用的選項:
-v 列出進程的詳細資料,而不僅僅是進程id-u 列出進程所屬的用-k signal 如果不指定signal,那麼預設是SIGKILL。當然使用者自己指定訊號,例如SIGHUP-l 列出所有支援的訊號
3.fuser命令使用舉例
fuser /home/work/wahaha.txt #列出所有使用/home/work/wahaha.txt檔案的進程fuser -v /home/work/wahaha.txt #列出進程的詳細資料,而不僅僅是進程idfuser -u /home/work/wahaha.txt #同時列出進程的userfuser -k /home/work/wahaha.txt #殺死所有正在使用/home/work/wahaha.txt檔案的進程fuser -k SIGHUP /home/work/wahaha.txt #向所有正在使用/home/work/wahaha.txt檔案的進程發送HUP訊號fuser -l #列出所有支援的訊號