BashMaster
8.22K subscribers
678 photos
14 videos
1 file
701 links
Удобные консольные наработки на каждый день для разработчиков, девопсов и сисадминов.

Реклама: @Kone4noVasya

Канал на бирже: https://telega.in/c/bash_help
Download Telegram
☁️ Облака, облака повсюду

Российские компании активно используют облачные технологии и мы видим этому подтверждение на всевозможных "облачных" конференциях.

🖼 Как с их помощью решаются конкретные задачи бизнеса в условиях санкций, ужесточения требований регуляторов, растущих расходов на инфраструктуру?
🖼 Как сделать облако безопасным?

Приглашаем на открытую конференцию K2 Cloud Conf.

У ребят планируется много технических докладов: от обзоров новых типов сетевых дисков до приоритетов бизнеса в области ИТ. Будет интересно.

📅 Когда: 4 марта 2025

👆 Участие бесплатное, ссылка на регистрацию тут
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Создание переменных, доступных только для чтения, а также неизменяемых переменных в Bash

✔️Иногда немного дополнительной ясности может быть очень полезно, например, четко указать, что переменная не будет меняться.

▶️Внутри функции в Bash вы можете использовать ключевое слово local для определения переменной, и она может быть доступна только для чтения с помощью флага -r.

➡️ Вот несколько примеров использования и результатов:
#!/usr/bin/env bash

set -o errexit
set -o pipefail
set -o nounset

function mutable {
local status="pending"

status="completed"

# This line will echo "completed".
echo "${status}"
}

function immutable {
local -r status="pending"

# This line throws an error: "status: readonly variable"
status="completed"

# This line is never reached.
echo "${status}"
}

mutable
immutable

▶️Если вы хотите объявить переменные только для чтения вне функции, вы можете использовать declare -r status=”pending”, в то время как declare status=”pending” или status=”pending” оба являются изменяемыми.

▶️В случае с read-only вы получите ту же ошибку, что и выше, если попытаетесь ее изменить.

➡️ Помните, что declare и local не соответствуют POSIX, поэтому, если вам нужна максимальная совместимость между оболочками, вам стоит рассмотреть другие варианты, например, использование readonly status=”pending”.

▶️Я предпочитаю использовать declare -r, когда знаю, что мне не нужно соответствие POSIX, потому что declare используется для других вещей, например, для определения ассоциативных массивов.

▶️Наконец, стоит отметить, что если вы попытаетесь снять значение переменной, например unset status, а она доступна только для чтения, то получите сообщение об ошибке, в котором будет сказано, что вы не можете снять значение переменных, доступных только для чтения.

▶️Ясно выражать свои намерения полезно при чтении кода. Если в большом скрипте вы видите readonly, declare -r или local -r, вы можете быть уверены, что больше ничего не измените, а если измените, то скрипт выдаст ошибку, что поможет избежать случайной перезаписи значения.

🖼️ Ссылка на источник

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Открытый урок «Инструменты и методы мониторинга серверов на платформе Windows Server»

🗓 10 февраля в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Администратор Windows» от Otus.

На вебинаре вы узнаете:
✔️ Основные подходы к мониторингу серверов и выявлению проблем в инфраструктуре.
✔️ Как использовать встроенные инструменты Windows Server: Performance Monitor, Event Viewer и другие.
✔️ Обзор сторонних решений для мониторинга серверов и сети.
✔️ Практические рекомендации по настройке автоматического уведомления и отчетности.

🔗 Ссылка на регистрацию: https://otus.pw/zgIN/?erid=2W5zFGn1KQL

#реклама
О рекламодателе
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Полезные алиасы в Bash

✔️Операционная система Linux имеет в своем составе множество инструментов, которые могут существенно облегчить жизнь системным администраторам, особенно начинающим, для которых работа с консольными командами, использующими множество различных параметров зачастую кажется слишком сложной. В этой статье мы поговорим об использовании алиасов и разберем примеры создания наиболее полезных.

