Büyük dosyaları / dizinleri bulmak ve alan açmak için bir komut satırı yolu nedir?

158

Bana bir sürücüdeki en büyük dosyaları gösterecek bir dizi komut arıyoruz.

    
sordu Ryan Detzel 20.04.2011 16:01

10 cevap

221

Yalnızca büyük dosyaları bulmanız gerekiyorsa find 'yi -size seçeneği ile kullanabilirsiniz. Bir sonraki komut, 10MiB'den büyük tüm dosyaları listeleyecektir ( 10MB ile karıştırılmamalıdır ):

find / -size +10M -ls

Dosyaları belirli bir boyut arasında bulmak istiyorsanız, onu "boyutundan daha küçük" bir arama ile birleştirebilirsiniz. Bir sonraki komut, 10MiB ile 12MiB arasındaki dosyaları bulur:

find / -size +10M -size -12M -ls

apt-cache search 'disk usage' , disk kullanım analizi için kullanılabilen bazı programları listeler. Çok umut verici görünen bir uygulama gt5 .

Paket açıklamasından:

  

Yıllar geçti ve diskler daha büyük ve daha büyük hale geldi, ama bu inanılmaz derecede büyük harddisk çağında bile alan zamanla yok oluyor gibi görünüyor. Bu küçük ve etkili programlar, varsayılan du (1) 'den daha uygun bir liste sağlar. Son çalıştırmadan beri neler olduğunu gösterir ve dir büyüklüğünü ve toplam yüzdesini görüntüler. Metin tabanlı tarayıcı (link, elinks, lynx vb.) İle imleç tuşlarını kullanarak dizinlere gitmek ve çıkmak mümkün.

gt5 "İlişkili paketler" bölümünde ncdu bulundu. Paket açıklamasından:

  

Ncdu, ncurses tabanlı bir görüntüleyicidir. Ünlü du yardımcı programı ile hızlı ve kolay kullanımlı bir arayüz sağlar. Dizinlere göz atmanızı ve ncurses kütüphanesi ile disk kullanım yüzdelerini göstermeyi sağlar.

    
verilen cevap Lekensteyn 20.04.2011 16:16
29

Yalnızca du ve sort bir bileşimini kullanıyorum.

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

Sonra bir durulama ve tekrarlama durumu. Çok büyük olduğunu düşündüğünüz alt dizinleri hedefleyin, onlar için komutu çalıştırın ve sorunun nedenini anlayabilirsiniz.

Not: du 's -x bayrağını bir dosya sistemiyle sınırlı tutmak için kullanıyorum (SSD ve RAID5 arasında çapraz bağlanmış şeylerin oldukça karmaşık bir düzenlemesi var).

Not 2: 2>/dev/null , herhangi bir hata mesajını unutulmaya yönlendirir. Sizi rahatsız etmezlerse, bu zorunlu değildir.

    
verilen cevap Oli 20.04.2011 16:30
16

Favori çözümüm, bu iyi yanıtlardan birkaçının karışımını kullanıyor.

du -aBM 2>/dev/null | sort -nr | head -n 50 | more

du argüman:

  • "Tüm" dosyalar ve dizinler için -a . Sadece dizinler için açık bırak
  • Megabyte (M) blok boyutlarındaki (B) boyutların çıktılarını almak için -BM
  • 2>/dev/null - "izin reddedildi" hata iletilerini hariç tut (teşekkürler @Oli)

sort argüman:

  • "sayısal" için -n
  • "reverse" için -r (en küçüğünden en küçüğe)

head argüman:

  • En iyi 50 sonuç için -n 50 .
  • Daha küçük bir sayı kullanılıyorsa more 'i bırakın

Not: Hesabınızın erişim izni olmayan dizinleri içermek için sudo ile önek.

Örnek, en büyük 10 dosya ve dizini / var (büyük 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
    
verilen cevap Dan King 04.07.2015 01:24
8

qbi'nin cevabı doğrudur, ancak her öğe için yeni bir ls sürecine başlayacağından çok fazla dosya olduğunda çok yavaş olacaktır.

yumurtlamayan çocuk süreçleri olmadan bulmayı kullanan ç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

    
verilen cevap kon 16.11.2011 13:55
7

Geçerli klasördeki en büyük en üst 20 dizini (yinelemeli olarak) görüntülemek için, aşağıdaki tek lineli kullanın:

du -ah . | sort -rh | head -20

veya (daha fazla Unix yönlendirmeli):

du -a . | sort -rn | head -20

Geçerli dizindeki en büyük 20 dosya için (yinelemeli olarak):

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

veya insan tarafından okunabilir boyutları:

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20
  

Lütfen -h 'si sadece GNU sort için mevcut olduğundan, OSX / BSD üzerinde düzgün bir şekilde çalışması için coreutils ' den yüklemeniz gerektiğini unutmayın. Ardından, klasörünü PATH dosyanıza ekleyin.

Dolayısıyla, bu takma adlar rc dosyalarınızda (her ihtiyaç duyduğunuzda) sahip olmak için kullanışlı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'
    
verilen cevap kenorb 05.03.2015 15:17
6

Bu, find için mükemmel bir uygulama gibi görünüyor:

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

Bu komut, $DIRECTORY dizinindeki tüm dosyaları bulur ve bunlarda ls -s yürütü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, $DIRETORY veya herhangi bir alt dizinde en büyük 5 dosyayı göreceksiniz. % Co_de% değerini girerseniz yalnızca en büyük dosyayı görürsünüz.

Ayrıca, tail -n 1 ile çok fazla oynayabilirsiniz. Örneğin, n günlerden ( find ) daha küçük olan veya özel kullanıcılara ait olan dosyaları ( -ctime -n ) arayabilirsiniz.

    
verilen cevap qbi 20.04.2011 16:26
2

Sunucularda daha fazla boş alan yapmam gerektiğinde, bu komutu kullanıyorum. Daha sonra tüm dosyaları 50 MB daha büyük ve "du -h" dosyaları daha iyi bir liste haline getirin ve dosya boyutu ile sıralanmış boru numericcaly yaptıktan sonra "sort -n" yazın.

find / -size +50M -type f -exec du -h {} \; | sort -n
    
verilen cevap zorbon.cz 11.10.2014 22:40
1

Baobab'ı deneyin, dosya ve klasörlerin grafiksel bir görünümünü verir, gerçek alanların nerede olduğunu görebilir ve tek tıklamayla silebilirsiniz. İşte

    
verilen cevap Oliver Hoffmann 29.01.2013 12:47
1

Örneğin tüm GB dosyalarını bulmak için du ve grep kullanırdım, ancak burada bahsedilen diğer yöntemler de harika görünüyor.

du -h -a /dir | grep "[0-9]G\b"  

Ayrıca, sahip olduğu --except seçeneğiyle de süslü olabilirsiniz.

    
verilen cevap dermen 11.06.2013 21:04
0

Dosyaları ayrıca boyuta göre de sıralayabilirsiniz:

find . -type f -exec du -h {} \; | sort -k1 -h

Yalnızca dosya bulur ve dosyanın boyutunu gösteren her dosya için du -h yürütür. Son olarak, ilk sütuna (insan tarafından okunabilir formatta) göre find / du çıktısını sıralarız.

Son yazdırılan dosya en büyük olanıdır.

    
verilen cevap Peregring-lk 08.09.2016 14:28

Etiketlerdeki diğer soruları oku