lsofとfuser

5949 ワード

サーバでプログラムをデバッグするときに、必要なリソースが占有される場合があります.その場合、どのプログラムがリソースを占有しているかを確認します.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/は同じですが、ディレクトリの下のすべてのディレクトリが検索され、比較的長い時間l
たとえば
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


lsof特定ポートを調べる
hpcentos5-/opt/test/bin> lsof -itcp:5000

COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

perl    8587 admin    3u  IPv4 510003      0t0  TCP hpcentos5:commplex-main (LISTEN)

 
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で、得られた情報からプログラムの位置を推定することができます.