Bash Days | Linux | DevOps
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.ru
Show more📈 Analytical overview of Telegram channel Bash Days | Linux | DevOps
Channel Bash Days | Linux | DevOps (@bashdays) in the Russian language segment is an active participant. Currently, the community unites 23 794 subscribers, ranking 5 701 in the Technologies & Applications category and 28 128 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 23 794 subscribers.
According to the latest data from 17 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -202 over the last 30 days and by -5 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 21.91%. Within the first 24 hours after publication, content typically collects 12.48% reactions from the total number of subscribers.
- Post reach: On average, each post receives 5 213 views. Within the first day, a publication typically gains 2 971 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 21.
- Thematic interests: Content is focused on key topics such as bashdays, linux, bash, docker, скрипт.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Авторский блог от действующего девопса
Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.
Автор: Роман Шубин
Реклама: @maxgrue
MAX: https://max.ru/bashdays
Курс: @tormozilla_bot
Блог: https://bashdays.r...”
Thanks to the high frequency of updates (latest data received on 18 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
whois.
apt install whois
whois 164.92.216.105
Использовать whois в скриптах не рекомендую, потому что для этого, во-первых, есть специальные базы, а во вторых - забанят.
ㅤ
Поверьте, я знаю о чем говорю. И иногда бывает так, настроение утром испорчено, и какой-то хостер тебя ну совсем задолбал и хочется просто взять и забанить его целиком, смотрим вывод:
NetRange:164.92.64.0 - 164.92.255.255
CIDR:164.92.128.0/17, 164.92.64.0/18
Во, здесь повезло заполнено поле CIDR. Можно забанить 164.92.128.0/17 и 164.92.64.0/18 и все будет хорошо, но так бывает не всегда.
whois 114.199.33.115
inetnum: 114.199.0.0 - 114.199.63.255
Поле CIDR отсутствует, есть только inetnum: И то хлеб. Как преобразовать NetRange или inetnum в формат CIDR, ведь iptables не понимает диапазоны ip адресов. Ему подсети подавай (CIDR).
Для этого воспользуемся калькулятором ipcalc. Вообще-то я предпочитаю sipcalc, потому что он бинарный и работает быстрее, но функции разбивки диапазона ip адресов у него нет. Что-то я отвлекся.
apt install ipcalc
ipcalc -r 164.92.64.0 - 164.92.255.255
#вывод
deaggregate 164.92.64.0 - 164.92.255.255
164.92.64.0/18
164.92.128.0/17
ipcalc -r 114.199.0.0 - 114.199.63.255
# вывод
deaggregate 114.199.0.0 - 114.199.63.255
114.199.0.0/18
Итого: с помощью ipcalc -r можно разбить любой непрерывный, даже самый безумный, диапазон ip адресов на подсети в формате CIDR, и количество этих подсетей будет не более 32.
В качестве поиграться предлагаю разбить диапазоны 127.0.0.1-192.168.1.1 или 0.0.0.1-255.255.255.254 Вот только банить их не нужно. А вот разбивать диапазон 0.0.0.0 255.255.255.255 не рекомендую, а почему не скажу. Кто еще какими сетевыми калькуляторами пользуется?
man whois
man ipcalc
tags: #networks © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgateiptables использует только нотацию CIDR. Например, подсеть /32 задает отдельный ip, поэтому правила, содержащие одиночный адрес, задаются с маской /32, даже если вы это не указали. (192.168.0.1=192.168.0.1/32)
Маска 31 - задает два рядом стоящих ip и позволяет уменьшить количество записей, увеличив скорость.
Но не любые соседние ip могут быть объединены этой маской, а только отличающихся последним битом,
Например: 192.168.0.1 и 192.168.0.0 можно объединить в 192.168.0.0/31, а 192.168.0.1 и 192.168.0.2 - нельзя.
Ну и теперь посмотрим, что об этой фигне говорят сетевые калькуляторы ipcalc и sipcalc.
Я тут из вывода удалил менее информативные поля. Если кому интересно - смотрите полный вывод сами.
apt install ipcalc sipcalc
sipcalc 192.168.0.1/32
# вывод
Host address - 192.168.0.1
Network address - 192.168.0.1
Network mask (bits) - 32
Broadcast address - 192.168.0.1
Addresses in network - 1
Network rang - 192.168.0.1 - 192.168.0.1
ipcalc -b 192.168.0.1/32
# вывод
Address: 192.168.0.1
Netmask: 255.255.255.255 = 32
Hostroute: 192.168.0.1
Hosts/Net: 1
sipcalc 192.168.0.1/31
# вывод
Host address - 192.168.0.1
Network address - 192.168.0.0
Network mask (bits) - 31
Broadcast address - 192.168.0.1
Addresses in network - 2
Network range - 192.168.0.0 - 192.168.0.1
ipcalc -b 192.168.0.1/31
# вывод
Address: 192.168.0.1
Netmask: 255.255.255.254 = 31
Network: 192.168.0.0/31
HostMin: 192.168.0.0
HostMax: 192.168.0.1
Hosts/Net: 2
На мой взгляд, ipcalc для такой экзотики работает более правильно, поскольку Broadcast для подсетей >30 не выводится.
Вывод: при построении физических сетей с масками >30 возникают трудности.
А при фильтрации маски /31 /32 ничем не отличаются от остальных /1-/30
А как, чем, и для чего разбивать диапазоны ip, читайте в следующей статье.
tags: #networks © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgateВ связи с тем, что нужно переходить на отечественные ОС вот мой скрипт автоматизации, аля gpo.Пожалуйста пишите объективно и по делу. Я не вправе один это делать, будет не объективно, поэтому скидываю сюда и надеюсь на ваши скиллы, с автором скрипта этот момент оговорен. ㅤ Всем заранее спасибо! tags: #codereview — 🔔 @bashdays➡️ @gitgate
dhcp и не выдает статический ip адрес.
ㅤ
Собственно во всей конторе нет инета. А сегодня пятое число, зарплату платить нужно - пропускать нельзя :-)
Но я не об этом. Звоню провайдеру. Говорю, DHCP - просто раздает. Давай пропишем статический IP, и все будет хорошо. Ну, ок. Присылает мне данные, а там маска 255.255.255.192.
Начинаю вводить. pfSense требует краткую маску. Блин. Инета нет. ipcalc нет, потому как винда (кстати, sipcalc, на мой взгляд лучше).
Можно только с помощью calc перевести 192 в бинарное число. 11000000.
Ну, а теперь мнемоника. Единичка большая, поэтому увеличивает маску, нолик маленький, поэтому уменьшает.
Все помнят, что 255.255.255.0 = /24 = 11111111 11111111 11111111 00000000, 255.255.255.255 = /32 = 11111111 11111111 11111111 11111111.
Теперь считаем:
255.255.255.192 = 11111111 11111111 11111111 1100000024 + 2 "единички" = /26 + Потому что единичка большая и увеличивает маску или 32 - 6 "ноликов" = /26 - Потому что нолик маленький. Фиксиков все смотрели? С какой стороны считать - ваше дело. Я считаю нолики. Не важно, с какой стороны считать, результат одинаковый. Конечно,
192, можно было и в мозгах разложить в бинарный, но я в старости стал таким ленивым...
Как только прописал, все срослось, интернет заработал, зарплата пришла. Красота.
tags: #рабочиебудни #networks © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgatesudo apt install xrdp
sudo dpkg-reconfigure xserver-xorg-legacy
# выбрать подключения "от кого угодно"
Все настройки в /etc/xrdp основной файл xrdp.ini .)
В качестве DE использовал XFCE и LXDE по причине малых ресурсов. LXDE - лучше.
В качестве клиента (и на клиенте) использовал xfreerdp из пакета freerdp2-x11.
sudo apt install freerdp2-x11
Пробовал remmina, но она подглюкивает. Проще всего использовать алиас для подключения. У меня такой:
alias rdp='function _rdp(){ xfreerdp /h:700 /w:1300 /cert-ignore /v:"$@";}; _rdp '
700x1300 - размеры окна /cert-ignore - нужно для подключения к виндовым серверам, поскольку они раз в 120? дней меняют сертификаты, и приходится ручками удалять хэш из файла.
Подключаюсь так:
rdp 192.168.1.100
# или так
rdp 192.168.1.100 /u:username
Ну, а теперь опыт использования:
1. Окно аутентификации можно настраивать. (xrdp.ini Поставить логотип конторы и прописать название сервера в заголовке окна. Удобно.)
2. Любит забивать папки пользователей логами (.xsession-errors .xorgxrdp.log) Решается отключением логирования в ini или ссылкой этих файлов в /dev/null.
3. В XFCE проблемы с переключением раскладки клавиатуры при переподключениях.
4. В LXDE проблемы с раскладкой при входе под одним пользователем с разных машин (нужно войти в свойства клавиатуры и выбрать "модель клавиатуры".
5. Firefox, Thunderbird, Libreoffice - работают прекрасно при входе пользователя только по RDP.
6. Программы из п.3 не работают, если тот же пользователь вошел "локально" (винда проблему решает "выбрасыванием" одной сессии).
7. 1с работает плохо. На некоторых серверах наблюдались проблемы с печатью форм (некоторые буквы в НЕКОТОРЫХ формах печатаются квадратиками и накладываются друг на друга). Причем под одним пользователем проблемы, под другим пользователем проблем нет.
8. При подключении с винды при работе с 1с, часто наблюдается "зависание интерфейса" на несколько минут. Что делает работу практически невозможной.
9. Пытались связываться с разработчиками 1с - ответ был такой: Не можем синтезировать ваши проблемы. Предложения по передаче логов, помощи в отладке игнорировались.
➡️ man xfreerdp
tags: #linux #networks © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgateЗа пост спасибо нашему коллеге и подписчику - Страйфи ЛенджокВ современном мире всё больше задач требуют работы с графическими приложениями на удалённых Linux-серверах, особенно с использованием GPU. Это может быть рендеринг в Blender, обучение нейронных сетей или даже облачный гейминг. Существует несколько способов организации такого доступа, каждый из которых имеет свои особенности. ㅤ X11 Forwarding через SSH Один из самых простых методов — использование X11 Forwarding через SSH. Для этого достаточно базового пакета openssh. Подключение осуществляется командой:
ssh -X -p [порт] [пользователь]@[IP_сервера]
Флаг -X включает проброс X11. После подключения можно запускать графические приложения, например:
firefox &
Однако этот метод имеет значительные недостатки. Интерфейс и ввод отображаются с заметной задержкой, особенно при воспроизведении видео или работе с 3D-графикой. Это связано с тем, что X11 Forwarding передаёт по сети каждое действие с окном без оптимизации и сжатия данных.
RDP в Docker с поддержкой GPU
Более современный и эффективный подход — использование RDP-сервера в контейнере Docker с поддержкой GPU. Протокол RDP изначально разработан для работы с удалённым рабочим столом через сеть и использует алгоритмы сжатия и кэширования элементов интерфейса.
Для настройки поддержки GPU в Docker необходимо установить драйверы и nvidia-container-toolkit, а затем настроить Docker для работы с GPU Nvidia:
sudo apt install nvidia nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
Для AMD
sudo apt install "linux-headers-$(uname -r)" "linux-modules-extra-$(uname -r)"
sudo usermod -a -G render,video $LOGNAME
wget https://repo.radeon.com/amdgpu-install/6.2.1/ubuntu/noble/amdgpu-install_6.2.60201-1_all.deb
sudo apt install ./amdgpu-install_6.2.60201-1_all.deb
sudo apt update
sudo apt install amdgpu-dkms rocm
sudo reboot
sudo apt install rocminfo
# Добавить в файле `/etc/environment` PATH="/opt/rocm/bin"
docker run --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined <image>
Здесь:
--device=/dev/kfd — предоставляет доступ к основному интерфейсу вычислений.
--device=/dev/dri — предоставляет доступ к интерфейсу прямого рендеринга.
--security-opt seccomp=unconfined — отключает ограничения seccomp для контейнера, что необходимо для корректной работы с GPU.
Далее запускается контейнер с RDP-сервером, например, с использованием образа. После запуска контейнера можно подключиться к нему с помощью RDP-клиента, такого как Remmina, настроив SSH-туннель для безопасности и сжатия трафика.
Этот метод обеспечивает более высокую производительность и комфортную работу с графическими приложениями на удалённом сервере, включая поддержку GPU для задач, требующих аппаратного ускорения.
tags: #linux © by Страйфи Ленджок
—
🔔 @bashdays➡️ @gitgateTunnels — позволяет поднять туннель до cloudflare и сделать что-то вроде приватной сети, где все нужные сервисы за NAT в домашней сети ты без труда повесишь на домен и выставишь жопой в интернет. Причем вообще не напрягаясь.Запрятана эта фича знатно и глубоко, поэтому про нее говорят в основном в англоязычном сегменте. ⚪ Как настроить? Настройку я вынес в отдельную статью. С картинками будет намного понятнее, что происходит и как это работает. Читаем 👇 ➡️ Как настроить Tunnels от Cloudflare. Репа с демоном на гитхабе, можешь поресерчить если интересно что у них там под капотом и что она может у тебя спиздить. Такие дела! tags: #linux #networks #рабочиебудни — 🔔 @bashdays➡️ @gitgate
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
echo "1"|
while read; do
echo $REPLY,2
done
# на
echo "1"| read
echo $REPLY,2
А не тут то было.
1,2
,2
Во втором случае read не читает значение. Точнее читает, иначе бы скрипт ожидал ввода с клавиатуры, но переменная REPLY пустая.
Перечитал help по read. Ничего не пойму. Пришлось обратиться к Роману.
Он пояснил, что во втором случае команда read запускается в отдельном subshell, считывает значение. Вот только передать переменную можно только в дочерние процессы, а в родительские нельзя.
Поэтому при завершении процесса read значение переменной REPLY теряется.
Пришлось читать, как работают конвейеры. Здесь писать не буду. Просто приведу ссылку на wiki: https://bit.ly/4fajufR
Оптимизировать можно, но так:
echo "1"| (read;echo $REPLY,2)
#или так
read < <(echo "1")
echo $REPLY,2
# если переменная одна то классика
a=$(echo 1)
Все, теперь я знаю, как работает pipeline. Надеюсь и Вы.
tags: #bash © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgate#!/bin/bash
#8 ферзей
awk 'BEGIN{
i=8^8
while(i--){
c=sprintf("%08o",i)
j=8
while(index(c,--j)){}
if(j<0){
j=8
while(j--){q[j]=substr(c,j+1,1)}
b=1
for(m=0;m<7 && b;m++){
for(j=m+1;j<8;j++){
a=q[m]-q[j];sub(/-/,"",a)
if(a==(j-m)){b=0;break}}}
if(b){print c}
}}}'
#---
while(index(c,--j)){} - чисел всего 8(0-7), если index=0 (нет цифры j в числе с из 8 цифр, значит каких-то цифр 2).
Обратите внимание тело цикла пустое! Если цикл прошел полностью - дублей нет. Вау.
Алгоритм пермутаций без повторений методом перебора. (проверка на горизонталь).
while(j--){q[j]=substr(c,j+1,1)} - преобразовали число c в массив цифр q[]
Дальше аналогично предыдущей программе, кроме sub(/-/,"",a) - еще один аналог модуля.
Просто отбрасываем "-". Как конструкция по скорости не знаю, не проверял.
Программа отработала примерно за 41с.
Какой-то код маленький получился, и работает быстрее. Но, главное результаты совпадают.
Кто там хотел изучать bash?
Слабо реализовать на чистом bash?
Интересно было бы и время выполнения сравнить.
tags: #bash © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgate
Available now! Telegram Research 2025 — the year's key insights 
