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

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

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

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

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

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

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

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

security

Как настроить SSH-доступ по ключам и отключить пароли

Настройка sshd для входа по ключам вместо пароля: PubkeyAuthentication, PasswordAuthentication и PermitRootLogin. Как проверить дополнительные конфиги, выполнить sshd -t и не потерять доступ к серверу при перезагрузке службы.

Фото: Infinity Shutter / Pexels
linux

Как отменить override через systemctl revert

Как вернуть systemd-юнит к версии из пакета после локальных изменений и нескольких drop-in-файлов. На примере nginx разберём, что удаляет systemctl revert и где лежит конфигурация, к которой вернётся служба.

Фото: Ellie Burgin / Pexels
linux

Почему удалённый файл доступен через дескриптор

Что происходит с файлом после unlink, пока процесс удерживает открытый файловый дескриптор. Bash-пример с exec 3, rm и read демонстрирует, почему имя исчезает из каталога раньше, чем содержимое перестаёт быть доступным.

Фото: Kindel Media / Pexels
linux

Зачем ограничивать PATH в Linux

Минимальный глобальный PATH снижает риск запуска программ из неожиданных каталогов и делает автоматизацию предсказуемее. Разбираем настройку через Ansible, применение в CI/CD и проверку доступности curl в чистом окружении.

Фото: Dirk Schuneman / Pexels
linux

Как безопасно обнулить лог-файл

Удаление активного лога через rm разрывает привычный путь к файлу, пока процесс продолжает писать в открытый дескриптор. Разбираем безопасное обнуление через редирект, truncate и сигнал USR1 для Nginx или Apache.

Фото: Thirdman / Pexels
linux

Как настроить значения useradd по умолчанию

Файл /etc/default/useradd задаёт домашний каталог, оболочку, срок действия пароля, umask и другие параметры новых пользователей. Отдельно разбираем GROUP и зависимость его поведения от USERGROUPS_ENAB в login.defs.

Фото: cottonbro studio / Pexels
linux

Как открыть файл на нужной строке

Команды mcedit, less, nano и vim умеют сразу переходить к нужной строке файла. Собираем тестовый файл и сравниваем синтаксис запуска четырёх консольных редакторов и просмотрщиков.

Фото: Daniil Komov / Pexels
bash

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

Простой Bash-скрипт объединяет обычные и сжатые логи в правильном порядке и выводит их в stdout. Разбираем выбор между cat и zcat, сортировку файлов и дальнейшую обработку через grep, awk или sed.

Фото: Rafael Minguet Delgado / Pexels
bash

Что делает kill -0 в Bash

Проверяем существование процесса и права на отправку сигналов с помощью kill -0. Примеры Bash показывают коды возврата, фоновые процессы и ограничения обычного пользователя.

Фото: Susanne Plank / Pexels
linux

Зачем использовать touch перед редактированием файла

Разбираемся, зачем создавать файл командой touch перед открытием в Vim, если редактор и так умеет сохранить новый файл. Обсуждаем раннюю проверку прав на запись, обновление времени модификации и применение touch для lock-файлов и …

Фото: TStudio / Pexels
bash

Как отменить export переменной в Bash

Показываем, как убрать у переменной Bash атрибут экспорта, не удаляя её из текущей оболочки. Сравниваем громоздкий вариант с unset и короткие решения через typeset, declare и export -n.

Фото: Markus Spiske / Pexels
networks

Как поднять SOCKS-прокси через SSH

Настраиваем личный SOCKS5-прокси через SSH без доступа пользователя к shell и SFTP. Ограничиваем аккаунт в sshd_config, запускаем динамический проброс порта и подключаем Firefox с передачей DNS-запросов через прокси.

Фото: Holger Schué / Pexels
linux

Как файловый менеджер определяет тип файла

Проверяем через strace, как Nautilus определяет тип файла по расширению или содержимому. Создаём файл с сигнатурой BZ2, наблюдаем системные вызовы openat и read, а затем сравниваем поведение после добавления расширения txt.

Фото: Eva Bronzini / Pexels
linux

Чем BSD в OPNsense отличается от Linux

Личный опыт переноса shell-скрипта с Linux на OPNsense и BSD. Разбираем различия csh и sh, перенос строк, особенности date и awk, отсутствие /dev/shm и набор консольных редакторов.

Фото: Brian Jesus / Pexels
linux

Timer path и socket три скрытых юнита systemd

Три практических механизма systemd для задач по расписанию, наблюдения за файлами и запуска сервисов по подключению. Примеры юнитов timer, path и socket помогают заменить cron, inotify-tools и постоянно работающие службы.

Фото: Annushka Ahuja / Pexels
bash

Зачем ставить ./ перед запуском скрипта

Объясняем, почему исполняемый файл из текущего каталога запускают через ./ и как оболочка использует PATH. Разбираем безопасность такого поведения, опасность добавления точки в PATH и полные пути для cron.

Фото: Tom Fisk / Pexels
devops

Как масштабировать GitLab Runner без вреда продакшену

Практическая схема размещения GitLab Runner на отдельных серверах без лишней нагрузки на продакшен. Разбираем общие теги, балансировку заданий, регистрацию нескольких раннеров и деплой по SSH.

Фото: Cristian Camilo Estrada / Pexels
bash

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

Эксперимент с передачей текстовых сообщений между Bash-процессами через сигналы SIGRTMIN. Сервер и клиент кодируют символы по битам, обрабатывают границы сообщений и показывают, почему важны задержки.

Фото: Juan Martin Gomez / Pexels
linux

Как перехватить удаление временного файла через strace

Практический разбор отладки неизвестного бинарника через strace и инъекцию ошибки EACCES. Показываем, как остановить unlink, сохранить временный файл и найти гонку, из-за которой выгрузка становилась пустой.

Фото: Pavel Danilyuk / Pexels
bash

Конфиг-агент на Bash для восстановления Nginx

Собираем минимальный конфиг-агент на Bash, который синхронизирует эталонные настройки Nginx из Git. Скрипт с cron, rsync и systemctl автоматически восстанавливает конфиги и перезагружает сервис только при изменениях.

Фото: Omar Ashraf / Pexels
debug

Почему chmod 777 в PHP превращается в 01411

Разбираем странные права 01411 после вызова chmod в PHP и доказываем источник ошибки через strace. На примерах показываем разницу между десятичным 777, строкой и корректным восьмеричным значением 0777.

Фото: Chengxin Zhao / Pexels
bash

Почему mv удаляет файлы при переименовании

Разбираем Bash-скрипт, который при массовом переименовании незаметно теряет половину файлов. На тестовом наборе показываем поведение mv при совпадении имён и используем опцию -b для резервных копий.

Фото: Marlon Castor / Pexels
bash

Зачем использовать env в shebang

Объясняем разницу между жёстким путём к интерпретатору и конструкцией /usr/bin/env в shebang. На примерах с Bash, Python, PATH и виртуальным окружением показываем преимущества и ограничения переносимого запуска скриптов.

Фото: Jordi Gamundi Domenech / Pexels
bash

Как извлечь имя и расширение файла в Bash

Разбираем несколько способов отделить имя файла от расширения в Bash без громоздких регулярных выражений. Используем подстановку параметров, basename, dirname и переменную IFS на понятных примерах.

Фото: cottonbro studio / Pexels
security

Как полностью отключить логирование в Linux

