Bash Days | Linux | DevOps
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.ru
显示更多📈 Telegram 频道 Bash Days | Linux | DevOps 的分析概览
频道 Bash Days | Linux | DevOps (@bashdays) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 23 825 名订阅者,在 技术与应用 类别中位列第 5 724,并在 俄罗斯 地区排名第 28 153 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 23 825 名订阅者。
根据 10 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -183,过去 24 小时变化为 -6,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 19.30%。内容发布后 24 小时内通常能获得 12.47% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 4 598 次浏览,首日通常累积 2 971 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 24。
- 主题关注点: 内容集中在 bashdays, linux, bash, docker, скрипт 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“Авторский блог от действующего девопса
Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.
Автор: Роман Шубин
Реклама: @maxgrue
MAX: https://max.ru/bashdays
Курс: @tormozilla_bot
Блог: https://bashdays.r...”
凭借高频更新(最新数据采集于 11 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
/var/log/filter/latest.log и соседние.
Первым делом запретил по wan все порты назначения, кроме типовых (web, mail, dns, ntp, webrtc).
К сожалению, на периметре нельзя увидеть, какое приложение шлет пакеты. Пришлось разбираться со смартфонами. Взял один для примера.
Поставил PCAPdroid, и обнаружил, что фигней страдает не max, а whatsapp. Причем не каждый, а только 70%. К слову сказать, что у всех айтишников телефоны были чистые. Проблемы наблюдались и на android и на ios.
Вышел на руководство с предложением, написать скрипт для полного отлучения «зараженных» смартфонов от wi-fi. А руководство отказало. Предположения причин отказа прошу ванговать в комментах. Думаю вы уже догадались...
Блокировать отдельные проги может программа NetGuard (root не нужен). Но к сожалению она жрет батарею.
В общем, пока остановился на разрешенных портах для исходящих соединений. Если есть другие предложения - я готов выслушать. Может кто-то уже решал данную проблему.
PS: На тестовом «зараженном» телефоне, стоял бесплатный антивирус на букву К. Стоял и молчал.
Всем работы без багов.
🛠 #security #workflow
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 BlogЯ хотел редактор, который просто открывается и работает. Без аккаунта, без подписки, без интернета.Почему Tauri, а не Electron Первый вопрос при выборе стека — чем рендерить. Electron — очевидный ответ, но я знал, чем это кончится: 200 мегабайт бинарника и 300 мегабайт RAM на старте. Для текстового редактора это абсурд. Tauri использует системный WebView — на Linux это WebKitGTK, на Windows WebView2, на macOS WKWebView. Бэкенд на Rust. Итог: финальный бинарник весит меньше 10 мегабайт, а потребление памяти как у нативного приложения. Фронтенд — React, потому что мне с ним удобно. Как это начиналось Первая версия умела открывать файл, редактировать его и сохранять. Markdown-превью появился на второй день. Потом захотелось панель форматирования, потом — историю файлов, потом я поймал себя на том, что добавляю уже пятую фичу и приложение превратилось в нечто, чем сам пользуюсь каждый день. Это классическая ловушка pet project: ты делаешь инструмент под себя, и он начинает расти ровно в сторону твоих личных болей. Главная фича: история версий Честно — это то, чего мне всегда не хватало в других редакторах. Не git, не ручные копии с суффиксом
_v2_final_FINAL. Просто автоматические снимки, которые делаются сами — при открытии файла и периодически во время работы.
При каждом открытии qnote делает снимок текущего состояния. Дальше снимки появляются автоматически раз в несколько минут. В любой момент можно открыть список версий, посмотреть превью, сравнить и восстановить нужную. Всё хранится локально, никакого облака.
Это мелочь, которая спасает несколько раз в год в самый неподходящий момент. Ты что-то случайно удалил, закрыл файл, открыл снова — и понял это через час. Без истории версий текст просто потерян.Остальные фичи, которыми горжусь PDF-экспорт через typst — не через браузерный print, а через настоящий типографский движок. PDF генерируется в цветах текущей темы: тёмная тема — тёмный PDF, светлая — светлый. OCR прямо в заметку: перетаскиваешь картинку, запускаешь распознавание через tesseract — и текст вставляется прямо в документ. Никакого копипаста между окнами. Горячие клавиши на любой раскладке. Звучит как мелочь, пока не столкнёшься. В большинстве приложений шорткаты работают только на английской раскладке. Здесь — на любой. Синхронный скролл в split-view: левая панель с источником и правая с превью прокручиваются вместе. Кажется очевидным, но удивительно, сколько редакторов этого не умеют нормально. Что получилось в итоге qnote — это не попытка убить Obsidian или конкурировать с Notion. Это редактор для тех, кто хочет просто писать: без плагинов, без аккаунтов, без подписок. Markdown с превью, история файлов, автосохранение, история версий, PDF-экспорт и OCR — всё что нужно, ничего лишнего. Работает на Linux, Windows и macOS. Бинарник весит меньше 10 мегабайт. Открывается мгновенно.
автор проекта: @omibranchИсходники открыты: https://github.com/Omibranch/qnote 🛠 #dev — 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
6j, то курсор у меня встанет на строку: Не забудь подставить своё мыло. Такая нумерация показывает расстояние до строки от курсора, а не её абсолютный номер.
Аналогично работает и в других направлениях. В редакторе ZED это включается через конфиг:
relative_line_numbers": "enabled"
В виме же по классике в конфиге:
set number
set relativenumber
Честно, если ты пользуешься мышкой, это бесполезная настройка. Для новичков это совсем неочевидная фича и возможно даже вредная. Короче у этой фичи целая философия:
➡️ Мышление расстояниями. В заурядной жизни, ты будешь думать — ага, мне бы на строку 15 попасть. А если ты адепт вима, твоё мышление такое — мне бы на 6 строчек ниже.
➡️ Ускорение всех count-команд. Тут не только клавиши hjkl задействованы, ты можешь выполнять ряд других операций. Например:
5dd — удалить 5 строк 3yy — скопировать 3 строки 4> — сдвинуть 4 строки вправо 2} — прыгнуть на 2 абзацаТы сразу видишь нужное число, сразу прожимаешь нужную комбинацию. ➡️ Сильно уменьшает мысленную математику. Без — так… я на 120 строке, мне нужно на 133… это +13. С ней — вижу 13 →
13j.
Мозги по сути вообще ничего не считают. Это плюс. Думаешь не головой, а жопой.
➡️ Работает лучше с большими файлами. Когда у тебя файл на 1000+ строк, абсолютные номера создают шум, а относительные прям в тему. Ты ориентируешься вокруг курсора, а не во всём файле.
Минусы? Да конечно!
➡️ Поначалу выламывает тебя, перестраивает, больно
➡️ Плохо подходит для дебага с конкретными строками
В общем относительная нумерация, это не про цифры, она про то, чтобы перестать искать строки и моментально перепрыгивать в нужное место.
Если есть чё добавить, камон в комменты, будет интересно почитать.
🛠 #devops #linux
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 BlogТеперь ИИ-помощник в облаке может создавать несколько виртуальных машин, а после управлять ими по команде. Например, добавлять или удалять диски, менять конфигурации и выполнять другие повседневные операции.2️⃣ Три новых сценария
▶️
DevOps-агент
— может разворачивать и обслуживать PostgreSQL, Kafka, WordPress, GitLab и другие популярные сервисы по текстовому промпту.
▶️
SRE-агент
— настраивает мониторинг, алертинг и помогает разбирать инциденты.
▶️
FinOps-агент
— находит забытые или неиспользуемые ВМ и предлагает их удалить, чтобы исключить бессмысленные траты. А еще может показать топ дорогих ресурсов, позволяя сравнивать траты за разные периоды.👉 Попробовать
Нежных сразу — нахуй, остальным велком.Для начала установим балансировщик. То есть входная точка у кластер всегда будет одна, а дальше балансировщик будет раскидывать запросы по 3м нашим серверам в кластере. Если одна из нод пойдет по пизде, балансировщик это прозрачно разрулит и отдаст тебе файл в любом случае, даже без правки конфигов. Проверяем наш кластер:
docker exec -it garage-garage-1 /garage status
Работает. Дальше берем еще один сервер, который будет выступать балансировщиком. Для теста я создам в Selectel нищую виртуалочку и впихарю на нее haproxy.
Устанавливаем haproxy:
apt install haproxy
Домен для кластера я буду использовать s3.linuxfactory.ru, соответственно во всяких rclone нужно будет прописать его в параметре endpoint.
Правим конфиг /etc/haproxy/haproxy.cfg:
global
log /dev/log local0
maxconn 4096
defaults
mode tcp
timeout connect 5s
timeout client 1m
timeout server 1m
option http-server-close
timeout http-request 10s
timeout queue 1m
frontend garage_front
bind *:443 ssl crt /etc/ssl/garage.pem
option http-buffer-request
default_backend garage_back
backend garage_back
balance roundrobin
server node1 95.123.123.116:3900 check
server node2 152.44.71.205:3900 check
server node3 145.83.116.20:3900 check
Проверяем валидность конфиги:
haproxy -c -f /etc/haproxy/haproxy.cfg
Приучи себя всегда это делать, будь то nginx либо что-то другое. Однажды это спасет твою жопу от пенетрации.Ага, хуй там плавал. Давай создадим SSL сертификат. Я конечно предпочитаю angie, чтобы он сам это сделал, но у нас haproxy, поэтому придется немного пострадать... Читать продолжение: https://two.su/aaahd 🛠 #devops #linux — 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Да, когда ты будешь заливать файлы в своё облако, данные будут реплицироваться на все 3 сервера. Поэтому сервера рекомендую держать в разных регионах или вообще у разных провайдеров. Например, если сгорит один дата центр, то ты не проебешь свои данные. Удобно и надёжно. Ну и смотри в сторону дискового места, если на одном сервере выделил 50 гигов под бакет, то на остальных серверах выдели столько же, чтобы не возникало коллизий.Прицепом воткнем балансировщик нагрузки, чтобы по домену всё работало. И да, запускать будем в докере. Поехали настроим это безобразие. Демон докера надеюсь у тебя уже установлен, поэтому заострять внимание на этом не будем. Заходим на первый сервер и мутим мутки: Файл
compose.yaml:
services:
garage:
image: dxflrs/garage:v2.3.0
ports:
- "3900:3900" # S3 API
- "3901:3901" # RPC
- "3902:3902" # Web (optional)
- "3903:3903" # Admin API
volumes:
- ./garage.toml:/etc/garage.toml:ro
- ./meta:/var/lib/garage/meta
- ./data:/var/lib/garage/data
Думаю, вопросов не должно возникнуть. Банальный композник, порты я тебе все подписал. Версию гаража можешь глянуть в интернете, на момент написания статьи последняя v2.3.0. Да буква «v» тут важна и latest тут не канает.
Читать продолжение: https://two.su/3qjfl
🛠 #devops #linux
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 BlogБаза данных — это сердце приложения, но самостоятельное администрирование быстро превращает заботу о нем в рутину: постоянные обновления, бэкапы, мониторинг и работа с нагрузкой. С ростом проекта стандартных настроек уже не хватает, а риск просадок и простоев из-за ошибок в конфигурации становится выше.На вебинаре 28 апреля эксперт Cloud.ru разберет, как передать обслуживание PostgreSQL управляемому сервису в облаке и настроить архитектуру Master/Replica для стабильной работы при высоких нагрузках. В программе:
▶️
сравнение managed- и self-hosted PostgreSQL;
▶️
ключевые метрики базы данных: на что обращать внимание в мониторинге, чтобы не доводить до инцидента;
▶️
настройка автоматического резервного копирования и политики восстановления данных;
▶️
реализация схемы разделения трафика на чтение и запись.На демо покажут, как добавить в сервис поддержку нескольких реплик и разгрузить базу на чтении, и проведут нагрузочное тестирование, чтобы сравнить показатели до и после оптимизации. Зарегистрироваться
awk.
🔤🔤🔤🔤🔤🔤🔤
Не много осталось админов, которые парсят текстовые логи. Вся молодежь и даже пОдростки перешли на JSON. Ну да, это удобно. Но иногда awk быстрее. Особенно на больших файлах и файлах и простых фильтрах.
ㅤ
Но я сегодня не в настроении устраивать холивар.
При использовании логов очень часто возникает проблема — очень большое количество полей. А awk зачастую использует именно номер поля.
Так вот, чтобы немного упростить задачу я написал маленький скрипт, который разбирает строку и нумерует поля. Это здорово экономит время.
Сам скрипт:
#!/bin/awk -f
BEGIN{printf "INPUT field separator "
getline
FS=$0
printf "INPUT test line\n"
getline
printf "\n\n"
for (i=1;i<=NF;i++)print i, $i
}
Как обычно сохраняем fields.awk и делаем исполняемым:
chmod +x fields.awk
./fields.awk
Как это работает:
1. Сначала вводим разделитель.
2. Затем строчку лога и получаем разбивку по полям.
Ввод разделителя нужен, потому что иногда уже внутри кода приходится использовать оператор split и другой разделитель. Да и логи бывают разных форматов.
Рассмотрим такой пример:
<134>1 2026-04-17T16:51:47+03:00 OPNsense.internal filterlog 18074 - [meta sequenceId="2054702"] 111,,,4b75111111111111111111111111cb1d,eno1,match,block,in,4,0x0,,64,27367,0,DF,6,tcp,60,192.168.2.125,192.168.7.14,60248,22,0,S,1539242113,,65535,,mss;sackOK;TS;nop;wscale
В этом случае, если нужно одновременно вытащить и дату и IP с портами, проще в качестве основного разделителя использовать ",", а потом первое поле:
<134>1 2026-04-17T16:51:47+03:00 OPNsense.internal filterlog 18074 - [meta sequenceId="2054702"] 111
Здесь, если мы разбить по пробелам (split($1,f," ")), то f[2] будет содержать дату. Которую в свою очередь можно путем нехитрых манипуляций превратить в unuxtime, для удобства машинной обработки.
Всем кода без багов.
🛠 #bash #linux
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 BlogЯ пользуюсь первым, как-то более интуитивно понятно правила настраиваются, в отличие от второго. Но тут больше вкусовщина, возможно ты оверхед монстр и спокойно стихи на регулярках перед сном читаешь своему ребенку.СТОП! Яж про другое… Пойдем дальше, на этом сайте я увидел рейтинги настройки серверов и вспомнил, когда я 100 лет назад поднимал инстанс с собственным mastodon сервером, я упарывался в безопасность и прям активно соблюдал эти рейтинги. Потом это всё забылось и сегодня решил проверить свой основной блог и мягко говоря прихуел. Мой социальный рейтинг по SSL был на уровне «D» — да вы батенька не девопс-инженер, вы пидор ебаный! Дела, дела! Надо это исправлять. Чё значит этот рейтинг? Сервис Mozilla Observatory смотрит не на код приложения, а на то, насколько правильно настроен твой сервер и заголовки безопасности.
A / A+ = всё настроено пиздато B / C = терпимо, но ты все равно долбаёб D / F = хуйня, переделать, серьёзные дыры, почти нет защитыКстати опять же пентестеры активно применяют это в своей работе, чтобы быстренько проверить безопасность конфигурации и по возможности найти лазейку к твоему шоколадному бекенду с последующим проникновением без вазелина. Если кратко — это линтер безопасности, а рейтинг всего лишь сводная оценка качества настроек и твоих компетенций. Основные категории проверки: 1. HTTP-заголовки безопасности 2. HTTPS и TLS 3. Cookies 4. Защита от известных атак Хули, давай это исправим, мне пришлось добавить такое в свою конфигурацию, чтобы добить рейтинг в более-менее вменяемую зону и получить заветную букву «B». Чтобы получить «A» мне придется немного перекроить работу с javascript, но пока мне лень. Собственно конфиг:
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https:; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; frame-src 'self' https://video.bashdays.ru https://t.me; connect-src 'self' https://api.rss2json.com https://bashdayz.ru;" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
⚪ Это защита от XSS атак и внедрения чужого контента. Я прописал доверенные сайты с которыми работаю. Но узкой дыркой осталось «unsafe-inline», с помощью него я разрешил inline JS, чтобы мои статусы из mastodon корректно передавались. Вот эту штуку и нужно будет допилить, чтобы получить text/plain, браузер мог бы «догадаться» и выполнить. Теперь хуй, ничего не выполнит.
⚪ Контролирует, что отправляется в Referer, хороший баланс приватности и аналитики.
Если подытожить, получаем — грузи ресурсы только отсюда, не доверяй подозрительной хуйне, всегда используй https и не давай сайту быть встроенным куда попало.
На этом собственно и всё, можешь пойти и проверить свои компетенции в настройке.
Поделись в комментах своим социальным рейтингом, хоть позавидуем.
🛠 #security #devops
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blogecho first >first.txt
echo second >second.txt
ln -s first.txt second.txt
# Выведет: ln: cannot create symbolic link from 'first.txt' to 'second.txt': File exists
mount --bind first.txt second.txt
# А так работает.
cat second.txt
#Выведет first.
Наверное можно еще через cgroups замутить, или через eBPF понаделать хуки на системный вызов open, openat, туда же mount overlay...
🛠 #shitcode #bash
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
