Bir sürücüdeki en büyük dosyaları gösterecek bir dizi komut mu arıyorsunuz?
Bir sürücüdeki en büyük dosyaları gösterecek bir dizi komut mu arıyorsunuz?
Yanıtlar:
Büyük dosyaları bulmanız gerekiyorsa, find
bu -size
seçeneği kullanabilirsiniz . Bir sonraki komut 10MiB'den büyük tüm dosyaları listeler ( 10MB ile karıştırılmamalıdır ):
find / -size +10M -ls
Belli bir boyut arasında dosya bulmak istiyorsanız, onu "boyuttan küçük" bir arama ile birleştirebilirsiniz. Bir sonraki komut 10MiB ve 12MiB arasındaki dosyaları bulur:
find / -size +10M -size -12M -ls
apt-cache search 'disk usage'
Disk kullanım analizi için mevcut bazı programları listeler. Çok umut verici görünen bir uygulama gt5
.
Paket açıklamasından:
Yıllar geçti ve diskler büyüdü ve büyüdü, ama bu inanılmaz büyük harddisk çağında bile, alan zamanla yok oluyor. Bu küçük ve etkili programlar, varsayılan du'dan (1) daha uygun liste sağlar. Son çalıştırmadan beri ne olduğunu ve dir boyutunu ve toplam yüzdeyi gösterir. Metin tabanlı tarayıcı ile imleç tuşları kullanarak gezinmek ve dizinlere çıkmak mümkündür (bağlantılar, bağlantılar, vaşak vb.)
Gt5'in "ilgili paketler" bölümünde buldum ncdu
. Paket açıklamasından:
Ncdu, ncurses tabanlı bir du viewer. Ünlü du yardımcı programı ile hızlı ve kullanımı kolay bir arayüz sağlar. Dizinleri taramanıza ve ncurses kütüphanesi ile disk kullanım yüzdelerini göstermenize izin verir.
-ls
kodlanmış (kod listesinepred_fls
ve list_file işlevlerine bakınız). -printf
Seçeneği kullanarak çıktıyı tahmin etmeye çalışabilir , çıktıyı awk ile find ... -type f -exec ls -ldh {} \; | column -t
Sadece du
ve bir kombinasyonunu kullanıyorum sort
.
sudo du -sx /* 2>/dev/null | sort -n
0 /cdrom
0 /initrd.img
0 /lib64
0 /proc
0 /sys
0 /vmlinuz
4 /lost+found
4 /mnt
4 /nonexistent
4 /selinux
8 /export
36 /media
56 /scratchbox
200 /srv
804 /dev
4884 /root
8052 /bin
8600 /tmp
9136 /sbin
11888 /lib32
23100 /etc
66480 /boot
501072 /web
514516 /lib
984492 /opt
3503984 /var
7956192 /usr
74235656 /home
O zaman durulama ve tekrarlama vakası . Çok büyük olduğunu düşündüğünüz alt dizinleri hedefleyin, onlar için komutu çalıştırın ve soruna neyin neden olduğunu öğrenin.
Not: Kullandığım du
'ın -x
bir dosya sistemi (Ben SSD ve RAID5 arasında çapraz monte şeylerin oldukça karmaşık bir düzenleme var) ile sınırlı tutmak için bayrağı.
Not 2: 2>/dev/null
Hata mesajlarını unutulmaya yönlendirir. Seni rahatsız etmiyorlarsa, zorunlu değildir.
du
adam sayfası: "alt dizinlere Her dosyanın disk kullanımını özetler."
En sevdiğim çözüm, bu iyi cevapların birkaçından bir karışımını kullanıyor.
du -aBM 2>/dev/null | sort -nr | head -n 50 | more
du
argümanlar:
-a
"tüm" dosyalar ve dizinler için. Sadece dizinler için bırak-BM
Boyutları megabayt (M) blok boyutlarında (B) çıkarmak için2>/dev/null
- "izin reddedildi" hata iletilerini hariç tutun (thanks @Oli)sort
argümanlar:
-n
"sayısal" için-r
"geri" için (en büyüğünden en küçüğüne)head
argümanlar:
-n 50
sadece en iyi 50 sonuç için.more
Daha küçük bir sayı kullanıyorsanız bırakınNot: sudo
Hesabınızın erişim iznine sahip olmadığı dizinleri içeren bir önek .
/ Var içindeki en büyük 10 dosyayı ve dizini gösteren örnek (genel toplam dahil).
cd /var
sudo du -aBM 2>/dev/null | sort -nr | head -n 10
7555M .
6794M ./lib
5902M ./lib/mysql
3987M ./lib/mysql/my_database_dir
1825M ./lib/mysql/my_database_dir/a_big_table.ibd
997M ./lib/mysql/my_database_dir/another_big_table.ibd
657M ./log
629M ./log/apache2
587M ./log/apache2/ssl_access.log
273M ./cache
qbi'nin cevabı doğrudur, ancak her öğe için yeni bir ls işlemi başlatacağı için çok fazla dosya olduğunda çok yavaş olacaktır.
Alt süreçler oluşturmadan bulma işlemini kullanarak çok daha hızlı bir sürüm boyutu bayt (% s) ve yol (% p) olarak yazdırmak için printf kullanmak olacaktır.
find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries
Geçerli klasördeki en büyük 20 dizini (tekrarlı olarak) görüntülemek için aşağıdaki tek astarı kullanın:
du -ah . | sort -rh | head -20
veya (daha fazla Unix odaklı):
du -a . | sort -rn | head -20
Geçerli dizindeki en büyük 20 dosya için (tekrarlı olarak):
ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20
veya okunabilir boyutlarda:
ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20
Lütfen sadece
-h
GNUsort
için uygun olduğunu, dolayısıyla OSX / BSD'de düzgün çalışmasını sağlamak için kurmanız gerektiğini unutmayıncoreutils
. Sonra klasörünü içine ekleyinPATH
.
Bu yüzden bu takma adlar, rc dosyalarınızda (her ihtiyacınız olduğunda) kullanmanız için yararlıdır :
alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'
Bu için mükemmel bir uygulama gibi görünüyor find
:
find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5
Bu komut tüm dosyaları dizinde bulacak $DIRECTORY
ve ls -s
üzerinde çalışacaktır. Son komut, bir dosyanın ayrılan boyutunu artı dosya adını yazdırır. Sonuç sayısal olarak sıralanır ve son beş giriş gösterilir. Sonuç olarak, en büyük 5 dosyayı $DIRETORY
veya alt dizinlerde görürsünüz . Eğer girerseniz tail -n 1
sadece büyük dosya görürsünüz.
Dahası ile çok oynayabilirsiniz find
. Örneğin, n günden ( -ctime -n
) küçük ( ) veya özel kullanıcılara ( -user johndoe
) ait dosyaları arayabilirsiniz .
Sunucularda daha fazla boş alana ihtiyaç duyduğumda bu komutu kullanıyorum. 50 MB'tan sonra tüm dosyaları daha büyük bulur ve "du -h" daha iyi dosya listesi yapar ve "sort -n" ifadesinden sonra, boru dosya boyutuna göre sıralanır.
find / -size +50M -type f -exec du -h {} \; | sort -n
Baobab'ı deneyin, dosyalara ve klasörlere grafiksel bir genel bakış sağlar, gerçek uzay domuzlarının nerede olduğunu görebilir ve tek bir tıklamayla bunları silebilirsiniz https://help.ubuntu.com/community/Baobab
Ayrıca dosyaları boyuta göre sıralayabilirsiniz:
find . -type f -exec du -h {} \; | sort -k1 -h
Yalnızca dosyaları bulur ve du -h
dosyanın boyutunu gösteren her dosya için çalıştırır . Son olarak, find
/ ' in çıktısını du
ilk sütuna göre (insan tarafından okunabilir biçimde) sıralarız.
Yazdırılan son dosya en büyüğüdür.
Dizinleri atlarken en büyük dosyaları görmek için bu komutu kullanabilirsiniz:
sudo find / -type f -printf “%s\t%p\n” | sort -n | tail -1
find $HOME -type f -printf ‘%s %p\n’ | sort -nr | head -10
100MiB'den daha büyük olan tüm dosyaları bulmak için (bu 100 MB değildir , kafanız karışmışsa buraya bakınız ):
find / -size +100M -ls
aşağıdaki komut klasördeki en büyük 5 dosyayı gösterecektir $DIRECTORY
:
find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5
KULLANMA du
: Aşağıdaki komutu kullanan du, evdeki çalışma klasöründeki en büyük 20 boydaki dizinleri görüntüler:
sudo du -a /home | sort -n -r | head -n 20
Şimdi alt klasörler dahil en büyük dizinleri / dosyaları görüntülemek için şu komutu çalıştırın:
du -Sh | sort -rh | head -n 10
Kullanarak ls
:
/ Bin dizinindeki en büyük 5 dosyayı listelemek için aşağıdaki komutu verin:
ls -lSh /bin | head -5
Örneğin Disk Gösterme Analizcisini veya Baobao'yu da burada gösterildiği gibi kullanabilirsiniz.
Bir cevap başvurulan Büyük, kullanıcı dostu bir araçtır benzer soruya ise NCurses Disk Usage
aracı:
sudo ncdu /