Pertanyaan Apa cara baris perintah untuk menemukan file / direktori besar untuk menghapus dan mengosongkan ruang?


Mencari serangkaian perintah yang akan menunjukkan file-file terbesar pada drive.


158
2018-04-20 14:01


asal


Apakah sesuatu grafis baik-baik saja? - RolandiXor♦
tidak, berjalan di baris perintah melalui ssh. - Ryan Detzel
Yang aneh adalah saya memiliki dua server yang menjalankan hal yang sama. Salah satunya adalah pada penggunaan disk 50% dan yang lainnya adalah 99%. Saya tidak dapat menemukan penyebabnya. - Ryan Detzel
Jadi saya bingung, itu mengatakan 98% digunakan dengan du tetapi ketika saya menjalankan aplikasi gt5 yang saya dapatkan: grab.by/9Vv2 - Ryan Detzel


Jawaban:


Jika Anda hanya perlu mencari file besar, Anda bisa menggunakannya find dengan -size pilihan. Perintah selanjutnya akan mencantumkan semua file yang lebih besar dari 10MiB (jangan bingung dengan 10MB):

find / -size +10M -ls

Jika Anda ingin mencari file di antara ukuran tertentu, Anda bisa 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:

Tahun telah berlalu dan disk 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 standar (1). Ini menampilkan apa yang telah terjadi sejak terakhir dijalankan dan menampilkan ukuran dir dan persentase total. Anda dapat menavigasi dan naik ke direktori dengan menggunakan tombol kursor dengan peramban berbasis teks (tautan, elinks, lynx, dll.)

Screenshot of gt5

Di bagian "paket terkait" dari gt5, Saya menemukan ncdu. Dari deskripsi paketnya:

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

Screenshot of ncdu


222
2018-04-20 14:16



ncdu sangat cepat dan hanya apa yang saya butuhkan, terima kasih! Saya sudah mencoba GT5 juga, tetapi hanya membatalkannya karena itu "berpikir" terlalu lama tanpa umpan balik - Lukas
Holy crap, ncdu luar biasa, terima kasih telah berbagi temuan Anda! - While-E
Saya akan suka jika ncdu ditunjukkan lebih kuat. Saya membutuhkannya sesekali dan saya tidak bisa mengingat namanya. - Martin Thoma


Saya hanya menggunakan kombinasi du dan 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 Anda anggap terlalu besar, jalankan perintah untuk mereka dan Anda mencari tahu apa yang menyebabkan masalah.

Catatan: Saya menggunakan du's -x flag untuk menjaga hal-hal terbatas pada satu filesystem (saya memiliki susunan yang rumit dari hal-hal lintas-mount antara SSD dan RAID5).

Catatan 2: 2>/dev/null mengalihkan semua pesan kesalahan ke dalam pelupaan. Jika mereka tidak mengganggu Anda, itu tidak wajib.


29
2018-04-20 14:30



Ketika saya menjalankan perintah du ini turun ke direktori anak. Dari du halaman manual: "Ringkas penggunaan disk dari masing-masing FILE, secara rekursif untuk direktori." - Jamie


Solusi favorit saya menggunakan campuran dari beberapa jawaban yang bagus ini.

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

du argumen:

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

sort argumen:

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

head argumen:

  • -n 50 hanya untuk 50 hasil teratas.
  • Berhenti more jika menggunakan angka yang lebih kecil

Catatan: Awalan dengan sudo untuk menyertakan 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

16
2017-07-03 23:24



cinta itu, terima kasih - electblake


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

versi yang lebih cepat menggunakan find tanpa proses pemijahan anak akan 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


8
2017-11-16 12:55



Konfirmasikan bahwa ini jauh lebih cepat - Cookie


Untuk menampilkan direktori top-20 terbesar (secara rekursif) di folder saat ini, gunakan satu baris 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 -h tersedia untuk GNU sort hanya, sehingga membuatnya bekerja pada OSX / BSD dengan benar, Anda harus menginstalnya dari coreutils. Kemudian tambahkan foldernya ke folder Anda PATH.

Jadi, alias ini berguna untuk dimiliki di Anda rc file (setiap saat ketika 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'

7
2018-03-05 14:17





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 $DIRECTORY dan eksekusi ls -s pada mereka. Perintah terakhir mencetak ukuran file yang dialokasikan ditambah namafile. Hasilnya diurutkan secara numerik dan dan lima entri terakhir ditampilkan. Jadi sebagai hasilnya Anda akan melihat 5 file terbesar di $DIRETORY atau subdirektori apa pun. Jika Anda masuk tail -n 1 Anda hanya akan melihat file terbesar.

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


6
2018-04-20 14:26





Ketika saya perlu membuat lebih banyak ruang kosong di server saya menggunakan perintah ini. Ini menemukan semua file yang 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

2
2017-10-11 20:40





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


1
2018-01-29 11:47



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


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 mendapatkan mewah dengan opsi - kecuali yang du.


1
2018-06-11 19:04





Anda juga bisa mengurutkan file berdasarkan ukuran:

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

Ia hanya menemukan file dan mengeksekusi du -h untuk setiap file, yang menunjukkan ukuran file. Terakhir, kami mengurutkan output find/du menurut kolom pertama (dalam format yang dapat dibaca manusia).

File tercetak terakhir adalah yang terbesar.


0
2017-09-08 12:28