Слайд «Часто встречающиеся ошибки» — с разбором
Пять реальных ошибок из сданных работ, которые преподаватель разбирает на сессии. Слева — как написали студенты (дословно со слайда), ниже — почему это не работает и как правильно.
Ошибка 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 — это занимает две секунды и ловит и перезапись вместо дозаписи, и кавычки-«ёлочки», и пустые файлы.