Bash Days | Linux | DevOps
24K subscribers
202 photos
26 videos
747 links
Авторский блог от действующего девопса

Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.

Автор: Роман Шубин
Реклама: @maxgrue

MAX: https://max.ru/bashdays

Курс: @tormozilla_bot
Блог: https://bashdays.ru
Download Telegram
Я написал свой текстовый редактор

🔤🔤🔤🔤🔤🔤🔤🔤🔤🔤🔤🔤🔤

Всё началось банально.
Мне нужен был редактор для Markdown-заметок — простой, быстрый, работающий без интернета. Я перебрал штук пять вариантов и ни один не подошёл до конца.

Typora — мой любимый по ощущениям, но он платный. Не дорого, но принципиально: хотел что-то, что можно поставить на любую машину без лицензий и аккаунтов. Notion — мощный, но завязан на облако. Отключи интернет — привет. Obsidian тащит за собой экосистему плагинов, и в итоге тратишь время на настройку, а не на написание. VS Code с расширениями — уже смешно, это как ехать на танке за хлебом.

Я хотел редактор, который просто открывается и работает. Без аккаунта, без подписки, без интернета.


Почему 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
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
392
Настройка ZED. Отключаем лишнее.

В прошлом году мы с тобой активно обсуждали редактор ZED в этом посте. Тогда всплыло много нюансов и неоднозначных проблем связанных с его работой. Но вернувшись к этому IDE спустя несколько месяцев, я был приятно удивлён. 99% багов, которые были, теперь пофикшены.

Редактор стал намного дружелюбнее и гибче, ну а самое главное перестал жрать память как не в себя.

Поэтому я полностью перепрыгнул с neovim на zed и уже несколько месяцев его активно использую в своих непотребствах. Но конечно-же предварительно, превратив в его в дружелюбный инструмент и избавив от лампочек и рюшечек.

Сегодня будем настраивать конфиг и прятать элементы интерфейса, чтобы получить минималистичный молоток. Избавимся от лампочек и кнопочек, но не в ущерб функциональности.

Читать продолжение: https://two.su/2zglw

🛠 #dev

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
25
Массовый SSH‑скан в своей Wi‑Fi сети

🔤🔤🔤🔤🔤🔤🔤

Всем привет.

Недавно, на одном соседнем канале, в комментах, один коллега пожаловался, что у него на маршрутизаторе есть исходящий трафик на порт 22 (ssh). И я решил проверить, а все ли у меня в порядке?

Поставил логирование по интерфейсу wan1 исходящего TCP на порт назначения 22. И я к своему ужасу обнаружил, что из подсети wi-fi прет такой трафик.

Начал расследование. Когда увидел количество - волосы зашевелились не только на голове. Оказалось, что фактически идет сканирование (у одного исходящего ip в течении 1-2 секунд 5 разных ip назначения).

Количество «зараженных» смартфонов ~70% !!!

У меня opnSense. wi-fi и локалка разделены. А всем, у кого дома или на работе бюджетные маршрутизаторы - пионерский привет.

Кстати, на opnSense лог фильтра /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
Please open Telegram to view this post
VIEW IN TELEGRAM
35
Тайна вызова Less в Linux утилитах

Привет ребят. Ща покопаемся в неочевидных вещах, залезем так сказать под капот.

Знаешь же такую команду:

git log


Тут всё просто, она выводит историю коммитов. И что примечательно, в конце будет пагинация (pager). Смотри картинку 1.

А теперь пойдем неочевидной дорожкой и выполним:

sudo mv /usr/bin/less /usr/bin/less.bak 


Ну и снова запустим git log: Смотри картинку 2.

Хуяк и нет больше пагинации. Сразу вывалилась простыня. О чем это говорит? А говорит это о том, что git использует внешнюю утилиту less при выводе истории коммитов, причем делает это по умолчанию.

Но если less накрылся пиздой, git сразу вывалит простыню без пагинации. Забавно! Давай подключим strace и подтвердим этот факт, запускаем:

