fa
Feedback
BashMaster

BashMaster

رفتن به کانال در Telegram

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

نمایش بیشتر
8 730
مشترکین
-224 ساعت
+27 روز
+21030 روز
آرشیو پست ها
⚙️ CLI-To-Whatsapp ✔️Bash-скрипт, который позволяет пользователям отправлять выходные данные CLI команды GNU/Linux контакту W
⚙️ CLI-To-Whatsapp ✔️Bash-скрипт, который позволяет пользователям отправлять выходные данные CLI команды GNU/Linux контакту WhatsApp в виде сообщения 🐙 Перейти на Github 🔨 bash_help

Компоненты AD Kerberos, Microsoft SQL Server и центр сертификации — как их взломать? Научим на курсе “Атака на Active Directo
Компоненты AD Kerberos, Microsoft SQL Server и центр сертификации — как их взломать? Научим на курсе “Атака на Active Directory". Авторы: HackerRalf (Михаил Порываев) и BlackRabbit (Павел Никитин), 5-кратные победители the Standoff Старт: 16 декабря. Успейте приобрести курс по старой цене до конца ноября!* Содержание курса: - Архитектура AD и ее базис - Харденинг в AD, добыча критичной информации, развитие по инфраструктуре - Как закрепиться внутри? Техники и эксплоиты На 100% прикладной курс: практическая лаборатория AD содержит 16 виртуальных машин, позволяя участникам отточить свои навыки на практике в 100+ рабочих тасках 🏆 Сертификат / удостоверение о повышении квалификации  *С декабря стоимость курсов увеличится на 15% @Codeby_Academy Подробнее о курсе

⚙️ PathPicker ✔️Инструмент командной строки, который позволяет выбирать файлы из вывода bash ▶️Пользователи могут редактирова
⚙️ PathPicker ✔️Инструмент командной строки, который позволяет выбирать файлы из вывода bash ▶️Пользователи могут редактировать выбранные файлы в своем любимом текстовом редакторе или выполнять с ними произвольную команду 🐙 Перейти на Github 🔨 bash_help

⚙️ ble.sh — Bash Line Editor ✔️Линейный редактор, написанный на чистом Bash, с подсветкой синтаксиса, автоматическими предлож
⚙️ ble.sh — Bash Line Editor ✔️Линейный редактор, написанный на чистом Bash, с подсветкой синтаксиса, автоматическими предложениями, режимами vim и т. д. для интерактивных сеансов Bash. ▶️Он заменяет GNU Readline по умолчанию. Предоставляет такие функции, как расширенное завершение и режим редактирования 🐙 Перейти на Github 🔨 bash_help

Приглашаем 14 ноября в 10:00 на вебинар «Миграция на отечественную ИТ-инфраструктуру и решения для кибербезопасности» Вы узна
Приглашаем 14 ноября в 10:00 на вебинар «Миграция на отечественную ИТ-инфраструктуру и решения для кибербезопасности» Вы узнайте, что важно учесть при переходе на отечественные инфраструктурные и ИБ-решения. Опытом поделятся руководители служб ИТ и информационной безопасности из РСХБ Факторинг, R-Style Softlab, РЭД Софт. О чем вебинар:Оптимальный выбор решений для кибербезопасности. Как сделать правильный выбор между универсальными ИБ-решениями ( например, NGFW и XDR) и узкоспециализированными (VPN-шлюзы, межсетевые экраны или системы обнаружения киберугроз). – Служба единого каталога. Обзор отечественных новинок Directory Service. Альтернативы Microsoft Active Directory с учетом совместимости с текущей инфраструктурой. – Платформы виртуализации. Обзор рынка отечественных решений. Опыт перехода на отечественные платформы виртуализации в РСХБ Факторинг. – Обзор подходов к миграции ИТ-инфраструктуры. Как перейти на гетерогенную ИТ-инфраструктуру без потери функциональности на этапе миграции. – Управление проектами по миграции ИТ-инфраструктуры. Как делать сложные проекты по импортозамещению ИТ-инфраструктуры в условиях кадрового голода. Вебинар будет полезен: ИТ-директорам. Узнаете опыт крупных российских компаний по миграции ИТ-инфраструктуры на отечественные решения. – Директорам и специалистам по информационной безопасности. Получите методологию подбора ИБ-решений и построения систем кибербезопасности, которая позволит экономить до 20% бюджета без потери надежности и функциональности. – Руководителям компаний. Узнаете опыт РСХБ Факторинг, как делать глобальные проекты по импортозамещению в условиях кадрового голода на ИТ и ИБ-специалистов. 14 ноября, четверг, в 10:00 по МСК. Регистрация свободная. Реклама. АО "ЭР-СТАЙЛ СОФТЛАБ". ИНН: 7719198440. Erid: 2VSb5xkYdTe

