Linux'ta Bir Dosya veya Dizinin Boyutu Nasıl Elde Edilir

Linux dukomutunu 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, lsdosya 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.

hexdumpBize 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  echoolarak, 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, dudosya 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 dubelirli 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 dukontrolü durdurur. Hiçbiri ayarlanmadıysa, duvarsayılan olarak 1.024 baytlık blok boyutuna ayarlanır  . Diğer bir deyişle, adlı bir ortam değişkeni POSIXLY_CORRECTayarlanmadıkça. Bu durumda, duvarsayı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 tune2fsprogramı kullanacağız . Daha sonra -l(süper grepbloğ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 sda1kullanmamı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, lsve  tune2fsneyi “blok” araçlarının farklı kavramlar olabilir. tune2fsUygulama sırasında, gerçek dosya sistemi blok boyutlarını raporlar  lsve duyapı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 duve tune2fs aynı anlamı taşır. tune2fsSonuç 4096 bayt, bir blok, ve dusonuç 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.

duFarklı Bir Dizinde Kullanmak

du Mevcut dizinden farklı bir dizine rapor vermek istiyorsanız  , dizinin yolunu komut satırından iletebilirsiniz:

du ~ / .cach / evrim /

duBelirli 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 -aseç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

duDizin 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 blockbir 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-sizeseçeneği kullanın:

du - görünen-boyut

-aHer 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-sizeseç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 --timeseç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, --blockseçeneğiyle deneyin du.