⚡Как узнать, какие порты слушает сервер
🔎 Разбор:
📡 Отличный способ быстро проверить, не слушает ли сервер «лишнее» и какие процессы занимают порты.
👉@bash_srv
ss -tulpen
🔎 Разбор:
-t
— TCP соединения-u
— UDP соединения-l
— только слушающие порты-p
— показывает процесс, который держит порт-e
— дополнительная информация-n
— не преобразует IP/порт в имена (быстрее)📡 Отличный способ быстро проверить, не слушает ли сервер «лишнее» и какие процессы занимают порты.
👉@bash_srv
👍13
🗓 10 сентября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «CI/CD на основе GitLab».
🎯 На вебинаре разберем:
👥 Кому будет интересно:
- Начинающим DevOps-инженерам — вы получите базовое понимание архитектуры GitLab и научитесь разворачивать его под разные задачи
- DevOps-практикам, которые уже используют GitLab и хотят повысить стабильность и отказоустойчивость
- Инженерам по внедрению CI/CD, которым важно понять, как масштабировать GitLab в корпоративной среде
🎯 Что вы получите:
- Понимание, как развернуть GitLab оптимально под свои задачи
- Понимание, как правильно выбрать среду (Docker vs Kubernetes) для развёртывания
- Практические советы по стабильности, резервированию и отказоустойчивости GitLab-инсталляций
🔗 Ссылка на регистрацию: https://vk.cc/cPbekj
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📈Скрипт показывает, какие каталоги выросли с прошлого запуска
Скрипт ниже делает снимок размеров каталогов (через
- Быстрый запуск вручную:
- Повесить на cron (каждые 6 часов) и писать в syslog:
Хочешь логический размер файлов (как видит
💡 Начни с
👉@bash_srv
Скрипт ниже делает снимок размеров каталогов (через
du
), а при следующем запуске покажет топ приростов - кто вырос и на сколько.
#!/usr/bin/env bash
# автор: https://t.iss.one/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
👍7
🔥 Предупреждение о переполнении дисков + топ “пожирателей” места
Данный ниже скрипт проверит заполнение всех ФС (кроме tmpfs/devtmpfs/squashfs/overlay), и если порог превышен - пришлёт сводку с ТОП директориями по размеру. Поддерживает уведомления в Telegram (через Bot API) или просто вывод в консоль.
Функционал
✅ Проверяет все реальные файловые системы
✅ Порог заполнения настраивается (
✅ Показывает TOP-N самых “тяжёлых” директорий на проблемном разделе (
✅ Исключения по mountpoint через
✅ Уведомления в Telegram, если задать
Установка
Примеры запуска
- Раз в 15 минут, тревожим после 90%, показываем TOP-3 и шлём в Telegram:
- Исключаем Docker и снапшоты:
- Для больших ФС
- Хотите человеческие единицы? Замените
- Если сервер за NAT/без выхода в интернет - уведомления уйдут в stdout и попадут в системную почту cron.
👉@bash_srv
Данный ниже скрипт проверит заполнение всех ФС (кроме tmpfs/devtmpfs/squashfs/overlay), и если порог превышен - пришлёт сводку с ТОП директориями по размеру. Поддерживает уведомления в Telegram (через Bot API) или просто вывод в консоль.
Функционал
✅ Проверяет все реальные файловые системы
✅ Порог заполнения настраивается (
THRESHOLD
, по умолчанию 85%)✅ Показывает TOP-N самых “тяжёлых” директорий на проблемном разделе (
TOPN
, по умолчанию 5)✅ Исключения по mountpoint через
EXCLUDE_REGEX
(например, Docker)✅ Уведомления в Telegram, если задать
TELEGRAM_BOT_TOKEN
и TELEGRAM_CHAT_ID
#!/usr/bin/env bash
# автор: https://t.iss.one/bash_srv
set -Eeuo pipefail
# Настройки (можно переопределять переменными окружения)
THRESHOLD="${THRESHOLD:-85}" # % использования ФС, начиная с которого тревожим
TOPN="${TOPN:-5}" # сколько топ-директорий показать
EXCLUDE_REGEX="${EXCLUDE_REGEX:-^(/sys|/proc|/run|/snap|/var/lib/docker|/var/lib/containers)}"
# Исключаем псевдо-ФС
DF_TYPES=(-x tmpfs -x devtmpfs -x squashfs -x overlay)
notify() {
local msg="$1"
if [[ -n "${TELEGRAM_BOT_TOKEN:-}" && -n "${TELEGRAM_CHAT_ID:-}" ]]; then
curl -sS -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d "chat_id=${TELEGRAM_CHAT_ID}" \
--data-urlencode "text=${msg}" >/dev/null || true
else
echo "$msg"
fi
}
alerts=()
# Читаем: <mountpoint> <use%>
while read -r mnt use; do
[[ "$mnt" =~ $EXCLUDE_REGEX ]] && continue
use="${use%\%}"
if (( use >= THRESHOLD )); then
# du в мегабайтах по границам ФС (-x), глубина 1, сортировка по размеру
top=$(du -x -m --max-depth=1 "$mnt" 2>/dev/null | sort -nr | head -n "$TOPN" \
| awk '{printf " %6d MB %s\n",$1,$2}')
alerts+=("⚠️ ФС $mnt занята на ${use}%%. Топ ${TOPN} директорий:\n${top}")
fi
done < <(df -P "${DF_TYPES[@]}" | awk 'NR>1{print $(NF), $(NF-1)}')
if ((${#alerts[@]})); then
host=$(hostname -f 2>/dev/null || hostname)
ts=$(date '+%F %T %Z')
msg="🚨 Диск почти заполнен: ${host}\n${ts}\nПорог: ${THRESHOLD}%%\n\n$(printf "%s\n\n" "${alerts[@]}")"
notify "$msg"
else
echo "✅ Все файловые системы ниже ${THRESHOLD}%."
fi
Установка
sudo install -m 0755 df_guard.sh /usr/local/bin/df_guard.sh
Примеры запуска
- Раз в 15 минут, тревожим после 90%, показываем TOP-3 и шлём в Telegram:
# В crontab (root)
*/15 * * * * THRESHOLD=90 TOPN=3 TELEGRAM_BOT_TOKEN=123:ABC TELEGRAM_CHAT_ID=123456 \
nice -n 10 ionice -c3 /usr/local/bin/df_guard.sh
- Исключаем Docker и снапшоты:
EXCLUDE_REGEX='^(/var/lib/docker|/mnt/snapshots)' df_guard.sh
- Для больших ФС
du
может крутиться дольше - добавьте nice
/ionice
, как в примере.- Хотите человеческие единицы? Замените
-m
на -h
и уберите выравнивание в awk
.- Если сервер за NAT/без выхода в интернет - уведомления уйдут в stdout и попадут в системную почту cron.
👉@bash_srv
👍3