<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>llexa</title><link>https://llexa.ru/</link><description>Recent content on llexa</description><generator>Hugo</generator><language>ru</language><lastBuildDate>Wed, 03 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://llexa.ru/index.xml" rel="self" type="application/rss+xml"/><item><title>logrotate: ротация логов nginx и приложений</title><link>https://llexa.ru/posts/logrotate-config/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/logrotate-config/</guid><description>logrotate с rotate, compress, postrotate. Настройка ротации для nginx и собственного приложения.</description></item><item><title>lsof: кто держит файл и какие порты открыты</title><link>https://llexa.ru/posts/lsof-basics/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/lsof-basics/</guid><description>lsof для диагностики: открытые файлы, порты, процессы. lsof -i, lsof +D и фильтры.</description></item><item><title>rsync: инкрементальный бэкап</title><link>https://llexa.ru/posts/rsync-backup/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/rsync-backup/</guid><description>rsync с --progress, --dry-run, --exclude и скрипт инкрементального бэкапа директории.</description></item><item><title>find: продвинутые фильтры</title><link>https://llexa.ru/posts/find-advanced/</link><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/find-advanced/</guid><description>find с -mtime, -size, -exec, -print0 | xargs и -not. Примеры для реальных задач.</description></item><item><title>systemd-analyze: сколько грузится система</title><link>https://llexa.ru/posts/systemd-analyze/</link><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/systemd-analyze/</guid><description>Смотрим время загрузки Linux: blame, critical-chain и SVG-диаграмма.</description></item><item><title>tmux: сессии, сплиты, автозапуск</title><link>https://llexa.ru/posts/tmux-basics/</link><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/tmux-basics/</guid><description>tmux — мультиплексор терминала. Сессии, сплиты и скрипт автозапуска рабочего окружения.</description></item><item><title>Proxmox: снапшоты VM через qm snapshot</title><link>https://llexa.ru/posts/proxmox-qm-snapshot/</link><pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/proxmox-qm-snapshot/</guid><description>Создание и откат снапшотов виртуальных машин через CLI Proxmox — без веб-интерфейса</description></item><item><title>Vim с нуля #2: vim-plug и цветовая схема</title><link>https://llexa.ru/posts/vim-plug-colorscheme/</link><pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/vim-plug-colorscheme/</guid><description>Устанавливаем vim-plug и подключаем gruvbox — первый плагин в ~/.vimrc</description></item><item><title>Архиваторы #2: zstd и параллельное сжатие</title><link>https://llexa.ru/posts/archivers-zstd/</link><pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/archivers-zstd/</guid><description>zstd — быстрое многопоточное сжатие. Однострочники для tar, сравнение с gz и xz.</description></item><item><title>5 стадий принятия cron</title><link>https://llexa.ru/posts/5-stadii-cron/</link><pubDate>Sun, 31 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/5-stadii-cron/</guid><description>&lt;p&gt;&lt;strong&gt;Отрицание:&lt;/strong&gt; &lt;code&gt;* * * * * ./script.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Гнев:&lt;/strong&gt; скрипт не запускается, логов нет, cron молчит&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Торг:&lt;/strong&gt; &lt;code&gt;*/5 * * * * /usr/bin/env bash /absolute/path/script.sh &amp;gt;&amp;gt; /tmp/cron.log 2&amp;gt;&amp;amp;1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Депрессия:&lt;/strong&gt; &lt;code&gt;journalctl -u cron --since &amp;quot;1 hour ago&amp;quot; | grep -i fail&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Принятие:&lt;/strong&gt; переписываешь на &lt;code&gt;systemd.timer&lt;/code&gt;, и он работает с первого раза&lt;/p&gt;
&lt;p&gt;#linux #bash #cron #юмор #sysadmin&lt;/p&gt;</description></item><item><title>AGENTS.md и CLAUDE.md: как готовить?</title><link>https://llexa.ru/posts/agents-md-claude-md/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/agents-md-claude-md/</guid><description>&lt;p&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; — это текст, который дописывается к каждому вашему промпту при старте сессии. Отсюда главное правило: кладите туда только то, что полезно агенту &lt;strong&gt;при каждой&lt;/strong&gt; операции. Структура проекта, инструкции по запуску тестов, конвенции именования — лишнее: агент сам найдёт &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;pom.xml&lt;/code&gt; или &lt;code&gt;Makefile&lt;/code&gt;. Добавляйте только то, что он с большой вероятностью не найдёт сам.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt; идёт дальше: поддерживает &lt;code&gt;@&lt;/code&gt;-импорты других файлов (ленивая подгрузка), читает и &lt;code&gt;CLAUDE.md&lt;/code&gt;, и &lt;code&gt;CLAUDE.local.md&lt;/code&gt; одновременно, а &lt;code&gt;.claude/rules/&lt;/code&gt; позволяет грузить инструкции по маске файла — например, отдельные правила только для &lt;code&gt;*.sql&lt;/code&gt; или только для определённой директории. Это держит корневой &lt;code&gt;CLAUDE.md&lt;/code&gt; коротким. &lt;code&gt;GEMINI.md&lt;/code&gt; импорты поддерживает, но &lt;code&gt;local&lt;/code&gt;/&lt;code&gt;override&lt;/code&gt; — нет.&lt;/p&gt;</description></item><item><title>Bash: что раздуло /var/log</title><link>https://llexa.ru/posts/bash-oneliners-2/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/bash-oneliners-2/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;du -sh /var/log/* 2&amp;gt;/dev/null | sort -rh | head -10
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Показывает топ-10 крупнейших файлов и папок в &lt;code&gt;/var/log&lt;/code&gt;. Быстро находит виновника, когда диск кончился в три часа ночи.&lt;/p&gt;
&lt;p&gt;#bash #oneliner #linux&lt;/p&gt;</description></item><item><title>Закон Мёрфи: оригинал</title><link>https://llexa.ru/posts/murphy-zakon-original/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/murphy-zakon-original/</guid><description>&lt;p&gt;«Если что-то может пойти не так — оно пойдёт не так.»&lt;/p&gt;
&lt;p&gt;Эдвард А. Мёрфи-младший, 1949. Авиационный инженер произнёс это после того, как техник неправильно подключил все датчики на испытательном стенде — одновременно и симметрично. Следствие О&amp;rsquo;Тула появилось позже, как ответ на избыточный оптимизм автора.&lt;/p&gt;
&lt;p&gt;#murphy #цитата #sysadmin&lt;/p&gt;</description></item><item><title>Манэки-нэко</title><link>https://llexa.ru/posts/maneki-neko/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/maneki-neko/</guid><description>&lt;p&gt;Белый фарфоровый кот с поднятой лапой. Стоит на кассе, у входа в офис, на серверном столе рядом с клавиатурой.&lt;/p&gt;
&lt;p&gt;Левая лапа — зовёт клиентов. Правая — приносит деньги и удачу. Монета в руке — богатство. Красный воротник с колокольчиком — защита от злых духов. Машет и не устаёт.&lt;/p&gt;
&lt;p&gt;Официальный талисман каждого sysadmin&amp;rsquo;а, у которого раз в год что-нибудь уходит в даунтайм без видимой причины.&lt;/p&gt;
&lt;p&gt;#культура #япония #мем&lt;/p&gt;</description></item><item><title>Bash trap: очистка при завершении скрипта</title><link>https://llexa.ru/posts/bash-trap/</link><pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/bash-trap/</guid><description>trap в bash — перехват сигналов EXIT, INT, TERM и гарантированная очистка</description></item><item><title>Linux namespaces: изоляция без виртуализации</title><link>https://llexa.ru/posts/linux-namespaces/</link><pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/linux-namespaces/</guid><description>8 типов namespaces ядра Linux — основа контейнерной изоляции</description></item><item><title>nginx: приоритеты блоков location</title><link>https://llexa.ru/posts/nginx-location-priority/</link><pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/nginx-location-priority/</guid><description>Как nginx выбирает location — порядок приоритетов и частые ошибки</description></item><item><title>Vim с нуля #1: базовый .vimrc</title><link>https://llexa.ru/posts/vim-vimrc/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/vim-vimrc/</guid><description>12 строк, которые превращают голый vim в удобный редактор</description></item><item><title>Архиваторы #1: однострочники</title><link>https://llexa.ru/posts/archivers-oneliners/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/archivers-oneliners/</guid><description>tar, zip — четыре команды которые решают 90% задач с архивами</description></item><item><title>Будь добрее #1: Маяковский</title><link>https://llexa.ru/posts/mayakovsky-loshad/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/mayakovsky-loshad/</guid><description>Хорошее отношение к лошадям, 1918</description></item><item><title>bind mount: директория внутри директории</title><link>https://llexa.ru/posts/bind-mount/</link><pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/bind-mount/</guid><description>Монтируем существующую директорию в другое место — без копирования, без симлинков</description></item><item><title>PromQL: полезные запросы для node_exporter</title><link>https://llexa.ru/posts/promql-node-exporter/</link><pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/promql-node-exporter/</guid><description>Готовые запросы для мониторинга CPU, памяти, диска и сети через Prometheus + node_exporter</description></item><item><title>ИИ: как добиться чёткого следования инструкции</title><link>https://llexa.ru/posts/ai-instruktsii/</link><pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/ai-instruktsii/</guid><description>Три приёма, которые заставляют LLM точно выполнять задачу — без отсебятины и отступлений</description></item><item><title>git для прикладных задач на сервере</title><link>https://llexa.ru/posts/git-dlia-prikladnykh-zadach-na-servere/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/git-dlia-prikladnykh-zadach-na-servere/</guid><description>&lt;p&gt;Git полезен без GitHub — как минимальный аудит-лог изменений в конфигах.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# начать отслеживать конфиги nginx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git -C /etc init &lt;span style="color:#ff7b72;font-weight:bold"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git -C /etc add nginx/ &lt;span style="color:#ff7b72;font-weight:bold"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git -C /etc commit -m &lt;span style="color:#a5d6ff"&gt;&amp;#34;initial&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# найти, когда и кто менял конкретную строку&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git -C /etc log -p -S &lt;span style="color:#a5d6ff"&gt;&amp;#34;server_name&amp;#34;&lt;/span&gt; nginx/nginx.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# откатить один файл к предыдущей версии&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git -C /etc checkout HEAD~1 -- nginx/sites-enabled/default
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# бинарный поиск коммита, сломавшего конфиг&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git bisect start &lt;span style="color:#ff7b72;font-weight:bold"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git bisect bad &lt;span style="color:#ff7b72;font-weight:bold"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git bisect good &amp;lt;хороший-хэш&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Хранить &lt;code&gt;/etc&lt;/code&gt; в git — проще, чем &lt;code&gt;etckeeper&lt;/code&gt;, и не требует дополнительного ПО.&lt;/p&gt;</description></item><item><title>Анализ логов: journalctl + awk</title><link>https://llexa.ru/posts/analiz-logov-journalctl-awk/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/analiz-logov-journalctl-awk/</guid><description>&lt;p&gt;Две команды для ежедневной работы с логами на Linux-сервере.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# ошибки всех сервисов за последний час&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;journalctl -p err -S &lt;span style="color:#a5d6ff"&gt;&amp;#34;1 hour ago&amp;#34;&lt;/span&gt; --no-pager
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# топ-10 IP в nginx access.log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;awk &lt;span style="color:#a5d6ff"&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt; /var/log/nginx/access.log | sort | uniq -c | sort -rn | head
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;journalctl -f -u &amp;lt;unit&amp;gt;&lt;/code&gt; — live-режим для конкретного сервиса. Флаг &lt;code&gt;-p&lt;/code&gt; принимает приоритеты по RFC 5424: &lt;code&gt;emerg&lt;/code&gt;, &lt;code&gt;alert&lt;/code&gt;, &lt;code&gt;crit&lt;/code&gt;, &lt;code&gt;err&lt;/code&gt;, &lt;code&gt;warning&lt;/code&gt;, &lt;code&gt;notice&lt;/code&gt;, &lt;code&gt;info&lt;/code&gt;, &lt;code&gt;debug&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;#linux #logs #journalctl #bash #sysadmin&lt;/p&gt;</description></item><item><title>Уведомление в Telegram из bash-скрипта</title><link>https://llexa.ru/posts/uvedomlenie-v-telegram-iz-bash-skripta/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/uvedomlenie-v-telegram-iz-bash-skripta/</guid><description>&lt;p&gt;Самый простой способ — Telegram Bot API через &lt;code&gt;curl&lt;/code&gt;. Создать бота: @BotFather → &lt;code&gt;/newbot&lt;/code&gt; → получить токен. Узнать &lt;code&gt;chat_id&lt;/code&gt;: написать боту, затем &lt;code&gt;curl https://api.telegram.org/bot&amp;lt;TOKEN&amp;gt;/getUpdates&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#79c0ff"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;123456:ABC...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#79c0ff"&gt;CHAT_ID&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;987654321&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;send_tg&lt;span style="color:#ff7b72;font-weight:bold"&gt;()&lt;/span&gt; &lt;span style="color:#ff7b72;font-weight:bold"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; curl -s -X POST &lt;span style="color:#a5d6ff"&gt;&amp;#34;https://api.telegram.org/bot&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;${&lt;/span&gt;&lt;span style="color:#79c0ff"&gt;TOKEN&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;}&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;/sendMessage&amp;#34;&lt;/span&gt; &lt;span style="color:#79c0ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -d &lt;span style="color:#79c0ff"&gt;chat_id&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;${&lt;/span&gt;&lt;span style="color:#79c0ff"&gt;CHAT_ID&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;}&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#79c0ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -d &lt;span style="color:#79c0ff"&gt;text&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#79c0ff"&gt;$1&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;&lt;/span&gt; &amp;gt; /dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;send_tg &lt;span style="color:#a5d6ff"&gt;&amp;#34;Бэкап завершён: &lt;/span&gt;&lt;span style="color:#ff7b72"&gt;$(&lt;/span&gt;date&lt;span style="color:#ff7b72"&gt;)&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Добавить &lt;code&gt;send_tg&lt;/code&gt; в конец cron-скрипта — результаты будут приходить в Telegram без почты и syslog.&lt;/p&gt;
&lt;p&gt;#bash #telegram #curl #automation #linux&lt;/p&gt;</description></item><item><title>AI-промты для генерации bash-однострочников</title><link>https://llexa.ru/posts/ai-promty-dlia-generatsii-bash-odnostrochnikov/</link><pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/ai-promty-dlia-generatsii-bash-odnostrochnikov/</guid><description>&lt;p&gt;Чтобы LLM генерировал точные shell-команды, в промте нужны три элемента: &lt;strong&gt;задача&lt;/strong&gt; («найти файлы старше 30 дней»), &lt;strong&gt;окружение&lt;/strong&gt; («Linux, bash 5.x, без sudo») и &lt;strong&gt;ограничения&lt;/strong&gt; («вывод только путей, без лишнего текста»). Добавление &lt;code&gt;explain each flag&lt;/code&gt; или &lt;code&gt;add inline comments&lt;/code&gt; заставляет модель раскрыть логику команды. Для потенциально опасных операций помогает формулировка &lt;code&gt;show dry-run first, then destructive version&lt;/code&gt; — LLM выведет безопасный preview перед реальной командой. Модели хорошо справляются с &lt;code&gt;find&lt;/code&gt;, &lt;code&gt;awk&lt;/code&gt;, &lt;code&gt;sed&lt;/code&gt; и &lt;code&gt;xargs&lt;/code&gt;; для сложных цепочек с &lt;code&gt;jq&lt;/code&gt; или &lt;code&gt;parallel&lt;/code&gt; лучше уточнять версию инструмента.&lt;/p&gt;</description></item><item><title>Proxmox: быстрый обзор всех VM и CT из консоли</title><link>https://llexa.ru/posts/proxmox-bystryi-obzor-vsekh-vm-i-ct-iz-konsoli/</link><pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/proxmox-bystryi-obzor-vsekh-vm-i-ct-iz-konsoli/</guid><description>&lt;p&gt;Одна строка — статус всех виртуальных машин и контейнеров по всему кластеру:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pvesh get /cluster/resources --type vm --output-format json &lt;span style="color:#79c0ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; | jq -r &lt;span style="color:#a5d6ff"&gt;&amp;#39;.[] | [.node, .type, (.vmid|tostring), .name, .status] | @tsv&amp;#39;&lt;/span&gt; &lt;span style="color:#79c0ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; | column -t
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;pvesh&lt;/code&gt; — CLI-интерфейс к Proxmox REST API, доступен прямо на хосте без дополнительных пакетов. Параметр &lt;code&gt;--type&lt;/code&gt; принимает &lt;code&gt;vm&lt;/code&gt;, &lt;code&gt;lxc&lt;/code&gt;, &lt;code&gt;storage&lt;/code&gt;, &lt;code&gt;node&lt;/code&gt;. Для вывода конкретной ноды: &lt;code&gt;pvesh get /nodes/&amp;lt;node&amp;gt;/qemu&lt;/code&gt;. Документация: &lt;a href="https://pve.proxmox.com/wiki/Proxmox_VE_API"&gt;pve.proxmox.com/wiki/Proxmox_VE_API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;#proxmox #cli #pvesh #homelab #sysadmin&lt;/p&gt;</description></item><item><title>Современные замены GNU-утилитам</title><link>https://llexa.ru/posts/sovremennye-zameny-gnu-utilitam/</link><pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/sovremennye-zameny-gnu-utilitam/</guid><description>&lt;p&gt;Сообщество переписывает классический unix-стек на Rust и Go. Наиболее используемые замены:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Стандарт&lt;/th&gt;
&lt;th&gt;Замена&lt;/th&gt;
&lt;th&gt;Что добавляет&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cat&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sharkdp/bat"&gt;&lt;code&gt;bat&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;подсветка синтаксиса, интеграция с git&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ls&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/eza-community/eza"&gt;&lt;code&gt;eza&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;иконки, git-статус, дерево&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;find&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sharkdp/fd"&gt;&lt;code&gt;fd&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;проще синтаксис, учитывает &lt;code&gt;.gitignore&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;grep&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/BurntSushi/ripgrep"&gt;&lt;code&gt;ripgrep&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;в 10–50× быстрее на больших деревьях&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;df&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/muesli/duf"&gt;&lt;code&gt;duf&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;цветной вывод по типам устройств&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;du&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/bootandy/dust"&gt;&lt;code&gt;dust&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;визуальное дерево занятого места&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/ajeetdsouza/zoxide"&gt;&lt;code&gt;zoxide&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;z имя&lt;/code&gt; вместо полного пути&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;top&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/ClementTsang/bottom"&gt;&lt;code&gt;bottom&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;графики CPU/RAM/сети/дисков&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Устанавливаются через пакетный менеджер дистрибутива или &lt;code&gt;cargo install&lt;/code&gt;. Полный список: &lt;a href="https://github.com/ibraheemdev/modern-unix"&gt;github.com/ibraheemdev/modern-unix&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Глоссарий разработчика, май 2026</title><link>https://llexa.ru/posts/glossarii-razrabotchika-mai-2026/</link><pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/glossarii-razrabotchika-mai-2026/</guid><description>&lt;p&gt;&lt;strong&gt;Архитектор&lt;/strong&gt; — объясняет AI, что именно надо сделать&lt;br&gt;
&lt;strong&gt;Senior&lt;/strong&gt; — чинит то, что сделал AI&lt;br&gt;
&lt;strong&gt;Middle&lt;/strong&gt; — просит AI починить то, что сделал AI&lt;br&gt;
&lt;strong&gt;Junior&lt;/strong&gt; — принёс кофе, пока AI дописывал его задачу&lt;br&gt;
&lt;strong&gt;QA&lt;/strong&gt; — тестирует руками, потому что тесты тоже написал AI&lt;/p&gt;
&lt;p&gt;#ai #юмор #разработка #мем&lt;/p&gt;</description></item><item><title>Bash: топ-10 команд из истории</title><link>https://llexa.ru/posts/bash-top-10-komand-iz-istorii/</link><pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/bash-top-10-komand-iz-istorii/</guid><description>&lt;h1 id="bash-топ-10-команд-из-истории"&gt;Bash: топ-10 команд из истории&lt;/h1&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;history | awk &lt;span style="color:#a5d6ff"&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt; | sort | uniq -c | sort -rn | head -10
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Показывает, какие команды вы запускаете чаще всего. Полезно перед тем, как делать алиасы.&lt;/p&gt;
&lt;p&gt;#bash #oneliner #linux&lt;/p&gt;</description></item><item><title>Значки с логотипами Linux-дистрибутивов: где искать</title><link>https://llexa.ru/posts/znachki-s-logotipami-linux-distributivov-gde-iskat/</link><pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/znachki-s-logotipami-linux-distributivov-gde-iskat/</guid><description>&lt;h1 id="значки-с-логотипами-linux-дистрибутивов-где-искать"&gt;Значки с логотипами Linux-дистрибутивов: где искать&lt;/h1&gt;
&lt;p&gt;Официальные магазины: &lt;a href="https://shop.fsf.org/gear/gnu-head-button"&gt;GNU Head Button&lt;/a&gt; на FSF Shop, &lt;a href="https://gear.ubuntu.com"&gt;Ubuntu Gear&lt;/a&gt; от Canonical. Самый богатый специализированный выбор — &lt;a href="https://www.case-badges.com/linux-distros-c-68_75.html"&gt;case-badges.com&lt;/a&gt;: 3D-значки для корпусов с логотипами Debian, Mint, Gentoo, Kali и десятков других дистрибутивов.&lt;/p&gt;
&lt;p&gt;Для эмалевых значков ручной работы — &lt;a href="https://www.etsy.com/market/linux_lapel_pin"&gt;Etsy&lt;/a&gt; (например, &lt;a href="https://www.etsy.com/listing/857736215/tux-the-linux-penguin-enamel-pin-cute"&gt;Tux hard enamel pin&lt;/a&gt;) и &lt;a href="https://www.redbubble.com/shop/linux+pin-buttons"&gt;Redbubble&lt;/a&gt;. Бюджетно — &lt;a href="https://www.aliexpress.com/w/wholesale-linux-tux.html"&gt;AliExpress&lt;/a&gt;. Для редких официальных значков с конференций Red Hat, SUSE, Debian прошлых лет — &lt;a href="https://www.ebay.com/b/Linux-Sticker/175677/bn_7023340367"&gt;eBay&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;#linux #merch #значки #opensource&lt;/p&gt;</description></item><item><title>Следствие О'Тула к Закону Мёрфи</title><link>https://llexa.ru/posts/sledstvie-otula-k-zakonu-miorfi/</link><pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/sledstvie-otula-k-zakonu-miorfi/</guid><description>&lt;p&gt;«Мёрфи был оптимистом.»&lt;/p&gt;
&lt;p&gt;Из сборника Артура Блоха «Murphy&amp;rsquo;s Law and Other Reasons Why Things Go Wrong» (1977). Произносится каждый раз, когда базовый закон кажется недостаточно пессимистичным.&lt;/p&gt;
&lt;p&gt;#murphy #цитата #sysadmin&lt;/p&gt;</description></item><item><title>Bash 5.3: новая подстановка команд и GLOBSORT</title><link>https://llexa.ru/posts/bash-5-3-novaia-podstanovka-komand-i-globsort/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/bash-5-3-novaia-podstanovka-komand-i-globsort/</guid><description>&lt;p&gt;GNU Bash 5.3 вышел в июле 2025 года — спустя три года после релиза 5.2. На май 2026 большинство дистрибутивов поставляют Bash 5.2 по умолчанию; 5.3 доступен через пакетный менеджер.&lt;/p&gt;
&lt;p&gt;Ключевые изменения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Новая форма подстановки команд&lt;/strong&gt; &lt;code&gt;${ cmd; }&lt;/code&gt; и &lt;code&gt;${|cmd;}&lt;/code&gt; — команда выполняется в контексте текущего shell без fork/pipe, результат доступен через переменную &lt;code&gt;REPLY&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GLOBSORT&lt;/strong&gt; — новая переменная для управления сортировкой результатов pathname expansion (по имени, размеру, времени изменения).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Улучшения встроенных команд&lt;/strong&gt;: &lt;code&gt;compgen&lt;/code&gt; пишет результат в переменную; &lt;code&gt;read&lt;/code&gt; получил флаг &lt;code&gt;-E&lt;/code&gt; для readline с bash completion; &lt;code&gt;source&lt;/code&gt; — флаг &lt;code&gt;-p PATH&lt;/code&gt; для поиска по указанному пути.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Соответствие C23&lt;/strong&gt;: Bash 5.3 больше не компилируется K&amp;amp;R-совместимыми компиляторами.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Readline 8.3&lt;/strong&gt;: поддержка case-insensitive поиска, экспорт completions во внешний процесс.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Источники: &lt;a href="https://lwn.net/Articles/1029079/"&gt;LWN.net&lt;/a&gt; · &lt;a href="https://www.phoronix.com/news/GNU-Bash-5.3"&gt;Phoronix&lt;/a&gt; · &lt;a href="https://linuxiac.com/bash-shell-5-3-released-with-new-command-substitution/"&gt;linuxiac.com&lt;/a&gt;&lt;/p&gt;</description></item><item><title>CVE-2026-42945: критическая уязвимость в модуле rewrite nginx</title><link>https://llexa.ru/posts/cve-2026-42945-kriticheskaia-uiazvimost-v-module-rewrite-nginx/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/cve-2026-42945-kriticheskaia-uiazvimost-v-module-rewrite-nginx/</guid><description>&lt;p&gt;Heap buffer overflow в &lt;code&gt;ngx_http_rewrite_module&lt;/code&gt; затрагивает nginx версий 0.6.27–1.30.0. Уязвимость присутствовала в коде с 2008 года. CVSS: 9.2.&lt;/p&gt;
&lt;p&gt;Эксплуатация производится отправкой специально сформированного HTTP-запроса без аутентификации. Результат — падение воркер-процесса (DoS) с возможностью удалённого выполнения кода (RCE). Первые попытки активной эксплуатации зафиксированы 16 мая 2026 — через три дня после публикации PoC.&lt;/p&gt;
&lt;p&gt;Исправление доступно в nginx Open Source 1.30.1 / 1.31.0 и nginx Plus R36 P4 / R32 P6. Обновление обязательно для всех затронутых инсталляций.&lt;/p&gt;</description></item><item><title>Linux 7.0: выход первого мажорного релиза ядра за много лет</title><link>https://llexa.ru/posts/linux-7-0-vykhod-pervogo-mazhornogo-reliza-iadra-za-mnogo-let/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/linux-7-0-vykhod-pervogo-mazhornogo-reliza-iadra-za-mnogo-let/</guid><description>&lt;p&gt;12 апреля 2026 года Линус Торвальдс выпустил Linux 7.0 — первый мажорный релиз ядра после многолетней серии 6.x. Решение о смене мажорной версии было объявлено 8 февраля 2026 одновременно с выходом Linux 6.19, ставшего последним в ветке 6.x.&lt;/p&gt;
&lt;p&gt;Актуальный стабильный патч-релиз на май 2026 — 7.0.6. Ветка 6.18 получила статус LTS со сроком поддержки до 31 декабря 2028. Цикл выпуска мейнлайн-ядра не изменился: окно слияния 2 недели, стабилизация 7 недель, итого 9–10 недель между релизами.&lt;/p&gt;</description></item><item><title>cp с версионностью — резервные копии без скриптов</title><link>https://llexa.ru/posts/cp-s-versionnost-iu-rezervnye-kopii-bez-skriptov/</link><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/cp-s-versionnost-iu-rezervnye-kopii-bez-skriptov/</guid><description>&lt;p&gt;&lt;span style="font-size:3.5em;line-height:0.8;float:left;padding-right:6px;font-weight:bold;font-family:serif"&gt;П&lt;/span&gt;равишь конфиг nginx или postgresql.conf и думаешь: «сейчас сломаю, а откатиться нечем». Можно завести git,&lt;br&gt;
можно написать скрипт — а можно добавить один флаг к обычному &lt;code&gt;cp&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Флаг &lt;code&gt;--backup=numbered&lt;/code&gt; создаёт пронумерованные резервные копии перед каждой перезаписью:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cp --backup&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;numbered nginx.conf /etc/nginx/nginx.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После второго, третьего вызова рядом появятся nginx.conf.&lt;del&gt;1&lt;/del&gt;, nginx.conf.&lt;del&gt;2&lt;/del&gt; — тихая история правок без лишней инфраструктуры. Суффикс меняется флагом &amp;ndash;suffix:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cp --backup&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;numbered --suffix&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;.bak nginx.conf /etc/nginx/nginx.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8b949e;font-style:italic"&gt;# → nginx.conf.bak.~1~&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Удобно для одиночных конфигов, которые не стоит тащить в репозиторий.&lt;/p&gt;</description></item><item><title>Обновление системы debian</title><link>https://llexa.ru/posts/obnovlenie-sistemy-debian/</link><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/obnovlenie-sistemy-debian/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#алиас обновления системы&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;alias &lt;span style="color:#79c0ff"&gt;up&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#39;LOGFILE=&amp;#34;$HOME/update.log&amp;#34;; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;echo &amp;#34;===== System update started: $(date) =====&amp;#34; | tee -a &amp;#34;$LOGFILE&amp;#34;; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;sudo apt update 2&amp;gt;&amp;amp;1 | tee -a &amp;#34;$LOGFILE&amp;#34;; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;sudo apt full-upgrade -y 2&amp;gt;&amp;amp;1 | tee -a &amp;#34;$LOGFILE&amp;#34;; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;sudo apt autoremove -y 2&amp;gt;&amp;amp;1 | tee -a &amp;#34;$LOGFILE&amp;#34;; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;sudo apt autoclean 2&amp;gt;&amp;amp;1 | tee -a &amp;#34;$LOGFILE&amp;#34;; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;flatpak update -y --noninteractive 2&amp;gt;&amp;amp;1 | tee -a &amp;#34;$LOGFILE&amp;#34;; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;sudo apt clean 2&amp;gt;&amp;amp;1 | tee -a &amp;#34;$LOGFILE&amp;#34;; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a5d6ff"&gt;echo &amp;#34;===== System update finished: $(date) =====&amp;#34; | tee -a &amp;#34;$LOGFILE&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;#apt #debian #update&lt;/p&gt;</description></item><item><title>Проверка json на ошибки</title><link>https://llexa.ru/posts/proverka-json-na-oshibki/</link><pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/proverka-json-na-oshibki/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#проверка файла на ошибки&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#выводит ошибки по одной за один раз&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;jq . filename.json
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#проверка в скрипте bash&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;if&lt;/span&gt; jq -e . &amp;gt;/dev/null 2&amp;gt;&amp;amp;&lt;span style="color:#a5d6ff"&gt;1&lt;/span&gt; &lt;span style="color:#ff7b72;font-weight:bold"&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#a5d6ff"&gt;&amp;#39;{&amp;#34;key&amp;#34;: &amp;#34;value&amp;#34;}&amp;#39;&lt;/span&gt;; &lt;span style="color:#ff7b72"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo &lt;span style="color:#a5d6ff"&gt;&amp;#34;JSON валиден&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo &lt;span style="color:#a5d6ff"&gt;&amp;#34;Ошибка в JSON&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#проверка существания ключа&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;jq &lt;span style="color:#a5d6ff"&gt;&amp;#39;has(&amp;#34;username&amp;#34;)&amp;#39;&lt;/span&gt; user.json
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#проверка что массив не пуст&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;jq &lt;span style="color:#a5d6ff"&gt;&amp;#39;.items | length &amp;gt; 0&amp;#39;&lt;/span&gt; data.json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Полезные флаги при проверке&lt;br&gt;
Флаг Что делает&lt;br&gt;
-c Compact. Схлопывает JSON в одну строку (удобно для логов).&lt;br&gt;
-S Sort keys. Сортирует ключи в алфавитном порядке (помогает сравнивать два файла).&lt;br&gt;
-r Raw output. Убирает кавычки вокруг строк в выводе.&lt;br&gt;
-M Monochrome. Отключает цвета (если нужно сохранить вывод в текстовый файл).&lt;/p&gt;</description></item><item><title>sshm - менеджер подключений SSH</title><link>https://llexa.ru/posts/sshm-menedzher-podkliuchenii-ssh/</link><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/sshm-menedzher-podkliuchenii-ssh/</guid><description>&lt;p&gt;Мой вайбкодинг 🤣 ну или не мой. В общем, достаточно простая «оболочка» для обычного текстового файла. Сопутствующий софт: SK, KeePassXC + параллельно есть еще скрипты синхронизации с ноутбуком и телефоном (Termux).&lt;br&gt;
&lt;a href="https://github.com/lalexrus/sshm"&gt;https://github.com/lalexrus/sshm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;#ssh #sk #keepass #termux&lt;/p&gt;</description></item><item><title>HISTORY история команд в BASH</title><link>https://llexa.ru/posts/history-istoriia-komand-v-bash/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/history-istoriia-komand-v-bash/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#формат - 2026-03-31 12:20:30 apt install nginx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export &lt;span style="color:#79c0ff"&gt;HISTTIMEFORMAT&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#39;%F %T &amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#сохраняет историю немедленно, а не при выходе&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#79c0ff"&gt;PROMPT_COMMAND&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#39;history -a&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#увеличение лимита&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export &lt;span style="color:#79c0ff"&gt;HISTSIZE&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;10000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#игнор некоторых команд&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export &lt;span style="color:#79c0ff"&gt;HISTIGNORE&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;ls:history:w:htop:pwd:top:iftop&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#команды начинающиеся с пробела не сохраняются&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export &lt;span style="color:#79c0ff"&gt;HISTCONTROL&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;ignorespace
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;#bash #linux #history #cli&lt;/p&gt;</description></item><item><title>Зефир без сахара</title><link>https://llexa.ru/posts/zefir-bez-sakhara/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/zefir-bez-sakhara/</guid><description>&lt;p&gt;Патока – это &lt;strong&gt;побочный продукт производства сахара&lt;/strong&gt;, получаемый путем измельчения сахарного тростника (а также любого другого сахара или же крахмала) и варки извлеченной сладкой жидкости.&lt;br&gt;
Я к тому, нынче модно убрать слово сахар, не написав, что другие слова не так уж и далеки , а иногда и сильно хуже (того самого сахара). Да и в целом - лучше уж купить нормальный зефир (конфеты, печеньки етц, в цену как &amp;ldquo;без сахара&amp;rdquo;,а не &amp;ldquo;красная цена&amp;rdquo; ) чем тешить иллюзиями себя безопасности или полезности&lt;br&gt;
P.S. оффтоп но не могу мимо пройти - почитайте, есть замечательные статьи и повествования о событиях 15 января 1919 года в Бостоне связанных с этой самой патокой. да да патока - сладкая убийца :)&lt;br&gt;
#сахар #патока #бостон #зож&lt;/p&gt;</description></item><item><title>Удаление звуковой дорожки</title><link>https://llexa.ru/posts/udalenie-zvukovoi-dorozhki/</link><pubDate>Fri, 08 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/udalenie-zvukovoi-dorozhki/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#удаление звуковой дорожки&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ffmpeg -i input.webm -an -c:v copy output.webm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#разбор флагов:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# -i input.webm — ваш исходный файл.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# -an — (Audio None) отключает аудиодорожку.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# -c:v copy — копирует видеопоток «как есть» без #перекодирования. Это сохраняет 100% качества и экономит ресурсы #процессора.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# output.webm — имя нового файла без звука.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;#ffmpeg #audio #video&lt;/p&gt;</description></item><item><title>apt блокировка обновлений</title><link>https://llexa.ru/posts/apt-blokirovka-obnovlenii/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/apt-blokirovka-obnovlenii/</guid><description>&lt;p&gt;apt блокировка обновлений&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#блокировка обновления всех пакетов firefox&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt-mark hold firefox*
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#бокировка обновления всех пакетов XFCE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt-mark hold xfce4* xfwm4*
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;#apt #update #linux&lt;/p&gt;</description></item><item><title>Автор свободного софта</title><link>https://llexa.ru/posts/avtor-svobodnogo-softa/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/avtor-svobodnogo-softa/</guid><description>&lt;p&gt;Автор свободного софта&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Неожиданно&lt;/strong&gt; автор Notepad++ &lt;strong&gt;обнаружил&lt;/strong&gt;, что на macOS &amp;gt;появился неофициальный порт, который использует логотип и &amp;gt;название &lt;strong&gt;без разрешения&lt;/strong&gt;, копируя оформление официального &amp;gt;сайта. Это &lt;strong&gt;вводит в заблуждение&lt;/strong&gt;, создавая впечатление, что порт &amp;gt;официально поддерживается. &lt;strong&gt;Дон Хо потребовал&lt;/strong&gt; прекратить &amp;gt;использование логотипа и переименовать проект, чтобы пользователи &amp;gt;не спутывали его с оригиналом.&lt;br&gt;
Человек бы обнаружил, что распространял взломанный дистр своего редактора для начала, а потом бы возмущался&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;#позор #netepad++ #free&lt;/p&gt;</description></item><item><title>kitty snippets</title><link>https://llexa.ru/posts/kitty-snippets/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://llexa.ru/posts/kitty-snippets/</guid><description>&lt;p&gt;kitty snippets&lt;br&gt;
скрипт выбора сниппета (~/.local/bin/kitty-snippet) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-weight:bold;font-style:italic"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#79c0ff"&gt;FZF_BIN&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;~/.cargo/bin/sk&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#79c0ff"&gt;LINE&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ff7b72"&gt;$(&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#79c0ff"&gt;$FZF_BIN&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;&lt;/span&gt; &amp;lt; ~/snippets.txt&lt;span style="color:#ff7b72"&gt;)&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;if&lt;/span&gt; &lt;span style="color:#ff7b72;font-weight:bold"&gt;[&lt;/span&gt; -n &lt;span style="color:#a5d6ff"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#79c0ff"&gt;$LINE&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#ff7b72;font-weight:bold"&gt;]&lt;/span&gt;; &lt;span style="color:#ff7b72"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printf &lt;span style="color:#a5d6ff"&gt;&amp;#39;%s&amp;#39;&lt;/span&gt; &lt;span style="color:#a5d6ff"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#79c0ff"&gt;$LINE&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;&lt;/span&gt; | kitten @ send-text --match state:overlay_parent --stdin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; kitten @ send-text --match state:overlay_parent &lt;span style="color:#a5d6ff"&gt;$&amp;#39;\r&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Текстовый файл snippets.txt хранить в своем домашнем каталоге.&lt;br&gt;
В файле настроек ~/.config/kitty/kitty.conf :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-conf" data-lang="conf"&gt;allow_remote_control yes
map ctrl+shift+s launch --type=overlay &amp;#34;~/.local/bin/kitty-snippet&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;после этого при нажатии комбинации ctrl+shift+s будет запущен скрипт, который при помощи sk выведет меню выбора по содержимому snippets.txt, выбранную строку вставит в текущую консоль.&lt;br&gt;
В одной строке файла (snippets.txt) должен содержаться один &amp;ldquo;сниппет&amp;rdquo; (или, условно говоря, команда).&lt;br&gt;
Для работы использует sk.&lt;br&gt;
#bash #kitty #snippets #key #sk&lt;/p&gt;</description></item></channel></rss>