ch
Feedback
BashMaster

BashMaster

前往频道在 Telegram

Удобные консольные наработки на каждый день для разработчиков, девопсов и сисадминов. Реклама: @Kone4noVasya Канал на бирже: https://telega.in/c/bash_help

显示更多
8 732
订阅者
+624 小时
+127
+21230
帖子存档
😳 Стыдно за ваш пайплайн? Исправьте это за 3 недели Ваши пайплайны нестабильны, а на собеседованиях теряетесь без практики?
😳 Стыдно за ваш пайплайн? Исправьте это за 3 недели Ваши пайплайны нестабильны, а на собеседованиях теряетесь без практики? Приглашаем вас на практикум для инженеров: будем решать реальные задачи и шлифовать пайплайны с фидбэком от эксперта. Всего за 3 недели практикума вы: 👉 Решите 3 реальных кейса — CI для проекта на Python, пересборка проекта с включением изменений, траблшутинг 👉 Получите фидбэк от эксперта — Вячеслав Федосеев (TeamLead DevOps в «Честный знак», 20+ лет в IT) разберёт ваши решения и ошибки 👉 Будете тренироваться на best practices — только практика с реальными инженерными задачами 👉 Сможете учиться без отрыва от работы — 1 задача в неделю 👉 Оформите портфолио для собеседования — решения останутся у вас в репозитории, чтобы сразу показать на собеседовании ☑️ Станете увереннее и поймёте, как пайплайн работает изнутри ❗️Для инженеров с опытом от 1 года, знакомых с Git и GitLab CI, которым не хватает практики и фидбэка. Ознакомиться с программой и присоединиться к обучению — по ссылке

⚙️ Brabus Recon Suite (BRS) ✔️Набор Bash-скриптов для оффлайн-разведки и внутреннего аудита. ➡️ О BRS 💠CLI-интерфейс на Bash
⚙️ Brabus Recon Suite (BRS) ✔️Набор Bash-скриптов для оффлайн-разведки и внутреннего аудита. ➡️ О BRS 💠CLI-интерфейс на Bash 💠Работает с любых путей, без установки 💠Сохраняет все результаты по папкам с метками времени 💠Поддерживает 7 языков 💠Не требует облаков, токенов или сторонних API ➡️ Что входит 💠network_discovery.sh — поиск устройств в сети (ping, arp, быстрая портовая разведка) 💠port_scanner.sh — подробный портскан через nmap, masscan 💠vulnerability_scanner.sh — скрипты nmap, nikto, sqlmap, слабые пароли 💠system_info.sh — вывод сведений об ОС, железе, конфигурации, защите 💠attack_tools.sh — брутфорс и активные тесты (опционально, с предупреждением) ➡️ Поддерживаемые инструменты 💠nmap, masscan — сканеры портов 💠hydra, john — проверка паролей 💠nikto, sqlmap — уязвимости веба и SQL 💠ettercap, aircrack-ng — сетевые проверки ▶️Интерфейс поддерживает: EN, RU, DE, FR, ES, ZH, TR . Язык выбирается в configs/language.conf или на первом запуске. ➡️ Минимальные требования 💠Ubuntu 22.04+ / Debian / любая bash-совместимая система 💠2ГБ+ свободного места для логов 💠Права на установку зависимостей (если не установлены) 🐙 Перейти на Github 🔨 bash_help

⚙️ Teller ✔️Инструмент управления секретами с открытым исходным кодом для разработчиков. Он позволяет безопасно хранить и упр
⚙️ Teller ✔️Инструмент управления секретами с открытым исходным кодом для разработчиков. Он позволяет безопасно хранить и управлять секретами, учётными данными и данными конфигурации в разных средах и у облачных провайдеров. ➡️ Некоторые возможности Teller: 💠создание и управление секретами у нескольких облачных провайдеров, таких как AWS, Azure, GCP и других; 💠шифрование и дешифрование секретов с использованием стандартных отраслевых алгоритмов; 💠генерация динамических секретов по запросу, таких как учётные данные базы данных, ключи SSH или токены OAuth; 💠изменение и отзыв секретов автоматически или вручную, в зависимости от политик или событий; 💠аудит и отслеживание активности и использования секретов с помощью журналов и метрик; 💠сотрудничество с членами команды и безопасный обмен секретами с использованием ролей и разрешений. ▶️Teller совместим с популярными инструментами и фреймворками, такими как Terraform, Kubernetes, Docker, Ansible и другими. 🐙 Перейти на Github 🔨 bash_help

