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 ユーザ名
指定したユーザが開いているプロセスを表示