Компактный компьютер с консолью проверки systemdФото: Andrey Matveev / Pexels
← Все подборки Маршрут Bashdays

Linux и администрирование

Системное администрирование Linux, диагностика, утилиты, права, systemd, файловые системы и сеть.

linuxsystemdsshiptablescronfsckjournaljournald
174 материалов в подборке
О подборке

Подборка для повседневной Linux-практики: команды, настройки, сервисы, диагностика и системные мелочи, которые экономят часы.

Сначала новые

Материалы маршрута

Материалов: 174

devops

JSON-логи Nginx в systemd journal

Настраиваем log_format Nginx для структурированных JSON-логов и отправляем access_log и error_log в systemd journal через syslog. Также разбираем параллельную запись в разные форматы для отладки.

bash

Зачем командам двойное тире

Разбираем назначение разделителя -- в командах Linux и показываем его работу на примерах ssh, cat и rm. Учимся безопасно передавать имена файлов и аргументы, начинающиеся с дефиса.

bash

Как отвязать процесс от терминала через setsid

Практическое сравнение setsid и nohup для запуска Bash-скриптов независимо от текущего терминала. Смотрим дерево процессов через pstree и разбираемся, когда создаётся новый сеанс.

networks

Как получить срок действия домена .to

Разбираемся, почему обычный whois не показывает Expires on для доменной зоны .to. Находим WHOIS-сервер зоны, обращаемся к сервису Tonic через curl и получаем дату окончания регистрации.

linux

Чем rm отличается от unlink

Сравниваем команды rm и unlink в Linux: системные вызовы, обработку отсутствующих файлов, шаблоны и каталоги. Показываем, когда unlink удобнее для контроля ошибок в Bash-скриптах.

soft

Bat вместо cat для удобного просмотра файлов

Знакомимся с утилитой bat — улучшенным просмотрщиком файлов с подсветкой синтаксиса, нумерацией строк и интеграцией Git. В статье собраны установка, alias для batcat и основные примеры команд.

bash

Защита от повторного запуска через lckdo

Используем lckdo из пакета moreutils, чтобы второй экземпляр скрипта не запускался одновременно с первым. Рассматриваем lock-файл, ожидание через -w и безопасный запуск периодической задачи cron.

linux

Как скрыть процессы Linux через hidepid

Ограничиваем видимость чужих процессов на многопользовательском Linux-сервере через параметры hidepid для /proc. Разбираем временное монтирование, запись в fstab и исключения доступа по группе gid.

bash

Многопоточное чтение файлов на Bash через FIFO

Практический Bash-скрипт для параллельной обработки строк файла с ограничением числа потоков через FIFO. Разбираем именованный канал, файловый дескриптор и простой семафор без GNU parallel.

bash

Проверка переменной в Bash через -z

Проверяем, определена ли переменная Bash, с помощью условного выражения -z и расширения параметра ${VAR+x}. Пошагово разбираем результаты, режим set -x, export и unset.

games

Три игры для изучения командной строки Linux

Три игровых тренажёра для изучения командной строки Linux: BashCrawl, Terminus и CL Mystery. Они помогают практиковать навигацию, команды и логику в формате текстовых приключений и детективных квестов.

linux

Фильтрация файлов через awk без сортировки

Показываем, как отфильтровать строки одного текстового файла по списку из другого с помощью конструкции NR == FNR и массива awk. Разбираем работу NR, FNR и next, выбор столбцов и ограничение по памяти без обязательной …

bash

Как отвязать запущенный процесс от терминала

Спасаем долгий процесс, случайно запущенный без nohup или screen. Комбинация Ctrl+Z и команды bg, disown и fg позволяют остановить задачу, продолжить её в фоне и отвязать от текущей оболочки.

linux

Как предупредить и отключить пользователей Linux

Готовим публичный Linux-сервер к техническим работам: блокируем новые входы через /etc/nologin, рассылаем предупреждение командой wall и завершаем пользовательские сессии. Дополнительно рассматриваем write и прямую запись в …

linux

Логирование cron-задач и ротация логов

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

linux

Настройка XRDP на Debian для удалённой работы

Практический опыт запуска XRDP на Debian с окружениями XFCE и LXDE и клиентом xfreerdp. Разбираем установку, удобный alias подключения и проблемы с раскладкой, логами, пользовательскими сессиями и 1С.

linux

Проверка целостности пакетов через debsums

Утилита debsums сверяет файлы установленных Debian-пакетов с эталонными контрольными суммами. Разбираем полную проверку, поиск изменённых файлов и конфигураций после взлома или миграции сервера.

networks

Установка iVentoy для сетевой загрузки ISO