➡️ Содержание статьи:
▶️Временный алиас
▶️Добавляем в Bash
▶️Виртуальные среды и сети
▶️Полезности для Docker
▶️Заключение

🖼️ Прочитать на Habr'e

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Try-Catch в Bash: Обработка ошибок в скриптах Bash

✔️В этой статье мы рассмотрим пять методов обработки ошибок в скриптах Bash, начиная от удобных для новичков и заканчивая более сложными подходами.
В Bash обработка ошибок может осуществляться различными способами, несмотря на то, что в языке нет прямого блока try-catch, как в таких языках, как Python или JavaScript.

▶️Ниже мы рассмотрим пять методов, каждый из которых по мере возрастания сложности позволяет отлавливать и обрабатывать ошибки в скриптах Bash.

➡️ Базовая проверка ошибок с помощью статуса выхода
▶️Самый простой способ обработки ошибок в Bash – это проверка статуса выхода команды.
В Bash каждая команда по завершении возвращает код выхода.
Код выхода, равный 0, означает успех, а любой ненулевой код выхода означает неудачу.
#!/bin/bash

mkdir /root/test_dir
if [ $? -ne 0 ]; then
echo "Error: Failed to create directory."
exit 1
fi
echo "Directory created successfully."

▶️В этом методе мы запускаем команду и сразу же проверяем статус выхода с помощью переменной $? Если статус ненулевой, мы выводим сообщение об ошибке и выходим из скрипта.

➡️ Использование команды ‘set -e’ для выхода при ошибке
▶️Вы можете использовать команду set -e для указания скрипту немедленно выйти, если какая-либо команда возвращает ненулевой статус.
Это полезно для скриптов, в которых необходимо убедиться, что любой сбой останавливает выполнение.
#!/bin/bash
set -e

mkdir /root/test_dir
echo "Directory created successfully."

▶️Если использовать set -e, скрипт автоматически завершается при неудачном создании каталога, что избавляет вас от необходимости вручную проверять статус выхода после каждой команды.

➡️ Обработка ошибок с помощью trap
▶️Bash предоставляет команду trap для перехвата сигналов и ошибок.
Вы можете определить trap для выполнения определенных команд при возникновении ошибки.
#!/bin/bash
trap 'echo "An error occurred. Exiting..."; exit 1;' ERR

mkdir /root/test_dir
echo "Directory created successfully."

▶️Здесь команда trap фиксирует любые ошибки (сигнализируемые ключевым словом ERR) и запускает указанный код обработки ошибок.

➡️ Перенаправление ошибок в файл логов
▶️Вместо отображения ошибок на консоли вы можете перенаправить их в файл журнала для лучшей отладки.
#!/bin/bash

exec 2>error_log.txt

mkdir /root/test_dir
if [ $? -ne 0 ]; then
echo "Error: Failed to create directory."
exit 1
fi
echo "Directory created successfully."

▶️В этом методе строка exec 2>error_log.txt перенаправляет стандартную ошибку (дескриптор файла 2) в файл журнала, что позволяет просмотреть подробности ошибки позже.

➡️ Пользовательская функция обработки ошибок
▶️Для более сложной обработки ошибок вы можете создать пользовательскую функцию для обработки различных типов ошибок, что добавит гибкости вашим скриптам.
#!/bin/bash

handle_error() {
echo "Error on line $1"
exit 1
}

trap 'handle_error $LINENO' ERR

mkdir /root/test_dir
echo "Directory created successfully."

▶️В этом методе функция handle_error срабатывает всякий раз, когда происходит ошибка, предоставляя точный номер строки, в которой произошел сбой, что помогает более эффективно отлаживать.

➡️ Возможно, в скриптах Bash и нет встроенной функции try-catch, но с помощью различных методов, таких как проверка состояния выхода, команды-ловушки и пользовательские функции обработки ошибок, вы можете эффективно справляться с ошибками.

🖼️ Ссылка на источник

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Хотите научиться программировать, но теряетесь в выборе языка? Или уже изучаете Python, но не хватает практики? Тогда этот бесплатный мини-курс от Skillbox по Python-разработке — то, что нужно!