Экспериментируем с отключением системных журналов Linux, journald, rsyslog и истории Bash. Материал показывает, где остаются логи, какие побочные эффекты возникают и почему эти приёмы допустимы только в учебной среде.

Фото: Amorie Sam / Pexels
linux

Как установить Ubuntu 23 или 24 в WSL

Показываем три способа установить свежую Ubuntu в WSL: импортировать rootfs из Docker, выполнить dist-upgrade или поставить Ubuntu Preview. Внутри — команды экспорта контейнера, импорта tar-архива и проверки дистрибутивов.

Фото: Bhavishya :) / Pexels
devops

Почему DevOps-инженеру стоит настраивать серверы без панелей

История о том, как готовая хостинг-панель сломала отлаженный процесс деплоя и заставила разобраться в Linux глубже. Объясняем, почему консольная настройка серверов даёт DevOps-инженеру понимание инфраструктуры, которого не дают …

Фото: Bulat843 / Pexels
linux

locate и globbing для быстрого поиска файлов

Сравниваем locate и find, разбираемся с базой updatedb и ускоряем простой поиск файлов в Linux. На примере strace показываем, как globbing в Bash меняет аргументы команды и почему шаблоны нужно заключать в кавычки.

Фото: RDNE Stock project / Pexels
linux

SSH known_hosts для пользователя без домашнего каталога

Настраиваем SSH-вызов от системного пользователя без домашнего каталога и убираем бесконечный запрос подтверждения fingerprint. Выносим known_hosts в общий каталог, заполняем его через ssh-keyscan и подключаем с параметром …

Фото: Mehmet Turgut Kirkgoz / Pexels
security

SSH-сертификаты для доступа к сотням серверов

Настраиваем собственный центр сертификации SSH, чтобы управлять доступом к сотням серверов без ручного обновления authorized_keys. Разбираем доверие к CA, подпись пользовательских ключей, сроки действия сертификатов и их отзыв.

Фото: Markus Spiske / Pexels
security

Как восстановить доступ после потери приватного SSH-ключа

Семь практических сценариев восстановления доступа к серверу после потери приватного SSH-ключа. Рассматриваем парольный вход, KVM и IPMI, резервную рабочую машину, Rescue Mode и автоматизацию через Ansible или AWX.

Фото: Esra Erdem / Pexels
linux

Как настроить вход по SSH-ключу

Пошагово настраиваем вход на Linux-сервер по SSH-ключу: генерируем пару RSA, восстанавливаем публичную часть, копируем её через ssh-copy-id и выставляем права на authorized_keys. Также разбираем подключение под разными …

Фото: Obi Onyeador / Pexels
linux

Как подменить файл через mount --bind

Символическая ссылка не может заменить уже существующий файл, а bind mount справляется с такой подменой. Проверяем поведение ln -s и mount --bind на двух текстовых файлах.

Фото: Mac Solatorio / Pexels
soft

aria2 ускоряет загрузки в терминале

aria2 — консольный менеджер загрузок с поддержкой HTTP, FTP, SFTP, BitTorrent и Metalink. Он умеет скачивать данные несколькими потоками, работать с чанками и заменять wget через простой alias.

Фото: panumas nikhomkhai / Pexels
linux

CLI Exercises — 77 задач по Linux-терминалу

CLI Exercises — интерактивный тренажёр с 77 заданиями по командной строке Linux, подсказками и несколькими вариантами решений. Показываю установку в отдельное Python-окружение через venv и запуск одной командой.

Фото: Mikhail Nilov / Pexels
soft

Mechvibes превращает обычную клавиатуру в механическую

Mechvibes воспроизводит звуки механических переключателей на обычной клавиатуре в Linux, Windows и macOS. Можно выбрать готовый набор кейкапов, настроить громкость или загрузить собственные звуки для отдельных клавиш.

Фото: Tima Miroshnichenko / Pexels
soft

QEMU-QuickBoot разворачивает виртуалки через GUI

Bash-скрипт QEMU-QuickBoot упрощает создание и загрузку виртуальных машин QEMU через графический интерфейс Zenity. Можно выбрать физическое устройство, ISO, VHD или другой образ и запустить установку с BIOS либо UEFI.

Фото: Panumas Nikhomkhai / Pexels
games

Rick & Morty BASH Quest для практики командной строки

Rick & Morty BASH Quest превращает базовые команды Linux в браузерный текстовый квест. Чтобы найти Саммер и Рика, придётся перемещаться между порталами, читать подсказки и пользоваться ls, cd, cat, pwd и man.

Фото: Anastasia Shuraeva / Pexels
bash

Как дать Bash-скрипту выходной

Короткая проверка номера дня недели через date +%u позволяет Bash-скрипту отказаться от работы в субботу и воскресенье. Это шуточный вредный совет для cron-задач, который заодно показывает простое условие с числовым сравнением.

Фото: Bingqian Li / Pexels
bash

Как использовать IFS как выходной разделитель

В Bash нет отдельной переменной OFS, но первый символ IFS становится разделителем для параметров внутри "$*". Пример показывает, как собрать CSV-строку и почему команда set меняет позиционные параметры текущей оболочки.

Фото: Alex Andrews / Pexels
linux

Как убрать лесенку при вставке в mcedit

Автоматический отступ mcedit может превращать вставленный конфиг в лесенку из пробелов и табов. Показываем, какую настройку Midnight Commander отключить, чтобы текст вставлялся без искажения отступов.

Фото: Mak_ jp / Pexels
linux

Когда использовать runuser вместо su

Команда runuser запускает процесс от имени другого пользователя без запроса пароля, когда вызывающий процесс уже обладает правами root. Это делает её удобной для системных скриптов, cron-задач и служб.

Фото: Jonathan Borba / Pexels
linux

Одинарный и двойной @ в rsyslog

Один символ @ в конфигурации rsyslog отправляет сообщения по UDP, а два символа переключают передачу на TCP. Разбираемся, чем отличаются эти варианты и когда надёжность доставки логов важнее скорости.

Фото: Brett Sayles / Pexels
linux

Чем vi отличается от vim

Vim расшифровывается как Vi Improved и расширяет классический vi подсветкой синтаксиса, визуальным режимом и другими возможностями. Перед сравнением важно проверить, не запускает ли команда vi тот же Vim.

Фото: Engin Akyurt / Pexels
bash

cdspell и autocd в Bash

Две встроенные опции Bash упрощают навигацию по каталогам: cdspell исправляет небольшие ошибки в путях, а autocd позволяет переходить в директорию без команды cd. Показываем работу обеих функций на коротких примерах.

Фото: fauxels / Pexels
bash

Автоматическая перезагрузка Linux после обновлений

Однострочник для автоматического обновления Debian или Ubuntu и перезагрузки только при появлении /var/run/reboot-required. Подход пригодится в самописных установочных скриптах без Ansible и Puppet.

Фото: energepic.com / Pexels
linux

Как найти создаваемый файл с inotify-tools

inotify-tools позволяет в реальном времени увидеть, где приложение создаёт неизвестный файл. На практическом примере отслеживаем события каталога рекурсивно, находим выгрузку и разбираемся, когда пригодится incrond.

Фото: fall maple / Pexels
linux

Как узнать, какие файлы открывает программа через strace

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

Фото: Kader D. Kahraman / Pexels
linux

Как найти, что заняло диск, с помощью ncdu

ncdu помогает быстро найти каталоги и файлы, занявшие дисковое пространство на Linux-сервере. Разбираем запуск утилиты, навигацию по дереву размеров, удаление ненужных данных и установку в популярных системах.