Настраиваем iVentoy как простой PXE-сервер для установки Linux и Windows по сети без флешек. В материале есть команды установки, запуск веб-интерфейса, каталог ISO и unit-файл systemd.

security

SSH-бастион без доступа в интернет

Строим связку из SSH-бастиона и изолированной машины без выхода в интернет для удалённых пользователей. Настраиваем ключи, принудительную оболочку и автоматический переход на внутренний сервер.

linux

Как запускать долгие скрипты в screen

Разбираем запуск долгих задач в именованных screen-сессиях, подключение через -r и -x и корректное отсоединение сочетанием Ctrl+A, d. Показываем фоновый запуск, передачу команд в сессию и организацию логирования.

bash

Как кэшировать управляющие последовательности tput

Разбираемся, почему многократные вызовы tput замедляют Bash-скрипт, и один раз сохраняем управляющие последовательности терминала в переменные. Показываем печать, экранирование и практические однострочники.

linux

Как переназначить Ctrl+C в Linux

Смотрим текущие настройки терминала через stty -a и меняем символ прерывания процесса с Ctrl+C на другое сочетание клавиш. Разбираем возврат настройки, запись в shell-конфиг и альтернативу через xbindkeys.

security

ED25519 против RSA для SSH

Разбираемся, почему короткий ключ ED25519 не слабее длинного RSA, какие типы SSH-ключей поддерживает OpenSSH и как конвертировать PPK из PuTTYgen. Практические команды для генерации и преобразования ключей.

networks

Как безопасно переконфигурировать сеть по SSH

Сценарий отката сетевой конфигурации удалённого Linux-сервера без IPMI и локального администратора. Резервная копия /etc, задание cron после перезагрузки и проверка успешного входа по SSH.

bash

Как временно отключить alias в Bash

Пять способов запустить исходную команду в Bash, не удаляя alias из конфигурации оболочки. Показываем экранирование, кавычки, полный путь, command и unalias с восстановлением настроек.

networks

Как распределить трафик между двумя IP

Настраиваем второй IP-адрес на VPS и распределяем исходящие соединения между двумя адресами через iptables SNAT. Проверяем выбор интерфейса в curl и случайную маршрутизацию с вероятностью 50%.

linux

Почему число 42 встречается в GNU, Vim и Emacs

Ищем культурный след числа 42 в справке Vim, документации Emacs и сообществе GNU. Разбираемся, как ответ из «Автостопом по галактике» стал устойчивой шуткой в мире программирования.

linux

Удалённый Linux-рабочий стол с GPU

Сравниваем X11 Forwarding и RDP в Docker для удалённой работы с графическими приложениями на Linux-сервере. Разбираем подключение GPU NVIDIA и AMD, необходимые устройства контейнера и безопасный SSH-туннель.

bash

Восстановление правил iptables после запуска Docker

Пишем Bash-скрипт, который проверяет цепочку DOCKER-USER и восстанавливает правила iptables после изменений Docker. Добавляем список разрешённых IP и безопасный запуск проверки через cron.

linux

Как усилить парольную авторизацию SSH в Linux

Настраиваем обязательную смену пароля, требования libpam-pwquality и защиту fail2ban для SSH. Разбираем минимальный набор мер, если клиент отказывается переходить на ключи.

bash

Таймеры и сопроцессы в Bash без sleep

Экспериментируем с coproc, массивом COPROC и тайм-аутом команды read. На примерах разбираем обмен через файловые дескрипторы и ограничения такого таймера.

security

Шифрование пикселей PNG через ImageMagick

Шифруем пиксели PNG с парольной фразой или отдельным файлом-ключом через ImageMagick. Проверяем расшифровку, ограничения форматов и сохранение открытых метаданных.

bash

Зачем нужна команда enable в Bash

Разбираем встроенную команду enable в Bash: отключаем shell builtin, переключаемся на дисковую утилиту и загружаем расширения оболочки. Показываем работу с test, mkdir и BASH_LOADABLES_PATH.

linux

Как настроить zram и отключить zswap

Отключаем zswap через параметры GRUB и настраиваем сжатие оперативной памяти с помощью zram. Показываем Bash-скрипт и конфигурацию systemd-zram-generator с алгоритмом lz4.

bash

Как проверить доступ к Git-репозиторию в Bash

Проверяем существование удалённого Git-репозитория и доступ к нему через git ls-remote. Пишем Bash-скрипты для HTTPS и SSH, отключаем интерактивные запросы и возвращаем понятные коды ошибок.

bash

Как работает RANDOM в Bash

