Лишний cat и другие Bash-антипаттерны
Разбираем распространённые Bash-антипаттерны из учебных скриптов: лишний cat перед cut, grep и tr, а также небезопасный перебор файлов через ls. Показываем более прямые и устойчивые варианты команд.
BashDays / инженерное медиа
Статьи об администрировании Linux, инфраструктуре, информационной безопасности, автоматизации и разработке — с реальными примерами и без пересказа документации.
Главная статья
Разбираем распространённые Bash-антипаттерны из учебных скриптов: лишний cat перед cut, grep и tr, а также небезопасный перебор файлов через ls. Показываем более прямые и устойчивые варианты команд.
Форум Bashdays
Читают сейчас
Разбираем распространённые Bash-антипаттерны из учебных скриптов: лишний cat перед cut, grep и tr, а также небезопасный перебор файлов через ls. …
Личный опыт постепенного снижения веса со 130 до 85 килограммов без краткосрочной диеты. Автор рассказывает об изменении питания, размере порций, …
Создаём шаблон конфигурации nginx и подставляем разные значения для production и stage через envsubst. Сравниваем функцию рендеринга с heredoc и …
Смотрим текущие настройки терминала через stty -a и меняем символ прерывания процесса с Ctrl+C на другое сочетание клавиш. Разбираем возврат …
Разбираемся, почему многократные вызовы tput замедляют Bash-скрипт, и один раз сохраняем управляющие последовательности терминала в переменные. …
Разбираем запуск долгих задач в именованных screen-сессиях, подключение через -r и -x и корректное отсоединение сочетанием Ctrl+A, d. Показываем …
Строим связку из SSH-бастиона и изолированной машины без выхода в интернет для удалённых пользователей. Настраиваем ключи, принудительную оболочку и …
Ироничный гороскоп для разработчиков, DevOps-инженеров и всех, кто живёт среди коммитов, багов и продакшена. Двенадцать знаков зодиака получают советы …
Пишем Bash-watchdog, который проверяет доступность интернета и наращивает интервалы попыток восстановления связи. Для физической перезагрузки роутера …
Разбираем завершители блоков ;;, ;& и ;;& в операторе case Bash. На практических примерах показываем обычное завершение ветки, fallthrough и повторную …
Сравниваем X11 Forwarding и RDP в Docker для удалённой работы с графическими приложениями на Linux-сервере. Разбираем подключение GPU NVIDIA и AMD, …
Ищем культурный след числа 42 в справке Vim, документации Emacs и сообществе GNU. Разбираемся, как ответ из «Автостопом по галактике» стал устойчивой …
История о смене DevOps-инженеров, усложнении рабочей инфраструктуры и внезапном переходе на Teleport. Почему новые практики нужно согласовывать, а …
Разбираем обработку стрелок, Home, End и F1–F12 в интерактивном Bash-скрипте. Функция GET_KEY переводит многобайтные управляющие последовательности …
Настраиваем второй IP-адрес на VPS и распределяем исходящие соединения между двумя адресами через iptables SNAT. Проверяем выбор интерфейса в curl и …
Личный опыт снижения веса со 130 до 85 килограммов и его дальнейшего контроля. Ежедневное взвешивание, режим питания и сна, физическая нагрузка и …
Несколько способов вывести повторяющуюся строку в Bash: собственная функция repeat, seq, printf и tr. Разбираем параметры функции, двойное тире printf …
Пять способов запустить исходную команду в Bash, не удаляя alias из конфигурации оболочки. Показываем экранирование, кавычки, полный путь, command и …
Сценарий отката сетевой конфигурации удалённого Linux-сервера без IPMI и локального администратора. Резервная копия /etc, задание cron после …
Разбираемся, почему короткий ключ ED25519 не слабее длинного RSA, какие типы SSH-ключей поддерживает OpenSSH и как конвертировать PPK из PuTTYgen. …
Шифруем пиксели PNG с парольной фразой или отдельным файлом-ключом через ImageMagick. Проверяем расшифровку, ограничения форматов и сохранение …
Экспериментируем с coproc, массивом COPROC и тайм-аутом команды read. На примерах разбираем обмен через файловые дескрипторы и ограничения такого …
Разбираем mktemp через strace и подменяем результат системного вызова openat. Эксперимент показывает, сколько имён перебирает coreutils при ошибке …
Личный опыт отказа от курения после нескольких неудачных попыток. Автор рассказывает о собственных ошибках, первых тяжёлых месяцах и приёмах, которые …
Настраиваем обязательную смену пароля, требования libpam-pwquality и защиту fail2ban для SSH. Разбираем минимальный набор мер, если клиент …
MySQL-реплика отстала на три месяца, но Prometheus и Grafana не подняли тревогу. Разбираем самодельный Bash-экспортёр, значение Null в …
Три способа выполнить команду в другом каталоге и вернуться обратно: subshell, pushd/popd и cd -. На наглядных примерах сравниваем поведение рабочего …
Автор превращает безвентиляторный Celeron N2840 в домашний роутер и сравнивает pfSense, Debian и IPFire. В материале — проблемы Wi-Fi, реальные замеры …
Пишем Bash-скрипт, который проверяет цепочку DOCKER-USER и восстанавливает правила iptables после изменений Docker. Добавляем список разрешённых IP и …
Сравниваем privileged и обычные Docker-контейнеры по capabilities, устройствам, сети и изоляции. Выбираем между --cap-add, --device и полным …
Показываем разницу между обычной переменной Bash и переменной окружения, объявленной через export. Проверяем наследование в подпроцессах и разбираем …
Привязываем SSH-подключение к bastion-серверу к комбинации Alt+B в Bash через функцию и bind -x. Также разбираем псевдотерминал, reset и вариант …
Пишем Bash-скрипт, который проверяет длину очереди RabbitMQ по SSH и перезапускает зависший микросервис при накоплении писем. Разбираем cron, …
Контролируем появление новых связок IP и MAC в сетях DMZ и LAN на OPNsense. Скрипты csh и awk сравнивают ARP-таблицу со справочником и отправляют …
Устанавливаем корневой и подчинённый сертификаты Минцифры в Ubuntu одной shell-командой. Проверяем subject, SHA-1 fingerprint и цепочку OpenSSL, …
Разбираем числовой errno из лога MySQL с помощью штатной утилиты perror. На примере ошибки 24 находим лимит открытых файлов и проверяем …
Исследуем генератор псевдослучайных чисел RANDOM в Bash на примере безопасной русской рулетки. Разбираем seed, влияние BASH_COMPAT и различия …
Проверяем существование удалённого Git-репозитория и доступ к нему через git ls-remote. Пишем Bash-скрипты для HTTPS и SSH, отключаем интерактивные …
Отключаем zswap через параметры GRUB и настраиваем сжатие оперативной памяти с помощью zram. Показываем Bash-скрипт и конфигурацию …
Создаём cgroup для процесса и запрещаем ему использовать swap, не отключая подкачку для всей системы. Разбираем cgcreate, cgclassify, memory.swap.max, …
Пятиминутка стабильности
Из логов айтишной жизни
Den Stranger: Жена попросила меня заказать ей лифчик в онлайн магазине. Заказ сделан, оплачен. Сидим, ждём. Надо заметить что в личном кабинете отображается инфа из какого именно города везут товар. И вот на вопрос жены, в каком состоянии находится заказ, я выдал: - Он выехал, из Электростали, - на что тут же получил в ответ. - Из Электростали? Они мне что, бронелифчик везут?
Разбираем распространённые Bash-антипаттерны из учебных скриптов: лишний cat перед cut, grep и tr, а также небезопасный перебор файлов через ls. Показываем более прямые и устойчивые варианты команд.
Создаём шаблон конфигурации nginx и подставляем разные значения для production и stage через envsubst. Сравниваем функцию рендеринга с heredoc и разбираем передачу переменных окружения.
Смотрим текущие настройки терминала через stty -a и меняем символ прерывания процесса с Ctrl+C на другое сочетание клавиш. Разбираем возврат настройки, запись в shell-конфиг и альтернативу через xbindkeys.
Разбираемся, почему многократные вызовы tput замедляют Bash-скрипт, и один раз сохраняем управляющие последовательности терминала в переменные. Показываем печать, экранирование и практические однострочники.
Разбираем запуск долгих задач в именованных screen-сессиях, подключение через -r и -x и корректное отсоединение сочетанием Ctrl+A, d. Показываем фоновый запуск, передачу команд в сессию и организацию логирования.
Пишем Bash-watchdog, который проверяет доступность интернета и наращивает интервалы попыток восстановления связи. Для физической перезагрузки роутера подключаем недорогое USB-реле и управляем им через последовательный порт.
Разбираем завершители блоков ;;, ;& и ;;& в операторе case Bash. На практических примерах показываем обычное завершение ветки, fallthrough и повторную проверку следующих шаблонов.
Сравниваем X11 Forwarding и RDP в Docker для удалённой работы с графическими приложениями на Linux-сервере. Разбираем подключение GPU NVIDIA и AMD, необходимые устройства контейнера и безопасный SSH-туннель.
Ищем культурный след числа 42 в справке Vim, документации Emacs и сообществе GNU. Разбираемся, как ответ из «Автостопом по галактике» стал устойчивой шуткой в мире программирования.
Разбираем обработку стрелок, Home, End и F1–F12 в интерактивном Bash-скрипте. Функция GET_KEY переводит многобайтные управляющие последовательности терминала в hexadecimal-коды.
Настраиваем второй IP-адрес на VPS и распределяем исходящие соединения между двумя адресами через iptables SNAT. Проверяем выбор интерфейса в curl и случайную маршрутизацию с вероятностью 50%.
Несколько способов вывести повторяющуюся строку в Bash: собственная функция repeat, seq, printf и tr. Разбираем параметры функции, двойное тире printf и компактные однострочные команды.
Пять способов запустить исходную команду в Bash, не удаляя alias из конфигурации оболочки. Показываем экранирование, кавычки, полный путь, command и unalias с восстановлением настроек.
Сценарий отката сетевой конфигурации удалённого Linux-сервера без IPMI и локального администратора. Резервная копия /etc, задание cron после перезагрузки и проверка успешного входа по SSH.
Шифруем пиксели PNG с парольной фразой или отдельным файлом-ключом через ImageMagick. Проверяем расшифровку, ограничения форматов и сохранение открытых метаданных.
Создаём шаблон конфигурации nginx и подставляем разные значения для production и stage через envsubst. Сравниваем функцию рендеринга с heredoc и разбираем передачу переменных окружения.
Строим связку из SSH-бастиона и изолированной машины без выхода в интернет для удалённых пользователей. Настраиваем ключи, принудительную оболочку и автоматический переход на внутренний сервер.
Пишем Bash-watchdog, который проверяет доступность интернета и наращивает интервалы попыток восстановления связи. Для физической перезагрузки роутера подключаем недорогое USB-реле и управляем им через последовательный порт.
Сравниваем X11 Forwarding и RDP в Docker для удалённой работы с графическими приложениями на Linux-сервере. Разбираем подключение GPU NVIDIA и AMD, необходимые устройства контейнера и безопасный SSH-туннель.
История о смене DevOps-инженеров, усложнении рабочей инфраструктуры и внезапном переходе на Teleport. Почему новые практики нужно согласовывать, а систему — упрощать без потери доступа владельца.
Настраиваем второй IP-адрес на VPS и распределяем исходящие соединения между двумя адресами через iptables SNAT. Проверяем выбор интерфейса в curl и случайную маршрутизацию с вероятностью 50%.
Сценарий отката сетевой конфигурации удалённого Linux-сервера без IPMI и локального администратора. Резервная копия /etc, задание cron после перезагрузки и проверка успешного входа по SSH.
Разбираемся, почему короткий ключ ED25519 не слабее длинного RSA, какие типы SSH-ключей поддерживает OpenSSH и как конвертировать PPK из PuTTYgen. Практические команды для генерации и преобразования ключей.
MySQL-реплика отстала на три месяца, но Prometheus и Grafana не подняли тревогу. Разбираем самодельный Bash-экспортёр, значение Null в Seconds_Behind_Master и исчезнувшую метрику.
Автор превращает безвентиляторный Celeron N2840 в домашний роутер и сравнивает pfSense, Debian и IPFire. В материале — проблемы Wi-Fi, реальные замеры iperf3, нагрев корпуса и итог эксперимента.
Пишем Bash-скрипт, который проверяет цепочку DOCKER-USER и восстанавливает правила iptables после изменений Docker. Добавляем список разрешённых IP и безопасный запуск проверки через cron.
Сравниваем privileged и обычные Docker-контейнеры по capabilities, устройствам, сети и изоляции. Выбираем между --cap-add, --device и полным привилегированным режимом.
Пишем Bash-скрипт, который проверяет длину очереди RabbitMQ по SSH и перезапускает зависший микросервис при накоплении писем. Разбираем cron, rabbitmqctl, awk и запуск команд от отдельного пользователя.
Контролируем появление новых связок IP и MAC в сетях DMZ и LAN на OPNsense. Скрипты csh и awk сравнивают ARP-таблицу со справочником и отправляют уведомление в Telegram без раскрытия инфраструктуры.
Проверяем существование удалённого Git-репозитория и доступ к нему через git ls-remote. Пишем Bash-скрипты для HTTPS и SSH, отключаем интерактивные запросы и возвращаем понятные коды ошибок.
Строим связку из SSH-бастиона и изолированной машины без выхода в интернет для удалённых пользователей. Настраиваем ключи, принудительную оболочку и автоматический переход на внутренний сервер.
Разбираемся, почему короткий ключ ED25519 не слабее длинного RSA, какие типы SSH-ключей поддерживает OpenSSH и как конвертировать PPK из PuTTYgen. Практические команды для генерации и преобразования ключей.
Шифруем пиксели PNG с парольной фразой или отдельным файлом-ключом через ImageMagick. Проверяем расшифровку, ограничения форматов и сохранение открытых метаданных.
Настраиваем обязательную смену пароля, требования libpam-pwquality и защиту fail2ban для SSH. Разбираем минимальный набор мер, если клиент отказывается переходить на ключи.
Сравниваем privileged и обычные Docker-контейнеры по capabilities, устройствам, сети и изоляции. Выбираем между --cap-add, --device и полным привилегированным режимом.
Устанавливаем корневой и подчинённый сертификаты Минцифры в Ubuntu одной shell-командой. Проверяем subject, SHA-1 fingerprint и цепочку OpenSSL, обновляем системное хранилище CA и тестируем HTTPS через curl.
Настраиваем белый список команд для SSH-пользователя с помощью Bash-скрипта ONLY и директивы command в authorized_keys. Разбираем ключи, ограничения сессии и правила .onlyrules без выдачи интерактивной оболочки.
Практическая схема резервного копирования с защищённой СХД, внешними дисками и промежуточным сервером. Объясняем чередование носителей, локальные дневные копии и ротацию нумерованных архивов.
Генерируем повторяемые пароли через pwgen по логину, ключевому файлу и запоминаемому модификатору. Bash-обёртка скрывает ввод, проверяет зависимости и позволяет получать тот же набор паролей без их хранения.
Разбираем Патч Бармина и поведение команды rm -rf /* в Unix-системах. Показываем раскрытие glob оболочкой, права на каталоги, интерактивный режим и защиту --preserve-root=all.
Создаём доверенный локальный центр сертификации и выпускаем SSL-сертификаты для localhost и внутренних доменов через mkcert. Настраиваем Windows, WSL, Scoop и общий CAROOT.
Создаём ограниченное окружение chroot для SSH-пользователя в Linux. Копируем Bash и зависимости через ldd, настраиваем ChrootDirectory и по одной добавляем разрешённые утилиты.
Собираем локальный генератор TOTP-кодов для двухфакторной аутентификации на Bash. Извлекаем секрет из QR-кода через zbarimg, генерируем OTP с oathtool и делаем меню для нескольких сервисов.
Настраиваем простой honeypot в Nginx против автоматического поиска забытых архивов и дампов. Ложный бэкап отдаётся с ограничением скорости, одним соединением и отдельным журналом запросов.
Сравниваем su и sudo: чьи пароли они запрашивают, как переключают пользователя и что происходит с переменными окружения. Разбираем дефис у su и различия ключей sudo -s и sudo -i.
Разбираем распространённые Bash-антипаттерны из учебных скриптов: лишний cat перед cut, grep и tr, а также небезопасный перебор файлов через ls. Показываем более прямые и устойчивые варианты команд.
Разбираем завершители блоков ;;, ;& и ;;& в операторе case Bash. На практических примерах показываем обычное завершение ветки, fallthrough и повторную проверку следующих шаблонов.
Ищем культурный след числа 42 в справке Vim, документации Emacs и сообществе GNU. Разбираемся, как ответ из «Автостопом по галактике» стал устойчивой шуткой в мире программирования.
Разбираем обработку стрелок, Home, End и F1–F12 в интерактивном Bash-скрипте. Функция GET_KEY переводит многобайтные управляющие последовательности терминала в hexadecimal-коды.
Несколько способов вывести повторяющуюся строку в Bash: собственная функция repeat, seq, printf и tr. Разбираем параметры функции, двойное тире printf и компактные однострочные команды.
Разбираем mktemp через strace и подменяем результат системного вызова openat. Эксперимент показывает, сколько имён перебирает coreutils при ошибке EEXIST и откуда берётся число попыток.
MySQL-реплика отстала на три месяца, но Prometheus и Grafana не подняли тревогу. Разбираем самодельный Bash-экспортёр, значение Null в Seconds_Behind_Master и исчезнувшую метрику.
Разбираем числовой errno из лога MySQL с помощью штатной утилиты perror. На примере ошибки 24 находим лимит открытых файлов и проверяем open_files_limit, ulimit и системные ограничения.
Пишем первый юнит-тест для Bash-скрипта с фреймворком bashunit. Разбираем установку, assert_equals, успешный и проваленный прогон, а также другие доступные проверки.
Создаём зомби-процесс на C и Bash, находим его и родительский PID через ps и разбираем завершение процесса. Объясняем, почему kill по PID зомби не помогает и когда такие записи можно не трогать.
Используем strace с измерением времени системных вызовов, чтобы увидеть блокировку записи в Linux pipe. Разбираем сложную команду и находим скачок задержки после заполнения буфера объёмом 65536 байт.
Исследуем, почему ls отключает ANSI-цвета при передаче вывода через pipe. С помощью strace находим ENOTTY, подменяем результат ioctl и возвращаем управляющие последовательности опциями color=always и cat -v.
Создаём доверенный локальный центр сертификации и выпускаем SSL-сертификаты для localhost и внутренних доменов через mkcert. Настраиваем Windows, WSL, Scoop и общий CAROOT.
Читаем поля SigBlk, SigIgn и SigCgt в /proc/PID/status и переводим шестнадцатеричные битовые маски в имена сигналов Linux. В конце собираем готовый Bash-скрипт для диагностики процесса.
Исследуем бесконечный Bash-цикл, канал до grep -m1 и незаметный SIGPIPE. Смотрим коды сигналов, процессы подоболочки и способы корректно остановить cat после закрытия конвейера.
Личный опыт постепенного снижения веса со 130 до 85 килограммов без краткосрочной диеты. Автор рассказывает об изменении питания, размере порций, периодах стабилизации веса и безопасном темпе похудения.
Ироничный гороскоп для разработчиков, DevOps-инженеров и всех, кто живёт среди коммитов, багов и продакшена. Двенадцать знаков зодиака получают советы о коде, Git, выгорании, автоматизации и пет-проектах.
История о смене DevOps-инженеров, усложнении рабочей инфраструктуры и внезапном переходе на Teleport. Почему новые практики нужно согласовывать, а систему — упрощать без потери доступа владельца.
Личный опыт снижения веса со 130 до 85 килограммов и его дальнейшего контроля. Ежедневное взвешивание, режим питания и сна, физическая нагрузка и наблюдения о колебаниях веса.
Личный опыт отказа от курения после нескольких неудачных попыток. Автор рассказывает о собственных ошибках, первых тяжёлых месяцах и приёмах, которые использовал в 1998 году.
Привязываем SSH-подключение к bastion-серверу к комбинации Alt+B в Bash через функцию и bind -x. Также разбираем псевдотерминал, reset и вариант конфигурации для Zsh.
Создаём всплывающую шпаргалку прямо в терминале без графической оболочки. Используем tput, read, trap и bind, чтобы показывать альтернативный экран по Ctrl+H и закрывать его после отпускания клавиши.
Используем встроенный хоткей Ctrl+X+E для редактирования многострочной команды в Vim, Nano или другом редакторе. Настраиваем переменную EDITOR и разбираем, как Bash выполняет сохранённый временный файл.
Настраиваем выпадающие списки Variables при ручном запуске GitLab Pipeline. Разбираем options, YAML anchors, rules для stage и production и подключение общего .gitlab-ci.yml из отдельного проекта.
Добавляем дату и время к истории команд в Bash через HISTTIMEFORMAT и настраиваем цветные метки. Сравниваем history -E, history -i и fc в Zsh и сохраняем удобные настройки оболочки.
Разбираем Bash-скрипт spr.sh — консольный справочник для поиска записей и фрагментов кода по нескольким тегам. Конфигурация хранится в текстовом файле, а фильтрация реализована однострочником awk.
Etckeeper превращает каталог /etc в Git-репозиторий и помогает отслеживать, фиксировать и откатывать изменения конфигурации Linux. Разбираем установку, удалённый репозиторий, коммиты и автоматизацию через incron.
Практический разбор подготовки к переговорам: повестка, чувства участников, желаемый результат и заранее подготовленные ответы. Заодно проверяем, нужна ли встреча вообще или вопрос быстрее решить текстом.
Почему рекрутер может снять кандидата с вакансии после просьбы перенести собеседование и как рынок труда влияет на процесс найма. Разбираю инсайд от HR-агентства о массовом отклике, жёстком отборе кандидатов и том, как не потерять …
Обычно сеньоры бегут на повышение, а я сделал наоборот. Ко мне пришёл парень с ипотекой, детьми и страхом перемен. Вместо того чтобы дрыгаться в поисках жирного оффера на ту же позицию, мы занизили грейд до мидла. И получили …
Утилита ccze добавляет цветовую подсветку к системным логам в терминале и выделяет ошибки. Показываем работу с cat и tail, сохранение последних строк в цветной HTML-файл и просмотр доступных плагинов.
Bash-скрипт запускает долгую команду в фоне и показывает текстовую анимацию до её завершения. Разбираем временный лог, trap, tput, сигналы, PID процесса и очистку терминального вывода.
Пишем Bash-скрипт, который архивирует файлы на сервере, отправляет tar.gz через Telegram Bot API и удаляет временный архив. Разбираем chat_id, bot_token, curl, подписи и ограничение размера.
Настраиваем общий доступ к терминалу Linux и macOS через tty-share без тяжёлых видеозвонков. Разбираем публичную и локальную сессии, режим только для чтения, завершение процесса и альтернативные инструменты.
Реализуем расширенную Basic Auth-аутентификацию в Nginx с помощью Lua и базы MySQL. Скрипт OpenResty читает заголовок Authorization, хеширует пароль, проверяет пользователя и передаёт запрос в защищённый location.
Устанавливаем Bash-утилиту tmpmail и создаём одноразовый почтовый адрес прямо в терминале. Показываем генерацию адресов, выбор домена, просмотр входящих писем и получение последнего сообщения в текстовом виде.
Автоматизируем передачу файлов с сервера скриптом на Bash: проверяем размер, упаковываем крупные данные, загружаем их через curl в transfer.sh и получаем ссылку. Отдельно обсуждаем лимиты сервиса и безопасность.
Почему df показывает 100% занятого места, а du и ncdu не находят крупные файлы. Разбираю Hidden Space Explorer (hsed) — TUI-утилиту для поиска удалённых, но открытых файлов в Linux, освобождения дискового пространства и …
Я потыкал Termix, бесплатный аналог Termius. И Termix выигрывает в открытости, поддержке SSH туннелей и возможности управлять файлами из браузера. Минусы – нестабильный VNC, странные анимации панели и наверное необходимость ручных …
У меня на малинке висит целый зоопарк Jellyfin, qBittorrent, Grafana, Prometheus, Uptime Kuma и куча другого. Portainer для таких целей избыточен как космический корабль для поездки в магазин. Да и интерфейс там сделан через жопу …
Ностальгическая музыка демо-сцены в удобном формате. Веб-плеер, браузерные расширения и возможность скачать коллекцию бесплатно.
Разбираемся, что такое поисковик Startpage, как включить русский язык, сделать его основным поиском в Chrome, Firefox или Edge и какие ограничения есть у его конфиденциальности.
Решил попробовать альтернативу Яндексу и ARC и остановился на ZEN Browser — и не пожалел. Много удобных фишек, кастомизация и отсутствие встроенного ИИ. Работать стало намного комфортнее!
Та самая программа для обмена музыкой, которая круче любых стримингов с их ограничениями. Подключайся, делись и качай без цензуры, как в старые добрые времена.
О том, как данные пользователей разлетаются по интернету и почему я решил полностью отказаться от сервисов Google. Делюсь крутым инструментом, который помогает легко и прозрачно защитить свою приватность на всех популярных ОС. …
Личный опыт постепенного снижения веса со 130 до 85 килограммов без краткосрочной диеты. Автор рассказывает об изменении питания, размере порций, периодах стабилизации веса и безопасном темпе похудения.
Строим связку из SSH-бастиона и изолированной машины без выхода в интернет для удалённых пользователей. Настраиваем ключи, принудительную оболочку и автоматический переход на внутренний сервер.
Пишем Bash-watchdog, который проверяет доступность интернета и наращивает интервалы попыток восстановления связи. Для физической перезагрузки роутера подключаем недорогое USB-реле и управляем им через последовательный порт.
Сравниваем X11 Forwarding и RDP в Docker для удалённой работы с графическими приложениями на Linux-сервере. Разбираем подключение GPU NVIDIA и AMD, необходимые устройства контейнера и безопасный SSH-туннель.
Разбираем обработку стрелок, Home, End и F1–F12 в интерактивном Bash-скрипте. Функция GET_KEY переводит многобайтные управляющие последовательности терминала в hexadecimal-коды.
Личный опыт снижения веса со 130 до 85 килограммов и его дальнейшего контроля. Ежедневное взвешивание, режим питания и сна, физическая нагрузка и наблюдения о колебаниях веса.
Сценарий отката сетевой конфигурации удалённого Linux-сервера без IPMI и локального администратора. Резервная копия /etc, задание cron после перезагрузки и проверка успешного входа по SSH.
Личный опыт отказа от курения после нескольких неудачных попыток. Автор рассказывает о собственных ошибках, первых тяжёлых месяцах и приёмах, которые использовал в 1998 году.
Автор превращает безвентиляторный Celeron N2840 в домашний роутер и сравнивает pfSense, Debian и IPFire. В материале — проблемы Wi-Fi, реальные замеры iperf3, нагрев корпуса и итог эксперимента.
Знаешь это чувство, когда ждёшь регресс дольше, чем сам работаешь? У меня рантайм был 34 минуты, и две трети времени уходило на очистку QA-стенда. Решение пришло через Docker и Testcontainers — теперь тесты летят за 14 минут, а …
Однажды я вручную гонял регресс 5 недель. Больше я так не хочу. Я построил фреймворк, который за 30 минут прогоняет то, на что раньше уходил месяц. Но главное — на этапе проектировки запросов мы нашли столько дефектов в SOAP API, …
Мне за 30, я видел много скриптов с дьявольскими отрицаниями, и каждый раз хотелось задушить автора. Поэтому я решил написать пост, в котором покажу как превратить кошмарную конструкцию в простой if-else без единого лишнего знака. …
Часто слышу, что автоматизировать sftp на Windows XP‑10 невозможно без кучи сторонних утилит. На деле всё проще. Я разобрался, как затащить sftp с ключами на такие системы. Самое смешное — WinSCP пришлось настроить так, чтобы он …
Как я поймал скрытый SSH трафик с Android и iPhone через opnSense. Люди до сих пор думают, что угрозы это когда хакер в худи ломает Пентагон. На деле твой смартфон сам бодро шатает чужие SSH порты пока ты листаешь мемы. Я проверил …
Я перепробовал пять редакторов и каждый меня бесил. Typora платный, Notion дохнет без интернета, Obsidian превращается в зоопарк плагинов. Тогда я плюнул и за выходные набросал свой инструмент на Tauri и React. Получился qnote — …
Навигация по знаниям
Скрипты, однострочники, awk, cron, mapfile и практическая автоматизация рутины.
→ DevOps и рабочие процессыCI/CD, инфраструктура, Ansible, пайплайны, рабочие практики и инженерная рутина.
→ Docker, Podman и контейнерыВсе про контейнеры: Docker, Podman, сборки, окружение, управление и смежные инструменты.
→ Linux и администрированиеСистемное администрирование Linux, диагностика, утилиты, права, systemd, файловые системы и сеть.
→
Загружаем свежие комментарии…