Hack 95. lsof コマンド

Lsof は ls open files を表します。
システム上で開いているファイルすべてをリストアップします。
その開いているファイルにはネットワーク接続、デバイスディレクトリも含まれます。
lsof コマンドの出力は次のようなカラムがあります:
o COMMAND プロセス名
o PID プロセス ID
o USER ユーザ名
o FD ファイルディスクリプタ
o TYPE ファイルのノードタイプ
o DEVICE デバイス番号
o SIZE ファイルサイズ
o NODE ノード番号
o NAME ファイル名のフルパス

システムの開かれているファイルすべてを表示する

以下に示すように何も引数を指定せずに lsof コマンドを実行します。

# lsof | more

COMMAND PID USER  FD TYPE DEVICE    SIZE   NODE NAME
init      1 root cwd DIR     8,1    4096      2 /
init      1 root rtd DIR     8,1    4096      2 /
init      1 root txt REG     8,1   32684 983101 /sbin/init
init      1 root mem REG     8,1  106397 166798 /lib/ld-2.3.4.so
init      1 root mem REG     8,1 1454802 166799 /lib/tls/libc-2.3.4.so
init      1 root mem REG     8,1   53736 163964 /lib/libsepol.so.1
init      1 root mem REG     8,1   56328 166811 /lib/libselinux.so.1
init      1 root 10u FIFO   0,13     972        /dev/initctl
migration 2 root cwd DIR     8,1    4096      2 /
skipped…

引数なしの lsof コマンドを実行するとたくさんのレコードが出力がされるかもしれません。
しかし、以下に示すように指定した時点でシステム上でどれだけのファイルが開かれているかについて
大雑把に知ること以外にあまり意味がないかもしれません。

# lsof | wc -l 

3093

指定したユーザが開いたファイルを表示する

lsof -u オプションを使用して指定したユーザが開いたファイルすべてを表示します。

# lsof -u ramesh

vi   7190 ramesh txt REG       8,1 474608 475196 /bin/vi
sshd 7163 ramesh  3u IPv6 15088263    TCP dev-db:ssh->abc-12-12-12-12.socal.res.rr.com:2631 (ESTABLISHED)

システム管理者はこのコマンドを使用してユーザがシステム上で実行しているものを知ることができます。

指定したファイルのユーザ一覧を取得する

指定したファイルを使用しているユーザすべてを見たい場合、
以下に示すように lsof を使用します。
この例では、現在 vi を使用しているユーザすべてを表示します。

# lsof /bin/vi

COMMAND  PID   USER  FD TYPE DEVICE   SIZE   NODE NAME
vi      7258   root txt  REG    8,1 474608 475196 /bin/vi
vi      7300 ramesh txt  REG    8,1 474608 475196 /bin/vi