⚙️ Как настроить автоматическое обновление SSL-сертификатов Let’s Encrypt с помощью Certbot на Ubuntu ✔️Let’s Encrypt — это б
⚙️ Как настроить автоматическое обновление SSL-сертификатов Let’s Encrypt с помощью Certbot на Ubuntu ✔️Let’s Encrypt — это бесплатный центр сертификации. Он позволяет выпускать SSL-сертификаты для HTTPS. Certbot — это утилита для автоматического получения и обновления этих сертификатов. Комбо для тех, кто не хочет возиться с ручной генерацией ключей и походами в коммерческие CA. ➡️ Установка Certbot
sudo apt update
sudo apt install certbot
💠Certbot нужно запускать на том же сервере, для которого вы хотите выпустить сертификат. ▶️Получение сертификата (и вывод информации о текущих сертификатах)
sudo certbot certonly --standalone -d project.com -d www.project.com
sudo certbot certificates
💠 --standalone означает, что Certbot временно поднимет собственный сервер на 80 порту для валидации домена. Проверьте, что порт 80 не занят! Иначе ничего не заработает. ▶️Если там ваш Nginx или Docker — остановите его на время выполнения команды:
sudo systemctl stop nginx
➡️ Автоматическое обновление через systemd ▶️После установки Certbot автоматически добавляет systemd-таймер:
systemctl list-timers | grep certbot
💠Проверить, что автообновление работает:
sudo certbot renew --dry-run
💠Если всё хорошо:
Certbot dry-run was successful.
💠Логи последних обновлений:
journalctl -u certbot.service --no-pager --since "2 days ago"
➡️ Обновление через Cron ▶️Иногда systemd-таймеры неудобны, особенно если вы настраиваете всё через Ansible или shell-скрипты. В этом случае можно использовать Cron. 💠Отключаем таймер:
sudo systemctl stop certbot.timer
sudo systemctl disable certbot.timer
💠Добавляем Cron-задачу:
sudo crontab -e
💠Пример:
0 0 1 * * /usr/bin/certbot renew --standalone --quiet
💠Чтобы узнать точный путь к certbot, используйте:
which certbot
➡️ Скрипт на все случаи жизни ▶️Вместо описания всего в кроне, можно создать bash-скрипт
#!/bin/bash

APP_PATH="/home/projects/project"
DOMAIN="project.com"

FULL_CHAIN_SRC="/etc/letsencrypt/live/${DOMAIN}/fullchain.pem"
PRIVATE_KEY_SRC="/etc/letsencrypt/live/${DOMAIN}/privkey.pem"
FULL_CHAIN_DIST="${APP_PATH}/volumes/etc/ssl/certs/project_com.full.crt"
PRIVATE_KEY_DIST="${APP_PATH}/volumes/etc/ssl/private/project_com.key"

echo "Starting script execution: $(date "+%Y-%m-%d %H:%M:%S")"

echo "Stopping the service..."
systemctl stop my-project.service

echo "Renewing the certificates..."
/usr/bin/certbot renew --standalone --quiet
/usr/bin/certbot certificates

echo "Copying the certificates to the project..."
cp -f "$FULL_CHAIN_SRC" "$FULL_CHAIN_DIST"
cp -f "$PRIVATE_KEY_SRC" "$PRIVATE_KEY_DIST"

echo "Setting correct permissions for the certificates..."
chmod 644 "$FULL_CHAIN_DIST"
chmod 644 "$PRIVATE_KEY_DIST"

echo "Running the service..."
systemctl start my-project.service

echo "End of script execution: $(date "+%Y-%m-%d %H:%M:%S")"
▶️А в кроне вызываем его так:
0 0 1 * * sh /home/projects/project/cert-renew.sh >> /var/log/project-cert-renew.log 2>&1
🖼️ Дочитать статью на Habr'e 🔨 bash_help

