fa
Feedback
Bash Days | Linux | DevOps

Bash Days | Linux | DevOps

رفتن به کانال در Telegram

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

نمایش بیشتر

📈 تحلیل کانال تلگرام Bash Days | Linux | DevOps

کانال Bash Days | Linux | DevOps (@bashdays) در بخش زبانی روسی بازیگری فعال است. در حال حاضر جامعه شامل 23 791 مشترک است و جایگاه 5 701 را در دسته فناوری و برنامه‌ها و رتبه 28 125 را در منطقه روسيا دارد.

📊 شاخص‌های مخاطب و پویایی

از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 23 791 مشترک جذب کرده است.

بر اساس آخرین داده‌ها در تاریخ 18 ژوئن, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -216 و در ۲۴ ساعت گذشته برابر -5 بوده و همچنان دسترسی گسترده‌ای حفظ شده است.

  • وضعیت تأیید: تأیید نشده
  • نرخ تعامل (ER): میانگین تعامل مخاطب 22.75% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 12.90% واکنش نسبت به کل مشترکان کسب می‌کند.
  • دسترسی پست‌ها: هر پست به طور میانگین 5 413 بازدید دریافت می‌کند. در اولین روز معمولاً 3 068 بازدید جمع‌آوری می‌شود.
  • واکنش‌ها و تعامل: مخاطبان به‌طور فعال حمایت می‌کنند؛ میانگین واکنش به هر پست 21 است.
  • علایق موضوعی: محتوا بر موضوعات کلیدی مانند bashdays, linux, bash, docker, скрипт تمرکز دارد.

📝 توضیح و سیاست محتوایی

نویسنده این فضا را محل بیان دیدگاه‌های شخصی توصیف می‌کند:
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.r...

به لطف به‌روزرسانی‌های پرتکرار (آخرین داده در تاریخ 19 ژوئن, 2026)، کانال همواره به‌روز و دارای دسترسی بالاست. تحلیل‌ها نشان می‌دهد مخاطبان به‌طور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامه‌ها تبدیل کرده‌اند.

23 791
مشترکین
-524 ساعت
-257 روز
-21630 روز
آرشیو پست ها
Здрасти. Если открыть два терминала, в первом ввести команду ls -la, а во втором history, то во втором терминале, ты не увидишь в истории команду ls -la. Хотя сервер один и тот же. И не увидишь ты эту команду в истории, пока не завершишь сессию в первом терминале, либо не сделаешь определенный финт ушами. Пиздец неудобно! ✔️ Финт ушами в первом терминале:
history -a
history -c
history -r
a = пишем текущую историю сессии в файл с = очищаем текущую сессию r = перезагружаем файл истории Теперь если перезайти во второй терминал, то увидишь там команду ls -la, то есть история как бы синхронизировалась. Это хорошо, но недостаточно хорошо! Как это можно автоматизировать? Добавляем в .bashrc:
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
ignoredups:erasedups 1. Команды, вводимые несколько раз, не дублируются в истории. 2. Повторная команда заменяет все предыдущие в истории. shopt -s histappend Эта команда включает опцию histappend, которая добавляет новые команды в конец файла истории (~/.bash_history) при завершении сессии, вместо перезаписи файла. Это позволяет сохранить команды из разных сессий и объединить их в единую историю. А кишка PROMPT_COMMAND = Назначает значение переменной PROMPT_COMMAND, которая используется в bash для выполнения команды перед отображением командной строки (приглашения). Теперь твоя история команд будет автоматически синхронизирована с файлом истории. Это полезно, если ты работаешь с несколькими терминалами и хочешь иметь актуальную историю без хуйни. А еще есть фича:
declare -r PROMPT_COMMAND="echo 'привет осёл'"
После выполнения любой команды, на экран будет выводиться «привет осёл». Эту команду можно заменить на любую другую, например триггерить bash скрипт, который будет отправлять введенные команды сразу тебе в телеграм. Ну или забить exit 1 по приколу.
Как взаимодействовать с телегой через консольку, писал в этом посте. А про облачную синхронизацию истории упоминал в этом посте.
Ёмко? Ёмко! Изучай! tags: #linux #bash — 🔔 @bashdays