Исследуем генератор псевдослучайных чисел RANDOM в Bash на примере безопасной русской рулетки. Разбираем seed, влияние BASH_COMPAT и различия поведения между версиями оболочки.

debug

Как расшифровать ошибки MySQL через perror

Разбираем числовой errno из лога MySQL с помощью штатной утилиты perror. На примере ошибки 24 находим лимит открытых файлов и проверяем open_files_limit, ulimit и системные ограничения.

linux

Как установить сертификаты Минцифры в Ubuntu

Устанавливаем корневой и подчинённый сертификаты Минцифры в Ubuntu одной shell-командой. Проверяем subject, SHA-1 fingerprint и цепочку OpenSSL, обновляем системное хранилище CA и тестируем HTTPS через curl.

networks

Контроль новых IP и MAC через csh и awk

Контролируем появление новых связок IP и MAC в сетях DMZ и LAN на OPNsense. Скрипты csh и awk сравнивают ARP-таблицу со справочником и отправляют уведомление в Telegram без раскрытия инфраструктуры.

bash

Перезапуск сервиса по длине очереди RabbitMQ

Пишем Bash-скрипт, который проверяет длину очереди RabbitMQ по SSH и перезапускает зависший микросервис при накоплении писем. Разбираем cron, rabbitmqctl, awk и запуск команд от отдельного пользователя.

bash

Подключение к бастиону по хоткею Alt+B

Привязываем SSH-подключение к bastion-серверу к комбинации Alt+B в Bash через функцию и bind -x. Также разбираем псевдотерминал, reset и вариант конфигурации для Zsh.

bash

Чем export отличается от переменной Bash

Показываем разницу между обычной переменной Bash и переменной окружения, объявленной через export. Проверяем наследование в подпроцессах и разбираем обходной способ передачи массивов через строку.

linux

Автоматический бэкап на USB через udev и systemd

Настраиваем автоматическое монтирование NTFS-диска и запуск резервного копирования на сервере без GUI. Связываем правило udev, mount-юнит и systemd-сервис с выводом статуса на tty1.

security

Белый список команд SSH через ONLY

Настраиваем белый список команд для SSH-пользователя с помощью Bash-скрипта ONLY и директивы command в authorized_keys. Разбираем ключи, ограничения сессии и правила .onlyrules без выдачи интерактивной оболочки.

bash

Как dd обновляет прогресс в одной строке

Разбираем, как dd обновляет статистику через stderr и символ возврата каретки. Превращаем динамический прогресс в строки и пишем Bash-бенчмарк для сравнения скорости при разных размерах блока.

debug

Как найти узкое место в pipe через strace

Используем strace с измерением времени системных вызовов, чтобы увидеть блокировку записи в Linux pipe. Разбираем сложную команду и находим скачок задержки после заполнения буфера объёмом 65536 байт.

linux

Как создать и завершить зомби-процесс в Linux

Создаём зомби-процесс на C и Bash, находим его и родительский PID через ps и разбираем завершение процесса. Объясняем, почему kill по PID зомби не помогает и когда такие записи можно не трогать.

self-hosted

Проброс PCI-устройств в Proxmox

Настраиваем IOMMU и PCI passthrough в Proxmox для передачи физических устройств виртуальным машинам. Разбираем параметры GRUB, модули VFIO, изоляцию GPU и проброс диска по стабильному идентификатору.

self-hosted

Raspberry Pi 5 с NVMe и резервным питанием

Собираем Raspberry Pi 5 с NVMe-диском и резервным питанием на аккумуляторах 18650. Разбираем комплект Geekworm, запуск вентилятора через Python-сервис, стресс-тесты и нюансы питания платы расширения.

linux

Systemd-таймеры против cron

Сравниваем systemd timers и cron на практическом примере: создаём service и timer, запускаем задачу каждую минуту и включаем автозагрузку. Разбираемся, когда гибкость таймеров оправдана, а когда сотни unit-файлов только усложняют …

bash

Аргументы скрипта в Bash

На примерах сравниваем специальные переменные $@ и $* в Bash с кавычками и без них. Показываем разбиение аргументов с пробелами, объединение в одну строку и влияние разделителя IFS.

bash

Как проверить каталоги в PATH одной командой

Разбираем Bash-команду, которая проверяет каждый элемент PATH и выводит отсутствующие или недоступные каталоги. Пошагово объясняем set -f, IFS, проверку переменной, права доступа и диагностику путей через namei.

linux

Как раскрасить логи в терминале с ccze

Утилита ccze добавляет цветовую подсветку к системным логам в терминале и выделяет ошибки. Показываем работу с cat и tail, сохранение последних строк в цветной HTML-файл и просмотр доступных плагинов.

