Kaldırmak ve boş alan açmak için büyük dosyalar / dizinler bulmak için komut satırı yolu nedir?


203

Bir sürücüdeki en büyük dosyaları gösterecek bir dizi komut mu arıyorsunuz?


Grafiksel bir şey iyi olur mu?
RolandiXor

5
hayır, komut satırında ssh üzerinden çalışıyor.
Ryan Detzel

Tuhaf olan, aynı şeyi çalıştıran iki sunucum var. Biri% 50 disk kullanımında, diğeri% 99'dur. Buna neyin sebep olduğunu bulamıyorum.
Ryan Detzel

Bu yüzden% 98 du birlikte kullanıldığında diyor, kafam karıştı ama gt5 app çalıştırdığınızda alıyorum: grab.by/9Vv2
Ryan Detzel

Yanıtlar:


276

Büyük dosyaları bulmanız gerekiyorsa, findbu -sizeseç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 ekran görüntüsü

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.

Ncdu ekran görüntüsü


3
Ncdu çok hızlı ve tam ihtiyacım olan şey, teşekkürler! Gt5'i de denedim, ancak sadece iptal etti çünkü geri bildirimde bulunmadan çok uzun süre "düşünüyor" idi
Lukas

7
Vay canına, ncdu harika, bulgularını paylaştığın için teşekkürler!
While-E

Ncdu'nun daha güçlü olduğunu belirtmek isterim . Arada bir ihtiyacım var ve adını hatırlayamıyorum.
Martin Thoma

Ncdu :) sayesinde komutları hatırlama yeter :)
Bay Coder

1
@ matt Hayır, çıkışın çıktı biçimi -lskodlanmış (kod listesinepred_fls ve list_file işlevlerine bakınız). -printfSeçeneği kullanarak çıktıyı tahmin etmeye çalışabilir , çıktıyı awk ile find ... -type f -exec ls -ldh {} \; | column -t
işlemden geçirebilir

33

Sadece duve 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 -xbir 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/nullHata mesajlarını unutulmaya yönlendirir. Seni rahatsız etmiyorlarsa, zorunlu değildir.


1
Bu komutu çalıştırdığımda du alt dizinlere iniyor. Gönderen duadam sayfası: "alt dizinlere Her dosyanın disk kullanımını özetler."
Jamie,

26

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çin
  • 2>/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.
  • moreDaha küçük bir sayı kullanıyorsanız bırakın

Not: sudoHesabı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

10

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


1
Bunun daha hızlı olduğunu onaylayın
Çerez

10

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 -hGNU sortiç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ın coreutils. Sonra klasörünü içine ekleyin PATH.

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'

8

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 $DIRECTORYve 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ı $DIRETORYveya alt dizinlerde görürsünüz . Eğer girerseniz tail -n 1sadece 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 .


5

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

1

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


2
Bu özel soruda OP bir komut satırı yöntemi tercih ediyor. Soruya gelen yorumları görün. Ben de soruyu düzenleyeceğim.

1

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

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

Ayrıca du'nun sahip olduğu --except seçeneğiyle de fantezi alabilirsiniz.


0

Ayrıca dosyaları boyuta göre sıralayabilirsiniz:

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

Yalnızca dosyaları bulur ve du -hdosyanın boyutunu gösteren her dosya için çalıştırır . Son olarak, find/ ' in çıktısını duilk sütuna göre (insan tarafından okunabilir biçimde) sıralarız.

Yazdırılan son dosya en büyüğüdür.


0

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.


0

Bir cevap başvurulan Büyük, kullanıcı dostu bir araçtır benzer soruya ise NCurses Disk Usagearacı:

sudo ncdu /

Dosya sisteminin kökünden başlamak, benim için anlamsız olanın tam tersiydi. Dosya sisteminin tamamında yer kazanmak için hedeflenecek en önemli yerleri belirlememe izin verdi. Ne olursa olsun, herhangi bir dizinde başlatmak için belirtilen kullanabilirsiniz. Bu araç için belgelere bakın. Ancak, istendiği gibi, kaynak cevabına bağlantı .
janoside
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.