
Современное и полное руководство для разработчиков, инженеров DevOps и любознательных power-user’ов.
Shell — это программа-прослойка между пользователем и ядром операционной системы. Она преобразует введённые (или записанные в скрипт) команды в низкоуровневые системные вызовы, которые понимает ядро, и возвращает результаты для чтения или дальнейшей передачи по конвейеру. Проще говоря, shell — это одновременно:
| Слой | Роль | Типичные инструменты |
|---|---|---|
| Kernel | Непосредственно управляет CPU, памятью, устройствами, ФС | Linux, XNU, NT |
| Shell | Преобразует команды человека в системные вызовы | bash, zsh, fish, PowerShell |
| Terminal | Отображает текстовый ввод/вывод и передаёт нажатия в shell | xterm, gnome-terminal, iTerm2, Windows Terminal |
«Терминал» — лишь окно; «shell» — то, что выполняется внутри этого окна и общается с ядром.
strace или dtruss.1971 г. — sh Кена Томпсона в Unix V6; ввёл $PATH, перенаправления (>, <) и простые конвейеры.
$(…).Процессор в user mode не может обращаться к оборудованию напрямую; он должен перейти в kernel mode через системный вызов. Shell работает целиком в пользовательском пространстве, полагаясь на вызовы read, write, execve и др.
fork() — дублирует текущий процесс.execvp() — заменяет память дочернего процесса новой программой.waitpid() — родитель ждёт завершения дочернего и получает код выхода.readline() → parse() → fork() ─┐
│ дочерний → execvp() → программа
родитель ← waitpid() ←─────────┘
Каждая команда запускает этот мини-жизненный цикл.
Токены разбиваются по пробелам, затем расширяются: переменные $HOME, подстановка команд $(date), арифметика $((1+1)).
| Файл | Загружается | Типичное назначение |
|---|---|---|
~/.profile |
при входе (login) | PATH, локаль |
~/.bashrc |
интерактивный bash | алиасы, prompt |
~/.zshrc |
интерактивный zsh | плагины, тема |
\u@\h:\w \$ выводит пользователя, хост и каталог.Ctrl-Z приостанавливает, bg/fg управляют фоновыми/передними задачами.Ноль (0) — успех; ненулевое значение — ошибка. Переменная $? хранит последний статус.
> — перезапись, >> — дозапись, < — ввод из файла.command1 | command2 — перенаправляет stdout первой в stdin второй.*.c — все файлы C.**/*.py (с shopt -s globstar или в zsh) — рекурсивный поиск.#!/usr/bin/env bash
set -euo pipefail # строгий режим
for f in *.log; do
grep -q ERROR "$f" && echo "Alert: $f"
done
Лёгкий dash для /bin/sh в Ubuntu; функциональный bash для ежедневной работы.
tcsh даёт автодополнение и исправление, но имеет непривычный синтаксис (if (expr) then … endif).
Популярен на старых UNIX; сочетает простоту Bourne с массивами в стиле C.
ls **/*(.om[1,5])).fish_config.PowerShell 7+ — конвейеры объектов:
Get-Process | Where CPU -gt 100 | Stop-Process
Классический cmd.exe для наследных скриптов.
Окна, доки, композиторы; под капотом вызывают CLI-shell.
Bash управляет Dockerfile, GitHub Actions, init-контейнерами Kubernetes.
SSH на сотни серверов:
for host in $(<hosts); do …; done
cat access.log | awk '{print $9}' | sort | uniq -c | sort -nr | head
Reverse shells, разбор логов, strings, hexdump.
Скрипты оркестрируют Jupyter, conda, Slurm для повторения экспериментов.
Не работайте ежедневно под root; используйте sudo с точными правилами.
$(…).rm -rf / tmp/* (пропущен пробел) стирает систему.set -o noclobber — предотвращает случайную перезапись."${var}".fail2ban + ключи SSH.Oh-My-Zsh, Starship, Powerlevel10k выводят статус Git и коды выхода прямо в prompt.
Подсказки на ИИ (GitHub Copilot CLI, Warp AI), диагностика VS Code внутри терминала.
Ctrl-Alt-F3.| Команда | Назначение |
|---|---|
pwd |
показать текущий каталог |
ls -lah |
список файлов с размерами |
cd /путь |
сменить каталог |
man <cmd> |
справка по команде |
history | grep <pattern> |
поиск по истории |
tldr для кратких примеров (npm i -g tldr)Освоение shell — самый быстрый путь от пользователя к power-user. Создаёте ли вы mini-shell на C, разворачивали микросервисы или анализируете бинарники, процессы, перенаправления, дисциплина скриптов и гигиена безопасности — основа профессиональных вычислений.
Запустите VM, выполните strace -f bash и наблюдайте, как ваши команды переходят границу User–Kernel в реальном времени. Каждый prompt — приглашение автоматизировать рутину, исследовать сложное и строить надёжные системы. Успешных хаков! 🚀
Если вы нашли этот контент ценным, представьте, чего вы могли бы достичь с нашей комплексной 47-недельной элитной обучающей программой. Присоединяйтесь к более чем 1200 студентам, которые изменили свою карьеру с помощью техник Подразделения 8200.