✅ Решения: опрос, ДЗ 3 и закрепление

⚡ Кратко: опорные ответы

  • > перезаписывает файл целиком, >> дозаписывает в конец.
  • Переадресация нужна, чтобы сохранять вывод в файлы, подавать файлы на вход и собирать ошибки — не переписывая программы.
  • Pipe в одной строке может быть сколько угодно.
  • Незакрытая кавычка/скобка — оболочка ждёт продолжения (приглашение >); выход — Ctrl+C.
  • Посмотреть файл без редактора: cat (а также head/tail для части файла).

Ответы на экспресс-опрос

Вопрос 1. В чём разница между > и >>?

> перенаправляет stdout в файл с полной перезаписью: старое содержимое исчезает без предупреждения. >>дозапись: новые данные добавляются в конец, старое содержимое сохраняется. Оба оператора создают файл, если его ещё нет.

Вопрос 2. Зачем нужна переадресация ввода/вывода?

Чтобы управлять потоками программы, не меняя саму программу: сохранить результат команды в файл-отчёт (history > report.txt), накапливать журнал (date >> log.txt), подать файл на вход вместо набора с клавиатуры (wc -l < файл), отделить или собрать ошибки (2>&1). Без переадресации вывод существует только на экране и исчезает.

Вопрос 3. Сколько значков | может быть в одной строке?

Сколько угодно — синтаксис bash не ограничивает длину конвейера: cat файл | head -10 | tail -3 | wc -w. Практический предел — читаемость: каждое звено должно быть осмысленным.

Вопрос 5. Что будет, если не закрыть кавычки или скобки в конце кода?

Оболочка решит, что команда не закончена, и перейдёт в режим продолжения ввода — вместо выполнения появится вторичное приглашение >, и терминал будет «молчать», ожидая закрывающую кавычку. Выйти можно, набрав закрывающий символ, либо прервать ввод сочетанием Ctrl+C.

Вопрос 6. Как посмотреть в файл, не открывая его в текстовом редакторе?

Командой cat файл — она печатает содержимое прямо в терминал. Для больших файлов удобнее смотреть часть: head файл — начало, tail файл — конец.

Разбор домашнего задания 3

Условие (дословно со слайда, работаем в браузерной версии JSLinux):

  1. Создать текстовый файл /home/user/start/1.txt, создав перед этим необходимую директорию.
  2. Добавьте слово Start в текстовый документ, созданный ранее.
  3. Дописать в конец документа текущую дату, использовав date (запуск командой date).
  4. Скопировать получившийся документ в /opt/task/start.txt (предварительно создаём необходимую директорию).
  5. В документ /opt/task/start.txt дописать последние 4 строчки из списка ВСЕХ (в том числе скрытых) объектов, лежащих в / (корневой директории).

Решение со слайда — дословно

# слайд «Решение» из презентации (как есть)
mkdir -p /home/user/start
touch  /home/user/start/1.txt
echo “Start” > /home/user/start/1.txt
date >> /home/user/start/1.txt
mkdir -p /opt/task/
cp  /home/user/start/1.txt /opt/task/start.txt
ls -la / | tail -4 >> /opt/task/start.txt
⚠️ В слайде есть дефект: в третьей строке стоят типографские кавычки ”Start” — при копировании в терминал они попадут в файл как обычные символы, и в 1.txt окажется ”Start” вместо Start. Используйте прямые кавычки ”Start”.

Исправленное решение с пояснениями

# терминал Ubuntu/JSLinux
mkdir -p /home/user/start                       # шаг 1: -p строит весь путь сразу
touch /home/user/start/1.txt                    # шаг 1: пустой файл
echo "Start" > /home/user/start/1.txt           # шаг 2: прямые кавычки!
date >> /home/user/start/1.txt                  # шаг 3: именно >>, иначе Start сотрётся
mkdir -p /opt/task/                             # шаг 4: каталог-приёмник
cp /home/user/start/1.txt /opt/task/start.txt   # шаг 4: копия с переименованием
ls -la / | tail -4 >> /opt/task/start.txt       # шаг 5: -a — скрытые объекты, tail -4 — последние 4 строки
cat /opt/task/start.txt                         # проверка результата

Пять типичных ошибок этого ДЗ, разобранных на сессии, — на странице «Ошибки».

Решение задания для закрепления — по шагам

# терминал Ubuntu/JSLinux
# Шаг 1: создать output.txt и записать строку (> — перезапись/создание)
echo "Hello, World!" > output.txt

# Шаг 2: дописать вторую строку (>> — дозапись)
echo "This is a practice file." >> output.txt

# Шаг 3: показать содержимое двух файлов одной командой
cat output.txt disk_space.txt

# Шаг 4: дописать третью строку
echo "This is a test line." >> output.txt

# Шаг 5: последние 3 строки output.txt → в новый файл
tail -n 3 output.txt > last_lines.txt

# Шаг 6: строки, слова, байты last_lines.txt → в файл
wc last_lines.txt > word_count.txt

# Шаг 7: содержимое /etc/passwd → в копию
cat /etc/passwd > passwd_copy.txt

# Шаг 8: сколько строк в копии
wc -l passwd_copy.txt

# Шаг 9: первые 10 строк → дописать в /home/passwd_head_tail
head -n 10 passwd_copy.txt >> /home/passwd_head_tail

# Шаг 10: последние 4 строки → дописать туда же
tail -n 4 passwd_copy.txt >> /home/passwd_head_tail
cat /home/passwd_head_tail   # проверка: 14 строк

Комментарии к неочевидным шагам

  • Шаг 3: файл disk_space.txt в предыдущих шагах не создавался — на слайде он появляется «из ниоткуда». Если файла нет, cat выведет содержимое output.txt, а про второй файл сообщит в stderr: cat: disk_space.txt: No such file or directory — наглядная демонстрация отдельного потока ошибок. Чтобы шаг прошёл чисто, создайте файл заранее, например: echo "disk usage report" > disk_space.txt. ⚠️ Проверить по документации: способ создания disk_space.txt в презентации не указан — возможно, имелся в виду файл из демонстрации преподавателя; команда выше — наше дополнение вне источника.
  • Шаг 5: здесь >, а не >>: last_lines.txt создаётся заново, накапливать нечего.
  • Шаг 6: wc без ключей выводит сразу три числа — строки, слова, байты; формулировка «слов, строк и символов» покрывается одной командой.
  • Шаги 9–10: в условии написано head 10 / tail 4 — без дефиса не сработает, правильно head -n 10 / tail -n 4. Оба шага пишут в один файл через >> — поэтому в /home/passwd_head_tail оказываются и «голова», и «хвост». Если бы в шаге 10 стоял >, результат шага 9 был бы стёрт.
  • Имя /home/passwd_head_tail — без расширения, так в условии: для Linux расширение не обязательно, это просто часть имени.
💡 Самопроверка: после всех шагов cat output.txt должен показать 3 строки, cat last_lines.txt — те же 3 строки, wc -l /home/passwd_head_tail — число 14 (10 + 4).