👉🏻 Если коротко: это мини-курс из 4 записанных уроков и 1 прямого эфира. Смотрите, когда удобно, после каждого выполняете задания. В итоге у вас будет 4 проекта для портфолио: Telegram-бот, который умеет превращать голос в текст, парсер для сбора данных и веб-страница на Flask. Неплохая практика для 5 занятий!


🎁 Ещё участников мини-курса ждут подарки: персональная карьерная консультация, скидка 10 000 рублей на любой курс Skillbox и подборка полезных материалов для старта карьеры в Python-разработке.

В общем, приходите практиковаться — не пожалеете: https://epic.st/iQLNm?erid=2VtzqvmR6eG

Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
⚙️ Bash Auto Completion в Linux

✔️В Linux предусмотрена удобная функция автодополнения (auto completion) для Bash. Этот инструмент значительно ускоряет и упрощает процесс ввода команд. Он автоматически дополняет имена файлов, каталогов или опции команд, когда вы вводите их в командной строке.

➡️ Команда Complete
▶️Эта команда встроена в Bash и отвечает за основную механику автодополнения. Она позволяет устанавливать конкретные автодополнения для различных команд через ряд параметров.

➡️ Применение пользовательских функций
▶️В Bash существует возможность вызова определенной функции в процессе автодополнения. Данная функция может формировать и возвращать список слов для автодополнения. Для этого используется параметр -F команды complete. В практических приложениях это одна из наиболее часто используемых опций:
$ complete -F _mac_addresses foo
$ foo [Tab][Tab]
09:00:22:eb:1e:29 52:54:00:04:29:35

▶️В приведенном выше примере функция _mac_addresses вызывается при автодополнении. Эта функция является частью механизма автодополнения Bash и отображает MAC-адреса сетевых интерфейсов нашей машины. Поэтому, после нажатия клавиши Tab, были показаны соответствующие MAC-адреса.

➡️ Создание функции для автодополнения
▶️Как упоминалось выше, Bash позволяет вызывать функцию в процессе автодополнения по нажатию клавиши Tab.

▶️Для эффективной работы такая функция должна обладать следующими возможностями:
💠Содержать логику для формирования списка дополняемых слов
💠Получать аргументы командной строки.
💠Основываясь на аргументах командной строки, вычислять список для автодополнения.
💠Передавать сформированный список обратно в оболочку.

▶️Для упрощения этого процесса в Bash предусмотрены некоторые заранее определенные переменные:
💠COMP_WORDS: массив, содержащий аргументы командной строки.
💠COMP_CWORD: индекс в этом массиве, указывающий на текущий элемент.
💠COMPREPLY: итоговый массив, который содержит сформированный список слов. Он, в конечном итоге и будет подставлен для автодополнения.

➡️ Размещение функции
▶️Нам надо разместить нашу функцию в папке, из которой механизм автодополнения сможет её считать и загрузить.

▶️Скрипт /etc/bash_completion отвечает за инициализацию автодополнения Bash. Этот скрипт вызывается при логине пользователя с последующей загрузкой скриптов из директории /etc/bash_completion.d.

▶️Таким образом, файл с нашей пользовательской функцией мы должны разместить в директории /etc/bash_completion.d. После этого, при входе в систему, наша функция будет автоматически подключена и готова к вызову при автодополнении.
Внутри пользовательской функции нам надо определить логику создания списка слов для автодополнения. В Bash существует специальная команда как раз для такой задачи.

➡️ Команда compgen
▶️Команда compgen упрощает процесс сравнения с образцом при автодополнении. Она поддерживает большинство параметров команды complete. Вот её синтаксис:
compgen: usage: compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat]
[-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix]
[word]

➡️ Пример функции
Завершим обзор функцией, которая бы автодополняла нашу условную команду foo.

