Linux學習筆記:fuser和lsof

fuser 和 lsof 能夠用於系統安全檢查。
用fuser查看哪些用戶和進程在某些地方做什麼:
fuser -cu /root 簡略顯示
fuser -muv /mnt3 分列顯示html

lsof 擁有更多的功能
# lsof -i 看系統中有哪些開放的端口,哪些進程、用戶在使用它們,比 netstat -lptu 的輸出詳細。安全

# lsof -i 4  查看IPv4類型的進程
COMMAND    PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4     2213 Debian-exim    4u  IPv4   4844       TCP *:smtp (LISTEN)
dhclient3 2306        root    4u  IPv4   4555       UDP *:bootpc網絡

# lsof -i 6  查看IPv6類型的進程
COMMAND  PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4   2213 Debian-exim    3u  IPv6   4820       TCP *:smtp (LISTEN)tcp

# lsof -i @192.168.1.2  查看與某個具體的IP相關聯的進程
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
amule   3620 root   16u  IPv4  11925       TCP 192.168.1.2:42556->77.247.178.244:4242 (ESTABLISHED)
amule   3620 root   28u  IPv4  11952       TCP 192.168.1.2:49915->118-166-47-24.dynamic.hinet.net:5140 (ESTABLISHED)工具

# lsof -p 5670 查看PID爲5670的進程打開的文件。學習

 

經過lsof命令工具能夠查看某個進程佔用了哪些句柄。同時也能夠看某個文件被哪些進程使用了。.net

 

2.lsof常見的用法htm

(A)查找應用程序打開的文件進程

lsof -p pid   能夠查看進程號爲pid的進程打開了哪些文件或者佔用了哪些fd。ip

(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

 

2、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 #列出進程的詳細信息,而不單單是進程id
fuser -u /home/work/wahaha.txt #同時列出進程的user
fuser -k /home/work/wahaha.txt #殺死全部正在使用/home/work/wahaha.txt文件的進程
fuser -k SIGHUP /home/work/wahaha.txt #向全部正在使用/home/work/wahaha.txt文件的進程發送HUP信號
fuser -l #列出全部支持的信號

---------------------

相關文章
相關標籤/搜索