Linux'ta Bir Dosya veya Dizinin Boyutu Nasıl Elde Edilir
Linux du
komutunu kullandığınızda, hem gerçek disk kullanımını hem de bir dosya veya dizinin gerçek boyutunu elde edersiniz. Bu değerlerin neden aynı olmadığını açıklayacağız.
Gerçek Disk Kullanımı ve Gerçek Boyut
Bir dosyanın boyutu ve sabit sürücünüzde kapladığı alan nadiren aynıdır. Disk alanı bloklar halinde tahsis edilir. Bir dosya bir bloktan daha küçükse, dosya sisteminde kullanılacak daha küçük bir gayrimenkul birimi olmadığından tüm bloğa yine de tahsis edilir.
Bir dosyanın boyutu tam olarak blok katları olmadığı sürece, sabit sürücüde kullandığı alan her zaman bir sonraki tam bloğa yuvarlanmalıdır. Örneğin, bir dosya iki bloktan büyük ancak üçten küçükse, onu depolamak için yine de üç blok alan gerekir.
Dosya boyutuna göre iki ölçüm kullanılır. İlki, dosyayı oluşturan içeriğin bayt sayısı olan dosyanın gerçek boyutudur. İkincisi, sabit diskteki dosyanın etkin boyutudur. Bu, o dosyayı depolamak için gereken dosya sistemi bloklarının sayısıdır.
Bir örnek
Basit bir örneğe bakalım. Küçük bir dosya oluşturmak için tek bir karakteri bir dosyaya yönlendireceğiz:
echo "1"> geek.txt
Şimdi, ls
dosya uzunluğuna bakmak için uzun biçim listesini kullanacağız :
ls -l geek.txt
Uzunluk, dave dave
girişleri takip eden iki bayt olan sayısal değerdir . Dosyaya sadece bir karakter gönderdiğimiz halde neden iki bayt oluyor? Dosyanın içinde neler olduğuna bir bakalım.
hexdump
Bize tam bir bayt sayısı verecek ve yazdırılmayan karakterleri onaltılık değerler olarak "görmemize" olanak tanıyan komutu kullanacağız . -C
Çıktıyı, çıktının gövdesinde onaltılık değerleri ve bunların alfanümerik karakter eşdeğerlerini göstermeye zorlamak için (kanonik) seçeneğini de kullanacağız :
hexdump -C geek.txt
Çıktı bize, dosyada 00000000 ofsetinden başlayarak, 31'in onaltılık değerini ve 0A'nın onaltılık değerini içeren bir bayt olduğunu gösterir. Çıktının sağ tarafı, bu değerleri mümkün olan her yerde alfanümerik karakterler olarak gösterir.
31'in onaltılık değeri, bir rakamı temsil etmek için kullanılır. 0A'nın onaltılık değeri, alfasayısal karakter olarak gösterilemeyen Satır Besleme karakterini temsil etmek için kullanılır, bu nedenle bunun yerine nokta (.) Olarak gösterilir. Satır Besleme karakteri ile eklenir echo
. Varsayılan echo
olarak, terminal penceresine yazması gereken metni görüntüledikten sonra yeni bir satır başlatır.
Bu ls
, iki baytlık dosya uzunluğundan gelen çıktıyla örtüşür ve bununla uyumludur.
İLGİLİ: Linux'ta Dosyaları ve Dizinleri Listelemek İçin ls Komutu Nasıl Kullanılır
Şimdi, du
dosya boyutuna bakmak için şu komutu kullanacağız :
du geek.txt
Boyutun dört olduğunu söylüyor, ama dört neyin?
Bloklar Var Sonra Bloklar Var
Ne zaman du
raporlar dosya bloklar halinde boyutları, kullandığı boyutu birçok faktöre bağlıdır. Komut satırında hangi blok boyutunu kullanması gerektiğini belirtebilirsiniz. Eğer zorlamak yoksa du
belirli bir blok boyutunu kullanmak, kullanmak için bir karar vermek bir dizi kural izler.
İlk olarak, aşağıdaki ortam değişkenlerini kontrol eder:
- DU_BLOCK_SIZE
- BLOK BOYUTU
- BLOK BOYUTU
Bunlardan herhangi biri varsa, blok boyutu ayarlanır ve du
kontrolü durdurur. Hiçbiri ayarlanmadıysa, du
varsayılan olarak 1.024 baytlık blok boyutuna ayarlanır . Diğer bir deyişle, adlı bir ortam değişkeni POSIXLY_CORRECT
ayarlanmadıkça. Bu durumda, du
varsayılan olarak blok boyutu 512 bayttır.
Peki hangisinin kullanıldığını nasıl öğreneceğiz? Çalışmak için her ortam değişkenini kontrol edebilirsiniz, ancak daha hızlı bir yol var. Sonuçları bunun yerine dosya sisteminin kullandığı blok boyutuyla karşılaştıralım.
Dosya sisteminin kullandığı blok boyutunu keşfetmek için tune2fs
programı kullanacağız . Daha sonra -l
(süper grep
bloğu listele) seçeneğini kullanacağız, çıktıyı yönlendireceğiz ve ardından "Engelle" kelimesini içeren satırları yazdıracağız.
Bu örnekte, ilk sabit sürücünün ilk bölümündeki dosya sistemine bakacağız ve sda1
kullanmamız gerekecek sudo
:
sudo tune2fs -l / dev / sda1 | grep Blok
Dosya sistemi blok boyutu 4.096 bayttır. Bunu du
(dörtten) aldığımız sonuca bölersek , du
varsayılan blok boyutunun 1.024 bayt olduğunu gösterir . Artık birkaç önemli şey biliyoruz.
İlk olarak, bir dosyayı depolamaya ayrılabilecek en küçük dosya sistemi gayrimenkulünün 4.096 bayt olduğunu biliyoruz. Bu, küçük, iki baytlık dosyamızın bile 4 KB sabit disk alanı kapladığı anlamına gelir.
Akılda tutulması gereken ikinci şey gibi sabit disk ve dosya sistemi istatistiklerine raporlama adanmış uygulamaları vardır du
, ls
ve tune2fs
neyi “blok” araçlarının farklı kavramlar olabilir. tune2fs
Uygulama sırasında, gerçek dosya sistemi blok boyutlarını raporlar ls
ve du
yapılandırılmış veya diğer blok boyutları kullanmak zorunda olabilir. Bu blok boyutlarının dosya sistemi blok boyutuyla ilişkili olması amaçlanmamıştır; onlar sadece bu komutların çıktılarında kullandıkları "parçalar".
Son olarak, farklı blok boyutları kullanmak dışında, gelen yanıtlar du
ve tune2fs
aynı anlamı taşır. tune2fs
Sonuç 4096 bayt, bir blok, ve du
sonuç 1.024 bayt dört blok oldu.
Kullanma du
Komut satırı parametreleri veya seçenekleri olmadan du
, geçerli dizinin ve tüm alt dizinlerin kullandığı toplam disk alanını listeler.
Bir örneğe bakalım:
du
Boyut, blok başına 1.024 baytlık varsayılan blok boyutunda bildirilir. Alt dizin ağacının tamamı geçilir.
du
Farklı Bir Dizinde Kullanmak
du
Mevcut dizinden farklı bir dizine rapor vermek istiyorsanız , dizinin yolunu komut satırından iletebilirsiniz:
du ~ / .cach / evrim /
du
Belirli Bir Dosyada Kullanmak
du
Belirli bir dosya hakkında rapor vermek istiyorsanız , komut satırında o dosyanın yolunu iletin. Ayrıca, aşağıdaki gibi bir dosya grubuna bir kabuk desenini de iletebilirsiniz *.txt
:
du ~ / .bash_aliases
Dizinlerdeki Dosyalarla İlgili Raporlama
Sahip olmak du
, geçerli dizinde ve alt dizinlerinde dosyalar üzerinde raporunu kullanmak -a
seçeneği (tüm dosyaları):
du -a
Her dizin için, her bir dizin için toplamın yanı sıra her dosyanın boyutu da rapor edilir.
Dizin Ağacı Derinliğini Sınırlandırma
du
Dizin ağacını belirli bir derinlikte listelemeyi söyleyebilirsiniz . Bunu yapmak için -d
(maksimum derinlik) seçeneğini kullanın ve parametre olarak bir derinlik değeri sağlayın. Tüm alt dizinlerin tarandığını ve rapor edilen toplamları hesaplamak için kullanıldığını, ancak hepsinin listelenmediğini unutmayın. Bir seviye maksimum dizin derinliği ayarlamak için şu komutu kullanın:
du -d 1
Çıktı, o alt dizinin geçerli dizindeki toplam boyutunu listeler ve ayrıca her biri için bir toplam sağlar.
Dizinleri bir seviye daha aşağıda listelemek için şu komutu kullanın:
du -d 2
Blok Boyutunu Ayarlama
Mevcut işlem için block
bir blok boyutu belirleme seçeneğini kullanabilirsiniz du
. Bir baytlık blok boyutu kullanmak için, dizinlerin ve dosyaların tam boyutlarını elde etmek için aşağıdaki komutu kullanın:
du --block = 1
Bir megabaytlık blok boyutu kullanmak istiyorsanız -m
, aşağıdakilerle aynı olan (megabayt) seçeneğini kullanabilirsiniz --block=1M
:
du -m
Dizinler ve dosyalar tarafından kullanılan disk alanına göre boyutların en uygun blok boyutunda bildirilmesini istiyorsanız, -h
(insan tarafından okunabilir) seçeneğini kullanın:
du -h
Dosyayı depolamak için kullanılan sabit sürücü alanı yerine dosyanın görünen boyutunu görmek için şu --apparent-size
seçeneği kullanın:
du - görünen-boyut
-a
Her dosyanın görünen boyutunu görmek için bunu (tümü) seçeneğiyle birleştirebilirsiniz :
du --apparent-size -a
Her dosya, görünen boyutuyla birlikte listelenir.
Yalnızca Toplamları Görüntüleme
du
Yalnızca dizinin toplamını bildirmek istiyorsanız , -s
(özetle) seçeneğini kullanın. Bunu, -h
(insan tarafından okunabilir) seçeneği gibi diğer seçeneklerle de birleştirebilirsiniz :
du -h -s
Burada, şu --apparent-size
seçenekle kullanacağız :
du --apparent-size -s
Değiştirme Sürelerini Görüntüleme
Oluşturma veya son değişiklik saatini ve tarihini görmek için şu --time
seçeneği kullanın:
du --time -d 2
Garip Sonuçlar?
du
Özellikle diğer komutların çıktılarına çapraz referans yaptığınızda garip sonuçlar görürseniz , bunun nedeni genellikle farklı komutların ayarlanabileceği farklı blok boyutlarından veya varsayılan değerlerinden kaynaklanır. Bunun nedeni, gerçek dosya boyutları ile bunları depolamak için gereken disk alanı arasındaki farklardan da kaynaklanıyor olabilir.
Diğer komutların çıktılarını eşleştirmeniz gerekiyorsa, --block
seçeneğiyle deneyin du
.