Forwarded from Записки админа
📝 Parsing Workshop.
Заметки о парсинге данных. Bash, python, sed, awk и т. п. Есть и примеры, и упражнения для закрепления.
https://github.com/InsightDataScience/Parsing-Workshop
#github #bash #sed
Заметки о парсинге данных. 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
https://www.udemy.com/course/complete-bash-shell-scripting/
#bash #shell #sh
Хорошо ли вы знаете GNU утилиты?
Вот задачка для разминки мозга:
Есть kubernetes кластер. Часть нод в нем с метками type=runner. Нужно посчитать общее количество процессорных ядер на всех нодах с этой меткой.
Можно использовать любые вспомогательные технологии: ansible, python, всё, что вам кажется правильным.
У меня есть несколько способов решения. Напишу о них до конца недели
Жду ваших решений в комментах
#задача #bash
Вот задачка для разминки мозга:
Есть kubernetes кластер. Часть нод в нем с метками type=runner. Нужно посчитать общее количество процессорных ядер на всех нодах с этой меткой.
Можно использовать любые вспомогательные технологии: ansible, python, всё, что вам кажется правильным.
У меня есть несколько способов решения. Напишу о них до конца недели
Жду ваших решений в комментах
#задача #bash
Иногда ответы на Stackoverflow лучше любого курса, поста или ман страницы. И это именно такой случай. Зачем нужны кавычки в bash скриптах? Не спешите закрывать пост, если не пишете баш скрипты. Тут подробно описано к чему (а главное, как) может привести несерьезное отношение к экранированию входных данных.
И в дополнение анализатор шелл скриптов. С веб версией, плагином к любимому редактору и примерами плохого кода прямо в репе
Ну и в догонку пачка полезных советов
#shell #bash #security
И в дополнение анализатор шелл скриптов. С веб версией, плагином к любимому редактору и примерами плохого кода прямо в репе
Ну и в догонку пачка полезных советов
#shell #bash #security
Unix & Linux Stack Exchange
Security implications of forgetting to quote a variable in bash/POSIX shells
If you've been following unix.stackexchange.com for a while, you
should hopefully know by now that leaving a variable
unquoted in list context (as in echo $var) in Bourne/POSIX
shells (zsh being the
should hopefully know by now that leaving a variable
unquoted in list context (as in echo $var) in Bourne/POSIX
shells (zsh being the
Часто приходится писать bash скрипты. Я далеко не специалист в баше и недавно осознал одну вещь.
Каждый скрипт должен иметь статус выхода. Зачем? Да просто потому что он может использоваться другими скриптами или вызываться из других систем, например CI. Если скрипт выполнился с ошибками, но на выходе мы получили статус 0, что говорит о его успешном выполнении, то, к примеру Gitlab CI, посчитает его успешно выполнившимся и передаст управление следующей задаче. Но ведь наш скрипт может готовить данные для следующих задач, а значит они пройдут некорректно.
ВЫВОД 1: скрипт должен иметь статус выхода: 0 - всё хорошо, !0 - что-то пошло не так
Решить эту задачу достатчно просто: используем
Но иногда команда может выполниться с ошибкой, но для нас это ожидаемо и нужно продолжить выполнение кода. Например, мы хотим проверить существование репозитория в GitHub и, если его нет - создать репозиторий. В CI имеем две джобы - проверка и создание.
Для проверки запускаем
ВЫВОД 2: при ожидании ошибки нужно проверять вывод и, в зависимости от него, выдавать статус выхода
#bash #script
Каждый скрипт должен иметь статус выхода. Зачем? Да просто потому что он может использоваться другими скриптами или вызываться из других систем, например 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 указывает, что в переменную нужно писать не только успешный вывод, но и ошибкуДля многих это очевидно, но я в очередной раз столкнулся с этой проблемой и решил написать об этом, чтобы не забыть на будущее и лучше разобраться в вопросе. Этот пример успешно работает в ArgoWorkflow. Понятное описание флагов тут
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
#bash #script
Gist
set -e, -u, -o, -x pipefail explanation
set -e, -u, -o, -x pipefail explanation. GitHub Gist: instantly share code, notes, and snippets.
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 #onelinerEnable Sysadmin
20 one-line Linux commands to add to your toolbox
Every Linux user has a favorite single-line command. Here are the 20 Linux commands we can't live without.