Redis: 5 команд, которые сделают вас мастером кеширования
Redis - это не просто хранилище ключ-значение, это швейцарский нож для данных в памяти. Вот команды, которые должны быть в арсенале каждого автоматизатора.
Пример:
EX 3600 устанавливает время жизни ключа в 1 час. Автоматическое удаление устаревших данных - одна из крутейших фич Redis.
Какую самую необычную задачу вы решали с помощью Redis?
🌐 @helcode | #bash
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 - один из самых популярных брокеров сообщений. Вот основные команды для управления им из командной строки.
Пример:
Какие самые интересные паттерны с очередями Dы реализовывали? Work queues, pub/sub?
🌐 @helcode | #bash
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
👀5❤1
Поднимаем локальное окружение с WordPress + MySQL за 5 минут
Нужно быстро протестировать плагин или тему WordPress? Не нужно устанавливать веб-сервер, PHP и MySQL на свою машину. Docker Compose сделает все за Вас!
Пример (docker-compose.yml):
Как использовать:
Весь WordPress и MySQL запускаются в изолированных контейнерах. После остановки данные сохраняются в volume.
🌐 @helcode | #yaml #bash
Нужно быстро протестировать плагин или тему 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 CLI использует те же права доступа, что и веб-консоль. Настройте IAM-роли правильно!
Какие ваши любимые команды AWS CLI?
🌐 @helcode | #bash
Постоянно заходить в веб-консоль 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? Базы данных, Kubernetes?
🌐 @helcode | #bash
Terraform стал стандартом для IaC. Вот шпаргалка по основным командам, которые нужно знать каждому инженеру.
Код:
# Инициализация проекта
terraform init
# Просмотр плана изменений
terraform plan
# Применение изменений
terraform apply
# Уничтожение инфраструктуры
terraform destroy
# Просмотр состояния
terraform show
# Обновление состояния
terraform refresh
Всегда запускайте
terraform plan перед apply! Это покажет, что именно изменится, и спасет от неожиданностей.Какие самые сложные вещи вы описывали в Terraform? Базы данных, Kubernetes?
Команда terraform destroy - это как красная кнопка: нажимаешь, и вся тщательно построенная инфраструктура исчезает. Страшно, но иногда очень нужно.
🌐 @helcode | #bash
🤩2❤1🔥1
Мониторим изменения в файлах inotifywait
Нужно отслеживать изменения в файлах или директориях и автоматически выполнять действия (перезагружать сервис, запускать тесты и т.д.)?
🛠 Варианты использования:
- Автоперезагрузка dev-сервера
- Синхронизация файлов при изменении
- Запуск тестов при изменении кода
🌐 @helcode | #bash
Нужно отслеживать изменения в файлах или директориях и автоматически выполнять действия (перезагружать сервис, запускать тесты и т.д.)?
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
Нужно быстро проанализировать логи и получить статистику?
Преимущества:
➤ Работает с огромными файлами
➤ Гибкие условия фильтрации
➤ Можно считать суммы, средние, группировать
🌐 @helcode | #bash
Нужно быстро проанализировать логи и получить статистику?
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
Идеально для быстрого анализа данных, подготовки данных для скриптов
🌐 @helcode | #bash
Нужно быстро обработать 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
🛠 Лучшие практики:
➤ Используйте надежные парольные фразы
➤ Храните закрытый ключ в безопасном месте
➤ Для конфигов используйте симметричное шифрование
🌐 @helcode | #bash
Нужно безопасно передать конфиденциальные файлы или хранить пароли?
Шифрование с помощью 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 или автоматизировать запросы?
✅ Полезные флаги:
➤
➤
➤
🌐 @helcode | #bash
Нужно протестировать 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 с контекстом
Нужно найти ошибку в логе и понять, что происходило до/после
Экспорт результатов:
🌐 @helcode | #bash
Нужно найти ошибку в логе и понять, что происходило до/после
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
👍6❤1
Дрессируем терминал: история о том, как я приручил автодополнение
Представьте, Вы печатаете длинные пути вручную, как средневековый переписчик. А ведь терминал можно научить понимать вас с полуслова!
Живой пример:
"Раньше я тратил 10 секунд на ввод
Твоя задача: Добавь эти настройки и почувствуй себя волшебником терминала! ✨
🌐 @helcode | #bash
Представьте, Вы печатаете длинные пути вручную, как средневековый переписчик. А ведь терминал можно научить понимать вас с полуслова!
# Волшебная строка в ~/.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
👍6❤4
Детективная история: как я нашел утечку памяти с помощью /proc
Сервер медленно умирал. Оперативка исчезала как деньги перед зарплатой. Виновник - загадочный процесс, пожирающий память.
Оказалось, скрипт на Python бесконечно добавлял данные в список и никогда их не очищал.
🌐 @helcode | #bash
Сервер медленно умирал. Оперативка исчезала как деньги перед зарплатой. Виновник - загадочный процесс, пожирающий память.
# Расследование начинается:
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
Снайперская точность: как научиться убивать процессы по шаблону
Можно использовать
История из жизни: на продакшн-сервере
Всегда проверяй что убиваешь:
🌐 @helcode | #bash
Можно использовать
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? Сделаем это в терминале:
Комбинируйте
🌐 @helcode | #bash
Начальник попросил "быстро посчитать статистику по логам"? Коллеги судорожно открывают 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
👍5❤1
Гадалка для сервера: как предсказывать проблемы до их появления
Системный администратор - словно метеоролог. Лучше предсказать бурю, чем тушить последствия.
Кейс из жизни: подобная "гадалка" предупредила о заполнении диска за 2 для до "катастрофы". Вовремя почистили логи и избежали простоя.
🌐 @helcode | #bash
Системный администратор - словно метеоролог. Лучше предсказать бурю, чем тушить последствия.
#!/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:
Одно подключение по SSH - и все нужные окна уже работают. Выход из сервера - сессия сохраняется. Возвращение - всё на своих местах!
🌐 @helcode | #bash
Зачем судорожно переключаться между 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
"Шпионские страсти": как я отлаживал таинственные сетевые проблемы
Приложение периодически "зависало". Логи чистые. Что происходит?
Оказалось, приложение раз в 5 минут делало DNS-запрос, который иногда таймаутился на 30 секунд!
Когда логи молчат - слушаем сеть!
🌐 @helcode | #bash
Приложение периодически "зависало". Логи чистые. Что происходит?
# Прослушивание сети (требует прав):
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 файлов, а именно: удалить столбцы, переименовать заголовки, фильтровать строки. Ручной труд = недели работы, а с
Бонусный "трюк":
🌐 @helcode | #bash
Представим, что необходимо обработать 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
👍12❤1
Защита SSH: практические меры безопасности
Коллеги, хочу попробовать новый "формат" постов, аля "практический кейс". Следующие 4 поста будут подобны данному, в качестве эксперимента. Буду рад получить обратную реакцию по подобному "формату"! Приступим...
Цель: повысить безопасность SSH-доступа к серверам
Проблема: стандартные настройки SSH уязвимы для брут-форс атак и несанкционированного доступа
Решение: многоуровневая защита SSH
Проверка настроек:
Рекомендации:
- Регулярно обновлять SSH-ключи
- Использовать ключи длиной не менее 4096 бит
- Настроить мониторинг неудачных попыток входа
🌐 @helcode | #bash
Коллеги, хочу попробовать новый "формат" постов, аля "практический кейс". Следующие 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