Программы
Как найти самые большие папки и файлы в Linux

Как найти самые большие папки и файлы в Linux

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

Сегодня мы займёмся поиском "толстяков" на файловой системе. И сделаем это аж двумя разными способами. В принципе, мы можем обойтись и одним... Но двумя абсолютно разными всё же интереснее!

Изображение Выучи 10 хороших привычек для работы в UNIX от IBM

Узнать самые большие директории / папки с помощью du

Во многих Unix системах (а среди них, например, Linux, MacOS, FreeBSD) присутствует утилита du, которая так и расшифровывается - dusk usage - использование диска. Её и логичнее всего запустить для поиска больших директорий или, если вам привычнее, папок.

du -sh /path/

Где ключи "-sh" означают: только директории в указанной, а также - в человеко-читаемом виде. То есть просим рассказать о размерах директорий только на 1 уровень вглубь. Это удобно, когда мы хотим примерно представить, где у нас обирают самые большие файлы. Можно и убрать ключ "s" и увидеть информацию по всем папкам, но листинг будет довольно большим.

Дальше, если вы приметили, в какой директории хотите конкретно покопаться:

du -ah /path/to/folder

С ключом "a" du выведет информацию и о файлах, и о папках. Всё это можно чуть-чуть улучшить. Например, вывести топ-10 самых больших папок (дабы не рыться в списке):

du -hs */ | sort -rh | head -10

du нам отдаст список всех директорий с их размером, sort отсортирует всё в обратном порядке (от большого к малому) с учётом, что 1Gb больше 10Mb, ну а head отдаст 10 верхних записей - то есть как раз наши топ-10 файлов по размеру.

Аналогично можно поменять ключ "s" на "a" - будет список вперемешку: файлы и папки.

Поиск самых больших файлов с помощью утилиты ls

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

Так что нам осталось только подготовить список файлов, среди которых мы будем искать самые большие. Для этого используем команду find, которая и умеет искать рекурсивно файлы на нашей файловой системе. Особо требований у нас нет - просто файлы (без директорий/блоковых устройств/сокетов и прочих файлов в общем смысле Unix).

find . -type f -print

И вот у нас есть уже список всех файлов, которые можно найти из текущей директории. Теперь нужно их передать на вход ls с помощью команды xargs, а результат отсортировать по 5-му столбцу (где и указан размер файла). Ну и head для того, чтобы листинг не был громоздким:

find . -type f -print \
| xargs ls -l \
| sort -r -n -k 5,5 \
| head -10

Вот так, комбинируя различные команды Unix, мы получили довольно занятные "программы" для поиска самых больших файлов на нашем жёстком диске.