Фото: Marta Branco / Pexels
linux

Suicide Linux: одна ошибка — и система удалена

Suicide Linux запускается в Docker с корнем хоста и удаляет систему после первой ошибочной команды. Опасный эксперимент допустим только в одноразовой изолированной лаборатории.

Фото: Ann H / Pexels
devops

Как сверить отпечаток SSH-ключа в GitLab

Команда ssh-keygen помогает понять, тот ли приватный SSH-ключ использует GitLab Runner. Получаем MD5-отпечаток, сравниваем его с GitLab или GitHub и исправляем ошибку доступа к приватному репозиторию.

Фото: Towfiqu barbhuiya / Pexels
linux

Linux и Doom внутри PDF-файла

PDFLinux запускает Linux прямо внутри PDF в Chromium и Firefox благодаря JavaScript, PDFium и эмулятору RISC-V. Смотрим на необычный эксперимент, его ограничения, исходный код и версию Doom в PDF.

Фото: Rotimi / Pexels
security

Как SSH-ссылка раскрывает IP и логин

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

Фото: COPPERTIST WU / Pexels
devops

Kubernetes на минималках с K3s

Пошаговая установка однонодового Kubernetes-кластера K3s на одной виртуальной машине с 2 vCPU и 2–4 ГБ RAM. Настраиваем kubectl, запускаем Deployment и Service, разбираем ограничения K3s по сравнению с kubeadm и экономим ресурсы …

Фото: Craig Dennis / Pexels
dev

Итоги Баланс-батла

Результаты технического конкурса Баланс-батл после подсчёта реакций читателей. Победили материалы про File Descriptors и GDB, освобождение места через inode и отправку логов с systemd-cat.

Фото: Laura Rincón / Pexels
bash

Как хранить crontab в Git

Простой способ хранить задания crontab в Git и автоматически раскатывать их на серверы без Ansible или Puppet. Скрипт забирает файл supercron из репозитория и целиком импортирует его в пользовательский crontab.

Фото: Alicia Christin Gerald / Pexels
linux

Двухлогинная защита SSH от мусора в логах

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

Фото: CODE SAFE / Pexels
linux

Как выйти в root shell через Vim

Vim и Vi могут запустить интерактивную оболочку через команды -c и --cmd. Показываем, почему редактор в белом списке команд способен обойти ограниченную оболочку и открыть путь к повышению привилегий.

Фото: Diana Indriany / Pexels
linux

Как найти настоящее имя systemd-сервиса

Если systemctl не находит ожидаемое имя сервиса, его можно восстановить по истории команд или списку юнитов. На примере PHP-FPM показываем быстрый поиск реального systemd unit без дополнительных утилит.

Фото: Budget Bizar / Pexels
networks

Как найти незарегистрированный IP в локальной сети

Практический разбор неизвестного IP-адреса в небольшой локальной сети с 1С. Используем ss, ping, nmap, arp, arping и временное правило iptables, чтобы определить реальное устройство и его пользователя.

Фото: Brett Sayles / Pexels
linux

Как отключить Recommended packages в APT

Показываем, как устанавливать пакеты APT без необязательных Recommended packages через --no-install-recommends. Настраиваем глобальное отключение рекомендаций в apt.conf.d и при необходимости включаем их для отдельного пакета.

Фото: Dalila Dalprat / Pexels
linux

local0–local7 для разделения логов

Разбираем syslog facility local0–local7 и отделяем логи приложений от системных сообщений auth, daemon, mail и kern. Показываем пример на Python, настройку rsyslog и практическую схему категорий.

Фото: Maria Orlova / Pexels
linux

MySQL без пароля через .my.cnf

Настраиваем подключение к MySQL без передачи логина и пароля в командной строке или Bash-скрипте. Используем файл ~/.my.cnf, секцию client, параметр --defaults-file и безопасные права доступа.

Фото: Dan Nelson / Pexels
bash

Как Bash освобождает память без Garbage Collector

Проверяем потребление RSS текущего процесса Bash до и после заполнения большой переменной. Эксперимент показывает, как память увеличивается и снова уменьшается без отдельного Garbage Collector.

Фото: Polina Tankilevitch / Pexels
linux

Как ускорить APT с eatmydata

Ускоряем установку пакетов APT с помощью eatmydata и сравниваем время переустановки Midnight Commander. Объясняем отключение fsync, fdatasync, flock и msync, а также риски для целостности данных.

Фото: Binoy Y S / Pexels
bash

Лучшие посты Bashdays за октябрь 2023

Собрали самые просматриваемые, пересылаемые и обсуждаемые публикации Bashdays за октябрь 2023 года. В подборке Bash, Linux, chroot, strace, VIM, архиваторы и полезные shell-инструменты.

Фото: Tiger Lily / Pexels
linux

Почему мини-ПК с Proxmox то работает, то нет

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

Фото: Andrey Matveev / Pexels
bash

Эмоджи в именах функций Bash

POSIX ограничивает имена переменных в shell буквами, цифрами и подчёркиванием, но функции Bash допускают более необычные символы. Показываем рабочую функцию с эмоджи в имени и объясняем разницу правил.

Фото: Tim Witzdam / Pexels
linux

jc превращает вывод Linux-команд в JSON

Утилита jc преобразует вывод iptables, ls, fstab, ping и других Linux-команд в структурированный JSON. Показываем простой конвейер с jq, доступные парсеры и вариант использования jc как Python-модуля.

Фото: Bibek ghosh / Pexels
linux

Proxmox на Raspberry Pi 5 через Pimox7

Пробуем установить Proxmox на Raspberry Pi 5 с помощью Pimox7 и сталкиваемся с несовместимыми зависимостями Perl, Ceph и PVE. Разбираем результат эксперимента и оставляем ссылку на рабочую инструкцию.

Фото: Tima Miroshnichenko / Pexels
linux

Как умер мини-ПК с Proxmox после 40 дней

Мини-ПК с Proxmox и LXC перестал загружаться после примерно сорока дней непрерывной работы. Описываем симптомы, проверку BIOS и блока питания, температуру 45–50 градусов и временный возврат на Raspberry Pi 5.

Фото: Alexey Demidov / Pexels
games

Остров сокровищ в Minecraft

На сервере Minecraft спрятаны сто денежных кодов и десять призов на обучение в Linux Factory. Рассказываем правила поиска, регистрацию, координаты и режим работы игрового сервера mc.bashdays.ru.

Фото: Lara Jameson / Pexels
bash

Почему false возвращает код 1 для help

Сравниваем встроенную команду false в Bash и отдельный бинарник /usr/bin/false. Объясняем, почему даже параметры --help и --version завершаются с кодом 1 и как проверить тип команды.

Фото: Mwabonje Ringa / Pexels
linux

Исполняемый Perl-код в ASCII-арте

Модуль Acme::EyeDrops превращает Perl-программу в ASCII-арт, который остаётся исполняемым кодом. Показываем запуск такого файла и обратное преобразование через B::Deparse.

Фото: Daniil Komov / Pexels
linux

Как ускорить gzip-сжатие с помощью pigz

Обычный gzip использует одно ядро, а pigz распараллеливает сжатие и заметно ускоряет архивирование. Сравниваем время на файле 10 ГБ и подключаем pigz к tar через pipe и --use-compress-program.

Фото: Anna Tarazevich / Pexels
linux

Что такое POSIX и зачем он нужен

