Helcode | Хелкод | Скрипты и автоматизация
993 subscribers
52 photos
34 links
☎️ Контакты для связи: @helcodeadm
Download Telegram
Автоматизация без техдолга: как писать скрипты, которые проживут 5 лет

Антипаттерны:
- Хардкод путей (/home/user/script.sh).
- Зависимость от версий (python3.6 вместо python3).
- Молчаливые падения (curl без --fail).

Как делать правильно:
1. Конфиги в ~/.config/ — путь стандартизирован для всех Linux-приложений.
2. Параметризация через getopts (bash) или argparse (Python):
   while getopts "c:" opt; do  
case $opt in
c) CONFIG_FILE="$OPTARG" ;;
esac
done


3. Явные проверки:
   [[ -f "$FILE" ]] || { echo "ERROR: $FILE не существует"; exit 1; }


По каким принципам вы проектируете долгоживущие скрипты?

🌐 @automate_today | #bash
2
PowerShell: Почему Write-Host — это грех

Разница:
- Write-Host — выводит текст напрямую в консоль (нельзя перенаправить в файл!).
- Write-Output — попадает в конвейер (pipeline), работает с >, |.

Пример катастрофы:
# Так логи НЕ сохранятся:
Write-Host "Error!" | Out-File log.txt # Пустой файл



Когда использовать Write-Host:
Только для интерактивных скриптов с цветным выводом.

Какие ещё PowerShell-антипаттерны вас раздражают?

🌐 @automate_today | #powershell
👍31
Systemd для Python-скриптов: гайд

Зачем это нужно:
- Автозапуск при загрузке.
- Автоматический перезапуск при падении.
- Централизованное логирование через journalctl.

Шаблон сервиса:
[Unit]  
Description=My Python Bot
After=network.target

[Service]
User=botuser
WorkingDirectory=/opt/bot
ExecStart=/usr/bin/python3 -u bot.py
Restart=always
Environment="API_KEY=secret"

[Install]
WantedBy=multi-user.target



Как включить:
sudo systemctl daemon-reload  
sudo systemctl enable --now mybot



Какие скрипты вы запускаете через systemd?


🌐 @automate_today
2👍2
Оптимизация поиска в логах: grep, awk, или что-то третье?

Бенчмарк (лог 10 ГБ):

| Метод | Время | Память |
|-----------------------------|-----------|------------|
| grep "ERROR" | 12 сек | 1.2 ГБ |
| awk '/ERROR/' | 8 сек | 0.8 ГБ |
| rg "ERROR" (ripgrep) | 3 сек | 0.3 ГБ |


Советы:

- Если нужно только последние ошибки:

  tail -n 10000 huge.log | grep -C 5 "ERROR"  # Контекст 5 строк


- Для сложных фильтров — jq для JSON-логов:

  cat app.log | jq 'select(.level == "ERROR")'  



Какие инструменты вы используете для анализа логов?

🌐 @automate_today | #bash
👍3
Виртуальные окружения Python: как не сломать систему

Типичные ошибки:
- sudo pip install — ломает системные пакеты (например, apt перестаёт работать).
- Отсутствие requirements.txt — "а вот у меня работает!".

Правильный workflow:

1. Создать окружение:


   python -m venv .venv  
source .venv/bin/activate


2. Фиксировать зависимости:

   pip freeze > requirements.txt  


3. Восстанавливать:

   pip install -r requirements.txt  



Как вы управляете зависимостями в Python?


🌐 @automate_today | #bash
👍1
Битва архивов: tar.gz vs zip под микроскопом

Кейсы:

- Для Linux:

  tar czvf backup.tar.gz --exclude="*.tmp" /data  # Сжимает + сохраняет права


- Для Windows:

  zip -r backup.zip /data -x "*.tmp"  # Читается в Проводнике



Скорость (тест 10 ГБ файлов):

- tar + gzip — 2 мин, коэффициент сжатия ~70%.
- zip — 3 мин, коэффициент ~65%.

Какой формат архива вы предпочитаете и почему?

🌐 @automate_today | #bash
👍3🤔2
Парсинг JSON в bash: когда jq — это overkill

Альтернативы:


1. Python (есть везде):

   echo '{"user": "admin"}' | python3 -c "import json, sys; print(json.load(sys.stdin)['user'])"  


2. Awk (для простых случаев):

   echo '{"error": "404"}' | awk -F'"' '{print $4}'  # → 404



