Symlink'in “boyutu” ls çıktısında neyi temsil eder?


11

Örnek olarak başlayacağım:

$ 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 dosyanın bir sembolik bağlantısıdır file

Ayrıca bildiğim gibi 1650dosyanın boyutu olurdu file, ama 7boyut sütununun altına serilen sayı nedir?

EDIT: Koşu du:

$ du -sh symfile
0   symfile

Peki, 7'nin sembolik boyut olduğunu nasıl kanıtlayabilirsiniz ?!


GÜNCELLEME:

bunu dene

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

boyutun da 0 olduğunu unutmayın.

Şimdi:

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

Yani, sadece boyut değil


2
7Dosya sistemi (ve muhtemelen diğer parametreler) bağlıdır. Ext4'te 7, ancak btrfs'de 13 ve tmpfs'de 3 olabilir.
muru

1
Bu bir boyuttur, ancak boyut dosya sistemine bağlıdır (btrfs muhtemelen ext4'ten daha fazla meta veri ve tmpfs'den daha fazla ext4 depolar). Diskinizi linklerle doldurabilirsiniz. Sadece söylüyorum, farklı bir dosya sisteminde farklı bir sayı görürseniz şaşırmayın.
muru


1
Dizin girişinizin, gereksiniminden daha büyük bir boyutu vardır. Yeterli giriş yapın, dizinin boyutu artar. İle kontrol edin: mkdir foo; ls -ld foo; for i in {1..1000}; do ln -s foo/bar foo/$i; done; ls -ld foo.
muru

Yanıtlar:


13

Sembolik bağlantılar, adı ve hedefi ve diğer meta veriler için birkaç bayt depolamak için gereken alanı alır.

Yani sembolik bağlantının boyutudur.

Boyutu ile ilgili olarak du -sh: du sadece kaç blok tahsis edildiğine bakar ve bu nedenle 0 gösterebilir statve ls -lbu konuda boyutu göstermede daha iyidir.


o zaman neden du -sh symfile0 veriyor? -
Maythux

du sadece kaç tane blok tahsis edildiğine bakar ve böylece 0 gösterebilir. stat ve ls -l daha akıllıdır.
Rinzwind

Lütfen güncellemeyi okuyun
Maythux

Cevabımı görün: ad, hedef ve bazı meta veriler. Toplamda 7 bayt oluşturur. Diğer işletim sistemleri diğer meta verileri depolar ve böylece farklı bir boyuta sahip olurlar.
Rinzwind

Soru "Bunu nasıl kanıtlayabilirsiniz?"
Pilot6

5

Symlink'in bayt cinsinden boyutudur.

Bazı dosya sistemleri, dizin girdisinin içinde dosyanın başlangıcında kullanılan küçük bir alana sahiptir, bu da filedaha büyük dizin girdileri pahasına sembolik ve küçük okumaların işlenmesini önemli ölçüde hızlandırır .

Symlink içeriğinin tamamı dizin girişine uyuyorsa, veri bloğu tahsis edilmez ve duboyut sıfır olarak gösterilir. Symlink sığmıyorsa, alan normal olarak ayrılır (böylece tek bir blok ayırma ile sonuçlanırsınız), bu da kuyruk birleştirme kullanarak dosya sistemi tarafından optimize edilebilir (ancak dubunu bilmek için API yoktur ).

ext4Dosya sistemi sadece kriter fonksiyonu bulunan sembolik bağlar için bu optimizasyon gerçekleştirir ext4_inode_is_fast_symlink .


" Bazı dosya sistemleri ... " - bu özelliğe sahip ortak dosya sistemlerini (ve olmayan herhangi bir ortak sistemi) listelerseniz cevabınız geliştirilecektir.
RM

1

Symlink dosyasının bayt cinsinden boyutu.

Symlink dosyası, işaret ettiği dosyanın nerede olduğuna ilişkin verileri depolayan normal bir dosyadır. Dahili 4'te 7 bayttır.


boyutu ne? Bayt veya bit mi veya Ne?
Maythux

Bayt cinsinden boyut ..
Pilot6

1
o zaman neden du -sh symfile0 veriyor?
Maythux

du çok küçük dosyalar ile ödüllendirilmez. Du'u 99 baytlık bir dosyada kullanmayı deneyin. 4.0K gösterecektir.
Pilot6

Bu benim pioint de o zaman en azından symlink için 4k göstermelidir çünkü OS konseptinde bu dosya için bir küme
kaydediyor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.