⚙️ Скрытие процессов Linux с помощью Bind Mounts ✔️Если у вас есть вредоносный процесс, который вы хотите скрыть, используйте
⚙️ Скрытие процессов Linux с помощью Bind Mounts ✔️Если у вас есть вредоносный процесс, который вы хотите скрыть, используйте Bind Mounts, чтобы смонтировать другой каталог поверх каталога /proc/PID для вредоносного процесса. 🖼️ Статья на английском языке 🔨 bash_help

⚙️ Аналог wget на bash ✔️Если вам необходимо скачать какой-то файл, а curl’а или wget’а нет, то можно воспользоваться командн
⚙️ Аналог wget на bash ✔️Если вам необходимо скачать какой-то файл, а curl’а или wget’а нет, то можно воспользоваться командной оболочкой bash, написав скрипт, позволяющий скачать любой файл по протоколу http. ➡️ Вот этот скрипт: download.sh:
#!/bin/bash

if [ "$1" == "" ]
then
    echo "usage: $0 URL"
    exit 0
fi

HOST=`echo $1 | sed 's/http\:\/\///' | sed -r 's/([^/])\/(.*)/\1/'`
FILENAME=`echo "$1" | sed -r 's/(.*)\/(.*)/\2/'`
PATH=`echo "$1" | sed 's/http\:\/\///' | sed -r "s/$HOST//" | sed "s/$FILENAME//"`
PORT=80
HEADERS="HTTP/1.1\r\nHost: $HOST\r\nConnection: close\r\nContent-Length: 0\r\n\r\n"
F="/tmp/dlfile"
exec 3<>/dev/tcp/$HOST/$PORT
echo -e "GET $PATH$FILENAME $HEADERS" >&3
/bin/cat <&3 > $F
/usr/bin/tail $F -n +$((`/bin/sed $F -e '/^\r$/q' | /usr/bin/wc -l`+1)) > $FILENAME
/bin/rm $F
🖼️ Ссылка на источник 🔨 bash_help

😂 Подборка каналов для каждого сетевого инженера и безопасника 👨‍💻 Серверная Админа — Большое количество уроков, статей, к
😂 Подборка каналов для каждого сетевого инженера и безопасника 👨‍💻 Серверная Админа — Большое количество уроков, статей, книг и гайдов по устройству и настройке компьютерных сетей. 😎 Арсенал Безопасника — Проект по кибербезопасности - сборник лучших инструментов и утилит по OSINT, хакингу и деанону 😎 Бункер Хакера — Все что необходимо, для того чтобы начать свой путь в безопасности - инструменты, книги, справочники, гайды и ресурсы.

⚙️ Bash Prompt Generator ✔️Очень крутой ресурс, где можно сконфигурировать строку для ввода команд в bash. ➡️ Выбираете парам
⚙️ Bash Prompt Generator ✔️Очень крутой ресурс, где можно сконфигурировать строку для ввода команд в bash. ➡️ Выбираете параметры, расставляете их в нужной последовательности и копируете готовую конфигурацию. 🐙 Перейти на Github 🔨 bash_help

