Helcode | Хелкод | Скрипты и автоматизация
993 subscribers
52 photos
34 links
☎️ Контакты для связи: @helcodeadm
Download Telegram
Redis: 5 команд, которые сделают вас мастером кеширования

Redis - это не просто хранилище ключ-значение, это швейцарский нож для данных в памяти. Вот команды, которые должны быть в арсенале каждого автоматизатора.

Пример:
# Положить значение
SET user:123 "John Doe" EX 3600 # EX - время жизни в секундах

# Получить значение
GET user:123

# Проверить существование ключа
EXISTS user:123

# Установить несколько значений за раз
MSET user:123 "John" user:456 "Jane"

# Увеличить счетчик
INCR page_views


EX 3600 устанавливает время жизни ключа в 1 час. Автоматическое удаление устаревших данных - одна из крутейших фич Redis.

Какую самую необычную задачу вы решали с помощью Redis?

Redis - это диктофон для ваших данных: записал, прослушал, а через час оно само стирается. Удобно!


🌐 @helcode | #bash
👍1
RabbitMQ: управляем очередями как профессионалы

RabbitMQ - один из самых популярных брокеров сообщений. Вот основные команды для управления им из командной строки.

Пример:
# Создать очередь
rabbitmqadmin declare queue name=video_processing durable=true

# Отправить сообщение
rabbitmqadmin publish exchange=amq.default routing_key=video_processing payload="hello"

# Посмотреть статистику
rabbitmqctl list_queues name messages_ready messages_unacknowledged

# Создать пользователя
rabbitmqctl add_user myuser mypassword

# Настроить права
rabbitmqctl set_permissions -p / myuser ".*" ".*" ".*"


durable=true делает очередь устойчивой - сообщения не потеряются при перезагрузке RabbitMQ.

Какие самые интересные паттерны с очередями Dы реализовывали? Work queues, pub/sub?

Команда rabbitmqctl - это как пульт управления для Dаших очередей: можно посмотреть, кто в очереди стоит и сколько народу ждет своей очереди.


🌐 @helcode | #bash
👀51
Поднимаем локальное окружение с WordPress + MySQL за 5 минут

Нужно быстро протестировать плагин или тему WordPress? Не нужно устанавливать веб-сервер, PHP и MySQL на свою машину. Docker Compose сделает все за Вас!

Пример (docker-compose.yml):
version: '3.8'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
volumes:
- db_data:/var/lib/mysql

wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: root
depends_on:
- db

volumes:
db_data:


Как использовать:
docker-compose up -d
# Открываем http://localhost:8080


Весь WordPress и MySQL запускаются в изолированных контейнерах. После остановки данные сохраняются в volume.

Локальное окружение на Docker - это как играть в симулятор жизни: можно экспериментировать, не боясь сломать что-то важное.


🌐 @helcode | #yaml #bash
👍1
AWS CLI: управляем облаком из терминала

Постоянно заходить в веб-консоль AWS неудобно. AWS CLI позволяет управлять всеми сервисами прямо из терминала. Вот самые полезные команды.

Пример:
# Настроить профиль
aws configure

# Посмотреть EC2 инстансы
aws ec2 describe-instances

# Создать S3 бакет
aws s3 mb s3://my-unique-bucket-name

# Загрузить файл в S3
aws s3 cp file.txt s3://my-bucket/

# Создать Lambda функцию
aws lambda create-function --function-name my-function \
--runtime python3.9 --role arn:aws:iam::123456789012:role/lambda-role \
--handler lambda_function.lambda_handler --zip-file fileb://function.zip


AWS CLI использует те же права доступа, что и веб-консоль. Настройте IAM-роли правильно!

Какие ваши любимые команды AWS CLI?

AWS CLI - это как пульт от всего облака: не нужно вставать с кресла, чтобы управлять целым ЦОДом.


🌐 @helcode | #bash
🔥3
Terraform: основные команды для управления инфраструктурой

Terraform стал стандартом для IaC. Вот шпаргалка по основным командам, которые нужно знать каждому инженеру.

Код:
# Инициализация проекта
terraform init

# Просмотр плана изменений
terraform plan

# Применение изменений
terraform apply

# Уничтожение инфраструктуры
terraform destroy

# Просмотр состояния
terraform show

# Обновление состояния
terraform refresh


Всегда запускайте terraform plan перед apply! Это покажет, что именно изменится, и спасет от неожиданностей.

Какие самые сложные вещи вы описывали в Terraform? Базы данных, Kubernetes?

