Bash Days | Linux | DevOps
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.ru
Ko'proq ko'rsatish📈 Telegram kanali Bash Days | Linux | DevOps analitikasi
Bash Days | Linux | DevOps (@bashdays) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 23 794 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 5 701-o'rinni va Rossiya mintaqasida 28 128-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 23 794 obunachiga ega bo‘ldi.
17 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -202 ga, so‘nggi 24 soatda esa -5 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 21.91% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 12.48% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 5 213 marta ko‘riladi; birinchi sutkada odatda 2 971 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 21 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent bashdays, linux, bash, docker, скрипт kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Авторский блог от действующего девопса
Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.
Автор: Роман Шубин
Реклама: @maxgrue
MAX: https://max.ru/bashdays
Курс: @tormozilla_bot
Блог: https://bashdays.r...”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 18 Iyun, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
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
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