POSIX задаёт общий интерфейс операционных систем и помогает создавать переносимые программы и shell-скрипты. Объясняем происхождение стандарта, сертификацию Linux-дистрибутивов и практический смысл POSIX Shell.

Фото: Joachim Schnürle / Pexels
bash

XOR-шифрование слова Linux в Bash

Эксперимент с XOR-преобразованием слова Linux в PURID и обратно. Разбираем Bash brace expansion, систему счисления по основанию 64, printf, echo и альтернативный вариант на Perl.

Фото: Daniil Komov / Pexels
linux

Безопасный sudoers для перезапуска служб

Как разрешить пользователю без пароля перезапускать только PostgreSQL, службы 1С и сервер через sudoers. Практический пример NOPASSWD и разбор аварийного восстановления после ошибки в конфигурации sudo.

Фото: Daniil Komov / Pexels
bash

Мониторинг через journalctl без Prometheus

Простой самописный мониторинг через journalctl, logger и cron без связки Prometheus, Grafana и Alertmanager. Bash-скрипты считают события за заданный интервал и запускают полезную нагрузку при превышении порога.

Фото: Mikhail Nilov / Pexels
linux

Почему 1С тормозит на PostgreSQL после обновления

После обновления конфигурации операции в 1С на PostgreSQL замедлились в несколько раз, тогда как MS SQL работает нормально. Разбираем исходные наблюдения, ограничения связки 1С с Linux и вопросы для диагностики.

Фото: Thirdman / Pexels
security

Самодельная двухфакторная аутентификация для SSH

Концепт второго фактора для SSH без стороннего сервиса аутентификации. Shell-скрипт после входа выдаёт код, уведомляет администратора, проверяет ответ через почту или Telegram и передаёт управление Bash.

Фото: Jakub Zerdzicki / Pexels
bash

tee и script для записи вывода терминала

Утилита tee одновременно показывает вывод команды на экране и записывает его в файл, а script сохраняет всю терминальную сессию. Разбираем простые команды для логирования вывода в реальном времени.

Фото: 도연 김 / Pexels
debug

Анализ ELF-бинарников с Binsider

Binsider — TUI-инструмент на Rust для статического и динамического анализа ELF-бинарников. Он показывает секции, сегменты, символы, релокации и hex-дамп, извлекает строки и отслеживает системные вызовы.

Фото: Julio Lopez / Pexels
linux

Видео-фон и lolcat в терминале

Добавляем анимированный фон в Windows Terminal и раскрашиваем вывод команд с помощью lolcat. В материале есть параметры backgroundImage для WSL, набор пиксельных GIF и пример случайной смены фона в Terminology через Fish.

Фото: Rafael Minguet Delgado / Pexels
devops

Одна SSH-сессия для deploy pipeline

Объединяем несколько команд деплоя в одну SSH-сессию внутри GitLab CI pipeline. Многострочный YAML-блок с heredoc снижает риск упереться в MaxSessions или Fail2ban и делает сценарий развёртывания читаемее.

Фото: cottonbro studio / Pexels
bash

Уникальные строки в Bash без сортировки

Сравниваем три способа получить уникальные строки файла: sort с uniq, ассоциативный массив в awk и чистый Bash. Готовый скрипт показывает одинаковый результат и напоминает о расходе памяти на больших файлах.

Фото: Anete Lusina / Pexels
bash

Условный параметр platform для ARM64 в pipeline

Разбираем, как условно добавлять параметр --platform linux/arm64 в Docker-команду внутри pipeline. Сравниваем Bash-конструкцию [[ ]] и POSIX-совместимый вариант с [ ], чтобы один сценарий работал на разных архитектурах.

Фото: Jonathan Borba / Pexels
linux

Fedora после установки с CRIMS0NH4T

CRIMS0NH4T автоматизирует рутинную настройку Fedora после чистой установки: DNF, RPM Fusion, кодеки, GPU-драйверы и оптимизацию GNOME. Разбираем раннюю версию Bash-скрипта и точечные улучшения для строгого режима, логов и …

Фото: Oluwaseun Duncan / Pexels
bash

source, точка и запуск Bash-скрипта

Чем отличаются source script.sh, . script.sh и ./script.sh в Bash. На примерах разбираем текущую оболочку, локальные и экспортированные переменные, shebang и право на выполнение.

Фото: cottonbro studio / Pexels
devops

Автоматические бэкапы PostgreSQL с уведомлениями

Bash-скрипт для автоматического создания дампов PostgreSQL через pg_dump, логирования результата и отправки уведомлений в Telegram. Дополнительно настраиваем очистку старых файлов через find и cron.

Фото: Jakub Zerdzicki / Pexels
linux

Как заменить last и lastb в Debian 13

В Debian 13 привычные команды last и lastb могут отсутствовать, но историю успешных и неудачных SSH-входов можно собрать через journalctl и gawk. Готовые команды формируют таблицу timestamp, IP и логина, поддерживают фильтр по …

Фото: Tima Miroshnichenko / Pexels
linux

Как не путать chmod и chown

Простой способ перестать путать команды chmod и chown через понятные смысловые якоря. Разбираем, как связать owner с владельцем, mode с режимом доступа и запомнить ключи tar без зубрёжки.

Фото: Kindel Media / Pexels
debug

Нумерация системных вызовов strace

Perl-скрипт автоматически нумерует системные вызовы в выводе strace и упрощает подготовку инъекций. Разбираем запуск через -o, цветовую подсветку, подсчёт openat и newfstatat и отделение трассировки stderr от вывода программы.

Фото: Daniil Komov / Pexels
bash

Bash-скрипт в бинарник через shc

Знакомимся с Shell Script Compiler и превращаем Bash-скрипт в C-код и готовый ELF-бинарник. Разбираем установку shc, команду shc -f, созданные файлы и ограничения переносимости между Linux-системами.

Фото: Alexey Demidov / Pexels
services

Бесплатные Linux- и Windows-серверы в браузере

Тестируем платформу Terminator с бесплатными сессиями Debian 12 и Windows Server 2016 прямо в браузере. Рассматриваем ограничения 15-минутной сессии и сценарии для проверки программ, скриптов, команд и доступности сайтов.

Фото: Mikhail Nilov / Pexels
bash

Генератор случайных строк на Bash

Создаём генератор псевдослучайных строк в Bash с помощью /dev/urandom, tr и head. Разбираем набор допустимых символов, длину результата и ключи -c и -d команды tr.

Фото: lil artsy / Pexels
devops

Как устроено обучение в Linux Factory

Разбираем формат обучения в Linux Factory для будущих DevOps-инженеров: более 40 уроков и домашних заданий, Docker, Git, пайплайны, мониторинг и Infrastructure as Code. Внутри — личное наставничество, код-ревью, свободный темп и …

Фото: Yan Krukau / Pexels
bash

Пасхальное яйцо awk --nostalgia

Разбираемся, зачем в awk появилась недокументированная опция --nostalgia и почему она аварийно завершает программу. Заодно смотрим на GNU-синтаксис -W long_option и эквивалентные команды для nostalgia и copyright.

Фото: Sidde / Pexels
linux

Три буфера обмена в Linux

Разбираемся, чем в Linux отличаются Clipboard, Primary Selection и внутренний буфер приложения. На практическом примере проверяем копирование и вставку через Ctrl+Shift+C, среднюю кнопку мыши, Ctrl+W и Ctrl+Y.

Фото: Markus Winkler / Pexels
dev

HexSpeak и магическое число CAFEBABE в Java

