`du` コマンドの出力が一貫していない

`du` コマンドの出力が一貫していない

なぜ出力は

du -sch ./

同一ではない

du -sch ./*

たとえば、du -schユーザーのホーム ディレクトリで実行して 51 GB を取得しましたが、du -sch *同じディレクトリで実行すると 47 GB になります。最初は隠しファイルを考慮しているのではないかと思いましたが、それでは 4 GB 近くの隠しファイル/フォルダーについては説明できません。

ディスクユーティリティのマニュアルを読みましたが、説明が見つかりませんでした。

答え1

最初は隠しファイルを考慮しているのではないかと思いましたが、それでは 4 GB 近くの隠しファイル/フォルダーについては説明できません。

これをどうやって測ったのですか?する隠しファイル/ディレクトリは 4 GB あります。ハードリンクが含まれている場合は、さらに多くなる可能性があります (ある意味では)。

こうするとわかります (-hより正確な結果を得るために省略しました。tail「合計」のみを渡すことです。でテストしましたbash):

du -sc ./{.[!.],..?}*  | tail -n 1   # hidden
du -sc ./*             | tail -n 1   # non-hidden
du -sc ./{.[!.],..?,}* | tail -n 1   # hidden and non-hidden by wildcards
du -sc ./              | tail -n 1   # directory as a whole

(構文はこの答え)。

最初のコマンドが欠けています。最初の結果と 2 番目の結果の合計を取得します。次の場合を除き、最後の 2 つの結果と同じになります...

ただし、隠し部分と非隠し部分の間にハードリンクされたファイルがある場合は、合計はさらに大きくなります。これらのファイルは手動で合計すると2回カウントされますが、du1回のパスで合計すると1回だけカウントされます。この場合、隠しファイル/ディレクトリによって、あなたが思っている以上に多くのスペースが占有されます(ただし、このスペースの一部は、隠しファイル/ディレクトリ以外の部分と「共有」されます)。-lオプションduこの動作を制御するもの:

-l--count-links
ハードリンクの場合はサイズを何度もカウントします

関連情報