linux

Мониторинг RAID и дисков через email

Настраиваем автоматическую проверку SMART и RAID-массива с почтовыми уведомлениями. Используем smartmontools, smartd, mdadm и лёгкий SMTP-клиент msmtp для отправки сообщений о сбоях дисков.

linux

Почему ls теряет цвета в pipe

Исследуем, почему ls отключает ANSI-цвета при передаче вывода через pipe. С помощью strace находим ENOTTY, подменяем результат ioctl и возвращаем управляющие последовательности опциями color=always и cat -v.

linux

Как делиться терминалом через tty-share

Настраиваем общий доступ к терминалу Linux и macOS через tty-share без тяжёлых видеозвонков. Разбираем публичную и локальную сессии, режим только для чтения, завершение процесса и альтернативные инструменты.

linux

Как изолировать SSH-пользователя через chroot

Создаём ограниченное окружение chroot для SSH-пользователя в Linux. Копируем Bash и зависимости через ldd, настраиваем ChrootDirectory и по одной добавляем разрешённые утилиты.

bash

Как ограничить время выполнения команды в Linux

Разбираем утилиту timeout для ограничения времени работы команд и скриптов в Linux. Показываем длительности, сигналы завершения, удалённый запуск через SSH и вариант на чистом Bash.

linux

Почему rm -rf удаляет систему

