?有許多情況下,我們需要查看一個(gè)進(jìn)程當(dāng)前打開了哪些文件,反過來我們也希望知道某一個(gè)文件正在被哪些進(jìn)程所讀寫。在Linux下有許多有用的工具可以幫我們完成這兩個(gè)工作,下面介紹這兩個(gè)工具:lsof與fuser。
??? fuser find files or sockets' user
??? 格式:fuser [選項(xiàng)] fname
??? -k 如果找到打開文件的進(jìn)程,則發(fā)送SIGKILL殺死此進(jìn)程,通過-i選項(xiàng),可以為用戶提供交互選擇
??? -signal 用戶可以指定使用何種信號(hào)去kill進(jìn)程,如果-k參數(shù)指定,則忽略此參數(shù)
??? -m 如果指定一個(gè)文件,則所有訪問那個(gè)文件所在文件系統(tǒng)的進(jìn)程都會(huì)被列出來
??? -n? type 指定不同的文件類型,默認(rèn)類型為file,此外還支持tcp和udp類型,此時(shí)可以簡寫作port/tcp
??? -u? 顯示進(jìn)程屬主
??? -v? 顯示詳細(xì)進(jìn)程與打開文件信息
??? -4/-6 只搜索IPv4/IPv6套接字
??? 例如,我們想查看端口TCP端口9000由哪個(gè)進(jìn)程打開 fuser -v -u 9000/tcp
???????????? 查看哪些進(jìn)程在訪問/home掛載分區(qū)????????????? fuser -mv /home
??? lsof list open file
??? 格式:lsof? [選項(xiàng)] [names]
??? 單獨(dú)執(zhí)行l(wèi)sof將輸出系統(tǒng)中所有打開的文件,我們可以grep過濾出我們關(guān)心的內(nèi)容,不過lsof提供了相應(yīng)的參數(shù)幫助我們精確查找
??? lsof name 將輸出所有使用文件name的進(jìn)程
??? -p pid 列出進(jìn)程pid所打開的所有文件
??? -d FD_pattern 列出所有已經(jīng)打開的FD值為FD_pattern的文件FD的值有整數(shù),TXT,MEM等等
??? -a lsof后可以加多個(gè)匹配條件,默認(rèn)為or連接,此參數(shù)將多個(gè)條件變成and關(guān)系
??? -i [46] [proto] [@hostname|ip][:service|port] 用來選擇占用某個(gè)端口的進(jìn)程
??? +d/+D dir 非遞歸或遞歸的顯示打開dir下文件的進(jìn)程
??? -c string?? 顯示進(jìn)程的command中包含string的進(jìn)程所打開的文件
??? -u username 顯示屬于user的進(jìn)程所打開的文件
??? -g gid
???? 以上這些參數(shù)已經(jīng)足夠用了,上面這兩個(gè)工具都是讀取/proc文件系統(tǒng)中的數(shù)據(jù)進(jìn)行工作的。網(wǎng)上有提到借助于lsof的查找功能,可以對一個(gè)刪除的文件進(jìn)行恢復(fù),前提是占用這個(gè)文件的進(jìn)程當(dāng)前還沒有關(guān)閉。通過被刪除的文件,找到對應(yīng)的進(jìn)程及在進(jìn)程中的fd-num,然后通過cat /proc/process-num/fd/fd-num即可恢復(fù)被刪除的文件。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

