О курсе
Курс «Командная строка Linux и программирование на Bash» учит работать в операционной системе Linux через терминал и автоматизировать повторяющуюся работу сценариями на языке командной оболочки Bash. Он рассчитан на того, кто ни разу не открывал терминал: начинается с вопроса «что такое оболочка и чем она отличается от терминала» и заканчивается надёжными скриптами резервного копирования, которые запускаются по расписанию.
Командная строка остаётся основным рабочим инструментом инженера: серверы в центрах обработки данных и облаках работают без графического интерфейса, сетевое оборудование и контейнеры настраиваются командами, а лабораторные окружения большинства инженерных курсов — набор скриптов.
Курс построен вокруг двух идей. Первая — понимание модели, а не заучивание команд: файл и inode, процесс и сигнал, поток и дескриптор, права и пользователь, этапы раскрытия командной строки. Зная модель, команду можно найти в справке за минуту, а её поведение — предсказать. Вторая — эксперимент: каждое утверждение теории проверяется в терминале, а лабораторные работы строятся по принципу «предсказать — проверить — объяснить».
Что даёт курс
- понимание устройства файловой системы Linux, назначения основных каталогов, inode и ссылок;
- уверенная работа с файлами, поиск файлов и текста, обработка данных конвейерами из
grep,sort,uniq,cut,sed,awk; - модель пользователей, групп и прав доступа, специальных битов; диагностика ошибок доступа;
- модель процессов, сигналов, стандартных потоков и файловых дескрипторов; управление процессами и заданиями;
- порядок раскрытия командной строки и правила использования кавычек;
- установка программ, управление сервисами systemd, работа с журналом и ротацией журналов;
- работа с дисками и файловыми системами: разделы,
mkfs, монтирование,/etc/fstab, диагностика нехватки места и inode; - работа на удалённых машинах по SSH с аутентификацией по ключу, копирование данных
scpиrsync, монтированиеsshfs; - понимание того, из чего сделаны контейнеры: пространства имён, cgroups, capabilities, песочница systemd;
- сценарии на Bash с разбором аргументов, обработкой ошибок, очисткой и журналированием; типичные ошибки скриптов и способы их предотвращения;
- автоматизация резервного копирования (с проверкой и шифрованием копий), запуск задач по расписанию и по событию;
- работа со справочной системой (
man,--help,help), редакторамиnanoиvim, мультиплексоромtmux, отладка и статический анализ скриптов (set -x, ShellCheck).
Связь с другими курсами
Предварительной подготовки не требуется, кроме общей компьютерной грамотности; знание основ Python полезно, но не обязательно. Курс стоит пройти до или одновременно с курсом «Компьютерные сети и сетевые технологии», где постоянно выполняются команды, запускаются скрипты учебных топологий, используются права, процессы, сервисы и SSH. Он также служит опорой для курсов по облачным технологиям, администрированию, информационной безопасности и для любой работы с серверами.
Темы курса
Каждая тема включает теорию (вкладка «Теория»), лабораторную работу и дополнительные материалы: вопросы для самопроверки, глоссарий, шпаргалку, разбор типичных ошибок и список ресурсов.
| № | Тема | Раздел |
|---|---|---|
| 1 | Linux, терминал и командная оболочка | Жизнь в терминале |
| 2 | Файловая система и работа с файлами | Жизнь в терминале |
| 3 | Просмотр и редактирование текстовых файлов | Жизнь в терминале |
| 4 | Пользователи, группы и права доступа | Жизнь в терминале |
| 5 | Потоки ввода-вывода, перенаправления и конвейеры | Жизнь в терминале |
| 6 | Обработка текста: регулярные выражения, grep, sed, awk | Инструменты и система |
| 7 | Процессы и управление заданиями | Инструменты и система |
| 8 | Окружение и настройка оболочки | Инструменты и система |
| 9 | Пакеты, сервисы и журналы | Инструменты и система |
| 10 | Диски, разделы и файловые системы | Инструменты и система |
| 11 | Сеть из командной строки и SSH | Инструменты и система |
| 12 | Изоляция процессов: пространства имён, cgroups, ограничения | Инструменты и система |
| 13 | Основы сценариев Bash | Программирование на Bash |
| 14 | Ветвления, циклы, функции и массивы | Программирование на Bash |
| 15 | Надёжные скрипты: ошибки, сигналы, отладка | Программирование на Bash |
| 16 | Автоматизация: архивы, резервное копирование, планировщики | Программирование на Bash |
Апокрифы
Отдельная вкладка курса — «Апокрифы»: десять тем о наступательной стороне Linux и внутренностях ядра. Это не продолжение основной программы, а взгляд с другой стороны: как устроены приёмы, которые используют Red Team, и как они выглядят для того, кто защищает систему. Материал рассчитан на читателя, который уже свободно работает в терминале и прошёл темы 1–16.
Каждая тема апокрифов состоит из теории, лабораторной работы и дополнительных материалов и построена по одной схеме: механизм до структур ядра, воспроизводимый код, границы приёма и парный раздел «обнаружение и защита».
| № | Тема | Раздел |
|---|---|---|
| 1 | Weaponization окружения и LD_PRELOAD | Закрепление и разведка |
| 2 | История грехов и SSH-hijacking | Закрепление и разведка |
| 3 | GTFOBins и Capabilities | Эскалация привилегий |
| 4 | Локальные эксплойты ядра (LPE) | Эскалация привилегий |
| 5 | Инъекция юнитов systemd и Cron | Персистентность и анти-форензика |
| 6 | Тамперинг загрузчика и Timestomping | Персистентность и анти-форензика |
| 7 | Скрытие процессов и сетевая стелс-работа | Персистентность и анти-форензика |
| 8 | eBPF для слежки и прямые системные вызовы | Ядро и память |
| 9 | Дампы памяти и Ptrace-инъекции | Ядро и память |
| 10 | «Северный узел: Нулевой день» — итоговая операция | Ядро и память |
Все работы выполняются только в собственной виртуальной машине, в WSL2 или в песочнице, подготовленной окружением лабораторной: темы 4 и 6 требуют одноразовой ВМ со снапшотом, темы 7 и 10 — сетевого пространства имён. Учебная инфраструктура описана доменами nsu.example и документационными адресами 192.0.2.0/24.
Учебная среда
Работы выполняются в Ubuntu 24.04 LTS: установленной на компьютер, в виртуальной машине или в подсистеме WSL2 на Windows (установка описана в первой лабораторной работе). Большинство заданий выполняются от имени обычного пользователя; задания, требующие прав администратора (установка пакетов, создание пользователей, настройка сервисов), выполняются через sudo на своей машине. В WSL2 для тем 9, 12 и 16 нужно включить systemd — порядок описан в теме 9. Задания с дисками (тема 10) выполняются на файле-образе, поэтому настоящий диск не затрагивается.
Дополнительные пакеты устанавливаются по мере необходимости; базовый набор:
sudo apt update
sudo apt install -y man-db manpages tldr tree vim nano tmux shellcheck \
curl wget dnsutils openssh-client openssh-server rsync cron at \
jq inotify-tools sshfs logrotate parted dosfstools
Как работать с материалами
Тему лучше изучать в порядке «теория → дополнительные материалы → лабораторная работа». Теорию полезно читать с открытым терминалом и повторять каждую команду: вывод на вашей машине может немного отличаться, и разобраться в отличиях — хорошее упражнение. Раздел «Типичные ошибки» в дополнительных материалах стоит перечитать перед лабораторной работой.
В лабораторных работах главный принцип — предсказать, затем проверить: прежде чем выполнить команду, запишите, что ожидаете увидеть. Расхождение между ожиданием и результатом показывает, где модель в голове неточна, — именно его стоит объяснить в журнале работы.
Если цель — подготовиться к курсу «Компьютерные сети», минимально необходимы темы 1, 2, 4, 5, 7, 8, 11, 12 и 13.
Итоговые вопросы для самопроверки
- Терминал, эмулятор терминала, командная оболочка: различия. Встроенные и внешние команды.
- Иерархия файловой системы Linux. Абсолютные и относительные пути.
- Inode, жёсткие и символические ссылки: чем различаются и когда что применять.
- Шаблоны имён файлов: кто и когда их раскрывает.
- Права доступа к файлу и каталогу: смысл r, w, x. Восьмеричная запись, umask.
- Специальные биты setuid, setgid, sticky: назначение и примеры.
- Стандартные потоки и перенаправления. Порядок перенаправлений.
- Конвейеры и философия UNIX. Утилита xargs, параллельный запуск.
- Регулярные выражения: BRE и ERE. Утилиты grep, sed, awk; JSON и jq.
- Процесс, fork и exec. Состояния процессов, зомби.
- Сигналы: SIGTERM, SIGKILL, SIGINT, SIGHUP. Управление заданиями. Ограничения ресурсов процесса и OOM-killer.
- Переменные оболочки и окружения. PATH. Файлы запуска bash.
- Пакетный менеджер APT и dpkg. Репозитории.
- systemd: юниты, сервисы, журнал. Ротация журналов.
- Диск, раздел, файловая система: уровни и команды. Монтирование и /etc/fstab, UUID, nofail.
- Почему df и du расходятся, и что делать при исчерпании inode.
- SSH: аутентификация по ключу, known_hosts, config, проброс портов. Монтирование sshfs.
- Пространства имён и cgroups: что изолирует каждый механизм, из чего сделан контейнер.
- Этапы раскрытия командной строки. Кавычки и разделение на слова.
- Раскрытие параметров в Bash. Аргументы сценария, "@" и "*".
- Условия, циклы, функции и массивы в Bash. Чтение файла построчно.
- Обработка ошибок в сценариях: коды возврата, set -euo pipefail, trap.
- Резервное копирование: tar, rsync, --link-dest, шифрование копий. Планировщики cron и таймеры systemd, запуск по событию inotifywait.
Рекомендуемая литература
Основная
- Shotts W. The Linux Command Line: A Complete Introduction. 2nd ed. — No Starch Press, 2019. Открытая версия: linuxcommand.org/tlcl.php.
- Free Software Foundation. GNU Bash Reference Manual.
- Nemeth E., Snyder G., Hein T. R., Whaley B., Mackin D. UNIX and Linux System Administration Handbook. 5th ed. — Addison-Wesley, 2017.
Дополнительная
- Robbins A., Beebe N. H. F. Classic Shell Scripting. — O'Reilly Media, 2005.
- Kernighan B. W., Pike R. The UNIX Programming Environment. — Prentice Hall, 1984.
- Raymond E. S. The Art of UNIX Programming. — Addison-Wesley, 2003. Открытая версия: catb.org/esr/writings/taoup.
- Aho A. V., Kernighan B. W., Weinberger P. J. The AWK Programming Language. 2nd ed. — Addison-Wesley, 2023.
- Kerrisk M. The Linux Programming Interface. — No Starch Press, 2010.
Интернет-ресурсы
- Страницы руководства man7.org — справка по командам и системным вызовам Linux.
- explainshell.com — разбор любой командной строки по частям со ссылками на справку.
- Bash Pitfalls и Bash FAQ — типичные ошибки и правильные приёмы.
- ShellCheck — проверка скриптов на ошибки.
- Google Shell Style Guide — правила оформления скриптов.
- OverTheWire: Bandit — игра-тренажёр по командной строке.
- Документация WSL — установка и настройка Linux в Windows.