Работать и не уставать, достигать цели, но делать это в кайф - реально! Как научиться делать дела и не выгорать? Психолог взр
Работать и не уставать, достигать цели, но делать это в кайф - реально! Как научиться делать дела и не выгорать? Психолог взрослого человека — канал для айтишников, у которых периодически опускаются руки и отключается мозг, ибо переработки и постоянная тревожность не приводят к другим исходам. ▪️ Как научиться отвлекаться от работы и отдыхать? ▪️ Как совместить кучу рабочих задач и время с семьей? ▪️ Как справиться с прокрастинацией? ▪️ Как не растерять запал, даже если начальник и коллеги 💩 и кажется, что ничего не выходит? Подписывайтесь на канал @vadimpetrovpsi и научитесь работать без упахивания, выгорания и ущерба для личной жизни! 👨🏻‍💻 Псс. Заходите в закреп канала - там много полезного, и даже бесплатный мини-курс по выходу из апатии.

⚙️ Сравнение строк в Bash: 3 практических примера ✔️Работа со строками является частью любого языка программирования. Сценари
⚙️ Сравнение строк в Bash: 3 практических примера ✔️Работа со строками является частью любого языка программирования. Сценарии оболочки Bash ничем не отличаются. Даже синтаксис практически тот же. В этом кратком руководстве вы увидите, как сравнивать строки в сценариях оболочки Bash. ▶️Вот как вы сравниваете строки в Bash.
if [ "$string1" == "$string2" ]
▶️Вы также можете использовать строку напрямую вместо использования переменной.
if [ "$string1" == "This is my string" ]
➡️ Проверьте, равны ли две строки ▶️Если вы хотите проверить, равны ли две строки, вот пример:
#!/bin/bash
string1="MyString"
string2="MyString"
if [ "$string1" == "$string2" ]
then
    echo "Equal Strings"
else
    echo "Strings not equal"
fi
▶️Обратите внимание на пробелы. Между [ и именем переменной и оператором равенства == должен быть пробел. Если вы пропустите здесь какой-либо пробел, вы увидите ошибку типа «ожидается унарный оператор» или отсутствие «]». ➡️ Проверьте, не равны ли строки в Bash ▶️Вместо проверки качества давайте сделаем наоборот и проверим неравенство. Bash также предоставляет оператор отрицания, чтобы вы могли легко использовать условие «если не равно» в сценариях оболочки.
if [ "$string1" != "Not MyString" ]
▶️Полный пример выглядит так:
#!/bin/bash
string1="MyString"

if [ "$string1" != "Not MyString" ]
then
    echo "Not Equal Strings"
else
    echo "Strings equal"
fi
➡️ Проверьте, является ли строка нулевой или пустой в Bash ▶️В отличие от некоторых других языков, таких как C++, в Bash вы можете проверить, является ли строка нулевой или пустой, с помощью одной единственной команды:
if [ -z "$VAR" ]
-z фактически проверяет, равна ли длина переменной нулю или нет. Если переменная не установлена или она пуста (равна « »), длина будет равна нулю и, следовательно, условие вернет true. Полный пример:
#!/bin/bash
string1=
string2=""
if [ -z "$string1" ]
then
    echo "Null Strings"
fi
if [ -z "$string2"]
then
    echo "Empty String"
fi
➡️ Примечание об использовании одинарной скобки «[]» и двойной скобки «[[]]» в сценариях bash ▶️Вы также можете использовать оператор if с двойными скобками, например:
if [[ "$string1" == "My String" ]]
▶️Одинарная скобка — это старое соглашение Posix, имеющее некоторые недостатки. Если вы не используете двойные кавычки вокруг переменных и переменная не определена, она исчезнет из кода, и это приведет к синтаксической ошибке if [ $string1 == "My String" ] ▶️Если переменная $string1 пуста или не определена в приведенном выше коде, эта строка станет эквивалентной if [ == "$string2" ] 🖼️ Ссылка на источник 🔨 bash_help

Полный контроль над Kubernetes через мониторинг и логи ⚡️Хотите уверенно выявлять сбои, мониторить метрики и быстро находить
Полный контроль над Kubernetes через мониторинг и логи ⚡️Хотите уверенно выявлять сбои, мониторить метрики и быстро находить ошибки в k8s? За 12 часов теории и 44 часа практики вы не только освоите широкий стек инструментов, но и best practices по ним. ⚡️Курс «Мониторинг и логирование инфраструктуры в Kubernetes» — быстрый способ научиться выстраивать эффективную систему мониторинга. На обучении вы поймёте:  - Как обеспечить долгосрочное хранение метрик распределённо месяцы и годы для анализа динамики и сравнения графиков - Какие метрики стоит собирать с помощью Prometheus - Как визуализировать мониторинг с помощью Grafana и как грамотно настроить алерты ☄️Старт — 7 июля. Прямо сейчас по промокоду LETO2025 вы можете занять место со скидкой ❗️50%❗️ *промокод вводится при оформлении оплаты Вводите в эксплуатацию мониторинг и логирование инфраструктуры в k8s сразу после курса и станьте ещё востребованнее на рынке IT.  👉🏻Смотреть программу и применить скидку

