🐛 Типичные ошибки

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

  • «Застрял в vi»: жмёте на всё подряд — становится хуже. Лекарство: Esc, затем :q! и Enter.
  • Печатать текст в командном режиме: клавиши сработают как команды (например, dd удалит строку). Сначала i.
  • grep / без -w: слеш есть в каждом пути — фильтр пропустит почти весь вывод df.

Разбор ошибок

❌ Ошибка 1. «Я застрял в vi и не могу выйти»

vi /tmp/file
# ...понажимали клавиш, на экране непонятное, ничего не выходит...

Почему ошибка: vi стартует в командном режиме, и случайные клавиши выполняются как команды; паническое нажатие всего подряд только усугубляет картину.

✅ Как правильно: универсальный выход: Esc (можно дважды — хуже не будет), затем :q! и Enter — выход без сохранения. Если изменения нужны — Esc, затем :wq.

❌ Ошибка 2. Печатать текст, не войдя в режим вставки

vi /tmp/file
Hello              # H, e, l, l, o ушли КОМАНДАМИ, а не текстом

Почему ошибка: в командном режиме каждая буква — команда. Часть нажатий «съестся» молча, а что-то может удалить или перемешать текст (например, dd в середине слова «add…» снесёт строку).

✅ Как правильно: сначала i — внизу слева индикатор сменится с - на I, — и только потом печатать. Испортили файл — Esc, u (отмена) или :q! (выйти, не сохраняя).

❌ Ошибка 3. Набирать :wq, не выйдя из вставки

# в режиме вставки:
:wq                # строка «:wq» просто напечаталась в файл!

Почему ошибка: команды с двоеточием работают только в командном режиме; в режиме вставки :wq — обычный текст, который окажется в документе.

✅ Как правильно: порядок всегда один: Esc:wq. Если «:wq» уже впечаталось — удалите его (Esc, встать на строку, dd или Del посимвольно) и выходите заново.

❌ Ошибка 4. zz вместо ZZ

# командный режим:
zz                 # ничего не сохранилось (а в vim экран прокрутился)

Почему ошибка: лекция специально подчёркивает: ZZ — БОЛЬШИЕ буквы (Shift+Z дважды). Linux чувствителен к регистру и в редакторе тоже: zz — совсем другая команда.

✅ Как правильно: Shift+Z, Shift+Z — сохранить и выйти. Сомневаетесь в регистре — надёжнее :wq.

❌ Ошибка 5. Выйти из vi и удивиться, что файла нет

vi /tmp/newfile    # ...что-то написали...
:q!                # вышли «как обычно»
cat /tmp/newfile   # cat: can't open '/tmp/newfile': No such file or directory

Почему ошибка: новый файл существует только в памяти редактора, пока вы его не сохранили. :q! отменяет все изменения — вместе с самим фактом создания файла.

✅ Как правильно: выходить через :wq / :x / ZZ, либо сохраниться по ходу работы командой :w и затем выходить как угодно.

❌ Ошибка 6. В nano выйти по Ctrl+X и отбросить изменения

# nano: Ctrl+X → «Save modified buffer?» → N (на автомате)
cat /tmp/file      # правок нет — всё пропало

Почему ошибка: nano при выходе с несохранёнными изменениями задаёт вопрос; ответ N молча отбрасывает всё набранное.

✅ Как правильно: сохраняться явно: Ctrl+O, Enter (Write Out), потом Ctrl+X. На вопрос при выходе отвечать Y и подтверждать имя файла Enter.

❌ Ошибка 7. grep / без ключа -w в конвейере df

df -h | grep /
# tmpfs  2.0G  0  2.0G  0% /dev/shm     ← лишние строки:
# /dev/root 30G 14G 16G 47% /           ← слеш есть в каждом пути

Почему ошибка: grep ищет часть строки: символ / встречается в каждой точке монтирования, поэтому фильтр пропускает почти весь вывод.

✅ Как правильно: df -h | grep -w / — ключ -w (word-regexp) требует совпадения слова целиком, и остаётся только строка корневого раздела. Лекция отдельно обращает на это внимание.

❌ Ошибка 8. sed -i без файла или не на том файле

cat /etc/group | sed -i 's/user2/Ivan/g'   # ошибка: sed -i требует ФАЙЛ
sed -i 's/user2/Ivan/g' /etc/group         # сработает, но файл изменён безвозвратно

Почему ошибка: ключ -i редактирует файл «на месте», поэтому sed должен получить имя файла, а не поток из pipe. И отмены у -i нет: u, как в vi, в терминале не работает.

✅ Как правильно: сначала прогнать замену без -i и посмотреть результат; править с резервной копией: sed -i.bak 's/user2/Ivan/g' файл. Системные файлы — только в песочнице .

❌ Ошибка 9. Кавычки-«ёлочки» из презентации в awk/sed

df -h | grep -w / | awk '{print $5ʼ | sed ‘s/%//g'
>                  # оболочка повисла в ожидании закрытия кавычки

Почему ошибка: при копировании со слайдов прямые кавычки ' подменяются типографскими ʼ ‘ ’ — bash их кавычками не считает, строка остаётся незакрытой (приглашение > ждёт продолжения).

✅ Как правильно: нажать Ctrl+C, чтобы прервать ожидание, и перенабрать команду с прямыми кавычками: awk '{print $5}' | sed 's/%//g'.