Bash Советы - Bash Scripting | Linux Terminal & Shell. Скрипты и Автоматизация задач. Командная строка для Sysadmin и DevOps. Уроки Баш, Zsh и CLI Tools. Unix Console.
IT и технологии · 5 мая 2026 г.
🧯 Освобождаем место: «удалённые, но открытые» файлы — 5 мая 2026 г. в 09:47:30.932
🧯 Освобождаем место: «удалённые, но открытые» файлы Когда логи удалили, а место не вернулось - виноваты процессы, держащие дескрипторы удалённых файлов. Вот скрипт, который находит таких «пожирателей» и показывает, что можно обнулить. #!/usr/bin/env bash # автор: https://t.me/bash_srv # leakspace.sh — ищет удалённые, но открытые большие файлы # Использование: ./leakspace.sh [порог] # пример: ./leakspace.sh 1G set -o pipefail THRESH="${1:-100M}" THR_BYTES=$(numfmt --from=iec "$THRESH" 2>/dev/null || printf '104857600') echo -e "SIZE\tPID\tFD\tFILE" sudo lsof -nP | awk -v thr="$THR_BYTES" ' / \(deleted\)/ && $7 ~ /^[0-9]+$/ { size=$7; pid=$2; fd=$4; name=""; for (i=9;i<=NF;i++) name=name (i>9?" ":"") $i; if (size+0 >= thr) printf "%s\t%s\t%s\t%s\n", size, pid, fd, name }' | sort -nr \ | numfmt --to=iec --header=1 --field=1 \ | column -t 🧪 Пример ./leakspace.sh 500M Выводит таблицу вида: SIZE PID FD FILE для файлов ≥ 500M, помеченных как (deleted). 🧹 Как безопасно освободить место (без перезапуска сервиса) 1. Найдите строку с нужным PID и FD (например, PID=1234, FD=4u). 2. Обнулите файл у процесса (уберите буквы из FD - остаётся число): sudo truncate -s 0 "/proc/1234/fd/4" 🔐 Альтернатива (более щадяще): перезапустить соответствующий сервис sudo systemctl restart <service> ℹ️ Полезные заметки - Требуется lsof (apt install lsof / yum install lsof). - Порог можно задавать как 200M, 1G и т.п. (по умолчанию 100M). - Не удаляйте повторно сами файлы на диске — они уже помечены как удалённые; место держит именно процесс. - Для контейнеров Docker заходите внутрь: docker exec -it <container> bash и выполняйте проверку там. 👉 @bash_srv

