reload_flag=""
if [[ -n "${DEBUG}" ]]; then
reload_flag="--reload"
fi
if [[ -n "${WORKER_COUNT}" ]]; then
workers=${WORKER_COUNT}
else
workers=2
fi
gunicorn --workers ${workers} \
--bind 0.0.0.0:8000 \
${reload_flag} main.wsgi
Писали такие конструкции чтобы проверить наличие флага и сформировать команду правильно?
На самом деле можно сделать тоже самое проще. Для этого используются операторы условной подстановки, доступные в оболочках семейства POSIX.
:- для установки значений по умолчанию
${WORKER_COUNT:-2}
Если переменная не объявлена, то будет дефолтное значение 2.
:+ подставляет указанный текст, если переменная не пуста
${DEBUG:+--reload}
Если что-то есть в переменной то распечатается текст после символа +, в противном случае - ничего. Удобно для опциональных флагов, как в нашем примере.
Итого наш скрипт может выглядеть так:
gunicorn --workers ${WORKER_COUNT:-2} \
--bind 0.0.0.0:8000 \
${DEBUG:+--reload} main.wsgi
Есть еще два оператора.
:= не только подставить дефолтное значение, но и присвоить его переменной, если она пуста
# никаких переменных еще нет
VAL1=${VAL2:=hello}
# теперь доступны обе
echo $VAL1 $VAL2
# hello hello
:? остановить выполнение с ошибкой, если переменной нет.
echo ${MISS:?is required}
bash: MISS: is required
Код выхода будет 1.
#tricks#linux
A useful command when you encounter conflicts while cherry-picking:
tig HEAD $(git rev-parse CHERRY_PICK_HEAD 2>/dev/null) -- $(git diff --name-only --diff-filter=U | head -1)
#tricks@sudo_recast
• Нашел очень крутой ресурс с бесплатными лабораторными работами и туториалами для ИБ специалистов. Единственный минус - не вся информация переведена на русский язык. Никаких видео — только полностью интерактивные лаборатории, разработанные для более быстрого и эффективного обучения. Даже есть ИИ помощник, если возникнут трудности с выполнением заданий...
➡️https://labex.io/ru
• LEARNING PATH:
➡Learn Linux;
➡Learn DevOps;
➡Learn Cybersecurity;
➡Learn Database;
➡Learn Python;
➡Learn Docker;
➡Learn Java;
➡Learn Jenkins;
➡Learn Machine Learning;
➡Learn Kali Linux.
• PROJECTS & TUTORIALS:
➡All Interactive Tutorials;
➡Linux Projects;
➡Python Projects;
➡Java Projects;
➡Numpy Projects;
➡Linux Tutorial;
➡Docker Tutorial;
➡Cybersecurity tutorial;
➡Free Labs;
➡Linux Commands Cheat Sheet.
• PLAYGROUNDS:
➡Online Linux Terminal;
➡Online Docker Playground;
➡Online Python Playground;
➡Online Golang Playground;
➡Online C++ Playground;
➡Online Java Playground;
➡Online Rust Playground;
➡Online MySQL Playground;
➡Online Ansible Playground;
➡Online Jenkins Playground.
• LATEST TUTORIALS:
➡Python Itertools Combinations;
➡Docker Compose with Host Network;
➡Systemctl daemon-reload in Linux;
➡Match Patterns with Bash Regex;
➡DevOps Free Labs;
➡Find Key with Max Value in Python Dictionary;
➡Linux Free Labs;
➡Bash Function Return Values;
➡Area and Circumference of a Circle in C;
➡Cybersecurity Free Labs.
#Linux#DevOps#ИБ
• Весьма любопытный tui тренажёр для обучения основам работы в терминале. Содержит около 70 заданий, которые вам предстоит решить. Проходить увлекательно и полезно, так что рекомендую для самообразования и получения необходимого опыта.
➡️https://github.com/learnbyexample/TUI-apps
• Кстати, у автора есть ещё несколько tui программ, с помощью которых можно потренироваться в работе с awk, grep, sed и регулярками...
#CLI#Linux
• the art of command line - невероятно полезный гайд по использованию командной строки в Linux, к которому приложили руку множество авторов и переводчиков. Еще здесь есть разделы про Windows и macOS, а также универсальные советы, применимые для операционных систем на базе UNIX. Подходит как для новичков, так и для опытных специалистов. Гайд опубликован на разных языках, включая русский.
➡Описание;
➡Основы;
➡Ежедневное использование;
➡Процессинг файлов и информации;
➡Системный дебаггинг;
➡В одну строчку;
➡Сложно, но полезно;
➡MacOS only;
➡Windows only;
➡Больше информации по теме;
➡Дисклеймер.
➡️https://github.com/jlevy/the-art-of-command-line
#Linux#CLI
🪨Все по песочницам!
• Представьте, что вам нужно запустить некоторый процесс Linux в изолированной среде. Так, чтобы он не смог нанести вред системе, на которой запускается. Какие инструменты мы используем в таких случаях? Первое, что приходит в голову, это технологии виртуализации или контейнеризации. Но что, если нам нужно что-то более легковесное и простое в использовании? Bubblewrap — это утилита командной строки, которая является одним из проектов сообщества Containers (знаменито авторством таких инструментов, как Podman, Buildah, Skopeo и др.).
• Когда может быть полезен:
➡Невысокие требования к изоляции процесса и системы;
➡Недопустимы накладные расходы как у более сложных средств изоляции;
➡Тестирование (поведения) программы в разных условиях эксплуатации;
➡Запуск программ/скриптов/кода, полученных из ненадежных источников;
➡Лимитирование расхода ресурсов для отдельно взятого процесса;
➡Изменение структуры файловой системы для запускаемого процесса.
• Стоит сказать, что bubblewrap — это не то ПО, которое предоставляет готовую "песочницу" с определенной политикой безопасности. В некоторых вариантах использования bubblewrap требуется граница безопасности между изолированной средой и реальной системой; в других вариантах использования требуется возможность изменять расположение файловой системы для процессов внутри изолированной среды, но не ставится цель создания границы безопасности. В результате уровень защиты между изолированными процессами и хост-системой определяется аргументами, передаваемыми bubblewrap.
• Таким образом, используя аргументы командной строки, вы сами определяете уровень изоляции запускаемого процесса. При этом под капотом Bubblewrap использует стандартные средства Linux, которые не требуют повышения привилегий пользователя: chroot, clone, seccomp, cgroups, landlock.
• Основные плюсы:
➡Не требуются root-привилегии;
➡Изолирует работу только одного процесса;
➡Может использоваться для изоляции приложений с графическим UI;
➡Предоставляет большой спектр настроек лимитирования;
➡Простая установка и использование;
➡Низкие накладные расходы на изоляцию.
• Основной минус — это то, что ограничение на ресурсы системы устанавливаются только с использованием cgroup. Это значит, что для полноценной работы bwrap в Docker/Kubernetes-контейнере последний придется запустить в privileged-режиме!
➡️https://github.com/containers/bubblewrap
• Дополнительно:
• Firejail — гибкий и мощный инструмент изоляции, который не просто контролирует доступ к файловой системе, а полностью отрезает приложение от основной системы с помощью механизма Linux Namespaces. Подробнее тут: https://t.me/it_secur/1053
#Linux#Песочница
Linux Kernel Teaching. Laboratory
*
Большой и годный сборник лекций и лабораторных работ по ядру Linux. Лекции посвящены теоретическому исследованию ядра Linux.
Лабораторки сделаны в стиле инструкций.
Будет полезно: админам, драйверописателям и специальным разработчикам
*
Link
#linux#kernel
Bashtop, Linux resource monitor that shows usage and stats for processor, memory, disks, network and processes.
#tools#terminal#linux
@thedevs
https://kutt.it/OBxUjn