fa
Feedback
Bash Советы

Bash Советы

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

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

نمایش بیشتر
2 750
مشترکین
اطلاعاتی وجود ندارد24 ساعت
+27 روز
-1130 روز
آرشیو پست ها
Узнаем, какие процессы занимают больше всего памяти Для этого можно использовать комбинацию 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. 👉@bash_srv

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

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

🇷🇺 100% российская разработка INFRAX — платформа all-in-one для управления ИТ-инфраструктурой: ✅ Мониторинг инфраструктуры (ITOM) ✅ Удаленный доступ для сотрудников и привилегированных пользователей ✅ Обработка заявок пользователей (ServiceDesk) ✅ База знаний с разграничением доступа к категориям (публичные и закрытые) ✅ Автоматизация (скрипты и планировщик) ✅ Контроль привилегированных пользователей. Видеозапись сессий RDP/SSH/VNC. (PAM) ✅ Управление доступами. Доступ ко всем корпоративным сервисам через одну учетку (IAM) БЕСПЛАТНО до 100 пользователей! 🎁 👉 Попробовать INFRAX Реклама. ООО «АУДИТ-ТЕЛЕКОМ», ОГРН 1167746696776, erid: 2Vtzqv8Ag74

Иногда нужно быстро найти и подсветить все 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 или при поиске подозрительных подключений. 👉@bash_srv

🇷🇺 100% российская разработка INFRAX — платформа all-in-one для управления ИТ-инфраструктурой: ✅ Мониторинг инфраструктуры (ITOM) ✅ Удаленный доступ для сотрудников и привилегированных пользователей ✅ Обработка заявок пользователей (ServiceDesk) ✅ База знаний с разграничением доступа к категориям (публичные и закрытые) ✅ Автоматизация (скрипты и планировщик) ✅ Контроль привилегированных пользователей. Видеозапись сессий RDP/SSH/VNC. (PAM) ✅ Управление доступами. Доступ ко всем корпоративным сервисам через одну учетку (IAM) БЕСПЛАТНО до 100 пользователей! 🎁 👉 Попробовать INFRAX Реклама. ООО «АУДИТ-ТЕЛЕКОМ», ОГРН 1167746696776, erid: 2Vtzqv8Ag74

🗂 Мониторинг размера логов Иногда логи на сервере начинают разрастаться и быстро занимают место. Чтобы контролировать их раз
🗂 Мониторинг размера логов Иногда логи на сервере начинают разрастаться и быстро занимают место. Чтобы контролировать их размер, можно использовать небольшой bash-скрипт:

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

# каталог с логами
LOG_DIR="/var/log"

# максимальный размер файла (в мегабайтах)
MAX_SIZE=100

find "$LOG_DIR" -type f -name "*.log" | while read -r log; do
    size=$(du -m "$log" | cut -f1)
    if (( size > MAX_SIZE )); then
        echo "⚠️ Лог $log превышает $MAX_SIZE MB (текущий размер: ${size}MB)"
    fi
done
📌 Скрипт ищет все .log - файлы в каталоге /var/log и проверяет их размер. Если размер превышает указанный порог (например, 100MB), выводит предупреждение. 🔧 Можно добавить в cron, чтобы проверка выполнялась регулярно. 👉@bash_srv

🔥 Быстрый поиск крупных файлов Этот скрипт выведет 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. Если директория не указана — скрипт проверит весь корень /. 👉@bash_srv

🔥 Открытый урок «GitLab CI + Ansible: автоматизация инфраструктуры без боли». 🗓 27 августа в 20:00 МСК 🆓 Бесплатно. Урок в
🔥 Открытый урок «GitLab CI + Ansible: автоматизация инфраструктуры без боли». 🗓 27 августа в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «CI/CD на основе GitLab». 🎯 На вебинаре разберем: ✔️ Как настроить GitLab CI для работы с Ansible ✔️ Организация пайплайна для автоматического запуска Ansible-плейбуков ✔️ Как тестировать и проверять изменения в Ansible до деплоя ✔️ Использование GitLab CI как среды для обучения и отладки Ansible 👥 Кому будет интересно: - DevOps-инженерам, которые осваивают или уже используют GitLab CI и Ansible, и хотят связать их в единый, автоматизированный процесс - Начинающим специалистам, изучающим инфраструктурный код и автоматизацию - Техническим архитекторам, заинтересованным в построении масштабируемых и управляемых CI/CD процессов с Ansible 🎯 Что вы получите: - Практическое понимание интеграции Ansible с GitLab CI - Готовые идеи и примеры для запуска и тестирования Ansible-плейбуков - Уверенность в использовании CI/CD пайплайнов для инфраструктурных задач и конфигурационного менеджмента 🔗 Ссылка на регистрацию: https://vk.cc/cOK226 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🔥 Мониторинг нагрузки на сервер Иногда нужно быстро понять, какие процессы сильнее всего нагружают систему. Этот скрипт выво
🔥 Мониторинг нагрузки на сервер Иногда нужно быстро понять, какие процессы сильнее всего нагружают систему. Этот скрипт выводит топ-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
   
Так вы всегда будете видеть, что больше всего грузит ваш сервер 🚀 👉@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
   
Теперь сервер будет обновляться сам, а все действия попадут в лог 📜 👉@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
   
👉@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
   
👉@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
📂 Теперь у вас всегда будут версии с точным временем создания! 👉@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 последних бэкапов, а старые будут удаляться автоматически. 👉@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, чтобы он выполнялся, например, каждый час. 🛡️ Так вы всегда будете в курсе, что диск переполняется, до того как сервер упадёт 🚨 👉@bash_srv