Освой работу с Prometheus, Grafana, ELK, etc и настрой мониторинг! ✅ Владение инструментами Observability открывает новые кар
Освой работу с Prometheus, Grafana, ELK, etc и настрой мониторинг! ✅ Владение инструментами Observability открывает новые карьерные горизонты администраторам Linux, DevOps-инженерам  Стройте сложные эффективные системы мониторинга и логирования инфраструктуры и приложений  💪 Ответьте на 15 вопросов и проверьте, насколько вы готовы к обучению на курсе «Observability: мониторинг, логирование, трейсинг» от OTUS. + 5 новых занятий, для вашего профессионального развития Пройти тест и получить спец. предложение:   https://otus.pw/HhMG/?erid=LjN8KPGU9 #реклама О рекламодателе

⚙️ bind – встроенная команда оболочки Bash ✔️Используется для установки привязок клавиш и переменных к функциям. ▶️ -l – пере
⚙️ bind – встроенная команда оболочки Bash ✔️Используется для установки привязок клавиш и переменных к функциям. ▶️ -l – перечислить имена связанных функций редактирования. ▶️ -P – перечислить названия привязываемых функций редактирования и их привязки, если они есть. ▶️ -p – то же, что и -P, но выводит результат в форме, которую можно использовать в качестве входных данных для команды bind. ▶️ -S – перечислить последовательности клавиш, которые вызывают макросы и их значения. ▶️ -s – то же, что и -S, но выводит результат в форме, которую можно использовать в качестве входных данных для bind. ▶️ -V – перечислить переменные и их значения, которые используются при привязке ключа bash. ▶️ -v – то же, что и -V, но выводит результат в форме, которую можно использовать в качестве входных данных для bind. ▶️ -q название функции – отобразить (запросить) привязку клавиш для функции bash имя_функции. ▶️ -u имя функции – отключить все ключи, привязанные к функции редактирования function-name. ▶️ -r последовательность клавиш – удалить все привязки для последовательности клавиш keyseq. ▶️ -f имя файла – считать привязки клавиш из файла имя_файла и использовать их в качестве входных данных для команды привязка. ▶️ -x keyseq:shell-команда – привязать команду. Команда оболочки shell-command будет выполнена bash, когда получит последовательность клавиш keyseq. ▶️ -X – перечислить последовательности клавиш, привязанные к -x, в форме, подходящей для ввода в bind. 🖼️ Ссылка на источник 🔨 bash_help

⚙️ Process substitution в Bash ✔️Process substitution — это функция в Bash, которая позволяет использовать вывод команды или
⚙️ Process substitution в Bash ✔️Process substitution — это функция в Bash, которая позволяет использовать вывод команды или процесса в качестве входа для другой команды. Она помогает оптимизировать Bash-скрипты, уменьшив потребность во временных файлах и упростив сложные конвейеры ➡️ Синтаксис process substitution: <(command). Создаёт именованный канал (FIFO) и подключает к нему вывод команды внутри скобок. Именованный канал ведёт себя как файл, что позволяет использовать его в качестве входа для другой команды. >(command). Также создаёт именованный канал, но подключает его к входу команды внутри скобок. Это позволяет перенаправить вывод одной команды на вход другой команды. ➡️ Некоторые примеры использования process substitution для оптимизации Bash-скриптов: ▶️Сравнение вывода двух команд Подстановку процесса можно использовать для сравнения вывода двух команд с помощью команды diff. Например, для сравнения вывода ls в двух разных каталогах:
diff <(ls dir1) <(ls dir2) 
▶️Перенаправление вывода на несколько команд Вы можете использовать подстановку процесса, чтобы отправить вывод команды нескольким командам. Например, чтобы отправить вывод ls и в grep, и в wc:
ls | tee >(grep 'txt$') >(wc -l) > /dev/null 
▶️Цепочка процессов замены Подстановку процессов можно объединить в цепочку для создания сложных конвейеров. Например, чтобы отсортировать и подсчитать слова в текстовом файле, а затем отобразить 10 самых распространенных слов:
cat file.txt | tr '[:space:]' '\n' | grep -v '^$' | sort | uniq -c | sort -nr | head -n 10 
▶️Объединение и сортировка двух файлов Предположим, у вас есть два отсортированных файла, file1.txt и file2.txt, и вы хотите объединить их в новый отсортированный файл, merged.txt . Вы можете использовать команду sort вместе с подстановкой процесса, чтобы добиться этого:
sort -m <(sort file1.txt) <(sort file2.txt) > merged.txt 
▶️Отображение различий между деревьями каталогов Вы можете использовать замену процессов для сравнения структуры каталогов двух каталогов с помощью команды tree и diff:
diff -y <(tree -fi dir1) <(tree -fi dir2) 
▶️Фильтрация и сохранение записей журнала Предположим, у вас есть файл журнала, и вы хотите извлечь записи, содержащие слово "ERROR", сохранить их в отдельный файл и отобразить на экране. Для этого можно использовать grep и tee с заменой процессов:
grep 'ERROR' logfile.txt | tee >(cat > errors.txt) 
▶️Выполнение арифметических операций над столбцами CSV-файла Вы можете использовать awk с подстановкой процессов для выполнения арифметических операций над столбцами CSV-файла. Например, чтобы сложить столбцы 2 и 3 CSV-файла и отобразить результат:
awk -F, '{ print $1, $2 + $3 }' <(cat file.csv) 
▶️Объединение стандартного вывода и стандартной ошибки Чтобы объединить стандартный поток вывода и стандартный поток ошибок в один поток, можно использовать замену процессов с помощью cat:
command 2> >(cat >&1) 
В этом примере команда представляет команду, которую вы хотите выполнить. Подстановка процесса >(cat >&1) перенаправляет стандартный поток ошибок (файловый дескриптор 2) в стандартный поток вывода (файловый дескриптор 1). ➡️ Эти примеры иллюстрируют мощь и гибкость подстановки процессов в Bash. Понимая, как эффективно использовать эту функцию, вы можете создавать более сложные и эффективные скрипты. 🖼️ Ссылка на источник 🔨 bash_help