⚙️ bash-git-prompt — отображение информации о текущем репозитории Git ✔️Инструмент, который интегрирует статус Git прямо в пр
⚙️ bash-git-prompt — отображение информации о текущем репозитории Git ✔️Инструмент, который интегрирует статус Git прямо в приглашение командной строки, позволяя пользователям быстро идентифицировать состояние репозитория. ➡️ Некоторые элементы, которые отображаются в приглашении: 💠Название ветки — показывает текущую ветку. 💠Индикатор отложенных изменений — визуальный сигнал, если есть изменения, подготовленные для фиксации. 💠Предупреждение о неотслеживаемых файлах — оповещает, когда в репозитории есть неотслеживаемые файлы. 💠Периодическая проверка статуса с удалённой ветки — если на удалённой ветке есть новые коммиты, это отображается в приглашении (проверка запускается каждые 5 минут, но может быть отключена). 💠Отображение статуса выхода последней команды — если команда не работает, в приглашении появляется красный символ X и номер статуса выхода. 🐙 Перейти на Github 🔨 bash_help

⚙️ Скрипт для мониторинга системы Linux ✔️Мониторинг ОС является неотъемлемой частью работы системного администратора. Он поз
⚙️ Скрипт для мониторинга системы Linux ✔️Мониторинг ОС является неотъемлемой частью работы системного администратора. Он позволяет выявлять и устранять потенциальные проблемы до того, как они приведут к сбоям или нарушениям в работе компьютера. ▶️Скрипт, который мы будем использовать для мониторинга операционной системы, выглядит следующим образом:
#! /bin/bash
# Сброс всех переменных, которые может использовать система
# Очистка экрана терминала
clear

unset tecreset os architecture kernelrelease internalip externalip nameserver loadaverage

while getopts iv name
do
case $name in
i)iopt=1;;
v)vopt=1;;
*)echo "Invalid arg";;
esac
done

if [[ ! -z $iopt ]]
then
{
wd=$(pwd)
basename "$(test -L "$0" && readlink "$0" || echo "$0")" > /tmp/scriptname
scriptname=$(echo -e -n $wd/ && cat /tmp/scriptname)
su -c "cp $scriptname /usr/bin/monitor" root && echo "Congratulations! Script Installed, now run monitor Command" || echo "Installation failed"
}
fi

if [[ ! -z $vopt ]]
then
{
echo -e
}
fi

