Mencari serangkaian perintah yang akan menunjukkan kepada saya file terbesar di drive.
Mencari serangkaian perintah yang akan menunjukkan kepada saya file terbesar di drive.
Jawaban:
Jika Anda hanya perlu menemukan file besar, Anda dapat menggunakan find
dengan -size
pilihan. 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.)
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.
-ls
output di-hardcode (lihat kode sumber untuk pred_fls
dan fungsi list_file ). Anda dapat mencoba memperkirakan output menggunakan -printf
opsi, post-proses output dengan awk, atau menggunakan sesuatu sepertifind ... -type f -exec ls -ldh {} \; | column -t
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 menurut Anda terlalu besar, jalankan perintah untuknya, dan Anda tahu apa penyebabnya.
Catatan: Saya menggunakan du
's -x
bendera 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/null
mengalihkan semua pesan kesalahan menjadi terlupakan. Jika mereka tidak mengganggu Anda, itu tidak wajib.
du
halaman manual: "Ringkas penggunaan disk masing-masing FILE, secara rekursif untuk direktori."
Solusi favorit saya menggunakan campuran dari beberapa jawaban bagus ini.
du -aBM 2>/dev/null | sort -nr | head -n 50 | more
du
argumen:
-a
untuk "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.more
jika menggunakan nomor yang lebih kecilCatatan: Awalan dengan sudo
untuk 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
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
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
-h
hanya tersedia untuk GNUsort
, jadi untuk membuatnya berfungsi pada OSX / BSD dengan benar, Anda harus menginstalnya daricoreutils
. Kemudian tambahkan foldernya ke dalamPATH
.
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'
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 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 $DIRETORY
atau subdirektori apa pun. Jika Anda memasukkan, tail -n 1
Anda 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
).
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
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
Anda juga dapat mengurutkan file berdasarkan ukuran:
find . -type f -exec du -h {} \; | sort -k1 -h
Itu hanya menemukan file dan mengeksekusi du -h
untuk setiap file, yang menunjukkan ukuran file. Terakhir, kami mengurutkan output dari find
/ du
menurut kolom pertama (dalam format yang dapat dibaca manusia).
File yang dicetak terakhir adalah yang terbesar.
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.
Alat hebat, ramah pengguna yang dirujuk dalam jawaban untuk pertanyaan serupa adalah NCurses Disk Usage
alat:
sudo ncdu /