🎓 Тренинги Zabbix Сертифицированный Специалист 7.0 и Zabbix Сертифицированный Профессионал — ответ на вопрос «как быстро пол
🎓 Тренинги Zabbix Сертифицированный Специалист 7.0 и Zabbix Сертифицированный Профессионал — ответ на вопрос «как быстро получить самые полные знания по Zabbix 7.0». @zabbix_ru — наш телеграм-канал, посвященный Zabbix и ничему кроме Zabbix. Тренинги Zabbix — лучшая инвестиция, которую вы можете сделать для себя или своих коллег. Мы опросили участников предыдущих потоков и сформулировали основные преимущества от прохождения тренингов: 📖 устранить пробелы. Часто знания Zabbix ограничиваются эпизодическим изучением документации и фрагментарны. Курс поможет систематизировать знания и откроет для вас новые возможности уже знакомой системы мониторинга. 📖 делать своими силами. Участие подрядчиков в проектах внедрения подразумевает предоставление доступа в ваше окружение. Прохождение официальных курсов Zabbix на русском языке позволит вам выполнять работы своими силами. 📖 распространять знания. Сотрудники, получившие сертификат Zabbix, не просто совершенствуют свои собственные технические навыки — они привносят полученные знания в коллектив и делятся ими со своими коллегами. 📖 получить сертификат. Это официальный вендорский курс Zabbix, переведенный на русский язык. После прохождения курса у вас будет возможность сдать экзамен и получить сертификат. Сертификат подтверждает знания и дает дивиденды компании и мотивацию сотрудникам. 📖 получить компетенции. Курсы проводят сертифицированные тренеры и эксперты Zabbix, которые регулярно повышают свою компетенцию как путем прохождения дополнительного обучения, так и участием в проектах внедрения Zabbix. Проведем 2 тренинга подряд в этом году. Далее только в новом 2025. Программа тренингов по ссылкам выше. 📅 Zabbix сертифицированный специалист 7.0 (ZCS 7.0) 11-15 ноября 📅 Zabbix сертифицированный профессионал 7.0 (ZCP 7.0) 18-20 ноября Подробную информацию вы можете запросить, написав @galssoftware или через почту welcome@gals.software.