Знакомимся с HexSpeak — способом составлять слова из допустимых шестнадцатеричных цифр. Разбираем популярные комбинации, культуру магических чисел и происхождение сигнатуры CAFEBABE в class-файлах Java.

Фото: Rafael Minguet Delgado / Pexels
linux

Как анализировать процессы Linux через pstree

Изучаем дерево процессов Linux с помощью pstree и разбираем ключи -c, -p и -a. Показываем объединение одинаковых ветвей, вывод PID и аргументов запуска, а также установку пакета psmisc в разных системах.

Фото: Luca Dross / Pexels
bash

Как вывести все доступные команды через compgen

Используем встроенную команду compgen для просмотра команд, алиасов, функций, ключевых слов, файлов и пользователей в Bash. Показываем генерацию динамических массивов и практический способ изучать возможности Linux небольшими …

Фото: Tibe De Kort / Pexels
bash

Как работает перенаправление 2>&1 в Bash

Разбираем файловые дескрипторы stdout и stderr и синтаксис перенаправления 2>&1 в Bash. Объясняем роль амперсанда, отличие от записи 2>1 и сокращённый оператор |& на примере отправки общего потока в tee.

Фото: Wayan Daton / Pexels
linux

Как создавать домашние каталоги через /etc/skel

Настраиваем каталог /etc/skel как шаблон домашней директории нового пользователя Linux. Создаём структуру папок и конфигурационные файлы, используем альтернативный шаблон через useradd -k и меняем расположение домашнего каталога …

Фото: Pilan Filmes / Pexels
linux

Как установить FAR в Linux через far2l

Устанавливаем двухпанельный файловый менеджер FAR в современных дистрибутивах Linux через пакет far2l. Сравниваем его с Midnight Commander, проверяем запуск в WSL и по SSH и вспоминаем эволюцию консольных файловых менеджеров.

Фото: Element5 Digital / Pexels
security

Нужен ли пароль для приватного SSH-ключа

Обсуждаем компромисс между удобством и защитой приватного SSH-ключа паролем. Разбираем модель угроз, гигиену рабочей станции и ситуации, в которых passphrase действительно снижает риск кражи ключа.

Фото: Kindel Media / Pexels
workflow

Ответы на вопросы о наставничестве Linux Factory

Краткий FAQ о формате наставничества Linux Factory: разбор резюме, помощь с поиском работы, текстовое общение вместо созвонов и возраст при смене профессии. Объясняем, когда начинается работа над резюме и как устроена рекомендация …

Фото: Leeloo The First / Pexels
bash

Как Bash распознаёт ответы да и нет

Разбираемся, откуда команды Linux берут допустимые варианты подтверждения y, n, Д, Н, 0, 1, плюс и минус. Изучаем выражения yesexpr и noexpr в локалях, проверяем их через locale и собираем собственную локаль с localedef.

Фото: Ann H / Pexels
linux

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

Показываем аварийный способ найти фрагменты удалённого текстового файла непосредственно на разделе диска с помощью grep. Разбираем ключи -a, -C и -F, выбор контекстных строк и ограничения такого восстановления в Linux.

Фото: Vikram Aditya / Pexels
linux

Как освободить занятый порт через Kill Port

Знакомимся с Bash-утилитой Kill Port, которая находит и завершает процесс, занявший указанный TCP-порт. Разбираем сценарий локальной разработки, простую ручную установку, запуск через killport и ограничения для процессов уровня …

Фото: Steve A Johnson / Pexels
bash

Как отключить буферизацию вывода через stdbuf

Настраиваем построчный вывод программы в файл с помощью stdbuf -oL, чтобы наблюдать за логом в реальном времени. Дополнительно разбираем сочетание с nohup и альтернативный запуск через утилиту script с принудительным flush.

Фото: Joshua Woroniecki / Pexels
linux

Почему SSH долго подключается из-за PAM

Ищем причину многоминутной задержки при подключении к старому SSH-серверу. Проверяем UseDNS, UsePAM и модули в /etc/pam.d/sshd, чтобы локализовать тормозящий этап аутентификации и вернуть PAM после вдумчивой настройки.

Фото: panumas nikhomkhai / Pexels
linux

Как восстановить SSH после ошибки в .bashrc

Восстанавливаем доступ по SSH, когда ошибка в .bashrc ломает интерактивную оболочку удалённого сервера. Показываем два способа входа через принудительный запуск /bin/sh и SFTP, а также объясняем риск простых ограничивающих …

Фото: Mikhail Nilov / Pexels
networks

Как настроить зеркальную сеть WSL

Настраиваем mirrored networking в WSL 2 через файл .wslconfig, чтобы Linux использовал сетевой стек Windows и адрес хоста. Разбираемся, как зеркальный режим упрощает доступ к портам, локальной сети, корпоративным прокси и сервисам …

Фото: Nuray / Pexels
security

Как ограничить SFTP через MySecureShell

Настраиваем отдельный SFTP-сервер MySecureShell поверх OpenSSH и ограничиваем пользователей файловой подсистемой. Разбираем установку в Debian, смену оболочки, конфигурацию, управление скоростью и совместимость с SSHFS и rsync.

Фото: cottonbro studio / Pexels
debug

Как отследить запускаемые команды через strace

Используем strace и системный вызов execve, чтобы увидеть, какие внешние программы запускает команда и с какими аргументами. На примере man разбираем ключи трассировки, сохранение лога и практическую отладку скриптов и приложений.

Фото: cottonbro studio / Pexels
bash

Как проверить формат файла скриптом sed

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

Фото: Tara Winstead / Pexels
linux

Как работать с архивами через atool

Используем atool как единый консольный интерфейс для распаковки и создания архивов ZIP, tar.gz, 7z и RAR. Разбираем простые команды извлечения и упаковки, которые избавляют от необходимости помнить синтаксис каждого архиватора.

Фото: Mizuno K / Pexels
bash

Одинарные и двойные скобки в Bash

Сравниваем условия [ ] и [[ ]] в shell-скриптах: переносимость между POSIX sh, Bash и ksh, доступные операторы, экранирование и регулярные выражения. Практические примеры показывают, когда выбрать совместимость, а когда — более …

Фото: Tasso Mitsarakis / Pexels
linux

Как безопасно тестировать systemd-юниты

Тестируем изменения systemd-юнитов через временное переопределение `systemctl edit --runtime`. Показываем выбор редактора, расположение override в `/run/systemd/` и замену ExecStart для nginx только до перезагрузки.

Фото: Field Engineer / Pexels
linux

Как заблокировать консоль через vlock

Знакомимся с vlock для блокировки виртуальной консоли Linux без графического окружения. Разбираем блокировку одной или всех консолей, защиту от SysRq, скринсейверы и риск потерять доступ, если пароль пользователя забыт.

Фото: Alfredo Marco Pradil / Pexels
linux

Как искать пути повышения привилегий через LinPEAS

Проверяем Linux-сервер с помощью LinPEAS и ищем ошибки конфигурации, SUID-файлы и другие пути повышения привилегий. Показываем запуск без установки через curl или Python и объясняем, почему скрипту не нужен root.

Фото: Bulat843 / Pexels
bash

Как использовать алиасы в Bash-скриптах

Показываем, почему алиасы из `.bashrc` не работают в обычном Bash-скрипте и как включить интерактивный режим ключом `-i`. Сравниваем этот подход с `source`, `expand_aliases` и экспортируемой функцией.

