Який спосіб командного рядка знайти великі файли / каталоги для видалення та звільнення місця?


202

Шукаю серію команд, які покажуть мені найбільші файли на диску.


Чи було б щось графічне?
RolandiXor

5
nope, працює в командному рядку над ssh.
Райан Детцель

Що дивно - у мене є два сервери, які працюють одне і те ж. Один при використанні диска 50%, а інший - 99%. Я не можу знайти, що це спричиняє.
Райан Детцель

Тож я плутаю, він говорить, що 98% використовується з du, але коли я запускаю додаток gt5, я отримую: grab.by/9Vv2
Ryan Detzel

Відповіді:


275

Якщо вам просто потрібно знайти великі файли, ви можете використовувати 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

У розділі "пов'язані пакети" gt5 я знайшов ncdu. З опису пакета:

Ncdu - це глядач на основі ncurses. Він забезпечує швидкий і простий у користуванні інтерфейс через відому утиліту du. Це дозволяє переглядати каталоги та показувати відсотки використання диска з бібліотекою ncurses.

Знімок екрана ncdu


3
ncdu дуже швидкий і саме те, що мені потрібно, дякую! Я теж спробував gt5, але просто скасував його, тому що "занадто довго" міркував без будь-яких відгуків
Лукас

7
Святе лайно, ncdu - це дивовижно, дякую за те, що поділилися своїми висновками!
Хоча-Е

Я б хотів, якби ncdu було вказано сильніше. Мені це потрібно раз у раз і не можу згадати ім'я.
Мартін Тома

Досить запам’ятати команди завдяки ncdu :)
Містер Кодер,

1
@matt Nope, формат виводу для -lsвиводу твердо кодується (див. вихідний код для функцій list_filepred_fls та list_file ). Ви можете спробувати наблизити результат, використовуючи -printfопцію, опрацювати вихід з awk або скористатися чимось на кшталтfind ... -type f -exec ls -ldh {} \; | column -t
Lekensteyn

33

Я просто використовую комбінацію 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перенаправляє будь-які повідомлення про помилки у забуття. Якщо вони вас не турбують, це не обов’язково.


1
Після запуску цієї команди du спускається в дочірні каталоги. На duголовній сторінці: "Підсумуйте використання диска кожного файлу, рекурсивно для каталогів."
Джеймі

26

Моє улюблене рішення використовує поєднання кількох із цих хороших відповідей.

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

10

Відповідь qbi правильна, але вона буде дуже повільною, коли буде багато файлів, оскільки вона запустить новий процес ls для кожного елемента.

набагато швидшою версією з використанням пошуку без нерестування дочірніх процесів було б використання printf для друку розміру в байтах (% s) та шляху (% p)

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


1
Підтвердьте, що це набагато швидше
Cookie

10

Для відображення найбільших топ-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'

8

Це здається ідеальним додатком для 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).


5

Коли мені потрібно зробити більше вільного місця на серверах, я використовую цю команду. Він знайде всі файли більше 50 Мб, а "du -h" покращить список файлів, а "сортувати -n" після труби скласти список числовим чином, відсортований за розміром файлу.

find / -size +50M -type f -exec du -h {} \; | sort -n

1

Спробуйте Baobab, він дає графічний огляд файлів і папок, ви можете побачити, де знаходяться справжні космічні свинки, і видалити їх одним натисканням https://help.ubuntu.com/community/Baobab


2
У цьому конкретному питанні ОП віддає перевагу методу командного рядка. Дивіться коментарі до питання. Я також відредагую питання.

1

Наприклад, щоб знайти всі файли GB, я б використав du та grep, хоча й інші згадані тут методи також здаються чудовими.

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

Ви також можете поцікавитись опцією --except, яку має du.


0

Ви також можете сортувати файли за розміром:

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

Він знаходить лише файли та виконується du -hдля кожного файлу, де відображається розмір файлу. Нарешті, ми сортуємо вихід find/ duвідповідно до першого стовпця (у читаному для людини форматі).

Останній надрукований файл є найбільшим.


0

За допомогою команди можна переглянути найбільші файли, пропускаючи каталоги:

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, як показано, наприклад, тут .


0

Чудовим, зручним для користувача інструментом, на який посилається у відповіді на подібне запитання, є NCurses Disk Usageінструмент:

sudo ncdu /

Що ж, починати в корені файлової системи було якраз протилежно безглуздо. Це дозволило мені визначити найважливіші місця націлювання для економії місця в цілій файловій системі. Незалежно від цього, ви можете використовувати згадане для запуску в будь-якому каталозі. Ознайомтеся з документами для цього інструменту. Але, як вимагається, ось посилання на відповідь джерела .
janoside
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.