Какой способ командной строки найти большие файлы / каталоги для удаления и освобождения места?

203

Ищу серию команд, которые покажут мне самые большие файлы на диске.

Райан Детцель
источник
Будет ли что-то графическое хорошо?
RolandiXor
5
Нет, работает в командной строке через SSH.
Райан Детцель
Что странно, у меня есть два сервера, на которых запущена одна и та же вещь. Один из них использует 50% диска, а другой - 99%. Я не могу найти причину этого.
Райан Детцель
Так что я в замешательстве, он говорит, что 98% использовали с du, но когда я запускаю приложение gt5, я получаю: grab.by/9Vv2
Райан Детцель

Ответы:

277

Если вам просто нужно найти большие файлы, вы можете использовать findэту -sizeопцию. Следующая команда выведет список всех файлов размером более 10 МБ ( не путать с 10 МБ ):

find / -size +10M -ls

Если вы хотите найти файлы определенного размера, вы можете объединить их с поиском «размер меньше чем». Следующая команда находит файлы от 10 МБ до 12 МБ:

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

apt-cache search 'disk usage'перечисляет некоторые программы, доступные для анализа использования диска. Одно приложение, которое выглядит очень перспективным gt5.

Из описания пакета:

Прошли годы, и диски становились все больше и больше, но даже в эту невероятно огромную эпоху жесткого диска пространство, похоже, со временем исчезает. Эта небольшая и эффективная программа обеспечивает более удобный листинг, чем стандартная функция du (1). Он отображает, что произошло с момента последнего запуска, а также отображает размер каталога и общий процент. Можно перемещаться по каталогам и подниматься по ним, используя клавиши курсора с текстовым браузером (ссылки, ссылки, рысь и т. Д.)

Скриншот gt5

В разделе «связанные пакеты» gt5 я нашел ncdu. Из описания упаковки:

Ncdu - это программа просмотра на основе ncurses. Он обеспечивает быстрый и простой в использовании интерфейс с помощью знаменитой утилиты du. Это позволяет просматривать каталоги и показывать процент использования диска с помощью библиотеки ncurses.

Снимок экрана ncdu

Lekensteyn
источник
3
ncdu очень быстрый и просто то, что мне нужно, спасибо! Я тоже попробовал gt5, но просто отменил его, потому что он слишком долго «думал» без каких-либо отзывов
Lukas
7
Черт возьми, ncdu потрясающе, спасибо, что поделились своими выводами!
Пока-E
Я был бы рад, если бы ncdu был отмечен сильнее. Мне это нужно время от времени, и я не могу вспомнить имя.
Мартин Тома
Достаточно запомнить команды благодаря ncdu :)
Мистер Кодер
1
@matt Нет, формат вывода для -lsвывода жестко закодирован (см. исходный код для функций pred_flsи функций list_file ). Вы можете попытаться аппроксимировать вывод, используя -printfопцию, find ... -type f -exec ls -ldh {} \; | column -t
постобработать
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
Дэн Кинг
источник
11

Чтобы отобразить самые большие топ-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'
kenorb
источник
10

Ответ qbi верен, но он будет очень медленным, когда файлов много, так как он начнет новый процесс ls для каждого элемента.

гораздо более быстрая версия, использующая поиск без порождения дочерних процессов, будет использовать printf для печати размера в байтах (% s) и пути (% p)

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

Kon
источник
1
Подтвердите, что это намного быстрее
Cookie
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).

QBi
источник
5

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

find / -size +50M -type f -exec du -h {} \; | sort -n
zorbon.cz
источник
1

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

Оливер Хоффманн
источник
2
В этом конкретном вопросе OP предпочитает метод командной строки. Смотрите комментарии к вопросу. Я тоже отредактирую вопрос.
1

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

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

Вы также можете полюбоваться с опцией --except, которую имеет du.

dermen
источник
0

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

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

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

Последний напечатанный файл - самый большой.

Peregring-лк
источник
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: Команда ниже, которая использует 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, как показано здесь, например.

Zezo
источник
0

Отличный, удобный инструмент, на который ссылаются в ответе на подобный вопрос, это NCurses Disk Usageинструмент:

sudo ncdu /
janoside
источник
Ну, начинать с корня файловой системы было совершенно противоположным бессмысленным для меня. Это позволило мне определить наиболее важные места для сохранения пространства во всей файловой системе. Независимо от того, вы можете использовать упомянутые для запуска в любом каталоге. Проверьте документы для этого инструмента. Но, как и просили, вот ссылка на источник ответа .
Janoside