Вредный совет: как обойти auditd?
🛡Для тестирования защиты
1. Остановка auditd:
- Защита: мониторинг статуса службы через cron.
1. Удаление правил:
- Защита: запрет
1. Перезапись логов:
- Защита: настройка
❗️Важно: эти методы — только для проверки своих систем!
🌐 @helcode | #bash
🛡Для тестирования защиты
1. Остановка auditd:
sudo systemctl stop auditd
- Защита: мониторинг статуса службы через cron.
1. Удаление правил:
sudo auditctl -D
- Защита: запрет
auditctl для обычных пользователей. 1. Перезапись логов:
echo "" > /var/log/audit/audit.log
- Защита: настройка
immutable-флагов на файлы. ❗️Важно: эти методы — только для проверки своих систем!
🌐 @helcode | #bash
👍1😁1
Как автоматизировать создание виртуальных машин?
🫸 Хватит тыкать в GUI — создаём ВМ скриптом!
Ручное создание виртуальных машин — это прошлый век.
⚙️ Автоматизируем это с помощью Vagrant и PowerShell.
Вариант 1: Vagrant (кроссплатформенная магия)
Запуск:
Вариант 2: Hyper-V + PowerShell
❔Вопрос к вам:
Какие инструменты вы используете для автоматизации виртуальной инфраструктуры? Vagrant, Terraform, или что-то своё?
🌐 @helcode | #bash #powershell
🫸 Хватит тыкать в GUI — создаём ВМ скриптом!
Ручное создание виртуальных машин — это прошлый век.
⚙️ Автоматизируем это с помощью Vagrant и PowerShell.
Вариант 1: Vagrant (кроссплатформенная магия)
# Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx
SHELL
end
Запуск:
vagrant up # Создаёт и запускает ВМ
vagrant ssh # Подключается к ней
Вариант 2: Hyper-V + PowerShell
# Создаём новую ВМ
New-VM -Name "MyServer" -MemoryStartupBytes 4GB -NewVHDPath "C:\VMs\MyServer.vhdx" -NewVHDSizeBytes 50GB
Set-VMProcessor -VMName "MyServer" -Count 2
Start-VM -Name "MyServer"
❔Вопрос к вам:
Какие инструменты вы используете для автоматизации виртуальной инфраструктуры? Vagrant, Terraform, или что-то своё?
P.S. Если Vagrant говорит «box not found», проверьте, установили ли вы бокс командой vagrant box add ubuntu/focal64
🌐 @helcode | #bash #powershell
👍1
Тренды автоматизации 2025
Что потенциально будет актуально через год?
1. Адаптивные скрипты — сами подстраиваются под нагрузку (например, масштабируют сервисы).
2. Визуальные workflow — карты процессов вместо тысяч строк кода.
3. Самодокументация — GPT, которая пишет описание для вашего кода (но стоит ли доверять?).
Пример адаптивного скрипта на Python:
Нужно ли учить AI-инструменты для автоматизации? Или старый добрый Bash рулит?
🌐 @helcode | #python
Что потенциально будет актуально через год?
1. Адаптивные скрипты — сами подстраиваются под нагрузку (например, масштабируют сервисы).
2. Визуальные workflow — карты процессов вместо тысяч строк кода.
3. Самодокументация — GPT, которая пишет описание для вашего кода (но стоит ли доверять?).
Пример адаптивного скрипта на Python:
# Мониторит CPU и решает, добавлять ли ресурсы
if current_cpu > threshold:
scale_up(servers=1)
log("Выполнено масштабирование из-за нагрузки")
Нужно ли учить AI-инструменты для автоматизации? Или старый добрый Bash рулит?
🌐 @helcode | #python
👌1
Как работать с API в PowerShell?
Отправляем запросы, не выходя из консоли!
PowerShell предлагает супер-удобные cmdlets для работы с REST API.
Базовый пример: GET-запрос
Отправка данных (POST)
💬 Обсуждение:
С какими API вам чаще всего приходится работать? Расскажите о своих кейсах!
P.S.Если Invoke-RestMethod тормозит, попробуйте добавить -DisableKeepAlive
🌐 @helcode | #powershell
Отправляем запросы, не выходя из консоли!
PowerShell предлагает супер-удобные cmdlets для работы с REST API.
Базовый пример: GET-запрос
# Простой запрос
$response = Invoke-RestMethod -Uri "https://api.github.com/users/octocat"
$response.name
# С заголовками
$headers = @{
"Authorization" = "token YOUR_TOKEN"
}
$response = Invoke-RestMethod -Uri "https://api.github.com/user/repos" -Headers $headers
Отправка данных (POST)
$body = @{
name = "NewRepo"
description = "Created via PowerShell"
} | ConvertTo-Json
Invoke-RestMethod -Uri "https://api.github.com/user/repos" -Method Post -Body $body -Headers $headers -ContentType "application/json"💬 Обсуждение:
С какими API вам чаще всего приходится работать? Расскажите о своих кейсах!
P.S.
🌐 @helcode | #powershell
👍1
Коллеги, всех приветствую!
Думаю, многим знакома рутина: чтобы протестировать новую фичу или настроить базу данных, нужны тонны правдоподобных, но фейковых данных. Делать вручную — долго и скучно.
В новой статье на Хабре разбираем, как автоматизировать этот процесс с помощью библиотеки Faker. Это настоящая фабрика по производству любых данных: от имён и email до полных адресов, номеров кредитных карт и даже текстов Lorem Ipsum.
В материале вас ждёт:
✅ Базовое использование — генерация самых популярных типов данных.
✅ Работа с провайдерами: как создавать специфичные данные (для РФ, например).
✅ Создание собственных провайдеров под уникальные задачи.
https://habr.com/ru/articles/940056/
Думаю, многим знакома рутина: чтобы протестировать новую фичу или настроить базу данных, нужны тонны правдоподобных, но фейковых данных. Делать вручную — долго и скучно.
В новой статье на Хабре разбираем, как автоматизировать этот процесс с помощью библиотеки Faker. Это настоящая фабрика по производству любых данных: от имён и email до полных адресов, номеров кредитных карт и даже текстов Lorem Ipsum.
В материале вас ждёт:
✅ Базовое использование — генерация самых популярных типов данных.
✅ Работа с провайдерами: как создавать специфичные данные (для РФ, например).
✅ Создание собственных провайдеров под уникальные задачи.
https://habr.com/ru/articles/940056/
Хабр
Генерация тестовых данных на Python: руководство по библиотеке Faker
Привет, Хабр! Думаю, многие сталкивались с необходимостью генерации тысячи пользователей. Вручную - не вариант, слишком долго. В данной статье разберу библиотеку Faker. Это генератор реалистичных...
👍4
Самая частая ошибка в cron: «Команда не найдена»
Знакомая история? Скрипт отлично runs из терминала, но в
Всё потому, что
Решение простое и железное: ВСЕГДА использовать полные пути!
❌
✅
❌
✅
Найти полный путь к любой команде можно через
Вывод: полные пути — это маст-хэв для любого крона.
🌐 @helcode | #linux #cron #ошибки #администрирование
Знакомая история? Скрипт отлично runs из терминала, но в
cron -е падает с ошибкой command not found.Всё потому, что
cron работает в минимальном окружении! У него своя, очень скудная переменная PATH (часто просто /usr/bin:/bin). Он не видит ваши $HOME/.bashrc и любимые ~/bin.Решение простое и железное: ВСЕГДА использовать полные пути!
❌
* * * * * myscript.sh✅
* * * * * /home/user/scripts/myscript.sh❌
* * * * * python3 script.py ✅
* * * * * /usr/bin/python3 /path/to/script.pyНайти полный путь к любой команде можно через
which или whereis: which python3 whereis nodeВывод: полные пути — это маст-хэв для любого крона.
🌐 @helcode | #linux #cron #ошибки #администрирование
❤4👍2
Pester: как писать тесты для скриптов?
Ваши скрипты заслуживают тестов!
🛠 Pester — это фреймворк для тестирования PowerShell-кода. Вот как начать.
Простейший тест
Запуск тестов
Реальный пример: тестирование функции
Пишете ли вы тесты для своих скриптов? Если да, поделитесь лучшими практиками!
🌐 @helcode | #powershell #windows #тест
Ваши скрипты заслуживают тестов!
🛠 Pester — это фреймворк для тестирования PowerShell-кода. Вот как начать.
Простейший тест
# Создаём файл MyScript.Tests.ps1
Describe "Проверка функций моего модуля" {
It "Сложение 2+2 должно возвращать 4" {
(2 + 2) | Should -Be 4
}
It "Функция Get-Hello возвращает приветствие" {
Get-Hello -Name "Alice" | Should -Be "Hello, Alice"
}
}
Запуск тестов
Invoke-Pester -Path .\MyScript.Tests.ps1
Реальный пример: тестирование функции
# BeforeAll {
# . .\MyScript.ps1 # Подгружаем тестируемый скрипт
# }
Describe "Get-Hello" {
It "Должна возвращать правильное приветствие" {
Get-Hello -Name "World" | Should -Be "Hello, World"
}
}Пишете ли вы тесты для своих скриптов? Если да, поделитесь лучшими практиками!
P.S. Если тесты не запускаются, проверьте, установлен ли Pester: Install-Module -Name Pester -Force
🌐 @helcode | #powershell #windows #тест
Когда Nmap не справляется (практичные альтернативы)
Nmap тормозит на большой сети?
🛠 Есть решения быстрее и тише.
1️⃣ Masscan: самое быстрое сканирование интернета. Асинхронный движок.
- Для чего: когда нужно просканировать
- Команда:
2️⃣ RustScan: modern-альтернатива на Rust. Находит открытые порты, а затем передает их в Nmap для детального анализа.
- Для чего: сочетание скорости Masscan и мощи Nmap.
- Команда:
3️⃣ Naabu: еще один быстрый сканер портов на Go, часто используется в связке с другими инструментами пентеста.
- Для чего: для интеграции в автоматизированные пайплайны.
🏁 Итог: используйте Nmap для точечного и детального анализа. Для сканирования огромных диапазонов —
🌐 @helcode | #bash #masscan #rustscan #альтернативы #производительность
Nmap тормозит на большой сети?
🛠 Есть решения быстрее и тише.
1️⃣ Masscan: самое быстрое сканирование интернета. Асинхронный движок.
- Для чего: когда нужно просканировать
/16 или больше за минуты.- Команда:
masscan -p1-65535 10.0.0.0/16 --rate=1000002️⃣ RustScan: modern-альтернатива на Rust. Находит открытые порты, а затем передает их в Nmap для детального анализа.
- Для чего: сочетание скорости Masscan и мощи Nmap.
- Команда:
rustscan -a <target> -- -A -sC // Найдет порты RustScan, просканирует Nmap3️⃣ Naabu: еще один быстрый сканер портов на Go, часто используется в связке с другими инструментами пентеста.
- Для чего: для интеграции в автоматизированные пайплайны.
🏁 Итог: используйте Nmap для точечного и детального анализа. Для сканирования огромных диапазонов —
masscan или rustscan.🌐 @helcode | #bash #masscan #rustscan #альтернативы #производительность
👍3
Telegram-бот для алертов — просто и бесплатно
Telegram — идеальный канал для уведомлений:
1. Мгновенные push-уведомления
2. Бесплатно
3. Простая интеграция
🔧 Пример отправки алерта на Python:
Что можно мониторить?
✔️ Загрузка CPU/диска
✔️ Ошибки в логах
✔️ Изменения конфигов (
👉 Настроив бота, вы будете первым узнавать о проблемах!
🌐 @helcode | #telegram #bot
Telegram — идеальный канал для уведомлений:
1. Мгновенные push-уведомления
2. Бесплатно
3. Простая интеграция
🔧 Пример отправки алерта на Python:
python
requests.post(f"https://api.telegram.org/botTOKEN/sendMessage",
json={"chat_id": "ID", "text": "🚨 CPU > 90%!"})
Что можно мониторить?
✔️ Загрузка CPU/диска
✔️ Ошибки в логах
✔️ Изменения конфигов (
inotifywait) 👉 Настроив бота, вы будете первым узнавать о проблемах!
🌐 @helcode | #telegram #bot
👍2
Выбор инструмента для работы с API: requests, httpx или aiohttp?
Стандартный подход к работе с внешними API часто начинается с функции
👨🔬 Рассмотрим три популярные библиотеки для работы с HTTP-запросами в Python.
1.
Оптимальное решение для большинства синхронных задач.
➕ Преимущества: простота использования, интуитивный синтаксис.
➖ Ограничения: требуется самостоятельная реализация повторных попыток и кэширования.
2.
Поддерживает современные стандарты, включая HTTP/2 и асинхронные операции.
➕ Преимущества: совместимость с синхронным и асинхронным кодом, высокая производительность.
➖ Ограничения: для использования асинхронного режима требуется понимание принципов
3.
Предназначена для построения высокопроизводительных асинхронных приложений.
➕ Преимущества: максимальная производительность при работе с большим количеством одновременных запросов.
➖ Ограничения: требует глубокого понимания асинхронного программирования.
Критерии выбора:
* Стандартные синхронные задачи:
* Современные проекты с поддержкой HTTP/2:
* Высоконагруженные асинхронные приложения:
Какой подход к работе с API вы используете в своих проектах?
1.
2.
3.
4. Другое (укажите в комментариях)
Стандартный подход к работе с внешними API часто начинается с функции
requests.get(). Однако в продакшене возникают дополнительные требования: обработка ошибок, повторные попытки подключения, асинхронные вызовы и поддержка современных протоколов. Правильный выбор библиотеки позволяет повысить надежность и эффективность кода.👨🔬 Рассмотрим три популярные библиотеки для работы с HTTP-запросами в Python.
1.
requests (Стандарт для синхронных запросов)Оптимальное решение для большинства синхронных задач.
import requests
response = requests.get('https://api.example.com/data', timeout=5)
data = response.json()
➕ Преимущества: простота использования, интуитивный синтаксис.
➖ Ограничения: требуется самостоятельная реализация повторных попыток и кэширования.
2.
httpx (Современный синхронный и асинхронный клиент)Поддерживает современные стандарты, включая HTTP/2 и асинхронные операции.
import httpx
# Асинхронный режим
async with httpx.AsyncClient() as client:
response = await client.get('https://api.example.com/data')
data = response.json()
➕ Преимущества: совместимость с синхронным и асинхронным кодом, высокая производительность.
➖ Ограничения: для использования асинхронного режима требуется понимание принципов
async/await.3.
aiohttp (Специализированная библиотека для асинхронных задач)*Предназначена для построения высокопроизводительных асинхронных приложений.
import aiohttp
import asyncio
async def fetch_data():
async with aiohttp.ClientSession() as session:
async with session.get('https://api.example.com/data') as resp:
return await resp.json()
# Запуск асинхронной функции
data = asyncio.run(fetch_data())
➕ Преимущества: максимальная производительность при работе с большим количеством одновременных запросов.
➖ Ограничения: требует глубокого понимания асинхронного программирования.
Критерии выбора:
* Стандартные синхронные задачи:
requests* Современные проекты с поддержкой HTTP/2:
httpx* Высоконагруженные асинхронные приложения:
aiohttpКакой подход к работе с API вы используете в своих проектах?
1.
requests (синхронный подход)2.
httpx (современное решение)3.
aiohttp (асинхронная обработка)4. Другое (укажите в комментариях)
P.S. Сравнительный анализ библиотек помогает выбрать оптимальное решение для конкретных задач разработки, учитывая требования к производительности и масштабируемости.
🔥2❤1
Как мониторить логи в реальном времени?
⏳ Не ждите, пока пользователи пожалуются — ловите ошибки сразу!
Мониторинг Nginx/Apache:
Отслеживание системных ошибок (journalctl):
Инструмент inotifywait для отслеживания изменений файлов:
👉 Так вы узнаете о проблемах раньше пользователей.
🌐 @helcode | #bash #мониторинг #логи
⏳ Не ждите, пока пользователи пожалуются — ловите ошибки сразу!
Мониторинг Nginx/Apache:
tail -f /var/log/nginx/error.log | grep --line-buffered "error\|failed" | while read line; do
echo "Warning! $line" | send_to_telegram.sh
done
Отслеживание системных ошибок (journalctl):
journalctl -f -u your_service | grep -i "critical\|error"
Инструмент inotifywait для отслеживания изменений файлов:
inotifywait -m /etc/nginx -e modify | while read path action file; do
echo "Файл $file изменён! Проверьте конфиг!"
done
👉 Так вы узнаете о проблемах раньше пользователей.
🌐 @helcode | #bash #мониторинг #логи
🔥4
Как работать с JSON в PowerShell?
🔧 Парсим, создаём и преобразуем JSON без боли!
PowerShell легко конвертирует объекты в JSON и обратно.
👨🔬 Преобразование объекта в JSON
📖 Чтение JSON из файла
Работа с вложенными свойствами
💬 Обсуждение:
Какие самые интересные задачи с JSON вам приходилось решать в PowerShell?
🌐 @helcode | #powershell #json #автоматизация
🔧 Парсим, создаём и преобразуем JSON без боли!
PowerShell легко конвертирует объекты в JSON и обратно.
👨🔬 Преобразование объекта в JSON
$user = @{
name = "Alice"
age = 30
hobbies = @("coding", "gaming")
}
$user | ConvertTo-Json -Depth 3
# Результат:
# {
# "name": "Alice",
# "age": 30,
# "hobbies": ["coding", "gaming"]
# }📖 Чтение JSON из файла
$data = Get-Content -Path "config.json" -Raw | ConvertFrom-Json
$data.name
Работа с вложенными свойствами
$response = Invoke-RestMethod -Uri "https://api.github.com/users/octocat"
$response.login
$response.created_at
💬 Обсуждение:
Какие самые интересные задачи с JSON вам приходилось решать в PowerShell?
P.S. Если ConvertFrom-Json ругается на глубину, увеличьте параметр -Depth
🌐 @helcode | #powershell #json #автоматизация
👍1
try-except: спасательный круг или тихий убийца вашего кода?
⚙️ Конструкция
Рассмотрим частые ошибки и способы их избежать.
⚠️ Ошибка 1: слишком широкий обработчик исключений
Такой код перехватит все исключения, включая системные (например,
✅ Решение: явно указывайте типы исключений, которые вы ожидаете и можете обработать.
⚠️ Ошибка 2: "глухой" обработчик (silent failure)
Код проглатывает ошибку, и программа продолжает работать в невалидном состоянии.
✅ Решение: всегда как минимум логируйте исключение.
⚠️ Ошибка 3: непреднамеренная обработка исключений в цикле
Одно исключение внутри цикла может остановить всю обработку, если перехватывать его неправильно.
Ключ к эффективному использованию
🌐 @helcode | #python #автоматизация
⚙️ Конструкция
try-except — первый инструмент, который приходит на ум для обработки ошибок. Но ее неаккуратное использование может скрыть критические проблемы, привести к неожиданному поведению программы и затруднить отладку. Слишком широкий except — все равно что лечить все болезни обезболивающим: симптомы уйдут, а причина останется.Рассмотрим частые ошибки и способы их избежать.
⚠️ Ошибка 1: слишком широкий обработчик исключений
Такой код перехватит все исключения, включая системные (например,
KeyboardInterrupt).# ПЛОХО: Перехватывает вообще всё
try:
risky_operation()
except: # <- Ничего не указано!
print("Что-то пошло не так")
✅ Решение: явно указывайте типы исключений, которые вы ожидаете и можете обработать.
# ХОРОШО: Точечная обработка
try:
risky_operation()
except (ValueError, IndexError) as e: # <- Конкретные исключения
print(f"Обработали ожидаемую ошибку: {e}")
⚠️ Ошибка 2: "глухой" обработчик (silent failure)
Код проглатывает ошибку, и программа продолжает работать в невалидном состоянии.
# ОПАСНО: Ошибка просто исчезает
try:
save_to_database(data)
except:
pass # Ничего не происходит. Данные не сохранены, а мы и не знаем.
✅ Решение: всегда как минимум логируйте исключение.
# ЛУЧШЕ: Фиксируем проблему
import logging
try:
save_to_database(data)
except DatabaseError as e:
logging.error(f"Ошибка записи в БД: {e}") # Сообщение в лог
# Возможно, здесь стоит повторно бросить исключение или выполнить иное действие
⚠️ Ошибка 3: непреднамеренная обработка исключений в цикле
Одно исключение внутри цикла может остановить всю обработку, если перехватывать его неправильно.
# Осторожно: Одна ошибка прервет весь цикл
data = [1, 2, "three", 4, 5] # Строка вызовет TypeError при сложении
total = 0
for num in data:
try:
total += num
except TypeError:
# Обработали для элемента "three", цикл продолжается
print(f"Элемент {num} не является числом")
print(total) # 12
Ключ к эффективному использованию
try-except — предсказуемость. Обрабатывайте только те ошибки, которые вы можете корректно исправить или проинформировать о них систему логирования. Все остальные исключения лучше позволить всплыть наверх, где их обработает более общий обработчик или где разработчик увидит понятный traceback.P.S. Правильно настроенная обработка исключений — это не про то, чтобы скрыть проблемы, а про то, чтобы управлять ими предсказуемо и предоставлять четкую информацию для диагностики.
🌐 @helcode | #python #автоматизация
👍2
Самовосстановление — как скрипты могут чинить сервера?
🚨 Проблема: сервис упал, диск переполнен, а вас нет на месте.
🛠 Решение: скрипты, которые не только мониторят, но и исправляют!
Авторестарт сервиса, если он упал:
Очистка диска при нехватке места:
Блокировка IP при атаке (fail2ban альтернатива):
👉 Настроил и забыл — скрипты работают за вас!
🌐 @helcode | #bash #скрипты
🚨 Проблема: сервис упал, диск переполнен, а вас нет на месте.
🛠 Решение: скрипты, которые не только мониторят, но и исправляют!
Авторестарт сервиса, если он упал:
if ! systemctl is-active --quiet nginx; then
systemctl restart nginx
curl -X POST "https://api.telegram.org/.../sendMessage" -d "chat_id=...&text=NGINX перезапущен!"
fi
Очистка диска при нехватке места:
if [ $(df / --output=pcent | tail -1 | tr -d '%') -gt 90 ]; then
find /var/log -type f -mtime +7 -delete
fi
Блокировка IP при атаке (fail2ban альтернатива):
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | awk '$1 > 3 {print $2}' | while read ip; do
iptables -A INPUT -s $ip -j DROP
done 👉 Настроил и забыл — скрипты работают за вас!
🌐 @helcode | #bash #скрипты
👍5👎1
Лучшие модули для DevOps
🛠 Набор must-have инструментов для каждого инженера!
Вот список модулей, которые реально экономят время.
1. PSWindowsUpdate
2. Az (Azure PowerShell)
3. DBATools (для работы с БД)
4. PSScriptAnalyzer (проверка качества кода)
5. ImportExcel (работа с Excel без Excel)
Вопрос:
Какие ваши любимые модули PowerShell? Дополните список!
🌐 @helcode | #powershell
🛠 Набор must-have инструментов для каждого инженера!
Вот список модулей, которые реально экономят время.
1. PSWindowsUpdate
Install-Module -Name PSWindowsUpdate -Force
Get-WindowsUpdate -Install -AcceptAll -AutoReboot
2. Az (Azure PowerShell)
Install-Module -Name Az -Force
Connect-AzAccount
Get-AzVM
3. DBATools (для работы с БД)
Install-Module -Name dbatools -Force
Get-DbaDatabase -SqlInstance "server01" | Where-Object Name -eq "mydb"
4. PSScriptAnalyzer (проверка качества кода)
Install-Module -Name PSScriptAnalyzer -Force
Invoke-ScriptAnalyzer -Path .\MyScript.ps1
5. ImportExcel (работа с Excel без Excel)
Install-Module -Name ImportExcel -Force
Get-Process | Export-Excel -Path "processes.xlsx"
Вопрос:
Какие ваши любимые модули PowerShell? Дополните список!
P.S. Если модуль не устанавливается, проверьте политику выполнения: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
🌐 @helcode | #powershell
👍4
Куда смотрят логи? Настраиваем логирование для cron
Молчащий
По умолчанию
Берём логирование в свои руки!
Перенаправляем вывод (stdout + stderr) в файл:
Можно и раздельно:
Профи-фишка: Логи с датой в названии для ротации.
❗️Важно: экранируйте `%` знаками обратного слеша, чтобы `cron` их не воспринял как перенос строки!
🌐 @helcode | #linux #cron #logging #debugging
Молчащий
cron — самый опасный. Выполнилась задача или упала с ошибкой? Без грамотного логирования вы никогда не узнаете.По умолчанию
cron пытается отправить вывод на почту (MAILTO), но это часто не работает.Берём логирование в свои руки!
Перенаправляем вывод (stdout + stderr) в файл:
* * * * * /path/to/script.sh >> /var/log/myscript.log 2>&1Можно и раздельно:
* * * * * /path/to/script.sh >> /var/log/myscript.log 2>> /var/log/myscript.error.logПрофи-фишка: Логи с датой в названии для ротации.
0 0 * * * /path/to/daily_backup.sh >> "/var/log/backup_$(date +\%Y\%m\%d).log" 2>&1❗️Важно: экранируйте `%` знаками обратного слеша, чтобы `cron` их не воспринял как перенос строки!
🌐 @helcode | #linux #cron #logging #debugging
👍7❤1
PowerShell vs. Bash: битва титанов терминала. Кто победит в скорости?
⚔️ Вечный спор: что выбрать для автоматизации под Windows/Linux? Старый добрый Bash или современный PowerShell? Один славится своей лаконичностью и скоростью на родных сервисах, другой — мощной объектной моделью и кроссплатформенностью. Но что объективно быстрее? Спойлер:ответ — «это зависит от задачи».
Давайте разберем на примере, где каждый силен.
Посчитать количество файлов с расширением
Bash (Linux/macOS/WSL):
➕ Плюсы: максимально близко к ядру ОС. Минимальные накладные расходы. Невероятно быстр для таких системных задач.
➖ Минусы: работает с текстом. Если нужно проанализировать атрибуты файлов — сложно.
PowerShell (Windows/Linux/macOS):
➕ Плюсы: возвращает не текст, а объекты файлов. Дальнейшая обработка (например, по дате создания или размеру) проще и не требует парсинга.
➖ Минусы: запуск полноценного .NET runtime имеет свою стоимость. Для простых задач может быть медленнее.
Постараюсь структурировать и объяснить:
👉 Bash быстрее в чисто файловых операциях, текстовой обработке (
👉 PowerShell быстрее (и точно проще), когда нужно работать со структурированными данными: объектами, JSON, XML, API. Его конвейер передает объекты, а не текст, что исключает ошибки парсинга.
Вердикт: если вам нужно быстро «выполнить и забыть» — Bash может быть шустрее. Если вы строите сложный скрипт с богатой логикой обработки данных — PowerShell выиграет за счет читаемости и мощи.
А что вы чаще используете для своих задач автоматизации?
1. Bash (старая добрая классика)
2. PowerShell (объектная мощь)
3. Python / Другое (уже перешел на скрипты)
4. Зависит от ОС и задачи (использую тот инструмент, который лучше подходит)
🌐 @helcode | #bash #powershell #битва
⚔️ Вечный спор: что выбрать для автоматизации под Windows/Linux? Старый добрый Bash или современный PowerShell? Один славится своей лаконичностью и скоростью на родных сервисах, другой — мощной объектной моделью и кроссплатформенностью. Но что объективно быстрее? Спойлер:
Давайте разберем на примере, где каждый силен.
Посчитать количество файлов с расширением
.log в директории и ее поддиректориях.Bash (Linux/macOS/WSL):
find /path/to/dir -name "*.log" | wc -l
➕ Плюсы: максимально близко к ядру ОС. Минимальные накладные расходы. Невероятно быстр для таких системных задач.
➖ Минусы: работает с текстом. Если нужно проанализировать атрибуты файлов — сложно.
PowerShell (Windows/Linux/macOS):
(Get-ChildItem -Path C:\path\to\dir -Filter *.log -Recurse -File).Count
➕ Плюсы: возвращает не текст, а объекты файлов. Дальнейшая обработка (например, по дате создания или размеру) проще и не требует парсинга.
➖ Минусы: запуск полноценного .NET runtime имеет свою стоимость. Для простых задач может быть медленнее.
Постараюсь структурировать и объяснить:
👉 Bash быстрее в чисто файловых операциях, текстовой обработке (
grep, sed, awk) и запуске других процессов, потому что это нативный язык оболочки в UNIX-подобных системах.👉 PowerShell быстрее (и точно проще), когда нужно работать со структурированными данными: объектами, JSON, XML, API. Его конвейер передает объекты, а не текст, что исключает ошибки парсинга.
Вердикт: если вам нужно быстро «выполнить и забыть» — Bash может быть шустрее. Если вы строите сложный скрипт с богатой логикой обработки данных — PowerShell выиграет за счет читаемости и мощи.
А что вы чаще используете для своих задач автоматизации?
1. Bash (старая добрая классика)
2. PowerShell (объектная мощь)
3. Python / Другое (уже перешел на скрипты)
4. Зависит от ОС и задачи (использую тот инструмент, который лучше подходит)
P.S. Идеального инструмента нет. Есть задача и есть инструмент, который для нее лучше всего подходит. Главное — знать сильные стороны каждого!
🌐 @helcode | #bash #powershell #битва
👍3❤1🤔1
Анализ логов auditd: находим угрозы
Как читать логи и создавать отчёты?
1. Утилиты:
- Поиск по метке:
- Отчёт по файлам:
2. Пример лога:
👉 Что было: пользователь с UID=0 запустил
🌐 @helcode | #bash
Как читать логи и создавать отчёты?
1. Утилиты:
- Поиск по метке:
sudo ausearch -k sudo_usage
- Отчёт по файлам:
sudo aureport -f
2. Пример лога:
type=SYSCALL msg=audit(...): uid=0 comm="rm" key="file_deletion"
👉 Что было: пользователь с UID=0 запустил
rm.🌐 @helcode | #bash
👍3
Ты используешь PowerShell на 10%? Раскрываем скрытые возможности 7-й версии! 🚀
Многие до сих пор представляют PowerShell как просто более мощную командную строку Windows. Но это уже давно не так. PowerShell 7 — это кроссплатформенный (Windows, Linux, macOS), современный движок для автоматизации, который таит в себе фичи, способные сэкономить часы работы.
Вот несколько скрытых жемчужин, о которых вы могли не знать:
1. Параллельное выполнение с
Забудьте о медленном последовательном переборе. Теперь можно легко распараллелить задачи.
2. Условный оператор
Наконец-то! Знакомый синтаксис для выполнения команд по условию.
3. Оператор нулевого слияния
Пришли из C#. Идеальны для работы с потенциально
4. Автодополнение на TAB для
Просто нажмите
Эти фичи делают код не только мощнее, но и лаконичнее и читаемее. Параллелизм, удобные операторы и безопасная работа с
А вы уже перешли на PowerShell 7? Какая фича нравится больше всего?
🌐 @helcode | #powershell
Многие до сих пор представляют PowerShell как просто более мощную командную строку Windows. Но это уже давно не так. PowerShell 7 — это кроссплатформенный (Windows, Linux, macOS), современный движок для автоматизации, который таит в себе фичи, способные сэкономить часы работы.
Вот несколько скрытых жемчужин, о которых вы могли не знать:
1. Параллельное выполнение с
ForEach-Object -ParallelЗабудьте о медленном последовательном переборе. Теперь можно легко распараллелить задачи.
# Старое: последовательно (медленно)
1..10 | ForEach-Object { Start-Sleep -Seconds 1; "Обработан элемент $_" }
# Новое: параллельно (быстро!)
1..10 | ForEach-Object -Parallel {
Start-Sleep -Seconds 1
"Обработан элемент $_ в потоке $($env:OS)"
} -ThrottleLimit 5 # Ограничиваем число одновременных потоков
2. Условный оператор
&& и || (как в Bash)Наконец-то! Знакомый синтаксис для выполнения команд по условию.
# Выполнить вторую команду, только если первая успешна
Get-Process -Name "SomeApp" && Write-Host "Процесс найден!"
# Выполнить команду, если первая провалилась
Get-Process -Name "NonExistentApp" || Write-Error "Процесс не найден"
3. Оператор нулевого слияния
?? и присваивания ??=Пришли из C#. Идеальны для работы с потенциально
$null переменными.# Если $name is $null, использовать значение по умолчанию
$displayName = $name ?? "Неизвестный пользователь"
# Присвоить значение переменной, только если она $null
$config ??= Get-Content "config.json" | ConvertFrom-Json
4. Автодополнение на TAB для
-WhatIf и -ConfirmПросто нажмите
Tab после параметра -Confirm или -WhatIf, чтобы быстро выбрать $true или $false.Эти фичи делают код не только мощнее, но и лаконичнее и читаемее. Параллелизм, удобные операторы и безопасная работа с
$null — признаки современного языка скриптинга.А вы уже перешли на PowerShell 7? Какая фича нравится больше всего?
P.S. PowerShell 7 — это как найти у своей старой собаки новые трюки. Очень крутые трюки. Советуем обновиться!
🌐 @helcode | #powershell
👍3🔥1
Когда cron уже не enough? Смотрим в сторону systemd.timer
В чем его суперсила?
🎯 Точность до секунд (в cron — только минуты)
🎯 Запуск после пропуска: Сервер был выключен?
🎯 Зависимости: Можно указать, чтобы задача запускалась только после старта сети (
🎯 Встроенное логирование в
Пример таймера для ежедневного бэкапа в 3:00:
Вывод: для простых задач —
🌐 @helcode | #bash #linux #systemd #cron #automation
Cron — классика, но для сложных сценариев есть более мощная альтернатива — systemd.timer.В чем его суперсила?
🎯 Точность до секунд (в cron — только минуты)
🎯 Запуск после пропуска: Сервер был выключен?
cron пропустит задачу. systemd.timer с опцией Persistent=true — выполнит при следующем включении! 🎯 Зависимости: Можно указать, чтобы задача запускалась только после старта сети (
After=network-online.target) или другого сервиса. 🎯 Встроенное логирование в
journalctl: все логи задачи в одном местеПример таймера для ежедневного бэкапа в 3:00:
/etc/systemd/system/backup.timer[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Вывод: для простых задач —
cron. Для сложных, надежных и интегрированных в систему — systemd.timer.🌐 @helcode | #bash #linux #systemd #cron #automation
🔥5