Почему ls теряет цвета в pipe
Исследуем, почему ls отключает ANSI-цвета при передаче вывода через pipe. С помощью strace находим ENOTTY, подменяем результат ioctl и возвращаем управляющие последовательности опциями color=always и cat -v.
BashDays / инженерное медиа
Статьи об администрировании Linux, инфраструктуре, информационной безопасности, автоматизации и разработке — с реальными примерами и без пересказа документации.
Главная статья
Исследуем, почему ls отключает ANSI-цвета при передаче вывода через pipe. С помощью strace находим ENOTTY, подменяем результат ioctl и возвращаем управляющие последовательности опциями color=always и cat -v.
Читают сейчас
Исследуем, почему ls отключает ANSI-цвета при передаче вывода через pipe. С помощью strace находим ENOTTY, подменяем результат ioctl и возвращаем …
Практическая схема резервного копирования с защищённой СХД, внешними дисками и промежуточным сервером. Объясняем чередование носителей, локальные …
Настраиваем автоматическую проверку SMART и RAID-массива с почтовыми уведомлениями. Используем smartmontools, smartd, mdadm и лёгкий SMTP-клиент msmtp …
Утилита ccze добавляет цветовую подсветку к системным логам в терминале и выделяет ошибки. Показываем работу с cat и tail, сохранение последних строк …
Разбираем Bash-команду, которая проверяет каждый элемент PATH и выводит отсутствующие или недоступные каталоги. Пошагово объясняем set -f, IFS, …
Генерируем повторяемые пароли через pwgen по логину, ключевому файлу и запоминаемому модификатору. Bash-обёртка скрывает ввод, проверяет зависимости и …
На примерах сравниваем специальные переменные $@ и $* в Bash с кавычками и без них. Показываем разбиение аргументов с пробелами, объединение в одну …
Bash-скрипт запускает долгую команду в фоне и показывает текстовую анимацию до её завершения. Разбираем временный лог, trap, tput, сигналы, PID …
Сравниваем systemd timers и cron на практическом примере: создаём service и timer, запускаем задачу каждую минуту и включаем автозагрузку. …
Собираем Raspberry Pi 5 с NVMe-диском и резервным питанием на аккумуляторах 18650. Разбираем комплект Geekworm, запуск вентилятора через …
Разбираем Патч Бармина и поведение команды rm -rf /* в Unix-системах. Показываем раскрытие glob оболочкой, права на каталоги, интерактивный режим и …
Создаём доверенный локальный центр сертификации и выпускаем SSL-сертификаты для localhost и внутренних доменов через mkcert. Настраиваем Windows, WSL, …
Читаем поля SigBlk, SigIgn и SigCgt в /proc/PID/status и переводим шестнадцатеричные битовые маски в имена сигналов Linux. В конце собираем готовый …
Пишем Bash-скрипт, который архивирует файлы на сервере, отправляет tar.gz через Telegram Bot API и удаляет временный архив. Разбираем chat_id, …
Разбираем утилиту timeout для ограничения времени работы команд и скриптов в Linux. Показываем длительности, сигналы завершения, удалённый запуск …
Создаём ограниченное окружение chroot для SSH-пользователя в Linux. Копируем Bash и зависимости через ldd, настраиваем ChrootDirectory и по одной …
Настраиваем общий доступ к терминалу Linux и macOS через tty-share без тяжёлых видеозвонков. Разбираем публичную и локальную сессии, режим только для …
Настраиваем выпадающие списки Variables при ручном запуске GitLab Pipeline. Разбираем options, YAML anchors, rules для stage и production и …
Добавляем дату и время к истории команд в Bash через HISTTIMEFORMAT и настраиваем цветные метки. Сравниваем history -E, history -i и fc в Zsh и …
Проверяем TCP- и UDP-порты средствами Bash через /dev/tcp и /dev/udp, когда в системе нет curl, wget или telnet. Добавляем timeout, читаем код …
Исследуем бесконечный Bash-цикл, канал до grep -m1 и незаметный SIGPIPE. Смотрим коды сигналов, процессы подоболочки и способы корректно остановить …
Показываем, как nip.io преобразует IP-адрес внутри доменного имени и позволяет открывать локальные сервисы без правки /etc/hosts. Проверяем поддомены, …
Разбираем Bash-скрипт spr.sh — консольный справочник для поиска записей и фрагментов кода по нескольким тегам. Конфигурация хранится в текстовом …
Сравниваем скорость запуска Bash и Zsh вручную и с помощью shellbench. Заодно разбираем плагины Oh My Zsh, автодополнение и место Dash среди быстрых …
Разбираем разделы справочной системы man: команды, системные вызовы, форматы файлов, административные утилиты и функции ядра. Показываем поиск через …
Разбираемся, почему Docker использует MASQUERADE вместо адреса Dummy-интерфейса, и находим скрытую настройку host_ipv4 в исходниках Moby. Создаём …
Ищем Linux-шрифты с кириллическими глифами через fc-list и сопоставляем их со шрифтами ImageMagick. Затем Bash-скрипт генерирует образцы русской буквы …
Объясняем коды завершения после SIGINT и SIGTERM и настраиваем обработчики сигналов через trap в Bash. Разбираем, почему получается код 130, как …
Собираем локальный генератор TOTP-кодов для двухфакторной аутентификации на Bash. Извлекаем секрет из QR-кода через zbarimg, генерируем OTP с oathtool …
Настраиваем простой honeypot в Nginx против автоматического поиска забытых архивов и дампов. Ложный бэкап отдаётся с ограничением скорости, одним …
Домашний сервер на Proxmox с 11 LXC-контейнерами: Jellyfin, Sonarr, Radarr, Syncthing, Pi-hole и другие сервисы. Рассказываю, как устроена моя …
Сравниваем su и sudo: чьи пароли они запрашивают, как переключают пользователя и что происходит с переменными окружения. Разбираем дефис у su и …
Прячем ASCII-сообщение в девяти битах прав доступа Linux-файлов. На Bash разбираем сдвиги битов, восьмеричные режимы chmod и кодирование текста …
Etckeeper превращает каталог /etc в Git-репозиторий и помогает отслеживать, фиксировать и откатывать изменения конфигурации Linux. Разбираем …
Практическое знакомство со strace на примере редактирования файла командой sed. По системным вызовам openat, read, write и rename разбираем работу …
Пошаговая настройка двухфакторной аутентификации SSH через PAM и Google Authenticator. Разбираем конфигурацию sshd, одноразовые коды, резервный доступ …
Разбираем heredoc в Bash на практических примерах с cat, sed, перенаправлением в файл и удалённым запуском команд по SSH. Показываю, как управлять …
Bash-скрипт для интерактивного проброса TCP-портов через SSH jump-сервер. Готовое меню помогает подключаться к службам во внутренних сетях, не меняя …
Ограничиваем SSH-пользователя интерактивным меню разрешённых административных команд. Bash-скрипт, ForceCommand и точечное правило sudoers дают …
Реализуем расширенную Basic Auth-аутентификацию в Nginx с помощью Lua и базы MySQL. Скрипт OpenResty читает заголовок Authorization, хеширует пароль, …
Пятиминутка стабильности
Из логов айтишной жизни
Сегодня привезли новый комп, надо один из старых заменить, хожу по офису, смотрю какой менять, подхожу к одному, а у него аптайм 937 дней, я в шоке, винда, нет упсы, как такое возможно, звоню бывшему админу, спрашиваю что за комп, оказываеться это местное достояние и я уже четвертый, кто его будет выращивать и воспитывать))) Нянька, блин)
Исследуем, почему ls отключает ANSI-цвета при передаче вывода через pipe. С помощью strace находим ENOTTY, подменяем результат ioctl и возвращаем управляющие последовательности опциями color=always и cat -v.
Настраиваем автоматическую проверку SMART и RAID-массива с почтовыми уведомлениями. Используем smartmontools, smartd, mdadm и лёгкий SMTP-клиент msmtp для отправки сообщений о сбоях дисков.
Утилита ccze добавляет цветовую подсветку к системным логам в терминале и выделяет ошибки. Показываем работу с cat и tail, сохранение последних строк в цветной HTML-файл и просмотр доступных плагинов.
Разбираем Bash-команду, которая проверяет каждый элемент PATH и выводит отсутствующие или недоступные каталоги. Пошагово объясняем set -f, IFS, проверку переменной, права доступа и диагностику путей через namei.
Генерируем повторяемые пароли через pwgen по логину, ключевому файлу и запоминаемому модификатору. Bash-обёртка скрывает ввод, проверяет зависимости и позволяет получать тот же набор паролей без их хранения.
На примерах сравниваем специальные переменные $@ и $* в Bash с кавычками и без них. Показываем разбиение аргументов с пробелами, объединение в одну строку и влияние разделителя IFS.
Bash-скрипт запускает долгую команду в фоне и показывает текстовую анимацию до её завершения. Разбираем временный лог, trap, tput, сигналы, PID процесса и очистку терминального вывода.
Сравниваем systemd timers и cron на практическом примере: создаём service и timer, запускаем задачу каждую минуту и включаем автозагрузку. Разбираемся, когда гибкость таймеров оправдана, а когда сотни unit-файлов только усложняют …
Собираем Raspberry Pi 5 с NVMe-диском и резервным питанием на аккумуляторах 18650. Разбираем комплект Geekworm, запуск вентилятора через Python-сервис, стресс-тесты и нюансы питания платы расширения.
Разбираем Патч Бармина и поведение команды rm -rf /* в Unix-системах. Показываем раскрытие glob оболочкой, права на каталоги, интерактивный режим и защиту --preserve-root=all.
Читаем поля SigBlk, SigIgn и SigCgt в /proc/PID/status и переводим шестнадцатеричные битовые маски в имена сигналов Linux. В конце собираем готовый Bash-скрипт для диагностики процесса.
Пишем Bash-скрипт, который архивирует файлы на сервере, отправляет tar.gz через Telegram Bot API и удаляет временный архив. Разбираем chat_id, bot_token, curl, подписи и ограничение размера.
Разбираем утилиту timeout для ограничения времени работы команд и скриптов в Linux. Показываем длительности, сигналы завершения, удалённый запуск через SSH и вариант на чистом Bash.
Создаём ограниченное окружение chroot для SSH-пользователя в Linux. Копируем Bash и зависимости через ldd, настраиваем ChrootDirectory и по одной добавляем разрешённые утилиты.
Настраиваем общий доступ к терминалу Linux и macOS через tty-share без тяжёлых видеозвонков. Разбираем публичную и локальную сессии, режим только для чтения, завершение процесса и альтернативные инструменты.
Практическая схема резервного копирования с защищённой СХД, внешними дисками и промежуточным сервером. Объясняем чередование носителей, локальные дневные копии и ротацию нумерованных архивов.
Настраиваем автоматическую проверку SMART и RAID-массива с почтовыми уведомлениями. Используем smartmontools, smartd, mdadm и лёгкий SMTP-клиент msmtp для отправки сообщений о сбоях дисков.
Сравниваем systemd timers и cron на практическом примере: создаём service и timer, запускаем задачу каждую минуту и включаем автозагрузку. Разбираемся, когда гибкость таймеров оправдана, а когда сотни unit-файлов только усложняют …
Собираем Raspberry Pi 5 с NVMe-диском и резервным питанием на аккумуляторах 18650. Разбираем комплект Geekworm, запуск вентилятора через Python-сервис, стресс-тесты и нюансы питания платы расширения.
Настраиваем выпадающие списки Variables при ручном запуске GitLab Pipeline. Разбираем options, YAML anchors, rules для stage и production и подключение общего .gitlab-ci.yml из отдельного проекта.
Проверяем TCP- и UDP-порты средствами Bash через /dev/tcp и /dev/udp, когда в системе нет curl, wget или telnet. Добавляем timeout, читаем код возврата и сравниваем подход с netcat.
Показываем, как nip.io преобразует IP-адрес внутри доменного имени и позволяет открывать локальные сервисы без правки /etc/hosts. Проверяем поддомены, порты и выпуск SSL-сертификата для публичного IP.
Разбираемся, почему Docker использует MASQUERADE вместо адреса Dummy-интерфейса, и находим скрытую настройку host_ipv4 в исходниках Moby. Создаём bridge-сеть, которая выполняет SNAT контейнеров через нужный публичный IP.
Настраиваем простой honeypot в Nginx против автоматического поиска забытых архивов и дампов. Ложный бэкап отдаётся с ограничением скорости, одним соединением и отдельным журналом запросов.
Домашний сервер на Proxmox с 11 LXC-контейнерами: Jellyfin, Sonarr, Radarr, Syncthing, Pi-hole и другие сервисы. Рассказываю, как устроена моя компактная self-hosted инфраструктура на мини-ПК.
Bash-скрипт для интерактивного проброса TCP-портов через SSH jump-сервер. Готовое меню помогает подключаться к службам во внутренних сетях, не меняя конфигурацию вручную.
Настраиваем policy-based routing для сервера с двумя шлюзами: API-трафик уходит через один маршрут, а ответы SSH и HTTP возвращаются через внешний шлюз. Используем netplan, отдельную таблицу маршрутизации, ip rule, iptables MARK и …
Настраиваем проброс SSH-портов VirtualBox, чтобы подключаться к гостевой Ubuntu из WSL через Windows-хост. Разбираем правила NAT для localhost, локальной сети и VPN, а затем добавляем удобные алиасы.
Пишем небольшой Bash-парсер, который превращает большой php.ini в компактный шаблон без комментариев и пустых строк. Разбираем чтение файла построчно, continue и регулярные выражения в конструкции [[ =~ ]].
Настраиваем ограничение запросов в Nginx через limit_req_zone, geo и map. Разбираем размер зоны памяти, параметры rate, burst и nodelay, белый список IP-адресов и возврат HTTP 429 вместо стандартной ошибки 503.
Практическая схема резервного копирования с защищённой СХД, внешними дисками и промежуточным сервером. Объясняем чередование носителей, локальные дневные копии и ротацию нумерованных архивов.
Генерируем повторяемые пароли через 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.
Прячем ASCII-сообщение в девяти битах прав доступа Linux-файлов. На Bash разбираем сдвиги битов, восьмеричные режимы chmod и кодирование текста последовательностью файлов.
Пошаговая настройка двухфакторной аутентификации SSH через PAM и Google Authenticator. Разбираем конфигурацию sshd, одноразовые коды, резервный доступ и безопасную проверку новой схемы входа.
Ограничиваем SSH-пользователя интерактивным меню разрешённых административных команд. Bash-скрипт, ForceCommand и точечное правило sudoers дают перезапускать сервисы без полноценного доступа к серверу.
Реализуем расширенную Basic Auth-аутентификацию в Nginx с помощью Lua и базы MySQL. Скрипт OpenResty читает заголовок Authorization, хеширует пароль, проверяет пользователя и передаёт запрос в защищённый location.
Настраиваем ограничение запросов в Nginx через limit_req_zone, geo и map. Разбираем размер зоны памяти, параметры rate, burst и nodelay, белый список IP-адресов и возврат HTTP 429 вместо стандартной ошибки 503.
Как блоки Match в sshd_config могут переопределить глобальные настройки SSH, даже если в 00-security.conf уже задан PermitRootLogin no. Разбираю приоритет параметров в Match, проверку итоговой конфигурации через sshd -T и -C, …
Почему SSH игнорирует настройки в sshd_config, хотя конфиг кажется правильным? Разбираю порядок обработки Include и файлов sshd_config.d, правило первого найденного значения параметра и распространённую ловушку с PermitRootLogin. …
Исследуем, почему 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 после закрытия конвейера.
Практическое знакомство со strace на примере редактирования файла командой sed. По системным вызовам openat, read, write и rename разбираем работу временного файла и поиск ошибок доступа.
Перенаправляем stdout и stderr уже запущенного процесса в /dev/null без остановки. На примере tail, /proc и gdb разбираем файловые дескрипторы и вызов dup2 для потоков 1 и 2.
Практический разбор зависания PHP-FPM и ошибки 502 Bad Gateway с помощью strace и lsof. По файловому дескриптору находим недоступный Elasticsearch, из-за которого воркер перестаёт обрабатывать запросы.
Разбираем странный вывод Jase64 вместо base64 с помощью strace и системного вызова write. Смотрим, как ESC-последовательности проходят через псевдотерминал и почему эмулятор терминала скрывает первый символ сообщения об ошибке.
Разбираем устройство разделяемых библиотек Linux, их полные имена, soname и компоновочные ссылки. Смотрим правила major, minor и patch, создаём библиотеку через gcc и проверяем зависимости с ldconfig и ldd.
Разбираем двойную обработку команд в Bash через eval на примерах brace expansion, косвенного раскрытия переменных и файловых дескрипторов. Показываем, почему перенаправление с переменной требует ещё одного прохода интерпретатора.
Включаем создание core dump через sysctl и ulimit, намеренно вызываем segmentation fault в программе на C и исследуем дамп памяти в GDB. По стеку и значению указателя находим причину падения и исправляем код.
Воспроизводим ситуацию, когда процесс продолжает писать в удалённый лог через открытый файловый дескриптор. Восстанавливаем содержимое через /proc, а затем с помощью GDB переключаем работающий процесс на новый файл без …
Разбираемся, почему Linux при нехватке памяти завершает не обязательно самый большой процесс. Смотрим oom_score и oom_adj, меняем вероятность завершения процесса и задаём OOMScoreAdjust в systemd-юните.
Знаешь это чувство, когда ждёшь регресс дольше, чем сам работаешь? У меня рантайм был 34 минуты, и две трети времени уходило на очистку QA-стенда. Решение пришло через Docker и Testcontainers — теперь тесты летят за 14 минут, а …
Однажды я вручную гонял регресс 5 недель. Больше я так не хочу. Я построил фреймворк, который за 30 минут прогоняет то, на что раньше уходил месяц. Но главное — на этапе проектировки запросов мы нашли столько дефектов в SOAP API, …
Настраиваем выпадающие списки 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-агентства о массовом отклике, жёстком отборе кандидатов и том, как не потерять …
Обычно сеньоры бегут на повышение, а я сделал наоборот. Ко мне пришёл парень с ипотекой, детьми и страхом перемен. Вместо того чтобы дрыгаться в поисках жирного оффера на ту же позицию, мы занизили грейд до мидла. И получили …
Я расскажу тебе всю правду про нынешний рынок вакансий без соплей и розовых очков. На моих глазах QA ищут по 2000 резюме за неделю, а сеньоры внезапно становятся джунами в глазах рекрутеров. Разберем, стоит ли прыгать в новую …
Часто слышу, что автоматизировать sftp на Windows XP‑10 невозможно без кучи сторонних утилит. На деле всё проще. Я разобрался, как затащить sftp с ключами на такие системы. Самое смешное — WinSCP пришлось настроить так, чтобы он …
Как я поймал скрытый SSH трафик с Android и iPhone через opnSense. Люди до сих пор думают, что угрозы это когда хакер в худи ломает Пентагон. На деле твой смартфон сам бодро шатает чужие SSH порты пока ты листаешь мемы. Я проверил …
Почему современный инструментарий — это не лень, а прокачка навыков и продуктивности.
Почему без чёткого технического задания толку от работы мало. Делюсь простыми советами, как составлять ТЗ, чтобы не заблудиться в проекте.
Уроки экономии на технических сервисах. Немного циничный, но честный взгляд на бюджетирование в IT, как не попасть в ловушку «сэкономить и потерять».
Выбираем и включаем плагин шифрования в Obsidian, чтоб критичные данные нигде не светились.
Неожиданный звонок и разоблачение сотрудника, который решил обмануть систему. Или как айтишная скука переростает в детектив.
Утилита 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. Делюсь крутым инструментом, который помогает легко и прозрачно защитить свою приватность на всех популярных ОС. …
Знаешь это чувство, когда ждёшь регресс дольше, чем сам работаешь? У меня рантайм был 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 — …
Я знаю, что сейчас все гонятся за JSON, и это удобно для новичков. Но когда речь заходит о реальной работе с большими логами, я всегда возвращаюсь к awk. Мой опыт показывает, что для быстрых фильтров и обработки огромных объемов …
Сегодня расскажу как пентестеры и черношляпы повышают привилегии на Linux машинах и получают root доступ. Без уязвимостей и эксплоитов.
Если 1С начинает работать с ошибками и стандартные методы не помогают, причина может быть в повреждённых файлах. В посте показан способ сравнения каталогов с помощью rsync и md5sum. Разбираем, как найти расхождения и подтвердить …
Как автоматизировать sftp через скрипты. Объясню, почему key-based authentication это важно и как batch-mode помогает ловить ошибки.
В этом посте разберём, как легко и удобно извлекать нужные части из строки с помощью групп в регулярках Bash. Всё на живом примере создания и фильтрации файлов.
Почему без чёткого технического задания толку от работы мало. Делюсь простыми советами, как составлять ТЗ, чтобы не заблудиться в проекте.
Иногда хочется заставить процессор работать на полную, а иногда сберечь батарею. Расскажу, как это сделать с помощью governors и небольшого bash-скрипта.
Делюсь скриптом и лайфхаками, которые помогли нам понять, где именно «тормозит» база и 1С в реальной работе.
Работая с SOAP тестами, я нашёл способ не тонуть в xml и не мучиться с Postman — делюсь рецептом автоматизации через WSDL.
Навигация по знаниям
Скрипты, однострочники, awk, cron, mapfile и практическая автоматизация рутины.
→ DevOps и рабочие процессыCI/CD, инфраструктура, Ansible, пайплайны, рабочие практики и инженерная рутина.
→ Docker, Podman и контейнерыВсе про контейнеры: Docker, Podman, сборки, окружение, управление и смежные инструменты.
→ Linux и администрированиеСистемное администрирование Linux, диагностика, утилиты, права, systemd, файловые системы и сеть.
→