🔥 Positive Technologies представила коммерческую версию второго метапродукта — MaxPatrol Carbon По данным исследования готов
🔥 Positive Technologies представила коммерческую версию второго метапродукта — MaxPatrol Carbon По данным исследования готовности российских организаций противостоять кибератакам, основными сложностями при выполнении задач по усилению защищенности ИТ-инфраструктуры являются: • Дефицит времени на выполнение всех поставленных задач. • Недостаток компетенций для формирования задач. • Отсутствие эффективной коммуникации между командами ИБ и ИТ. MaxPatrol Carbon берет эти задачи на себя: метапродукт помогает подготовить ИТ-инфраструктуру к отражению атак и обеспечивает непрерывный контроль киберустойчивости, делая невозможным причинение ущерба компании. Метапродукт позволяет действовать превентивно: он анализирует, как в конкретной инфраструктуре могут быть совершены кибератаки, и формирует практические рекомендации для усиления ее защиты. Все подробности о новинке можно найти на сайте вендора.

+1
Привет. Я обычно предпочитаю строгие терминалы, которые — белым по черному. Но вчера у коллеги подсмотрел свистоперделку и тоже захотелось. Эх, вроде всегда топлю против новогодних ёлок, но тут не устоял и захуячил себе. Обращаем внимание на задний фон в терминале, в нем проигрывается gif’ка. А всё что выводится на экран это результат работы утилиты lolcat, которая делает праздник из любого тухлого выхлопа.
Эту утилиту я привел для примера, так, поугарать, мож пранканешь кого-нибудь.
Как поставить такой видео фон? Для WSL это не проблема, добавляем строчки в json конфиг и всё из коробки поднимается:
"backgroundImage": "C:\\\\pixelart\\b1.gif",
"backgroundImageOpacity": 0.28,
Регулируем прозрачность и наслаждаемся.
Гифки в стиле пиксель арт я собрал и залил на яндекс-диск, забирай.
А вот в нативном линуксе, придется изъебнуться. 99999% терминалов не поддерживает gif и mp4. Некий персонаж смог такое реализовать через terminology. Но тут уже сам ковыряй. Единственное, что могу скинуть, это как случайным образом выставлять фон через сниппет:
~/.config/fish/config.fish
if test -n "$TERMINOLOGY"
  tybg (ls ~/.config/terminology/background/ | shuf -n 1 | xargs -I '{}' echo "~/.config/terminology/background/{}")
end
Это пример для оболочки fish, но думаю и в Bash это сработает, только нужно будет изменить на tybg $(...). Такие дела! tags: #linux #рабочиебудни — 🔔 @bashdays

Все о безопасной разработке расскажут на PHDays Fest 2 в Лужниках 23-26 мая. Positive Technologies вместе с сообществом POSId
Все о безопасной разработке расскажут на PHDays Fest 2 в Лужниках 23-26 мая. Positive Technologies вместе с сообществом POSIdev подготовили несколько секций с докладами для разработчиков: 🔥 General development 🔥 Development Security 🔥 Platform Engineering 🔥 Data Engineering 🔥 Team Lead 🔥 Python совместно с сообществом Moscow Python 🔥 Dev tools, languages & frameworks Спикеры из Samokat, Тинькофф, СберМаркет, Yandex Cloud, Kaspersky, Lamoda Tech, Aвито, Positive Technologies и других компаний расскажут про архитектуру распределенных систем, безопасную разработку приложений, алгоритмы, языки и инструменты разработки, управление командой и не только. В перерывах можно будет поиграть в IT-крокодила, решить безопасный кроссворд, выиграть полезную книгу или просто отдохнуть в лаунж-зоне. А в субботу, 25 мая, участвуйте в воркшопах экспертов из Positive Technologies, Yandex Cloud и Hilbert Team, Wildberries или в олимпиаде по программированию. 👉 Программа 👉 Регистрация

