🐛 Типичные ошибки из разбора ДЗ 4

К оглавлению урока

Четыре слайда с сессии — каждая ошибка встречалась у многих студентов.

⚡ Топ ошибок

  • > вместо >> — перезаписывает файл вместо дозаписи
  • mkdir вместо touch (и наоборот)
  • wc -1 (единица) вместо wc -l (буква «эль»)
  • Незакрытые кавычки/скобки в awk — зависание ввода (выход: Ctrl+D)
  • sed без флага g — заменяет только первое вхождение в строке

Блок 1: Базовые команды и перенаправление

Ошибка 1. > vs >>
Путают оператор записи (>) и дозаписи (>>).
Проблема: date > /tmp/file.txt в каждом шаге — предыдущее содержимое стирается.
Правило: первый шаг — > (создать файл), все следующие шаги — >> (дозаписать).
Ошибка 2. mkdir vs touch
Путают команды для создания директорий и файлов.
Неверно: mkdir /tmp/file.txt — создаст директорию, не файл.
Верно: touch /tmp/file.txt или date > /tmp/file.txt для файла.
Ошибка 3. Ключ -p в mkdir
Не помнят значение ключа -p.
Без -p: mkdir /opt/task/start.txt — ошибка, если /opt/task/ не существует.
С -p: mkdir -p /opt/task/ — создаст все промежуточные директории.
Ошибка 4. Пути в корне файловой системы
Путают относительный и полный путь; не знают папок в корне.
Проблема: пишут home/file.txt вместо /home/file.txt.
Правило: полный путь начинается с /. Без слеша — относительный (от текущей директории).
Ошибка 5. ls vs cat
Путают назначение команд.
ls — показывает список файлов в директории.
cat — выводит содержимое файла.
Неверно: cat /home — выведет ошибку, это директория.
Верно: ls /home — список файлов; cat /tmp/file.txt — содержимое.

Блок 2: grep, pipe и &&

Ошибка 6. grep с ключами и без
Не видят разницы между обычным grep и с ключами -w, -o.
grep / — найдёт все строки, содержащие символ / (много строк).
grep -w / — только строки, где / является отдельным словом (строка корневого раздела).
Ошибка 7. Злоупотребление &&
Строят всё задание в одну строку через &&.
Проблема: трудно отлаживать; если одна команда упала — все последующие тоже не выполняются.
Лучше: выполнять каждый шаг отдельной командой и проверять результат.
Ошибка 8. Непонимание pipe |
Пытаются использовать перенаправление вместо пайпа или не понимают порядок.
Неверно: df -h > grep / — синтаксическая ошибка.
Верно: df -h | grep / — stdout первой команды → stdin второй.
Справа от | всегда команда, не файл.
Ошибка 9. Незакрытые кавычки
Забывают закрывать открытые кавычки и скобки в awk/sed.
Симптом: терминал показывает > и ждёт продолжения — редактор «завис».
Выход: нажать Ctrl+D (EOF) или Ctrl+C (прервать).

Блок 3: tail, head, awk

Ошибка 10. tail и head: верх и низ
Путают: head — начало файла; tail — конец файла.
tail -3 — три последних строки; head -3 — три первых строки.
Забывают ключ: tail /etc/group — по умолчанию 10 строк; tail -3 /etc/group — 3 строки.
Ошибка 11. awk: кавычки и скобки
Забывают какие кавычки ставить и как выйти из awk.
Неверно: awk {print $1} — нужны одинарные кавычки и фигурные скобки.
Верно: awk '{print $1}'
Если попали в интерактивный режим awk — выход: Ctrl+D.
Ошибка 12. awk: неправильный счёт столбцов
Ошибаются в номере столбца (нумерация с 1, не с 0).
Пример: для df -h$1 имя, $2 размер, $3 использовано, $4 доступно, $5 процент.
Совет: сначала выведите всё awk '{print $0}' и посчитайте столбцы.

Блок 4: sed, wc и ~

Ошибка 13. sed: конструкция замены и флаг g
Не понимают структуру: s/что/чем/флаги.
Без g: sed 's/1000/777/' — заменяет только первое вхождение в строке.
С g: sed 's/1000/777/g' — заменяет все вхождения в строке.
Ошибка 14. sed: незакрытые слеши и кавычки
Неверно: sed 's/1000/777 — без закрывающего слеша и кавычки.
Верно: sed 's/1000/777/g' — три части: шаблон / замена / флаги.
Везде используется флаг -o (только совпадение) — не нужен при замене!
Ошибка 15. wc -l vs wc -1
Путают ключ -l (буква «эль», подсчёт строк) и -1 (цифра «один»).
Правильно: wc -l — Lines (строки); wc -w — Words; wc -c — Characters/bytes.
Количество символов равно количеству байт (в ASCII-тексте).
Ошибка 16. Тильда ~
Пугаются символа ~ — не помнят, что это домашняя папка пользователя.
~ = /home/имя_пользователя (или /root для root).
Пример: ~/.ssh/id_rsa = /home/user/.ssh/id_rsa.
Ошибка 17. echo "TEXT" >> не выводит на экран
Не понимают, почему текст не появляется на экране, а записывается в файл.
Объяснение: >> перенаправляет stdout в файл. Вывода на экран нет — это норма.
Чтобы проверить: cat /tmp/file.txt.