Команда terraform destroy - это как красная кнопка: нажимаешь, и вся тщательно построенная инфраструктура исчезает. Страшно, но иногда очень нужно.


🌐 @helcode | #bash
🤩21🔥1
Мониторим изменения в файлах inotifywait

Нужно отслеживать изменения в файлах или директориях и автоматически выполнять действия (перезагружать сервис, запускать тесты и т.д.)?

inotifywait - утилита для отслеживания событий файловой системы

# Установка
sudo apt install inotify-tools

# Мониторим изменения в JS файлах
inotifywait -m -e modify,create,delete --format "%w%f" ./src/*.js |
while read file; do
echo "Файл $file изменен, перезагружаем сервер..."
pkill -f "node server.js"
node server.js &
done


🛠 Варианты использования:
- Автоперезагрузка dev-сервера
- Синхронизация файлов при изменении
- Запуск тестов при изменении кода

🌐 @helcode | #bash
👍2
Анализируем логи с awk

Нужно быстро проанализировать логи и получить статистику?

awk для сложной обработки текста

# Топ IP-адресов в access.log
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10

# Статистика HTTP-статусов
awk '{print $9}' access.log | sort | uniq -c | sort -nr

# Средний размер ответа по URL
awk '{sum[$7] += $10; count[$7]++} END {for (url in sum) print url, sum[url]/count[url]}' access.log


Преимущества:
➤ Работает с огромными файлами
➤ Гибкие условия фильтрации
➤ Можно считать суммы, средние, группировать

🌐 @helcode | #bash
👍4
Работаем с CSV в командной строке

Нужно быстро обработать CSV файл без открытия Excel?

Комбинация утилит для работы с CSV

# Установка csvkit для удобной работы
pip install csvkit

# Просмотр структуры
csvstat data.csv

# Фильтрация строк
csvgrep -c "status" -m "active" data.csv

# Выбор колонок
csvcut -c "name,email,phone" data.csv

# Сортировка
csvsort -c "date" -r data.csv

# А если нет csvkit - используем awk:
awk -F',' '$3 > 1000 {print $1 "," $3}' data.csv


Идеально для быстрого анализа данных, подготовки данных для скриптов

🌐 @helcode | #bash
👍3
Шифруем файлы с GPG

Нужно безопасно передать конфиденциальные файлы или хранить пароли?

Шифрование с помощью GPG

# Генерация ключевой пары
gpg --full-generate-key

# Шифрование файла для получателя
gpg --encrypt --recipient alice@company.com secret_document.txt

# Расшифровка
gpg --decrypt secret_document.txt.gpg > decrypted.txt

# Шифрование симметричным ключом (только пароль)
gpg --symmetric --cipher-algo AES256 file.txt


🛠 Лучшие практики:

➤ Используйте надежные парольные фразы
➤ Храните закрытый ключ в безопасном месте
➤ Для конфигов используйте симметричное шифрование

🌐 @helcode | #bash
👍2
Работа с API через curl

Нужно протестировать API или автоматизировать запросы?

curl с правильными заголовками и аутентификацией

# Базовый GET запрос
curl -X GET "https://api.example.com/users" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN"

# POST с JSON телом
curl -X POST "https://api.example.com/users" \
-H "Content-Type: application/json" \
-d '{"name": "John", "email": "john@example.com"}'

# Загрузка файла
curl -X POST "https://api.example.com/upload" \
-F "file=@document.pdf" \
-F "description=Important document"

# Сохраняем cookies для сессии
curl -c cookies.txt -X POST "https://api.example.com/login" \
-d "username=user&password=pass"


Полезные флаги:

-v для verbose вывода
--retry 3 для повторения при ошибках
--max-time 10 для таймаута

🌐 @helcode | #bash
👍3
Продвинутый grep с контекстом

Нужно найти ошибку в логе и понять, что происходило до/после

grep с контекстом и дополнительными флагами

# Ищем ошибку с 5 строками контекста после
grep -A 5 "ERROR" application.log

# Контекст до и после
grep -B 3 -A 3 "NullPointerException" server.log

# Рекурсивный поиск с исключением директорий
grep -r "deprecated" ./src --include="*.js" --exclude-dir="node_modules"

# Поиск по шаблону в архивах
zgrep "login failed" /var/log/auth.log.*.gz

# Инвертированный поиск (строки БЕЗ шаблона)
grep -v "DEBUG" application.log


Экспорт результатов:
# Сохраняем с номерами строк
grep -n "critical" app.log > critical_errors.txt

# С цветным выводом в файл
grep --color=always "warning" app.log > warnings.txt


🌐 @helcode | #bash
👍61
Дрессируем терминал: история о том, как я приручил автодополнение

Представьте, Вы печатаете длинные пути вручную, как средневековый переписчик. А ведь терминал можно научить понимать вас с полуслова!

# Волшебная строка в ~/.inputrc
echo "set show-all-if-ambiguous on" >> ~/.inputrc
echo "set completion-ignore-case on" >> ~/.inputrc

# Теперь работает:
cd /u/sh/app [TAB] → cd /usr/share/applications
git ch[TAB] → git checkout
docker p[TAB] → docker ps


Живой пример:
"Раньше я тратил 10 секунд на ввод cd /var/log/nginx/. Теперь просто cd /v/l/n/[TAB] — и я уже там! За день экономлю 5-10 минут чистого времени."

Твоя задача: Добавь эти настройки и почувствуй себя волшебником терминала!

🌐 @helcode | #bash
👍64
Детективная история: как я нашел утечку памяти с помощью /proc

Сервер медленно умирал. Оперативка исчезала как деньги перед зарплатой. Виновник - загадочный процесс, пожирающий память.

# Расследование начинается:
cat /proc/meminfo # Общая картина преступления
ps aux --sort=-%mem | head -10 # Подозреваемые процессы

# Глубокий анализ подозреваемого:
ls -la /proc/1234/fd # Какие файлы открыл процесс?
cat /proc/1234/status # Подробное досье
cat /proc/1234/maps # Карта памяти процесса


Оказалось, скрипт на Python бесконечно добавлял данные в список и никогда их не очищал. lsof -p 1234 показал тысячи открытых файловых дескрипторов.

/proc - это детективное агентство для расследования проблем с процессами.

🌐 @helcode | #bash
🔥5👎1
Снайперская точность: как научиться убивать процессы по шаблону

Можно использовать killall как дробовик - стрелять по площади. Но зачастую это будет опасно:

# Дробовик (опасно!):
killall python # Убьет ВСЕ python процессы

# Более точно:
pkill -f "python data_processor.py" # Только конкретный скрипт

# Еще точнее — с проверкой:
pgrep -f "python data_processor.py" | xargs kill -TERM # Вежливая просьба :)
sleep 5
pgrep -f "python data_processor.py" | xargs kill -KILL # Принудительно :(


История из жизни: на продакшн-сервере killall java остановил не только проблемное приложение, но и три критичных сервиса. Минутная паника научила меня точности...

Всегда проверяй что убиваешь: pgrep -fl "pattern" покажет список целей.

🌐 @helcode | #bash
🔥7👌2
Цирк с конвейерами: обработка логов

Начальник попросил "быстро посчитать статистику по логам"? Коллеги судорожно открывают Excel? Сделаем это в терминале:

# Анализ access.log:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10

# Топ-10 самых частых ошибок:
grep "ERROR" app.log | awk -F']' '{print $2}' | sort | uniq -c | sort -nr | head -10

# Время ответа по процентам
cat access.log | awk '{print $NF}' | sort -n |
awk '{
data[NR] = $1
} END {
print "50%: " data[int(NR*0.5)]
print "95%: " data[int(NR*0.95)]
print "99%: " data[int(NR*0.99)]
}'


Комбинируйте grep, awk, sort, uniq, это значительно ускорит и упростит работу с логами!

🌐 @helcode | #bash
👍51
Гадалка для сервера: как предсказывать проблемы до их появления

Системный администратор - словно метеоролог. Лучше предсказать бурю, чем тушить последствия.

#!/bin/bash
# crystal_ball.sh - мой хрустальный шар

# Предсказание дисковых проблем:
df -h | awk '$5 > 80 {print "ВНИМАНИЕ: " $6 " заполнен на " $5}'

# Предсказание нехватки памяти:
free -h | grep Mem | awk '{if ($3/$2 * 100 > 85) print "Скоро закончится память!"}'

# Предсказание сетевых проблем:
netstat -an | grep :80 | wc -l |
awk '{if ($1 > 1000) print "Слишком много подключений к порту 80"}'

# Предсказание перегруза CPU:
uptime | awk '{if ($(NF-2) > 5.0) print "Система перегружена! Load average: " $(NF-2)}'


Кейс из жизни: подобная "гадалка" предупредила о заполнении диска за 2 для до "катастрофы". Вовремя почистили логи и избежали простоя.

🌐 @helcode | #bash
👍9❤‍🔥1
Театр одного актера: автоматизируем рутину с tmux

Зачем судорожно переключаться между 10 терминалами. Глянем на tmux:

# Создаем рабочее пространство:
tmux new-session -s "monitoring" -d
tmux new-window -t "monitoring:1" -n "logs"
tmux new-window -t "monitoring:2" -n "metrics"

# Настраиваем панели:
tmux split-window -h -t "monitoring:logs"
tmux split-window -v -t "monitoring:logs.0"

# Запускаем команды в панелях:
tmux send-keys -t "monitoring:logs.0" "tail -f /var/log/nginx/access.log" Enter
tmux send-keys -t "monitoring:logs.1" "htop" Enter
tmux send-keys -t "monitoring:logs.2" "docker ps -a" Enter

# Подключаемся к сессии:
tmux attach -t "monitoring"


Одно подключение по SSH - и все нужные окна уже работают. Выход из сервера - сессия сохраняется. Возвращение - всё на своих местах!

🌐 @helcode | #bash
👍5🥰1
"Шпионские страсти": как я отлаживал таинственные сетевые проблемы

Приложение периодически "зависало". Логи чистые. Что происходит?

# Прослушивание сети (требует прав):
tcpdump -i any -w capture.pcap host 192.168.1.100 and port 5432

# Анализ трафика:
tcpflow -r capture.pcap -C

# Или проще - в реальном времени:
ngrep -d any port 8080

# Мониторинг конкретного процесса:
strace -f -p 1234 -e trace=network

# Проверка DNS:
dig @8.8.8.8 myapi.com # Обход локального кеша


Оказалось, приложение раз в 5 минут делало DNS-запрос, который иногда таймаутился на 30 секунд! strace показал вызовы connect(), которые висели подозрительно долго.

Когда логи молчат - слушаем сеть!

🌐 @helcode | #bash
🔥6👍2🥰1
Искусство седа

Представим, что необходимо обработать 1000 CSV файлов, а именно: удалить столбцы, переименовать заголовки, фильтровать строки. Ручной труд = недели работы, а с sed - вполне реализуемо за 1 вечер.

# Удаляем столбцы 2 и 4 из CSV:
sed -i 's/^\([^,]*\),[^,]*,\("[^"]*"\|[^,]*\),[^,]*/\1,\3/' file.csv

