UNIX/Linuxの部屋 fstatコマンドの使い方

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド fstat 現在オープンしているファイルの情報を表示 このエントリーをはてなブックマークに追加

現在、どのプロセスが、どのファイルを参照/書き込みしているかを表示する。umount コマンドを実行して Device Busy エラーになったとき、どのプロセスがアクセスしているのかを調べるのに便利。

ファイル filename に現在アクセスしているプロセスを調べるには
% fstat filename
USER     CMD          PID   FD MOUNT      INUM MODE         SZ|DV R/W NAME
foo      jless        373    4 /usr     729624 -rw-r--r--    5867  r  filename
とする。これによると、ユーザ foo が実行しているプロセス jless (プロセス番号 373) が、ファイル filename (i-node 729624、パーミッション 644、ファイルサイズ 5867) を、読み込みモード (R/W=r) でオープンしていることがわかる。

vi や emacs・mule などのエディタでファイルを読み込んだ場合は、ファイルをオープンしてバッファに読み込んだ後 クローズしてしまう。よって、これらのエディタを使って、どのファイルにアクセスしていることを知るのは難しい (ちょうどファイルをオープンしている最中に fstat を実行しなければならない)。一方、tail -f や more・less はずっとファイルをオープンし続けるので、fstat で容易に調べることができる。

オプション
-p PID 指定した PID のプロセスが開いているファイルのみを表示
-u user 指定したユーザのプロセスが開いているファイルのみを表示
-f 指定したファイル・ディレクトリの属するファイルシステムの情報を表示
% fstat -f /usr/
⇒ /usr が属するファイルシステムのファイルをオープンしているプロセス一覧を表示

fstat コマンドは BSD 系にしかない。SystemV では fuser という同様のコマンドがある。Linux では標準で lsof というコマンドがインストールされている場合が多い。
>> Linuxオンラインマニュアル(man) Linux fstat(2)
>> FreeBSDオンラインマニュアル(man) FreeBSD fstat(1)