[unix]lsofコマンド

2015年11月2日月曜日

linux unix

あるファイルを延々となにかのプロセスが読み込んだり、書き込んだりしていて、その正体を知りたい時がある。 そんなときはlsofコマンドを使うのがいい。
例えば、以下のようにファイルを開いておいて

$ tail -f ~/some.log

別のシェルでlsofコマンドを使うと、こんな感じで表示される。

$ lsof ~/some.log
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
tail    3901 username  3r   REG    8,7      780 1976760 some.log

逆にコマンド名やプロセスIDを指定して、開いているファイルを表示することもできる。

# -cでコマンド名を指定
$ lsof -c tail
# -pでプロセスIDを指定
$ lsof -p 3901