Когда точно нужен jq:
- Глубокий поиск: .data.items[] | select(.id == 42)
- Форматирование: jq '.' unformatted.json

Какие хаки для работы с JSON в CLI вы знаете?


🌐 @automate_today | #bash
👍31
Почему автоматизация — это новая грамотность в IT?

Скрипты — как умение читать и писать для IT-специалиста.

Философия "ленивого админа":
"Лучше потратить 3 часа на скрипт, чем 30 минут каждый день на рутину."
Bash-пример для очистки логов:
find /var/log -type f -mtime +7 -delete



Что теряет тот, кто не автоматизирует:
- Время (часы ручной работы)
- Надёжность (человеческие ошибки)
- Карьерные возможности (автоматизация = конкурентное преимущество)

Вы уже автоматизировали свою рутину? Делитесь в комментариях!

🌐 @automate_today | #bash
💯6
ТОП-3 языка для автоматизации в 2025

1. Bash — "швейцарский нож" админа
Для: серверных задач, CI/CD
Не для: сложной логики
# Мониторинг места на диске
df -h | awk '$5 > 80 {print "ALERT: " $6 " is " $5}'



2. Python — универсальный автомат
Для: анализа данных, API, кросс-платформенных решений
# Автопроверка сайта
import requests
if requests.get("https://example.com").status_code != 200:
print("Сайт лежит!")



3. PowerShell — король Windows
Для: Active Directory, облачных сервисов
# Поиск неактивных пользователей
Get-ADUser -Filter {LastLogonDate -lt (Get-Date).AddDays(-90)}



Какой язык используете чаще?

🌐 @automate_today | #python #powershell #bash
2🤔1🦄1
5 скриптов, которые сэкономят вам 100+ часов

1. Автодеплой (Bash):  ssh user@server "cd /app && git pull && docker-compose up -d"  


2. Проверка бэкапов (Python):  import os
if not os.path.exists("/backups/today.zip"):
send_alert("Backup failed!")


3. Уборка временных файлов (PowerShell):  Remove-Item -Path "C:\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue  


4. Мониторинг процессов (Bash):  if ! pgrep -x "nginx" > /dev/null; then systemctl restart nginx; fi  


5. Массовое переименование (Python):  import os
[os.rename(f, f.replace(" ", "_")) for f in os.listdir()]


Какой скрипт вам нужен прямо сейчас? Напишите — поможем с кодом!

🌐 @automate_today | #python #powershell #bash
👍5🔥2
Ошибки новичков в автоматизации

Плохие практики:
1. Хардкод паролей в скриптах → Используйте переменные окружения!
2. Нет обработки ошибок → Добавляйте || exit 1 в Bash,новичков в авв PowerShell.
3. Молчаливые скрипты → Всегда добавляйте логи (`echo "Step 1: Done"`).

🔧 Как исправить?  # Плохо:
mysql -u root -p12345 < dump.sql

# Хорошо:
DB_PASS=$(vault get db_pass)
mysql -u root -p"$DB_PASS" < dump.sql || logger "DB import failed"


Какие ошибки совершали вы?

🌐 @automate_today | #bash
👍5
Будущее автоматизации: что ждёт в 2025?

Тренды:
1. AI-ассистенты для генерации скриптов (GitHub Copilot на стероидах).
2. Самовосстанавливающиеся системы → Скрипты + мониторинг + автофиксы.
3. Low-code для DevOps → Визуальные конструкторы сложных пайплайнов.

Пример AI-помощника (Python):
# Запрос к ИИ: "Напиши скрипт для проверки SSL-сертификатов"
import ssl, socket
def check_ssl(domain):
ctx = ssl.create_default_context()
with ctx.wrap_socket(socket.socket(), server_hostname=domain) as s:
s.connect((domain, 443))
cert = s.getpeercert()
return cert['notAfter']


Какой тренд для вас самый важный?

🌐 @automate_today | #python
Трансформируем .bashrc из свалки в швейцарский нож

Многие администраторы игнорируют алиасы и не подозревают, как можно упростить взаимодействие с Linux

ТОП-3 для старта:
# 1. "Ой, забыл sudo":  
alias fucking='sudo $(history -p !!)'

# 2. Навигация по папкам с fzf (должен быть установлен):
alias cdd='cd $(find . -type d | fzf)'

# 3. Убийца процессов с интерфейсом:
alias killem='ps aux | fzf | awk "{print \$2}" | xargs kill -9'

