Linux Üzerinde du Çıktısını Boyuta Göre Sıralamak

Selamlar. Bu yazıda bugün kullandığım du komutundan aldığımız çıktıları büyükten küçüğe doğru nasıl sıralayacağımızı göstereceğim.

Bilmiyorsanız söyleyeyim du GNU Coreutils içerisinde geliyor. Yani terminalden baktığınızda buradaki komutlar sizde de çalışacaktır.

Human Readable Format

Kısacası insanlar baktığı zaman hmm bu böyleymiş diyebilecek şekilde çıktı veriyor ise human readable formattır. Aranızda ben byte byte görmek istiyorum diyen de vardır tabii 🙂

Normalde komut şöyle;

du -h

Bu komut bulunduğunuz dizinde klasör boyutlarını olduğu şekliyle sıralar. Yani herhangi boyutsal bir sıra yoktur aslında.

Eminim ki sunucularınızda böyle bir veriye erişmek isteyebilirsiniz. Bu gibi durumlarda sort komutunu pipe ile kullanarak büyükten küçüğe sıralayabilirsiniz;

du -h | sort -hr

Çıktı şöyle olacak;

1,7G    .
529M    ./vue-projeleri
407M    ./katkilar
243M    ./katkilar/frontend
228M    ./katkilar/frontend/node_modules
220M    ./react-ornekleri/hooks-ornek

Örneğin sunucunuzda birden fazla account var yani reseller gibi çalışıyorsunuz. Bu durumda tüm kullanıcıların dizininde tek tek bu komutu verebilirsiniz ya da basit bir iterasyonla durumu halledebilirsiniz. Öncelikle compgen komutunu kullanacağız diye küsmek yok 😛

users=$(compgen -u)

IFS=$'\n'
for user in $users
do
  du -h /home/$user/ | sort -hr > "/home/KAYIT_KULLANICISI/dosyalar/$user.txt"
done

Yukarıdaki basit shell scripti ile compgen -u ile dönen user aliasesları newline’a göre split ediyoruz. Böylelikle her newline bizim için bi account diyoruz. Aslında yok böyle bir şey çünkü yukarıdaki senaryo her zaman çalışmayabilir. Örneğin cPanel için aliaseslar da burada ama home’da yer almıyor olabilir.

Kısacası yukarıdaki komutla her kullanıcı için en büyük boyuttan en küçüğe doğru klasörleri listeleyip, ilgili dizine verilerini kullanıcı adını alan bir txt dosyasına kaydet diyoruz.

Bu bugün işime yaradı. Belki sizin de yarar umarım yarar açıkcası 🙂