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

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

Мы видим, что папка 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-based44G .

Как видите, каталоги «Debian-based» и «RHEL-based» имеют два и три подкаталога соответственно.

Вывод дает нам довольно подробный взгляд на то, сколько места использует каждый подкаталог.

Если у вас есть глубокая структура, мы можем использовать флаг –max-depth = N, чтобы указать du, сколько подкаталогов он должен пройти.

$ du -h —max-depth=1671M ./Arch Linux17G ./Debian-based415M ./Gentoo27G ./RHEL-based44G .

Чтобы отсортировать эти каталоги по размеру и упростить определение того, какие из них занимают больше всего места, мы можем передать нашу команду 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

Друзья помогите этому контенту стать доступнее в социальных сетях.

Не проходи мимо жмакни по кнопке возможно кому то еще он будет полезен!