if [[ $# -eq 0 ]]
then
{

# Определение переменной tecreset
tecreset=$(tput sgr0)

# Проверка подключения к Интернету
ping -c 1 google.com &> /dev/null && echo -e '\E[32m'"Internet: $tecreset Connected" || echo -e '\E[32m'"Internet: $tecreset Disconnected"

# Определение типа ОС
os=$(uname -o)
echo -e '\E[32m'"Operating System Type :" $tecreset $os

# Определение версии и названия выпуска ОС
cat /etc/os-release | grep 'NAME\|VERSION' | grep -v 'VERSION_ID' | grep -v 'PRETTY_NAME' > /tmp/osrelease
echo -n -e '\E[32m'"OS Name :" $tecreset && cat /tmp/osrelease | grep -v "VERSION" | cut -f2 -d\"
echo -n -e '\E[32m'"OS Version :" $tecreset && cat /tmp/osrelease | grep -v "NAME" | cut -f2 -d\"

# Проверка архитектуры
architecture=$(uname -m)
echo -e '\E[32m'"Architecture :" $tecreset $architecture

# Проверка выпуска ядра
kernelrelease=$(uname -r)
echo -e '\E[32m'"Kernel Release :" $tecreset $kernelrelease

# Определение имени хоста
echo -e '\E[32m'"Hostname :" $tecreset $HOSTNAME

# Определение внутреннего IP
internalip=$(hostname -I)
echo -e '\E[32m'"Internal IP :" $tecreset $internalip

# Определение публичного IP
externalip=$(curl -s ipecho.net/plain;echo)
echo -e '\E[32m'"External IP : $tecreset "$externalip

# Проверка DNS
nameservers=$(cat /etc/resolv.conf | sed '1 d' | awk '{print $2}')
echo -e '\E[32m'"Name Servers :" $tecreset $nameservers

# Проверка вошедших в систему пользователей
who>/tmp/who
echo -e '\E[32m'"Logged In users :" $tecreset && cat /tmp/who

# Мониторинг использования ОЗУ и SWAP
free -h | grep -v + > /tmp/ramcache
echo -e '\E[32m'"Ram Usages :" $tecreset
cat /tmp/ramcache | grep -v "Swap"
echo -e '\E[32m'"Swap Usages :" $tecreset
cat /tmp/ramcache | grep -v "Mem"

# Мониторинг использование диска
df -h| grep 'Filesystem\|/dev/sda*' > /tmp/diskusage
echo -e '\E[32m'"Disk Usages :" $tecreset
cat /tmp/diskusage

# Проверка средней нагрузки
loadaverage=$(top -n 1 -b | grep "load average:" | awk '{print $10 $11 $12}')
echo -e '\E[32m'"Load Average :" $tecreset $loadaverage

# Определение длительности сеанса работы ОС
tecuptime=$(uptime | awk '{print $3,$4}' | cut -f1 -d,)
echo -e '\E[32m'"System Uptime Days/(HH:MM) :" $tecreset $tecuptime

# Сброс значений переменных
unset tecreset os architecture kernelrelease internalip externalip nameserver loadaverage

# Удаление временных файлов
rm /tmp/osrelease /tmp/who /tmp/ramcache /tmp/diskusage
}
fi
shift $(($OPTIND -1))
▶️Прежде чем использовать этот сценарий, установите для файла с кодом следующие настройки доступа:
chmod 755 monitor.sh
▶️Особенностью этого скрипта является то, что его можно установить в ОС, как утилиту. Для этого следует выполнить следующую команду:
./monitor.sh -i
▶️Затем скрипт запросит ввести пароль пользователя root. После завершения установки скрипта, для его запуска требуется просто выполнить команду monitor ▶️Вы можете и не устанавливать скрипт для его работы. Но в таком случае вам придется вручную запускать скрипт, выполняя следующую команду:
./path/to/script/monitor.sh
🖼️ Ссылка на источник 🔨 bash_help

Как DevOps-инженеру сэкономить часы работы и избежать ошибок с помощью AI-инструментов ▶️ воркшоп о учебного центра Слёрм с В
Как DevOps-инженеру сэкономить часы работы и избежать ошибок с помощью AI-инструментов ▶️ воркшоп о учебного центра Слёрм с Виктором Чаплыгиным, Senior Engineer в международном GameDev холдинге. Что будет на воркшопе: Теория: кратко о том, как работают LLM в контексте разработки и эксплуатации. Обзор Cursor IDE — AI-интегрированная IDE с поддержкой кода и терминала. Практика: 🔹 Настройка Cursor IDE — подготовка среды для продуктивной работы с AI; 🔹 Создание и отладка IaC (Kubernetes YAML, Ansible) с помощью AI-ассистентов: выявление и исправление ошибок; 🔹 Генерация понятной и структурированной документации к проектам с помощью AI; 🔹 Разбор реальных кейсов и работа с командной строкой: исправление, пояснение, улучшение команд и манифестов. А ещё — личный опыт и лучшие практики применения GPT-ассистентов для повседневных DevOps-задач, от написания инфраструктуры до исправления ошибок и генерации документации. Когда: 5 июля 2025 года 📆 Узнать подробности и занять место на воркшопе — через бота 📌

Немного юмора вам в ленту :) 🔨 bash_help
Немного юмора вам в ленту :) 🔨 bash_help

⚙️ Ошибка bash permission denied ✔️Многие новички пытаются выполнить запись определенных значений в системные файлы с помощью
⚙️ Ошибка bash permission denied ✔️Многие новички пытаются выполнить запись определенных значений в системные файлы с помощью операторов перенаправления ввода и вывода и получают ошибку bash permission denied. Эта ошибка выводится, даже если вы использовали sudo. ▶️Казалось бы, sudo есть, значит права суперпользователя получены и все должно работать но тут все не так просто. В этой статье мы рассмотрим почему возникает ошибка bash permission denied и как ее обойти. ▶️Допустим, вы выполняете команду:
 sudo echo "nameserver 8.8.8.8" >> /etc/resolv.conf