Фото: Tara Winstead / Pexels
bash

Как реализовать try/catch в Bash

Разбираемся, чем заменить try/catch в Bash с помощью логического оператора `||`, группировки команд и проверки кода возврата. Показываем практический шаблон обработки ошибок и объясняем, когда проще использовать `set -e`.

Фото: So Phors / Pexels
bash

Как управлять заданиями cron из Bash

Добавляем и удаляем задания cron прямо из Bash-скрипта. Используем уникальные комментарии для идентификации строк crontab, функции ADD_CRON_TASK и REMOVE_CRON_TASK, а также учитываем переменную PATH.

Фото: Karolina Grabowska / Pexels
linux

Когда использовать Snap вместо APT

Сравниваем пакетные менеджеры Snap и APT в Linux. Разбираем переносимость пакетов между дистрибутивами, песочницу, автоматические обновления, зависимости и ситуации, где важнее системная интеграция и производительность.

Фото: Maor Attias / Pexels
linux

Чем service отличается от systemctl

Сравниваем команды service и systemctl для управления службами Linux. Через strace проверяем вызов systemctl, вспоминаем SysVinit и Upstart и перечисляем альтернативы для OpenRC, runit, s6 и Supervisor.

Фото: Marek Piwnicki / Pexels
linux

Magic SysRq для аварийного управления Linux

Разбираем Magic SysRq — низкоуровневые команды ядра Linux для зависшей системы. Показываем сочетания для синхронизации, перемонтирования файловых систем, завершения процессов и аварийной перезагрузки.

Фото: Willfried Wende / Pexels
bash

Как менять регистр ASCII одним битом

Разбираем двоичное представление букв ASCII и отличие верхнего регистра от нижнего в шестом бите. Меняем регистр через XOR и сравниваем подход со встроенными конструкциями Bash.

Фото: Markus Spiske / Pexels
linux

Как найти источник трафика через nethogs

Практическое руководство по nethogs для мониторинга сетевого трафика Linux в реальном времени. Разбираем установку, поиск процессов, перегружающих канал, контроль интерфейсов и режим трассировки.

Фото: Brett Sayles / Pexels
linux

Как отлаживать SSH-подключение по логам

Ищем причины отказа SSH-аутентификации по ключам через журнал сервера и `tail`. Разбираем права на authorized_keys, неверные ключи, типовые сообщения auth.log и безопасное восстановление конфигурации.

Фото: Mikhail Nilov / Pexels
networks

Как преобразовать диапазон IP в CIDR через ipcalc

Используем whois и ipcalc для определения сетей владельца IP-адреса и преобразования диапазонов NetRange или inetnum в CIDR. Готовим подсети для правил iptables и проверяем результат на практических примерах.

Фото: Lara Jameson / Pexels
bash

Двоичное кодирование через basenc

Показываем, как утилита basenc из GNU coreutils кодирует UTF-8-текст в двоичное представление и возвращает его обратно. Разбираем параметры base2msbf, ширину вывода и байт перевода строки.

Фото: Pixabay / Pexels
linux

Как обновить ядро Linux без полной перезагрузки

Разбираемся, можно ли применить обновление ядра Linux без обычной перезагрузки сервера. Сравниваем kexec, Live Patching и KernelCare, а также объясняем ограничения каждого подхода для продакшена.

Фото: Field Engineer / Pexels
linux

Как работают sync и drop_caches в Linux

Разбираемся, зачем Linux хранит файловые данные в памяти и что делает команда sync перед записью на диск. Показываем варианты очистки page cache, inode и dentry через drop_caches и перечисляем практические сценарии применения.

Фото: Markus Spiske / Pexels
linux

Куда пропали сигналы 32 и 33 в Linux

Выясняем, почему команда kill -l не показывает сигналы 32 и 33 в Linux. Разбираем резервирование сигналов библиотекой glibc, потоки NPTL и диапазон сигналов реального времени SIGRTMIN–SIGRTMAX.

Фото: Huu Huynh / Pexels
games

Bandit как игра помогает изучать Linux

Знакомимся с Bandit от OverTheWire — консольной игрой, где уровни проходятся через SSH и команды Linux. Разбираем принцип игры, пользу для отладки и другие хакерские симуляторы вроде Uplink.

Фото: Tima Miroshnichenko / Pexels
linux

Как tar хранит владельца и группу файла

Исследуем заголовок tar-архива через hexdump и смотрим, где сохраняются UID, GID, имя владельца и группа. Проверяем `--owner`, `--group` и поведение распаковки для существующих и выдуманных пользователей.

Фото: Polina Tankilevitch / Pexels
linux

Как записать терминал в GIF через VHS

Автоматизируем запись терминала с помощью VHS и сценария `.tape`. Настраиваем размер кадра и команды, запускаем генерацию GIF в Docker и публикуем готовую анимацию.

Фото: Spemone / Pexels
bash

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

Решаем задачу нумерации строк одним процессом sed вместо связки из двух вызовов. Используем команду `=` и управляющие ANSI-последовательности для перемещения курсора в терминале.

Фото: Pixabay / Pexels
linux

Что входит в метапакет build-essential

Разбираемся, зачем Debian и Ubuntu требуют установить `build-essential` перед сборкой программ. Показываем, какие компиляторы, библиотеки и инструменты входят в метапакет и почему он не заменяет полноценное окружение разработки.

Фото: Anthony Shkraba / Pexels
security

Как StrictModes влияет на проверку SSH-ключей

Разбираем ошибку `bad ownership or modes` при входе по SSH-ключу и роль параметра `StrictModes`. Показываем безопасную диагностику прав `authorized_keys` и объясняем риски временного отключения проверки.

Фото: Pixabay / Pexels
linux

Как ограничить время жизни systemd-сервиса

Показываем, как ограничить время работы systemd-сервиса через `RuntimeMaxSec` и управлять завершением с помощью `TimeoutStopSec`. Разбираем сигналы SIGTERM и SIGKILL, перезапуск через `Restart` и практические шаблоны юнитов.

Фото: Alla on the loose / Pexels
workflow

Как управлять dotfiles через chezmoi

Знакомимся с chezmoi для управления `.bashrc`, `.vimrc`, `.gitconfig` и другими dotfiles на нескольких устройствах. Добавляем и редактируем конфиги, смотрим diff, восстанавливаем файлы и синхронизируем репозиторий через Git.

Фото: Mikhail Nilov / Pexels
security

Почему не стоит менять стандартный SSH-порт

Разбираем, почему перенос SSH с порта 22 редко повышает безопасность и лишь усложняет подключения. Вместо security through obscurity используем SSH-ключи, запрет root-входа, отключение паролей и fail2ban.

Фото: Jessica Lewis 🦋 thepaintedsquare / Pexels
linux

Как выбрать тип терминала в Linux

Разбираемся, чем отличаются vt100, xterm и xterm-256color и зачем приложениям переменная TERM. Проверяем управляющие последовательности, цвета, UTF-8 и Midnight Commander, чтобы выбрать современный тип эмуляции терминала.

Фото: Viktorya Sergeeva / Pexels
bash

Как проверить существование файла в Bash

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

Фото: cottonbro studio / Pexels
bash

Как узнать дату и время в Bash без date

Необычные способы получить текущую дату, время и Unix time в Bash без привычной команды date. Используем stat, ps, printf, преобразование `${parameter@P}`, а также переменные EPOCHREALTIME и EPOCHSECONDS.

