Bash Советы - Bash Scripting | Linux Terminal & Shell. Скрипты и Автоматизация задач. Командная строка для Sysadmin и DevOps. Уроки Баш, Zsh и CLI Tools. Unix Console.
← К каналу

📈Скрипт показывает, какие каталоги выросли с прошлого запуска Скрипт ниже делает снимок размеров каталогов (через du), а при следующем запуске покажет…

📈Скрипт показывает, какие каталоги выросли с прошлого запуска

Скрипт ниже делает снимок размеров каталогов (через du), а при следующем запуске покажет топ приростов - кто вырос и на сколько.

#!/usr/bin/env bash
# автор: https://t.me/bash_srv

set -Eeuo pipefail

usage() {
cat <<'HELP'
Usage: du-delta.sh [-p PATH] [-d DEPTH] [-n TOP] [-t THRESH] [-s STATE_DIR]
-p PATH Корень анализа (по умолчанию /)
-d DEPTH Глубина du (по умолчанию 2)
-n TOP Сколько строк показать (по умолчанию 15)
-t THRESH Порог роста (например 100M, 1G; по умолчанию 100M)
-s STATE_DIR Директория состояния (по умолчанию /var/lib/du-delta)
-h Помощь
Прим.: требуются права на чтение анализируемых каталогов.
HELP
}

PATH_TO="/"
DEPTH=2
TOP=15
THRESH="100M"
STATE_DIR="/var/lib/du-delta"

while getopts ":p:d:n:t:s:h" opt; do
case "$opt" in
p) PATH_TO="$OPTARG" ;;
d) DEPTH="$OPTARG" ;;
n) TOP="$OPTARG" ;;
t) THRESH="$OPTARG" ;;
s) STATE_DIR="$OPTARG" ;;
h) usage; exit 0 ;;
\?) echo "Неизвестный параметр: -$OPTARG" >&2; usage; exit 1 ;;
:) echo "Параметру -$OPTARG нужно значение" >&2; exit 1 ;;
esac
done

to_bytes() {
local v="$1"
if command -v numfmt >/dev/null 2>&1; then
numfmt --from=iec "$v"
else
awk -v s="$v" 'BEGIN{
n=s; sub(/[KkMmGgTtPp][Bb]?$/,"",n);
u=""; if (match(s,/[KkMmGgTtPp]/)) u=substr(s,RSTART,1);
m=1; if(u=="K"||u=="k") m=1024;
else if(u=="M"||u=="m") m=1024^2;
else if(u=="G"||u=="g") m=1024^3;
else if(u=="T"||u=="t") m=1024^4;
else if(u=="P"||u=="p") m=1024^5;
printf "%d", n*m
}'
fi
}

human() {
local b="$1"
if command -v numfmt >/dev/null 2>&1; then
numfmt --to=iec --suffix=B "$b"
else
awk -v b="$b" 'function h(x, a,i){
split("B KiB MiB GiB TiB PiB",a," ");
for(i=1; x>=1024 && i<6; i++) x/=1024;
return sprintf("%.1f %s", x, a[i])
} BEGIN{print h(b)}'
fi
}

# Определяем совместимый ключ глубины для du
if du -d 0 / >/dev/null 2>&1; then
DU_DEPTH=(-d "$DEPTH")
else
DU_DEPTH=(--max-depth="$DEPTH")
fi

mkdir -p "$STATE_DIR"
chmod 700 "$STATE_DIR"

# Имя снапшота зависит от пути и глубины
safe_name="$(echo "$PATH_TO" | sed 's|/|_|g; s|^_$|root|')_d${DEPTH}.tsv"
SNAP_FILE="$STATE_DIR/$safe_name"

tmp_cur="$(mktemp)"
trap 'rm -f "$tmp_cur"' EXIT

# Снимок текущих размеров: "path \t bytes"
# -B1: байты, -x: не вылезать на другие ФС, --apparent-size: по желанию (коммент ниже)
# Уберите --apparent-size, если хотите считать выделенные блоки, а не логический размер.
du -B1 "${DU_DEPTH[@]}" -x --apparent-size "$PATH_TO" 2>/dev/null \
| awk 'BEGIN{OFS="\t"} {sz=$1; $1=""; sub(/^[ \t]+/,""); print $0, sz}' \
| sort -k1,1 > "$tmp_cur"

# Если есть предыдущий снимок — считаем дельты
THRESH_BYTES="$(to_bytes "$THRESH")"
printf "📈 Топ %d приростов в %s (глубина %d, порог %s):\n" \
"$TOP" "$PATH_TO" "$DEPTH" "$THRESH"

if [[ -s "$SNAP_FILE" ]]; then
awk -F'\t' -v th="$THRESH_BYTES" '
NR==FNR { prev[$1]=$2; next }
{
cur=$2+0; p=(($1 in prev)?prev[$1]+0:0);
d=cur-p;
if (d>=th) { print $1 "\t" d }
}
' "$SNAP_FILE" "$tmp_cur" \
| sort -k2,2nr \
| head -n "$TOP" \
| awk -F'\t' '{printf " + %-8s %s\n", "'"$(human "$2")"'", $1}' \
|| true
else
echo " (первый запуск — снимаю базовую метрику, сравнивать не с чем)"
fi

