Apa itu cara baris perintah untuk menemukan file / direktori besar untuk dihapus dan membebaskan ruang?

203

Mencari serangkaian perintah yang akan menunjukkan kepada saya file terbesar di drive.

Ryan Detzel
sumber
Apakah sesuatu yang grafis akan baik-baik saja?
RolandiXor
5
tidak, berjalan di baris perintah di atas ssh.
Ryan Detzel
Yang aneh adalah saya memiliki dua server yang menjalankan hal yang sama. Satu di 50% penggunaan disk dan yang lainnya adalah 99%. Saya tidak dapat menemukan apa yang menyebabkan ini.
Ryan Detzel
Jadi saya bingung, katanya 98% digunakan dengan du tetapi ketika saya menjalankan aplikasi GT5 saya dapatkan: grab.by/9Vv2
Ryan Detzel

Jawaban:

277

Jika Anda hanya perlu menemukan file besar, Anda dapat menggunakan finddengan -sizepilihan. Perintah selanjutnya akan mencantumkan semua file yang lebih besar dari 10MiB ( jangan dikelirukan dengan 10MB ):

find / -size +10M -ls

Jika Anda ingin menemukan file di antara ukuran tertentu, Anda dapat menggabungkannya dengan pencarian "ukuran lebih rendah dari". Perintah selanjutnya menemukan file antara 10MiB dan 12MiB:

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

apt-cache search 'disk usage'daftar beberapa program yang tersedia untuk analisis penggunaan disk. Salah satu aplikasi yang terlihat sangat menjanjikan adalah gt5.

Dari deskripsi paket:

Bertahun-tahun telah berlalu dan disk telah menjadi lebih besar dan lebih besar, tetapi bahkan pada era harddisk yang sangat besar ini, ruang tampaknya menghilang seiring waktu. Program kecil dan efektif ini menyediakan daftar yang lebih nyaman daripada du default (1). Ini menampilkan apa yang telah terjadi sejak jalankan terakhir dan menampilkan ukuran dir dan persentase total. Dimungkinkan untuk menavigasi dan naik ke direktori dengan menggunakan tombol kursor dengan browser berbasis teks (tautan, elinks, lynx dll.)

Tangkapan layar gt5

Pada bagian "paket terkait" dari GT5 , saya temukan ncdu. Dari deskripsi paketnya:

Ncdu adalah du viewer berbasis ncurses. Ini menyediakan antarmuka yang cepat dan mudah digunakan melalui utilitas du yang terkenal. Hal ini memungkinkan untuk menelusuri direktori dan menunjukkan persentase penggunaan disk dengan pustaka ncurses.

Tangkapan layar ncdu

Lekensteyn
sumber
3
ncdu sangat cepat dan hanya apa yang saya butuhkan, terima kasih! Saya sudah mencoba GT5 juga, tetapi hanya membatalkannya karena "berpikir" terlalu lama tanpa umpan balik
Lukas
7
Sial, ncdu luar biasa, terima kasih telah berbagi temuan Anda!
While-E
Saya akan senang jika ncdu ditunjukkan lebih kuat. Saya membutuhkannya sesekali dan saya tidak dapat mengingat namanya.
Martin Thoma
Cukup mengingat perintah berkat ncdu :)
Mr Coder
1
@matt Tidak, format output untuk -lsoutput di-hardcode (lihat kode sumber untuk pred_flsdan fungsi list_file ). Anda dapat mencoba memperkirakan output menggunakan -printfopsi, post-proses output dengan awk, atau menggunakan sesuatu sepertifind ... -type f -exec ls -ldh {} \; | column -t
Lekensteyn
33

Saya hanya menggunakan kombinasi dudan 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

Maka itu adalah kasus bilas dan ulangi . Targetkan subdirektori yang menurut Anda terlalu besar, jalankan perintah untuknya, dan Anda tahu apa penyebabnya.

Catatan: Saya menggunakan du's -xbendera untuk menjaga hal-hal terbatas pada satu filesystem (saya memiliki cukup pengaturan yang rumit dari hal lintas dipasang antara SSD dan RAID5).

Catatan 2: 2>/dev/nullmengalihkan semua pesan kesalahan menjadi terlupakan. Jika mereka tidak mengganggu Anda, itu tidak wajib.

Oli
sumber
1
Ketika saya menjalankan perintah ini du turun ke direktori anak. Dari duhalaman manual: "Ringkas penggunaan disk masing-masing FILE, secara rekursif untuk direktori."
Jamie
26

Solusi favorit saya menggunakan campuran dari beberapa jawaban bagus ini.

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

du argumen:

  • -auntuk "semua" file dan direktori. Biarkan hanya untuk direktori saja
  • -BM untuk menghasilkan ukuran dalam ukuran blok megabyte (M) (B)
  • 2>/dev/null - kecualikan pesan kesalahan "izin ditolak" (terima kasih @Oli)

sort argumen:

  • -n untuk "numerik"
  • -r untuk "membalikkan" (terbesar ke terkecil)

head argumen:

  • -n 50 untuk hanya 50 hasil teratas.
  • Tinggalkan morejika menggunakan nomor yang lebih kecil

Catatan: Awalan dengan sudountuk memasukkan direktori yang akun Anda tidak memiliki izin untuk mengakses.