▶️А в результате вместо записи строчки в /etc/resolv.conf получаете ошибку bash: /etc/resolv.conf permission denied ▶️В русской локализации это будет отказано в доступе bash linux. Так происходит потому что вы запускаете с правами суперпользователя утилиту echo и она честно выводит вашу строку в стандартный вывод bash с правами суперпользователя. Но bash запущен от обычного пользователя, и когда интерпретатор bash пытается записать полученную строчку в системный файл, естественно, что вы получите ошибку. ▶️Но существует несколько способов обойти это ограничение, вы можете, например, использовать команду tee, которая записывает стандартный вывод в файл или запустить саму оболочку от имени суперпользователя. ▶️Рассмотрим сначала вариант с tee echo 'текст' | sudo tee -a /путь/к/файлу
echo 'nameserver 8.8.8.8' | sudo tee -a /etc/resolv.conf
▶️Это очень простое решение, но, кроме того, вы можете запустить оболочку bash с правами суперпользователя, чтобы дать ей доступ на запись:
sudo sh -c 'echo текст >> /путь/к/файлу'
sudo bash -c 'echo текст >> /путь/к/файлу'
▶️Например:
 sudo bash -c 'echo nameserver 8.8.8.8 >> /etc/resolv.conf
▶️Еще одно решение, призванное, упростить эту команду, добавить такой код в ~/.bashrc:
sudoe() {
[[ "$#" -ne 2 ]] && echo "Usage: sudoe <text> <file>" && return 1
echo "$1" | sudo tee --append "$2" > /dev/null
}
▶️Дальше для вывода строки в файл выполняйте:
sudoe 'текст' >> /путь/к/файлу
▶️Например:
 sudoe "nameserver 8.8.8.8" > /etc/resolv.conf
➡️ Теперь все будет работать, как и ожидалось, и ошибка bash отказано в доступе не появится. Еще можно поменять права на файл, а потом уже выводить в него строку. Но это очень неправильное решение. И даже не потому, что это небезопасно, а больше потому что там намного больше действий. 🖼️ Ссылка на источник 🔨 bash_help

Устали от «хайповых» курсов? RECURA — канал с реально работающими инструментами и знаниями: 📚Подборки курсов, сборники, шпар
Устали от «хайповых» курсов? RECURA — канал с реально работающими инструментами и знаниями: 📚Подборки курсов, сборники, шпаргалки, лайфхаки 💻 Python и Go для автоматизации и DevOps 🐧 Linux + Bash: решения для реальных проектов 🐳 Docker, Kubernetes и CI/CD — практические гайды 🛠 Утилиты, заменяющие кучу софта 🔐 OSINT и этичный хакинг: практика и разборы Присоединяйся и получай то, что действительно нужно!