Фото: Engin Akyurt / Pexels
bash

Как ждать файл в Bash через until и таймаут

Используем цикл until в Bash, чтобы дождаться появления непустого файла и затем выполнить полезную нагрузку. Добавляем таймаут через SECONDS и разбираем ограничения такого опроса по времени.

Фото: marco / Pexels
linux

Как найти лишние файлы в Linux через cruft

Утилита cruft находит файлы, которые появились в Linux в обход пакетного менеджера. Настраиваем исключения для Docker и пользовательских каталогов, сохраняем отчёт и ищем забытые скрипты или подозрительные артефакты.

Фото: cottonbro studio / Pexels
security

Как перехватить пароль SSH через strace

Показываем, как strace может раскрыть пароль пользователя при входе по SSH на скомпрометированном сервере. Разбираем параметры трассировки sshd, формат полученного вывода и риск для систем после захвата root-доступа.

Фото: FBO Media / Pexels
linux

Как показывать прогресс в pipe через pv

Утилита pv добавляет прогресс-бар, скорость и оценку времени к операциям в конвейере Linux. Показываем сжатие логов, импорт SQL-дампа с ограничением скорости и наблюдение за потоком данных.

Фото: Barnabas Davoti / Pexels
linux

Как работают права 330 на каталог

Разбираем необычные права 330 для каталога Linux и их применение на SFTP-сервере. Показываем, как разрешить запись и удаление файлов, но скрыть список содержимого от пользователей одной учётной записи.

Фото: Benedek Kaufmann / Pexels
devops

Почему серверные диски надёжнее обычных

Сравниваем вероятность неисправимых ошибок чтения у WD Blue, WD Gold, SAS Toshiba и SSD Micron. Объясняем, почему RAID не всегда защищает от повреждённых данных и как контрольные суммы ZFS помогают обнаруживать ошибки.

Фото: Josh Moodley / Pexels
bash

Как искать примеры Bash без интернета

Когда нет интернета и подсказок ИИ, готовые примеры Bash уже лежат в системных скриптах Linux. Одной командой находим реальные случаи использования getopts и других конструкций в /usr/bin, /usr/sbin, /bin и /sbin.

Фото: Ruben Boekeloo / Pexels
linux

Как перенести временные файлы на отдельный диск

Переносим каталог /tmp с корневого раздела или tmpfs на отдельный диск через systemd mount unit. Правильно именуем tmp.mount, указываем UUID файловой системы, сохраняем sticky bit 1777 и проверяем новое монтирование.

Фото: Anete Lusina / Pexels
bash

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

Разбираем readonly-переменные в Bash: как защитить значение от перезаписи, почему unset не помогает и как увидеть ошибку readonly variable. Отдельно показываем рискованный трюк с GDB и его ограничения.

Фото: Towfiqu barbhuiya / Pexels
linux

Как смонтировать BitLocker-раздел в Linux

Пошагово подключаем зашифрованный BitLocker-раздел в Linux с помощью dislocker. Разбираем пароль и ключ восстановления, режим только для чтения, NTFS и exFAT, а также автоматическое монтирование через fstab.

Фото: cottonbro studio / Pexels
linux

Как узнать число процессорных ядер в Linux

Сравниваем три способа узнать число доступных процессорных ядер в Linux: /proc/cpuinfo, getconf и nproc. Используем результат в Bash-скрипте для обновления worker_processes и безопасной перезагрузки Nginx.

Фото: ed br / Pexels
self-hosted

Домашний сервер на Raspberry Pi

Практический разбор домашнего сервера на Raspberry Pi с Ubuntu, Dockge и внешними дисками. В материале — контейнеры Seafile, Jellyfin, Uptime Kuma, Syncthing, мониторинг и резервное копирование через rclone в S3 Selectel.

Фото: Jakub Zerdzicki / Pexels
bash

Как не запускать скрипт повторно через flock

Защищаем долгий Bash-скрипт от параллельных запусков из cron с помощью flock и lock-файла. Готовый обработчик блокирует повторную копию процесса и освобождает блокировку после завершения работы.

Фото: Engin Akyurt / Pexels
bash

Как проверить tar.gz без распаковки

Проверяем целостность архивов tar.gz без распаковки командами tar и gzip, намеренно повреждаем файл через truncate и разбираем коды возврата. В конце — готовый Bash-скрипт для автоматической проверки резервных копий.

Фото: brokenadmiral_ / Pexels
linux

Чем терминал отличается от консоли

Разбираемся, чем физический терминал и его современный эмулятор отличаются от консоли Linux. Сравниваем устройства /dev/pts и /dev/tty и отправляем текст из консоли в открытую терминальную сессию.

Фото: cottonbro studio / Pexels
bash

Как автоматизировать ответы командой yes

Разбираем Linux-команду yes для автоматической передачи подтверждений в интерактивные программы. Показываем работу через пайп, произвольные ответы и отправку пустой строки для имитации Enter в скриптах и пайплайнах.

Фото: Tara Winstead / Pexels
linux

Как узнать внешний IP из терминала

Собрали консольные сервисы для определения внешнего IP-адреса и геолокации через curl, dig и whois. Показываем короткие команды и объясняем, как сделать проверку отказоустойчивой в Bash-скриптах.

Фото: Luke Greenwood / Pexels
linux

Поиск файлов по времени через find -newer

Разбираем тест -newerXY утилиты find и временные метки файлов. Ищем изменения относительно заданной даты или файла-образца, создаём контрольную метку через touch и выводим время найденных объектов.

Фото: Thirdman / Pexels
linux

Почему GNU-утилиты меняют имя при запуске из .libs

Экспериментируем с GNU-утилитами и функцией set_program_name, которая особым образом обрабатывает запуск из каталога .libs. Сравниваем сообщения об ошибках и справку, чтобы увидеть влияние libtool на имя программы.

Фото: Ezgi Kaya / Pexels
bash

ASCII и UTF-8 в Bash через printf

Используем printf для получения кодов символов в шестнадцатеричной, восьмеричной и десятичной системах. Проверяем влияние LC_ALL на UTF-8 и сохраняем форматированный результат в переменную.

Фото: Markus Spiske / Pexels
bash

Как Bash запускает скрипты без Shebang

Разбираемся, зачем скрипту нужен Shebang и что происходит при ошибке ENOEXEC. На примерах показываем, когда Bash способен самостоятельно выполнить файл без привычной строки интерпретатора.

Фото: Ron Lach / Pexels
linux

Как получить доступ к закрытому серверу через netcat

Разбираем Reverse Shell через netcat для подключения к серверу без внешнего IP-адреса. Показываем команды для принимающей стороны и закрытого узла, перенаправление потоков и обязательные ограничения безопасности.

Фото: Brett Sayles / Pexels
linux

Как собрать свой метапакет Debian

Пошагово собираем собственный метапакет Debian, который устанавливает заранее выбранный набор утилит. Создаём структуру dh_make, редактируем debian/control, запускаем debuild и проверяем зависимости.

Фото: RDNE Stock project / Pexels
linux

Условные настройки SSH через Match

Настраиваем разные правила sshd для пользователей и адресов через блок Match. Рассматриваем парольную аутентификацию последнего шанса, шаблоны условий и проверку итоговой конфигурации командой sshd -T -C.

Фото: Alena Darmel / Pexels
devops

JSON-логи Nginx в systemd journal

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

Фото: Adventure Studio / Pexels
bash

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

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

Фото: Arlind D / Pexels
linux

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

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