10 мест в твоём городе где можно потрахаться. Лидером, конечно же остается Linux. А сегодня на повестке дня, снова твой любимый strace и замечательная опция -T, которая позволяет находить ботлнэк (узкое место). В посте будут встречаться лютые «франкенштейны», но ты сразу не уходи, я кратенько всё разжую и ты проникнешься. Бля буду!
Опция -T выводит разницу во времени между запуском и завершением системного вызова. Применяется для того, чтобы увидеть момент, когда конкретный вызов начал тормозить (встал раком) на фоне предыдущих.
Запускаем «франкенштейна»
strace -s0 -o'|nl >&2' -Tyqqqfe write dd if=/dev/random bs=4096 count=23 status=none | while read -rn1;do : ;done
✔️ Для начала давай разберем эту кишку: s0 = размер буфера, строки не обрезаются o/nl/&2 = вывод в стандартную ошибку на утилиту nl nl = утилита нумерует строки T = затраченное время на системный вызов y = показывать симлинки для файловых дескрипторов qqq = отключаем лешний шлак f = трассируем дочерние процессы e = трассировка только write dd = читает из random блоками 4096 и пишем по 23 блока дальше скармливаем это while while = читает данные побайтно (-n1) без обработки символов конца строки (-r) Вывод сокращаю, чтобы не так погано смотрелось:
01  write() = 4096 <0.004691>
02  write() = 4096 <0.000010>
03  write() = 4096 <0.000009>
04  write() = 4096 <0.000009>
05  write() = 4096 <0.000009>
06  write() = 4096 <0.000009>
07  write() = 4096 <0.000009>
08  write() = 4096 <0.000009>
09  write() = 4096 <0.000009>
10  write() = 4096 <0.000009>
11  write() = 4096 <0.000009>
12  write() = 4096 <0.000009>
13  write() = 4096 <0.000009>
14  write() = 4096 <0.000009>
15  write() = 4096 <0.000009>
16  write() = 4096 <0.000009>
17  write() = 4096 <0.014406>
18  write() = 4096 <0.023782>
19  write() = 4096 <0.023870>
20  write() = 4096 <0.023944>
21  write() = 4096 <0.023815>
22  write() = 4096 <0.024032>
23  write() = 4096 <0.024088>
Смотрим на последний столбик, видим аномалию после 16 строки, время выполнения существенно увеличилось. Поздравляю мы нашли bottleneck (узкое место). Теперь давай разберемся с этим узким местом. Что произошло, почему все стало тормозить? Умножаем блок 4096 на номер строки 16, получаем = 65536. Знакомая цифра? Знакомая! 65536 это ёмкость пайпа (канала), по достижению предела пишущий процесс заблокировался, пока не было прочитано и освобождено достаточно места. Подробнее можешь почитать в мане: man 7 pipe (раздел Pipe capacity). Бонусом команда, которая протестирует ёмкость пайпа:
sh -c '( dd if=/dev/zero obs=1 oflag=nonblock || pkill -P $$ -x "sleep" ) | sleep 300'
Если dd сообщает о недоступности стандартного вывода, значит тест удался. У меня получилось так:
dd: writing to 'standard output': Resource temporarily unavailable
129+0 records in
65536+0 records out
65536 bytes (66 kB, 64 KiB) copied, 0.0195754 s, 3.3 MB/s
Terminated
Вот так находясь на границе между кодом приложения и кодом ядра можно увидеть тонкие моменты. Изучай! tags: #linux #debug — 🔔 @bashdays