⚙️ Как удалить старые файлы логов в Linux ✔️Бывалые пользователи Linux сразу подумают, что в этой статье пойдет речь про logr
⚙️ Как удалить старые файлы логов в Linux ✔️Бывалые пользователи Linux сразу подумают, что в этой статье пойдет речь про logrotate, но это не так. Да, ротация логов как раз и была придумана и даже демон для нее, что бы старые логи не накапливались, а проходили ротацию и тем самым не засоряли систему. Но не все так радужно и существует куча служб и прочих задач, которые скапливают логи и никак за их количеством не следят. Более того, даже если настроить ротацию таким логам, то ничего не выйдет. ▶️Например, демон SoftEther VPN. Он каждые сутки создает новый файл логов, а про старый забывает. Таким образом его папке слогами через год будет 365 файлов только самого демона, а еще 365 файлов логов каждого хаба, который был создан. В общем это много. Может места и не много они будут занимать, но это много для файловой системы, которой нужно вести журнал по каждому файлу, что бы он не потерялся. Да и Linux работает обычно не один год, а лет 10 и сами понимаете что будет с файлами, если их вовремя не почистить. ▶️Для решения задачи удаления старых фалов логов можно воспользоваться утилитой find с вот такими опциями:
find /var/log/* -type f -mtime +182 -exec rm {} \;
▶️Где: 💠/var/log/* – место для поиска и все папки и подпапки 💠-type f – в поиск должны попасть только файлы, папки удалять не стоит, да же если они старые, хотя все опционально 💠-mtime +182 – искать файлы будем модифицированные старше 182 дней назад 💠-exec rm {} – ну а эта опция удалит все что подпадет под поиск, для теста можно ее удалить и посмотреть что будет удалено. ▶️Ок, нашли файлы и удалили. Второй раз это делать не хочется. Нужно автоматизировать. Делаем такой скрипт командой nano rm_old.sh:
#!/bin/sh

#Задаем переменные
Day=182
log_path="/var/log/"

#Найти и удалить файлы
find $log_path* -type f -mtime +$Day -exec rm {} \;

echo 'файлы журнала старше 30 дней удалены из $log_path'
▶️В переменных указываем нужные значения. Затем делаем файл исполняемым командой chmod +x rm_old.sh ▶️Добавляем скрипт в cron для периодического запуска командой crontab -e и вписываем следующее:
0 10 * * * /path_to_script/rm_old.sh >/dev/null 2>&1
▶️Таким образом скрипт будет запускаться каждые сутки в 00:10. 🖼️ Ссылка на источник 🔨 bash_help

💻Лучшие каналы по ИБ и Хакингу! Hacking & InfoSec Base — канал действующего белого хакера. Подробные уроки по безопасности,
💻Лучшие каналы по ИБ и Хакингу! Hacking & InfoSec Base — канал действующего белого хакера. Подробные уроки по безопасности, эксплуатации уязвимостей, социальной инженерии. CyberGuard — полезные утилиты, софт и литература по информационной безопасности и Хакингу. linux administration — всё, что необходимо знать о Linux и его дистрибутивах. 🫵Подписывайся, здесь ты узнаешь всё о ИБ и Хакинге!

⚙️ bash-file-cleaner — cкрипт для очистки файлов ✔️Этот репозиторий содержит Bash-скрипт для автоматической очистки старых фа
⚙️ bash-file-cleaner — cкрипт для очистки файлов ✔️Этот репозиторий содержит Bash-скрипт для автоматической очистки старых файлов в указанной директории. Скрипт удаляет файлы, которые старше заданного количества дней, с возможностью ведения лога для отслеживания выполненных действий и удаленных файлов. ➡️ Возможности 💠Автоматическая очистка: Скрипт удаляет файлы, старые более заданного количества дней. 💠Логирование: Все действия (включая ошибки и удаленные файлы) записываются в указанный лог-файл. 💠Настройка: Параметры, такие как целевая директория, количество дней и путь к лог-файлу, настраиваются через файл .env. 💠Простота использования: Скрипт готов к автоматическому запуску через cron для регулярного выполнения. ➡️ Требования 💠Операционная система Linux с поддержкой Bash и cron. 💠Установленная команда find (обычно она предустановлена в большинстве Linux-дистрибутивов) 🐙 Перейти на Github 🔨 bash_help

😎 Все о кибербезе в @secmedia Новостное сообщество, куда стоит заглянуть: Cyber Media — каждый день отбирает интересные ново
😎 Все о кибербезе в @secmedia Новостное сообщество, куда стоит заглянуть: Cyber Media — каждый день отбирает интересные новости из мира информационной безопасности, а также публикует статьи и интервью от экспертов. ➡️ Подписывайтесь на новости @secmedia

⚙️ DevOps Roadmap 2025 ✔️Актуальный roadmap для DevOps, который включает в себя необходимые ссылки на обучающие материалы для
⚙️ DevOps Roadmap 2025 ✔️Актуальный roadmap для DevOps, который включает в себя необходимые ссылки на обучающие материалы для каждого шага на этом пути. ➡️ Некоторые этапы DevOps Roadmap 💠Изучение основ. Освоение Linux, сетевых технологий и языков программирования 💠Работа с системами контроля версий (Git и GitHub). Изучение команд Git, ветвления и слияния, а также GitHub Actions для CI/CD. 💠Освоение CI/CD (Jenkins, GitHub Actions, GitLab CI). Понимание автоматизации тестирования, интеграции и развёртывания. 💠Изучение инфраструктуры как кода (IaC). Освоение Terraform, Ansible и других инструментов для автоматизации инфраструктуры. 💠Изучение облачных платформ (AWS, Azure, GCP). Понимание сервисов для DevOps, например, EC2, S3, IAM 💠Освоение контейнеризации и оркестровки. Изучение Docker, Kubernetes, Helm и других инструментов. 💠Мониторинг и логирование. Освоение Prometheus, Grafana и стека ELK для мониторинга и анализа логов 💠Безопасность в DevOps (DevSecOps). Интеграция безопасности в процесс DevOps, использование принципов DevSecOps. ▶️В репозитории представлен пошаговый план обучения DevOps с ссылками на соответствующие ресурсы. 🐙 Перейти на Github 🔨 bash_help

Освой сети и командную строку с лучшими обучающими каналами 🤩 Network Admin - обучающий канал по сетевым технологиям 🤩 Netw
Освой сети и командную строку с лучшими обучающими каналами 🤩 Network Admin - обучающий канал по сетевым технологиям 🤩 Network Admin | Guides - канал, где рассказывают полезную информацию про Windows/Linux 📱 BashTex - обучение работе с командной строкой

⚙️ getopts: как писать CLI-утилиты с флагами без внешних библиотек ✔️getopts — это встроенный в любой POSIX-совместимый Linux
⚙️ getopts: как писать CLI-утилиты с флагами без внешних библиотек ✔️getopts — это встроенный в любой POSIX-совместимый Linux/Unix-shell мини-парсер аргументов. Один shebang — и у вас CLI-утилита без единой внешней зависимости. В статье рассмотрим, как выжать из getopts максимум, где он спотыкается и когда пора переехать на getopt или Argbash. ➡️ Почему вообще всё ещё getopts 💠Входит в POSIX — доступен в /bin/sh на любом «живом» юниксе. 💠Никаких зависимостей — скрипт останется единственным файлом. 💠Поведение чётко регламентировано спецификацией Open Group — т. е. скрипт будет вести себя одинаково под bash, zsh, dash, ksh. ▶️Минус — лишь короткие флаги и отсутствие родной поддержки --long-option. Но и это решаемо. ➡️ Базовый синтаксис: одно кольцо, чтобы править всеми
#!/usr/bin/env sh
set -euo pipefail
IFS='
'

usage() {
  cat <<EOF
Usage: ${0##*/} [-a] [-b ARG] file...
  -a        : включить дополнительный режим
  -b ARG    : передать аргумент
