Генератор реверс-шеллов для пентеста
Где найти генератор реверс-шеллов с разными вариантами подключения и командами для слушателя. Короткая заметка о revshells.com и ссылка на подробный разбор реверс-шеллов в Bashdays.
Фото: Brett Sayles / Pexels
Фото: Bulat843 🌙 / PexelsСкрипты, однострочники, awk, cron, mapfile и практическая автоматизация рутины.
Все, что помогает писать понятные скрипты и автоматизировать рабочую рутину без лишней магии.
Где найти генератор реверс-шеллов с разными вариантами подключения и командами для слушателя. Короткая заметка о revshells.com и ссылка на подробный разбор реверс-шеллов в Bashdays.
Фото: Brett Sayles / PexelsПочему в команде read нужно указывать имя переменной без знака доллара и что происходит при read $foo. Разбираем безопасный вариант IFS= read -r foo для чтения пользовательского ввода в Bash.
Фото: Cedric Fauntleroy / PexelsКоманда cat file | sed ... > file обнуляет исходный файл до начала чтения. Показываем опасный пример, результат и замену через временный файл с последующим mv, а также альтернативный вариант с ed.
Фото: Mikhail Nilov / PexelsЧто происходит с файлом после unlink, пока процесс удерживает открытый файловый дескриптор. Bash-пример с exec 3, rm и read демонстрирует, почему имя исчезает из каталога раньше, чем содержимое перестаёт быть доступным.
Фото: Kindel Media / PexelsПроверяем через strace, перечитывает ли Bash подключённый файл при каждом вызове функции. Минимальный эксперимент показывает обращения openat и подтверждает, что source загружает файл один раз на запуск скрипта.
Фото: Daniil Komov / PexelsУдаление активного лога через rm разрывает привычный путь к файлу, пока процесс продолжает писать в открытый дескриптор. Разбираем безопасное обнуление через редирект, truncate и сигнал USR1 для Nginx или Apache.
Фото: Thirdman / PexelsПростой Bash-скрипт объединяет обычные и сжатые логи в правильном порядке и выводит их в stdout. Разбираем выбор между cat и zcat, сортировку файлов и дальнейшую обработку через grep, awk или sed.
Фото: Rafael Minguet Delgado / PexelsДва коротких Bash-скрипта показывают, что происходит с целочисленной переменной при выходе за пределы 64-битного диапазона. Наглядный эксперимент с инкрементом и умножением на два демонстрирует переполнение знакового integer.
Фото: Eva Bronzini / PexelsСравниваем арифметические циклы Bash, диапазоны, seq, чтение файлов и перебор путей. В конце — три необычные конструкции for для собеседований и экспериментов.
Фото: Giant Asparagus / PexelsПоказываем, как Bash вычисляет арифметические выражения внутри индекса массива. На примерах 6%2, 7%2 и 5%3 разбираем остаток от деления и выбор элемента.
Фото: Jan van der Wolf / PexelsЭкспериментально запускаем Bash-скрипт по URL через Nginx и fcgiwrap. Настраиваем FastCGI-сокет, location и SCRIPT_FILENAME, а также рассматриваем вариант с Lua.
Фото: RDNE Stock project / PexelsКороткая команда sed добавляет ANSI-коды цвета к найденной подстроке и сохраняет весь контекст файла. Достаточно заменить string на нужное слово.
Фото: https://kaboompics.com/ / PexelsИспользуем специальное устройство /dev/full, чтобы воспроизвести ошибку No space left on device без заполнения диска. Готовый Bash-скрипт проверяет обработку ошибки записи.
Фото: Nina zeynep güler 🦕 zz / PexelsРазбираем ассоциативный массив awk в конструкции !a[$0]++ и удаляем повторяющиеся строки за один проход. Дополнительно считаем вхождения и выполняем дробные вычисления.
Фото: cottonbro studio / PexelsРазбираем неожиданный результат выражения $((true == false)) в Bash. Показываем разницу между статусами команд и числовыми значениями переменных в арифметическом контексте.
Фото: cottonbro studio / PexelsРазбираемся, почему help printf, printf --help и env printf --help показывают разные справки. Сравниваем встроенную команду Bash и внешнюю утилиту /usr/bin/printf.
Фото: Tima Miroshnichenko / PexelsПроверяем существование процесса и права на отправку сигналов с помощью kill -0. Примеры Bash показывают коды возврата, фоновые процессы и ограничения обычного пользователя.
Фото: Susanne Plank / PexelsКороткий авторский техномем о Bash, Linux и спокойствии разработчика за терминалом.
Фото: Jakub Zerdzicki / PexelsИщем фрагменты удалённого crontab на диске через grep, восстанавливаем задания и добавляем защиту crontab -i и ежедневную резервную копию.
Фото: Mikhail Nilov / PexelsСобираем ctypes.sh, компилируем разделяемую библиотеку на C и вызываем её функции из Bash через dlopen и dlcall.
Фото: Jakub Zerdzicki / PexelsТри онлайн-редактора для Bash: Rextester, MyCompiler и LeetCode. Можно запускать код, работать с временными файлами и делиться результатом.
Фото: Daniil Komov / PexelsПрактический Bash-скрипт для отправки текстовых сообщений и файлов пользователю или в групповой чат через MAX Bot API. Разбираем параметры запуска, загрузку вложений, формирование JSON через jq и антифлуд-задержку.
Фото: Darina Belonogova / PexelsРазбираемся, зачем создавать файл командой touch перед открытием в Vim, если редактор и так умеет сохранить новый файл. Обсуждаем раннюю проверку прав на запись, обновление времени модификации и применение touch для lock-файлов и …
Фото: TStudio / PexelsАвтоматизируем повторяющуюся цепочку git add, commit и push с помощью shell-алиаса и встроенных алиасов Git. В статье есть готовая команда с датой коммита и набор сокращений для повседневной работы.
Фото: ThisIsEngineering / PexelsПоказываем, как убрать у переменной Bash атрибут экспорта, не удаляя её из текущей оболочки. Сравниваем громоздкий вариант с unset и короткие решения через typeset, declare и export -n.
Фото: Markus Spiske / PexelsНастраиваем личный SOCKS5-прокси через SSH без доступа пользователя к shell и SFTP. Ограничиваем аккаунт в sshd_config, запускаем динамический проброс порта и подключаем Firefox с передачей DNS-запросов через прокси.
Фото: Holger Schué / PexelsНастраиваем direnv для автоматической загрузки и выгрузки переменных окружения при переходе между каталогами проектов. Устанавливаем hook для Bash, разрешаем .envrc и проверяем изоляцию переменной FOO на практике.
Фото: Arina Krasnikova / PexelsЛичный опыт переноса shell-скрипта с Linux на OPNsense и BSD. Разбираем различия csh и sh, перенос строк, особенности date и awk, отсутствие /dev/shm и набор консольных редакторов.
Фото: Brian Jesus / PexelsЗнакомимся с doas из OpenBSD как более простой альтернативой sudo. Разбираем установку, правила permit и nopass, доступ для пользователей и групп, а также запуск root shell.
Фото: Nic Wood / PexelsТри практических механизма systemd для задач по расписанию, наблюдения за файлами и запуска сервисов по подключению. Примеры юнитов timer, path и socket помогают заменить cron, inotify-tools и постоянно работающие службы.
Фото: Annushka Ahuja / PexelsОбъясняем, почему исполняемый файл из текущего каталога запускают через ./ и как оболочка использует PATH. Разбираем безопасность такого поведения, опасность добавления точки в PATH и полные пути для cron.
Фото: Tom Fisk / PexelsЭксперимент с передачей текстовых сообщений между Bash-процессами через сигналы SIGRTMIN. Сервер и клиент кодируют символы по битам, обрабатывают границы сообщений и показывают, почему важны задержки.
Фото: Juan Martin Gomez / PexelsСобираем минимальный конфиг-агент на Bash, который синхронизирует эталонные настройки Nginx из Git. Скрипт с cron, rsync и systemctl автоматически восстанавливает конфиги и перезагружает сервис только при изменениях.
Фото: Omar Ashraf / PexelsРазбираем Bash-скрипт, который при массовом переименовании незаметно теряет половину файлов. На тестовом наборе показываем поведение mv при совпадении имён и используем опцию -b для резервных копий.
Фото: Marlon Castor / PexelsОбъясняем разницу между жёстким путём к интерпретатору и конструкцией /usr/bin/env в shebang. На примерах с Bash, Python, PATH и виртуальным окружением показываем преимущества и ограничения переносимого запуска скриптов.
Фото: Jordi Gamundi Domenech / PexelsРазбираем несколько способов отделить имя файла от расширения в Bash без громоздких регулярных выражений. Используем подстановку параметров, basename, dirname и переменную IFS на понятных примерах.
Фото: cottonbro studio / PexelsЭкспериментируем с отключением системных журналов Linux, journald, rsyslog и истории Bash. Материал показывает, где остаются логи, какие побочные эффекты возникают и почему эти приёмы допустимы только в учебной среде.
Фото: Amorie Sam / PexelsСравниваем locate и find, разбираемся с базой updatedb и ускоряем простой поиск файлов в Linux. На примере strace показываем, как globbing в Bash меняет аргументы команды и почему шаблоны нужно заключать в кавычки.
Фото: RDNE Stock project / PexelsПошагово настраиваем вход на Linux-сервер по SSH-ключу: генерируем пару RSA, восстанавливаем публичную часть, копируем её через ssh-copy-id и выставляем права на authorized_keys. Также разбираем подключение под разными …
Фото: Obi Onyeador / PexelsКомбинация ls -t и head выводит полный путь к последнему изменённому файлу или каталогу. Короткий способ подходит для резервных копий и автоматизации без сложной команды find.
Фото: Zulfugar Karimov / PexelsСимволическая ссылка не может заменить уже существующий файл, а bind mount справляется с такой подменой. Проверяем поведение ln -s и mount --bind на двух текстовых файлах.
Фото: Mac Solatorio / PexelsРазбираем порядок аргументов su и ошибку, при которой опция -c воспринимается как имя пользователя. Показываем правильную команду для выполнения ls от root.
Фото: Flickr / PexelsАвтор COLODEBUG предлагает использовать встроенную команду Bash : вместо обычного символа комментария #. Такой приём делает пояснения заметными в трассировке скрипта и помогает при отладке.
Фото: Markus Winkler / PexelsТри способа посчитать сумму чисел из стандартного ввода или файла в Linux: GNU datamash, awk и dc. Сравниваем команды и помним о проверке входных данных.
Фото: Kindel Media / PexelsНебольшой проект psh показывает исходники командной оболочки на Rust. В репозитории всего около десяти файлов, поэтому код удобно изучать.
Фото: Marina Endzhirgli / PexelsBash-скрипт whitepass генерирует пароль из пробелов и других невидимых символов. Экспериментальная идея и необычная проверка форм авторизации.
Фото: Gu Kssn / PexelsКонсольная Змейка работает на чистом Bash 5.1+ и запускается одной командой без установки. Управлять можно стрелками или клавишами Vim hjkl.
Фото: Kanishka Sarangi / PexelsСпециальный параметр $- показывает опции, включённые в текущей оболочке Bash через set. Проверяем флаг одной командой и в условии скрипта.
Фото: Ömer Asru / PexelsCLI Exercises — интерактивный тренажёр с 77 заданиями по командной строке Linux, подсказками и несколькими вариантами решений. Показываю установку в отдельное Python-окружение через venv и запуск одной командой.
Фото: Mikhail Nilov / PexelsgoManageDocker добавляет текстовый интерфейс для управления образами, контейнерами и томами Docker без длинных команд. Инструмент устанавливается одной shell-командой и подходит для локальных пет-проектов.
Фото: Bulat843 🌙 / PexelsBash-скрипт QEMU-QuickBoot упрощает создание и загрузку виртуальных машин QEMU через графический интерфейс Zenity. Можно выбрать физическое устройство, ISO, VHD или другой образ и запустить установку с BIOS либо UEFI.
Фото: Panumas Nikhomkhai / PexelsRick & Morty BASH Quest превращает базовые команды Linux в браузерный текстовый квест. Чтобы найти Саммер и Рика, придётся перемещаться между порталами, читать подсказки и пользоваться ls, cd, cat, pwd и man.
Фото: Anastasia Shuraeva / PexelsКороткая проверка номера дня недели через date +%u позволяет Bash-скрипту отказаться от работы в субботу и воскресенье. Это шуточный вредный совет для cron-задач, который заодно показывает простое условие с числовым сравнением.
Фото: Bingqian Li / PexelsBash Style Guide Дэйва Эдди — короткая выжимка о безопасных, предсказуемых и единообразных shell-скриптах. Руководство можно читать в браузере или прямо в терминале через curl, а основные темы разобраны и в видеороликах YSAP.
Фото: Jess Bailey Designs / PexelsДва однострочника на Bash читают пароль без отображения символов и печатают звёздочки вместо введённого текста. Второй вариант дополнительно поддерживает удаление символов клавишей Backspace.
Фото: Magda Ehlers / PexelsВ Bash нет отдельной переменной OFS, но первый символ IFS становится разделителем для параметров внутри "$*". Пример показывает, как собрать CSV-строку и почему команда set меняет позиционные параметры текущей оболочки.
Фото: Alex Andrews / PexelsНебольшой Bash-скрипт перебирает слова из текстового файла, вычисляет длину каждого и сохраняет самый длинный вариант. Решение обходится без awk, sed и других внешних утилит.
Фото: max laurell / PexelsКоманда runuser запускает процесс от имени другого пользователя без запроса пароля, когда вызывающий процесс уже обладает правами root. Это делает её удобной для системных скриптов, cron-задач и служб.
Фото: Jonathan Borba / PexelsДве встроенные опции Bash упрощают навигацию по каталогам: cdspell исправляет небольшие ошибки в путях, а autocd позволяет переходить в директорию без команды cd. Показываем работу обеих функций на коротких примерах.
Фото: fauxels / PexelsОднострочник для автоматического обновления Debian или Ubuntu и перезагрузки только при появлении /var/run/reboot-required. Подход пригодится в самописных установочных скриптах без Ansible и Puppet.
Фото: energepic.com / PexelsРасширение параметров Bash позволяет удалять префиксы и суффиксы, получать подстроки и выполнять замены без внешних утилит. Разбираем несколько коротких примеров и сохраняем полезную шпаргалку по синтаксису оболочки.
Фото: RDNE Stock project / PexelsHSTR превращает историю команд Bash и Zsh в интерактивный список с удобной фильтрацией. Вместо многократного Ctrl-R можно ввести часть запроса, выбрать нужную команду стрелками и сразу вернуть её в терминал.
Фото: Justin Rieta / Pexelsinotify-tools позволяет в реальном времени увидеть, где приложение создаёт неизвестный файл. На практическом примере отслеживаем события каталога рекурсивно, находим выгрузку и разбираемся, когда пригодится incrond.
Фото: fall maple / PexelsBash-скрипт может хранить закодированный Base64 блок после основного кода и читать его через sed, base64 и mapfile. Разбираем компактный самодостаточный пример.
Фото: Cup of Couple / PexelsРазбираем, почему значение переменной не сохраняется после while в конвейере Bash, как здесь участвует subshell и как исправить код через process substitution.
Фото: Robert So / PexelsGit не хранит полную Unix-маску прав файлов. Показываем два Bash-скрипта: первый сохраняет режимы в permissions.txt, второй восстанавливает их после клонирования.
Фото: RDNE Stock project / PexelsGameShell превращает знакомство с Linux и командной строкой в текстовый квест с заданиями, подсказками и историей. Подойдёт начинающим и преподавателям.
Фото: Tom Fisk / PexelsКоманды stty и tput позволяют отключить эхо клавиатуры и скрыть курсор во время работы Bash-скрипта. Добавляем trap, чтобы терминал корректно восстановился после выхода или прерывания.
Фото: Jeremy Waterhouse / PexelsОнлайн-форматер превращает длинную однострочную Bash-команду в читаемый многострочный вариант с переносами и отступами. Инструмент пригодится для Docker, gcloud и других громоздких консольных конструкций.
Фото: Tanha Tamanna Syed / PexelsСравниваем циклы for и while при чтении файла в Bash и выясняем, почему вложенный read забирает строки из stdin. Наглядный скрипт показывает разницу между предварительной загрузкой значений и последовательным чтением.
Фото: Mark Stebnicki / PexelsПростой способ вынести переменные Bash-скрипта в JSON-файл и читать их через jq. Разбираем ключ -r, получение строк без кавычек и базовую структуру конфигурации.
Фото: Tanha Tamanna Syed / PexelsPiu-piu — консольная мультиплеерная игра, написанная на Bash и ANSI-последовательностях. Внутри вертолёты, дуэли, совместная игра, необычный специальный режим и простая установка из репозитория.
Фото: Ruben Boekeloo / PexelsТри браузерных генератора помогают собрать приглашение командной строки Bash без ручного изучения параметров PS1, PS2 и PS3. Подборка Bash Prompt Generator, Prompt Gen и EZprompt для быстрой настройки терминала.
Фото: Rafael Minguet Delgado / PexelsПростой способ хранить задания crontab в Git и автоматически раскатывать их на серверы без Ansible или Puppet. Скрипт забирает файл supercron из репозитория и целиком импортирует его в пользовательский crontab.
Фото: Alicia Christin Gerald / PexelsVim и Vi могут запустить интерактивную оболочку через команды -c и --cmd. Показываем, почему редактор в белом списке команд способен обойти ограниченную оболочку и открыть путь к повышению привилегий.
Фото: Diana Indriany / PexelsПошагово разбираем связь терминала, оболочки и псевдотерминала через /dev/pts. Находим PID Konsole и Bash, подключаем strace и записываем системные вызовы для изучения ввода.
Фото: Markus Spiske / PexelsНастраиваем подключение к MySQL без передачи логина и пароля в командной строке или Bash-скрипте. Используем файл ~/.my.cnf, секцию client, параметр --defaults-file и безопасные права доступа.
Фото: Dan Nelson / PexelsПроверяем потребление RSS текущего процесса Bash до и после заполнения большой переменной. Эксперимент показывает, как память увеличивается и снова уменьшается без отдельного Garbage Collector.
Фото: Polina Tankilevitch / PexelsРазбираемся, почему false | true возвращает статус последней команды, и получаем код каждого этапа Bash-конвейера через массив PIPESTATUS. Показываем примеры для двух и трёх команд.
Фото: Pixabay / PexelsСобрали самые просматриваемые, пересылаемые и обсуждаемые публикации Bashdays за октябрь 2023 года. В подборке Bash, Linux, chroot, strace, VIM, архиваторы и полезные shell-инструменты.
Фото: Tiger Lily / PexelsPOSIX ограничивает имена переменных в shell буквами, цифрами и подчёркиванием, но функции Bash допускают более необычные символы. Показываем рабочую функцию с эмоджи в имени и объясняем разницу правил.
Фото: Tim Witzdam / PexelsУтилита jc преобразует вывод iptables, ls, fstab, ping и других Linux-команд в структурированный JSON. Показываем простой конвейер с jq, доступные парсеры и вариант использования jc как Python-модуля.
Фото: Bibek ghosh / PexelsВключаем встроенный режим insults в sudo и настраиваем собственное сообщение badpass_message для неверного пароля. Показываем варианты конфигурации sudoers и Bash-скрипт со случайными ответами.
Фото: Miguel Á. Padriñán / PexelsНа сервере Minecraft спрятаны сто денежных кодов и десять призов на обучение в Linux Factory. Рассказываем правила поиска, регистрацию, координаты и режим работы игрового сервера mc.bashdays.ru.
Фото: Lara Jameson / PexelsСравниваем встроенную команду false в Bash и отдельный бинарник /usr/bin/false. Объясняем, почему даже параметры --help и --version завершаются с кодом 1 и как проверить тип команды.
Фото: Mwabonje Ringa / PexelsAtuin заменяет стандартный поиск Ctrl+R, хранит историю shell-команд в SQLite и синхронизирует её между компьютерами. Рассматриваем шифрование, фильтры и самостоятельный сервер через Docker Compose.
Фото: Godfrey Atima / PexelsDevToys объединяет более тридцати офлайн-инструментов для JSON, YAML, JWT, Base64, cron, SQL, XML, хешей и изображений. Есть графическая, портативная и CLI-версии для разных операционных систем.
Фото: Eduardo Rosas / PexelsКомпактное решение задачи о восьми ферзях перебором восьмеричных чисел в AWK. Разбираем проверку перестановок без повторений, преобразование цифр в массив и контроль диагоналей.
Фото: Doğan Alpaslan Demir / PexelsВеб-генератор ansicodes помогает мышкой подобрать цвет, фон и стиль терминального текста, а затем получить готовую ANSI-последовательность. Рассматриваем self-hosted-вариант, CLI-альтернативу и обязательный флаг --no-color.
Фото: Myburgh Roux / PexelsОбычный gzip использует одно ядро, а pigz распараллеливает сжатие и заметно ускоряет архивирование. Сравниваем время на файле 10 ГБ и подключаем pigz к tar через pipe и --use-compress-program.
Фото: Anna Tarazevich / PexelsPOSIX задаёт общий интерфейс операционных систем и помогает создавать переносимые программы и shell-скрипты. Объясняем происхождение стандарта, сертификацию Linux-дистрибутивов и практический смысл POSIX Shell.
Фото: Joachim Schnürle / PexelsЭксперимент с XOR-преобразованием слова Linux в PURID и обратно. Разбираем Bash brace expansion, систему счисления по основанию 64, printf, echo и альтернативный вариант на Perl.
Фото: Daniil Komov / PexelsДве задачи на самый короткий Bash-код: вывести таблицу умножения и нарисовать шахматную доску в терминале. Авторские решения используют brace expansion, арифметику, printf и ANSI-последовательности.
Фото: Pixabay / PexelsКоманда ps с полем lstart показывает точную временную метку запуска процесса. На примере Firefox объединяем ps, pgrep и find -newermt, чтобы находить файлы, изменённые после старта программы.
Фото: Monstera Production / PexelsПростой самописный мониторинг через journalctl, logger и cron без связки Prometheus, Grafana и Alertmanager. Bash-скрипты считают события за заданный интервал и запускают полезную нагрузку при превышении порога.
Фото: Mikhail Nilov / PexelsКонцепт второго фактора для SSH без стороннего сервиса аутентификации. Shell-скрипт после входа выдаёт код, уведомляет администратора, проверяет ответ через почту или Telegram и передаёт управление Bash.
Фото: Jakub Zerdzicki / PexelsУтилита tee одновременно показывает вывод команды на экране и записывает его в файл, а script сохраняет всю терминальную сессию. Разбираем простые команды для логирования вывода в реальном времени.
Фото: 도연 김 / PexelsСравниваем три способа получить уникальные строки файла: sort с uniq, ассоциативный массив в awk и чистый Bash. Готовый скрипт показывает одинаковый результат и напоминает о расходе памяти на больших файлах.
Фото: Anete Lusina / PexelsРазбираем, как условно добавлять параметр --platform linux/arm64 в Docker-команду внутри pipeline. Сравниваем Bash-конструкцию [[ ]] и POSIX-совместимый вариант с [ ], чтобы один сценарий работал на разных архитектурах.
Фото: Jonathan Borba / PexelsCRIMS0NH4T автоматизирует рутинную настройку Fedora после чистой установки: DNF, RPM Fusion, кодеки, GPU-драйверы и оптимизацию GNOME. Разбираем раннюю версию Bash-скрипта и точечные улучшения для строгого режима, логов и …
Фото: Oluwaseun Duncan / PexelsЧем отличаются source script.sh, . script.sh и ./script.sh в Bash. На примерах разбираем текущую оболочку, локальные и экспортированные переменные, shebang и право на выполнение.
Фото: cottonbro studio / PexelsBash-скрипт для автоматического создания дампов PostgreSQL через pg_dump, логирования результата и отправки уведомлений в Telegram. Дополнительно настраиваем очистку старых файлов через find и cron.
Фото: Jakub Zerdzicki / PexelsВ Debian 13 привычные команды last и lastb могут отсутствовать, но историю успешных и неудачных SSH-входов можно собрать через journalctl и gawk. Готовые команды формируют таблицу timestamp, IP и логина, поддерживают фильтр по …
Фото: Tima Miroshnichenko / PexelsПростой способ перестать путать команды chmod и chown через понятные смысловые якоря. Разбираем, как связать owner с владельцем, mode с режимом доступа и запомнить ключи tar без зубрёжки.
Фото: Kindel Media / PexelsPerl-скрипт автоматически нумерует системные вызовы в выводе strace и упрощает подготовку инъекций. Разбираем запуск через -o, цветовую подсветку, подсчёт openat и newfstatat и отделение трассировки stderr от вывода программы.
Фото: Daniil Komov / PexelsДва варианта таймера обратного отсчёта на Bash: с ведущим нулём через tput и упрощённый цикл с управляющими последовательностями терминала. Разбираем позиционирование и скрытие курсора, расчёт длины строки и обновление счётчика на …
Фото: Image Hunter / PexelsЗнакомимся с Shell Script Compiler и превращаем Bash-скрипт в C-код и готовый ELF-бинарник. Разбираем установку shc, команду shc -f, созданные файлы и ограничения переносимости между Linux-системами.
Фото: Alexey Demidov / PexelsТестируем платформу Terminator с бесплатными сессиями Debian 12 и Windows Server 2016 прямо в браузере. Рассматриваем ограничения 15-минутной сессии и сценарии для проверки программ, скриптов, команд и доступности сайтов.
Фото: Mikhail Nilov / PexelsСоздаём генератор псевдослучайных строк в Bash с помощью /dev/urandom, tr и head. Разбираем набор допустимых символов, длину результата и ключи -c и -d команды tr.
Фото: lil artsy / PexelsПроверяем из Bash, работает скрипт на хосте или внутри Docker-контейнера. Рассматриваем файл /.dockerenv, проверку процесса kthreadd через /proc/2/status и сохранение изменённого контейнера командой docker commit.
Фото: Joni Tuohimaa / PexelsРазбираем fork-бомбу на Bash: как рекурсивный запуск процессов приводит к отказу в обслуживании и почему используется конвейер. Показываем читаемую форму функции и ограничение числа процессов через ulimit и limits.conf.
Фото: CK Seng / PexelsРазбираемся, зачем в awk появилась недокументированная опция --nostalgia и почему она аварийно завершает программу. Заодно смотрим на GNU-синтаксис -W long_option и эквивалентные команды для nostalgia и copyright.
Фото: Sidde / PexelsИспользуем встроенную команду compgen для просмотра команд, алиасов, функций, ключевых слов, файлов и пользователей в Bash. Показываем генерацию динамических массивов и практический способ изучать возможности Linux небольшими …
Фото: Tibe De Kort / PexelsРазбираем файловые дескрипторы stdout и stderr и синтаксис перенаправления 2>&1 в Bash. Объясняем роль амперсанда, отличие от записи 2>1 и сокращённый оператор |& на примере отправки общего потока в tee.
Фото: Wayan Daton / PexelsРазбираемся, почему Bash воспринимает 08 как некорректное восьмеричное число и как безопасно получить номер месяца без ведущего нуля. Сравниваем решения через date, арифметику Bash, sed и awk с учётом различий между gawk и mawk.
Фото: RDNE Stock project / PexelsРазбираемся, откуда команды Linux берут допустимые варианты подтверждения y, n, Д, Н, 0, 1, плюс и минус. Изучаем выражения yesexpr и noexpr в локалях, проверяем их через locale и собираем собственную локаль с localedef.
Фото: Ann H / PexelsЗнакомимся с Bash-утилитой Kill Port, которая находит и завершает процесс, занявший указанный TCP-порт. Разбираем сценарий локальной разработки, простую ручную установку, запуск через killport и ограничения для процессов уровня …
Фото: Steve A Johnson / PexelsНастраиваем построчный вывод программы в файл с помощью stdbuf -oL, чтобы наблюдать за логом в реальном времени. Дополнительно разбираем сочетание с nohup и альтернативный запуск через утилиту script с принудительным flush.
Фото: Joshua Woroniecki / PexelsЗнакомимся с shfmt — форматтером и синтаксическим анализатором shell-скриптов для POSIX, Bash и mksh. Показываем базовый запуск, перезапись файла ключом -w и применение инструмента перед публикацией кода в открытых репозиториях.
Фото: Marian Florinel Condruz / PexelsРазбираем конструкцию !#:3 из механизма history expansion в Bash и Zsh. Показываем, как сослаться на третий аргумент ещё не выполненной команды и повторно использовать путь без дублирования ввода.
Фото: Christina Morillo / PexelsПоказываем, как вывод переменной без кавычек запускает разбиение по словам и глоббинг в Bash. На примерах с шаблоном *.zip разбираемся, чем отличаются echo $var, echo "$var" и безопасный вывод через printf.
Фото: Suzy Hazelwood / PexelsВосстанавливаем доступ по SSH, когда ошибка в .bashrc ломает интерактивную оболочку удалённого сервера. Показываем два способа входа через принудительный запуск /bin/sh и SFTP, а также объясняем риск простых ограничивающих …
Фото: Mikhail Nilov / PexelsНастраиваем отдельный SFTP-сервер MySecureShell поверх OpenSSH и ограничиваем пользователей файловой подсистемой. Разбираем установку в Debian, смену оболочки, конфигурацию, управление скоростью и совместимость с SSHFS и rsync.
Фото: cottonbro studio / PexelsИспользуем strace и системный вызов execve, чтобы увидеть, какие внешние программы запускает команда и с какими аргументами. На примере man разбираем ключи трассировки, сохранение лога и практическую отладку скриптов и приложений.
Фото: cottonbro studio / PexelsПишем исполняемый sed-скрипт, который проверяет повторяющуюся последовательность строк в файле и выводит номер первого нарушения. Разбираем адресацию, переходы по меткам, команду q и набор тестовых случаев для проверки результата.
Фото: Tara Winstead / PexelsСравниваем условия [ ] и [[ ]] в shell-скриптах: переносимость между POSIX sh, Bash и ksh, доступные операторы, экранирование и регулярные выражения. Практические примеры показывают, когда выбрать совместимость, а когда — более …
Фото: Tasso Mitsarakis / PexelsРазбираем ошибочную конструкцию while с pgrep, command substitution, test и перенаправлением в файл 0. Упрощаем цикл Bash до проверки кода возврата процесса и объясняем, почему лишние квадратные скобки только запутывают условие.
Фото: Andrea Piacquadio / PexelsПроверяем Linux-сервер с помощью LinPEAS и ищем ошибки конфигурации, SUID-файлы и другие пути повышения привилегий. Показываем запуск без установки через curl или Python и объясняем, почему скрипту не нужен root.
Фото: Bulat843 / PexelsПоказываем, почему алиасы из `.bashrc` не работают в обычном Bash-скрипте и как включить интерактивный режим ключом `-i`. Сравниваем этот подход с `source`, `expand_aliases` и экспортируемой функцией.
Фото: Tara Winstead / PexelsРазбираем сопроцессы `coproc`, появившиеся в Bash 4, и их отличие от обычных фоновых заданий. Показываем синтаксис запуска, массив дескрипторов COPROC, направления stdin и stdout и правила именованной группировки.
Фото: Mikhail Nilov / PexelsРазбираемся, чем заменить try/catch в Bash с помощью логического оператора `||`, группировки команд и проверки кода возврата. Показываем практический шаблон обработки ошибок и объясняем, когда проще использовать `set -e`.
Фото: So Phors / PexelsДобавляем и удаляем задания cron прямо из Bash-скрипта. Используем уникальные комментарии для идентификации строк crontab, функции ADD_CRON_TASK и REMOVE_CRON_TASK, а также учитываем переменную PATH.
Фото: Karolina Grabowska / PexelsРешаем классическую задачу о восьми ферзях средствами AWK и вложенных циклов. Разбираем проверку горизонталей и диагоналей, ограничение оператора break и полученные 92 варианта.
Фото: Steve A Johnson / PexelsРазбираем двоичное представление букв ASCII и отличие верхнего регистра от нижнего в шестом бите. Меняем регистр через XOR и сравниваем подход со встроенными конструкциями Bash.
Фото: Markus Spiske / PexelsРазбираемся, чем отличаются операторы `&&`, `;` и `||` при связывании команд в Bash. Показываем влияние кодов возврата, короткого замыкания и режима `set -e` на выполнение цепочки.
Фото: Mateusz Dach / PexelsСравниваем два бесконечных цикла Bash — с командами : и true. Объясняем одинаковый код возврата, роль пустой команды и наследие Bourne Shell, а также оцениваем читаемость обоих вариантов.
Фото: mg shawn / PexelsПоказываем, как утилита basenc из GNU coreutils кодирует UTF-8-текст в двоичное представление и возвращает его обратно. Разбираем параметры base2msbf, ширину вывода и байт перевода строки.
Фото: Pixabay / PexelsДобавляем в чистый Bash автоподсказки и подсветку команд с помощью BLE.sh. Затем устанавливаем oh-my-posh, подключаем темы оформления через профиль оболочки и получаем удобный терминал без Zsh.
Фото: FOX ^.ᆽ.^= ∫ / PexelsНастраиваем Git-хук pre-commit для автоматической проверки Bash-скриптов через ShellCheck. В качестве бонуса адаптируем тот же подход для Ansible-плейбуков и ansible-lint.
Фото: Jakub Zerdzicki / PexelsРазбираем массив FUNCNAME и получаем имя текущей функции внутри Bash-скрипта. Показываем стек вызовов, аналог funcstack в Zsh и связанные переменные BASH_SOURCE и BASH_LINENO для отладки.
Фото: Walls.io / PexelsРазбираемся, почему команда history иногда показывает звёздочку рядом с записью Bash. Пошагово воспроизводим изменение строки истории, откатываем правку и сверяем поведение с документацией GNU Bash.
Фото: AI25.Studio Studio / PexelsОграничиваем число параллельных фоновых заданий в Bash без GNU Parallel. Скрипт использует `nproc`, `jobs`, цикл ожидания и `wait`, чтобы равномерно загрузить ядра и дождаться всех задач.
Фото: Maor Attias / PexelsПодключаем ShellCheck для статического анализа Bash-скриптов и поиска ошибок до запуска. Разбираем установку, базовую проверку, отчёты SC-кодов и интеграцию линтера с Vim и VS Code.
Фото: cottonbro studio / PexelsРешаем задачу нумерации строк одним процессом sed вместо связки из двух вызовов. Используем команду `=` и управляющие ANSI-последовательности для перемещения курсора в терминале.
Фото: Pixabay / PexelsСкачиваем файл без curl и wget через встроенное устройство `/dev/tcp` в Bash. Разбираем HTTP-запрос, файловый дескриптор и ограничения прямого сокетного соединения без TLS.
Фото: Sergei Starostin / PexelsСкрываем курсор на время выполнения команды и возвращаем его перед выводом Bash prompt. Разбираем `PROMPT_COMMAND`, псевдосигнал DEBUG, `trap` и управляющие ANSI-последовательности.
Фото: Al Nahian / PexelsСравниваем современную подстановку `$(command)` и устаревшие обратные кавычки в Bash. На примерах показываем проблемы вложенности, экранирования и читаемости gravemarks.
Фото: Antonio Borriello / PexelsРазбираемся с малоизвестной настройкой `set -k` в Bash, которая превращает присваивания в окружение команды независимо от их позиции. На примере `dd` показываем неожиданное поведение и способ отключить режим через `set +k`.
Фото: Darren Halos / PexelsЗнакомимся с chezmoi для управления `.bashrc`, `.vimrc`, `.gitconfig` и другими dotfiles на нескольких устройствах. Добавляем и редактируем конфиги, смотрим diff, восстанавливаем файлы и синхронизируем репозиторий через Git.
Фото: Mikhail Nilov / PexelsШпаргалка по перенаправлению stdout и stderr в Bash: `>`, `>>`, `2>`, `&>`, `tee` и `|&`. Показываем, какие потоки остаются в терминале, какие попадают в файл и как меняется существующий файл.
Фото: Sonny Sixteen / PexelsИспользуем проверку test -t в Bash, чтобы понять, направлен ли стандартный вывод в терминал или в pipe. Скрипт сможет включать оформление для интерактивного запуска и не передавать управляющие последовательности другим утилитам.
Фото: Ann H / PexelsПроверяем синтаксис Bash-скриптов до выполнения с помощью bash -n и режима set -o noexec. Добавляем проверку всех .sh-файлов в Git hook и используем set -u, чтобы находить обращения к необъявленным переменным.
Фото: cottonbro studio / PexelsПроверяем существование обычного файла в Bash с помощью test -f и квадратных скобок. Разбираем коды возврата, отрицание, однострочные условия и другие ключи для проверки директорий, сокетов и прав доступа.
Фото: cottonbro studio / PexelsРазбираем два режима команды exec в Bash: замену текущего процесса и перенаправление потоков. На примерах открываем файловые дескрипторы 3–9, отправляем stdout и stderr в файлы и читаем несколько файлов во вложенных циклах.
Фото: Aleks Magnusson / PexelsНастраиваем общую историю команд Bash для нескольких одновременно открытых терминалов. Разбираем `history -a/-c/-r`, `histappend`, `HISTCONTROL` и `PROMPT_COMMAND`, чтобы новые команды сразу появлялись во всех сессиях.
Фото: Kindel Media / PexelsНеобычные способы получить текущую дату, время и Unix time в Bash без привычной команды date. Используем stat, ps, printf, преобразование `${parameter@P}`, а также переменные EPOCHREALTIME и EPOCHSECONDS.
Фото: Engin Akyurt / PexelsСравниваем одинарные и двойные квадратные скобки в условиях Bash. На примерах разбираем работу логического оператора &&, комбинированные проверки и причины, по которым двойные скобки безопаснее и понятнее нескольких отдельных …
Фото: Tom Fisk / PexelsПодборка полезных горячих клавиш Bash для навигации, редактирования команд, поиска по history и управления терминалом. Разбираем сочетания Ctrl и Alt, которые помогают быстрее работать в командной строке.
Фото: Soumil Kumar / PexelsИспользуем цикл until в Bash, чтобы дождаться появления непустого файла и затем выполнить полезную нагрузку. Добавляем таймаут через SECONDS и разбираем ограничения такого опроса по времени.
Фото: marco / PexelsУтилита cruft находит файлы, которые появились в Linux в обход пакетного менеджера. Настраиваем исключения для Docker и пользовательских каталогов, сохраняем отчёт и ищем забытые скрипты или подозрительные артефакты.
Фото: cottonbro studio / PexelsСравниваем вероятность неисправимых ошибок чтения у WD Blue, WD Gold, SAS Toshiba и SSD Micron. Объясняем, почему RAID не всегда защищает от повреждённых данных и как контрольные суммы ZFS помогают обнаруживать ошибки.
Фото: Josh Moodley / PexelsВосстанавливаем Bash-скрипт, который удалили с диска, пока процесс продолжает работать. Через lsof находим PID и файловый дескриптор, а затем читаем исходник из /proc/PID/fd.
Фото: Tima Miroshnichenko / PexelsНастраиваем трассировку Bash через set -xve и переменную PS4, чтобы видеть файл, номер строки и имя функции. Добавляем цвет к отладочному выводу и быстрее находим место падения большого скрипта.
Фото: Bulat843 🌙 / PexelsКогда нет интернета и подсказок ИИ, готовые примеры Bash уже лежат в системных скриптах Linux. Одной командой находим реальные случаи использования getopts и других конструкций в /usr/bin, /usr/sbin, /bin и /sbin.
Фото: Ruben Boekeloo / PexelsРазбираем readonly-переменные в Bash: как защитить значение от перезаписи, почему unset не помогает и как увидеть ошибку readonly variable. Отдельно показываем рискованный трюк с GDB и его ограничения.
Фото: Towfiqu barbhuiya / PexelsСравниваем три способа узнать число доступных процессорных ядер в Linux: /proc/cpuinfo, getconf и nproc. Используем результат в Bash-скрипте для обновления worker_processes и безопасной перезагрузки Nginx.
Фото: ed br / PexelsПрактический опыт подготовки большого самоучителя по Bash сначала в Markdown и Pandoc, а затем в LibreOffice. Разбираем ограничения таблиц, кириллицы, UTF-символов и PDF-вёрстки, которые стали заметны после девятнадцати глав.
Фото: Ron Lach / PexelsНастраиваем Bash Readline так, чтобы кавычки, круглые, квадратные и фигурные скобки автоматически закрывались прямо в терминале. Разбираем bind, inputrc, режим emacs и возможные конфликты горячих клавиш.
Фото: Matheus Bertelli / PexelsЗащищаем долгий Bash-скрипт от параллельных запусков из cron с помощью flock и lock-файла. Готовый обработчик блокирует повторную копию процесса и освобождает блокировку после завершения работы.
Фото: Engin Akyurt / PexelsПроверяем целостность архивов tar.gz без распаковки командами tar и gzip, намеренно повреждаем файл через truncate и разбираем коды возврата. В конце — готовый Bash-скрипт для автоматической проверки резервных копий.
Фото: brokenadmiral_ / PexelsПрактический справочник по специальным параметрам Bash: позиционные аргументы, PID, код возврата, IFS, имя скрипта и последний фоновый процесс. Каждый параметр разобран на коротком воспроизводимом примере.
Фото: Gonzalo Álvarez Balcazar / PexelsBash-скрипт фотографирует человека при попытке аутентификации Linux через PAM и отправляет снимок в Telegram. В примере используются ffmpeg, curl, pam_exec и настройка optional или required.
Фото: Matheus Bertelli / PexelsРазбираем Linux-команду yes для автоматической передачи подтверждений в интерактивные программы. Показываем работу через пайп, произвольные ответы и отправку пустой строки для имитации Enter в скриптах и пайплайнах.
Фото: Tara Winstead / PexelsОбъясняем принцип RSA на небольших простых числах и понятном примере. Вычисляем открытый и закрытый ключи, шифруем число по модулю и повторяем расчёт в Bash через bc.
Фото: Jan van der Wolf / PexelsСобрали консольные сервисы для определения внешнего IP-адреса и геолокации через curl, dig и whois. Показываем короткие команды и объясняем, как сделать проверку отказоустойчивой в Bash-скриптах.
Фото: Luke Greenwood / PexelsРазбираем тест -newerXY утилиты find и временные метки файлов. Ищем изменения относительно заданной даты или файла-образца, создаём контрольную метку через touch и выводим время найденных объектов.
Фото: Thirdman / PexelsСоздаём собственную метрику Prometheus обычным Bash-скриптом через textfile collector в node_exporter. Разбираем формат .prom, периодический запуск из cron и пример передачи квоты внешнего сервиса.
Фото: Monocromática Artes B.cruz / PexelsИспользуем printf для получения кодов символов в шестнадцатеричной, восьмеричной и десятичной системах. Проверяем влияние LC_ALL на UTF-8 и сохраняем форматированный результат в переменную.
Фото: Markus Spiske / PexelsСоздаём массив двоичных чисел средствами brace expansion и переводим значения между системами счисления в Bash. Заодно разбираем границы intmax_t и целочисленное переполнение.
Фото: Aaron Lefler / PexelsРазбираемся, зачем скрипту нужен Shebang и что происходит при ошибке ENOEXEC. На примерах показываем, когда Bash способен самостоятельно выполнить файл без привычной строки интерпретатора.
Фото: Ron Lach / PexelsПроверяем через strace, почему grep -q прекращает чтение большого файла после первого совпадения. Сравниваем системные вызовы, коды возврата и перенаправление вывода в /dev/null.
Фото: RDNE Stock project / PexelsНесколько способов завершить интерактивную оболочку Linux: CTRL+D, TMOUT, set -t, set -e, exec и exit. Отдельно разбираем настройку символа EOF через stty.
Фото: Onur Burak Akın / PexelsРазбираем Reverse Shell через netcat для подключения к серверу без внешнего IP-адреса. Показываем команды для принимающей стороны и закрытого узла, перенаправление потоков и обязательные ограничения безопасности.
Фото: Brett Sayles / PexelsРаботаем со временем в Bash через SECONDS, EPOCHSECONDS, EPOCHREALTIME и встроенный printf. Сравниваем с date, форматируем Unix-время и временно меняем часовой пояс через TZ.
Фото: Zia Moshtaghi / PexelsРазбираем назначение разделителя -- в командах Linux и показываем его работу на примерах ssh, cat и rm. Учимся безопасно передавать имена файлов и аргументы, начинающиеся с дефиса.
Фото: Arlind D / PexelsИспользуем Bash trap с EXIT для автоматической очистки временных файлов при успешном завершении, ошибке и SIGTERM. Проверяем порядок системных вызовов через strace и разбираем работу ловушек сигналов.
Фото: cottonbro studio / PexelsПрактическое сравнение setsid и nohup для запуска Bash-скриптов независимо от текущего терминала. Смотрим дерево процессов через pstree и разбираемся, когда создаётся новый сеанс.
Фото: Onur Can Elma / PexelsСоздаём вложенную структуру каталогов одной командой mkdir с ключом -p и brace expansion. Сравниваем последовательность команд с компактным вариантом и проверяем запуск через strace.
Фото: MART PRODUCTION / PexelsСравниваем команды rm и unlink в Linux: системные вызовы, обработку отсутствующих файлов, шаблоны и каталоги. Показываем, когда unlink удобнее для контроля ошибок в Bash-скриптах.
Фото: Yan Krukau / PexelsИспользуем lckdo из пакета moreutils, чтобы второй экземпляр скрипта не запускался одновременно с первым. Рассматриваем lock-файл, ожидание через -w и безопасный запуск периодической задачи cron.
Фото: Heru Dharma / PexelsПрактический Bash-скрипт для параллельной обработки строк файла с ограничением числа потоков через FIFO. Разбираем именованный канал, файловый дескриптор и простой семафор без GNU parallel.
Фото: Satoshi Hirayama / PexelsПродолжаем практику Bash-сопроцессов и принимаем почту по POP3 через openssl s_client. Реализуем команды STAT, DELE, RETR и TOP, затем собираем цикл обработки сообщений.
Фото: Nur Yilmaz / PexelsПроверяем, определена ли переменная Bash, с помощью условного выражения -z и расширения параметра ${VAR+x}. Пошагово разбираем результаты, режим set -x, export и unset.
Фото: Ann H / PexelsТри игровых тренажёра для изучения командной строки Linux: BashCrawl, Terminus и CL Mystery. Они помогают практиковать навигацию, команды и логику в формате текстовых приключений и детективных квестов.
Фото: Erik Mclean / PexelsПоказываем, как отфильтровать строки одного текстового файла по списку из другого с помощью конструкции NR == FNR и массива awk. Разбираем работу NR, FNR и next, выбор столбцов и ограничение по памяти без обязательной …
Фото: Sevgi Gümüş / PexelsФункция uTIME измеряет интервалы выполнения Bash-кода в микросекундах с помощью EPOCHREALTIME. Сравниваем функции в текущей оболочке и subshell, а также преобразование даты через printf и внешнюю команду date.
Фото: Peter Morch / PexelsРазбираем ключ -i в GNU base64, который пропускает символы вне алфавита кодирования. Примеры показывают, как декодировать изменённые строки и почему такое сокрытие данных нельзя считать настоящим шифрованием.
Фото: Markus Spiske / PexelsСпасаем долгий процесс, случайно запущенный без nohup или screen. Комбинация Ctrl+Z и команды bg, disown и fg позволяют остановить задачу, продолжить её в фоне и отвязать от текущей оболочки.
Фото: Nemuel Sereti / PexelsПоказываем, как сохранить стандартный вывод cron-задачи в отдельный файл и настроить его ротацию через logrotate. Такой журнал помогает увидеть внутренние ошибки приложения, которые не попадают в системный лог cron.
Фото: Mikhail Nilov / PexelsИсследуем тернарный оператор Bash внутри арифметической подсистемы и сравниваем его с классической связкой && и ||. Пример показывает работу восьмеричных значений, вычисление обеих ветвей и неочевидные ошибки сравнения.
Фото: Kikz Pinzon / PexelsРазбираем завершители блоков ;;, ;& и ;;& в операторе case Bash. На практических примерах показываем обычное завершение ветки, fallthrough и повторную проверку следующих шаблонов.
Фото: Atlantic Ambience / PexelsПишем Bash-watchdog, который проверяет доступность интернета и наращивает интервалы попыток восстановления связи. Для физической перезагрузки роутера подключаем недорогое USB-реле и управляем им через последовательный порт.
Фото: Pascal / PexelsРазбираем запуск долгих задач в именованных screen-сессиях, подключение через -r и -x и корректное отсоединение сочетанием Ctrl+A, d. Показываем фоновый запуск, передачу команд в сессию и организацию логирования.
Фото: Tom Fisk / PexelsРазбираемся, почему многократные вызовы tput замедляют Bash-скрипт, и один раз сохраняем управляющие последовательности терминала в переменные. Показываем печать, экранирование и практические однострочники.
Фото: Rafael Minguet Delgado / PexelsСмотрим текущие настройки терминала через stty -a и меняем символ прерывания процесса с Ctrl+C на другое сочетание клавиш. Разбираем возврат настройки, запись в shell-конфиг и альтернативу через xbindkeys.
Фото: Erkan Utu / PexelsСоздаём шаблон конфигурации nginx и подставляем разные значения для production и stage через envsubst. Сравниваем функцию рендеринга с heredoc и разбираем передачу переменных окружения.
Фото: Marina Zvada / PexelsРазбираем распространённые Bash-антипаттерны из учебных скриптов: лишний cat перед cut, grep и tr, а также небезопасный перебор файлов через ls. Показываем более прямые и устойчивые варианты команд.
Фото: Bayram Er / PexelsСценарий отката сетевой конфигурации удалённого Linux-сервера без IPMI и локального администратора. Резервная копия /etc, задание cron после перезагрузки и проверка успешного входа по SSH.
Фото: Field Engineer / PexelsПять способов запустить исходную команду в Bash, не удаляя alias из конфигурации оболочки. Показываем экранирование, кавычки, полный путь, command и unalias с восстановлением настроек.
Фото: Ekaterina / PexelsНесколько способов вывести повторяющуюся строку в Bash: собственная функция repeat, seq, printf и tr. Разбираем параметры функции, двойное тире printf и компактные однострочные команды.
Фото: Bastien Neves / PexelsРазбираем обработку стрелок, Home, End и F1–F12 в интерактивном Bash-скрипте. Функция GET_KEY переводит многобайтные управляющие последовательности терминала в hexadecimal-коды.
Фото: Nemuel Sereti / PexelsПишем Bash-скрипт, который проверяет цепочку DOCKER-USER и восстанавливает правила iptables после изменений Docker. Добавляем список разрешённых IP и безопасный запуск проверки через cron.
Фото: Brett Sayles / PexelsТри способа выполнить команду в другом каталоге и вернуться обратно: subshell, pushd/popd и cd -. На наглядных примерах сравниваем поведение рабочего каталога Bash.
Фото: cottonbro studio / PexelsMySQL-реплика отстала на три месяца, но Prometheus и Grafana не подняли тревогу. Разбираем самодельный Bash-экспортёр, значение Null в Seconds_Behind_Master и исчезнувшую метрику.
Фото: Aedrian Salazar / PexelsЭкспериментируем с coproc, массивом COPROC и тайм-аутом команды read. На примерах разбираем обмен через файловые дескрипторы и ограничения такого таймера.
Фото: Towfiqu barbhuiya / PexelsРазбираем встроенную команду enable в Bash: отключаем shell builtin, переключаемся на дисковую утилиту и загружаем расширения оболочки. Показываем работу с test, mkdir и BASH_LOADABLES_PATH.
Фото: Ömer Yılmaz / PexelsОтключаем zswap через параметры GRUB и настраиваем сжатие оперативной памяти с помощью zram. Показываем Bash-скрипт и конфигурацию systemd-zram-generator с алгоритмом lz4.
Фото: Richard L / PexelsПроверяем существование удалённого Git-репозитория и доступ к нему через git ls-remote. Пишем Bash-скрипты для HTTPS и SSH, отключаем интерактивные запросы и возвращаем понятные коды ошибок.
Фото: Sora Shimazaki / PexelsИсследуем генератор псевдослучайных чисел RANDOM в Bash на примере безопасной русской рулетки. Разбираем seed, влияние BASH_COMPAT и различия поведения между версиями оболочки.
Фото: Pavel Danilyuk / PexelsУстанавливаем корневой и подчинённый сертификаты Минцифры в Ubuntu одной shell-командой. Проверяем subject, SHA-1 fingerprint и цепочку OpenSSL, обновляем системное хранилище CA и тестируем HTTPS через curl.
Контролируем появление новых связок IP и MAC в сетях DMZ и LAN на OPNsense. Скрипты csh и awk сравнивают ARP-таблицу со справочником и отправляют уведомление в Telegram без раскрытия инфраструктуры.
Фото: Brett Sayles / PexelsПишем Bash-скрипт, который проверяет длину очереди RabbitMQ по SSH и перезапускает зависший микросервис при накоплении писем. Разбираем cron, rabbitmqctl, awk и запуск команд от отдельного пользователя.
Фото: Pavel Danilyuk / PexelsПривязываем SSH-подключение к bastion-серверу к комбинации Alt+B в Bash через функцию и bind -x. Также разбираем псевдотерминал, reset и вариант конфигурации для Zsh.
Фото: Prashant Singh / PexelsПоказываем разницу между обычной переменной Bash и переменной окружения, объявленной через export. Проверяем наследование в подпроцессах и разбираем обходной способ передачи массивов через строку.
Фото: luis gomes / PexelsНастраиваем белый список команд для SSH-пользователя с помощью Bash-скрипта ONLY и директивы command в authorized_keys. Разбираем ключи, ограничения сессии и правила .onlyrules без выдачи интерактивной оболочки.
Фото: Jakub Zerdzicki / PexelsРазбираем, как dd обновляет статистику через stderr и символ возврата каретки. Превращаем динамический прогресс в строки и пишем Bash-бенчмарк для сравнения скорости при разных размерах блока.
Фото: Aleksander Dumała / PexelsИспользуем встроенный хоткей Ctrl+X+E для редактирования многострочной команды в Vim, Nano или другом редакторе. Настраиваем переменную EDITOR и разбираем, как Bash выполняет сохранённый временный файл.
Фото: Kürşad Ç. / PexelsСоздаём зомби-процесс на C и Bash, находим его и родительский PID через ps и разбираем завершение процесса. Объясняем, почему kill по PID зомби не помогает и когда такие записи можно не трогать.
Фото: James L / PexelsРазбираем соответствие символьных, двоичных и восьмеричных прав доступа Linux. Показываем сложение битов rwx, генерацию комбинаций в Bash и просмотр режима файлов через stat.
Фото: Felix Möller / PexelsСоздаём всплывающую шпаргалку прямо в терминале без графической оболочки. Используем tput, read, trap и bind, чтобы показывать альтернативный экран по Ctrl+H и закрывать его после отпускания клавиши.
Фото: John Petalcurin / PexelsПишем первый юнит-тест для Bash-скрипта с фреймворком bashunit. Разбираем установку, assert_equals, успешный и проваленный прогон, а также другие доступные проверки.
Фото: ThisIsEngineering / PexelsСравниваем systemd timers и cron на практическом примере: создаём service и timer, запускаем задачу каждую минуту и включаем автозагрузку. Разбираемся, когда гибкость таймеров оправдана, а когда сотни unit-файлов только усложняют …
Фото: Kofi Nartey / UnsplashBash-скрипт запускает долгую команду в фоне и показывает текстовую анимацию до её завершения. Разбираем временный лог, trap, tput, сигналы, PID процесса и очистку терминального вывода.
Фото: Danny Meneses / PexelsНа примерах сравниваем специальные переменные $@ и $* в Bash с кавычками и без них. Показываем разбиение аргументов с пробелами, объединение в одну строку и влияние разделителя IFS.
Фото: Nemuel Sereti / PexelsГенерируем повторяемые пароли через pwgen по логину, ключевому файлу и запоминаемому модификатору. Bash-обёртка скрывает ввод, проверяет зависимости и позволяет получать тот же набор паролей без их хранения.
Фото: Pixabay / Pexels · CC0Разбираем Bash-команду, которая проверяет каждый элемент PATH и выводит отсутствующие или недоступные каталоги. Пошагово объясняем set -f, IFS, проверку переменной, права доступа и диагностику путей через namei.
Фото: Masood Aslami / PexelsПроверяем TCP- и UDP-порты средствами Bash через /dev/tcp и /dev/udp, когда в системе нет curl, wget или telnet. Добавляем timeout, читаем код возврата и сравниваем подход с netcat.
Фото: Brett Sayles / PexelsДобавляем дату и время к истории команд в Bash через HISTTIMEFORMAT и настраиваем цветные метки. Сравниваем history -E, history -i и fc в Zsh и сохраняем удобные настройки оболочки.
Фото: Mikhail Nilov / PexelsСоздаём ограниченное окружение chroot для SSH-пользователя в Linux. Копируем Bash и зависимости через ldd, настраиваем ChrootDirectory и по одной добавляем разрешённые утилиты.
Фото: Abdulgafur Ögel / PexelsРазбираем утилиту timeout для ограничения времени работы команд и скриптов в Linux. Показываем длительности, сигналы завершения, удалённый запуск через SSH и вариант на чистом Bash.
Фото: Annushka Ahuja / PexelsПишем Bash-скрипт, который архивирует файлы на сервере, отправляет tar.gz через Telegram Bot API и удаляет временный архив. Разбираем chat_id, bot_token, curl, подписи и ограничение размера.
Фото: Elizabeth Celestino / PexelsЧитаем поля SigBlk, SigIgn и SigCgt в /proc/PID/status и переводим шестнадцатеричные битовые маски в имена сигналов Linux. В конце собираем готовый Bash-скрипт для диагностики процесса.
Собираем локальный генератор TOTP-кодов для двухфакторной аутентификации на Bash. Извлекаем секрет из QR-кода через zbarimg, генерируем OTP с oathtool и делаем меню для нескольких сервисов.
Фото: Annushka Ahuja / PexelsОбъясняем коды завершения после SIGINT и SIGTERM и настраиваем обработчики сигналов через trap в Bash. Разбираем, почему получается код 130, как изменить поведение скрипта и почему SIGKILL нельзя перехватить.
Фото: Emiliano Rodríguez / PexelsИщем Linux-шрифты с кириллическими глифами через fc-list и сопоставляем их со шрифтами ImageMagick. Затем Bash-скрипт генерирует образцы русской буквы «А» для каждого найденного файла.
Фото: Eugenia Remark / PexelsРазбираем разделы справочной системы man: команды, системные вызовы, форматы файлов, административные утилиты и функции ядра. Показываем поиск через man -k, страницы intro и вывод справки в HTML.
Фото: Tima Miroshnichenko / PexelsСравниваем скорость запуска Bash и Zsh вручную и с помощью shellbench. Заодно разбираем плагины Oh My Zsh, автодополнение и место Dash среди быстрых POSIX-оболочек.
Фото: Gonzalo Álvarez Balcazar / PexelsРазбираем Bash-скрипт spr.sh — консольный справочник для поиска записей и фрагментов кода по нескольким тегам. Конфигурация хранится в текстовом файле, а фильтрация реализована однострочником awk.
Фото: Tima Miroshnichenko / PexelsИсследуем бесконечный Bash-цикл, канал до grep -m1 и незаметный SIGPIPE. Смотрим коды сигналов, процессы подоболочки и способы корректно остановить cat после закрытия конвейера.
Фото: Pavel Danilyuk / PexelsРеализуем расширенную Basic Auth-аутентификацию в Nginx с помощью Lua и базы MySQL. Скрипт OpenResty читает заголовок Authorization, хеширует пароль, проверяет пользователя и передаёт запрос в защищённый location.
Фото: Jakub Zerdzicki / PexelsОграничиваем SSH-пользователя интерактивным меню разрешённых административных команд. Bash-скрипт, ForceCommand и точечное правило sudoers дают перезапускать сервисы без полноценного доступа к серверу.
Фото: Fernando Narvaez / PexelsBash-скрипт для интерактивного проброса TCP-портов через SSH jump-сервер. Готовое меню помогает подключаться к службам во внутренних сетях, не меняя конфигурацию вручную.
Фото: Thang Nguyen / PexelsРазбираем heredoc в Bash на практических примерах с cat, sed, перенаправлением в файл и удалённым запуском команд по SSH. Показываю, как управлять подстановкой переменных и отступами.
Фото: Mikhail Nilov / PexelsEtckeeper превращает каталог /etc в Git-репозиторий и помогает отслеживать, фиксировать и откатывать изменения конфигурации Linux. Разбираем установку, удалённый репозиторий, коммиты и автоматизацию через incron.
Фото: João Jesus / PexelsПрячем ASCII-сообщение в девяти битах прав доступа Linux-файлов. На Bash разбираем сдвиги битов, восьмеричные режимы chmod и кодирование текста последовательностью файлов.
Фото: Magda Ehlers / PexelsУстанавливаем Bash-утилиту tmpmail и создаём одноразовый почтовый адрес прямо в терминале. Показываем генерацию адресов, выбор домена, просмотр входящих писем и получение последнего сообщения в текстовом виде.
Фото: cottonbro studio / PexelsДобавляем в Bash-скрипты терминальные окна yes/no, поля ввода, меню и прогресс-бар с помощью whiptail. На готовых примерах разбираем коды возврата и перенаправление файловых дескрипторов.
Фото: Rafael Minguet Delgado / PexelsПрактический разбор зависания PHP-FPM и ошибки 502 Bad Gateway с помощью strace и lsof. По файловому дескриптору находим недоступный Elasticsearch, из-за которого воркер перестаёт обрабатывать запросы.
Фото: Ron Lach / PexelsПишем небольшой Bash-парсер, который превращает большой php.ini в компактный шаблон без комментариев и пустых строк. Разбираем чтение файла построчно, continue и регулярные выражения в конструкции [[ =~ ]].
Фото: RDNE Stock project / PexelsПеренаправляем stdout и stderr уже запущенного процесса в /dev/null без остановки. На примере tail, /proc и gdb разбираем файловые дескрипторы и вызов dup2 для потоков 1 и 2.
Фото: Eva Bronzini / PexelsСравниваем время инициализации и выполнения разных вариантов for и while в Bash, а также цикла gawk. Тест на пяти миллионах итераций показывает влияние генерации списка, расхода памяти и содержимого тела цикла.
Фото: Giant Asparagus / PexelsРазбираем коды завершения Linux-команд от 0 до 255 и специальную переменную $?. Учимся сохранять статус, строить обработку ошибок и завершать Bash-скрипт нужным кодом через exit.
Фото: Erik Mclean / PexelsСтроим простой индекс для большого отсортированного текстового файла с помощью ассоциативного массива Bash и sed. Ограничиваем поиск диапазоном строк по первой букве и ускоряем извлечение данных без тяжёлой СУБД.
Фото: Tima Miroshnichenko / PexelsРазбираемся, откуда берутся случайные имена Docker-контейнеров и как устроен генератор Moby с пасхалкой для Стива Возняка. В конце собираем похожий генератор на Bash и рассматриваем готовые альтернативы.
Фото: Tima Miroshnichenko / PexelsВоспроизводим ситуацию, когда процесс продолжает писать в удалённый лог через открытый файловый дескриптор. Восстанавливаем содержимое через /proc, а затем с помощью GDB переключаем работающий процесс на новый файл без …
Фото: Nicolas Foster / PexelsЗапускаем фоновые команды в Bash через оператор &, управляем заданиями с помощью wait и jobs и получаем PID через $!. Собираем параллельный загрузчик файлов и сравниваем нативный подход с GNU Parallel.
Фото: Mehmet Turgut Kirkgoz / PexelsСтроим взаимодействие между Bash-процессами через сигналы SIGRTMIN и trap без временных файлов. Пишем сервер-слушатель и клиент, разделяем события по индексам сигналов и разбираем порядок обработки и приоритеты.
Фото: Elina Volkova / PexelsАвтоматизируем передачу файлов с сервера скриптом на Bash: проверяем размер, упаковываем крупные данные, загружаем их через curl в transfer.sh и получаем ссылку. Отдельно обсуждаем лимиты сервиса и безопасность.
Фото: Kampus Production / PexelsРазбираем двойную обработку команд в Bash через eval на примерах brace expansion, косвенного раскрытия переменных и файловых дескрипторов. Показываем, почему перенаправление с переменной требует ещё одного прохода интерпретатора.
Фото: Ryleigh Gordon / PexelsЭкспериментируем с /dev/zero, поведением read и нулевым символом в C-строках. Затем находим смещение строки через strings и точечно патчим бинарный файл одним нулевым байтом с помощью dd.
Фото: cottonbro studio / PexelsРазбираем разницу между суффиксами ; и + у find -exec, сокращаем число запускаемых процессов и подключаем xargs для параллельной обработки файлов. Практические команды помогают ускорить поиск и безопасно передавать группы …
Фото: Mehmet Turgut Kirkgoz / PexelsРазбираем interactive, non-interactive, login, non-login, restricted и другие типы оболочек Linux. Смотрим, какие файлы профиля они читают, почему скрипт работает вручную, но ломается в cron, и как определить текущий режим.
Фото: Kaboompics / PexelsОднажды я вручную гонял регресс 5 недель. Больше я так не хочу. Я построил фреймворк, который за 30 минут прогоняет то, на что раньше уходил месяц. Но главное — на этапе проектировки запросов мы нашли столько дефектов в SOAP API, …
Фото: Mikhail Nilov / PexelsМне за 30, я видел много скриптов с дьявольскими отрицаниями, и каждый раз хотелось задушить автора. Поэтому я решил написать пост, в котором покажу как превратить кошмарную конструкцию в простой if-else без единого лишнего знака. …
Фото: Emrah Tolu / PexelsЧасто слышу, что автоматизировать sftp на Windows XP‑10 невозможно без кучи сторонних утилит. На деле всё проще. Я разобрался, как затащить sftp с ключами на такие системы. Самое смешное — WinSCP пришлось настроить так, чтобы он …
Фото: Nicolas Foster / PexelsВместе с Романом Шубиным, СТО и автором канала Bash Days, собрали отдельный мини-курс по Podman. Внутри — восемь материалов, которые помогут освоить инструмент с открытым исходным кодом для работы с контейнерами.
Фото: Alex Levis / PexelsМне надоело кормить корпоративных монстров своими данными и ждать пока их джава-скрипты прогрузятся. Gitea встала на мой дохлый сервер как родная и начала летать даже с кривым конфигом. Ты получишь тот же функционал но без слежки …
Фото: Frans van Heerden / PexelsЯ знаю, что сейчас все гонятся за JSON, и это удобно для новичков. Но когда речь заходит о реальной работе с большими логами, я всегда возвращаюсь к awk. Мой опыт показывает, что для быстрых фильтров и обработки огромных объемов …
Фото: Alfredo Lau-Tam / PexelsЗабудьте про графику, в DeepNet всё построено на терминале и командах Bash. Игра очень атмосферная, с онлайн-миром и кучей возможностей для прокачки. Я залип на ней надолго, советую всем, кто любит подобные симуляторы.
Фото: ds rexy / PexelsЕсли ты часто работаешь в командной строке, тебе точно пригодится подборка моих bash-функций для .bashrc. Они делают рутинные задачи намного удобнее и быстрее. Зацени и добавь себе.
Фото: cottonbro studio / PexelsКак автоматизировать sftp через скрипты. Объясню, почему key-based authentication это важно и как batch-mode помогает ловить ошибки.
Фото: Nicolás Rueda / PexelsЧасто в скриптах приходится работать с паролями и ключами, но как не оставить их на диске? Делюсь простым приемом на Bash и более надежным вариантом на C с блокировкой памяти. Погнали!
Фото: cottonbro studio / PexelsЗабудь про постоянные правки git-конфига или скрипты перед пушем! Рассказываю, как настроить git, чтобы он автоматически подставлял разные user.email и user.name для личных и рабочих проектов.
Фото: Hana Brannigan / PexelsКак подключить физический YubiKey к WSL2, чтобы использовать его для SSH без паролей и SMS. Разберёмся с проблемами прокидывания USB в WSL и сделаем автоматический скрипт, который решит баги с повторным подключением ключа.
Фото: Bia Sousa / PexelsЯ придумал хитрую капчу и покажу как с помощью xdotool ее можно эффективно обойти. Роботы же начинают троить, кейс отлично подходит под нишевые проекты с защитой от дурака.
Фото: Nothing Ahead / PexelsЕсли любишь терминал и хочешь попробовать что-то новое, Brow6el для тебя. Сборка не из пакетов, но есть скрипты. Браузер поддерживает графику, скрипты и все современные фишки.
Фото: Markus Spiske / PexelsЛень каждый раз вводить source ~/.zshrc? У меня тоже! Сделал автоперезагрузку конфига в ZSH с проверкой синтаксиса — делюсь, как это работает и что стоит учесть.
Фото: Sachith Ravishka Kodikara / PexelsВ этом посте разберём, как легко и удобно извлекать нужные части из строки с помощью групп в регулярках Bash. Всё на живом примере создания и фильтрации файлов.
Фото: Diva Plavalaguna / PexelsСегодня покажу, как ограничить жор ресурсов у своих скриптов. Если хочешь, чтобы сервер не превращался в печку — тебе сюда.
Фото: Nikita Nikitin / PexelsКаждый месяц я забывал заказать туалетную бумагу, пока не написал Bash-скрипт, который делает это за меня. В этом посте расскажу, как с реверсом API и cron’ом автоматизировал рутину.
Фото: Vie Studio / PexelsИногда хочется заставить процессор работать на полную, а иногда сберечь батарею. Расскажу, как это сделать с помощью governors и небольшого bash-скрипта.
Фото: Abdullah Alsaibaie / PexelsВот что бывает, когда классика встречается с современным Bash! Bash Trek — это пошаговая стратегия из 70-х, ожившая в терминале. Готовься к тактическим баталиям и ностальгии.
Фото: Mikhail Nilov / PexelsДелюсь скриптом и лайфхаками, которые помогли нам понять, где именно «тормозит» база и 1С в реальной работе.
Фото: Fatih Erden / PexelsЕсли не хочется возиться с systemd timers, вот простой хак для запуска скриптов в cron каждые 30 секунд. Быстро и понятно!
Фото: Image Hunter / PexelsЗабудь про бесконечные циклы для чтения файлов в Bash! Показываю, как работать с mapfile, зачем нужен строгий режим и как избежать типичных ошибок в скриптах.
Фото: SHVETS production / PexelsРассмотрим сервис в виде веб-сервиса, который помогает понять, что делает та или иная shell-команда в Unix/Linux. Проще говоря, ты вставляешь команду, а оно разбирает её и объясняет фрагмент за фрагментом, что означает каждая …
Фото: Daniil Kondrashin / PexelsПосылаем PING всем redis'ам в кластере и собираем PONG в ответ.
Фото: https://kaboompics.com/ / PexelsЕсли тебе надо быстро подключиться к сетевому устройству и выполнять команды — этот пост для тебя. Поделюсь рабочими скриптами для Telnet с и без логина, а также лайфхаками по парсингу ответов.
Фото: Field Engineer / PexelsСегодня будет обучать cron понимать рабочие и выходные дни. Из коробки этот функционал не работает, да и systemd тут не особо поможет. Так что, придется изобретать очередную кишку.
Фото: Edge Training / PexelsДавно хотел реализовать функцию на Bash, чтобы красиво выводить какие-то значимые уведомления в терминал по типу как это сделано в npm. Обычное echo уже не возбуждает, ничего не поделаешь. Да и всякие Gum тоже ставить не хочется.
Фото: cottonbro studio / PexelsКоманда if [ bar = "$foo" ]; проверяет, равны ли два значения. Тут самое важно это — пробелы, про кавычки повторять не буду, ты это уже и так знаешь. Все уши прожужал.
Фото: Chris F / PexelsВ Bash конструкция [ ... ] — не часть синтаксиса if, а отдельная команда, аналогичная test. Разбираем, как на самом деле выполняются условия и почему это важно для скриптов.
Фото: Markus Spiske / PexelsОн считает, сколько строк в файле bar.txt содержат слово foo. Здесь главная проблема — переменная count не изменится вне цикла while, потому что в Bash каждая команда в пайплайне (|) запускается в отдельной оболочке (subshell). То …
Фото: Sergei Starostin / PexelsКонструкция [[ ... ]] в Bash предназначена для проверки условий, но не для арифметики. Разбираем ошибочное сравнение и правильное применение (( ... )) для чисел.
Фото: Markus Spiske / PexelsПредставь две коробки с созвучными подписями. Разбираемся, как Bash интерпретирует строки и почему одинаково выглядящие условия могут давать неожиданный результат.
Фото: Chia-Ho Lin / PexelsКогда в Bash сравниваешь две переменные, важно не про***ться с кавычками. Разбираем, что произойдёт, если переменная $foo окажется пустой.
Фото: Connor Scott McManus / PexelsЭто ошибочный вариант, бэд мать его практика. Команда cd $(dirname "$f") должна вернуть путь к папке, где лежит файл.
Фото: Sergei Starostin / PexelsПродолжаем погружаться в Бэд-Практики! В прошлом посте мы рассмотрели файлы, которые начинаются с дефиса и то, что команда cp их может воспринимать как флаг. Ну дак вот. Предыдущие посты про Бэд-Практики ищи по тегу pitfalls Как …
Фото: Vie Studio / PexelsВот всё трём мы с тобой за бест-практики, но практически ничего не разбираем по бэд-практикам. Давай это исправлять в контексте Bash скриптов.
Фото: Yanming Guo / PexelsСегодня решил поделиться отрицательным опытом. Код, приведенный в статье лучше не использовать. У меня возникла необходимость распарсить файл типа:
Фото: SHVETS production / Pexels