Предположим, у команды foo есть две опции: bar и car. Для bar у нас есть дополнительные опции drink и eat. Точно так же, для car у нас есть drive и park.
function _foo()
{
latest="${COMP_WORDS[$COMP_CWORD]}"
prev="${COMP_WORDS[$COMP_CWORD - 1]}"
words=""
case "${prev}" in
foo)
words="bar car"
;;
bar)
words="eat drink"
;;
car)
words="drive park"
;;
*)
;;
esac

COMPREPLY=($(compgen -W "$words" -- $latest))
return 0
}

complete -F _foo foo

▶️Сначала создайте файл /etc/bash_completion.d/foo. Затем внутри файла определите функцию _foo. В конце файла вызовите complete для нашей команды foo.

▶️Это простая функция призвана продемонстрировать основную концепцию автодополнений. Мы не определили спецификацию автодополнения для подкоманд. Однако это дает представление о том, как реализовать функцию.

🖼️ Дочитать статью на Habr'e

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Крутая программа для тех, кто уже работает с Linux и хочет погрузиться DevOps.

В двух словах: программа на 2 месяца, ты учишься, тебе еще и платят. Начинка: начинающий и продвинутый курс по Linux, погружение в DevOps. Обучение с практикой, лабораторными и под контролем экспертов из K2 Сloud.

Подробнее можно узнать на сайте
⚙️ Выводим список установленных пакетов в Linux по дате

✔️Порой необходимо узнать когда тот или иной пакет был установлен в операционной системе (например, в целях аудита). В данной статье рассмотрим как вывести список установленных пакетов в Linux, отсортированный по дате установки - давайте разберемся!

▶️Как всем известно, в разных дистрибутивах Linux используются различные пакетные менеджеры, поэтому, в зависимости от операционной системы, команды будут отличаться.
Например, если вы используете дистрибутив Debian (и производные - Ubuntu, Kubuntu, Xubuntu и т.д.), то для вывода списка установленных пакетов достаточно запустить команду:
grep -i "installed" /var/log/dpkg.log 

▶️Как можно догадаться, данная команда выведет список пакетов, если их установка зафиксирована в файле /var/log/dpkg.log. Так как в Linux используется ротация логов с целью экономии места на диске, старые установочные логи хранятся в архивах. Если нужно узнать список вообще всех установленных пакетов в хронологическом порядке, то стоит воспользоваться командой:
zcat /var/log/dpkg.log.* | grep -i "installed" 

▶️Команда zcat читает содержимое заархивированных файлов, после чего вывод перенаправляется на обработку команде grep. Если нужно найти время установки конкретного пакета, название (или хотя бы часть) которого вы знаете, можно сделать так:
zcat /var/log/dpkg.log.* | grep -i "installed" | grep "google-cloud" 2018-09-12 09:42:08 status installed google-cloud-sdk:all 216.0.0-0 

▶️В качестве альтернативы еще можно использовать команду zgrep, например:
zgrep "installed" /var/log/dpkg.log*

▶️Для RPM-based дистрибутивов (RedHat, CentOS, Scientific Linux, Fedora, SUSE) вывести список установленных пакетов по дате можно с помощью следующей команды:
rpm -qa --last

▶️Для поиска даты установки конкретного пакета, достаточно добавить его название в качестве параметра к команде выше, например:
rpm -qa --last postfix3 postfix3-3.2.0-1.gf.el7.x86_64 Thu 25 May 2017 01:04:35 AM EAT 

▶️В дистрибутивах Arch Linux (в том числе Antergos, Manjaro, Apricity, Ninja OS) для решения нашей задачи можно воспользоваться утилитой expac. Для получения информации в понятном формате, вызывать данную утилиту необходимо с использованием параметра:
expac --timefmt='%F %T' '%l %n' 

▶️Можно дополнить данный вызов сортировкой и дополнительными фильтрами - все зависит только от ваших требований.  Например, так можно вывести 5 последних установленных пакетов в системе:
expac --timefmt='%F %T' '%l %n' | sort -n | tail -n 5 2018-01-15 14:41:15 webkitgtk 2018-01-16 09:18:26 babl 2018-01-16 09:18:26 gegl02 2018-01-16 09:18:26 lcms 2018-01-16 09:18:26 libspiro


