Linux'ta bir dosyanın fiziksel boyutunu nasıl edinebilirim?


12

ls -lBir dosyanın mantıksal boyutunu elde etmek için kullanabilirim , ancak bir dosyanın fiziksel boyutunu almanın bir yolu var mı?


Lütfen ne demek istediğinizi "fiziksel" boyuta göre tanımlayın.
Jörg W Mittag

Yanıtlar:


28

ls -ldosyanın görünür boyutunu verir, bu da bir programın dosyayı baştan sona okursa okuyacağı bayt sayısıdır. dusize "diskteki" dosyanın boyutunu verir.

Varsayılan olarak, dudosyanın boyutunu disk blokları olarak verir, ancak -hbunun yerine insan tarafından okunabilir bir birim almak için kullanabilirsiniz . duSisteminizle ilgili kılavuza da bakın .

GNU coreutil'lerle du(muhtemelen Linux'ta sahip olduğunuz şeydir) -bbayt almak için --apparent-sizeseçenek anlamına geldiğini unutmayın . Aslında diskte kullanılan bayt sayısını almak için kullanmak istediğiniz şey bu değildir. Bunun yerine --block-size=1veya kullanın -B 1.

GNU ile dosya üzerinde lsde yapabilirsiniz ls -s --block-size=1. Bu du -B 1, dosyayla aynı sayıyı verecektir .


Misal:

$ ls -l file
-rw-r--r--  1 myself wheel  536870912 Apr  8 11:44 file

$ ls -lh file
-rw-r--r--  1 myself wheel   512M Apr  8 11:44 file

$ du -h file
24K    file

$ du -B 1 file
24576   file

$ ls -s --block-size=1 file
24576 file

Bu, diskte yaklaşık 24 KB alan 512 MB bir dosya olduğu anlamına gelir. Bu seyrek bir dosyadır (çoğunlukla diske yazılmayan ancak dosyada mantıksal "delikler" olarak gösterilen sıfırlar). Önceden ayrılmış büyük dosyalar, örneğin sanal makineler için disk görüntüleri veya takas dosyaları vb. İle çalışırken seyrek dosyalar yaygındır. Seyrek bir dosya oluşturmak hızlıdır, sıfırlarla doldurmak yavaştır (ve gereksizdir).

fallocateLinux sisteminiz için el kitabına da bakınız .


bu durumda bu fark önemlidir? pratik bir örnek verebilir misin? şimdiden teşekkür ederim.
D'Arcy Nader

1
@ D'ArcyNader Güncellenmiş yanıtı görün.
Kusalananda

Bir şeyi yanlış anlarsam düzelt beni, ancak ilk cümle başka bir yol gibi görünüyor: stackoverflow.com/a/31437673/3701431 du ne kadar verinin gerçekten okunabileceğini lsgösterirken, disk sektörlerinin ne kadar tahsis edildiğini gösterir.
Sergiy Kolodyazhnyy

2
@SergiyKolodyazhnyy (geç cevap verdiğim için üzgünüm) Hayır, dugerçekte dosya tarafından kullanılan disk miktarını gösterirken , gösterilen görünür boyut (mantıksal boyut) lsbir programın kaç bayt okuyabileceğini gösterir. Dosya seyrekse, okunan bazı baytlar sıfır olur, ancak yine de bunları okuyan programa teslim edilir (diskten değil).
Kusalananda

Bu gerçekten iyi bir cevaptı.
Lizardx

3

Dosya boyutunu şöyle bayt cinsinden alıyorum:

actualsize=$(du -b "${file}" | cut -f 1)
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.