Когда дело доходит до очистки жесткого диска в системах Linux, чтобы освободить место или стать более организованным, полезно определить, какие каталоги занимают больше всего места на диске.
В этом руководстве мы покажем вам, как составить список всех каталогов и отсортировать их по их общему размеру в Linux с помощью примеров командной строки или скрипта Bash.
Как вывести список каталогов по размеру с помощью командной строки
Утилиты командной строки df и du – два лучших инструмента, которые у нас есть для измерения потребления диска в системах Linux.
Для проверки использования диска по папкам особенно полезна команда du.
При запуске du без каких-либо дополнительных параметров имейте в виду, что он будет проверять общее использование диска в каждом подкаталоге индивидуально.
В зависимости от того, насколько глубока ваша структура папок, это может быть огромное количество каталогов, и ваш терминал будет засыпан большим количеством спама.
В следующем примере мы запустим du в каталоге, полном ISO-файлов Linux, но это только один каталог по глубине.
Мы добавим параметр -h (удобочитаемый), чтобы было легче увидеть, сколько пространства занимают эти каталоги.
$ du -h 11G ./AlmaLinux 671M ./Arch Linux 14G ./CentOS 349M ./Debian 1.9G ./Fedora 415M ./Gentoo 6.5G ./Kali Linux 9.4G ./Ubuntu 44G .
Мы видим, что папка AlmaLinux использует 11 ГБ, а папка Debian – только 349 МБ.
Общий объем всех этих папок составляет 44 ГБ, как указано в последней строке.
Посмотрим, что произойдет, если у нас будет более глубокая структура папок.
$ du -h 671M ./Arch Linux 6.5G ./Debian-based/Kali Linux 9.4G ./Debian-based/Ubuntu 17G ./Debian-based 415M ./Gentoo 11G ./RHEL-based/AlmaLinux 14G ./RHEL-based/CentOS 1.9G ./RHEL-based/Fedora 27G ./RHEL-based 44G .
Как видите, каталоги «Debian-based» и «RHEL-based» имеют два и три подкаталога соответственно.
Вывод дает нам довольно подробный взгляд на то, сколько места использует каждый подкаталог.
Если у вас есть глубокая структура, мы можем использовать флаг –max-depth = N, чтобы указать du, сколько подкаталогов он должен пройти.
$ du -h --max-depth=1 671M ./Arch Linux 17G ./Debian-based 415M ./Gentoo 27G ./RHEL-based 44G .
Чтобы отсортировать эти каталоги по размеру и упростить определение того, какие из них занимают больше всего места, мы можем передать нашу команду du утилите sort.
Если вы используете параметр -h для du, убедитесь, что вы также используете его для sort.
$ du -h | sort -h 415M ./Gentoo 671M ./Arch Linux 1.9G ./RHEL-based/Fedora 6.5G ./Debian-based/Kali Linux 9.4G ./Debian-based/Ubuntu 11G ./RHEL-based/AlmaLinux 14G ./RHEL-based/CentOS 17G ./Debian-based 27G ./RHEL-based 44G .
Или, чтобы ограничить количество рекурсивно просматриваемых каталогов:
$ du -h --max-depth=1 | sort -h 415M ./Gentoo 671M ./Arch Linux 17G ./Debian-based 27G ./RHEL-based 44G .
В этих примерах мы запускали du из текущего рабочего каталога.
Имейте в виду, что вы можете указать любой каталог с помощью рассматриваемой команды – вам не обязательно находиться в каталоге, который вы проверяете.
$ du -h /home/itisgood
Если вы попытаетесь запустить du в рутовом каталоге, чтобы увидеть пространство для хранения на всем диске, имейте в виду, что вам нужно выполнить эту команду с правами root, и вам следует перенаправить stderr в /dev/null, поскольку вы получите в вашем выводе много спама типа “permission denied”.
$ sudo du -h --max-depth=1 / | sort -h 2> /dev/null
Как вывести список 10 самых больших каталогов
Используя приведенные выше команды, даже небольшие каталоги будут перечислены в выходных данных команды du.
Однако во многих случаях вас могут интересовать только 10 крупнейших каталогов или какое-то их количество.
В этом случае мы можем передать наш вывод команде head, чтобы показать только самые большие каталоги.
Обратите внимание, что мы также используем команду tail, чтобы не выводить размер родительского каталога, который в данном случае не имеет значения.
Bash-скрипт для перечисления каталогов по размеру
Команд du и sort, а также параметров, которые мы рассмотрели, должно быть достаточно, чтобы помочь вам легко проверить использование диска по папкам.
Вместо того, чтобы запоминать эти различные параметры команд и вводить их каждый раз, мы можем немного облегчить себе жизнь, поместив все это в скрипт.
Следующий скрипт принимает 2 аргумента.
Первым аргументом будет имя каталога, в котором мы начнем поиск, а вторым аргументом будет количество каталогов, которые скрипт должен вывести.
#!/bin/bash if [ $# != 2 ]; then echo "Incorrect number of arguments !" >&2 echo "USAGE: sortdirbysize [DIRECTORY] <first n directories>" fi du -h --max-depth=1 $1 2> /dev/null | sort -hr | tail -n +2 | head -$2
А вот пример выполнения сценария скрипта из командной строки:
$ ./sort-dir-by-size.sh /home/linux 15