私は多くのウェブサイトでLinuxでシンボリックリンク(symlink)が次のようになっていることを読んでいます。針Windowsのショートカットなど、どこにでも存在できる他のファイルを参照してください。ただし、シンボリックリンクが存在するフォルダのディスク使用量を確認すると、ファイルマネージャが表示する内容と報告された内容が一致しませんdu
。しかし、du -L
(-L, --dereference; dereference all symbolic links
マンページから)を入力すると、ファイルマネージャが報告した出力とサイズdu -L
は同じです。。
私の質問は:たとえば、別のパーティションに大容量ファイルへのソフトリンクがある場合、home
問題が発生しますか?
はい:
私の/var/tmp
フォルダは今空です。ファイルを作成しましょう。
$ cat /some/file.txt > file.txt
$ du -ac
164 ./file.txt
168 .
168 total
私のファイルマネージャ(この場合はThunar)が報告します。
サイズ:アイテム1個、合計163.0kB
さて、私は非常に大きなファイルと対応する/tmp
シンボリックリンクを作成しましょう。
$ cat /dir/really_big.txt > /tmp/heavy.txt
$ du -a | grep heavy.txt
408 ./heavy.txt
$ ln -s /tmp/heavy.txt heavy.txt
$ du -ac
164 ./file.txt
0 ./heavy.txt
168 .
168 total
今まではすべて大丈夫です。しかし、ファイルマネージャを開くと:
サイズ:2項目、合計570.3kB
ついに:
$ du -acL
164 ./file.txt
408 ./heavy.txt
576 .
576 total
パーティションが/var/tmp
1GiBで、その中に1GiBファイルへのリンクを作成すると、ハードドライブは機能しませんか?私は168とThunar 1 GiBを出力することを知っていますが、du
どちらが正しいかわかりません。
答え1
もちろん、シンボリックリンクはスペースを占有しますが、名前とターゲット、およびその他のメタデータを格納するために必要な数バイトしか占有しません。シンボリックリンクが占めるスペースは、ターゲットが占めるスペースには依存しません(最終的にターゲットは存在する必要さえありません)。
Plainはdu
ディスク上のディレクトリツリーが占めるスペースを報告します。du -L
レポートスペース〜するすべてのシンボリックリンクがその宛先に置き換えられると、ディレクトリツリーから取得されます。前者は有用な情報であることが多いです。たとえば、ツリーを削除した場合、これは復元するスペースであり、おおまかにツリーをバックアップするために必要なスペースです。
du
表示されるディレクトリツリーは、(通常)ファイルサイズの合計よりわずかに大きいです。これは2つの理由です。まず、du
ファイル名とメタデータを保存するのに少しスペースが必要なディレクトリも計算されます。次に、du
ファイルが占めるディスク容量を計算します。これはファイルサイズと異なる場合があります。最も一般的な効果は、ファイルが整数ブロック(通常のLinuxインストールの場合は4 kB)を占めることです。したがって、1バイトのファイルはdu出力では4kBと表示されますが、圧縮されます(例:スパースファイルほとんどすべてのUNIXファイルシステムで)ディスク使用量よりも大きいファイルを作成することが可能です。
あなたが提供した数字に基づいてThunarが報告しました。シンボリックリンクに従うディレクトリツリーのファイルサイズの合計。実際、この内容は微妙な方法で表示されます。全体のサイズは570.3kBであると主張しますが、ディスク使用量は570.3kBであるとは主張しません。ユーザーインターフェイスやドキュメントでまったく明確ではないのは、Thunarがサイズを計算するときにシンボリックリンクに従うことです。
どちらが「正しい」かは主観的な問題です。du
ディスク使用量を報告します。 Thunarはシンボリックリンクの背後にある全体のサイズを報告します。シンボリックリンクの作成はディスク使用量にわずかな影響を与えますが、定義に従ってThunarが報告するシンボリックリンクの合計サイズは変わります。
答え2
デフォルトでは、ファイルマネージャはソフトリンクが指すファイルのサイズを取得しようとし、それらが指すファイルdu
のサイズではなくディレクトリとソフトリンク自体のサイズを提供します。
言う、
`du` -> size of directory + size of all the softlinks
`du -L` -> size of directory + size of all the files that the softlinks are pointing to.
これがあなたが要求しているかどうかはわかりませんが、もしそうなら、これはあなたの質問に答えることができると信じています。