Инструменты
промышленной
разработки
Лекция 1 · вводная
Shell · окружение · Bash/Zsh/Fish · tmux
ИПР 2026/27
Вводная лекция
01
Сегодняшний маршрут
Ориентация
02
01
Зачем курс
почему практические инструменты нужны рядом с фундаментом
02
Terminal vs Shell
где мы вводим текст и какая программа запускает команды
03
Environment & PATH
как shell находит whoami, git, python и другие executable
04
Типичные ошибки
пробелы, quoting, escaping и первые перенаправления
05
tmux
как жить с долгими процессами и удалёнными сессиями
Зачем вам этот курс?
О курсе
03
Основной рабочий сценарий
виртуалка
→
Docker
→
review
→
тесты
→
CI/CD
Главная цель курса
Не выучить все команды наизусть, а получить рабочую карту: какие сущности существуют, как они связаны и что искать, когда что-то сломалось.
$ google?
$ chatgpt?
$ man?
# искать проще, когда
# знаешь название проблемы
Карта курса: 3 модуля
О курсе
04
Модуль 1
Базовые инструменты
Shell · Git · debugging · hardware numbers
Модуль 2
LLM-инфраструктура
models · evals · harness · MCP · agents
Модуль 3
Промышленная разработка
build · testing · CI/CD · cloud
Сегодня: вход в первый модуль и организационные моменты
Как будет устроена практика
О курсе
05
5 домашних заданий
Shell
Git
LLM
Makefile
Cloud
Оценка
M_total
=
min(average(HW₁…HW₅)+M_bonus, 10)
Бонусы
• исправления опечаток
• фактические ошибки
• важные дополнения
• полезная активность
Максимум — 10
Рабочее окружение и связь
О курсе
06
Linux или macOS
• нужен доступ к Unix-like окружению
• основная поддержка: Ubuntu и macOS
• с другими дистрибутивами поможем по возможности
Коммуникация
• важные объявления — в канале курса
• чат — для обсуждений, без гарантии ответа
• структурная обратная связь — через форму
Переходим к теме
Shell
Переход
07
Почему CLI до сих пор жив
Shell
08
$ run something
$ inspect state
$ automate it
$ repeat anywhere
универсальность
похожие принципы на разных Unix-системах
автоматизация
команды легко превращаются в скрипты
удалённая работа
SSH, серверы, виртуалки, контейнеры
прозрачность
состояние видно через команды и файлы
Terminal ≠ Shell
Shell
09
Terminal
Shell
Terminal
окно / вкладка / эмулятор
принимает ввод и показывает вывод
Shell
программа, которая читает строку, разбирает её и запускает команды
Bash — общий язык примеров
Shell
10
В курсе
#!/usr/bin/env bash
set -euo pipefail
echo "hello"
Интерактивно
Bash, Zsh, Fish — выбирайте то, что удобно
скрипты курса — Bash
интерактивная оболочка — ваш выбор
Первое, что видит shell
Shell
11
atgshka@atgshka-osx:~$
user
имя пользователя
host
имя машины
~
домашний каталог
$
не root-shell
$ whoami
$ hostname
$ id -u
$ pwd
→
→
Environment variables
Environment
13
Экспорт переменной
$ export SOME_VAR=12919
$ echo $SOME_VAR
12919
export = передать дальше
Модель
shell process
↓
child command
Environment — пары ключ–значение. Они часто настраивают поведение программ: пути поиска, токены, режимы запуска, локаль.
PATH: как shell находит команды
Environment
14
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Идея
PATH — это список директорий. Shell проходит по ним и ищет исполняемый файл с нужным именем.
команда
→
директории из PATH
↓
executable
Наивный алгоритм поиска
Environment
15
for dir in PATH.split(":"):
candidate = dir + "/" + command
if exists(candidate):
exec(candidate)
break
else:
print("command not found")
В реальности Bash сложнее
До PATH могут сработать:
• shell functions
• builtins
• cached paths / hash table
which и command -v
Environment
16
$ which whoami
/usr/bin/whoami
$ which which
/usr/bin/which
$ command -v whoami
/usr/bin/whoami
$ command -v cd
cd
Правило
`command -v` обычно надёжнее для диагностики; `which` удобен для внешних программ.
Первые файловые команды
Shell basics
17
pwd
где я?
ls
что вокруг?
cd
перейти
mkdir
создать директорию
touch
создать файл
rm
удалить
$ pwd
$ ls
$ mkdir demo
$ cd demo
$ touch notes.txt
$ rm notes.txt
Ошибка: пробел — это разделитель
Shell basics
18
$ mkdir hse course
$ ls
course hse
Что хотел пользователь?
hse course
Что получилось?
hse
course
Shell разбивает строку на слова до запуска программы.
Quoting и escaping
Shell basics
19
$ mkdir "hse course"
кавычки: один аргумент целиком
$ mkdir hse\ course
escape: специальный символ становится обычным
Rule of thumb
Если в имени есть пробелы или спецсимволы — остановитесь и подумайте, что именно увидит shell и точно ли они вам нужны
Полезные команды
Shell basics
20
Текст
`sort`, `uniq`, `grep`, `cut`, `head`, `tail`, `wc`
Файлы
`cat`, `tac`, `find`, `df`
Права
`chmod`, `chown`, `sudo`
Навигация
`cd`, `pwd`, `ls`, `mkdir`, `touch`, `rm`
В следующей лекции команды перестанут быть списком и станут инструментами расследования.
Потоки, перенаправления и pipes
Shell basics
21
$ command > out.txt
$ command 2> err.txt
$ command >> log.txt
$ command 2>&1
$ cat file | grep pattern
stdout
>
file
stderr
2>
err file
process A
|
process B
Tab completion
Удобство терминала
22
$ cd Do<Tab>
Documents/ Downloads/
Зачем это важно?
Автодополнение уменьшает число опечаток и помогает исследовать систему: какие директории, команды и опции вообще доступны.
меньше печатать
меньше ошибаться
быстрее исследовать
Bash, Zsh, Fish
Удобство терминала
23
Bash
baseline
почти везде; язык примеров курса
Zsh
interactive+
похож на Bash, часто удобнее в терминале
Fish
comfort
много удобств из коробки; язык отличается
# интерактивный shell может быть любым
# скрипты курса — на Bash
Текущий shell и shell по умолчанию
Удобство терминала
24
$ echo $SHELL
/bin/zsh
$ ps -p $$
PID TTY TIME CMD
12345 ttys000 0:00.04 zsh
Не путать
• login/default shell
• shell, который запущен прямо сейчас
• интерпретатор, которым исполняется скрипт
$ chsh -s "$(command -v zsh)"
Лучше менять shell явно, а не прятать `exec zsh` в `.bashrc` как основной способ.
Зачем нужен tmux?
tmux
25
Сценарий
Вы подключились по SSH, запустили долгий процесс и закрыли ноутбук.
Что случится с вашей работой?
tmux отделяет сессию от подключения
tmux: mental model и минимум hotkeys
tmux
26
session
→
windows
→
panes
Ctrl+b % split vertical
Ctrl+b " split horizontal
Ctrl+b c new window
Ctrl+b w list windows
Ctrl+b ? help
Ctrl+d close pane
Live demo
1. `tmux`
2. split panes
3. new window
4. detach
5. attach back
Screen: старый аналог, в курсе фокус на tmux.
Небольшой live demo
Shell
12
Вывод
Итоги
27
1
Terminal и shell — разные вещи
одно показывает, другое интерпретирует
2
Shell запускает команды через PATH
и не только через PATH
3
Quoting и escaping имеют значение
shell разбирает строку до запуска программы
4
Bash — общий язык скриптов курса
интерактивный shell можно выбирать
5
tmux переживает подключение
сессия может жить отдельно от терминала
Следующая лекция
Переход
28
Сегодня
ориентироваться в shell, понимать PATH, не попадаться на пробелах и знать, зачем tmux
Следующая лекция
$ grep
$ find
$ curl
$ sed
$ pipes and scripting
из набора команд → в инструмент расследования