es
Feedback
Bash Советы

Bash Советы

Ir al canal en Telegram

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

Mostrar más
2 729
Suscriptores
Sin datos24 horas
Sin datos7 días
-330 días

Carga de datos en curso...

Canales Similares
Sin datos
¿Algún problema? Por favor, actualice la página o contacte a nuestro gerente de soporte.
Menciones Entrantes y Salientes
---
---
---
---
---
---
Atraer Suscriptores
oct '26
octubre '26
+4
en 0 canales
septiembre '26
+23
en 0 canales
Get PRO
agosto '26
+11
en 0 canales
Get PRO
julio '26
+16
en 0 canales
Get PRO
junio '26
+20
en 1 canales
Get PRO
mayo '26
+30
en 0 canales
Get PRO
abril '26
+52
en 2 canales
Get PRO
marzo '26
+42
en 2 canales
Get PRO
febrero '26
+49
en 0 canales
Get PRO
enero '26
+52
en 6 canales
Get PRO
diciembre '25
+66
en 1 canales
Get PRO
noviembre '25
+234
en 32 canales
Get PRO
octubre '25
+118
en 5 canales
Get PRO
septiembre '25
+220
en 37 canales
Get PRO
agosto '25
+198
en 5 canales
Get PRO
julio '25
+229
en 27 canales
Get PRO
junio '25
+336
en 22 canales
Get PRO
mayo '25
+452
en 45 canales
Get PRO
abril '25
+460
en 38 canales
Get PRO
marzo '25
+552
en 39 canales
Get PRO
febrero '25
+1 149
en 3 canales
Fecha
Crecimiento de Suscriptores
Menciones
Canales
06 octubre+1
05 octubre0
04 octubre0
03 octubre0
02 octubre+2
01 octubre+1
Publicaciones del Canal
📌 Рекурсивная массовая замена текста во всех файлах 🔍✏️ Иногда нужно за пару секунд заменить одну строку или слово сразу во
📌 Рекурсивная массовая замена текста во всех файлах 🔍✏️ Иногда нужно за пару секунд заменить одну строку или слово сразу во множестве файлов в каталоге и его поддиректориях.

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

# Проверка аргументов
if [ "$#" -ne 3 ]; then
  echo "Использование: $0 <старый_текст> <новый_текст> <путь_к_директории>"
  exit 1
fi

OLD="$1"
NEW="$2"
DIR="$3"
EXT="*"  # можно указать, например, "*.conf" или "*.txt"

# Находим файлы и делаем замену с созданием резервных .bak-файлов
find "$DIR" -type f -name "$EXT" -print0 \
  | xargs -0 sed -i.bak "s/${OLD}/${NEW}/g"

# Удаляем .bak, если они больше не нужны
# find "$DIR" -type f -name "*.bak" -delete

echo "Заменено '$OLD' на '$NEW' во всех файлах под '$DIR'."
🔧 Как использовать 1. Сохраните скрипт, например, как /usr/local/bin/bulk-replace.sh 2. Дайте права на исполнение:

   chmod +x /usr/local/bin/bulk-replace.sh
   
3. Запустите, указав искомую строку, замену и каталог:

   /usr/local/bin/bulk-replace.sh "foo" "bar" /etc/myapp
   