⚙️ Мониторинг перебора паролей на почту ✔️Мониторинг перебора паролей на почту позволяет оценить, сколько недоброжелателей пы
⚙️ Мониторинг перебора паролей на почту ✔️Мониторинг перебора паролей на почту позволяет оценить, сколько недоброжелателей пытается подбирать пароли к вашей почте. Рассмотрим на примере почтового сервера dovecot как можно собирать статистику по тому, сколько попыток перебора было сделано с тех или иных адресов. После сбора статистики с полученными адресами можно сделать всё, что посчитаете нужным. Например, заблокировать трафик с этих адресов при помощи iptables. Или заняться исследованиями атакующих. ▶️Для работы с информацией будем использовать bash-скрипты, чтобы фильтровать информацию, и планировщик cron, чтобы выполнять анализ по расписанию и высылать результат вам на почту. Результат будем сохранять в отдельном файле на каждый день и в одном файле будем собирать всю информацию. Саму информацию представим в виде двух значений — количество попыток и IP-адрес. Таким образом мы можем посмотреть заодно, правильно ли работает fail2ban и сколько попыток залогиниться на почтовый сервер проходит за сутки. ➡️ Сбор статистической информации ▶️Для получения информации будем использовать логи почтового сервера, в которых регистрируются попытки подключения к почтовому серверу. Вот что нам нужно. Из лога аутентификации будем отфильтровывать ошибки аутентификации и считать для IP-адресов, при обращении с которых происходили ошибки, количество попыток. После размещения скрипта в cron’е вам на почту будет приходить каждый день письмо со статистикой атак. Рассмотрим аутентификацию почтового сервера dovecot, но вы можете поправить скрипт под свои нужды. ➡️ Мониторинг перебора паролей ▶️Напишем скрипт на bash, который будет фильтровать логи.
#!/bin/bash

# Название файла с адресами, включающее дату
IP_BLACKLIST="/root/scripts/blacklist-`date "+%Y-%m-%d"`.lst"

# Фильтрация ошибок аутентификации
CURRENT_DATE=`date "+%b %d"`
grep "dovecot:auth" /var/log/auth.log \
| grep "authentication failure" \
| grep "$CURRENT_DATE" \
| cut -d" " -f 14 \
| sed 's/rhost=//' \
| sort | uniq -c >> $IP_BLACKLIST

# Добавление в большой список только IP-адресов из сегодняшнего лога
awk '{print $2}' $IP_BLACKLIST >> /root/scripts/blacklist-full.lst
# После добавления сортируем и убираем неуникальные адреса
cat /root/scripts/blacklist-full.lst | sort | uniq >> /root/scripts/blacklist-full.lst.new
rm /root/scripts/blacklist-full.lst
mv /root/scripts/blacklist-full.lst.new /root/scripts/blacklist-full.lst

# Выводим сегодняшний лог
cat $IP_BLACKLIST
▶️Можно добавить также автоматическое удаление файла лога, если он пустой. Кроме того, можно здесь же удалять адреса, которые принадлежат вам. ▶️После написания скрипта необходимо его записать в крон, чтобы он выполнялся по расписанию. Когда будут неудачные попытки аутентификации, вам будет приходить письмо со списком и количеством попыток, если их не будет, то письмо тоже не будет приходить. Добавим для этого в файл /etc/crontab следующую строчку:
55 23   * * *   root    /root/scripts/check-auth-errors.sh
➡️ Блокировка перебора при помощи iptables ▶️Для блокировки при помощи iptables можно написать еще один скрипт, которым можно блокировать адреса из ежедневного лога:
#!/bin/bash

IPLIST=$(awk '{print $2}' $1)
for IP in ${IPLIST}
do
    echo -n Blocking ${IP} ... 
    iptables -t filter -A INPUT -s ${IP} -j DROP
    echo Done
done
🖼️ Ссылка на источник 🔨 bash_help