🛜 Быстрое сканирование сети с выводом живых хостов Иногда нужно быстро узнать, какие устройства сейчас активны в сети. Вмест
🛜 Быстрое сканирование сети с выводом живых хостов Иногда нужно быстро узнать, какие устройства сейчас активны в сети. Вместо тяжёлых сканеров можно использовать пару строк на bash.

#!/bin/bash
# Быстрое сканирование сети (замени 192.168.1 на свою подсеть)
# автор: https://t.me/bash_srv
SUBNET="192.168.1"

for i in {1..254}; do
    (
        ping -c1 -W1 $SUBNET.$i &>/dev/null && echo "$SUBNET.$i доступен"
    ) &
done
wait
Что делает скрипт? - Перебирает адреса от 192.168.1.1 до 192.168.1.254 - Параллельно пингует их с таймаутом 1 секунда - Выводит только живые хосты ⚡ В 10-20 раз быстрее обычного пинга благодаря параллельному запуску! Попробуй сохранить скрипт как scan.sh, сделать его исполняемым (chmod +x scan.sh) и запустить. 👉@bash_srv

🔄 Мониторинг доступности сайта с уведомлением в Telegram Хотите знать, когда ваш сайт «упал»? Ниже написал простой Bash-скри
🔄 Мониторинг доступности сайта с уведомлением в Telegram Хотите знать, когда ваш сайт «упал»? Ниже написал простой Bash-скрипт, который проверяет доступность ресурса и шлёт уведомление в Telegram.

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

# Настройки
URL="https://example.com"
BOT_TOKEN="123456789:ABCDEF1234567890abcdef1234567890"
CHAT_ID="987654321"

# Проверка доступности
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$URL")

if [ "$HTTP_CODE" -ne 200 ]; then
    MESSAGE="⚠️ Сайт $URL недоступен! Код ответа: $HTTP_CODE"
    curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" \
        -d chat_id="$CHAT_ID" \
        -d text="$MESSAGE"
fi
Как использовать: 1. Вставьте ваш BOT_TOKEN и CHAT_ID. 2. Сохраните скрипт, например, /usr/local/bin/check_site.sh. 3. Добавьте в cron (каждые 5 минут):

   */5 * * * * /usr/local/bin/check_site.sh
   
Теперь вы сразу узнаете, если сайт станет недоступен. 👉@bash_srv

🔥 Регулярки для админов — Часть 2 Сегодня поговорим про замену и обработку данных с помощью sed 1. Маскирование конфиденциал
🔥 Регулярки для админов — Часть 2 Сегодня поговорим про замену и обработку данных с помощью sed 1. Маскирование конфиденциальных данных (пароли, токены)

sed -E 's/(password|token)=\S+/\1=***HIDDEN***/g' config.txt
Что делает: - Находит password=что-то или token=что-то. - Заменяет значение на ***HIDDEN***. 2. Удалить все цифры из файла

sed -E 's/[0-9]+//g' file.txt
Что делает: - [] — диапазон символов. - + — одно или больше вхождений. 3. Быстро поменять домен в конфиге

sed -E 's/(server_name\s+).*/\1newdomain.com/' /etc/nginx/sites-available/site.conf
Что делает: - Захватывает server_name и всё после него. - Заменяет домен на newdomain.com. 4. Удалить строки, содержащие определённые слова

sed -E '/(DEBUG|TRACE)/d' app.log
Что делает: - /(...)/d — удаляет строки, содержащие DEBUG или TRACE. 👉@bash_srv

🔥 Регулярки для админов 1. Быстро найти IP-адреса в логе grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' /var/log/nginx/access.log Чт
🔥 Регулярки для админов 1. Быстро найти IP-адреса в логе

grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' /var/log/nginx/access.log
Что делает: - Ищет шаблон “число.число.число.число” — IPv4-адрес. - -o выводит только совпадения, без лишнего текста. 2. Удалить пустые строки и комментарии из конфигов

grep -Ev '^\s*#|^\s*$' /etc/nginx/nginx.conf
Что делает: - ^\s*# — строки, начинающиеся с # (комментарии). - ^\s*$ — пустые строки. 3. Найти строки с ошибками в логах

grep -Ei 'error|fail|critical' /var/log/syslog
Что делает: - Ищет ключевые слова ошибок без учёта регистра. - Можно расширить список слов через |. 👉@bash_srv

🔍 10 полезных регулярных выражений для админов Регулярки — мощный инструмент для поиска и обработки текста в Linux. # 1. Най
🔍 10 полезных регулярных выражений для админов Регулярки — мощный инструмент для поиска и обработки текста в Linux.

# 1. Найти все IP-адреса в файле
grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' file.log

# 2. Найти строки с email-адресами
grep -E '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' file.txt

# 3. Удалить пустые строки
sed -i '/^$/d' file.txt

# 4. Найти строки, начинающиеся с #
grep -E '^#' file.conf

# 5. Найти строки, не содержащие слово ERROR
grep -Ev 'ERROR' file.log

# 6. Заменить все цифры на символ *
sed -E 's/[0-9]/*/g' file.txt

# 7. Удалить комментарии и пустые строки
grep -Ev '^\s*#|^\s*$' file.conf

# 8. Найти все URL
grep -Eo 'https?://[^ ]+' file.txt

# 9. Найти строки длиной больше 100 символов
grep -E '.{100,}' file.txt

# 10. Извлечь доменные имена из email
grep -Eo '@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' file.txt
💡Тестируйте регулярки в реальном времени с grep -E или онлайн-сервисами типа regex101.com. 👉@bash_srv