Edited at

開いているファイルのプロセスを特定(lsofコマンド)

More than 3 years have passed since last update.


lsofコマンドの使い方です。

lsofコマンドは、、、

PortやPID、プロセス名からファイルがオープンしている情報を表示するコマンド。


よく利用する場面

「netstat -an |grep LISTEN 」とかでListenしているPortを調べてそのPortが何のプロセスとかで動いているのかとかを確認するのに使っています!


使い方サンプル


ファイルを指定

% lsof /var/log/system.log

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
tail 97529 USERNAME 3r REG 1,2 498299 12085861 /private/var/log/system.log

/var/log/system.logはtailコマンドで開いていることがわかりますねー



ポート指定

% lsof  -i:80,443

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Dropbox 376 USERNAME 14u IPv4 0x2b3f22aae05f3e3 0t0 TCP 192.168.100.102:58140->108.160.162.100:http (ESTABLISHED)
Dropbox 376 USERNAME 19u IPv4 0x2b3f22ab4456703 0t0 TCP 192.168.100.102:54071->108.160.160.177:https (CLOSED)

portが80, 443で開いているプロセスを表示指定ます。

LISTENしているプロセスも表示されます。(DROPBOX って HTTPポート(80) を使って同期しているんですねー)


明示的にLISTENされているプロセスを調べたい場合


redisのポート

lsof -i:6379 |grep LISTEN

# TCPとして指定する
lsof -iTCP:6379 |grep LISTEN




プロセス名指定

% lsof -c ruby

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 18910 USERNAME cwd DIR 1,2 1190 2 /
ruby 18910 USERNAME txt REG 1,2 2805460 1903306 /Users/USERNAME/.rbenv/versions/1.9.3-p385/bin/ruby
ruby 18910 USERNAME txt REG 1,2 13384 1903333 /Users/USERNAME/.rbenv/versions/1.9.3-p385/lib/ruby/1.9.1/x86_64-darwin12.2.1/enc/encdb.bundle
ruby 18910 USERNAME txt REG 1,2 13168 1903375 /Users/USERNAME/.rbenv/versions/1.9.3-p385/lib/ruby/1.9.1/x86_64-darwin

rubyプロセスが開いているファイルを表示していますねー



PIDを指定

% lsof  -p 376

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Dropbox 376 USERNAME cwd DIR 1,2 2550 7815603 /Applications/Dropbox.app/Contents/Resources
Dropbox 376 USERNAME txt REG 1,2 89808 7815600 /Applications/Dropbox.app/Contents/MacOS/Dropbox

PIDが376のプロセスが開いているファイルを表示



ユーザ名を指定

% lsof  -u ユーザ名


指定したユーザが開いているプロセスを表示