Фото: Yan Krukau / Pexels
soft

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

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

Фото: Jakub Zerdzicki / Pexels
bash

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

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

Фото: Heru Dharma / Pexels
linux

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

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

Фото: Lisa from Pexels / Pexels
bash

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

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

Фото: Satoshi Hirayama / Pexels
bash

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

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

Фото: Ann H / Pexels
games

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

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

Фото: Erik Mclean / Pexels
linux

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

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

Фото: Sevgi Gümüş / Pexels
linux

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

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

Фото: Pressmaster / Pexels
linux

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

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

Фото: Mikhail Nilov / Pexels
linux

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

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

Фото: Maor Attias / Pexels
security

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

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

Фото: Sakina Mammadli / Pexels
linux

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

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

Фото: Tom Fisk / Pexels
bash

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

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

Фото: Rafael Minguet Delgado / Pexels
linux

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

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

Фото: Erkan Utu / Pexels
security

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

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

Фото: Артем Зелюткин / Pexels
bash

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

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

Фото: Ekaterina / Pexels
networks

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

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

Фото: Efrem Efre / Pexels
linux

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

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

Фото: Andrey Matveev / Pexels
bash

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

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

Фото: Ömer Yılmaz / Pexels
linux

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

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

Фото: Richard L / Pexels
bash

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

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

Фото: Pavel Danilyuk / Pexels
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 без раскрытия инфраструктуры.

Фото: Brett Sayles / Pexels
bash

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

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

Фото: Pavel Danilyuk / Pexels
bash

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

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

Фото: luis gomes / Pexels
security

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

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

Фото: Jakub Zerdzicki / Pexels
bash

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

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

Фото: Aleksander Dumała / Pexels
debug

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

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

Фото: AlphaTradeZone / Pexels
linux

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

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

Фото: James L / Pexels
self-hosted

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

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

Фото: Jonathan Borba / Pexels
self-hosted

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

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

linux

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

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

Фото: Kofi Nartey / Unsplash
bash

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

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

Фото: Nemuel Sereti / Pexels
bash

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

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

Фото: Masood Aslami / Pexels
linux

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

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

Фото: Nemuel Sereti / Pexels
linux

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

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

Фото: panumas nikhomkhai / Pexels
linux

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

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

Фото: luis gomes / Pexels
linux

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

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

Фото: Mikhail Nilov / Pexels
linux

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

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

Фото: Cup of Couple / Pexels
bash

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

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

Фото: Emiliano Rodríguez / Pexels
linux

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

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

Фото: Eugenia Remark / Pexels
linux

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

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

Фото: Tima Miroshnichenko / Pexels
security

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

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

Фото: Fernando Narvaez / Pexels
bash

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

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

Фото: Mikhail Nilov / Pexels
security

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

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

Фото: panumas nikhomkhai / Pexels
debug

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

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

Фото: cottonbro studio / Pexels
linux

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

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

Фото: João Jesus / Pexels
bash

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

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

Фото: Magda Ehlers / Pexels
linux

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

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

Фото: Pavel Danilyuk / Pexels
debug

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

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

Фото: Ron Lach / Pexels
linux

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

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

Фото: | helloiamtugce | / Pexels
bash

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

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

Фото: Erik Mclean / Pexels
linux

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

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

Фото: Jakub Zerdzicki / Pexels
linux

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

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

Фото: Benjamin White / Pexels
linux

Condition и Assert в systemd

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

Фото: MART PRODUCTION / Pexels
bash

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

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

Фото: Tima Miroshnichenko / Pexels
linux

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

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

Фото: Sharath G. / Pexels
linux

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

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

Фото: Nothing Ahead / Pexels
linux

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

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

Фото: Nicolas Foster / Pexels
linux

Как запускать команды на нескольких серверах через PSSH

Используем пакет PSSH для параллельного запуска команд и копирования файлов на группу Linux-серверов. Настраиваем SSH-ключи и файл инвентаря, работаем с parallel-ssh, parallel-scp, prsync, pnuke и pslurp.

Фото: RDNE Stock project / Pexels
bash

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

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

Фото: Mehmet Turgut Kirkgoz / Pexels
linux

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

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

Фото: Nicolas Foster / Pexels
bash

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

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

Фото: Elina Volkova / Pexels
linux

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

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

Фото: cottonbro studio / Pexels
linux

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

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

Фото: Wenxin Dong / Pexels
bash

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

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

Фото: Mehmet Turgut Kirkgoz / Pexels
linux

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

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

Фото: Julio Lopez / Pexels
linux

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

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

Фото: Pixabay / Pexels
linux

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

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

Фото: Kaboompics / Pexels
linux

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

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

Фото: Usman AbdulrasheedGambo / Pexels
security

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

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

Фото: Adem Percem / Pexels
security

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

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

Фото: Michaela St / Pexels
linux

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

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

Фото: Blue Bird / Pexels
qa

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

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

Фото: Mikhail Nilov / Pexels
devops

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

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

Фото: panumas nikhomkhai / Pexels
bash

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

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

Фото: Emrah Tolu / Pexels
devops

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

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

Фото: Alex Levis / Pexels
devops

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

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

Фото: Willians Huerta / Pexels
dev

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

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

Фото: AMORIE SAM / Pexels
linux

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

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

Фото: Ron Lach / Pexels
security

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

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

Фото: Ricky Esquivel / Pexels
devops

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

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

Фото: LUNA LUNA / Pexels
devops

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

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

Фото: K / Pexels
bash

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

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

Фото: Alfredo Lau-Tam / Pexels
security

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

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

Фото: Bia Sousa / Pexels
linux

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

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

Фото: Elizabeth Celestino / Pexels
devops

Как современный Docker упростил работу с compose файлами

Почему теперь можно использовать просто compose.yaml, а не привычный docker-compose.yaml. Всё стало проще, но если у тебя старая ОС — есть нюансы. Заодно обсудим, зачем вообще был нужен version в файле.

Фото: Ann H / Pexels
linux

Bind vs Volume в Docker

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

Фото: Juan Manuel Montejano Lopez / Pexels
self-hosted

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

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

Фото: Alex Levis / Pexels
self-hosted

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

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

Фото: Suki Lee / Pexels
linux

Load Average на пальцах

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

Фото: Mateus Ildefonso / Pexels
devops

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

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

Фото: Vie Studio / Pexels
devops

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

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

Фото: Mikael Blomkvist / Pexels
soft

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

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

Фото: ready made / Pexels
services

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

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

Фото: Daniil Kondrashin / Pexels

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

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

Фото: Quentin Guiot / Pexels
linux

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

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

Фото: Edge Training / Pexels
linux

Reexec VS Reload

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

Фото: cottonbro studio / Pexels
devops

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

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

Фото: panumas nikhomkhai / Pexels
linux

SelectOS в деле

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

Фото: Christina Morillo / Pexels
linux

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

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

Фото: K / Pexels
linux

Пробуем SelectOS

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

Фото: I'm Zion / Pexels
bash

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

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

Фото: Chris F / Pexels
bash

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

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

Фото: Markus Spiske / Pexels
bash

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

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

Фото: Sergei Starostin / Pexels
bash

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

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

Фото: Markus Spiske / Pexels
bash

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

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

Фото: Chia-Ho Lin / Pexels
bash

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

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

Фото: Connor Scott McManus / Pexels
bash

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

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

Фото: Vie Studio / Pexels
bash

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

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

Фото: Yanming Guo / Pexels