Mikrotik Ninja
3.23K subscribers
326 photos
6 videos
54 files
1.11K links
Канал по новым компьютерным технологиям и защите компьютерных программ


Блог http://bubnovd.net
https://medium.com/@dbubnov
https://xakep.ru/author/bubnovd/
Мысли неглупых людей https://t.me/channel1name
Книги https://t.me/mreadninja
Download Telegram
📝 Parsing Workshop.

Заметки о парсинге данных. Bash, python, sed, awk и т. п. Есть и примеры, и упражнения для закрепления.

https://github.com/InsightDataScience/Parsing-Workshop

#github #bash #sed
Forwarded from Sysadmin Tools 🇺🇦
10 часовой Бесплатный видео курс по Shell scripting

https://www.udemy.com/course/complete-bash-shell-scripting/

#bash #shell #sh
Хорошо ли вы знаете GNU утилиты?

Вот задачка для разминки мозга:
Есть kubernetes кластер. Часть нод в нем с метками type=runner. Нужно посчитать общее количество процессорных ядер на всех нодах с этой меткой.

Можно использовать любые вспомогательные технологии: ansible, python, всё, что вам кажется правильным.

У меня есть несколько способов решения. Напишу о них до конца недели

Жду ваших решений в комментах

#задача #bash
Иногда ответы на Stackoverflow лучше любого курса, поста или ман страницы. И это именно такой случай. Зачем нужны кавычки в bash скриптах? Не спешите закрывать пост, если не пишете баш скрипты. Тут подробно описано к чему (а главное, как) может привести несерьезное отношение к экранированию входных данных.

И в дополнение анализатор шелл скриптов. С веб версией, плагином к любимому редактору и примерами плохого кода прямо в репе

Ну и в догонку пачка полезных советов

#shell #bash #security
Часто приходится писать bash скрипты. Я далеко не специалист в баше и недавно осознал одну вещь.

Каждый скрипт должен иметь статус выхода. Зачем? Да просто потому что он может использоваться другими скриптами или вызываться из других систем, например CI. Если скрипт выполнился с ошибками, но на выходе мы получили статус 0, что говорит о его успешном выполнении, то, к примеру Gitlab CI, посчитает его успешно выполнившимся и передаст управление следующей задаче. Но ведь наш скрипт может готовить данные для следующих задач, а значит они пройдут некорректно.
ВЫВОД 1: скрипт должен иметь статус выхода: 0 - всё хорошо, !0 - что-то пошло не так

Решить эту задачу достатчно просто: используем set -euo pipefail
-e
заставляет скрипт немедленно остановиться после ошибки в любой команде
-u проверяет корректность заданных переменных. Если на вход скрипта не пришла нужная переменная, то он упадет с ошибкой
-o pipefail проверяет работу перенаправлений. Например, эта команда выполнится без ошибки без флага -o pipefail : grep some-string /non/existent/file | sort . А с флагом выпадет с ошибкой

Но иногда команда может выполниться с ошибкой, но для нас это ожидаемо и нужно продолжить выполнение кода. Например, мы хотим проверить существование репозитория в GitHub и, если его нет - создать репозиторий. В CI имеем две джобы - проверка и создание.
Для проверки запускаем gh repo view $REPO . Если репозиторий есть, код выхода 0. Если нет - 1. Если мы не смогли получить доступ к GitHub из-за протухшего токена, тоже получим 1. Но ведь в случае ошибки нам нужно запустить следующую джобу, а она не запустится, если проверка выпала с ошибкой.
ВЫВОД 2: при ожидании ошибки нужно проверять вывод и, в зависимости от него, выдавать статус выхода

# Получаем сообщение от GitHub. 2>&1 указывает, что в переменную нужно писать не только успешный вывод, но и ошибку
RESULT=$(gh repo view $REPO 2>&1)
# Если репа существует - считаем скрипт успешно выполненным и выходим
if [ $? -eq 0 ]; then
echo "0"
exit 0
# Если репы нет - считаем скрипт успешно выполненным и отдаем на выход 1. Следующая джоба по этому коду понимает, что нужно запуститься
elif [ "$RESULT" = "GraphQL error: Could not resolve to a Repository with the name $REPO." ]; then
echo "1"
exit 0
else
# если текст ошибки другой - считаем, что что-то пошло не так и выходим с ошибкой exit 255
echo ERROR: $RESULT
exit 255
fi

Для многих это очевидно, но я в очередной раз столкнулся с этой проблемой и решил написать об этом, чтобы не забыть на будущее и лучше разобраться в вопросе. Этот пример успешно работает в ArgoWorkflow. Понятное описание флагов тут

#bash #script
20 one-line Linux commands to add to your toolbox

Однострочники из которых можно почерпнуть интересные идеи, например, забэкапить директорию на удаленный сервер:
tar --create --directory /home/josevnz/tmp/ --file - *| \
ssh raspberrypi "tar --directory /home/josevnz \
--verbose --list --file -"

#bash #oneliner