fa
Feedback
Bash Советы

Bash Советы

رفتن به کانال در Telegram

🚀 Секреты и советы по Bash 🔹 Полезные трюки, хитрые однострочники и лайфхаки для работы в терминале. 🔹 Автоматизация, скрипты и оптимизация работы в Linux. 🔹 Стать мастером Bash легко – просто подпишись! По всем вопросам @evgenycarter

نمایش بیشتر
2 749
مشترکین
-124 ساعت
-47 روز
-1430 روز
آرشیو پست ها
🧯 Освобождаем место: «удалённые, но открытые» файлы Когда логи удалили, а место не вернулось - виноваты процессы, держащие д
🧯 Освобождаем место: «удалённые, но открытые» файлы Когда логи удалили, а место не вернулось - виноваты процессы, держащие дескрипторы удалённых файлов. Вот скрипт, который находит таких «пожирателей» и показывает, что можно обнулить.

#!/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 и выполняйте проверку там. 📲 Мы в MAX 👉@bash_srv

🔥 Bash-совет дня Иногда нужно быстро найти и удалить все битые симлинки 🪤 в системе (или в конкретной папке). Вот простой с
🔥 Bash-совет дня Иногда нужно быстро найти и удалить все битые симлинки 🪤 в системе (или в конкретной папке). Вот простой скрипт:

#!/bin/bash
# Поиск и удаление битых символических ссылок

find / -xtype l -print -delete 2>/dev/null
🔎 Объяснение: find / -xtype l — ищет все символические ссылки, которые указывают «в никуда»; -print - выводит их на экран (чтобы видеть, что удаляется); -delete - сразу удаляет найденные битые ссылки; 2>/dev/null - скрывает лишние ошибки (например, "нет доступа"). ⚠️ Если хотите сначала просто посмотреть список битых ссылок без удаления:

find / -xtype l 2>/dev/null
Так можно быстро почистить систему от мусора и навести порядок 🧹 📲 Мы в MAX 👉@bash_srv

🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. https://max.ru/tipsysdmin Типичный Сисадмин 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии 📌 https://max.ru/progjob Вакансии в IT Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы

