🐧 Список всех каталогов и сортировка по размеру на Linux

by itisgood

Когда дело доходит до очистки жесткого диска в системах 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

You may also like

Leave a Comment