🖼️ Ссылка на источник

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ dev-setup

✔️Репозиторий с руководством и коллекцией скриптов для настройки среды разработки в macOS. Он предоставляет подробные инструкции и автоматизацию для установки и настройки различных инструментов разработки, языков программирования и приложений, которые обычно используются разработчиками.

➡️ Некоторые преимущества проекта:
▶️Всестороннее покрытие основных инструментов и языков разработки.
▶️Автоматизированный процесс настройки с помощью скриптов оболочки.
▶️Детальная документация и объяснения для каждого компонента.
▶️Регулярное обновление для включения новых версий инструментов и приложений.

🐙 Перейти на Github

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Пора переходить на open source? 🤔

Уже завтра в 11:00 облачный провайдер Cloud.ru проводит бесплатный вебинар для тех, кто открывает для себя мир open source.

В прямом эфире поделятся опытом:
😶‍🌫️как выбирали open source решение;
😶‍🌫️с какими сложностями столкнулись при переходе;
😶‍🌫️как их решали и что в итоге получили.

А еще расскажут про тестирование производительности data plane, нюансы работы control plane и ответят на ваши вопросы.

Еще есть время зарегистрироваться и подключиться.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Bunster

✔️Компилятор для скриптов на Shell, который превращает их в безопасные, портативные и статические бинарные файлы.

▶️Инструмент берёт обычный Bash-код и превращает его в нативный код на Go, а затем компилирует в исполняемый файл. В результате получается производительная, портативная и более защищённая альтернатива классическим скриптам.

➡️ Как это устроено:
▶️Bunster парсит и анализирует Bash-скрипт, определяет синтаксические конструкции (условия, циклы, функции) и проверяет специальные ключевые слова вроде continue и break. Затем генерирует Go-код на основе полученного AST (абстрактное синтаксическое дерево). Каждая функция Shell превращается в функцию на Go, а вызовы внешних программ могут переводиться в соответствующие системные вызовы. После генерации Go-файла задействуется Go Toolchain, код компилируется в бинарный файл, при этом можно указать платформу (linux/amd64, darwin/arm64 и т. д.). На выходе получается единый исполняемый файл, который можно распространять как обычный бинарник без необходимости устанавливать Bash или другие зависимости.

🐙 Перейти на Github

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Все новости из мира программирования на этом канале @umnyiprogrammist

Подписывайтесь, чтобы не упустить ничего важного
⚙️ Скрипт для запуска нескольких серверов одновременно по ssh

✔️Если есть необходимость быстрого запуска нескольких серверов по ssh без ввода паролей, то этот скрипт вам поможет.

▶️Создаем ключи без sudo:

ssh-keygen -t rsa


▶️Копируем публичный ключ на сервера, которые хотим подключить:

ssh-copy-id вашsshакаунт@ваш_адрес_сервера


▶️Берем скрипт:

#!/bin/sh
gnome-terminal --tab --title="server1" --command="ssh вашsshакаунт@192.168.0.1" \

--tab --title="server2" --command="ssh вашsshакаунт@192.168.0.2" \
--tab --title="server3" --command="ssh вашsshакаунт@192.168.0.3" \
--tab --title="server4" --command="ssh вашsshакаунт@192.168.0.4"
exit 0


🖼️ Ссылка на источник

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Подборка популярных каналов по информационной безопасности и этичному хакингу:

🔐 infosec — ламповое сообщество, которое публикует редкую литературу, курсы и полезный контент для ИБ специалистов любого уровня и направления.

😈 Social Engineering — самый крупный ресурс в Telegram, посвященный этичному Хакингу, OSINT и социальной инженерии.

💬 Вакансии в ИБ — актуальные предложения от самых крупных работодателей и лидеров рынка в сфере информационной безопасности.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Как проверить правильность URL-адреса из оболочки Linux

✔️При работе в среде оболочки бывают случаи, когда необходимо проверить, действителен ли URL-адрес, прежде чем использовать его для других операций.
Вы узнаете несколько простых и эффективных способов проверить, существует ли URL, прямо из нашей оболочки.