Воплоти свои идеи в жизнь и получи специальный приз от immers.cloud и Bashdays! 📋 Условия: Тебе необходимо в течении 48 часо
Воплоти свои идеи в жизнь и получи специальный приз от immers.cloud и Bashdays! 📋 Условия: Тебе необходимо в течении 48 часов создать необычное изображение при помощи предустановленного образа Stable Diffusion от immers.cloud. Победитель получит 10,000 руб на пополнение баланса от immers.cloud, а также специальный приз от Bashdays. Правила простые: 1️⃣ Регистрация: Зарегистрируйся на платформе Immers.cloud. Не забудь включить в свой никнейм на сайте (username) слово "bash" - это важно для участия в конкурсе. 2️⃣ Активация бонуса: После регистрации перейди по ссылке, чтобы активировать бонус в 2,000 рублей, которые ты сможешь использовать в рамках конкурса. 3️⃣Выбор образа и настройка: Перейди по ссылке на предустановленный образ Stable Diffusion. Важно выбрать видеокарту 3090 или 4090 при настройке конфигурации. 4️⃣Творчество: После получения доступа к образу начни творить! Используй воображение и Искусственный Интеллект, чтобы создать нечто удивительное и уникальное. 5️⃣Отправка работ: Отправь свою работу и свой никнейм @maxgrue. 🏆 Голосование и призы: После окончания срока конкурса мы устроим голосование за лучшее изображение. Победитель получит 10,000 руб на пополнение баланса от Immers.cloud и особый подарок от Bashdays! Присоединяйся к конкурсу, чтобы проявить свой талант и показать умение работать с нейросетями!

Сегодня дождливый день, даже материться не хочется. Поэтому потыкаем strace и файловый менеджер. Для экспериментов я взял десктопный линукс на 22 убунте + gnome. Внутри моего гнома зашит файловый менеджер Nautilus. Но подойдет абсолютно любой дистрибутив и любой файловый менеджер например kde/dolphin. Для начала создаём файл:
echo -ne '\x42\x5a\x68' > /tmp/bashdays
Этот файл я приправил магическими числами hex:42 5a 68, что равносильно формату файла: bz2. Так, запускаем:
strace -o'|cat' -P /tmp/test -qqqyf nautilus /tmp 2> /dev/null
Не забудь указать актуальное название своего файлового менеджера, у меня nautilus, у тебя может быть другой. После запуска в файловом браузере откроется папка tmp, в ней мы увидим наш файл bashdays. Иконка у этого файла соответствует иконке bz2 архива. Теперь возвращаемся в терминал с strace и смотрим что произошло.
openat("/tmp/bashdays", O_RDONLY) = 25</tmp/bashdays>
read(25</tmp/bashdays>, "BZh", 4096)  = 3
close(25</tmp/bashdays>) = 0
В выводе наблюдаем обращение к файлу /tmp/bashdays, дополнительно видим что файл был прочитан. Также видим что была определена сигнатура файла BZh. Отлично! Мы на верном пути. Теперь закрываем файловый менеджер, тормозит ранее запущенный strace. И добавляем к файлу расширение txt.
mv /tmp/bashdays /tmp/bashdays.txt
Снова запускаем strace:
strace -o'|cat' -P /tmp/bashdays.txt -qqqyf nautilus /tmp 2> /dev/null
И видим другую картину:
statx("/tmp/bashdays.txt")
Отсутствуют системные вызовы связанные с чтением файла. А файловый менеджер интерпретировал это как текстовый файл. Сменилась иконка. Если сейчас кликнуть на этом файле 2 раза, то файл откроется в текстовом редакторе. ✔️ Делаем выводы Если у файла есть расширение, то файловый менеджер полагается на него и не производит никаких действий с файлом. А если расширение не указано, то происходит анализ содержимого. В моём случае файловый менеджер нашел сигнатуру bz2 и автоматически решил что это архив. Чтобы определить тип файла, можешь воспользоваться командой:
file /tmp/bashdays.txt
Вот такая вот логика зашита в кишочках. Хорошей тебе рабочей недели, изучай! tags: #linux — 🔔 @bashdays