💡 Советы и примочки 🟢 По умолчанию скрипт обрабатывает все файлы (EXT="*"). Для конкретных типов (конфиги, скрипты) замените на "*.conf" или "*.sh". 🟢Флаг -i.bak создаёт резервную копию каждого файла с расширением .bak. Если вы уверены, что бэкапы не нужны, после замены раскомментируйте строку удаления. 🟢При сложных шаблонах (точки, слэши) вместо прямых слэшей s/old/new/g можно использовать другой разделитель, например s|old|new|g. 🟢Для чувствительных к регистру замен добавьте флаг I (GNU sed`): `s/${OLD}/${NEW}/gI. 🟢Если нужно увидеть, в каких файлах были изменения, перед sed вставьте -exec grep -l "${OLD}" {} \; или используйте grep -R --include="$EXT" "${OLD}" "$DIR". 📲 Мы в MAX 👉@bash_srv

2
🔍 Мониторинг сервисов Linux и автоматический перезапуск 🛠️ Иногда сервисы на сервере «внезапно» падают, а вы об этом узнаёт
🔍 Мониторинг сервисов Linux и автоматический перезапуск 🛠️ Иногда сервисы на сервере «внезапно» падают, а вы об этом узнаёте лишь по жалобам пользователей. Предлагаю простой Bash-скрипт, который: 1. Проверяет статус списка сервисов 2. При необходимости перезапускает их 3. Логирует все действия #!/usr/bin/env bash # автор: https://t.me/bash_srv # Список сервисов для мониторинга services=(nginx sshd mysqld) # Файл логов logfile="/var/log/service_monitor.log" for svc in "${services[@]}"; do status=$(systemctl is-active "$svc") if [[ "$status" != "active" ]]; then echo "$(date '+%F %T') ❗️ Сервис $svc статус: $status. Перезапускаем..." >> "$logfile" systemctl restart "$svc" if [[ $? -eq 0 ]]; then echo "$(date '+%F %T') ✔️ Сервис $svc успешно перезапущен" >> "$logfile" else echo "$(date '+%F %T') ❌ Не удалось перезапустить $svc" >> "$logfile" fi fi done 🗓️ Как запустить по расписанию Добавьте в crontab (например, каждый 5-й минут): */5 * * * * /path/to/service_monitor.sh 🔎 Пара совета по регулярным выражениям Для анализа логов удобно собирать все строки с ошибками: grep -Ei "(error|fail|critical|panic)" /var/log/syslog -E включает расширенные регэкспы -i — нечувствительность к регистру Настройте свой набор ключевых слов для поиска 🎯 📲 Мы в MAX 👉@bash_srv
368
3
Bash-совет: анализ неудачных SSH-логинов и бан «горячих» IP 🔒🐚 Хотите быстро узнать, какие IP вызывают максимум неудачных п
Bash-совет: анализ неудачных SSH-логинов и бан «горячих» IP 🔒🐚 Хотите быстро узнать, какие IP вызывают максимум неудачных попыток входа в SSH, и оперативно заблокировать самых настырных? Ниже скрипт: #!/usr/bin/env bash # ssh_fail_analyzer.sh # Анализ неудачных SSH-попыток и вывод TOP-10 IP LOG_FILE="/var/log/auth.log" # путь к логам (для CentOS: /var/log/secure) TOPN=10 # сколько IP показывать echo "Топ $TOPN IP с неудачными SSH-входами:" grep -E "Failed password for" "$LOG_FILE" \ | grep -oP '(?<=from )[\d\.]+' \ | sort \ | uniq -c \ | sort -rn \ | head -n "$TOPN" Как это работает 1. grep -E "Failed password for" Ищем все строки с неудачными попытками. 2. grep -oP '(?<=from )\[\d.]+' С помощью PCRE-регулярки достаём только IP-адреса после слова "from". 3. sort | uniq -c | sort -rn Сортируем, считаем вхождения и выводим в порядке убывания. 4. head -n "\$TOPN" Ограничиваем результат топ-10. 🛠 Можно добавить в crontab ежедневный запуск и автоматическую отправку отчёта на почту или сразу бан «горячих» IP через iptables: # в crontab: каждый день в 00:10 10 0 * * * /path/to/ssh_fail_analyzer.sh | mail -s "SSH Fail Report" admin@example.com Или сразу блокировать подозрительные IP, если они превысили порог: THRESHOLD=50 for ip in $(grep -E "Failed password for" "$LOG_FILE" \ | grep -oP '(?<=from )[\d\.]+' \ | sort | uniq -c \ | awk -v t="$THRESHOLD" '$1 > t {print $2}'); do iptables -I INPUT -s "$ip" -j DROP echo "$(date): Заблокирован $ip за превышение $THRESHOLD неудачных попыток" >> /var/log/ssh_ban.log done 📲 Мы в MAX 👉@bash_srv
347
4
💡 Bash-совет: Анализ самых активных IP в логах веб-сервера 🐚🚀 Когда на сервере много трафика, полезно быстро узнать, какие
💡 Bash-совет: Анализ самых активных IP в логах веб-сервера 🐚🚀 Когда на сервере много трафика, полезно быстро узнать, какие IP-адреса обращаются к веб-серверу больше всего. Предлагаю скрипт, который: 1. Извлекает IP из access.log (или любого другого лог-файла). 2. Считает количество запросов от каждого IP. 3. Сортирует и показывает топ N «запросчиков». 📋 Скрипт: top_ips.sh #!/usr/bin/env bash # -------------------------------------------- # Скрипт для поиска топ-N IP-адресов в логах # Автор: @bash_srv # -------------------------------------------- # Путь к лог-файлу (по умолчанию /var/log/nginx/access.log) LOGFILE="/var/log/nginx/access.log" # Сколько адресов показать (по умолчанию 10) TOP_N=10 # Временный файл для списка всех IP TEMP="/tmp/all_ips_$(date +%Y%m%d_%H%M%S).txt" # Проверка, что лог-файл существует if [[ ! -f "$LOGFILE" ]]; then echo "❌ Лог-файл '$LOGFILE' не найден!" exit 1 fi echo "🔎 Извлекаем IP-адреса из $LOGFILE и рассчитываем топ $TOP_N..." # 1. Извлекаем первый столбец (обычно там IP), записываем во временный файл awk '{print $1}' "$LOGFILE" > "$TEMP" # 2. Считаем повторы, сортируем по убыванию, выводим топ N echo -e "\n📊 Топ $TOP_N IP-адресов (по количеству запросов):" sort "$TEMP" | uniq -c | sort -nr | head -n "$TOP_N" | awk '{printf "%s запросов — %s\n", $1, $2}' # 3. Убираем временный файл rm -f "$TEMP" echo -e "\n✅ Готово!" 📝 Как это работает 1. LOGFILE — путь к вашему файлу логов Nginx/Apache. Для Apache обычно /var/log/apache2/access.log, для Nginx — /var/log/nginx/access.log. Если у вас другой путь, просто адаптируйте переменную LOGFILE. 2. Команда awk '{print $1}' "$LOGFILE": Берёт первый столбец в каждой строке лога (IP-адрес). Сохраняет все адреса во временный файл $TEMP. 3. sort "$TEMP" | uniq -c | sort -nr | head -n "$TOP_N": sort упорядочивает список IP по возрастанию. uniq -c объединяет подряд идущие одинаковые строки и выводит количество повторений. Второй sort -nr сортирует по числу запросов (включая самое большое значение сверху). head -n "$TOP_N" берёт первые N строк (топ N IP). 4. awk '{printf "%s запросов — %s\n", $1, $2}' форматирует вывод: Например: 1234 запросов — 192.168.1.100. 5. По завершении удаляется временный файл $TEMP для чистоты. 🔧 Как улучшить и кастомизировать Датафильтрация: если нужен анализ только за последние N дней, можно применять grep с date: # Пример: IP-адреса из логов за сегодня TODAY=$(date '+%d/%b/%Y') grep "$TODAY" "$LOGFILE" | awk '{print $1}' > "$TEMP" Здесь date '+%d/%b/%Y' выдаёт, например, 05/Jun/2025, что совпадает со строками формата Nginx-лога. Анализ URL: можно аналогично извлекать запрашиваемые URL: awk '{print $7}' "$LOGFILE" | sort | uniq -c | sort -nr | head -n 10 Это покажет топ-10 запрашиваемых путей. Выгрузка в файл/почту: чтобы сохранить результаты или отправить их администратору: OUTPUT="/tmp/top_ips_report.txt" sort "$TEMP" | uniq -c | sort -nr | head -n "$TOP_N" > "$OUTPUT" mail -s "Топ IP-адресов на $(hostname)" admin@example.com < "$OUTPUT" Интеграция в cron: автоматизируйте ежедневный отчёт: # crontab -e 30 0 * * * /usr/local/bin/top_ips.sh >> /var/log/top_ips.log Это запустит скрипт каждый день в 00:30 и добавит результаты в /var/log/top_ips.log. 🔔 Вывод: Используя этот простой Bash-скрипт, вы сможете в пару команд узнать, какие IP-адреса генерируют наибольшую нагрузку на ваш веб-сервер. Это поможет вовремя выявить подозрительные активности, защититься от DDoS-атак или просто понять, кто чаще всего посещает сайт. 📲 Мы в MAX 👉@bash_srv
525
5
Сегодня я хочу поделиться простым, но очень полезным Bash-скриптом для автоматического резервного копирования директорий с ротацией старых бэкапов. Такой скрипт пригодится, если необходимо сохранять копии важных данных и при этом не засорять диск старыми архивами. 🔄 Скрипт: Backup с ротацией #!/usr/bin/env bash # ================================ # Скрипт: backup_rotate.sh # Автор: https://t.me/bash_srv # Описание: Создаёт архив указанной директории, # хранит только последние N бэкапов, удаляя старые. # ================================ # Настройки SOURCE_DIR="/var/www/my_project" # Директория, которую резервируем DEST_DIR="/backups/my_project" # Директория для хранения бэкапов RETENTION_DAYS=7 # Сколько дней хранить бэкапы # Текущее время для имени архива DATE=$(date +"%Y-%m-%d_%H-%M-%S") ARCHIVE_NAME="backup_${DATE}.tar.gz" # Проверяем, что исходная директория существует if [[ ! -d "$SOURCE_DIR" ]]; then echo "❌ Исходная директория $SOURCE_DIR не найдена!" exit 1 fi # Создаём директорию назначения, если её нет mkdir -p "$DEST_DIR" # Создаём архив tar -czf "${DEST_DIR}/${ARCHIVE_NAME}" -C "$(dirname "$SOURCE_DIR")" "$(basename "$SOURCE_DIR")" if [[ $? -eq 0 ]]; then echo "✅ Создан бэкап: ${DEST_DIR}/${ARCHIVE_NAME}" else echo "❌ Ошибка при создании архива!" exit 1 fi # Удаляем старые бэкапы старше RETENTION_DAYS find "$DEST_DIR" -type f -name "backup_*.tar.gz" -mtime +${RETENTION_DAYS} -print -delete echo "🗑️ Удалены бэкапы старше ${RETENTION_DAYS} дней." exit 0 📝 Пояснение к скрипту 1. Настройки переменных: 🔹 SOURCE_DIR — путь к директории, которую нужно сохранить (например, веб-проект, база данных и т.д.). 🔹 DEST_DIR — куда складываем архива (может быть локальная папка или смонтированный удалённый диск). 🔹 RETENTION_DAYS — сколько дней хранить бэкапы. Всё, что старше этого значения, будет удаляться автоматически. 2. Скрипт проверяет, существует ли исходная директория. Если нет — выводит ошибку и завершает работу. 3. Создаётся папка назначения (mkdir -p), чтобы избежать ошибок, если её ещё нет. 4. Делается tar.gz - архив директории, причём для удобства используется команда: tar -czf ${DEST_DIR}/${ARCHIVE_NAME} -C $(dirname $SOURCE_DIR) $(basename $SOURCE_DIR) - Это позволяет не копировать весь путь в архив, а только нужную папку. 5. Если архивирование прошло успешно (код возврата 0) — выводим сообщение об успехе. 6. Далее команда find ищет файлы-архивы старше RETENTION_DAYS дней и удаляет их. Параметр -mtime +N означает “более N дней назад”. Опция -print -delete сначала покажет, что удаляется, а потом удалит. 7. В конце скрипт выводит, сколько старых бэкапов удалено, и завершает работу. 📌 Как использовать 1. Скопируйте скрипт в файл, например: sudo nano /usr/local/bin/backup_rotate.sh 2. Сделайте его исполняемым: sudo chmod +x /usr/local/bin/backup_rotate.sh 3. Отредактируйте переменные в начале скрипта под свои нужды: SOURCE_DIR="/path/to/your/data" DEST_DIR="/path/to/backup/location" RETENTION_DAYS=7 4. Запустите вручную, чтобы протестировать: /usr/local/bin/backup_rotate.sh 5. Если всё работает как надо, добавьте задание в ``````bash crontab``````bash для автоматического запуска. Например, чтобы делать бэкап каждый день в 3:00: sudo crontab -e И добавить строку: 0 3 * * * /usr/local/bin/backup_rotate.sh >> /var/log/backup_rotate.log 2>&1 Здесь мы также перенаправляем вывод в лог-файл, чтобы отслеживать успешные и неуспешные запуски. 📜 📲 Мы в MAX 👉@bash_srv
610
6
🕵️‍♂️ Мониторим новые файлы в каталоге в реальном времени Иногда нужно узнать, когда в определённой папке появляются новые ф
🕵️‍♂️ Мониторим новые файлы в каталоге в реальном времени Иногда нужно узнать, когда в определённой папке появляются новые файлы. Bash + inotifywait помогут: inotifywait -m -e create --format '%w%f' /path/to/dir | while read NEWFILE; do echo "🆕 Новый файл: $NEWFILE" done 📦 Объяснение: • inotifywait -m - постоянный мониторинг • -e create - событие создания • —format '%w%f' - полный путь к новому файлу • /path/to/dir - нужная папка • Всё новое сразу отображается в консоли Установить inotify-tools: sudo apt install inotify-tools 📲 Мы в MAX 👉@bash_srv
593
7
🧹 Bash-скрипт для очистки старых логов с уведомлением Иногда логи занимают слишком много места, и их нужно периодически чист
🧹 Bash-скрипт для очистки старых логов с уведомлением Иногда логи занимают слишком много места, и их нужно периодически чистить. Этот скрипт удаляет логи старше 14 дней в заданной папке и шлёт уведомление на почту, если удалено более 500 МБ. #!/bin/bash LOG_DIR="/var/log" DAYS=14 MAX_REMOVED_MB=500 EMAIL="admin@yourdomain.com" # Подсчитываем общий размер файлов, которые будут удалены REMOVED_SIZE=$(find "$LOG_DIR" -type f -mtime +$DAYS -print0 | du --files0-from=- -ch | grep total$ | awk '{print $1}') REMOVED_SIZE_MB=$(echo $REMOVED_SIZE | sed 's/M//' | awk '{print int($1)}') # Удаляем старые логи find "$LOG_DIR" -type f -mtime +$DAYS -delete # Если удалено больше MAX_REMOVED_MB, отправляем уведомление на почту if [ "$REMOVED_SIZE_MB" -gt "$MAX_REMOVED_MB" ]; then echo "Удалено логов на $REMOVED_SIZE из $LOG_DIR" | mail -s "Удаление логов" "$EMAIL" fi 🔹 Что делает скрипт: - Находит старые логи, считает их общий размер. - Удаляет только если файлы старше 14 дней. - Если удалено больше заданного лимита (по умолчанию 500 МБ) - уведомляет по почте. Обрати внимание: Для работы уведомления нужна установленная утилита mail (например, из пакета mailutils или sendmail). 📲 Мы в MAX 👉@bash_srv
690
8
🚀 Мониторим активные подключения к серверу по SSH Иногда нужно быстро узнать, кто сейчас подключён к серверу по SSH. Вот про
🚀 Мониторим активные подключения к серверу по SSH Иногда нужно быстро узнать, кто сейчас подключён к серверу по SSH. Вот простой однострочный скрипт: who | grep 'pts' | awk '{print $1, $2, $5}' Что делает этот скрипт? * who — выводит список всех вошедших пользователей. * grep 'pts' — фильтрует только те строки, что связаны с терминалами SSH. * awk '{print $1, $2, $5}' — красиво выводит имя пользователя, терминал и IP-адрес. 📋 Пример вывода: admin pts/0 (192.168.1.55) root pts/1 (10.0.0.23) Теперь ты всегда в курсе, кто подключён к твоему серверу! 😉 📲 Мы в MAX 👉@bash_srv
788
9
🚀 Полезный Bash-скрипт для архивации старых логов 🚀 Иногда логи на сервере растут быстрее, чем хочется, и начинают занимать
🚀 Полезный Bash-скрипт для архивации старых логов 🚀 Иногда логи на сервере растут быстрее, чем хочется, и начинают занимать всё свободное место. Предлагаю простой скрипт, который: 1. Находит файлы с расширением .log, изменённые более чем N дней назад. 2. Архивирует их в тарболл с датой. 3. Удаляет оригиналы после успешного архива. #!/usr/bin/env bash # # Архивация старых логов >7 дней # Сохраняет в /var/backups/logs/YYYY-MM-DD_logs.tar.gz # Настройки LOG_DIR="/var/log" # Каталог с логами BACKUP_DIR="/var/backups/logs" # Куда складывать архивы DAYS_OLD=7 # Возраст файлов в днях # Создаём папку для бэкапов, если нет mkdir -p "$BACKUP_DIR" # Текущая дата DATE=$(date '+%Y-%m-%d') # Найти *.log старше N дней и упаковать в архив find "$LOG_DIR" -type f -regextype posix-extended -regex ".*/[a-zA-Z0-9_-]+\.log$" \ -mtime +"$DAYS_OLD" -print0 | \ tar --null -czf "$BACKUP_DIR/${DATE}_logs.tar.gz" --files-from - # Проверка успешности и удаление исходников if [[ $? -eq 0 ]]; then echo "✅ Архив создан: $BACKUP_DIR/${DATE}_logs.tar.gz" # Удаляем старые логи find "$LOG_DIR" -type f -regextype posix-extended -regex ".*/[a-zA-Z0-9_-]+\.log$" \ -mtime +"$DAYS_OLD" -delete echo "🗑️ Оригиналы удалены." else echo "❌ Ошибка при создании архива!" exit 1 fi Как это работает ▪️find … -regextype posix-extended -regex ".*/[a-zA-Z0-9_-]+\.log$" Использует регулярное выражение, чтобы найти все файлы с именами, состоящими из букв, цифр, подчёркиваний или дефисов, и оканчивающиеся на .log. ▪️Опция -mtime +7 выбирает файлы старше 7 дней. ▪️tar --null --files-from - позволяет безопасно работать с именами, содержащими пробелы. ▪️При успешном создании архива исходные файлы удаляются командой -delete в find. ❓ Совет: Добавьте этот скрипт в cron, чтобы он выполнялся автоматически, например, каждый день в 2:00: 0 2 * * * /usr/local/bin/archive_logs.sh >> /var/log/archive_logs_cron.log 2>&1 👍 Надеюсь, пригодится! 📲 Мы в MAX 👉@bash_srv
747
10
✨ Извлечение уникальных IP-адресов из логов Apache ✨ Иногда нужно быстро получить список всех клиентов, обращавшихся к вашему
✨ Извлечение уникальных IP-адресов из логов Apache ✨ Иногда нужно быстро получить список всех клиентов, обращавшихся к вашему веб-серверу. Мини-скрипт на Bash с регулярным выражением поможет вытащить и сохранить все уникальные IP-адреса: #!/usr/bin/env bash # 📁 Файл логов Apache LOG_FILE="/var/log/apache2/access.log" # 📄 Файл для сохранения уникальных IP OUT_FILE="/var/log/unique_ips_$(date +%F).txt" # 🛠️ Извлекаем все IPv4, сортируем и убираем дубликаты grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' "$LOG_FILE" \ | sort \ | uniq > "$OUT_FILE" echo "✅ Список уникальных IP-адресов сохранён в $OUT_FILE" Как это работает 1. grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' — опция -E включает расширенные регулярки, -o выводит только совпадения. Регулярка ищет четыре числа от 0 до 999 через точки. 2. sort упорядочивает адреса для корректной работы uniq. 3. uniq удаляет повторяющиеся строки, оставляя только уникальные IP. Совет по автоматизации Если вы хотите ежедневно обновлять этот список, добавьте задачу в cron: 0 1 * * * /usr/local/bin/extract_ips.sh >> /var/log/extract_ips_cron.log 2>&1 Это запустит скрипт каждый день в 1:00 и сохранит результат с датой в имени файла. 📲 Мы в MAX 👉@bash_srv
732
11
🗑️ Bash-совет дня: safe_rm - «корзина» для удаляемых файлов Сколько раз вы случайно удаляли важный конфиг? Давайте сделаем r
🗑️ Bash-совет дня: safe_rm - «корзина» для удаляемых файлов Сколько раз вы случайно удаляли важный конфиг? Давайте сделаем rm более дружелюбным — вместо мгновенного уничтожения файлы будут складываться в «корзину» и автоматически очищаться спустя 30 дней. #!/usr/bin/env bash # safe_rm — перемещает удаляемые файлы в локальную «корзину» TRASH_DIR="$HOME/.local/share/Trash/files" # куда складываем mkdir -p "$TRASH_DIR" stamp=$(date +%Y-%m-%d_%H-%M-%S) for item in "$@"; do if [[ ! -e $item ]]; then printf '⚠️ %s: no such file or directory\n' "$item" >&2 continue fi mv -- "$item" "$TRASH_DIR/$(basename "$item")_$stamp" done # авто-очистка файлов, которым больше 30 дней find "$TRASH_DIR" -type f -mtime +30 -delete 2>/dev/null Быстрый старт sudo install -m 755 safe_rm /usr/local/bin/ echo "alias rm='safe_rm'" >> ~/.bashrc && source ~/.bashrc Проверяем touch important.cfg rm important.cfg ls ~/.local/share/Trash/files # Файл на месте 🎉 Лайфхак: • Хотите разные сроки хранения? Меняйте -mtime +30 на нужное количество дней. • Регулярные выражения в find позволяют тоньше выбирать, что чистить (например, только логи *_$(date +%Y-%m-*)). Спасайте нервы и конфиги! 😉 📲 Мы в MAX 👉@bash_srv
763
12
⚙️ Bash: Мониторинг пользователей в системе в реальном времени Иногда нужно понять, кто из пользователей сейчас в системе и ч
⚙️ Bash: Мониторинг пользователей в системе в реальном времени Иногда нужно понять, кто из пользователей сейчас в системе и что они делают. Встречай удобную команду на базе watch и w: watch -n 2 w 📌 Что делает эта команда: * watch -n 2 — каждые 2 секунды выполняет указанную команду * w — показывает, кто залогинен, откуда, сколько времени в системе и что выполняет 👀 Отлично подходит для ситуаций: * Отладка скриптов, когда нужно смотреть, кто подключается * Мониторинг активности сотрудников или админов * Выявление подозрительных сессий SSH 💡 А если хочешь видеть только логины, без подробностей: watch -n 2 who Полезно держать на втором экране или в отдельной вкладке терминала 🧠 📲 Мы в MAX 👉@bash_srv
757
13
Проверка открытых портов без использования netstat Утилита netstat считается устаревшей (deprecated). В современных дистрибутивах Linux стандартом для диагностики сокетов является ss (socket statistics). Она работает быстрее и потребляет меньше ресурсов ядра. Команда: ss -tulpn Ключи: -t: TCP сокеты. -u: UDP сокеты. -l: Только слушающие (listening) сокеты. -p: Показать процесс, использующий сокет (требует sudo). -n: Не преобразовывать IP и порты в имена (выводит числа), что значительно ускоряет работу. #network #ss #security 📲 Мы в MAX 👉@bash_srv
768
14
🚀 Подборка полезных 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 Типичный Сисадмин https://max.ru/channel_win_sysadmin Системный Администратор Windows https://max.ru/channel_linux_admin Linux: Системный администратор https://max.ru/channel_linuxmod Linux https://max.ru/channel_i_linux Системный администратор https://max.ru/channel_devopslib DevOps, SRE, Sysadmin https://max.ru/channel_devops_star DevOps Star (Звезда Девопса) Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак Английский с нуля 🇬🇧 https://max.ru/UchuEnglish 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С https://max.ru/channel_DevLab1C 1С:Предприятие 8 Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика https://max.ru/channel_cpp_geek C++ geek Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Rust📌 https://max.ru/channel_rust_lib Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика https://max.ru/channel_java_geek Java Geek 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 Обучающие видео, книги по Физике и Математике Вакансии в IT📌 https://max.ru/progjob https://max.ru/channel_rabotait Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Городские📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП https://max.ru/channel_krasnodar_novosty Краснодар Новости https://max.ru/channel_novosibirsk_novosti Новосибирск https://max.ru/channel_samara_novosti Новости Самары https://max.ru/channel_ekaterinburg_novosti Новости Екатеринбурга https://max.ru/channel_kazan_novosti Новости Казани https://max.ru/channel_omsk_novosti Новости Омска https://max.ru/channel_moskva_24 Москва 24
603
15
Быстрая очистка содержимого файла без его удаления Частая задача при администрировании это обнулить логи или конфигурационные файлы, сохранив права доступа и дескрипторы, если файл занят процессом. Команда: > filename.log Или альтернативный вариант: true > filename.log Техническое пояснение: Оператор > перенаправляет stdout в файл. Так как левая часть команды отсутствует (или равна true), в файл записывается пустая строка, что приводит к усечению файла до нулевого размера (truncate). Это безопаснее, чем удаление и создание файла заново, так как не меняется inode. 📲 Мы в MAX 👉@bash_srv
588
16
Использование «Strict Mode» в Bash-скриптах По умолчанию Bash не останавливает выполнение скрипта при возникновении ошибок, ч
Использование «Strict Mode» в Bash-скриптах По умолчанию Bash не останавливает выполнение скрипта при возникновении ошибок, что может привести к непредсказуемым последствиям в цепочках команд. Для повышения надежности скриптов рекомендуется начинать их со следующей конструкции. Код: #!/bin/bash set -euo pipefail Разбор параметров: - set -e: Останавливает скрипт, если любая команда завершилась с ошибкой (код возврата не 0). - set -u: Считает обращение к несуществующей переменной ошибкой и останавливает скрипт. - set -o pipefail: Возвращает код ошибки, если хотя бы одна команда в конвейере (pipe) завершилась неудачно (по умолчанию Bash берет код возврата только последней команды). 📲 Мы в MAX 👉@bash_srv
724
17
🔁 Как перезапускать сервис только если он завис? Иногда не хочется перезапускать сервис "на всякий случай", но вот если он р
🔁 Как перезапускать сервис только если он завис? Иногда не хочется перезапускать сервис "на всякий случай", но вот если он реально завис — другое дело. Вот простой способ проверять, активен ли сервис, и перезапускать его при зависании: #!/bin/bash SERVICE="nginx" if ! systemctl is-active --quiet "$SERVICE"; then echo "$(date): $SERVICE не активен, пробую перезапустить..." >> /var/log/service_monitor.log systemctl restart "$SERVICE" else echo "$(date): $SERVICE работает нормально" >> /var/log/service_monitor.log fi 🛠 Можно добавить в крон, например, проверку каждые 5 минут: */5 * * * * /usr/local/bin/check_nginx.sh 📁 Не забудь сделать скрипт исполняемым: chmod +x /usr/local/bin/check_nginx.sh 💡 Можно заменить nginx на любой другой системный сервис. 📲 Мы в MAX 👉@bash_srv
801
18
🔥 Bash-фишка дня: замена строк в файле без sed и awk Иногда хочется быстро заменить строку в файле без сложных конструкций.
🔥 Bash-фишка дня: замена строк в файле без sed и awk Иногда хочется быстро заменить строку в файле без сложных конструкций. Вот способ сделать это с чистым Bash и while read: 🛠 Скрипт: заменить слово в файле #!/bin/bash INPUT="config.txt" OUTPUT="config_new.txt" SEARCH="localhost" REPLACE="127.0.0.1" while IFS= read -r line; do echo "${line//$SEARCH/$REPLACE}" done < "$INPUT" > "$OUTPUT" 📌 Что тут происходит: - IFS= read -r line — читаем файл построчно, без обрезки пробелов. - ${line//$SEARCH/$REPLACE} — заменяем все вхождения $SEARCH на $REPLACE. - Результат сохраняем в новый файл. ⚡️ Подходит, когда sed недоступен (да, бывает) или нужна более понятная логика замены. 📲 Мы в MAX 👉@bash_srv
718
19
🚀 Подборка полезных 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 Типичный Сисадмин https://max.ru/channel_win_sysadmin Системный Администратор Windows https://max.ru/channel_linux_admin Linux: Системный администратор https://max.ru/channel_linuxmod Linux https://max.ru/channel_i_linux Системный администратор https://max.ru/channel_devopslib DevOps, SRE, Sysadmin https://max.ru/channel_devops_star DevOps Star (Звезда Девопса) Excel лайфхак 📌 https://t.me/Excel_lifehack Excel лайфхак Английский с нуля 🇬🇧 https://max.ru/UchuEnglish 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С https://max.ru/channel_DevLab1C 1С:Предприятие 8 Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика https://max.ru/channel_cpp_geek C++ geek Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Rust📌 https://max.ru/channel_rust_lib Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика https://max.ru/channel_java_geek Java Geek 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 Обучающие видео, книги по Физике и Математике Вакансии в IT📌 https://max.ru/progjob https://max.ru/channel_rabotait Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Городские📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП https://max.ru/channel_krasnodar_novosty Краснодар Новости https://max.ru/channel_novosibirsk_novosti Новосибирск https://max.ru/channel_samara_novosti Новости Самары https://max.ru/channel_ekaterinburg_novosti Новости Екатеринбурга https://max.ru/channel_kazan_novosti Новости Казани https://max.ru/channel_omsk_novosti Новости Омска https://max.ru/channel_moskva_24 Москва 24
635
20
🕵️ Ищем процессы, которые используют удалённые (удалённые, но не освобождённые) файлы Бывает, что ты удаляешь лог или большо
🕵️ Ищем процессы, которые используют удалённые (удалённые, но не освобождённые) файлы Бывает, что ты удаляешь лог или большой файл, а место на диске не освобождается? Это потому, что файл всё ещё открыт каким-то процессом! Вот скрипт, который найдёт таких «виновников»: #!/bin/bash echo "🔍 Ищем процессы, держащие открытые удалённые файлы..." lsof | grep '(deleted)' | awk '{print $2}' | sort -u | while read -r pid; do echo "PID: $pid | Команда: $(ps -p $pid -o comm=)" done 📌 Как использовать: chmod +x find_deleted.sh ./find_deleted.sh 💡 Подсказка: иногда помогает systemctl restart соответствующего сервиса, чтобы освободить место. 📲 Мы в MAX 👉@bash_srv
636