➡️ Основные методы проверки URL
▶️В оболочке в нашем распоряжении есть два основных инструмента для проверки существования URL. Это curl и wget.

➡️ Использование curl
curl – это инструмент командной строки, который мы можем использовать для передачи данных на серверы или с серверов по различным протоколам (включая HTTP и HTTPS).
Среди множества его возможностей, мы можем использовать curl для проверки того, указывает ли URL на реальный, доступный ресурс.

▶️Теперь давайте рассмотрим несколько различных способов использования curl.
Для начала давайте рассмотрим простой скрипт для проверки существования URL-адреса с помощью curl:
#!/bin/bash
if curl --head --silent http://www.baeldung.com/ > /dev/null 2>&1; then
echo «URL существует»
else
echo «URL не существует или недоступен»
fi

▶️Давайте разберем ключевые части этого скрипта:
curl: это инструмент командной строки, который мы используем для взаимодействия с веб-сайтом
-head: указывает curl использовать только забор «заголовочной» информации с веб-сайта, а не скачивать всю веб-страницу целиком
-silent: поддерживает порядок, скрывая обычный прогресс и статусный вывод curl
> /dev/null 2>&1: отправляет стандартный вывод (stdout) и стандартную ошибку (stderr) в /dev/null, эффективно отбрасывая любой вывод, который мог бы произвести curl

▶️Кроме того, оператор if проверяет код выхода команды curl. Если он равен 0 (успех), то URL существует и доступен.
Если же код выхода ненулевой (ошибка), то URL может не существовать или возникла проблема с соединением.

