dullwhaleのメモ帳

何度も同じことを調べなくてよいように...

lsofコマンドの活用

ファイルをつかんでいるプロセスを確認したり、listenポートを確認したりする際に使うlsofコマンドは意外に高機能であり、スクリプトで役立つ。

lsofの出力をパイプでつないでこねくり回す前にlsofのmanを読め。

絞り込み

いくつものオプションで絞り込みができる。

# TCP80番ポートを利用しているプロセスだけを調べる
$ lsof -iTCP:80

# UDP53番ポートを利用しているプロセスだけを調べる
$ lsof -iUDP:53

出力の加工

lsofは出力を他のプログラムやスクリプトで処理することも想定して作られている。 -Fオプションで出力する項目を変更できる。 指定可能な項目は

lsof -F?

で確認できる。 出力はオプションの指定子 + データ + Line Feedとなる。

$ lsof -iUDP:53 -Fpf
p50744
f5

なおpとfは指定していなくても必ず出力される。 誤解しないよう、明示的に指定すると良いだろう。

また、 応用例

# UDP53番ポートで待ち受けているプロセスIDを受け取りxargsに渡してkillする
# macOS/BSD用
lsof -iUDP:53 -Fpf | sed -nE 's/p([0-9]+)/\1/p' | xargs kill -9