Станьте разработчиком нейро-сотрудников на Python и зарабатывайте от 150.000р в месяц 🔥🔥🔥 Мы научим вас создавать топовых нейро-сотрудников на базе GPT-4 Omni, и вы сможете: 1️⃣ Устроиться разработчиком в крупную компанию и зарабатывать от 150 тысяч ₽ в месяц 2️⃣ Разрабатывать такие проекты на заказ и зарабатывать от 500 тысяч ₽ за проект 3️⃣ Создать нейро-сотрудника в вашей компании и вырасти на +30-100% в зарплате Что будет на интенсиве? 🧬 Теория: как создаются нейро-сотрудники с GPT-4o на Python 🧬 Практика: мы создадим нейро-консультанта, нейро-HR, нейро-маркетолога и др. Ведущий интенсива - Senior AI разработчик нейросетей и основатель Университета искусственного интеллекта 🔥 Регистрируйтесь на бесплатный интенсив! Встречаемся в ближайший четверг!

⚙️ ipbash — функции для работы с IP и подсетями ✔️Функции, представленные здесь, могут пригодиться для объединения нескольких
⚙️ ipbash — функции для работы с IP и подсетями ✔️Функции, представленные здесь, могут пригодиться для объединения нескольких списков ip-адресов или подсетей, полученных из разных источников, допустим, для бана. ▶️С помощью ENTRYIP, можно убрать подсети, которые перекрывают друг-друга — например подсеть 192.168.1.0/24 входит в подсеть 192.168.0.0/23. И для бана достаточно будет оставить только последнюю. ▶️А если в списке есть еще подсеть 192.168.2.0/23, то с помощью функции MERGESUBNETS можно объединить подсети 192.168.0.0/23 192.168.2.0/23 в одну 192.168.0.0/22, уменьшив список и увеличив скорость работы фильтра. ➡️ Все функции написаны на чистом bash, без использования сторонних программ, поэтому скорость выполнения не очень большая, но они будут работать, где есть bash. 🐙 Перейти на Github 🔨 bash_help

Как разрабатывать и настраивать Grafana Stack для эффективного визуализирования метрик и логов? 🔹Расскажем на открытом уроке
Как разрабатывать и настраивать Grafana Stack для эффективного визуализирования метрик и логов? 🔹Расскажем на открытом уроке «Grafana Stack: закрываем все современные потребности Observability», урок приурочен к курсу «Observability: мониторинг, логирование, трейсинг» от Otus. Рассмотрим ключевые компоненты Grafana Stack и их роли в Observability. Настроим интеграции с различными системами для получения актуальных данных. ✅ Практика: Создание настраиваемых дашбордов и алертов, для эффективного управления производительности и надежности сервисов 👉 Регистрация и подробности: https://otus.pw/6D1pa/?erid=LjN8KcNUf #реклама О рекламодателе

⚙️ lssh ✔️Клиент SSH/SCP/SFTP на основе списка, поддерживающий одиночные и параллельные соединения, локальное использование b
⚙️ lssh ✔️Клиент SSH/SCP/SFTP на основе списка, поддерживающий одиночные и параллельные соединения, локальное использование bashrc на удаленных машинах и расширенное проксирование. ➡️ Эта командная утилита для чтения заранее подготовленного списка и подключения ssh/scp/sftp к выбранному хосту. Файл списка задается в формате yaml. При выборе хоста можно фильтровать по ключевым словам. Может выполнять команды одновременно для нескольких хостов. 🐙 Перейти на Github 🔨 bash_help

🟡 Сравнение российских платформ виртуализации Функционал. Эксплуатация. Преимущества и недостатки. 3 года тестируем и исслед
🟡 Сравнение российских платформ виртуализации Функционал. Эксплуатация. Преимущества и недостатки. 3 года тестируем и исследуем российские платформы виртуализации. Собрали весь материал в одном посте⬇️ 🔄СРАВНИТЕЛЬНЫЕ ИССЛЕДОВАНИЯ 2022: сравнение шести платформ 2024: характеристики одиннадцати платформ 🔄ТЕСТИРОВАНИЕ ПЛАТФОРМ 2022-2023 год: Astra Linux, «Брест» zVirt Альт сервер виртуализации на базе OpenNebula Альт сервер виртуализации на базе Proxmox РЕД виртуализация РУСТЭК 2024 год: zVirt SpaceVM Numa vServer 🔄ОПЫТ ВНЕДРЕНИЯ VMware по-русски: как мы внедряли отечественные платформы виртуализации Как электросети переехали в частные облака и на российскую виртуализацию 🔄ТЕСТИРОВАНИЕ VDI ВРС на базе Basis.Workplace + Р-Платформа ВРС на базе Termidesk + zVirt SPACE VDI ➡️ Подписывайтесь

