📖 Теория: повторение занятия 04

⚡ Кратко

Повторяем лекцию 3 одним конспектом. У каждой программы три стандартных потока: stdin (№0), stdout (№1), stderr (№2). Перенаправление меняет, куда идут потоки: > пишет в файл с перезаписью, >> дозаписывает в конец, < подаёт файл на вход, 2>&1 отправляет ошибки туда же, куда и вывод. Pipe (|) соединяет stdout одной команды со stdin другой — и таких звеньев в цепочке может быть сколько угодно. Рабочие лошадки конвейеров: cat (показать файл), wc (посчитать строки/слова/символы), head/tail (начало/конец), echo (вывести строку). Самое важное различие недели: > молча затирает файл, >> — добавляет.

Темы повторения — по слайду «Lecture 3»

Презентация сессии выносит на повторение пять тем лекции 3. Ниже — выжимка по каждой со ссылками на полные разборы в теории занятия 04.

1. Стандартные потоки ввода/вывода

  • У каждой запущенной программы есть три канала: stdin — стандартный ввод (по умолчанию клавиатура), stdout — стандартный вывод (по умолчанию экран), stderr — поток ошибок (тоже экран, но отдельный канал).
  • У потоков есть номера — дескрипторы: stdin = 0, stdout = 1, stderr = 2. Именно поэтому конструкция «ошибки туда же, куда вывод» пишется как 2>&1.
  • Ключевая мысль: программа не знает, куда на самом деле идёт её вывод — на экран, в файл или в другую программу. Этим управляет оболочка.

2. Обработка команд в Linux

  • Между нажатием Enter и результатом оболочка проходит цепочку шагов: разбирает строку на команду, ключи и аргументы → ищет исполняемый файл по каталогам из переменной PATH → запускает новый процесс → процесс печатает результат в stdout.
  • Где лежит команда, подскажет which: например, which date. Подробный шестишаговый разбор жизни команды date — в теории занятия 04.

3. Перенаправление (Redirection)

  • команда > файл — записать stdout в файл, перезаписав его содержимое целиком.
  • команда >> файлдозаписать stdout в конец файла, не трогая старое содержимое.
  • команда < файл — подать файл на stdin команды вместо клавиатуры.
  • команда > файл 2>&1 — собрать в файл и обычный вывод, и сообщения об ошибках.
  • Если файла-приёмника нет, перенаправление создаст его само; если есть — > сотрёт старое содержимое без предупреждения.

4. Потоки данных между процессами

  • Вывод одной программы может стать вводом другой — данные текут между процессами, не касаясь экрана и диска.
  • Это и есть «философия Unix» в действии: маленькие команды, каждая делает одно дело, а сила — в их соединении.

5. Piping: команды cat, wc, head, tail

  • Оператор | (pipe, вертикальная черта) соединяет stdout команды слева со stdin команды справа: cat /etc/group | wc -l.
  • Звеньев в конвейере может быть сколько угодно — ограничение здравым смыслом, а не синтаксисом: cat файл | head -10 | tail -3.
  • Помощники: cat — вывести файл; wc — посчитать строки (-l), слова (-w), байты (-c); head — первые строки; tail — последние строки (количество задаёт ключ -n); echo — напечатать строку (и через >/>> — записать её в файл).
  • Важно: по конвейеру дальше передаётся только stdout — stderr летит мимо pipe прямо на экран.

Как устроена сама сессия

Формат по презентации: преподаватель проходит по темам недели, затем — экспресс-опрос (вопросы без вариантов ответа, отвечать вслух), затем разбор домашнего задания 3 с эталонным решением и слайдом «Часто встречающиеся ошибки», и наконец задание для закрепления из 10 шагов, которое выполняется тут же в терминале. Все вопросы и задания собраны на странице «Задания», ответы и разборы — в «Решениях», ошибки со слайда — в «Ошибках».

💡 Как пользоваться этим уроком: сначала ответьте на вопросы экспресс-опроса по памяти и прорешайте задание для закрепления руками в терминале, не подглядывая. Всё, что не получилось с первого раза, — сигнал перечитать соответствующий раздел теории занятия 04 и повторить команды ещё раз.