シンボリックリンクの「サイズ」はls出力で何を表していますか?


11

例から始めましょう:

$ ls -l dir1
total 4
-rw-r--r-- 4 maythux maythux 1650 2008-01-10 16:33 file
lrwxrwxrwx 1 maythux maythux  7 2008-01-15 15:17 symfile -> file

symfile ファイルのシンボリックリンクです file

また、私が知っている1650ように、ファイルのサイズになりますfile7、サイズの列の下に配置されている数字は何ですか?

編集:実行中du

$ du -sh symfile
0   symfile

では、7がシンボリックリンクのサイズであることをどのように証明できますか?


更新:

これを試して

$ touch file
$ du -sh file
0 file
$ ls -l file
-rw-rw-r-- 1 maythux maythux 0 Jun  1 19:42 file

サイズもここでは0であることに注意してください。

今:

$ ln -s file sym
$ du -sh sym
0 sym
$ ls -l sym
lrwxrwxrwx 1 maythux maythux 4 Jun  1 19:44 sym -> file

なので、サイズだけじゃないかな


2
7ファイルシステム(そしておそらく他のパラメータ)に依存します。ext4では7ですが、btrfsでは13、tmpfsでは3になる可能性があります。
muru

1
これはサイズですが、サイズはファイルシステムによって異なります(btrfsはおそらくext4よりも多くのメタデータを格納し、ext4はtmpfsよりも多く格納します)。ディスクをリンクで埋めることができます。別のファイルシステムで別の番号が表示されても驚かないでください。
muru


1
ディレクトリエントリの最小サイズは、必要以上に大きくなっています。十分な数のエントリを作成すると、ディレクトリのサイズが増加します。確認してください:mkdir foo; ls -ld foo; for i in {1..1000}; do ln -s foo/bar foo/$i; done; ls -ld foo
muru

回答:


13

シンボリックリンクは、名前とターゲットに加えて、他のメタデータ用の数バイトを格納するのに必要なスペースを取ります。

つまり、シンボリックリンクのサイズです。

からのサイズについてdu -shdu 割り当てられているブロックの数のみを確認するため、0 statと表示される場合がありls -l、その点でサイズを表示するのに適しています。


では、なぜdu -sh symfile0を与えるのですか?–
Maythux

duは割り当てられているブロックの数のみを確認するため、0と表示される場合があります。statとls -lの方が賢明です。
Rinzwind 2015年

アップデートを読んでください
Maythux

私の答えを見てください:それは名前、ターゲット、そしていくつかのメタデータです。合計で7バイトになります。他のOSは他のメタデータを保存するため、サイズが異なります。
Rinzwind 2015年

質問は「どうやって証明できるの?」
Pilot6 2015年

5

これはバイト単位のシンボリックリンクのサイズです。

一部のファイルシステムでは、ファイルの先頭に使用されるディレクトリエントリ内に小さな領域があり、シンボリックリンクの処理が大幅に高速化さfileれ、ディレクトリエントリが大きくなりますが(読み取り)

symlinkの内容全体がディレクトリエントリに収まる場合、データブロックは割り当てられず、duサイズはゼロとして表示されます。シンボリックリンクが適合しない場合、スペースは通常割り当てられます(その結果、単一のブロック割り当てが行われますdu)。これは、テールマージを使用してファイルシステムによって最適化される場合があります(ただし、これについて知るためのAPIはありません)。

ext4ファイルシステムはシンボリックリンクだけのために、この最適化を行い、基準は、関数で発見されext4_inode_is_fast_symlink


一部のファイルシステム...」-この機能を備えた一般的なファイルシステム(および備えていない一般的なファイルシステム)をリストすると、回答が改善されます。
RM

1

これはバイト単位のシンボリックリンクファイルのサイズです。

Symlinkファイルは、それが指しているファイルの場所に関するデータを格納する通常のファイルです。ext 4では7バイトです。


何のサイズ?それはバイトまたはビットまたは何ですか?
Maythux

バイト単位のサイズ..
Pilot6

1
では、なぜdu -sh symfile0を与えるのですか?
Maythux

duは、非常に小さなファイルではプリサイズされません。約99バイトのファイルでduを使用してみてください。4.0Kと表示されます。
Pilot6、2015年

OSの概念では、このファイルのクラスターを登録しているため、シンボリックリンクでは少なくとも4kを表示する必要があります
Maythux
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.