strace -f -e execve git log


И видим картину маслом: Смотри картинку 3

Ага, запускается less, а теперь снова перемещаем less и смотрим выхлоп strace: Смотри картинку 4

Вот и прекрасно, словили ошибку error: cannot run less: No such file or directory. Но ожидаемый результат все равно получили.

Если выполнить команду echo $PAGER, то увидим, какая утилита будет использоваться для пагинации. По умолчанию less, но раз есть переменная, её можно переопределить. Давай попробуем это сделать.

apt install lolcat
export PAGER="lolcat"
git log


Иииии ебать копать: Смотри картинку 5.

Кстати не только git завязан на переменную $PAGER, такое же поведение ты можешь увидеть у утилит: man, systemctl, journalctl и т.п. Всё что работает с пагинацией, использует переменную $PAGER.

Ну и на закуску:

export PAGER="vim -"
man ls


Команда man ls будет выполнена в vim. То есть получается что любая программа, доверяющая $PAGER, фактически запускает произвольную команду пользователя.

А это уже еще один вектор атаки из арсенала пентестеров, о котором никто не рассказывает. Так что бери на вооружение, глядишь сгодится при прохождении очередного HackBox’а.

🛠 #security #linux

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
237
Selectel работает — вы зарабатываете до 20% от чека клиентов

Становитесь партнером ведущего независимого провайдера ИТ-инфраструктуры, рекомендуйте качественный сервис и получайте пассивный доход от реферальной программы. Партнером может стать как юридическое, так и физическое лицо.

При регистрации в программе до 31 мая вы получите повышенную ставку 20% на 3 месяца. А после этого срока — от 10 до 15% от чека с ежемесячными выплаты без лимитов по сумме и сроку.

Ваши рефералы будут довольны. В Selectel 50+ инфраструктурных продуктов, большой выбор комплектующих для серверов и бесплатная техподдержка.

Регистрируйтесь в партнерской программе Selectel до 31 мая и получайте 20% от чека ваших рефералов первые 3 месяца: https://slc.tl/3cp0s

Реклама. АО "Селектел". erid:2W5zFJbjLJm
6
Less и секретный режим мониторинга

Очередные консольные приколы о которых ты не знаешь. Есть такая красота:

tail -f /var/log/nginx/access.log


Эта команда будет в реальном времени выводить строчки из файла по мере их добавления. То есть ты можешь наблюдать за лог файлами как с авто-суфлёра.

НО есть аналог:

less +F /var/log/nginx/access.log


А если кто не знал, то в less можно пользоваться клавишами vim. Например, навигация hjkl.

Сразу видно, что утилиты затачивали под одну экосистему и unixway. Ну а теперь вкуснятина.

После выполнения команды less +F нажимаем CTRL+C и теперь можно передвигаться по выводу как раз теме же клавишами hjkl, что-то поискать /127.0.0.1, g/G, n/N.

На минуточку, в tail ты так быстро ничего не поищешь. Надо тормозить процесс, выгружать в файл, грепать-хуепать.


Ну а чтобы вернуться в режим наблюдения, нажимаем SHIFT+F и less возвращает режим мониторинга, строчки с логами продолжают бежать в реальном времени.

Так что less это не просто про пагинацию, а немного больше.

🛠 #bash #linux

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
80
Docker кеш без боли

Давай поговорим про docker и кеширование, тема вроде поверхностная, но как оказалось многие в ней плавают и особо не понимают почему их сборка каждый раз занимает 100500 минут.

А занимает она столько минут, по одной причине — копировать исходники нужно в последнем слое. Механизм тут простой, если какой-то слой изменился, то следующие слои будут пересобраны. Логично, что если ты копируешь исходники так:

FROM node:22
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
CMD ["node", "dist/index.js"]


Тебе пезда! Всё будет пересобираться каждый раз с нуля, никаким кешированием тут и не пахнет. Так делают многие, ведь оно работает и пофигу что долго.