Разбираем Патч Бармина и поведение команды rm -rf /* в Unix-системах. Показываем раскрытие glob оболочкой, права на каталоги, интерактивный режим и защиту --preserve-root=all.

bash

Как Bash обрабатывает сигналы

Объясняем коды завершения после SIGINT и SIGTERM и настраиваем обработчики сигналов через trap в Bash. Разбираем, почему получается код 130, как изменить поведение скрипта и почему SIGKILL нельзя перехватить.

linux

Как найти шрифты с кириллицей в Linux

Ищем Linux-шрифты с кириллическими глифами через fc-list и сопоставляем их со шрифтами ImageMagick. Затем Bash-скрипт генерирует образцы русской буквы «А» для каждого найденного файла.

linux

Как устроена справочная система man

Разбираем разделы справочной системы man: команды, системные вызовы, форматы файлов, административные утилиты и функции ядра. Показываем поиск через man -k, страницы intro и вывод справки в HTML.

linux

Какая оболочка быстрее Bash или Zsh

Сравниваем скорость запуска Bash и Zsh вручную и с помощью shellbench. Заодно разбираем плагины Oh My Zsh, автодополнение и место Dash среди быстрых POSIX-оболочек.

security

Безопасное меню команд через SSH

Ограничиваем SSH-пользователя интерактивным меню разрешённых административных команд. Bash-скрипт, ForceCommand и точечное правило sudoers дают перезапускать сервисы без полноценного доступа к серверу.

bash

Интерактивный проброс портов через SSH

Bash-скрипт для интерактивного проброса TCP-портов через SSH jump-сервер. Готовое меню помогает подключаться к службам во внутренних сетях, не меняя конфигурацию вручную.

bash

Как использовать heredoc в Bash

Разбираем heredoc в Bash на практических примерах с cat, sed, перенаправлением в файл и удалённым запуском команд по SSH. Показываю, как управлять подстановкой переменных и отступами.

security

Как настроить 2FA для SSH

Пошаговая настройка двухфакторной аутентификации SSH через PAM и Google Authenticator. Разбираем конфигурацию sshd, одноразовые коды, резервный доступ и безопасную проверку новой схемы входа.

debug

Как отлаживать sed с помощью strace

Практическое знакомство со strace на примере редактирования файла командой sed. По системным вызовам openat, read, write и rename разбираем работу временного файла и поиск ошибок доступа.

linux

Как отслеживать изменения в /etc с etckeeper

Etckeeper превращает каталог /etc в Git-репозиторий и помогает отслеживать, фиксировать и откатывать изменения конфигурации Linux. Разбираем установку, удалённый репозиторий, коммиты и автоматизацию через incron.

bash

Стеганография в правах доступа Linux

Прячем ASCII-сообщение в девяти битах прав доступа Linux-файлов. На Bash разбираем сдвиги битов, восьмеричные режимы chmod и кодирование текста последовательностью файлов.

linux

Чем отличаются su и sudo

Сравниваем su и sudo: чьи пароли они запрашивают, как переключают пользователя и что происходит с переменными окружения. Разбираем дефис у su и различия ключей sudo -s и sudo -i.

self-hosted

Что я запустил на домашнем Proxmox

Домашний сервер на Proxmox с 11 LXC-контейнерами: Jellyfin, Sonarr, Radarr, Syncthing, Pi-hole и другие сервисы. Рассказываю, как устроена моя компактная self-hosted инфраструктура на мини-ПК.

debug

Как найти зависание PHP-FPM с помощью strace

Практический разбор зависания PHP-FPM и ошибки 502 Bad Gateway с помощью strace и lsof. По файловому дескриптору находим недоступный Elasticsearch, из-за которого воркер перестаёт обрабатывать запросы.

linux

Как подключиться из WSL к VirtualBox по SSH

Настраиваем проброс SSH-портов VirtualBox, чтобы подключаться к гостевой Ubuntu из WSL через Windows-хост. Разбираем правила NAT для localhost, локальной сети и VPN, а затем добавляем удобные алиасы.

bash

Коды завершения команд в Bash

Разбираем коды завершения Linux-команд от 0 до 255 и специальную переменную $?. Учимся сохранять статус, строить обработку ошибок и завершать Bash-скрипт нужным кодом через exit.

linux

Магические числа перезагрузки Linux

Разбираемся, что такое magic numbers в ELF-файлах и какие константы ядро Linux требует для системного вызова reboot. В примерах — readelf, фрагменты kernel/reboot.c и пасхалки с датами семьи Линуса Торвальдса.

linux

Маршрутизация ответов через отдельный шлюз

Настраиваем policy-based routing для сервера с двумя шлюзами: API-трафик уходит через один маршрут, а ответы SSH и HTTP возвращаются через внешний шлюз. Используем netplan, отдельную таблицу маршрутизации, ip rule, iptables MARK и …

linux

Condition и Assert в systemd

Настраиваем условный запуск systemd-юнитов через ConditionPathExists и другие директивы Condition. Сравниваем пропуск юнита с ошибкой Assert и комбинируем проверки существования и монтирования ресурсов.

bash

База данных на Bash

Строим простой индекс для большого отсортированного текстового файла с помощью ассоциативного массива Bash и sed. Ограничиваем поиск диапазоном строк по первой букве и ускоряем извлечение данных без тяжёлой СУБД.

linux

Как OOM Killer выбирает процессы в Linux

Разбираемся, почему Linux при нехватке памяти завершает не обязательно самый большой процесс. Смотрим oom_score и oom_adj, меняем вероятность завершения процесса и задаём OOMScoreAdjust в systemd-юните.

linux

Как автоматически перемонтировать SSHFS через systemd

Монтируем удалённое хранилище через SSHFS и берём подключение под контроль systemd. Создаём mount-, timer- и service-юниты, которые ждут сеть, проверяют маркерный файл и автоматически перемонтируют шару после сбоя.

linux

Как восстановить удалённый лог через файловый дескриптор

Воспроизводим ситуацию, когда процесс продолжает писать в удалённый лог через открытый файловый дескриптор. Восстанавливаем содержимое через /proc, а затем с помощью GDB переключаем работающий процесс на новый файл без …

bash

Как запускать команды параллельно в Bash

Запускаем фоновые команды в Bash через оператор &, управляем заданиями с помощью wait и jobs и получаем PID через $!. Собираем параллельный загрузчик файлов и сравниваем нативный подход с GNU Parallel.

linux

Как отладить core dump в Linux

Включаем создание core dump через sysctl и ulimit, намеренно вызываем segmentation fault в программе на C и исследуем дамп памяти в GDB. По стеку и значению указателя находим причину падения и исправляем код.

bash

Как передавать события сигналами реального времени в Bash

Строим взаимодействие между Bash-процессами через сигналы SIGRTMIN и trap без временных файлов. Пишем сервер-слушатель и клиент, разделяем события по индексам сигналов и разбираем порядок обработки и приоритеты.

linux

Как работают нулевые байты в Linux

Экспериментируем с /dev/zero, поведением read и нулевым символом в C-строках. Затем находим смещение строки через strings и точечно патчим бинарный файл одним нулевым байтом с помощью dd.

linux

Как работают разрежённые файлы в Linux

Разбираемся, как sparse-файлы экономят физическое место на диске, но сохраняют заявленный логический размер. Создаём разрежённый файл через dd и truncate, форматируем его в ext4 и выясняем, как эту технологию используют …

bash

Как ускорить find с exec и xargs

Разбираем разницу между суффиксами ; и + у find -exec, сокращаем число запускаемых процессов и подключаем xargs для параллельной обработки файлов. Практические команды помогают ускорить поиск и безопасно передавать группы …

linux

Как устроены версии shared libraries в Linux

Разбираем устройство разделяемых библиотек Linux, их полные имена, soname и компоновочные ссылки. Смотрим правила major, minor и patch, создаём библиотеку через gcc и проверяем зависимости с ldconfig и ldd.

linux

Почему base64 превращается в Jase64

Разбираем странный вывод Jase64 вместо base64 с помощью strace и системного вызова write. Смотрим, как ESC-последовательности проходят через псевдотерминал и почему эмулятор терминала скрывает первый символ сообщения об ошибке.

linux

Типы оболочек в Linux

Разбираем interactive, non-interactive, login, non-login, restricted и другие типы оболочек Linux. Смотрим, какие файлы профиля они читают, почему скрипт работает вручную, но ломается в cron, и как определить текущий режим.

linux

Куда пропало место на диске

Почему df показывает 100% занятого места, а du и ncdu не находят крупные файлы. Разбираю Hidden Space Explorer (hsed) — TUI-утилиту для поиска удалённых, но открытых файлов в Linux, освобождения дискового пространства и …

security

Как Match переопределяет настройки sshd_config

Как блоки Match в sshd_config могут переопределить глобальные настройки SSH, даже если в 00-security.conf уже задан PermitRootLogin no. Разбираю приоритет параметров в Match, проверку итоговой конфигурации через sshd -T и -C, …

security

Порядок настроек в sshd_config

Почему SSH игнорирует настройки в sshd_config, хотя конфиг кажется правильным? Разбираю порядок обработки Include и файлов sshd_config.d, правило первого найденного значения параметра и распространённую ловушку с PermitRootLogin. …

linux

Как экспортировать WSL в tar-архив

Как быстро сделать полный бэкап WSL-дистрибутива в Windows и перенести рабочее окружение Linux без долгого копирования файлов. Показываю команды wsl --shutdown и wsl --export для создания tar-архива Ubuntu, объясняю, зачем …

qa

Сколько стоит фреймворк автоматизации #1

Однажды я вручную гонял регресс 5 недель. Больше я так не хочу. Я построил фреймворк, который за 30 минут прогоняет то, на что раньше уходил месяц. Но главное — на этапе проектировки запросов мы нашли столько дефектов в SOAP API, …

devops

Termix бесплатный менеджер серверов. Обзор

Я потыкал Termix, бесплатный аналог Termius. И Termix выигрывает в открытости, поддержке SSH туннелей и возможности управлять файлами из браузера. Минусы – нестабильный VNC, странные анимации панели и наверное необходимость ручных …

bash

Почему лишние условия убивают читаемость в Bash

Мне за 30, я видел много скриптов с дьявольскими отрицаниями, и каждый раз хотелось задушить автора. Поэтому я решил написать пост, в котором покажу как превратить кошмарную конструкцию в простой if-else без единого лишнего знака. …

devops

Как перейти с Docker на Podman

Вместе с Романом Шубиным, СТО и автором канала Bash Days, собрали отдельный мини-курс по Podman. Внутри — восемь материалов, которые помогут освоить инструмент с открытым исходным кодом для работы с контейнерами.

devops

Секрет ускорения Docker сборки

Дружище, если твой Dockerfile начинается с COPY и только потом npm install, то соболезную. Каждая твоя сборка переустанавливает зависимости заново, хотя они сто лет не менялись. Я сам так делал, пока не понял, что кеш Docker …

dev

Less и секретный режим мониторинга

Я пробовал разные инструменты, но только less позволил мне объединить просмотр и поиск в одном окне. Я могу прыгать по строкам, искать IP‑адреса и мгновенно возвращаться в режим слежения нажатием SHIFT+F. Это экономит кучу времени …

linux

Тайна вызова Less в Linux утилитах

Знаешь этот бесконечный скролл в git log? Кто-то привык к пагинации, кто-то тупо шпарит grep. Я расскажу тебе как git управляет выводом истории коммитов через внешнюю утилиту less. И да, если её убить — простыня посыплется без …

security

Массовый SSH‑скан в своей Wi‑Fi сети

Как я поймал скрытый SSH трафик с Android и iPhone через opnSense. Люди до сих пор думают, что угрозы это когда хакер в худи ломает Пентагон. На деле твой смартфон сам бодро шатает чужие SSH порты пока ты листаешь мемы. Я проверил …

devops

S3 кластер на Garage, как прикрутить HAProxy

В прошлый раз я тебе показал как собрать S3 кластер из трех серверов на Garage. Теперь самое время накрутить ему балансировщик и SSL сертификат чтобы всё работало как часы даже если одна из нод ляжет спать. В этой части мы ставим …

devops

Свой S3 или пошаговая настройка Garage

Три рандомных сервака, композник и голый opensource — вот мой рецепт собственного S3 облачного хранилища. Garage не просит денег, реплицирует данные на все ноды и переживает падение любого сервера. Инструкция для тех, кто не …

bash

Awk для новичков. Как автоматизировать анализ логов

Я знаю, что сейчас все гонятся за JSON, и это удобно для новичков. Но когда речь заходит о реальной работе с большими логами, я всегда возвращаюсь к awk. Мой опыт показывает, что для быстрых фильтров и обработки огромных объемов …

bash

15 функций Bash, которые стоит добавить в .bashrc

Если ты часто работаешь в командной строке, тебе точно пригодится подборка моих bash-функций для .bashrc. Они делают рутинные задачи намного удобнее и быстрее. Зацени и добавь себе.

security

Настройка Yubikey + WSL2 + SSH

Как подключить физический YubiKey к WSL2, чтобы использовать его для SSH без паролей и SMS. Разберёмся с проблемами прокидывания USB в WSL и сделаем автоматический скрипт, который решит баги с повторным подключением ключа.

devops

Получаем SSL сертификат на IP адрес

Если не хочется связываться с доменами, но нужен SSL на IP — вот мой опыт и инструкция, как это сделать с помощью Let's Encrypt и acme.sh. Всё просто и понятно!

linux

Как быстро скачать файл с сервера

Часто нужно быстро скачать файл с сервера, а настроить что-то сложное лень? Я расскажу, как с помощью одной команды Python поднять простой веб-сервер и скачать любой файл за пару секунд.

bash

Капча под контролем или как нажать F24

Я придумал хитрую капчу и покажу как с помощью xdotool ее можно эффективно обойти. Роботы же начинают троить, кейс отлично подходит под нишевые проекты с защитой от дурака.

soft

Терминальный браузер нового поколения

Если любишь терминал и хочешь попробовать что-то новое, Brow6el для тебя. Сборка не из пакетов, но есть скрипты. Браузер поддерживает графику, скрипты и все современные фишки.

self-hosted

Домашний почтовый сервер на домене

Недавно решил перенести почтовый сервер к себе домой, чтобы сэкономить пару тысяч в месяц. В статье — как настроить прокси с angie и обойти отсутствие белого IP.

linux

Bind vs Volume в Docker

Если ты тоже путаешься, что лучше — bind или volume, этот пост для тебя. Покажу основные правила и примеры из жизни, чтобы ты не писал дичь и не ломал себе окружение.

self-hosted

Stop Using Pi-Hole – Technitium DNS Is Better

Если ты устал от сложных настроек DNS и хочешь кластер «из коробки», расскажу, как я быстро развернул Technitium DNS с минимальными усилиями.

linux

Настройка Pi-Hole кластера

Быстро и просто о том, как заставить Pi-Hole ноды работать с одинаковыми настройками в синхронном режиме.

self-hosted

Хакнем Proxmox. Кластер из 2 нод без кворума

Обходим проблемы кворума в Proxmox. Забудьте о сбоях при потере одной ноды, кластер остаётся живым, а бэкапы проходят без ошибок. Простой способ сделать домашнюю лабораторию надёжной.

self-hosted

Прощай Helper scripts. Запускаем OCI в Proxmox 9.1

В этом разборе показываю, как в Proxmox 9.1 работает новая нативная поддержка OCI-образов. На примере nginx:latest скачиваем образ из Docker Hub, превращаем его в LXC-контейнер и запускаем без единой команды Docker. Разбираем, как …

self-hosted

Обновляем Proxmox 8 до Proxmox 9 (OCI)

Подробная инструкция по переходу на новую ветку Debian Trixie в Proxmox. Фиксим репы, обновляем ключи, прогоняем pve8to9 и устанавливаем всё, что предлагает система. Даю комментарии по каждому этапу, чтобы апдейт не превратился в …

linux

Load Average на пальцах

Пошаговый разбор Load Average с примерами и советами, чтобы ты всегда знал, когда пора бежать к серверу, а когда можно спокойно пить пиво.

devops

Туалетная бумага по cron’у

Каждый месяц я забывал заказать туалетную бумагу, пока не написал Bash-скрипт, который делает это за меня. В этом посте расскажу, как с реверсом API и cron’ом автоматизировал рутину.

devops

Как работать с Terraform на выделенных серверах

После того, как я выполнял terraform apply, где-то в дата-центре, специально обученный мальчик шёл ножками, читал мой yaml манифест, плакал, собирал руками железный сервер и передавал мне в работу. Сейчас этот процесс полностью …

soft

Запускаем Windows программы на Linux

WinBoat — маленькое чудо для тех, кто сидит на Linux, но не хочет отказываться от Windows. Это мой новый фаворит для запуска виндовых приложений в Linux без лишних заморочек. Делюсь впечатлениями.

debug

Настройка core dump в Docker

Если приложение в Docker внезапно упало, этот пост поможет настроить сбор дампов и разбираться с ошибками.

services

Визуальный сервис для разбора Bash/Shell команд

Рассмотрим сервис в виде веб-сервиса, который помогает понять, что делает та или иная shell-команда в Unix/Linux. Проще говоря, ты вставляешь команду, а оно разбирает её и объясняет фрагмент за фрагментом, что означает каждая …

Как сохранить правила iptables

Сохранение правил iptables часто плохо реализовано из коробки или отсутствует. Разбираем, как настроить механизм в Linux и не потерять правила после перезагрузки.

soft

TUI штука для замены тормозного Postman

Когда GUI не вариант, Posting — идеальный инструмент, минималистично, понятно, сессии сохраняются — рекомендую всем, кто любит чистый терминал.

linux

Деградация батареи в Linux

Сегодня пакажу, как в Linux узнать степень деградации батареи и вынести этот показатель в аккуратный модуль Waybar.

linux

CRON в первый рабочий день месяца

Сегодня будет обучать cron понимать рабочие и выходные дни. Из коробки этот функционал не работает, да и systemd тут не особо поможет. Так что, придется изобретать очередную кишку.

linux

Reexec VS Reload

Разбираемся с daemon-reload и daemon-reexec, в чем отличия и практическое применение.

devops

Ставим SelectOS в облако

В этой статье я шаг за шагом показываю, как установить SelectOS «с нуля» — прямо из ISO-образа — в облаке Selectel. Рассказываю, с какими трудностями столкнулся (от нехватки памяти до проблем с сетью), и как их обошёл. Подойдёт …

linux

SelectOS в деле

Я решил попробовать поднять GitLab CE на SelectOS без всяких Docker’ов — в лоб, как есть. Завёл раннеры, погонял CI и нагрузку, SelectOS тащит!

linux

Кругом грабли!

Потребовалось мне сегодня поднять один серверный линукс дистрибутив на базе debian. Задача не тривиальная. Но по итогу как обычно подкинули граблей. Раньше всегда был уверен, что если сделать машину с параметрами 1 CPU, 512МБ RAM, …

linux

Пробуем SelectOS

Проникаемся новой операционной системой SelectOS на базе Debian, тыкаем в реальных условиях, смотрим фишки и фичи. Пробуем установить базовый софт и провести нагрузочное тестирование.

bash

Подводные камни в Bash №9

Команда if [ bar = "$foo" ]; проверяет, равны ли два значения. Тут самое важно это — пробелы, про кавычки повторять не буду, ты это уже и так знаешь. Все уши прожужал.

bash

Подводные камни в Bash №8

В Bash конструкция [ ... ] — не часть синтаксиса if, а отдельная команда, аналогичная test. Разбираем, как на самом деле выполняются условия и почему это важно для скриптов.

bash

Подводные камни в Bash №7

Он считает, сколько строк в файле bar.txt содержат слово foo. Здесь главная проблема — переменная count не изменится вне цикла while, потому что в Bash каждая команда в пайплайне (|) запускается в отдельной оболочке (subshell). То …

bash

Подводные камни в Bash №6

Конструкция [[ ... ]] в Bash предназначена для проверки условий, но не для арифметики. Разбираем ошибочное сравнение и правильное применение (( ... )) для чисел.

bash

Подводные камни в Bash №5

Представь две коробки с созвучными подписями. Разбираемся, как Bash интерпретирует строки и почему одинаково выглядящие условия могут давать неожиданный результат.

bash

Подводные камни в Bash №3

Когда в Bash сравниваешь две переменные, важно не про***ться с кавычками. Разбираем, что произойдёт, если переменная $foo окажется пустой.

bash

Подводные камни в Bash №4

Это ошибочный вариант, бэд мать его практика. Команда cd $(dirname "$f") должна вернуть путь к папке, где лежит файл.

bash

Подводные камни в Bash №2

Продолжаем погружаться в Бэд-Практики! В прошлом посте мы рассмотрели файлы, которые начинаются с дефиса и то, что команда cp их может воспринимать как флаг. Ну дак вот. Предыдущие посты про Бэд-Практики ищи по тегу pitfalls Как …

bash

Подводные камни в Bash №1

Вот всё трём мы с тобой за бест-практики, но практически ничего не разбираем по бэд-практикам. Давай это исправлять в контексте Bash скриптов.