📚 Здесь собраны все вопросы, которые могут спросить на собеседовании. Теперь можно легко получить оффер, подготовившись к са
📚 Здесь собраны все вопросы, которые могут спросить на собеседовании. Теперь можно легко получить оффер, подготовившись к самым популярным вопросам. Просто выбери своё направление: 1. Frontend / JavaScript 2. Python 3. Java 4. Тестировщик QA 5. Data Science 6. DevOps 7. C# 8. С/C++ 9. Golang 10. PHP 11. Kotlin 12. Swift

Грузить не буду, как-никак выходные. Подкину интересного чтива. Если коротко — автор статьи предлагает использовать в скриптах для комментариев, команду «:» вместо символа «#». Это позволяет видеть комментарии в режиме отладки. Подход имеет ряд некоторых проблем, но общая концепция весьма интересна. ✔️ COLODEBUG: a simple way to improve bash script debugging. Статья на иностранном, но с переводчиком всё понятно. Изучайте. tags: #bash #linux — 🔔 @bashdays

Выбор дополнительных победителей (в количестве 3): Победители: 1. Nik (@nsvk13) 2. Mm 3. Роман (@shoesmith) Проверить результаты

новеньким, онбординг тута: https://t.me/bashday

🎉 Результаты розыгрыша: Победители: 1. Dmitry (@nillsondg) 2. Ренат 3. КорМан (@zhemchug11) Проверить результаты

