Bash Days | Linux | DevOps
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.ru
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام 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) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
export TERM=vt100
Теперь выполняем:
echo -e "\e[31mHello Bashdays\e[0m"
И видим что управляющие символы не сработали. А если экспортировать xterm-256color, то строка Hello Bashdays будет красной.
А теперь попробуй в vt100 запустить midnight commander и что-то в нем поделать. Ты будешь приятно удивлён — всё сломалось. Мышка не работает, UTF-8 не работает, F10 не работает, нихуя не работает.
Отличий на самом деле много, смысла нет все их перечислять. Используй современные решения и не лепи горбатого.
А в современном мире вообще используется vt100?
Конечно! Например, доисторические программы на каких-нибудь всратых заводах, которые заточены именно под этот вид терминала.
Либо какое-то специальное оборудование, которому не требуются свистоперделки современных терминалов, а важна лишь скорость, ясность и низкие системные требования.
В общем пусть прошлое остается в прошлом. А чтобы писька не отвалилась, выбирай — xterm-256color!
tags: #linux
—
🔔 @bashdaysКстати отлично запускается порнохабина, даже ЗВУК есть!Короче я принес, а ты уже сам смотри, мож где сгодится в хозяйстве. Увидимся! tags: #services — 🔔 @bashdays
Цеттелькастен (нем. Zettelkasten, буквальный перевод «ящики для заметок») — система ведения заметок и управления личными знаниями, используемая в исследованиях и учёбе.Звучит это правда как — Флюгегехаймен! Теперь про боли. В последни год я редко пишу код, совсем забросил свой любимый vim и успешно забыл все комбинации клавиш. Ситуация конечно интересная — тратишь кучу времени на изучение комбинаций в vim, доводишь их до инстинктов и мышечной памяти. Но спустя месяц, все эти скиллы куда-то бесследно испаряются. Походу как у бодибилдиров, накачал за год банки, на месяц сделал паузу и превратился снова в дрища. Ну пиздец же. А чтобы не просрать эти скиллы, нужно ежедневно их применять. А как их применять, если нет необходимости? Просто так дрочить вприсядку тоже не хочется, хочется чем-то полезным заниматься и не деградировать. В общем в Obsidian есть нативная поддержка vim. Я конечно знатно прихуел, но воодушевился. То есть я могу теперь писать для вас посты в комфортной для себя среде и не проёбывать скиллы по виму. Это же прекрасно! 🤙 Правда я растерял всю свою прыть и поэтому приходится заново затачивать свои зажившие пальцы под аккорды вима. Мыши кололись, плакали, но продолжали есть кактус… Ты наверное предложишь мне писать посты сразу в виме, идея хорошая, но от Obsidian я тащусь не меньше чем от вима. Все же это немного разные инструменты. Вот те ссылка на Obsidian чтоб не искать Так что, теперь я совмещаю приятное с полезным. Люблю изобретать. Может и тебя этот пост натолкнет на какие-то правильные мысли. И ты скрестишь своего бульдога с носорогом. Кстати когда я в Obsidian включил режим VIM, он мне выдал интересный попапчик, в котором до включения режима, предложил пройти небольшой квест. Прям повеселило! 👇 tags: #рабочиебудни — 🔔 @bashdays
tput используется для управления терминалом и выполнения различных задач, связанных с его настройкой и управлением. Управляющие последовательности — это специальные последовательности символов, используемые для управления поведением терминала. Они позволяют изменять цвета текста, перемещать курсор, очищать экран и выполнять другие действия, не изменяя сам текст.✔️ Практика Чтобы не усложнять, рассмотрим пример на основе clear. Эта команда очищает экран.
clear=$(tput clear)
Помещаем в переменную очистку экрана. Теперь проверяем:
printf '%s' $clear
echo -n $clear
После выполнения одной из этих команд, экран терминала будет очищен.
А почему просто не выполнить команду clear без этих вонючих tput? Потому, что это самый простой пример, чтобы ты въехал в суть.
Получается мы не плодим в своих скриптах кучу tput clear а используем оптимизированный вариант с переменной.
Чем больше параметров в tput, тем больше треша в скриптах. Проще же один раз закинуть в переменную эту кишку и не маяться хуйнёй.
Посмотреть управляющую последовательно ты можешь так:
echo ${clear@Q}
На экран выведется:
$'\E[H\E[2J\E[3J'
Конструкция: ${clear@Q} это использование параметра расширения в Bash, который отображает значение переменной clear в форме, пригодной для использования в качестве строки в программном коде. Это означает, что специальные символы будут экранированы.
Начиная с версии 4.4 в Bash, значение parameter заключаются в одинарные кавычки.
${parameter@Q}
Экранирование помогает избежать интерпретации специальных символов терминалом и позволяет безопасно выводить последовательности на экран.Пример одной строкой:
tput cup 20 60 | { read -r BASHDAYS; echo ${BASHDAYS@Q}; }
1. Генерируем управляющую последовательность для перемещения курсора терминала на 20 строку и колонку 60.
2. Передаем полученную строку по пайпу.
3. Читаем строку и присваиваем ее переменной BASHDAYS.
4. Выводим значение переменной BASHDAYS.
По итогу получаем такое:
$'\E[21;61H'
Еще вариант:
tput cup 1 10 | cat -v ; echo
Результат сам посмотришь если интересно.
Для многих это тема не новая, но я частенько наблюдаю в скриптах избыточное применение этих управляющих последовательностей.
Короче пихай это говнище в переменную и будет заебись!
На закуску держи интересный пример определения и сохранения последовательностей.
Давай краба, увидимся!
tags: #bash #linux
—
🔔 @bashdays:charset=0410-044f (охватывает все заглавные и строчные буквы русского алфавита от А до Я) ну или язык :lang=ru.
✔️ Поехали! Выводим все шрифты, которые поддерживают кодовую точку «0410».
fc-list ':charset=0410' --format '%{file}\n'
Есть нюанс. В список могут попасть шрифты, которые будут содержать кодовые точки, но у них не будет изображений символов.
Далее сопоставляем найденные шрифты, с теми которые поддерживает утилита convert.
Утилита convert является частью пакета программного обеспечения ImageMagick. Это мощный инструмент для создания, редактирования, преобразования и отображения растровых изображений.
fc-list ':charset=0410' --format '%{file}\n' | grep -wof - <(convert -list font)
Чо тут происходит. Мы отдаём через pipe результаты отработки команды fc-list на стандартный ввод grep.
w = шаблон, соответствует слову
o = выводим только совпадения, а не всю строку
f = файл строки в качестве шаблона поиска
Конструкция <(convert -list font) это подстановка процессов. Доступна в системах, поддерживающих именованные каналы (FIFO) или метод именования открытых файлов через /dev/fd.
Она имеет вид: <(список) или >(список)
Запускается процесс список и его входной или выходной поток связывается с именованным каналом FIFO или одним из файлов в /dev/fd.
Имя этого файла передается в качестве аргумента текущей команде как результат подстановки.
Если использовать >(список), запись в файл будет давать входные данные процессу список.
Если используется <(список), файл, переданный в качестве аргумента, необходимо читать для получения результатов работы процесса список.
Получается в качестве аргумента команда grep получит файл. Содержимым которого будет результат работы команды convert -list font.
Проверяем:
echo <(convert -list font)
cat <(convert -list font)
В итоге получаем нужный список шрифтов.
Font: URWGothic-Book
family: URW Gothic
style: Normal
stretch: Normal
weight: 400
glyphs: URWGothic-Book.otf
Font: URWGothic-BookOblique
family: URW Gothic
style: Oblique
stretch: Normal
weight: 400
glyphs: URWGothic-BookOblique.otf
Ну а дальше можем заряжать все это в bash скрипт и гордится, какие мы с тобой охуенные.
Для примера давай сгенерим кучу изображений с русской буквой «А» используя найденные шрифты.
#!/bin/bash
code=0410
char=$(printf '%b' '\U'$code)
fc-list ':charset='$code --format '%{file}\n' |\
grep -wof - <(convert -list font) | while read line
do
name=${line##*/}
name=${name%.*}
convert -font "$line" -pointsize 48 label:"$char" ./${name}.png
done
После запуска скрипта, в каталоге появится портянка файлов с изображениями, учти этот момент, чтобы не засрать себе п➡️ Про сигналы писал тут и тутВ Linux ты можешь найти PID процесса, а затем посмотреть:
cat /proc/$PID/status
В выхлопе будут строки описывающие какие сигналы
SigBlk - заблокированы
SigIgn - проигнорированы
SigCgt - перехвачены
Для примера беру PID=1, получаю такое:
SigBlk: 0000000000000000 SigIgn: fffffffe57f0d8fc SigCgt: 00000000280b2603Роман ты заебал! Опять какие шифры нечитабельные. Давай разберемся что это значит. Все эти числа справа, являются битовой маской. Если преобразовать это из шестнадцатеричного в двоичный, то каждый 1 бит представляет собой пойманный сигнал, считая справа налево, начиная с 1. Итак, интерпретируя строку SigCgt, видим, что мой init процесс улавливает следующие сигналы:
00000000280b2603 ==> 101000000010110010011000000011
На телефонах вся эта поебота выглядит очень стрёмно, поэтому смотрим картинку к этому посту 👆Как сопоставить числовые сигналы с именем? Я выполнил команду:
kill -l
И получил список всех сигналов от 1-31, а дальше уже дело техники.
И помним, что мы не можем заблокировать сигнал, если программа не готова к его перехвату. Если сигнал не был пойман, происходит действие по умолчанию, обычно это — завершение процесса.
Нахера всё это нужно? Ну если ты рядовой потребитель, то конечно оно тебе и не нужно. А если ты «автомеханик», то извините, хош не хош, а как оно внутри работает знать обязан.
Вот те скрипт, который покажет какие сигналы прослушивает программа. Да, скрипт преобразует криптошифры в нормальные имена сигналов. Избавляю вас от еботни, как говорится все для вас мои дорогие подписчики 🙃
#!/bin/bash
set -e
grep -m3 -P '^Sig(?:Blk|Ign|Cgt):' "/proc/$1/status" | while read field value
do
bits=$(printf 'ibase=16; obase=2; %X\n' '0x'$value | bc)
sigs=()
i=0
while [[ $bits ]]
do
((++i))
[[ ${bits:$((${#bits} - 1))} -eq 1 ]] && sigs+=($i)
bits=${bits::-1}
done
(( ${#sigs[*]} )) && sigs=( $(kill -l ${sigs[*]}) )
echo $field ${sigs[*]}
done
exit
При запуске нужно указать PID процесса: script.sh <pid>
Вроде всё. Если есть чо добавить, велком в комменты. Ну и всех с пятницей, хороших предстоящих выходных, берегите себя!
Пользуйтесь!
tags: #bash #linux #debug
—
🔔 @bashdaysstrace -o "| grep -Eo '/home/[^\"]+' >&2" -zfe '/^open' mc
✔️ Делает она следующее
При запуске программы (в моём случае это mc), в терминал вываливается список всех файлов, которые программа открывает в домашнем каталоге.
Штука очень полезная для дебага. Когда не знаешь к каким файлам программа обращается, а очень хочется.
Эту команду можно усовершенствовать, поменяв пути и добавив например вызовы write. Тут уже от ситуации зависит.
При первом запуске mc я получил такой список:
/home/user/.config/mc/ini
/home/user/.config/mc/ini
/home/user/.config/mc/panels.ini.E4M2O2
/home/user/.config/mc/ini
/home/user/.config/mc/ini
/home/user/.config/mc/ini~
/home/user/.config/mc/ini
/home/user/.bash_history
Если в твоём сознании живёт стройный и прекрасный мир программ, и ты человек с утончённой душевной организацией, воздержись от использования этого инструмента, лучше сходи на pornhub.Пользуйтесь! tags: #bash #linux #debug — 🔔 @bashdays
Зачем хранить фильмы на dvd дисках и mp3 скачивать, когда есть стриминговые сервисы.Когда мы жили в пещерах и подтирались зайцами, таких ништяков у нас не было. А был какой-нибудь blackcat linux и ты. ВСЁ! Ну и фидошка временами. Ответ на свой вопрос в фидошке иногда приходилось ждать неделями и то не факт. Книги? Неа, максимум ZX-ревью и прочие нечитабельные клоны. А хотелось Башить! Оставалось изучать исходники чужих скриптов, которые шли из коробки в дистрибутиве linux. Ну и естественно man, в который особо никто не въезжал, потому что с английским были небольшие проблемы — заебешься по словарику переводить, а уроки английского успешно прогуляны. И что самое интересное, это было гораздо эффективнее, чем в нынешние времена. Информация записывалась на подкорку. Как скилл — умение ездить на велосипеде. А сейчас — прочитал книгу, вроде всё понятно, грейд — крепкий мидл. Прошла неделя, ты отупел и уже ничего не помнишь. Информация записалась в голову, но потом могз — блядь, говнище какое-то, нужно срочно это забыть, есть же интернет! ✔️ Короче, к чему это я. Если пишешь на каком-то языке и нужны примеры конкретных функций или команд. Далеко ходить не надо, всё нужное хранится на твоём диске. Давай заглянем на диск и посмотрим на примере Shell скриптов, которые валяются в
/usr/bin, /usr/sbin, /bin, /sbin.
file /{,usr/}*bin/* | grep -Po '^.+?(?=:\s+.+?shell script)' | xargs grep -wl -m1 'getopts'
Команда идет по каталогам и ищет нужное слово, в нашем случае ищем пример работы с функцией «getops». По ключам расписывать не буду, интернет у тебя явно пока еще есть.
По итогу отработки этой кишки, получаем пути и имена файлов, где эта функция используется. Открываем и смотрим как оно применяется на практике.
Даже если оказался в глубокой spr.shРешил написать справочник. Получился консольный гугл для бедных. Консольный справочник для поиска инфы по тегам. В В ТЭГАХ КОНФИГА ИСПОЛЬЗОВАТЬ СИМВОЛ ПОДЧЕРКИВАНИЯ
"_" НЕЖЕЛАТЕЛЬНО.
Вся инфа хранится в конфигурационном файле в виде:
# spb director ivanov ivan petrovich may
Иванов Иван Петрович
tel 123456789 director@mail.ru
ats 12587
loip 10.10.18.07
birth 22.05.1956
https://ya.ru
# bash if then else fi
declare -i $COND=0
if [[ "$COND" -eq 1 ]];then
echo "FALSE"
else
echo "TRUE"
fi
Набираем spr.sh regexp mail и получаем все записи, содержащие эти оба тэга. Порядок не важен.
При поиске можно использовать "_" для уточнения.
spr.sh bcd = вхождение bcd (найдет bcd, abcd, bcde, abcde) spr.sh _bcd = начинается на bcd (найдет _bcd, _bcde) spr.sh bcd_ = заканчивается на bcd (найдет bcd, abcd) spr.sh _bcd_ = строго bcd (найдет bcd)Обращаю внимание, поиск только по ВХОЖДЕНИЮ тэгов, но не комментов. В общем, можно быстро получить список телефонов любого филиала, отдела, именинников в этом месяце... Или забить примеры кода и получить справочник для студентов/админов по конструкциям
bash sed awk grep regexp в одном флаконе.
Если нужно что-то поправить: spr.sh edit и конфигурашка открывается в редакторе. Этот режим можно использовать для поиска средствами редактора по всему конфигу, включая комменты.
✔️ Описание скрипта:
EDITOR - в каком редакторе открывать конфиг (vim mcedit)
CONF - имя конфига получаем из текущего имени скрипта.
$# -eq 0 - если нет параметров - выводим help.
${0##*/} - bash-аналог basename
eval "$(which $EDITOR) $CONF" ищем редактор и открываем конфиг
Далее awk.
Передавать $* (параметры скрипта) внутрь через переменную не стал, сразу встроил в однострочник (да-да. это однострочник)
BEGIN{split("'"$*"'",s," ")} до начала чтения файла разбиваем тэги по разделителю " " и записываем в массив s. обработка строк файла: ($0 ~ /^#/)
Для строк, начинающихся с символа # (тэг-строка)
k0=$0 - сохраняем строку тэгов на время поиска. gsub(/^#/, "# ") - добавляем пробел после #Теперь поле №1
for(i=2;i<=NF;i++){$i="_" $i "_"} обрамляем тэги "_" для более удобного поиска.
p=1 и проверяем в цикле наличие КАЖДОГО тэга во всей строке.
($0 !~ s[i]) Если искомого тэга в строке нет, p=0 и выход из цикла.
$0=k0 - восстанавливаем строку тэгов.
Если p=1 - (флаг печати) выводим строки.
Обращаю внимание, изменение переменной p только в тэг-строках
Использовать для хранения учетных данных нежелательно. Для этого есть KeePassXC и аналоги.
#/bin/bash
declare -r EDITOR=nano
declare -r CONF=${0%.*}.conf
declare -r SCR=${0##*/}
if [[ $# -eq 0 ]];then
echo "Search by tag1 && tag2 && ... in $CONF"
echo "Usage: $SCR tag1 [tag2 ...[tagN]]"
echo "Example:"
echo "$SCR bcd ~> (seek bcd, abcd, bcde, abcde)"
echo "$SCR _bcd ~> (seek bcd, bcde)"
echo "$SCR bcd_ ~> (seek bcd, abcd)"
echo "$SCR _bcd_ ~> (seek bcd)"
echo
echo "To edit conf: $SCR edit"
exit
fi
if [[ "$1" == "edit" ]];then
eval "$(which $EDITOR) $CONF"
exit
fi
awk 'BEGIN{split("'"$*"'",s," ")}
{if($0 ~ /^#/){
k0=$0
gsub(/^#/, "# ")
for(i=2;i<=NF;i++){
$i="_" $i "_"}
p=1
for(i in s){
if($0 !~ s[i]){
p=0
break}}
$0=k0}
if(p){print}
}' "$CONF"
tags: #bash
—
🔔 @bashdaysРеспект и уважуха. Я думал вы как и все, воспользовались инструкцией с хабра, а это категорически недопустимо по нашим политикам безопасности. Спасибо за работу, я никогда не сомневался в ваших компетенциях. Оплатим по двойному тарифу. Сделано быстро и профессионально.Собственно в этом и скрывался «подъебон». Если бы я сделал как ВСЕ, получается, мне плевать на клиента, на его проекты и бизнес. Хотя отчасти так и есть, чо лукавить 😲 Естественно мне пришлось бы всё переделывать, не говоря уже про доверие и дальнейшее сотрудничество. Всегда думай своей кабиной. Пофиксишь быстро, все обрадуются, получишь денежку, но через неделю будут яростно ебать в жопу. Когда инфраструктура встанет раком из-за какого-нибудь встроенного майнера в образ или MITM атаки.
В крайнем случае можешь поднять свою доверенную, личную проксюшку и через неё забирать образы.Дело конечно твоё, с советами не лезу. Личные наблюдения. Есть такая прекрасная поговорка — мой ишак, хочу еду, хочу ебу! Так, что если ты CTO, задай вопрос своим девопсам и админам, как они решили эту проблему с образами. Будет прекрасный повод распилить их премию и устроить оргию на ретроспективе. Короче нормально делай, нормально будет! Хорошей рабочий недели и береги себя! tags: #рабочиебудни — 🔔 @bashdays
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