# Обновляем снимок
mv -f "$tmp_cur" "$SNAP_FILE"

- Быстрый запуск вручную:

sudo bash du-delta.sh -p /var -d 3 -t 200M -n 20

- Повесить на cron (каждые 6 часов) и писать в syslog:

*/6 * * * * root /usr/local/sbin/du-delta.sh -p / -d 3 -t 200M -n 20 | logger -t du-delta

Хочешь логический размер файлов (как видит ls -l) - оставляй --apparent-size. Нужен именно занятый на диске объём - убери этот флаг.

💡 Начни с -d 2 для обзора верхних уровней, потом точечно спускайся глубже по «подозрительным» каталогам.

👉 @bash_srv
← Предыдущий пост 🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 ht… Следующий пост → 🔥 Предупреждение о переполнении дисков + топ “пожирателей” места Данный ниже ск…
Другие главы канала «Bash Советы - Bash Scripting | Linux Terminal & Shell. Скрипты и Автоматизация задач. Командная строка для Sysadmin и DevOps. Уроки Баш, Zsh и CLI Tools. Unix Console.»
Выберите главу, чтобы продолжить чтение
Все посты →
Глава от 08.05.2026
Скрипт, который находит в логах все уникальные IP-адреса и подсчитывает, сколько…
👁 387 просмотров
Глава от 06.05.2026
Мониторинга логов в реальном времени Иногда нужно следить за логами, но обычный…
👁 606 просмотров
Глава от 05.05.2026
🧯 Освобождаем место: «удалённые, но открытые» файлы Когда логи удалили, а место…
👁 701 просмотров
Глава от 04.05.2026
🔥 Bash-совет дня Иногда нужно быстро найти и удалить все битые симлинки 🪤 в сис…
👁 823 просмотров
Глава от 03.05.2026
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 ht…
👁 856 просмотров
Глава от 30.04.2026
🔥 Предупреждение о переполнении дисков + топ “пожирателей” места Данный ниже ск…
👁 1 117 просмотров
Удалить пост или канал с МАКСОТЕКИ
Заявка подтверждается через бота Макс: нужно быть администратором канала и добавить бота МАКСОТЕКИ в администраторы. После проверки канал или конкретный пост скрывается с сайта.
🔍
Архив всех постов Макс
Поиск по тексту среди 4,187,725 постов из 200,295 каналов. Фильтры по дате, видео, репостам и удалённым публикациям.
1 ₽ — 7 дней доступа
далее 490 ₽/мес
Получить доступ за 1 ₽
или войти, если уже есть аккаунт

Связанные темы в других каналах

Каналы из той же тематики, где часто появляются близкие сюжеты
Вся тема →
@rlz_the_kraken
Выпускайте КракенаZ! Новости Россия Путин
Первый патриотический. За Россию! За Путина! Обратная связь: МАХ: https://clck.ru/3R95Mw, https://clck.ru/3REePQ ТГ: https://t.me/rls_the_kraken_bot Канал обо всем в м…
👥 142 141 · +2 180/7д
@zolotayahozyaika
Гороскоп
Твой личный астролог в кармане: ежедневные прогнозы для всех знаков зодиака, лунные календари и советы звёзд. Узнавай, что готовит Вселенная, и строй планы с учётом небес…
👥 125 675 · +5 306/7д
@satyadas_psychology
Сатья Дас | Психология и Саморазвитие
Сатья Дас - специалист по семейным отношениям По рекламе: https://clck.ru/3SZgS7 Менеджеры : https://clck.ru/3TJXnu, https://maxln.ru/SpiralMiya Теги: Психолог Жора.…
👥 82 988 · -352/7д
@vysokygovorit
Старше Эдды
Погружение в мир скандинавской мифологии, истории викингов и древних саг. Авторский канал с разборами рун, археологическими находками и культурой Севера. Для тех, кто ище…
👥 82 927 · +1 013/7д
@chp_78
ЧП 78 | Санкт-Петербург , Питер / СПБ / ДТП / Новости
ЧП 78 - публикуем ваши новости, происшествия, ЧП, ДТП. ВК: https://vk.com/chp_78 По рекламе: vk.com/leemma t.me/chappi golnk.ru/L5b6N Московский, Петроградский, Адмир…
👥 65 871 · +1 776/7д
@public219724157
Ведьмин котелок | Юмор
Ведьмин котелок — это место, где искрометный юмор встречается с магией повседневности. Канал для тех, кто любит посмеяться над жизнью, эзотерикой и астрологией. Свежие ме…
👥 58 139 · +960/7д

Популярные посты канала «Bash Советы - Bash Scripting | Linux Terminal & Shell. Скрипты и Автоматизация задач. Командная строка для Sysadmin и DevOps. Уроки Баш, Zsh и CLI Tools. Unix Console.»

🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https…
👁 5 155 просмотров
🚀 Мониторим активные подключения к серверу по SSH Иногда нужно быстро узнать, кто сейчас подключён к серверу по SSH. Вот простой однострочн…
👁 5 066 просмотров
📌 Рекурсивная массовая замена текста во всех файлах 🔍✏️ Иногда нужно за пару секунд заменить одну строку или слово сразу во множестве файло…
👁 5 065 просмотров
🔥 Бэкап базы данных MySQL с автоматической ротацией 🔄 Если у тебя есть сервер с MySQL/MariaDB, автоматический бэкап с ротацией — must have …
👁 5 062 просмотров
🧹 Bash-скрипт для очистки старых логов с уведомлением Иногда логи занимают слишком много места, и их нужно периодически чистить. Этот скрип…
👁 5 046 просмотров
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https…
👁 5 044 просмотров
🔍 Мониторинг сервисов Linux и автоматический перезапуск 🛠️ Иногда сервисы на сервере «внезапно» падают, а вы об этом узнаёте лишь по жалоба…
👁 5 025 просмотров
Bash-совет: анализ неудачных SSH-логинов и бан «горячих» IP 🔒🐚 Хотите быстро узнать, какие IP вызывают максимум неудачных попыток входа в S…
👁 5 024 просмотров
🚀 Полезный Bash-скрипт для архивации старых логов 🚀 Иногда логи на сервере растут быстрее, чем хочется, и начинают занимать всё свободное м…
👁 5 018 просмотров
Сегодня я хочу поделиться простым, но очень полезным Bash-скриптом для автоматического резервного копирования директорий с ротацией старых б…
👁 5 011 просмотров
💡 Bash-совет: Анализ самых активных IP в логах веб-сервера 🐚🚀 Когда на сервере много трафика, полезно быстро узнать, какие IP-адреса обраща…
👁 5 009 просмотров
🔥 Bash: выводим самые «тяжёлые» директории в системе 🧱 Когда место на диске заканчивается, надо быстро найти, кто его ест. Вот однострочник…
👁 4 999 просмотров
🧠 Регулярки на практике: как вытащить IP-адреса из логов Когда нужно быстро достать все IP-адреса из логов — тебе на помощь приходит grep +…
👁 4 989 просмотров
⚙️ Bash: Мониторинг пользователей в системе в реальном времени Иногда нужно понять, кто из пользователей сейчас в системе и что они делают.…
👁 4 989 просмотров
🕵️‍♂️ Мониторим новые файлы в каталоге в реальном времени Иногда нужно узнать, когда в определённой папке появляются новые файлы. Bash + in…
👁 4 988 просмотров
🔍 Поиск текста во множестве файлов — быстро и точно! Если нужно найти, где в проекте встречается определённая строка (например, DB_PASSWORD…
👁 4 987 просмотров
🗑️ Bash-совет дня: safe_rm - «корзина» для удаляемых файлов Сколько раз вы случайно удаляли важный конфиг? Давайте сделаем rm более дружел…
👁 4 969 просмотров
✨ Извлечение уникальных IP-адресов из логов Apache ✨ Иногда нужно быстро получить список всех клиентов, обращавшихся к вашему веб-серверу. …
👁 4 967 просмотров
Проверка открытых портов без использования netstat Утилита netstat считается устаревшей (deprecated). В современных дистрибутивах Linux ста…
👁 4 954 просмотров
🔐 Проверка пароля на сложность 🧪 Когда нужно быстро проверить, достаточно ли сложный пароль (длина, буквы, цифры, спецсимволы) — используйт…
👁 4 920 просмотров
🏷 Темы и теги
#linux terminal #командная строка #bash-скрипты #автоматизация #devops #sysadmin #Астрология и эзотерика
📋 О канале Bash Советы - Bash Scripting | Linux Terminal & Shell. Скрипты и Автоматизация задач. Командная строка для Sysadmin и DevOps. Уроки Баш, Zsh и CLI Tools. Unix Console.
Укроти командную строку. Пишем эффективные Bash-скрипты для сервера и десктопа. Магия текстовой обработки: Grep, Sed, Awk и регулярные выражения (Regex). Настройка окружения: Zsh, Fish, Vim, Tmux. Автоматизация через Cron и Systemd. Работа с SSH, логами и процессами. Полезные команды (Curl, Wget, Tar) и пайплайны (Pipes). Лучшие практики написания кода и отладки.
📊 Аналитика канала «Bash Советы - Bash Scripting | Linux Terminal & Shell. Скрипты и Автоматизация задач. Командная строка для Sysadmin и DevOps. Уроки Баш, Zsh и CLI Tools. Unix Console.» ➡️ Перейти в канал Макс
Заявка в МАКСОТЕКА
Добавьте свой канал в каталог
Зарегистрируйтесь в личном кабинете и добавьте канал за пару кликов.
Перейти в личный кабинет →

Бесплатная регистрация, быстрая модерация.