ユーザーIDで開かれたファイルの総数を確認する方法

ユーザーIDで開かれたファイルの総数を確認する方法

昨日、私たちのシステムのユーザーがファイルシステムの1つのすべてのスペースを占有する不正なスクリプトを使用しました。多くの試行錯誤により、ユーザーを識別し、問題を引き起こすプロセスを終了することができました。

将来、これらのプロセスを簡単に識別する方法はありますか?

このコマンドの出力には、lsof /file-systemユーザー、PID、およびファイルサイズで開いている各ファイルが表示されると思います。出力を解析するプログラムを書くことができるようですが、それを実行する他のコマンドがあるかどうか疑問に思います。この問題が再度発生した場合に集中するのに役立つように、ユーザーのための完全なファイルサイズレポートが本当に必要です。

私はSolaris 10を使用しています(該当する場合)。私はシステム管理者ではありません。おそらく私たちの部門のエンドユーザーのために仕事を調整する「上級ユーザー」でしょう。

答え1

lsof現在のプロセスで開いているファイルのみを報告できます。データがすでにディスクに書き込まれているか、IOを追跡するために使用されている場合は役に立ちません。

見ているときに多くのIOが発生した場合は、以下を使用して問題のあるプロセスをキャプチャできます。iotop~からDTraceツールキット

ファイルシステムのスキャンに時間がかかるため、ディスクサイズの一時的な報告は少し困難です。デフォルトのファイルシステムトレース以上の作業は少し時間がかかります。報告しても問題は解決しませんので、お勧めします。ファイルシステムそしてユーザークォータどこに書き込むことができるデータの量を制限します。ユーザークォータを設定すると、組み込みレポートを使用して特定のユーザー使用量をより簡単に報告できます。

ワンタイムレポート(割り当てなし)として、同様のタスクを実行して、各ユーザーが使用するスペースをMB単位で見積もることができます。

sudo find /path -type f -ls | perl -lane ' $total{ $F[4] } += $F[6]; 
END { map { printf "%-8s %d\n", $_, $total{$_}/2**20; } keys %total; }'

スペースが実際にブロックに割り当てられ、ハードリンクが値を誤って膨らませるために少し偏向する可能性がありますが、照会が完了するのを待つことができる場合は、異常値をキャッチするのに十分です。 :) すみません。ちょっとそうですね。

関連情報