lsof 與fuser http://www.cnblogs.com/vigarbuaa/archive/2012/11/18/2776565.html 服務器上調試程序時,有時會遇到所需資源被佔用的狀況,這時就要查一下是什麼程序佔用了資源。須要用到lsof與fuser指令。 lsof用於顯示打開文件的信息 lsof filename 顯示打開指定文件的全部進程 lsof -a 表示兩個參數都必須知足時才顯示結果 lsof -c string 顯示COMMAND列中包含指定字符的進程全部打開的文件 lsof -u username 顯示所屬user進程打開的文件 lsof -g gid 顯示歸屬gid的進程狀況 lsof +d /DIR/ 顯示目錄下被進程打開的文件 lsof +D /DIR/ 同上,可是會搜索目錄下的全部目錄,時間相對較長 例如 vigar@vigar-laptop:~/下載/nice$ lsof /opt/google/chrome/chrome COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME chrome 4913 vigar txt REG 8,6 68449288 1835017 /opt/google/chrome/chrome chrome 4917 vigar txt REG 8,6 68449288 1835017 /opt/google/chrome/chrome chrome 4919 vigar txt REG 8,6 68449288 1835017 /opt/google/chrome/chrome fuser 的做用與lsof很是類似,也會將使用指定文件的進程信息所有列出 vigar@vigar-laptop:~/下載/nice$ fuser -v /opt/google/chrome/chrome 用戶 進程號 權限 命令 /opt/google/chrome/chrome: vigar 4913 ...e. chrome vigar 4917 ...e. chrome vigar 4919 ...e. chrome 權限含義: c 將此文件做爲當前目錄使用。 e 將此文件做爲程序的可執行對象使用。 r 將此文件做爲根目錄使用。 s 將此文件做爲共享庫(或其餘可裝載對象)使用 fuser另外一個很是有用的功能是-k,能夠殺死指定進程(發SIGKILL信號) vigar@vigar-laptop:~/下載/nice$ fuser aaa.avi aaa.avi: 14097 vigar@vigar-laptop:~/下載/nice$ fuser -k aaa.avi aaa.avi: 14097 vigar@vigar-laptop:~/下載/nice$ fuser aaa.avi vigar@vigar-laptop:~/下載/nice$ 可知佔用aaa.avi的進程已經被幹掉。固然,執行這條指令須要足夠的權限,有root權限最好,其它人是沒法殺死別人的進程的。 當利用lsof或fuser查出指定進程號後,便可用netstat -anp | grep pid查出其開放端口 test> netstat -anp | grep 7172 (Not all processes could be identified, non-owned process info tcp 0 0 :::8777 :::* LISTEN 7172/java tcp 0 0 ::ffff:10.0.7.128:23564 ::ffff:10.0.3.103:1521 ESTABLISHED 7172/java tcp 0 0 ::ffff:10.0.7.128:23550 ::ffff:10.0.3.103:1521 ESTABLISHED 7172/java tcp 0 0 ::ffff:10.0.7.128:10629 ::ffff:10.0.3.91:1414 ESTABLISHED 7172/java tcp 0 0 ::ffff:10.0.7.128:23562 ::ffff:10.0.3.103:1521 ESTABLISHED 7172/java tcp 0 0 ::ffff:10.0.7.128:23572 ::ffff:10.0.3.103:1521 ESTABLISHED 7172/java 有時在機器上查出某個進程在跑,殊不知道程序部署在何處,能夠用ps -ef 查出pid,用lsof| grep pid,根據獲得的信息推斷出程序位置