# Переименовываем заголовки:
sed -i '1s/old_name/new_name/g; 1s/another_old/another_new/g' *.csv

# Фильтруем строки по дате:
sed -n '/2024-01-15/p' large_file.log > filtered.log

# Массовая замена в файлах проекта:
find . -name "*.py" -exec sed -i 's/MySQL/PostgreSQL/g' {} +


Бонусный "трюк":
# Конвертируем JSON в CSV (упрощенно):
echo '{"name":"John","age":30}' | sed 's/{//g; s/}//g; s/":"/,/g; s/","/\n/g'


sed - это не просто "замена текста", это полноценный текстовый трансформер!

🌐 @helcode | #bash
👍121
Защита SSH: практические меры безопасности

Коллеги, хочу попробовать новый "формат" постов, аля "практический кейс". Следующие 4 поста будут подобны данному, в качестве эксперимента. Буду рад получить обратную реакцию по подобному "формату"! Приступим...

Цель: повысить безопасность SSH-доступа к серверам

Проблема: стандартные настройки SSH уязвимы для брут-форс атак и несанкционированного доступа

Решение: многоуровневая защита SSH

# 1. Смена порта и ограничение доступа
# /etc/ssh/sshd_config
Port 58222 # Нестандартный порт
PermitRootLogin no
PasswordAuthentication no # Только по ключам
MaxAuthTries 3
ClientAliveInterval 300

# 2. Настройка fail2ban для блокировки атак
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 58222
maxretry = 3
bantime = 3600

# 3. Ограничение доступа по IP
iptables -A INPUT -p tcp --dport 58222 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 58222 -j DROP

# 4. Двухфакторная аутентификация (Google Authenticator)
# Установка и настройка:
sudo apt install libpam-google-authenticator
google-authenticator # Следуйте инструкциям

# Добавить в /etc/ssh/sshd_config:
AuthenticationMethods publickey,keyboard-interactive


Проверка настроек:
# Тестирование конфигурации
sshd -t
systemctl reload sshd

# Мониторинг подключений
netstat -tulpn | grep :58222
fail2ban-client status sshd


Рекомендации:
- Регулярно обновлять SSH-ключи
- Использовать ключи длиной не менее 4096 бит
- Настроить мониторинг неудачных попыток входа

🌐 @helcode | #bash
8👍6