2012-02-13 18 views
7

私は、ユーザごとのファイルシステムメモリの使用量を見つけるために必要な小さなツールを書いています。ユーザーごとのディスクスペース使用量を見つける方法は?

ファイルシステムの使用率が一定のしきい値を超えている場合、私はいくつかのクリーンアップ活動を行う必要があります。私が使用できるシステムコールとは何ですか?ユーザーごとのメモリ使用量を見つけることができますか?

+0

タグはなぜpthreadsですか? –

+1

duのソースを見てください。 –

+1

メモリ使用量ですか?ディスク!=メモリ – sehe

答えて

0

おそらくディスククォータ(一部ではありますが、すべてではないファイルシステムでサポートされています)に興味があります。低レベルのシステムコールはquotactl(2)です。おそらく既存のツールquota(1)quotacheckedquotawarnquotaquotaonなどを使用するとよいかもしれません。

特定のプロセスで使用されているメモリを知りたい場合は、getrusage(2)を参照してください。あなた慎重popen(3)スルー場合もPID 1234読むため/proc/self/または/proc/1234下の疑似ファイルによりおよそproc(5)(例えば/proc/self/mapsまたは/proc/1234/smapsなど)

もちろんを読んで、またdu(1)df(1)コマンドを考える(おそらくそれらを呼び出すことができます彼らの出力を取得したい)。何らかの理由でファイルツリーを再帰的にスキャンしたい場合(例えば、duのような累積使用サイズをカウントする場合)、nftw(3)関数の使用を検討してください。 stat(2)およびstatfs(2) syscallsも参照してください。

あなたのプログラムがそれを調べたり質問している間に、他のプロセスがファイルシステムに書き込むことができます(しばしば)。

+0

私の問題は、私が 'quota'を実行すると、私は'操作が許可されていない 'を取得します。それはなぜですか?たぶん、それは私が(そして興味を持っている)私の中でのみ、すべてのユーザーのクォータを見ようとしているからです。 –

10

単純なアプローチは、それをソートするには

du -shc /home/* 

次のようになります。

du -smc /home/* | sort -n 

ユーザーごとに郵送ディスクの使用状況レポートのオプションを持っているよく知られたPerlスクリプトでもあります:durep

関連する問題