▶️Далее рассмотрим, как можно сохранить код ответа HTTP в переменной для дальнейшей обработки ошибок:
#!/bin/bash
result=$(curl --head --silent --write-out «%{http_code}» --output /dev/null https://www.google.com/)
if [[ $result -eq 200 ]]; then
echo «URL существует»
else
echo «URL не существует или недоступен»
fi

▶️В приведенном выше блоке кода ключевым дополнением является -write-out «%{http_code}».
Это указывает curl включить в вывод код состояния сайта по протоколу HTTP.
Затем мы фиксируем этот вывод в переменной result.
Кроме того, оператор if проверяет значение переменной result.
Если оно равно 200, это означает, что URL существует.
Однако если результат не равен 200, возможно, возникла проблема или URL не существует.

➡️ Использование wget
wget – это инструмент, который мы можем использовать для загрузки файлов из Интернета.
Он также предоставляет удобный способ проверки существования URL.

▶️Теперь давайте посмотрим, как работает wget:
#!/bin/bash
if wget --spider https://www.facebook.com/ > /dev/null 2>&1; then
echo «URL существует»
else
echo «URL не существует или недоступен»
fi


▶️В приведенном выше скрипте:
wget: пытается загрузить файлы с веб-сайта
-spider: указывает wget проверить, существует ли файл или ресурс, не скачивая его на самом деле
> /dev/null 2>&1: перенаправляет весь вывод в /dev/null, чтобы отбросить его.

▶️Как и в curl, wget использует коды выхода для передачи результатов операции.
Как правило, код выхода 0 означает успех (URL существует), в то время как другие коды указывают на ошибку или несуществование URL.
Кроме того, мы можем полностью изменить вывод wget, что приведет к более чистому выполнению скрипта.

▶️Давайте разберемся, как работает эта опция:
#!/bin/bash
if wget --spider -q https://www.google.com; then
echo «URL существует»
else
echo «URL не существует или недоступен»
fi

▶️В приведенном выше примере параметр -q указывает wget работать в тихом режиме, не выводя никаких данных на консоль.
Остальная часть скрипта работает так же, как и в предыдущем примере.
Таким образом, хотя wget в первую очередь предназначен для загрузки файлов, его режим -spider – это быстрый и простой способ проверить, существует ли веб-сайт или ресурс.

🖼️ Дочитать статью

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Service mesh: тренд, необходимость или хайп?

Приглашаем обсудить это на бесплатном вебинаре от учебного центра Слёрм.

Что будет на вебинаре:

➡️ посмотрим на service mesh с разных точек зрения: эксплуатации и разработки;
➡️ обсудим, какие преимущества дает service mesh и какие у него особенности;
➡️ определим основные понятия и посмотрим на примеры реализации service mesh.

И еще, кстати, разберём, бесплатен ли service mesh и какова его реальная цена.

Эксперты встречи — спикеры курсов Слёрма:
— Павел Лакосников, TeamLead SLA в Авито
— Георг Гаал, CTO, Aenix

Когда: 19 февраля в 19:00

👉 Занять место на вебинаре — через бота.

Реклама. ООО "СЛЁРМ". ИНН 3652901451.
⚙️ Сравнение Bash и Python при написании скриптов в Linux

✔️Sh (от англ. shell) является обязательным командным интерпретатором для UNIX-совместимых систем по стандарту POSIX. Однако по возможностям он ограничен, поэтому зачастую вместо него используются более богатые возможностями командные интепретаторы, такие как Bash или Ksh. Ksh обычно используется в операционных системах семейства BSD, в то время как Bash — в операционных системах семейства Linux. Командные интерпретаторы облегчают решение мелких задач, связанных с работой с процессами и файлами. В данной статье будут рассматриваться операционные системы Linux, поэтому речь пойдёт о Bash.

▶️Python, в свою очередь, является полноценным интерпретируемым языком программирования, также он нередко используется для написания скриптов или решения мелких прикладных задач. Современную UNIX-подобную систему сложно представить как без sh, так и без Python, если только это не устройство с минималистичной ОС вроде маршрутизатора. Например, в Ubuntu Oracular пакет python3 удалить не получится хотя бы потому, что от него зависит пакет grub-common, от которого, в свою очередь зависят пакеты grub2-common и, соответственно, grub-pc, то есть непосредственно загрузчик операционной системы. Таким образом, Python 3 можно смело использовать как замену Bash в случае необходимости.

▶️При решении различных задач на уровне ОС или файловой системы может возникнуть вопрос, а какой же из языков, Bash или Python выгодно использовать в том или ином случае? И тут всё будет зависеть от решаемой задачи. Bash выгоден, когда нужно быстро решить каку‑либо простую задачу, связанную с управлением процессами, поиском или изменением файлов. В случае же усложнения логики код на Bash становится слишком громоздким и трудночитаемым (хотя читабельность в первую очередь будет зависеть от самого программиста). Можно, конечно код разбивать на скрипты и функции, делать sh-библиотеки, подключаемые через команду source, но модульными тестами это уже сложно будет покрывать.

➡️ Содержание статьи:
▶️Предисловие
▶️Отладка скриптов
▶️▶️Отладка в Bash
▶️▶️Отладка в Python
▶️Сравнение семантики Bash и Python
▶️Работа с файловой системой и процессами
▶️Возможность компиляции
▶️Выбор языка в зависимости от задачи
▶️Рекомендуемая литература

🖼️ Дочитать статью на Habr'e

🔨 bash_help
Please open Telegram to view this post
VIEW IN TELEGRAM
Знаем, что многие тут хотят уйти в DevOps или серьезно в нем прокачаться. Но не знают, где взять информацию и четкий план.

💪 Советуем бесплатный мета-курс Devops Roadmap - это расширенный чек-лист, который поможет сориентироваться в мире DevOps и стать крутым спецом.

👀 В мета-курсе перечислены все основные разделы и навыки, которыми должен обладать DevOps инженер: от Linux до программирования в удобном формате.

✔️А еще он будет полезен при подготовке к собеседованиям.

👽 Кстати, бонусом крутой канал о девопс. Там тоже самые свежие IT-новости, полезные советы от DevOps-инженера с 20-летним стажем, эксклюзивные материалы, релизы топовых инструментов, обзоры вакансий и личный взгляд на девопс-сферу.