⚙️ 5 вариантов генерации конфигурационных файлов Shell-скриптами ✔️Подготовка конфигурационных файлов из шаблонов — весьма ра
⚙️ 5 вариантов генерации конфигурационных файлов Shell-скриптами ✔️Подготовка конфигурационных файлов из шаблонов — весьма распространённая задача системного администрирования. Решать её можно разными способами, каждый из которых хорош по-своему, здесь же мы рассмотрим, как это сделать с помощью Shell-скриптов. ▶️Наше исследование проведём в виде решения типовой задачи, в которой необходимо создать Shell-скрипт, генерирующий конфигурационный файл с настройками сетевого стека узла. Формат конфигурационного файла соответствует /etc/network/interfaces. Примем, что настраиваемый узел обладает только одним сетевым интерфейсом с именем «ens33». Скрипт должен обеспечивать возможность указания статического IP-адреса, маски подсети и шлюза по умолчанию. ▶️С учётом вышесказанного получаем следующий шаблон конфигурационного файла:
auto ens33
iface ens33 inet static
address ЗНАЧЕНИЕ_IP_АДРЕСА
netmask ЗНАЧЕНИЕ_МАСКИ_СЕТИ
gateway ЗНАЧЕНИЕ_ШЛЮЗА_ПО_УМОЛЧАНИЮ
▶️Для дальнейших примеров договоримся, что IP адрес установим в 192.168.0.10, маску подсети 255.255.255.0, а шлюз по умолчанию 192.168.0.1. ➡️ Размещение шаблона внутри скрипта, формирование вывода стандартными средствами Самый простой вариант решения задачи, которым обычно пользуются начинающие разработчики, — это поместить шаблон в тело скрипта и использовать локальные переменные в качестве подстановочных значений.
#!/bin/bash

IP="192.168.0.10"
NETMASK="255.255.255.0"
GATEWAY="192.168.0.1"

TEMPLATE="$(
cat << EOF
auto ens33
iface ens33 inet static
address $IP
netmask $NETMASK
gateway $GATEWAY
EOF
)"

echo -e "$TEMPLATE"
▶️Результат работы скрипта (как и всех следующих) будет выглядеть так:
auto ens33
iface ens33 inet static
address 192.168.0.10
netmask 255.255.255.0
gateway 192.168.0.1
▶️Данный вариант решения всем хорош, за исключением того, что человеческие ошибки (опечатки и прочие), которые могут возникнуть при внесении изменений в шаблон, могут «сломать» скрипт. Поэтому архитектурно более правильным решением будет разнести скрипт и шаблон по разным файлам. ▶️Внимательный читатель может заметить, что мы устанавливаем значения переменных в теле скрипта, и что для генерации следующего конфигурационного файла, с другими настройками всё равно потребуется вносить изменения в скрипт. Да, это так, но сделано это намеренно, для упрощения. Никто же не мешает нам усложнить скрипт и, скажем, реализовать в нём пользовательский интерфейс ввода значений переменных с консоли. ➡️ Размещение шаблона во внешнем файле и его заполнение с помощью envsubst Создадим файл шаблон «template.txt» следующего содержания:
auto ens33
iface ens33 inet static
address $IP
netmask $NETMASK
gateway $GATEWAY
▶️Для заполнения шаблона воспользуемся утилитой envsubst, которая ищет во входящем потоке строки вида $имя_переменной или ${имя_переменной} и заменяет их на значение соответствующих переменных. Важно отметить, что для работы этой утилиты переменные должны быть отмечены ключевым словом export. С учётом всего вышесказанного наш скрипт будет выглядеть следующим образом:
#!/bin/bash

export IP="192.168.0.10"
export NETMASK="255.255.255.0"
export GATEWAY="192.168.0.1"

envsubst  < template.txt
🖼️ Дочитать статью на Habr'e 🔨 bash_help