🐛 Частые ошибки из разбора ДЗ 3

⚡ Топ-3 ошибки сессии

  • date > файл вместо date >> файл — перезапись стирает всё, что было записано раньше.
  • mkdir /home/user/start без -p — создание вложенного пути падает, если промежуточных каталогов нет.
  • ls / | tail -4 без -a — скрытые объекты корня в список не попадают, условие «ВСЕ объекты» не выполнено.

Слайд «Часто встречающиеся ошибки» — с разбором

Пять реальных ошибок из сданных работ, которые преподаватель разбирает на сессии. Слева — как написали студенты (дословно со слайда), ниже — почему это не работает и как правильно.

Ошибка 1. mkdir без ключа -p

Как было в работах (со слайда):
mkdir /home/user/start

Комментарий со слайда: «нету ключика -p».

Почему это проблема: если каталога /home/user ещё нет, mkdir откажется создавать start внутри несуществующего пути: No such file or directory. Ключ -p создаёт все недостающие уровни и не ругается на уже существующие.

# терминал Ubuntu/JSLinux — правильно
mkdir -p /home/user/start

Ошибка 2. echo без кавычек

Как было в работах (со слайда):
echo Start > /home/user/start/1.txt

Комментарий со слайда: «нету кавычек при написании Start».

Почему это проблема: текст, передаваемый команде, по «джентльменскому соглашению» берём в кавычки. Для одного слова echo Start формально сработает, но привычка опасна: как только в тексте появится пробел или спецсимвол (!, $, *), оболочка разрежет или интерпретирует его по-своему. Кавычки делают намерение однозначным.

# терминал Ubuntu/JSLinux — правильно
echo "Start" > /home/user/start/1.txt

Ошибка 3. Перезапись вместо дозаписи

Как было в работах (со слайда):
date > /home/user/start/1.txt

Комментарий со слайда: «ошибка в значке > — нужно >> (дозапись)».

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

# терминал Ubuntu/JSLinux — правильно
date >> /home/user/start/1.txt
cat /home/user/start/1.txt   # проверка: Start + дата

Ошибка 4. Pipe «в никуда» и не та команда

Как было в работах (со слайда):
cat ИМЯ_ФАЙЛА | >> /opt/task/start.txt

Комментарий со слайда: «ошибка использования команд. Нужно использовать ls и значок /».

Почему это проблема: сразу две беды. Во-первых, справа от | должна стоять команда, которая примет данные на stdin, — а здесь стоит голое перенаправление: конвейер ведёт «в никуда», bash ответит ошибкой синтаксиса. Во-вторых, по условию в файл дописывается хвост списка объектов корня — его даёт ls -la /, а не cat какого-то файла.

# терминал Ubuntu/JSLinux — правильно
ls -la / | tail -4 >> /opt/task/start.txt

Ошибка 5. ls без ключа -a

Как было в работах (со слайда):
ls / | tail -4

Комментарий со слайда: «нету ключика -a, который показывает скрытые файлы и папки».

Почему это проблема: условие требует список ВСЕХ объектов корня, включая скрытые (имена с точки). Без -a скрытые объекты не попадут в вывод — и последние 4 строки окажутся не теми. Кроме того, здесь же потерян и сам этап дозаписи в файл.

# терминал Ubuntu/JSLinux — правильно
ls -la / | tail -4 >> /opt/task/start.txt

Ещё две ловушки этой сессии

  • Типографские кавычки со слайдов: ”Start” из PDF — не то же самое, что ”Start” с клавиатуры; скопированные «ёлочки» попадут в файл буквально. Всегда используйте прямые кавычки при вводе команд.
  • head 10 без дефиса (из условия закрепления): head решит, что 10 — имя файла. Правильно: head -n 10.
💡 Общий рецепт: после каждого перенаправления проверяйте результат командой cat — это занимает две секунды и ловит и перезапись вместо дозаписи, и кавычки-«ёлочки», и пустые файлы.