EOF
  exit 2
}

# двоеточие в начале → тихий режим ошибок
while getopts ":ab:" opt; do
  case "$opt" in
    a) flag_a=true ;;
    b) param_b=$OPTARG ;;
    :) echo "Опция -$OPTARG требует аргумента" >&2; usage ;;
    \?) echo "Неизвестная опция -$OPTARG" >&2; usage ;;
  esac
done
shift "$((OPTIND-1))"   # убираем уже разобранные параметры
▶️Двоеточие в начале optstring переводит парсер в «silent mode» — ошибки по argv приходится ловить самостоятельно, зато можно отдать лайтовый help, а не cryptic usage из недр шелла. Про необходимость shift "$((OPTIND-1))" задокументировано даже в posix man-pages — так убираем из $@ опции и получаем чистый список позиционных аргументов. ➡️ Короткие флаги и их комбо getopts умеет распаковывать слипшиеся флаги: -abc интерпретируется как -a -b -c. Если после символа ожидается аргумент, разбор прекращается ровно там:
# optstring="a:b"
$ my.sh -ac   # OK: -a, -c как позиционка
$ my.sh -abx  # -a, -b x
$ my.sh -ab   # ошибка: -b ждёт аргумент
Edge-case — отрицательные числа (-5) внезапно принимаются за флаг. Начинайте список ожидаемых опций с --, тогда getopts прекратит работу при виде первого не-флага, и минусы в числах останутся нетронутыми. ➡️ Поддерживаем --long без сторонних тулов Частый прием: сначала через case "$1" ловим варианты --help, --version, --long=value, а затем отдаём остаток в getopts — так не ломаем POSIX-совместимость и не тащим GNU getopt.
while [ $# -gt 0 ]; do
  case "$1" in
    --help) usage ;;
    --output=*) opt_o=${1#*=}; shift ;;
    --) shift; break ;;     # двойное тире — конец опций
    -*) break ;;            # короткие опции разберет getopts
    *)  break ;;
  esac
done

# теперь классический getopts
while getopts ":o:f:" opt; do
  ...
done
shift "$((OPTIND-1))"
▶️Схема простая: захотите — добавите alias-ы вроде --verbose/-v, или вообще YAML-конфиг после --config=path.yml. 🖼️ Дочитать статью на Habr'e 🔨 bash_help