ch
Feedback
Bash Days | Linux | DevOps

Bash Days | Linux | DevOps

前往频道在 Telegram

Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.ru

显示更多

📈 Telegram 频道 Bash Days | Linux | DevOps 的分析概览

频道 Bash Days | Linux | DevOps (@bashdays) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 23 788 名订阅者,在 技术与应用 类别中位列第 5 702,并在 俄罗斯 地区排名第 28 099

📊 受众指标与增长动态

невідомо 创建以来,项目保持高速增长,吸引了 23 788 名订阅者。

根据 19 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -226,过去 24 小时变化为 1,整体触达仍然可观。

  • 认证状态: 未认证
  • 互动率 (ER): 平均受众互动率为 23.40%。内容发布后 24 小时内通常能获得 13.11% 的反应,占订阅者总量。
  • 帖子覆盖: 每篇帖子平均可获得 5 567 次浏览,首日通常累积 3 119 次浏览。
  • 互动与反馈: 受众积极参与,单帖平均反应数为 22
  • 主题关注点: 内容集中在 bashdays, linux, bash, docker, скрипт 等核心主题上。

📝 描述与内容策略

作者将该频道定位为表达主观观点的平台:
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.r...

凭借高频更新(最新数据采集于 20 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

23 788
订阅者
+124 小时
-217
-22630
帖子存档
😎Во многих успешных командах тимлид является не просто исполнителем, но партнером своих заказчиков или product-менеджера. Эт
😎Во многих успешных командах тимлид является не просто исполнителем, но партнером своих заказчиков или product-менеджера. Это означает, что он становится полноправным совладельцем перечня задач и инициатив, причем не только технического характера. Поэтому тимлид, который умеет управлять бэклогом для своей команды, крайне ценится в компании. 🔥Узнайте больше на бесплатном уроке: «У настоящего тимлида нет цели - есть только бэклог» На занятии обсудим: — тонкости формирования бэклога — аспекты разделения ресурсов на различные инициативы — возможные исключительные ситуации в работе с перечнем задач 👉Регистрируйтесь на эфир → Понравился урок — берите полный курс «Team Lead разработки», его можно пройти по специальной цене, и даже в рассрочку. Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Привет, всем, ага. С утра разминочка, а ближе к обеду про более серьезные вещи поговорим. Наверняка ты знаешь, что при нажатии сочетания клавиш CTRL+D завершится текущая интерактивная оболочка. То есть если ты сидишь на сервере по ssh и нажал CTRL+D, сессия прервется. ОК. При нажатии такого сочетания, оболочка при чтении устройства терминала получит признак конца файла и завершится если строка пуста. Нюанс, если в командной строке набрать какие-то символы и нажать CTRL+D, то ничего не произойдет. Как еще можно завершить сессию с командной оболочкой? Ну например установить значение переменной TMOUT больше нуля. Цифра будет означать секунды.
# TMOUT=5

Текущая сессия закроется через 5 секунд. Следующий вариант это активировать параметр оболочки «t» с помощью команды set.
set -t 

Выбросило! НО! Оболочка прекратит свою работу, только после того, как завершится работа запущенных команд в текущий строке. Например:
set -t ; read

Выход произойдет, только после нажатия клавиши Enter. А в примере ниже:
set -t ; read -t3

Выход будет произведен после нажатия Enter ИЛИ по прошествию 3х секунд. Так. Еще есть вариант с параметром «e». Указав его оболочка завершает работу после возникновения ошибки. Например:
set -e ; false

Команда false ничего не делает, но завершается всегда с ошибкой. Как правило, используется при написании bash скриптов. Более человеческий пример:
set -e ; Паравозблять

И снова выкинуло. Потому что вернулась ошибка - Паравозблять: command not found. Что еще упустили… Упустили команду exec. Подвешиваем на стандартный ввод устройство /dev/null.
exec </dev/null

При чтении этого устройства оболочка получит признак конца файла и успешно завершится. Ааа, еще же exit есть. Не буду его обижать, пусть тоже в этом посте присутствует. Ну и как обычно, на закуску.
tty eof $'\t'

Ёпта, что это? Это хак. После выполнения этой команды у тебя появится возможность закрыть текущую оболочку по нажатию на клавишу TAB. Ввод символа табуляции, посылает сигнал конца файла и оболочка прекращает свою работу. stty (Set Teletype) - Эта команда управляет настройками терминала и позволяет пользователю вносить изменения в терминал и отображать его характеристики. Всё, стоп! После обеда покажу, как с помощью strace можно инжектить в системные вызовы процессов для отладки некоторых ёбнутых случаев. Увидимся! tags: #bash #linux💩 @bashdays

Купил сегодня вентилятор для малины (raspberry pi) на 12v и только потом понял, что на борту платы есть лишь 3v и 5v. Короче
Купил сегодня вентилятор для малины (raspberry pi) на 12v и только потом понял, что на борту платы есть лишь 3v и 5v. Короче собрал из старого и нового один рабочий, взлетело, хорошо быть инженером. Ладно, давай про strace. Сегодня научимся смотреть что запускает программа и с какими параметрами она это запускает. Возьмем для испытаний программу man и распотрошим её. Команда man позволяет получить доступ к общей базе справки по команде, функции или программе. Обычно для просмотра справки программе надо передать название команды или другого объекта в системе. Екзекутим такую штуку:
strace -o logs -s1024 -fe execve man bash

Ага, запустилось. Перед тобой открылась страница помощи bash. Что дальше. Дальше нажимаешь клавишу «q», все это дело закрывается. Давай теперь по ключам, а потом уже разберемся что произошло. s = длина выводимой строки f = отслеживаем дочерние процессы e = какой системный вызов отслеживаем o = куда сохраним результаты трассировки Если не указывать ключ «o», то результаты запишутся в стандартный поток STDERR. И чо? А ничо, давай смотреть результаты, которые записались в файл с именем logs.
cat logs

На экран вывелись результаты трасировки команды man. На картинке к этому посту, можешь посмотреть результат. Вот таким образом мы узнали какие утилиты и с какими аргументами запускается программа man для распаковки и форматирования man страниц. То есть ты можешь отдебажить свою собственную программу, которая запускает какие-то внешние утилиты и т.п. И посмотреть что конкретно она запускает и с какими параметрами. Я так недавно php дебажил, который запускал ffmpeg из скрипта. Ладно, пойду дальше пиво пить. Не отвлекаю, увидимся! tags: #bash #linux #debug🟢 Подпишись: @bashdays

Так, давай сегодня обмусолим «HEREDOC». На вписках башников его гордо величают «Хердок». Что это такое? Ну смотри, допустим ты пишешь башник и оказываешься в ситуации, когда тебе нужно передать многострочный кусок текста, какой-нибудь команде типа cat, tee, ssh и т.п. Вот с помощью «хердок» такое можно провернуть. Пока не очень понятно, давай разбираться на примерах.
cat << EOF
SUKA BLYA CURRENT DIR: $PWD
YOU ARE LOGGED IN ASS: $(whoami)
EOF

В этом примере я передаю команде cat две строки текста, в первой есть переменная среды PWD, во второй команда whoami. По итогу выхлоп будет такого плана:
SUKA BLYA CURRENT DIR: /home/user
YOU ARE LOGGED IN ASS: user

Как видишь PWD и $(whoami) автоматически подставились. Ну и главная фича, что я не использовал для вывода команду echo. При другом раскладе код был бы таким:
echo "SUKA BLYA CURRENT DIR:" $PWD
echo "YOU ARE LOGGED IN ASS:" $(whoami)

Согласись, что с «хердоком» это выглядит более лаконичным. Не нужно писать 100500 echo. Хердокаешь и меньше говнокода становится. Теперь давай выполним такой код:
cat << "EOF"
SUKA BLYA CURRENT DIR: $PWD
YOU ARE LOGGED IN ASS: $(whoami)
EOF

Заключив EOF в кавычки, я запретил заменять переменные, команды и спецсимволы. Короче на экран выведется такая шляпа:
SUKA BLYA CURRENT DIR: $PWD
YOU ARE LOGGED IN ASS: $(whoami)

Видал да? PWD и $(whoami) не заменились, а остались в прежнем виде. Заебись Хорошо! Теперь давай рассмотрим такую конструкцию:
cat <<- EOF
    Hello
    Bitch
EOF

В первой строке я добавил символ «-». Символ «-» приводит к игнорированию всех ведущих символов табуляции, что позволяет использовать отступы в синтаксисе «хердока». Пробелы не допускаются, только символ табуляции. Перед «Привет» и «Пляж» я нажал TAB. Короче символ «-» позволяет делать отступы в коде с лидирующим Табом. Не знаю, я этим минусом вообще не пользуюсь, мне хватает того, что есть в коробке. Теперь запускаем такое:
cat << EOF > output.txt
SLUNI DO POLU $PWD
HERANUKA PO ROYALU $(whoami)
EOF

А чо произошло? Хе… а весь выхлоп, который должен был вывестись на экран — сохранился в файл output.txt. Вот такая магия! Если файл не существует, то создастся новый. Ну а если хочешь файл дополнить, то вместо «>» используй двойные символы «>>», но думаю ты это и так знаешь. Передавать поток, можно не только в файл, но и в другие команды. Давай возьмем sed:
cat <<'EOF' | sed 's/i/ee/g'
Rich
Bitch
EOF

По итогу получим, что все символы «i» заменятся на «ee». На экран выведется:
Reech
Beetch

Конструкция напоминает франкенштейна, но если базу понимать, то все легко и просто. Но я думаю, что хорошо объясняю и тебе всё понятно. Если чо, спрашивай в комментах, раскидаем. Ну и как обычно на закуску, практическое применение этого самого «хердока»:
ssh -T user@bashdayz.ru << EOF
ls -la
date
apt update
uptime
cat /etc/issue
EOF

Конектимся по ssh на сервер и выполняем пачкой задачи. Получается засылаем подготовленный пакет с командами и что-то делаем. Можно сделать скрипт базовой настройки сервера, чтобы ansible к примеру не городить. А можно циклом пройтись по списку серверов и избавиться от продакшена. Если продакшен перестал падать, значит его больше нет, значит по ночам тебя перестанут будить. На этой ноте, собственно всё. Больше тут и рассказать нечего. Я редко пользуюсь «хердоком», но часто встречаю его в чужих скриптах. Тут скорее важен момент понимания, что происходит, а не момент использования. Вот теперь ты знаешь и сможешь читать более вдумчиво чужой говнокод. Давай! Еще раз хороших тебе выходных, увидимся! tags: #bash #linux — 🟢 Подпишись: @bashdays

Как бэкенду и QA-команде разрабатывать и тестировать платформу, чтобы облегчить разработчикам жизнь и сделать крутой продукт? Расскажут на митапе Avito Platform engineering meetup #2. 📍Забронировать место в зале | 26 октября в 18:30 📺 Подключиться к онлайн-трансляции на YouTube Среди тем — опыт релиза платформы, использование OpenAPI-схемы, Service Mesh авторизации и стандартизации разработки сервисов. Спикерам можно будет задать вопрос как офлайн, так и в прямом эфире.

Привет! При работе с длинными консольными командами, возникает некий дискомфорт. Буквально вчера пришлось запускать docker ко
Привет! При работе с длинными консольными командами, возникает некий дискомфорт. Буквально вчера пришлось запускать docker контейнер без всяких композов и прочих обвязок. Команда получилась НУ 3.14здец длинной и не читаемой. Почесал я свою лысую кабину и решил поискать тулзу, чтобы избавиться от этого дискомфорта. Ну и нашел неплохой форматер. Вставляешь в инпут свою монструозную команду и на выходе получаешь человеческое чтиво, разделенное символам переноса. Короче тулза ништяк все это форматирует и по итогу не надо самостоятельно бегать и тыкать 100500 раз кнопку Enter. Скопипастил себе в блокнотик и редактируешь в своё удовольствие. Разработал и реализовал эту штуку, естественно ленивый девопс, у которого глаза выпали от консольных конструкций при работе с гугол облаком. 💩 Сервис в онлайне 🐱 Исходники на github Можно на свой сервак поставить, если есть желание, там typescript. Но думаю тебе и онлайн сервиса за глаза хватит. Вечером поговорим наверное про хердок «HEREDOC» или про что-то другое. Увидимся! Лови котиков 🥺 👍 🏃‍♂️ Ну и всем лёгкой рабочей пятницы и хороших предстоящих выходных! tags: #bash #services — 🟢 Подпишись: @bashdays

сегодня на изи, картинка... tags: #рабочиебудни — 🟢 Подпишись: @bashdays
сегодня на изи, картинка... tags: #рабочиебудни — 🟢 Подпишись: @bashdays

сегодня на изи, картинка... tags: #рабочиебудни — 🟢 Подпишись: @bashdays
сегодня на изи, картинка... tags: #рабочиебудни — 🟢 Подпишись: @bashdays

Давай замутим ченить свое, простое и полезное. В этом посте изобретем шаринг файлов/папок с серверов прямо к себе в телеграм. Будем использовать bash и API телеграма. Задача: 1. Нужно создать tar.gz архив файл/папку на сервере. 2. Закинуть этот архив себе в телеграм. 3. Почистить за собой. Для начала сделаем телеграм бота, идем в @BotFather и получаем токен, вида: 11223344:HUYPIZDADJIGURGA. Я назову бота bashdayz_bot. Подробности всей этой кухни описывать не буду, как ботов делать. Но там все просто, БотБатя тебе подскажет, приключений на 15 секунд, главное забрать токен. Если не разберешься, пиши в комментариях, поможем. Так, токен есть. Теперь нужно узнать ID своего пользователя в телеграм. Опять идем в бота, но в другого @RawDataBot, запускаем и смотрим поле: "chat": {"id": 1234567890}. Все это понадобится, чтобы перекинуть созданные архивы по API в телеграм. Дальше. Накидываем прототип скрипта shellshare
#!/bin/bash

chat_id=""
bot_token=""

stamp=$(date +%d%m%Y_%H%M%S)
filename=$1-$stamp.tar.gz

tar -czvf $filename "$@"

curl -F chat_id="${chat_id}" -F parse_mode="HTML" -F document=@"$filename" https://api.telegram.org/bot${bot_token}/sendDocument

rm $filename

В переменную chat_id закидываешь id, который забрал у RawDataBot. А в переменную bot_token пишешь токен, который забрал у БотБати. Так, все готово. Теперь нужно запустить своего бота. Идем в телегу и ищем @bashdayz_bot которого создали в самом начале поста. Запускаем его. Ну вот и все, проверяем.
./shellshare /var/log/nginx/
shellshare access.log error.log

Создастся tar.gz архив, с названием одноименной папки/файла и прилетит тебе в бота @bashdayz_bot (но бот у тебя естественно будет с другим именем). После отправки, архив зачистится с сервера, чтобы место не занимать. В скрипте использует нативное API телеграма через curl. А символ "$@" означает что скрипту можно передавать несколько папок/файлов, то есть массив. Но если в этом скрипте передать массив, то имя архива будет с именем первой папки, пусть тебя это не смущает. Если нужно будет, зафиксишь под свои нужды, мы делаем лишь прототип. По желанию можешь сменить архиватор, впендюрить шифрование имен и установить пароль. Либо вообще через gpg криптануть. Можно еще в curl передать caption, тогда в телеграм тебе придет архив с подписью, чтобы потом можно было ориентироваться что это такое.
curl ... -F caption="${caption}" ...

В переменную caption передай текст, который нужен для подписи к архиву. Вот такая поделка получилась. Минус в том, что можно отправлять файлы размером не более 50 мегабайт. Но для всякой мелочи и конфигов подойдет, когда нужно быстро дернуть с сервака что-то себе и поделиться в корпоративном чатике. Ну а если кто-то другой запустит твоего бота, то доступ к файлам не получит, потому что все файлы были отправлены на твой айдишник. Тема с ботами интересная и много где применяется, у меня мониторинг на такое завязан да и куча еще всего. Даже если ты не делаешь бэкапы в телеграм, то знать как взаимодействовать с API телеги, необходимо. Однажды пригодится, когда начальник поставит задачу, а ты уже имеешь прокаченный скилл и понимание как это работает. Банально отправлять сообщения из gitlab при успехе/факапе отработки пайплайна. Дорабатывай, изучай. Удачи! tags: #linux #bash — 🟢 Подпишись: @bashdays

Курс «Английский для разработчиков» Яндекс Практикума Для тех, кто хочет изменить свою профессиональную жизнь и работать в ме
Курс «Английский для разработчиков» Яндекс Практикума Для тех, кто хочет изменить свою профессиональную жизнь и работать в международной команде. Обучение построено не вокруг абстрактной теории, а вокруг рабочих ситуаций и полезных для карьеры навыков: ✋ Стендапы. Подготовитесь обсуждать задачи, задавать вопросы и просить о помощи. 👨‍💻 Работа с заказчиками. Научитесь презентовать решения, говорить про баги и фичи. 📣 Митапы. Сможете понимать на слух доклады и выступать сами. 😎 Собеседования. Научитесь рассказывать про свой опыт, понимать вопросы и тактично переспрашивать. 👯 Неформальное общение с коллегами. Сможете рассказать о своих интересах, опыте, планах на будущее. 💻 Код-ревью. Сможете описать сделанное, дать обратную связь, тактично отстоять своё мнение. Запишитесь на бесплатную консультацию. Кураторы определят ваш уровень языка и расскажут подробнее про обучение.

Я и подумать не мог, что для bash существует фреймворк для написания юнит тестов. Но недавно в одном проекте увидел и, честно говоря поплыл. Начал разбираться, что за странные конструкции в скриптах и по итогу вышел на фреймворк который называется bashunit. С одной стороны это удивительно и какое-то безумие, ну а с другой если в скрипте есть логика, почему бы не покрыть ее автотестами. Bashunit это минималистичная библиотека тестирования Bash. Тестируйте свои bash-скрипты самым быстрым и простым способом. Давай посмотрим как это работает и напишем первый тест: Устанавливаем:
curl -s https://bashunit.typeddevs.com/install.sh | bash
ln ~/lib/bashunit /usr/local/sbin/bashunit

Все это добро залетит в папку: ~/lib/bashunit. Ну и симлинк сделаем для удобства. Если посмотреть исходник bashunit, то увидим что, оно тоже написано на bash. Bash тестирует bash, красиво. Кто не знал, символ ~ означает домашнюю директорию текущего пользователя. А то сейчас начнешь искать, куда же эта тварь установилась. Теперь создаем папку где будем складывать тесты: mkdir ~/tests. В этой папке создаем файл first_test.sh и закидываем в него такой код:
#!/bin/bash

var="hello"

function test_var_equals_hello() {
  assert_equals "hello" $var
}

Запускаем:
cd ~/
bashunit ./tests

Получаем результат теста: All tests passed
bashunit - 0.8.0
Running first_test.sh
✓ Passed: Var equals hello

Tests:      1 passed, 1 total
Assertions: 1 passed, 1 total
All tests passed
Time taken: 133 ms

Assert_equals принимает 2 параметра, первый = ожидаемый результат, второй = фактический результат. Получается такое: Переменная var у меня равна «hello», ожидаемый результат в тесте тоже «hello». Происходит сравнение и успешное завершение. Но если поменять значение var на что-то другое, то получим ошибку.
bashunit - 0.8.0
Running first_test.sh
✗ Failed: Var equals hello
    Expected 'hello'
    but got 'fuck'

Tests:      1 failed, 1 total
Assertions: 1 failed, 1 total
Some tests failed
Time taken: 128 ms

Помимо assert_equals, есть куча других методов проверки: assert_contains, assert_empty, assert_matches, assert_exit_code, assert_array_contains, assert_successful_code, assert_general_error, assert_command_not_found, assert_file_exists, assert_is_file и т.п. Весь список можешь посмотреть в официальной документации с наглядными примерами. Это лишь верхушка айсберга, того что умеет bashunit, под капотом есть куда разгуляться и замутить настоящие, профессиональные юнит тесты. Если ты девопс и делаешь какое-нибудь тестовое задание связанное с написанием скриптов. Добавь автотесты и твои шансы получить оффер намного повысятся. Техдиры такое любят. Сразу видно, что человек следует бест-практикам и работает на результат, а не за деньги 📺 Конечно ты вряд ли будешь покрывать тестами свои скрипты, но для общего разнообразия имей в виду, что в bash такое возможно. Изучай. 💩 Официальный сайт фреймворка 🐱 Страница проекта на github 🐱 Старенькая алтернатива shunit2 Увидимся! tags: #linux #bash #qa — 🟢 Подпишись: @bashdays

Работа с архивами и архиваторами, порой добавляет лишнюю головную боль. На уровне ДНК я помню как распаковать zip архив, но н
Работа с архивами и архиваторами, порой добавляет лишнюю головную боль. На уровне ДНК я помню как распаковать zip архив, но никак не могу отрастить нейроны, чтобы запомнить ключи и синтаксис распаковки tar, gz, 7z и т.п. А запомнить не получается, по причине — я сталкиваюсь с архивами раз в пару недель или реже. Это как в программировании, если на какое-то время сделал паузу, то потом нужно заново проходить экспресс курс. Года два назад я очень хорошо знал JS и angular, сейчас я на них смотрю как баран на новые ворота. Чтобы раз и навсегда избавиться от боли в работе с архивами я подсел на утилиту atool, которая чёрта лысого распакует/запакует/перепакует и не нужно заниматься лишней возней. Все просто. Попросту говоря, atool это фронтэнд для консольных архиваторов, предоставляющий единый интерфейс для работы с ними. Работает элементарно, скармливаем утилите архив, а она его распаковывает.
atool -x shell.zip
atool -x shell.tar.gz
atool -x shell.7z
atool -x shell.rar

Не нужно вспоминать никакие ключи и т.п. Указал ей -x или -X и погнали, а если еще и alias сделать, так вообще можно ничего не указывать. Клёва! У atool есть много разных ключей, я использую ее в основном для распаковки. Но atool позволяет создавать архивы. Это же комбайн, как иначе. Давай создадим разные архивы:
atool -a -e -F .tar.gz shell
atool -a -e -F .zip shell
atool -a -e -F .7z shell
atool -a -e -F .rar shell

Да, тут аж 3 ключа, но как я писал ранее, загоняй их в alias и можно потом вообще про это не париться. По итогу получили 4 архива не вспоминая синтаксис архиваторов. Главное чтобы эти архиваторы были установлены в системе. Развлекайся! Вечером наверное еще увидимся, посмотрим как по рабочей нагрузке будет. Хорошего тебе понедельника! tags: #linux #utilites — 🟢 Подпишись: @bashdays

🌴Отпуск… Двухнедельный… Звучит как мечта для многих управленцев. Но почему она так недостижима? Что мешает тимлиду уйти в от
🌴Отпуск… Двухнедельный… Звучит как мечта для многих управленцев. Но почему она так недостижима? Что мешает тимлиду уйти в отпуск? Где внутренние причины, где внешние? 🔥Узнайте на бесплатном уроке: «Готовь сани летом.. или почему тимлиду нужно начинать готовить команду к своему отпуску еще с осени». На занятии обсудим: — Когда можно уйти в отпуск, а когда всё же не стоит? — Как подготовить команду и заказчика к своему отпуску? — Почему длительный отпуск важен для руководителя? — Как переключаться в режим отдыха? — Как включиться в работу после? Вебинар будет полезен: — Начинающим тимлидам и тем, кто близок к выгоранию. — Уставшим менеджерам, которых окружают безответственные работники! 👉Регистрируйтесь на эфир → Понравился урок — берите полный курс «Team Lead разработки», его можно пройти по специальной цене, и даже в рассрочку. Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru, erid: 2VtzqwQT6Cb

Щас крутая штука будет, фаер ин зе холл! Будем изолировать пользователя в linux и позволим ему запускать только разрешенные утилиты и команды. Короче говоря закейджим. Для этого понадобится chroot, заходим под рутом и готовим подопытную папку env:
cd / && mkdir env
mkdir /env/{bin,lib,lib64}

Chroot создает новую среду оболочки, что означает любые изменения, внесенные в эту среду, будут влиять только на файлы и каталоги в среде Chroot, а не на центральную нервную систему. Папку создали, ок, теперь давай закинем в нее сам интерпретатор bash. После того, как пользователь зайдет на сервер по ssh, запустится bash в изолированной среде. Чтобы определить, какие библиотеки использует утилита, воспользуемся утилитой ldd.
ldd /bin/bash

Команда ldd осуществляет вывод списка разделяемых библиотек, используемых исполняемыми файлами или разделяемыми библиотеками. На экран вывелись библиотеки, которые использует bash
libtinfo.so.6 => /lib/libtinfo.so.6
libc.so.6 => /lib/libc.so.6
/lib64/ld-linux.so.2

Их нужно закинуть в папку env, вот так:
cp /usr/bin/bash /env/bin
cp /lib/libtinfo.so.6 /env/lib
cp /lib/libc.so.6 /env/lib
cp /lib64/ld-linux.so.2 /env/lib64

Всё. Базовая изоляция готова. Для того чтобы после авторизации на сервере, пользователь попал в изолированную папку, делаем так: Добавляем в конфиг: /etc/ssh/sshd_config
Match User user
ChrootDirectory /env

В первой строке, в конце указывает имя пользователя, которого будем изолировать, у меня в системе есть пользователь user, я его и указываю. Далее дергаем systemctl restart sshd и пробуем залогиниться на сервер под пользователем:
ssh user@bashdayz.ru

Если все сделал правильно, то поздравляю, ты изолировал пользователя в системе и должен увидеть командную строку и что-то вроде -bash-5.1$. Самый сок, в том, что никакие команды сейчас не работают, чтобы ты не вводил. Ты можешь лишь посмотреть версию bash --version или другие ее ключи. Для того чтобы добавить в эту клетку другие утилиты, повторяешь трюк с ldd, копируешь бинарник и библиотеки. Таким образом ты можешь делать кастрированный доступ по ssh, например для своих студентов либо для каких-то публичных квестов. Давай закрепим и добавим утилиту ls в нашу клетку:
ldd /usr/bin/ls

cp /usr/bin/ls /env/bin
cp /lib/libselinux.so.1 /env/lib/
cp /lib/libc.so.6 /env/lib/
cp /lib64/ld-linux.so.2 /env/lib64
cp /lib/libpcre2-8.so.0 /env/lib/libpcre2-8.so.0

Смотрим зависимости через ldd и копируем их в нашу изолированную папку env. Теперь возвращаемся в терминал к пользователю user и пробуем запустить ls. Опа! Работает! Прекрасно! Попробуй теперь посмотреть файловую систему с помощью ls и убедись в наличии клетки. Тема с chroot очень клевая, помимо того, что мы с тобой сейчас провернули, в chroot можно устанавливать полноценные дистрибутивы linux (возможно у тебя был сексуальный опыт с gentoo). Либо примонтировать proc/sys/dev/run с хостовой машины и сделать работу в chroot идеальной. Но это не совсем безопасно, тут уже тебе выбирать, удобство или параною. А можно сделать 10 папок и 10 пользователей и в каждую папку воткнуть свой дистрибутив. Логинишься под user1 и попадаешь в kali, логинишься под user2 и попадаешь в centos. Ну ты понял. Ладно, изучай, надеюсь было читабельно. Увидимся завтра! tags: #linux #bash #utilites — 🟢 Подпишись: @bashdays

12 октября пройдет вебинар для CTO и DevOps «Автоматизация создания окружений для R&D-команд» Чтобы сделать процесс разработк
12 октября пройдет вебинар для CTO и DevOps «Автоматизация создания окружений для R&D-команд» Чтобы сделать процесс разработки цифровых продуктов максимально быстрым и эффективным, важно избавить своих разработчиков от рутинной настройки окружений и помочь им сосредоточиться на главном – написании кода! На вебинаре эксперты Hilbert Team и Yandex Cloud расскажут, как облегчить жизнь вашим разработчикам и внедрить подходы по автоматизации создания R&D-окружений. Программа: 1. Создание динамических окружений в Kubernetes (пример реализации, плюсы и минусы), 2. Создание статических окружений с помощью Terraform и Terragrunt (пример реализации, плюсы и минусы), 3. Создание окружений с помощью CrossPlane и ArgoCD (пример реализации, плюсы и минусы, планы Yandex Cloud на развитие CrossPlane), 4. Как выбрать подходящий сценарий в зависимости от требований бизнеса. Спикеры: Михаил Кажемский – ведущий DevOps-инженер Hilbert Team. Антон Брехов – партнерский архитектор Yandex Cloud. ➡️ Зарегистрироваться на вебинар

В этот прекрасный осенний выходной, будем компилировать bash скрипт в бинарный файл. Да, да! И такое возможно. Ну и зачем? Ну
В этот прекрасный осенний выходной, будем компилировать bash скрипт в бинарный файл. Да, да! И такое возможно. Ну и зачем? Ну например я не хочу светить свой «прекрасный» код перед коллегами, либо выдаю себя за крутого разработчика который пишет на сисиписи. Встречаем Shc (Shell Script Compiler) Shc принимает скрипт, который указан в командной строке и создает исходный код на C. Затем сгенерированный исходный код компилируется. Утилита shc сама по себе не является компилятором, она кодирует и шифрует сценарий оболочки. Короче напоминает обычный криптор, для шифрования малварей от детекта антивирусами, алгоритмы схожие. На выходе получаешь исходник на сях и готовый бинарник. Ставится все это дело так:
apt/yum install build-essential gcc
apt/yum install shc 

Давай создадим бинарник:
shc -f test.sh

Рядом с файлом появятся еще 2 файла: test.sh.x и test.sh.x.c (первый это бинарник, второй исходник). Проверяем:
file test.sh.x

test.sh.x: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=c265ebae7158a2c51461e890c15fdacb1cc81cb1, for GNU/Linux 3.2.0, stripped

У shc есть множество ключей, к примеру ты можешь задать триальный период и бинарник будет превращаться в тыкву после определенной даты. Либо повысить уровень евристики и запутать реверс-инженера. Минус тут один, это не golang и бинарник будет работать на схожих linux системах. Но это не страшно, пишешь в readme требования к запуску и снимаешь с себя ответственность. 🐱 Страница проекта на github Вечером увидимся, далеко не убегай. Давай 🤝 tags: #linux #bash #utilites — 🟢 Подпишись: @bashdays

Коллеги порой интересуются: Роман, а как ты слез с VSCode и пересел на vim? Есть какие-то мануалы и тренажеры? А зачем тебе перелазить на vim? Чтобы что? Мануалов и тренажеров пруд пруди. Но всё это пустая трата времени. Самый эффективный способ пересеть на vim, это практика. Просто открываешь vim и начинаешь писать в нем код. По ходу дела у тебя возникают вопросы: 1. А почему ничего не печатается? 2. А как сохранить то, что я напечатал? 3. А есть ли файловый браузер в сайдбаре? 4. А как какать? 5. А как искать нужную мне строчку? 6. А как отсюда выйти без перезагрузки процессора? и т.п. Такие вопросы возникают, потому что ты долгое время находился в зоне комфорта, а теперь эту зону комфорта отняли. Ну как отняли, ты сам так решил. Ну и как только возник какой-то вопрос - просто гуглишь. Вот и вся наука. Никакие тренажеры и толстенные книги, не сделают из тебя гуру и уверенного пользователя в этом замечательном редакторе. Постепенно вопросов становится все меньше и меньше, твой vim обрастает плагинами и хоткеями, твои пальцы начинают заживать, в мозгу строятся новые нейронные связи. У некоторых даже отрастает шестой палец. Нервы спустя месяц приходят в норму. Всё меньше и меньше требуется мышка. Да, при переходе на vim есть качели и побочки, но если с достоинством их преодолеть, то по итогу ты будешь вознагражден. Но это не точно. Некоторый процент переходящих, приобретают хронический алкоголизм и депрессию. Так что будь аккуратен и готовься к таким переменам в своей жизни. На главный вопрос — А зачем я перелез на vim? Чтобы что? Увы, ты правильно ответить не сможешь. Возможно потешить своё ЭГО, повыебываться перед коллегами, отказаться от мыши, увеличить скорость работы. Всё спорно и относительно. Миграция на vim сопоставимо вопросу — а в чем смысл жизни? Если ты с детства не приобщился к vim, подумай хорошо, а нужно ли тебе оно? В зависимости от твоего выбора, зависит твоя дальнейшая судьба. Остаться собой или познать нирвану. Я просто люблю vim, в этом есть свой шарм. Когда я пишу код в vim, у меня повышается продуктивность, мне хочется находиться в этом редакторе и я получаю от этого своеобразный кайф. А за что ты любишь vim? tags: #рабочиебудни — 🟢 Подпишись: @bashdays

Я всегда испытывал боль, когда нужно было вывести в консоли что-то цветное, закастомить так сказать серый результат своих скриптов. Все эти безумные конструкции с ANSI кодами постоянно вгоняли в депрессию. Типа такого:
echo -e "\x1b[39;42mBashdays"

Но как мы знаем, всё уже придумано за нас, так получилось и в моем случае. Порыскав на просторах вселенной, я нашел несколько сервисов, которые позволяли мышкой натыкать нужную конфигурацию цветов и получить готовый ANSI код. Самым топовым сервисом оказалась поделка ansicodes никому не известного разработчика. Собственно так и бывает, великие умы - славы не ищут. 💩 Сервис доступен по этой ссылке 🐱 Страница проекта на github Натыкиваешь мышкой нужную тебе конфигурацию цветов для консоли, по итогу получаешь готовый ANSI код, который вставляешь в свои скрипты и получаешь новогоднюю елку. Четко, быстро и без депрессий. Ну и можно на свой сервак воткнуть, там ничо сложного нет, обычный html + js. Есть альтернатива 🐱 ansi, выполнена в роле отдельной утилиты, которую можно воткнуть в систему. Проект известный, но опять же в узких кругах. Но тут есть зависимости, а я не люблю зависимости, предпочитаю использовать коробочные инструменты. Ну и всегда помни - если собираешься добавлять цвета в свой скрипт, всегда добавляй опцию —no-color, чтобы люди, анализирующие выходные данные скрипта, не испытывали к тебе ненависти. Вот такие пироги! tags: #linux #bash #utilites — 🟢 Подпишись: @bashdays

🚀Переезжаем в будущее! Мир IT меняется буквально каждый день и, чтобы оставаться в тренде, нужно постоянно обучаться. Изучит
🚀Переезжаем в будущее! Мир IT меняется буквально каждый день и, чтобы оставаться в тренде, нужно постоянно обучаться. Изучите возможности, которые позволят вывести вашу разработку на новый уровень! 🔥На бесплатном открытом уроке «Переезжаем в EDT из Конфигуратора» от OTUS: регистрация На вебинаре онлайн-курса «DevOps 1C» мы обсудим: — Почему из Конфигуратора в EDT можно переходить уже сейчас. — Обзор возможностей, которые в корне изменят ваш процесс разработки. — Практика работы в EDT в Git. — Умение эффективно работать с ветками и лаконичное оформление истории своей работы в Git. Преподаватель Юрий Пасхин – программист-разработчик в компании ЕАЕ-Консалт. Это отличная возможность бесплатно протестировать формат обучения и задать преподавателю любые вопросы в режиме реального времени! 👉Пройдите бесплатное вступительное тестирование прямо сейчас и зарегистрируйтесь на событие: регистрация Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru, erid: 2VtzqvyHF39

Эх суету красоту навести охота! Привет. С помощью чего можно сделать красивые диалоговые боксы в скриптах и утилитах? Много всяких есть штук, но мне больше всего зашло использовать whiptail. А зачем вообще красивые диалоговые окна в консоли? Можно же через read в bash всё прекрасно запрашивать. Да! Справедливо! Но это скучно, гораздо интереснее получить какой-нибудь мало-мальски красивый и интуитивный интерфейс. Например, когда ты устанавливаешь mysql, оно тебе выводить красивый инпут где нужно ввести root пароль. Либо устанавливаешь linux и нужно выбрать галочками, какие пакеты ты хочешь установить. Ну короче ты понял. Некий GUI. Вот whiptail и позволяет сделать этот GUI с минимальными усилиями + интегрировать его в свои скрипты. Устанавливается банально: apt/yum install whiptail, но обычно уже идет из коробки в дистрибутиве. После установки, можно творить. Синтаксис очень простой:
whiptail --yesno "читаешь @bashdays?" 10 50

Откроется диалоговое окно с двумя кнопками yes/no, с текстом + высотой и длиной. Помимо инпута yes/no имеется ряд других опций: msgbox - информативное окно с кнопкой OK infobox - херня какая-то, мигает и закрывается inputbox - поле для ввода текста passwordbox - поле для ввода пароля, скрыт звездочками textbox - выводит содержимое файла в окне menu - реализация меню checklist - чекбоксы radiolist - радиобатоны gauge - прогрессбар В общем подойдет на все случаи жизни. Что интересно, можно реализовать неплохое меню, либо красиво отобразить на экране результат работы утилиты. Полет фантазии безграничный. Теперь про то, как все это замешать в bash скрипты. Логика простая. Если пользователь выбирает Yes, то whiptail вернет 1. Если No, то вернет 0. Если возникла ошибка, либо принудительное завершение, будет возвращен код -1. Например:
if (whiptail --yesno "Choose Yes or No" 10 60)  then
     echo "You chose Yes. Exit status was $?"
else
     echo "You chose No. Exit status was $?"
fi

Дефолные кнопки Yes/No можно зареврайтить с помощью опций --yes-button и --no-button.
whiptail --yes-button "Fuck" --no-button "Yeee" --yesno  "What?" 10 60

Теперь вместо Yes/No наблюдаем Fuck/Yeee. Ну а как получать данные, которые ввели руками? А вот так:
NAME=$(whiptail --inputbox "What is your name?" 10 60 3>&1 1>&2 2>&3)

exitstatus=$?
if [ $exitstatus = 0 ]; then
     echo "Your name is:" $NAME
else
     echo "You chose Cancel"
fi

На экран выведется, то что, ты введешь в инпуте. Таким образом можно дальше строить диалоговые боксы и гонять лысого между ними введенные и выбранные переменные. Реализация меню:
OPTION=$(whiptail --menu "Choose" 15 60 2 "1" "Linux" "2" "Windows" 3>&1 1>&2 2>&3)
 
exitstatus=$?
if [ $exitstatus = 0 ]; then
     echo "Your chosen:" $OPTION
else
     echo "You chose Cancel."
fi

В остальных случаях всё делается идентично. Но что такое 3>&1 1>&2 2>&3? Это магия и скучная теория. Перенаправление ввода-вывода stdin/stdout/stderr. Если коротко, без этого ничего не заработает. Скучная теория. В будущем расскажу про все эти перенаправления stdin/stdout/stderr на котиках. Пока просто делай как написано. На закуску лови реализацию прогрессбара, тут хоть что-то происходит и движется:
{
  for ((i = 0 ; i <= 100 ; i+=20));  do
     sleep 1
     echo $i
  done
} | whiptail --gauge  "Loading..." 6 60 0

Основное рассмотрели. Можно брать и что-то уже клепать вменяемое. У whiptail есть аналог, называется dialog, посмотри, возможно он подойдет именно тебе, синтаксис похожий. 💩 Картиночки собрал тут, чтобы визуально оценить масштабы всей этой суеты. Если есть вопросы и предложения, задавай в комментариях. Давай, увидимся вечером, хорошего тебе дня! tags: #linux #bash #utilites — 🟢 Подпишись: @bashdays