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