Шукаю серію команд, які покажуть мені найбільші файли на диску.
Шукаю серію команд, які покажуть мені найбільші файли на диску.
Відповіді:
Якщо вам просто потрібно знайти великі файли, ви можете використовувати find
цей -size
параметр. Наступна команда перелічить усі файли розміром більше 10 Мбіб ( не плутати з 10 МБ ):
find / -size +10M -ls
Якщо ви хочете знайти файли між певним розміром, ви можете комбінувати його з пошуком "розмір нижче". Наступна команда знаходить файли між 10MiB та 12MiB:
find / -size +10M -size -12M -ls
apt-cache search 'disk usage'
перераховані деякі програми, доступні для аналізу використання диска. Один додаток, яке виглядає дуже перспективно gt5
.
З опису пакета:
Минули роки, а диски ставали все більшими та більшими, але навіть у цю неймовірно величезну епоху жорстких дисків простір ніби з часом зникає. Ця невелика та ефективна програма забезпечує зручніший перелік, ніж за замовчуванням (1). Він відображає те, що сталося з останнього запуску, і відображає розмір dir та загальний відсоток. Для навігації та підйому до каталогів можна використовувати клавіші курсору з текстовим браузером (посилання, посилання, рись тощо)
У розділі "пов'язані пакети" gt5 я знайшов ncdu
. З опису пакета:
Ncdu - це глядач на основі ncurses. Він забезпечує швидкий і простий у користуванні інтерфейс через відому утиліту du. Це дозволяє переглядати каталоги та показувати відсотки використання диска з бібліотекою ncurses.
-ls
виводу твердо кодується (див. вихідний код для функцій list_filepred_fls
та list_file ). Ви можете спробувати наблизити результат, використовуючи -printf
опцію, опрацювати вихід з awk або скористатися чимось на кшталтfind ... -type f -exec ls -ldh {} \; | column -t
Я просто використовую комбінацію du
та 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
Тоді це справа промивання та повторення . Націліть на підкаталоги, які, на вашу думку, занадто великі, запустіть команду для них і з’ясуйте, що викликає проблему.
Примітка: Я використовую du
"s -x
прапор , щоб тримати речі обмежується однією файлової системи (у мене досить складний механізм перехресного монтажу речей між SSD і RAID5).
Примітка 2: 2>/dev/null
перенаправляє будь-які повідомлення про помилки у забуття. Якщо вони вас не турбують, це не обов’язково.
du
головній сторінці: "Підсумуйте використання диска кожного файлу, рекурсивно для каталогів."
Моє улюблене рішення використовує поєднання кількох із цих хороших відповідей.
du -aBM 2>/dev/null | sort -nr | head -n 50 | more
du
аргументи:
-a
для "всіх" файлів і каталогів. Залиште це лише для каталогів-BM
для виведення розмірів у розмірах блоків мегабайт (M) (B)2>/dev/null
- виключити повідомлення про помилки "відмовлено у дозволі" (спасибі @Oli)sort
аргументи:
-n
для "числовий"-r
для "реверсу" (найбільший до найменшого)head
аргументи:
-n 50
за 50 найкращих результатів.more
якщо використовуєте меншу кількістьПримітка: Префікс sudo
для включення каталогів, на які ваш обліковий запис не має дозволу на доступ.
Приклад показує топ-10 найбільших файлів і каталогів у / var (включаючи велику кількість).
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
Відповідь qbi правильна, але вона буде дуже повільною, коли буде багато файлів, оскільки вона запустить новий процес ls для кожного елемента.
набагато швидшою версією з використанням пошуку без нерестування дочірніх процесів було б використання printf для друку розміру в байтах (% s) та шляху (% p)
find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries
Для відображення найбільших топ-20 каталогів (рекурсивно) у поточній папці використовуйте наступний однокласник:
du -ah . | sort -rh | head -20
або (більш орієнтований на Unix):
du -a . | sort -rn | head -20
Для топ-20 найбільших файлів у поточному каталозі (рекурсивно):
ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20
або з читаними для людини розмірами:
ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20
Зверніть увагу, що
-h
він доступнийsort
лише для GNU , тому для того, щоб він працював на OSX / BSD належним чином, вам потрібно встановити йогоcoreutils
. Потім додайте його папку у своюPATH
.
Тож ці псевдоніни корисно мати у своїх rc- файлах (кожного разу, коли вам це потрібно):
alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'
Це здається ідеальним додатком для find
:
find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5
Ця команда знайде всі файли в каталозі $DIRECTORY
та виконає ls -s
на них. Остання команда друкує виділений розмір файлу плюс ім'я файлу. Результат сортується за чисельністю та відображаються останні п’ять записів. Тому в результаті ви побачите найбільше 5 файлів у $DIRETORY
будь-якому підкаталозі. Якщо ви введете, tail -n 1
ви побачите лише найбільший файл.
Крім того, ви можете багато пограти find
. Наприклад, ви можете шукати файли, які не перевищують n днів ( -ctime -n
) або належать спеціальним користувачам ( -user johndoe
).
Коли мені потрібно зробити більше вільного місця на серверах, я використовую цю команду. Він знайде всі файли більше 50 Мб, а "du -h" покращить список файлів, а "сортувати -n" після труби скласти список числовим чином, відсортований за розміром файлу.
find / -size +50M -type f -exec du -h {} \; | sort -n
Спробуйте Baobab, він дає графічний огляд файлів і папок, ви можете побачити, де знаходяться справжні космічні свинки, і видалити їх одним натисканням https://help.ubuntu.com/community/Baobab
Ви також можете сортувати файли за розміром:
find . -type f -exec du -h {} \; | sort -k1 -h
Він знаходить лише файли та виконується du -h
для кожного файлу, де відображається розмір файлу. Нарешті, ми сортуємо вихід find
/ du
відповідно до першого стовпця (у читаному для людини форматі).
Останній надрукований файл є найбільшим.
За допомогою команди можна переглянути найбільші файли, пропускаючи каталоги:
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
Щоб знайти всі файли розміром більше 100 Мбіт (це не 100 МБ, дивіться тут, якщо ви плутаєтесь ):
find / -size +100M -ls
команда нижче відобразить найбільші 5 файлів у папці $DIRECTORY
:
find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5
ВИКОРИСТАННЯ du
: Команда, що використовується нижче, відображає каталоги з 20 найбільшими розмірами в домашній робочій папці:
sudo du -a /home | sort -n -r | head -n 20
Тепер, щоб зараз відобразити найбільші каталоги / файли, включаючи підпапки, запустіть:
du -Sh | sort -rh | head -n 10
Використання ls
:
Щоб перелічити 5 найбільших файлів у каталозі / bin, створіть команду нижче:
ls -lSh /bin | head -5
Ви також можете використовувати аналізатор використання диска або Baobao, як показано, наприклад, тут .
Чудовим, зручним для користувача інструментом, на який посилається у відповіді на подібне запитання, є NCurses Disk Usage
інструмент:
sudo ncdu /