🔥 Предупреждение о переполнении дисков + топ “пожирателей” места Данный ниже скрипт проверит заполнение всех ФС (кроме tmpfs
🔥 Предупреждение о переполнении дисков + топ “пожирателей” места Данный ниже скрипт проверит заполнение всех ФС (кроме 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.me/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. 📲 Мы в MAX 👉@bash_srv

📈Скрипт показывает, какие каталоги выросли с прошлого запуска Скрипт ниже делает снимок размеров каталогов (через 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 для обзора верхних уровней, потом точечно спускайся глубже по «подозрительным» каталогам. 📲 Мы в MAX 👉@bash_srv

🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. https://max.ru/tipsysdmin Типичный Сисадмин 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии 📌 https://max.ru/progjob Вакансии в IT Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы

⚡Как узнать, какие порты слушает сервер ss -tulpen 🔎 Разбор: -t — TCP соединения -u — UDP соединения -l — только слушающие п
⚡Как узнать, какие порты слушает сервер

ss -tulpen
🔎 Разбор: -t — TCP соединения -u — UDP соединения -l — только слушающие порты -p — показывает процесс, который держит порт -e — дополнительная информация -n — не преобразует IP/порт в имена (быстрее) 📡 Отличный способ быстро проверить, не слушает ли сервер «лишнее» и какие процессы занимают порты. 📲 Мы в MAX 👉@bash_srv

Узнаем, какие процессы занимают больше всего памяти Для этого можно использовать комбинацию ps и sort: ps -eo pid,comm,%mem,%
Узнаем, какие процессы занимают больше всего памяти Для этого можно использовать комбинацию ps и sort:

ps -eo pid,comm,%mem,%cpu --sort=-%mem | head -n 10
📌 Разбор: ps -eo pid,comm,%mem,%cpu — выводит PID, имя команды, процент памяти и CPU. --sort=-%mem — сортировка по памяти (по убыванию). head -n 10 — показывает топ-10 процессов. 🔥 Если хотите сортировать по CPU, замените %mem на %cpu. 📲 Мы в MAX 👉@bash_srv

🔥Проверяем, какие пользователи в системе имеют пароли, хранящиеся в зашифрованном виде, а какие — без пароля (например, сист
🔥Проверяем, какие пользователи в системе имеют пароли, хранящиеся в зашифрованном виде, а какие — без пароля (например, системные учётки). Для этого можно использовать такой однострочник:

awk -F: '($2!="x" && $2!~"^!|^\\*"){print $1" -> "$2}' /etc/shadow
🔍 Что делает скрипт: -F: — указываем разделитель : (так как /etc/shadow имеет такой формат). $2 — это поле с паролем. Если оно не x, не * и не !, значит пароль реально задан. Выводим имя пользователя и его хеш. ⚡ Полезно для аудита безопасности — можно быстро найти учётки с установленными паролями. 📲 Мы в MAX 👉@bash_srv

Иногда нужно быстро найти и подсветить все IPv4-адреса в логах или текстовых файлах. Для этого отлично подходит регулярное вы
Иногда нужно быстро найти и подсветить все IPv4-адреса в логах или текстовых файлах. Для этого отлично подходит регулярное выражение + grep.

grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' access.log
🔎 Что здесь происходит: -E — включает расширенные регулярки. -o — выводит только совпадения, без остальной строки. ([0-9]{1,3}\.){3}[0-9]{1,3} — шаблон поиска IPv4-адреса. 📌 Чтобы сразу убрать дубликаты и отсортировать список IP:

grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' access.log | sort -u
Это удобно при анализе логов Nginx/Apache или при поиске подозрительных подключений. 📲 Мы в MAX 👉@bash_srv

🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии 📌 https://max.ru/progjob Вакансии в IT Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы

🔥 Быстрый поиск крупных файлов Этот скрипт выведет 10 самых больших файлов в указанной директории: #!/bin/bash # автор: http
🔥 Быстрый поиск крупных файлов Этот скрипт выведет 10 самых больших файлов в указанной директории:

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

DIR=${1:-/}

echo "📂 Топ-10 самых больших файлов в $DIR"
du -ah "$DIR" 2>/dev/null | sort -rh | head -n 10
📌 Использование:

./bigfiles.sh /var/log
Выведет список самых "тяжёлых" файлов в /var/log. Если директория не указана — скрипт проверит весь корень /. 📲 Мы в MAX 👉@bash_srv

🔥 Мониторинг нагрузки на сервер Иногда нужно быстро понять, какие процессы сильнее всего нагружают систему. Этот скрипт выво
🔥 Мониторинг нагрузки на сервер Иногда нужно быстро понять, какие процессы сильнее всего нагружают систему. Этот скрипт выводит топ-5 «прожорливых» процессов по CPU и RAM 🖥️

#!/bin/bash
# автор: https://t.me/bash_srv
echo "=== Топ-5 процессов по CPU ==="
ps -eo pid,ppid,cmd,%cpu --sort=-%cpu | head -n 6

echo ""
echo "=== Топ-5 процессов по RAM ==="
ps -eo pid,ppid,cmd,%mem --sort=-%mem | head -n 6
📌 Как использовать: 1. Сохраните в файл, например top_procs.sh 2. Сделайте исполняемым:

   chmod +x top_procs.sh
   
3. Запускайте при необходимости:

   ./top_procs.sh
   
Так вы всегда будете видеть, что больше всего грузит ваш сервер 🚀 📲 Мы в MAX 👉@bash_srv

🚀 Автоматическое обновление пакетов с логированием Регулярные обновления системы — залог безопасности и стабильности. Ниже с
🚀 Автоматическое обновление пакетов с логированием Регулярные обновления системы — залог безопасности и стабильности. Ниже скрипт, который обновляет пакеты и ведёт лог:

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

LOGFILE="/var/log/auto_update.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

echo "[$DATE] Начало обновления" >> $LOGFILE

if command -v apt &>/dev/null; then
    apt update >> $LOGFILE 2>&1
    apt -y upgrade >> $LOGFILE 2>&1
elif command -v dnf &>/dev/null; then
    dnf -y update >> $LOGFILE 2>&1
elif command -v yum &>/dev/null; then
    yum -y update >> $LOGFILE 2>&1
else
    echo "[$DATE] Неизвестный пакетный менеджер" >> $LOGFILE
    exit 1
fi

echo "[$DATE] Обновление завершено" >> $LOGFILE
📌 Как использовать: 1. Сохраните скрипт, например, /usr/local/bin/auto_update.sh 2. Дайте права на выполнение:

   chmod +x /usr/local/bin/auto_update.sh
   
3. Добавьте в cron для ежедневного запуска:

   0 3 * * * /usr/local/bin/auto_update.sh
   
Теперь сервер будет обновляться сам, а все действия попадут в лог 📜 📲 Мы в MAX 👉@bash_srv

🔥 Автоматическая проверка и перезапуск упавших сервисов Скрипт, который проверяет список сервисов и перезапускает их при нео
🔥 Автоматическая проверка и перезапуск упавших сервисов Скрипт, который проверяет список сервисов и перезапускает их при необходимости.

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

# Список сервисов для проверки
services=("nginx" "mysql" "ssh")

for service in "${services[@]}"; do
    if ! systemctl is-active --quiet "$service"; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') - $service не работает. Перезапускаем..."
        systemctl restart "$service"
        # Можно отправить уведомление в Telegram или email
    else
        echo "$(date '+%Y-%m-%d %H:%M:%S') - $service работает."
    fi
done
📌 Как использовать: 1. Сохраните скрипт, например, в /usr/local/bin/service_check.sh. 2. Дайте права на выполнение:

   chmod +x /usr/local/bin/service_check.sh
   
3. Добавьте в cron для регулярной проверки, например, каждые 5 минут:

   */5 * * * * /usr/local/bin/service_check.sh >> /var/log/service_check.log 2>&1
   
📲 Мы в MAX 👉@bash_srv

🚀 Быстрый мониторинг использования диска по каталогам Иногда нужно быстро понять, какая папка на сервере съедает больше всег
🚀 Быстрый мониторинг использования диска по каталогам Иногда нужно быстро понять, какая папка на сервере съедает больше всего места. Вот простой скрипт, который выведет топ-10 "пожирателей" диска:

#!/bin/bash
# Топ-10 каталогов по размеру в текущем пути

du -h --max-depth=1 2>/dev/null | sort -hr | head -n 10
📌 Как использовать: 1. Перейдите в интересующую директорию:

   cd /var/log
   
2. Запустите скрипт:

   ./disk_top.sh
   
📲 Мы в MAX 👉@bash_srv

🚀 Быстрое резервное копирование с датой в имени файла Часто нужно сделать резервную копию файла или каталога, но чтобы не пе
🚀 Быстрое резервное копирование с датой в имени файла Часто нужно сделать резервную копию файла или каталога, но чтобы не перезаписать старую - лучше добавить в имя дату и время. Ниже скрипт:

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

# Что копируем
SOURCE="/etc/nginx/nginx.conf"

# Куда сохраняем
BACKUP_DIR="/backup"

# Создаем каталог, если его нет
mkdir -p "$BACKUP_DIR"

# Имя файла с датой
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
FILENAME=$(basename "$SOURCE")
cp "$SOURCE" "$BACKUP_DIR/${FILENAME}_${DATE}"

echo "✅ Резервная копия создана: $BACKUP_DIR/${FILENAME}_${DATE}"
💡 Как использовать: - Поменяйте SOURCE на свой файл или каталог. - Можно добавить в cron, чтобы резервная копия делалась автоматически. 🛠 Пример для cron (каждый день в 3 ночи):
0 3 * * * /path/to/backup.sh
📂 Теперь у вас всегда будут версии с точным временем создания! 📲 Мы в MAX 👉@bash_srv

📌 Bash-скрипт для автоматического бэкапа MySQL с ротацией Накидал пример простого скрипта для автоматического бэкапа базы, ч
📌 Bash-скрипт для автоматического бэкапа MySQL с ротацией Накидал пример простого скрипта для автоматического бэкапа базы, чтобы всегда была свежая копия, но при этом не захламлять диск старыми дампами.

#!/bin/bash
# Параметры
# автор: https://t.me/bash_srv
DB_USER="root"
DB_PASS="password"
DB_NAME="my_database"
BACKUP_DIR="/backup/mysql"
DATE=$(date +"%Y-%m-%d_%H-%M-%S")

# Создаём директорию для бэкапов, если нет
mkdir -p "$BACKUP_DIR"

# Делаем дамп базы
mysqldump -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql"

# Оставляем только 7 последних бэкапов, остальные удаляем
ls -1t "$BACKUP_DIR"/*.sql | tail -n +8 | xargs -r rm --

echo "✅ Бэкап базы $DB_NAME создан: ${DB_NAME}_${DATE}.sql"
Как использовать: 1. Сохраните скрипт, например в /usr/local/bin/mysql_backup.sh. 2. Дайте права на выполнение:

   chmod +x /usr/local/bin/mysql_backup.sh
   
3. Добавьте в cron, чтобы бэкап делался каждый день в 3 ночи:

   0 3 * * * /usr/local/bin/mysql_backup.sh
   
📦 В результате вы всегда будете иметь 7 последних бэкапов, а старые будут удаляться автоматически. 📲 Мы в MAX 👉@bash_srv

🎯 Мониторинг занятости диска с алертом на почту 📬 Хотите, чтобы сервер сам предупреждал вас при нехватке свободного места н
🎯 Мониторинг занятости диска с алертом на почту 📬 Хотите, чтобы сервер сам предупреждал вас при нехватке свободного места на диске? Никидал простой bash-скрипт, который отправит письмо, если свободного места останется меньше 10%:

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

# Порог в % (если меньше — шлём алерт)
THRESHOLD=10
EMAIL="admin@example.com"

# Получаем список всех точек монтирования
df -hP | grep -vE '^Filesystem' | while read line; do
  USAGE=$(echo $line | awk '{print $5}' | tr -d '%')
  MOUNT=$(echo $line | awk '{print $6}')
  
  if [ "$USAGE" -ge $((100 - THRESHOLD)) ]; then
    echo -e "На сервере $(hostname)\nМонтирование: $MOUNT\nЗанято: $USAGE%" | \
    mail -s "⚠️ Мало места на диске $MOUNT" "$EMAIL"
  fi
done
📌 Как использовать: 1. Убедитесь, что установлен mailx (или mail). 2. Измените переменную EMAIL на свой адрес. 3. Добавьте скрипт в cron, чтобы он выполнялся, например, каждый час. 🛡️ Так вы всегда будете в курсе, что диск переполняется, до того как сервер упадёт 🚨 📲 Мы в MAX 👉@bash_srv

🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии 📌 https://max.ru/progjob Вакансии в IT Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы