普段任意のポートを使用しているプロセスはなんだろうってなった時にlsof
を使う
$ lsof -i:80 # port:80を使用しているプロセス COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 1 root 6u IPv4 229552 0t0 TCP *:http (LISTEN)
おっport:80はnginxだね。のような感じ
このlsof
はポートを調べる時にしか使ってなかったのでそういう用途かと思ったら他にもあったので覚えておくためにも記録しておく
まずはどんなオプションがあるんだっけの時のman lsof
descriptionにはApple DarwinやLinux, FreeBSD, SolarisなどのUNIXによって開かれたファイルの情報を出力するということが書いてある
とりあえず見てみる
特定のポートを使用しているプロセスを調べる
これは冒頭でのlsofでの使用例でも出したものです
$ lsof -i:80 # port:80を使用しているプロセス COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 1 root 6u IPv4 229552 0t0 TCP *:http (LISTEN)
指定されたファイルを開いているプロセスは何か
例えばrailsのログを指定してみる
$ lsof development.log COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby 1 root 8w REG 0,73 10899 1958 development.log $ ps 1 PID TTY STAT TIME COMMAND 1 ? Ssl 0:03 /usr/local/bin/ruby bin/rails server -b 0.0.0.0
このことからdevelopment.logはrails server
が開いていることが分かった
指定されたプロセスが開いているファイル一覧
さきほどは指定されたファイルからプロセスを指定したが次は特定のプロセスが開いているファイル見る
$ lsof -p 1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby 1 root cwd DIR 0,73 4096 13 /usr/src/app ruby 1 root rtd DIR 0,73 4096 2 / ruby 1 root txt REG 0,73 142408 39 /usr/local/bin/ruby ~~ uby 1 root mem REG 0,73 14664 46 /lib/x86_64-linux-gnu/libdl-2.19.so ruby 1 root mem REG 0,73 137384 44 /lib/x86_64-linux-gnu/libpthread-2.19.so ruby 1 root mem REG 0,73 14453344 42 /usr/local/lib/libruby.so.2.3.0 ruby 1 root mem REG 0,73 140928 33 /lib/x86_64-linux-gnu/ld-2.19.so ruby 1 root mem REG 0,73 26258 1422 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache ruby 1 root 0r FIFO 0,10 0t0 255817 pipe ruby 1 root 1w FIFO 0,10 0t0 255818 pipe ruby 1 root 2w FIFO 0,10 0t0 255819 pipe ruby 1 root 3r FIFO 0,10 0t0 255913 pipe ruby 1 root 4w FIFO 0,10 0t0 255913 pipe ruby 1 root 5r FIFO 0,10 0t0 255914 pipe ruby 1 root 6w FIFO 0,10 0t0 255914 pipe ruby 1 root 7w CHR 1,3 0t0 255878 /dev/null ruby 1 root 8w REG 0,73 10899 1958 /usr/src/app/log/development.log ruby 1 root 9u IPv4 255918 0t0 TCP *:3000 (LISTEN)
log以外にも色々出てきましたね
指定された秒数ごとにlsofコマンドを再実行してくれる
5秒ごとに再実行される $ lsof -i:3000 -r5 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby 1 root 9u IPv4 255918 0t0 TCP *:3000 (LISTEN) ======= COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby 1 root 9u IPv4 255918 0t0 TCP *:3000 (LISTEN) =======