Cовет:
Добавьте это в ваш .bashrc и сделайте source ~/.bashrc.

Делитесь своими алиасами-спасателями!

🌐 @automate_today | #bash
😁3
Как я "посещаю" митинги без меня

Скрипт для автоматического входа в Zoom/Teams, пока вы пьете кофе:
import pyautogui  # pip install pyautogui
import time

def join_meeting(meeting_id):
pyautogui.hotkey('ctrl', 'alt', 'm') # Горячие клавиши Zoom
time.sleep(1) # Ждем открытия окна
pyautogui.write(meeting_id)
pyautogui.press('enter')

Лайфхак:
Добавьте time.sleep(1800) и pyautogui.hotkey('alt', 'q') для авто-выхода через 30 мин.

Какие нерабочие процессы вы автоматизировали?

🌐 @automate_today | #python
3
3 команды, которые значительно повысят вашу продуктивность в PowerShell

Для сисадминов и не только:

1. Экстренная остановка "зависших" процессов:
 
Get-Process | Where CPU -gt 90 | Stop-Process -Force


2. Поиск и удаление "гигабайтового мусора":
Get-ChildItem -Recurse | Where Length -gt 1GB | Remove-Item


3. Парсинг сайта без браузера:
(Invoke-WebRequest -Uri "https://example.com").Content


Какой ваш любимый one-liner?

🌐 @automate_today | #powershell
👍3
Как мой скрипт удалил продакшен

Анти-кейс:
# Очистка логов (казалось бы...)
rm -rf $LOGS_DIR/*


Что пошло не так:
- Переменная LOGS_DIR оказалась пустой → удалил /
- Сервер упал через 2 секунды

Как починили:
1. Резервные копии (спасибо, rsync!)
2. Добавили проверки:
[[ -z "$LOGS_DIR" ]] && { echo "Error: LOGS_DIR is empty!"; exit 1; }


Ваши самые эпичные фейлы?

🌐 @automate_today | #bash
👍3😁2
⚙️ Полезная фича VSCode

🛠️ Речь о: SSH + VSCode Remote для редактирования файлов на сервере прямо из IDE

Как настроить:
1. Установите расширение Remote - SSH
2. Добавьте сервер через F1 → Remote-SSH: Add New Host
3. Редактируйте файлы как локальные

📌 Фишки:
- Автодополнение кода на удаленном сервере
- Запуск терминала прямо в VSCode
- Нет риска "а вдруг я изменю продакшен?" (подсветка окружения)

Какие инструменты вы открыли для себя слишком поздно?

🌐 @automate_today
👍5
Скрипт, который поможет избежать рутины

Автоматизация онбординга новых сотрудников:
1. Создает учетки в AD/GitLab
2. Генерирует пароли и сохраняет в 1Password
3. Отправляет приветственное письмо

Код (упрощенный):
def onboard_employee(name, email):
create_ad_account(name)
setup_gitlab_access(email)
send_welcome_email(name, temp_password)


Эффект:
- Время онбординга ↓ с 3 дней до 1 часа
- HR перестали беспокоить по каждой мелочи

Какие процессы в вашей компании кричат об автоматизации?

@automate_today | #python
3👍1
Почему SSH в большинстве ситуаций — дырявое ведро

Типичные ошибки:
1. Парольная аутентификация вместо ключей
2. Порт 22 открыт для всех IP
3. Нет fail2ban

Как исправить:

# /etc/ssh/sshd_config:
PasswordAuthentication no
AllowUsers yourname
Port 49281 # Свой порт вместо 22


Проверка:
ssh-audit your-server.com


Какие ещё уязвимости SSH Вы знаете?

🌐 @automate_today | #bash
💯3
3 скрипта для личной эффективности

1. Автодеплой резюме на GitHub Pages
#!/bin/bash
cd ~/resume && git pull && mkdocs build && git push

2. Еженедельный бэкап Notion
import notion_client  # API Notion
client = notion_client.Client(auth=os.environ["NOTION_TOKEN"])
page = client.get_page("your-page-id")
with open("backup.json", "w") as f:
f.write(json.dumps(page))

3. Скрипт "Напомни мне потом" для Telegram
import schedule, time
def send_reminder():
bot.send_message(chat_id, "Проверить задачу!")
while True:
schedule.run_pending()
time.sleep(60)


🌐 @automate_today | #bash #python
👍2