私の理解によると、du
フォルダのフルサイズを取得するために使用されるコマンドは、各(サブ)フォルダ内の各ファイルを列挙して追加します。
yann@p:~$ du /var/log
4 /var/log/ntpstats
...
148 /var/log/apt
564 /var/log/installer
8 /var/log/cups
91748 /var/log
しかし、コマンドはどのようにdf
すぐに結果を返すことができますか?
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 35209808 18707476 14694008 57% /
ドライブのすべてのファイルを列挙する必要はありませんか?
ドライブ全体で使用されているスペースをすばやく知る方法がある場合は、フォルダのサイズをすばやく知る方法はありませんか?それともありますか?
よろしくお願いします。
ベストアンサー1
df
システムコールを使用しstatvfs()
、ファイルシステムに現在の空間統計を要求します。もちろん、ファイルシステムを管理するときにファイルシステムで使用されているスペースを常に追跡するため、高速です。
したがって、速度が速いのは、df
ファイルシステムで事前計算されたキャッシュ値を使用するためです。
履歴は次のとおりです。
1970年代には、df
実際にはrawディスクデバイスにアクセスし、スーパーブロックからファイルシステム統計を取得するsuidルートプログラムがありました。
1980年代半ば、SunOSはシステムstatfs()
コールと最初のVFS実装を導入しました。この呼び出しには権限が必要なくなります。このインターフェースは、Tahoe会議で最後のSunOS / BSDコード交換中に* BSDに提供されました。
1989年、SVr4/Solarisはシステムコールの名前をstatvfs().
このバージョンに。このバージョンのシステムコールがPOSIXに追加され、さまざまなオペレーティングシステムからインターフェイスをコピーしました。
df
完全なファイルシステム値のみを持つスーパーブロックから間接的にデータを取得するため、単一のディレクトリの番号をすばやく取得する方法はありません。