Du -h ve ls -lh arasındaki fark nedir?


31

Her komut size farklı sonuçlar verdiğinden, dosyaların boyutunu okumanın doğru yolunun ne olduğunu kavramakta zorlanıyorum. Ayrıca http://forums.devshed.com/linux-help-33/du-and-ls-generating-inconsistent-file-sizes-42169.html adresinde bir yazıyla karşılaştım ;

du, dosya sisteminde bulunduğu dosyanın boyutunu verir. (IE her zaman size 1024 ile bölünebilir bir sonuç verecektir).

ls size dosyanın gerçek boyutunu verecektir.

Baktığınız şey, dosyanın gerçek boyutu ile diskteki boş alan miktarı arasındaki farktır. (ayrıca dosya sistemi verimliliği denir).

Dosya sisteminde bulunduğu ile filin gerçek boyutu arasındaki fark nedir?

Yanıtlar:


48

Buna boş alan denir :

Ayrı ayrı bit ve baytların üstündeki her bir soyutlama katmanı, bir veri dosyası, dosya sisteminin izleyebildiği en küçük veri biriminden daha küçük olduğunda boşa harcanır. Bir sektör, küme veya blok içindeki boşa harcanan bu alan genellikle boş alan olarak adlandırılır ve normalde ek verilerin depolanması için kullanılamaz. Bireysel 256 bayt sektörler için boşa harcanan azami alan 255 bayttır. 64 kilobayt kümeler için boşa harcanan azami 65.535 bayttır.

Öyleyse, dosya sisteminiz 64 KB birimlerinde alan ayırırsa ve 3 KB'lik bir dosya saklarsanız,

  • dosyanın gerçek boyutu 3 KB.
  • dosyanın yerleşik boyutu 64 KB'dir, ünitedeki kalan 61 KB başka bir dosyaya atanamaz ve bu nedenle kaybedilir.

Not : Bazı dosya sistemleri , aynı bloğa birden çok küçük dosya (veya büyük dosyaların kuyruk uçları) atayarak bu sorunu hafifletmeye yardımcı olan blok alt konumunu destekler .


1
Bu çok iyi bir açıklama.
SpacemanSpiff

1
@ Handyman5 - Teşekkürler Handyman5. Yani ls kullanarak bir dosya veya klasörün boyutuna bakarken du yerleşik boyutunu döndürürken gerçek boyutunu döndürür? Bu doğru mu? Peki, dosyanın boyutuna bakarken, en doğru olan yani yerleşik dosya boyutu veya dosya boyutu mu yoksa bu keyfi bir soru mu?
FıstıkMonkey

8
@PeanutsMonkey, hassasiyet, sahibinin gözündedir. ;-) Temel olarak, dosyanın başka bir yerde ne kadar yer kaplayacağından endişe ediyorsanız (ağ üzerinden kopyalama, bir zip dosyasına ekleme, harici bir sürücüye yedekleme vb.), O zaman gerçek boyut umrunda. Dosyanın şu anda yaşadığı sürücüde kalan alanla ilgileniyorsanız, yerleşik boyutu önemsersiniz. Yana dusize gösteriyor disk uadaçayı, geçerli sürücüde kapladığı bakıyor ve böylece bu size ikamet büyüklüğünü gösterir.
Tamirci5

1
@ Handyman5 - Neredeyse postadan bir yıl sonra ama yukarıdaki cevabın kullanıldığında ne kadar farklı olduğunu merak ediyorum df -h?
FıstıkMonkey

1
dfKalan blokların sayısını bildirir * dosya sistemi blok boyutu. Bu durumda du, kısmen kullanılmış bloklar bile tamamen tahsis edilmiş sayılır. dfTemelde statvfs'i çevirir , böylece neler olup bittiğiyle ilgili daha iyi bir fikir edinmek için bu sistem çağrısına bakabilirsiniz.
Tamirci5

19

Burada ele alınmayan başka bir seçenek var - seyrek dosyalar . Bu durumda, dubir basit kıyasla daha ufak gösterecektir ls -l, çünkü olur lsvarlık olarak dosyanın "boyutu" bildiriyor belirgin boyutu (sen sıfır bir sürü isteseydi, okuyabilir bayt sayısı) iken duirade Kullanılan gerçek disk bloğu sayısını kullanmaya devam edin.

Eğlenceli hile: Çok sayıda büyük seyrek dosya oluşturun, ardından arkadaşlarınızı ne kadar disk alanınızla etkileyin ("bak, yüksek gazillion 1 TB dosyaları sabit diskime depolarım!"). Tamam, belki o zaman eğlenceli değil.


6

Dosya sistemleri bloklardan oluşur. Dosyaların düzgünce bloklara sığması gerekmez. Bir dosya 1024 bayt olsaydı, ls cinsinden ve du 1024 olur. Eğer dosya boyutu 1025 ise, ls cinsinden 1025 ve du'da 2048 olur.

Yukarıdaki örnekte 1024 blok büyüklüğü varsayıldığına dikkat edin. Daha büyük blok boyutları günümüzde normdur e, g,

ls -l fred
-rw-r--r-- 1 iain users 1024 Jul 13 22:06 fred

du -h fred
8.0K    fred

0

Farklı olmalarının bir nedeni daha var. du -h, aynı dosyayı başka bir ad altında gördüğünde (sembolik bağlantıların aksine sabit linkler) bilir ve her dosyayı olduğu boyutta rapor eder, ancak yalnızca ortak ana dizine boyutu bir kez ekler.

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.