Contoh menampilkan 10 file dan direktori terbesar di / var (termasuk grand total).

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
Dan King
sumber
10

Jawaban qbi benar tetapi akan sangat lambat ketika ada banyak file karena akan memulai proses ls baru untuk setiap item.

versi yang jauh lebih cepat menggunakan find tanpa memunculkan proses anak adalah menggunakan printf untuk mencetak ukuran dalam byte (% s) dan path (% p)

find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries

kon
sumber
1
Konfirmasikan bahwa ini jauh lebih cepat
Cookie
10

Untuk menampilkan direktori top-20 terbesar (secara rekursif) di folder saat ini, gunakan one-liner berikut:

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

atau (lebih berorientasi Unix):

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

Untuk top-20 file terbesar di direktori saat ini (secara rekursif):

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

atau dengan ukuran yang dapat dibaca manusia:

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

Harap dicatat bahwa -hhanya tersedia untuk GNU sort, jadi untuk membuatnya berfungsi pada OSX / BSD dengan benar, Anda harus menginstalnya dari coreutils. Kemudian tambahkan foldernya ke dalam PATH.

Jadi alias-alias ini berguna untuk ada dalam file rc Anda (setiap kali Anda membutuhkannya):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'
kenorb
sumber
8

Ini sepertinya aplikasi yang sempurna untuk find:

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

Perintah ini akan menemukan semua file dalam direktori $DIRECTORYdan menjalankannya ls -s. Perintah terakhir mencetak ukuran file yang dialokasikan ditambah nama file. Hasilnya diurutkan secara numerik dan lima entri terakhir ditampilkan. Jadi, Anda akan melihat 5 file terbesar di $DIRETORYatau subdirektori apa pun. Jika Anda memasukkan, tail -n 1Anda hanya akan melihat file terbesar.

Selanjutnya Anda bisa bermain-main dengan banyak find. Misalnya, Anda dapat mencari file yang lebih muda dari n hari ( -ctime -n) atau milik pengguna khusus ( -user johndoe).

qbi
sumber
5

Ketika saya perlu membuat lebih banyak ruang kosong di server saya menggunakan perintah ini. Ia menemukan semua file lebih besar dari 50 MB dan "du-h" membuat daftar file yang lebih baik dan "sort -n" setelah pipa membuat daftar numerik diurutkan berdasarkan ukuran file.

find / -size +50M -type f -exec du -h {} \; | sort -n
zorbon.cz
sumber
1

Coba Baobab, ini memberi Anda gambaran grafis file dan folder, Anda dapat melihat di mana babi ruang nyata berada dan menghapusnya dengan satu klik https://help.ubuntu.com/community/Baobab

Oliver Hoffmann
sumber
2
Dalam pertanyaan khusus ini, OP lebih memilih metode baris perintah. Lihat komentar untuk pertanyaan itu. Saya akan mengedit pertanyaan juga.
1

Untuk menemukan semua file GB misalnya, saya akan menggunakan du dan grep, meskipun metode lain yang disebutkan di sini juga tampak hebat.

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

Anda juga bisa menyukai opsi --except yang dimiliki du.

dermen
sumber
0

Anda juga dapat mengurutkan file berdasarkan ukuran:

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

Itu hanya menemukan file dan mengeksekusi du -huntuk setiap file, yang menunjukkan ukuran file. Terakhir, kami mengurutkan output dari find/ dumenurut kolom pertama (dalam format yang dapat dibaca manusia).

File yang dicetak terakhir adalah yang terbesar.

Peregring-lk
sumber
0

Anda dapat menggunakan perintah untuk melihat file terbesar sambil melewatkan direktori:

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

Untuk menemukan semua file yang lebih besar dari 100MiB (ini bukan 100MB, lihat di sini jika Anda bingung):

find / -size +100M -ls

perintah di bawah ini akan menampilkan 5 file terbesar di folder $DIRECTORY:

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

MENGGUNAKAN du: Perintah di bawah ini yang menggunakan du, menampilkan direktori dengan 20 ukuran terbesar di folder kerja rumah:

sudo du -a /home | sort -n -r | head -n 20

Sekarang agar sekarang untuk menampilkan direktori / file terbesar termasuk sub-folder, jalankan:

du -Sh | sort -rh | head -n 10

Menggunakan ls:

Untuk daftar 5 file terbesar teratas di direktori / bin, jalankan perintah di bawah ini:

ls -lSh /bin | head -5

Anda juga dapat menggunakan Disk Usage Analyzer atau Baobao seperti yang ditunjukkan di sini sebagai contoh.

Zezo
sumber
0

Alat hebat, ramah pengguna yang dirujuk dalam jawaban untuk pertanyaan serupa adalah NCurses Disk Usagealat:

sudo ncdu /
janoside
sumber
Nah, mulai dari root filesystem itu justru kebalikan dari gunanya bagiku. Itu memungkinkan saya untuk mengidentifikasi tempat paling penting untuk ditargetkan untuk menghemat ruang di seluruh sistem file. Apapun, Anda dapat menggunakan yang disebutkan untuk memulai di direktori mana pun. Lihatlah dokumen untuk alat itu. Tetapi, seperti yang diminta, ini adalah tautan ke sumber jawaban .
janoside