Если испытываешь проблемы с написанием постов, есть пиздатый лайкфак!
Открываешь свой любимый редактор и пишешь — Короче блядь!
А далее пост пишется на одном дыхании. Кстати этот способ отлично работает для всяких документаций, планирования спринтов и т.п. Ну чо — Короче блядь. Пятничная математика! Массив bin содержит 256 восьмиразрядных числа в двоичной системе счисления.
bin=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})
Особенность этого массива — значение любого элемента массива, соответствует индексу элемента в двоичном представлении. Таким образом перевод числа из десятичной в двоичную систему счисления, сводится к заданию числа (дес) в качестве индекса.
echo ${bin[101]}
Получаем: 01100101 Количество разрядов двоичного числа (длина любого индекса)
echo ${#bin[0]}
Получаем: 8 Количество двоичных чисел (длина массива)
echo ${#bin[@]}
Получаем: 256 Разрядность можно регулировать количеством списков начиная с {0..1}{0..1}. Но будь очень осторожен, память не резиновая! ✔️ Раз зашел разговор за память...
echo $((2**63))
Иииииии… Получаем по ебалу: -9223372036854775808 А почему так? Минус каким хером тут? А все правильно! Эта ситуация называется — Целочисленное переполнение. И оно НЕ отслеживается в Bash!
Про Целочисленное переполнение читай тут
help let
Начиная с версии 2.05b-alpha1 используется тип intmax_t.
This document details the changes between this version, bash-2.05b-alpha1, and the previous version, bash-2.05a-release.

The shell now performs arithmetic in the largest integer size the machine supports (intmax_t), instead of long.
Ну и смотрим маны:
man 7 system_data_types
Давай затестим:
echo "Дипазон: От $((2**63)) до $((2**63-1))"
У меня такое: -9223372036854775808 до 9223372036854775807 Это границы для положительных и отрицательных чисел. Чо еще… Перевод из двоичной системы счисления в десятичную.
echo $(( 2#1000 ))
Получаем: 8 В арифметических операциях Bash можно задавать систему счисления.
echo $(( 2#1000 + 2#1000 ))  
let dec=2#0001
echo $dec
В общем случае в данных конструкциях не обязательно указывать знак $ перед именем переменной. Но при указании системы счисления это всё же нужно.
bin=0011  
echo $(( 2#$bin ))
Получаем: 3 Наверное на этом всё, если есть что добавить, пиши в комменты. Хороших тебе предстоящих выходных и береги себя! tags: #bash #linux — 🔔 @bashdays

🗓 21 мая, 16:00 📌 Как развернуть приватные инсталляции Kubernetes в публичном облаке с помощью Terraform? Коллеги из @Selec
🗓 21 мая, 16:00 📌 Как развернуть приватные инсталляции Kubernetes в публичном облаке с помощью Terraform? Коллеги из @Selectel поддерживают сотни клиентских серверов, в том числе Highload-кластеры крупных компаний. На практическом вебинаре они покажут, как развернуть приватную инсталляцию в публичном облаке и поднять кластер Kubernetes с помощью Terraform. А еще обещают поделиться опытом и кейсами клиентов. Вебинар будет интересен системным администраторам, DevOps-инженерам и всем, кто работает с Kubernetes. Основные темы: ◽ Kubernetes и Terraform ◽ Публичное и частное облако ◽ Облачный роутер и Firewall Задавайте вопросы через форму регистрации или в чате трансляции — спикеры ответят на них в конце вебинара. Авторам самых интересных подарят плюшевых Тирексов. Все зарегистрированные участники получат запись трансляции и примеры готовых манифестов Terraform. Зарегистрироваться: https://slc.tl/bz6mj Реклама ООО «Селектел» erid 2VtzqvtiJoc

Здрасти. Утренний мини пост, вечером еще закину чтива. Как ты знаешь, утилита false возвращает всегда ошибку (код завершения 1). Давай запустим и убедимся:
false
echo $?
1
Все правильно. В этом примере была запущена встроенная команда false в оболочку Bash. Но как мы знаем, существует альтернативная реальность и альтернативная команда false, которая лежит тут:
whereis false
false: /usr/bin/false
Теперь сделаем такое:
env false --help
Используя env, мы запустили альтернативную версию false. И что мы видим? Вывалилась страница help. Очевидно? Ага! А теперь давай посмотрим код выхода, после вывода help.
echo $?
1
Чо блядь? Почему единица? Команда по выводу справки отработала корректно? Корректно! Ожидаем ноль? Ага! Но вот хуюшки! Получите единицу! Баг? Не думаю. Давай проверим на выводе версии:
env false --version
echo $?
1
Неа, не баг, команда false настолько суровая, что возвращает единицу, там где это не нужно.
Всё дело в том, что во всех этих примерах в качестве кода выхода используется значение одной и той же константы.
Специально ли это сделали, никто не знает. Но факт остается фактом. ✔️ Посмотреть чем является команда, можно с помощью команды type:
type -a false

false is a shell builtin
false is /usr/bin/false
false is /bin/false
Вот такие вот перлы порой случаются. Ошибка и точка! tags: #bash #linux — 🔔 @bashdays

Привет, ща будет халява. У меня есть 3 бесплатных билета на конфу Podlodka Techlead Crew. Если возникло желание посетить сие мероприятие — жми кнопку ниже. Результаты автоматически опубликуются 18.05 (СБ) 12:00 МСК в канале @bashdays. Ну а дальше с вами свяжется Макс и раздаст ништяки. Такие дела!

Привет! На связи Podlodka Techlead Crew 🛠 — одна из профильных онлайн-конференций от авторов IT-подкаста Podlodka! В новом с
Привет! На связи Podlodka Techlead Crew 🛠 — одна из профильных онлайн-конференций от авторов IT-подкаста Podlodka! В новом сезоне будет просто невероятное количество полезностей на тему архитектуры. Запуск уже 20 мая. Вот лишь небольшая часть того, что вас ждёт: ⚙️ Domain-Driven Design: вид сверху. Научимся проектировать системы следуя принципам DDD вместе с Геннадием Кругловым. Уловим связь между доменами и возможностями бизнеса. Узнаем, как продать DDD бизнесу. ⚙️ Экономия должна быть экономной! Попрактикуемся строить бережливую архитектуру с Екатериной Лысенко. Вы получите конкретные советы и стратегии, сможете минимизировать расходы и оптимизировать процессы. ⚙️ Определим, какие задачи должен выполнять техлид, а какие — архитектор. Вас ждёт формат круглого стола — «столкнём лбами» две роли и узнаем, что получится! ⚙️ Документируем проект. Вместе с Михаилом Омельченко из Elonsoft определим, кто должен готовить и обновлять документацию, а главное — на каких этапах и насколько детально. ⚙️ Учимся на чужих ошибках. Рулетка кейсов с примерами действительно плохой архитектуры вместе с Ильёй Зоновым и Александром Поломодовым из Тинькофф, Кириллом Ветчинкиным из Microarch. Забирайте свой билет на сайте, чтобы ничего не пропустить! Реклама. ИП Толстая Елена Петровна ИНН:507503278104, erid:2SDnjceQYg9

Привет. В Linux есть утилита basenc, которая входит в состав пакета coreutils. С помощью неё можно конвертировать данные в двоичный формат. Это который 00110010. Видел на днях как люди упарывались и писали свои велосипеды, банально не зная о существовании этой утилиты и её возможностях. А всё просто, давай закодируем название деревни:
echo 'пиздачосово' | basenc -w16 --base2msbf
По итогу получаем набор 0 и 1. Ключ -w16 я указываю, чтобы выводить по 16 символов в строке. Для удобства. Так как русские символы кодируются двумя байтами. ✔️ Вывод получился таким:
1101000010111111
1101000010111000
1101000010110111
1101000010110100
1101000010110000
1101000110000111
1101000010111110
1101000110000001
1101000010111110
1101000010110010
1101000010111110
00001010
А почему в последней строке какой-то обрубок? Это не обрубок, это 8 бит! И эти 8 бит == символу новой строки, который закодирован одним байтом, о чем нам говорит левый бит первого и единственного октета (00001010). А декодируется всё это безобразие так:
str="1101000010111111110100001011100011010000101101111101000010110100110100001011000011010001100001111101000010111110110100011000000111010000101111101101000010110010110100001011111000001010"

echo $str | basenc -d --base2msbf
Просто указываем ключ -d и вуаля! Если тема интересна, можешь почитать более подробно про кодирование UTF-8 здесь. ⚡ Вага-вага! Сегодня чуть позже (16:00 МСК) залетит еще один партнерский пост, но это будет не просто рекламная интеграция. Ниже я сделаю кнопку (в 16:02 МСК). Нажав на нее ты сможешь выиграть 1 бесплатный купон на неплохую онлайн конфу. Всего будет 3 таких купона. Всю эту кухню контролирую лично я, поэтому наёба тут нет. А на следующей неделе будет еще одна движуха, но там уже более интересная и интерактивная, с денежными призами и облачными серверами, вчера в чатике подробности озвучивал. Короче если интересно, не пропусти. Давай, хорошего дня! tags: #linux #bash — 🔔 @bashdays

Масштабирование задач и высокая производительность с Immers.cloud Друзья, мы являемся одними из ведущих поставщиков IaaS услу
Масштабирование задач и высокая производительность с Immers.cloud Друзья, мы являемся одними из ведущих поставщиков IaaS услуг в России, специализирующийся на использовании GPU. На нашем сайте представлен широкий выбор видеокарт для обучения и инференса нейронных сетей, включая в свой арсенал такие мощные модели, как Н100 и А100 на 80 Gb с NVlink. Мы закрепляем физические ядра процессора и графические адаптеры только за одним клиентом. Это значит, что: 🌳 Ядра процессора будут доступны на 100% процессорного времени; 🌳 Выбранный графический ускоритель будет зарезервирован только за вашим сервером; 🌳 Вы получите высокую производительность при работе с системой хранения. Тестирование виртуальных серверов с сетевыми загрузочными дисками показывает до 70 000 IOPS на случайные операции чтения и до 60 000 IOPS на случайные операции записи. Вы можете быть уверены, что арендуемые CPU и GPU используются только вашим виртуальным сервером. Заинтересованы? Давайте обсудим, как наш сервис может стать решением ваших задач. Свяжитесь с нами уже сегодня! 🎁 Для подписчиков паблика предлагаем эксклюзивный бонус: 20% к пополнению счета. Готовы подобрать индивидуальные конфигурации под конкретные задачи. Immers.cloud - ваша облачная инфраструктура нового поколения. Реклама. ООО «ДТЛ». ИНН 9717073792. erid: LjN8K37dv

Упоримся? А давай! Открывай терминал с башем и запускай команду:
while :; do cat /etc/hosts ; done | grep -m1 'a'
По идее тут что-то вроде бесконечного цикла, который будет cat’ить на экран файл hosts, предварительно грепнув содержимое по символу «a».
Аргумент -m1 = выход после первого вхождения искомой подстроки. После этого, конец канала закрывается для чтения.
Запустил? И всё зависло! По крайней мере у меня вывелась только одна строчка вида:
127.0.0.1 localhost bashdays
Но почему оно зависло? А потому, что утилита cat при попытке записать данные в сломанный канал, завершается сигналом. ✔️ Давай убедимся:
set -o pipefail
cat /etc/hosts | exit 0
echo $(( $? > 128 ? $? - 128 : $? ))
Получаем цифру 13. Откуда она взялась? Смотри! Если команда завершается сигналом, тогда статус ошибки ($?) == 128 + Номер сигнала. А дальше вычитаем, делим, умножаем, корень квадратный вычисляем, заводим в дискриминант по синусу. Пеню. Короче получили цифру 13. Более подробно про сигналы мы с тобой разбирали в этом посте. Давай посмотрим, что такое 13:
kill -l 13
Вывелось PIPE, что равносильно SIGPIPE (Broken Pipe). Ага! Получается что наш бесконечный цикл постоянно запускает утилиту cat, которая тут же завершается. Раньше эта ситуация была очевидна и на экран выводилась ошибка. А вот с версии Bash 3.1-alpha1 это пофиксили, вот выжимка из спеков:
This document details the changes between this version, bash-3.1-alpha1,
and the previous version, bash-3.0-release.  

By default, the shell no longer reports processes dying from SIGPIPE.
Нахуй так сделали, непонятно, скорее всего ушли в сторону set pipefail, типа кому надо тот включит, чтобы лишнее гавно на экран не сыпалось. Ладно. После запуска этого бесконечного цикла, можешь запустить htop и визуально глянуть как порождается бесконечное количество процессов, растет счетчик PID. А как только выработан лимит PID, пиды начинают использоваться повторно. В общем это хорошо видно. Ну либо так можно глянуть:
ps --no-headers --sort=pid -eo pid
Увидишь большую разницу между значениями PID. Теперь как это пофиксить. Если уж захотелось упороться, нужно упарываться правильно. Вот несколько вариантов:
while : ; do cat /etc/hosts || { echo $? >&2 ; exit; } ;done | grep -m1 'a'
while : ; do cat /etc/hosts || break ; done | grep -m1 'a'
while : ; do cat /etc/hosts || exit ; done | grep -m1 'a'
Если присмотреться, может возникнуть вопрос — а откуда выходит exit? Цикл выполняется в подоболочке, потому что является участником канала. Давай проверим:
while : ; do cat ; done | grep -m1 'a' &
Запускаем конвейер в фоне. Команда cat без указания аргументов будет читать стандартный ввод, который в данной ситуации ассоциирован с терминалом и ждет ввода данных. А такое не позволительно фоновым процессам, поэтому такие задания будут приостановлены. Проверяем, что оно действительно приостановлено:
jobs -l

[1]+251913 Stopped (tty input) while :; do
cat;
done
251921 | grep --color=auto -m1 'a'
Ну и теперь смотрим, кто есть кто:
ps --forest -o pid,ppid,stat,comm

PID PPID STAT COMMAND
251893  251854 Ss bash
251913  251893 T   \_bash
251924  251913 T    |  \_cat
251921  251893 T    \_grep
251962  251893 R+   \_ps
Процесс 251913/251893 и есть подоболочка, в котором крутится наш цикл. Вот с этой подоболочки и выходит exit. Сложно? Да не… азы с некоторыми нюансами. Изучай! tags: #linux #bash — 🔔 @bashdays