В примере выше, команда COPY копирует весь проект. Представь, что ты изменил одну букву в конфиге и приехали. Кеш инвалидировался, сборка пошла по новой и RUN npm install доставит много удовольствия.

Ключевой момент тут исходники, которые меняются.

Получаем:

- заново устанавливает npm зависимости
- заново качает пакеты
- заново rebuild native modules
- тратит минуты в CI

Хотя зависимости вообще не менялись. Мрак! Фиксим:

FROM node:22

WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
CMD ["node", "dist/index.js"]


Теперь если что-то изменить в коде проекта, пересобирается только:

COPY . .  
RUN npm run build


А RUN npm ci возьмется из кеша. Аналогично и в питончике и гошке:

COPY . .  
RUN pip install -r requirements.txt

COPY . .
RUN go mod download


Бест-практика простая: От самого стабильного → к самому изменяемому.

- base image
- системные пакеты
- lock-файлы зависимостей
- install dependencies
- исходники
- build
- startup

Короче думай паттерном, а не жопой — «Какие файлы меняются редко?» и выносить их максимально вверх Dockerfile.

Каждый RUN, COPY, ADD это новый слой. Docker пытается переиспользовать уже существующие слои из кеша. Если инструкция и все предыдущие слои не изменились — слой не пересобирается. Docker сбрасывает кеш начиная с измененного слоя.

Вот и вся наука.

🛠 #devops #docker

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
59
Техника тоже может сидеть на Правильном Питании (ПэПэ)
 
Каждый же слышал о ПэПэ? Только вот сегодня речь не о еде в привычном ее понимании, а о бесперебойниках ПП-ИБП от Systeme Electric. Если быть точнее, разговор о Правильном Питании (ПэПэ) для вашего железа. С этим оборудованием вопрос «что будет с техникой, если с электричеством беда?» в принципе не возникает. С ПП-ИБП от Systeme Electric с онлайн-топологией все точно продолжит работать без сбоев, как ни в чем не бывало.
 
Systeme Electric — это бывшее российское подразделение Schneider, производителя легендарных бесперебойников APC: «Шнайдер» из России ушел, а прозводство, технологии и лучшая команда инженеров — остались, просто работают под новым локальным брендом. Так что Systeme Electric точно знают толк в надежной защите оборудования.
 
Вот что реально впечатляет в ПП-ИБП от Systeme Electric с онлайн-топологией:
 
ü  Тотальный онлайн-ЗОЖ — онлайн Защита от Отключений Железа.
ü  Повышенная БЖУ — Бесперебойность Жизненно-важных Устройств. Тянут нагрузку в 150% от номинальной.
ü  Настоящий суперфуд для оборудования — высочайший КПД 95%.
ü  Самое полное ПП-меню — поддерживают все возможные интерфейсы и протоколы (EPO, SNMP, RS-485, RS-232, USB, RJ45/RJ11, EMBS).
 
Альтернатива ПП-ИБП сейчас — только китайский электро-фастфуд. Но это для тех, кто свое оборудование совсем не любит. Через год-другой аккумы в таких дешманских ибп-шках вздуются, как живот после углеводов.
 
А вот у Systeme Electric официальная гарантия аж 3 года — абсолютный рекорд! Такой ни у кого нет. У «китайцев» максимум год, и даже у оригинальных шнайдеровских APC было только 2 года (а сейчас на серозавезенные и вовсе никакой нет).
 
Кстати, техподдержка работает круглосуточно: днем — телефон, мессенджеры и чаты отвечают 24/7. Так что долой голод, после 6 — можно!
 
Ну и конечно, чтобы железо не «болело», стоит начать заботиться о его Правильном Питании заранее. На здоровье оборудования не экономят!
 
За подробностями — сюда.
 
Вот такие пп-шные пироги.

Реклама. АО "СЭ" ИНН 7712092928 Erid: 2W5zFFubkxq
9