Пример 1. Полная сессия в vi: от создания до сохранения
# терминал Ubuntu/JSLinux — создаём файл и открываем редактор
vi /tmp/file
Дальше работаем внутри vi (это нажатия клавиш, не команды терминала):
# внутри vi — шаг за шагом
i # 1) командный режим → режим вставки (внизу появляется I)
Hello from ICH! # 2) печатаем текст как в обычном редакторе
<Esc> # 3) выходим из вставки в командный режим (внизу снова -)
:wq # 4) сохранить и выйти — мы в терминале
Логика: vi всегда стартует в командном режиме — печатать сразу нельзя. i включает вставку, Esc возвращает в командный режим, и только из него работают команды сохранения. Вместо :wq можно ZZ (большие буквы!) или :x.
Пример 2. Дописали снаружи — отредактировали внутри (dd и u)
# терминал Ubuntu/JSLinux — дозаписываем дату приёмом занятия 04
date >> /tmp/file
cat /tmp/file
# Hello from ICH!
# Wed Jun 10 12:00:00 UTC 2026 ← дата будет ваша
vi /tmp/file # снова открываем в редакторе
# внутри vi — правим текст и удаляем строку
i # вставка: меняем ICH на своё имя
<Esc> # назад в командный режим
# стрелкой ↓ встаём на строку с датой
dd # удалить текущую строку (вставка НЕ нужна)
u # передумали? u откатывает удаление
dd # удаляем снова
:wq # сохранить и выйти
Логика: dd, yy, p, u — команды командного режима: они работают без перехода во вставку. u отменяет последнее действие — в классическом vi одно, в vim отмена многоуровневая.
Пример 3. Копирование строк: yy и p
# внутри vi — размножаем строку
yy # копировать текущую строку в буфер
p # вставить буфер ПОСЛЕ текущей строки
p # можно вставлять сколько угодно раз
/ICH # поиск: найти первое вхождение «ICH» (Enter)
n # перейти к следующему совпадению
G # прыгнуть на последнюю строку файла (Shift+G)
:q! # выйти, ОТМЕНИВ все изменения с последнего сохранения
Логика: связка yy + p — копипаст без мыши. /текст ищет по файлу, G мгновенно переносит в конец. :q! — аварийный выход: всё, что не сохранено через :w, пропадёт.
Пример 4. Та же задача в nano
# терминал Ubuntu/JSLinux — открываем (или создаём) файл в nano
nano /tmp/file
# внутри nano — никаких режимов
I love nano # просто печатаем: nano сразу в режиме редактирования
^O (Ctrl+O) Enter # Write Out: сохранить, Enter подтверждает имя файла
^X (Ctrl+X) # Exit: выйти из редактора
Логика: nano дружелюбен: сверху — имя файла и версия, снизу — подсказки (^X Exit означает Ctrl+X). Если выйти по Ctrl+X с несохранёнными изменениями, nano спросит — Y сохранит, N отбросит.
Пример 5. df: смотрим диски человекочитаемо
# терминал Ubuntu/JSLinux
df # размеры в блоках — неудобно
df -h # ключ -h: КБ → МБ/ГБ
# Filesystem Size Used Avail Use% Mounted on
# /dev/root 30G 14G 16G 47% /
# tmpfs 2.0G 0 2.0G 0% /dev/shm
Логика: df (disk free) показывает занятость файловых систем; колонка Use% — процент использования, колонка Mounted on — точка монтирования. Нам нужна строка, где точка монтирования — корень /.
Пример 6. grep: фильтруем вывод, ключ -w решает
# терминал Ubuntu/JSLinux
df -h | grep / # ПЛОХО: слеш есть в каждой строке — фильтр не сработал
df -h | grep -w / # ХОРОШО: -w ищет слово целиком — только строка корня
# /dev/root 30G 14G 16G 47% /
grep "pattern" filename.txt # поиск строки в файле
ls -l | grep "file" # поиск в выводе другой команды
grep -i "root" /etc/group # -i: без учёта регистра
grep -v "nologin" /etc/passwd # -v: строки БЕЗ совпадения
Логика: grep ищет и в файлах, и в выводе команд через pipe. Без -w шаблон / совпадает с частью любого пути; -w требует совпадения слова целиком — остаётся одна строка корневого раздела.
Пример 7. awk: вырезаем пятую колонку
# терминал Ubuntu/JSLinux
df -h | grep -w / | awk '{print $5}'
# 47%
Логика: awk разбивает строку на поля по пробелам: $1 — файловая система, $2 — размер… $5 — процент использования. '{print $5}' печатает только его. Строка df превратилась в одно значение — но пока со знаком %.
Пример 8. sed: убираем знак % и заменяем слова
# терминал Ubuntu/JSLinux
df -h | grep -w / | awk '{print $5}' | sed 's/%//g'
# 47 ← знак % заменён на «ничего»
# классическая замена слова в файле (вывод — на экран, файл не меняется):
sed 's/apple/orange/g' filename.txt
# замена в конвейере:
cat /etc/group | grep -w user2 | sed 's/user2/ivan/g'
# перезаписать сам файл — ключ -i:
sed -i 's/user2/Ivan/g' /etc/group
Логика: s/%//g — «заменить % на пустую строку, глобально». По умолчанию sed только печатает результат; -i (in place) меняет файл на диске — используйте осторожно (см. документации sed).
Пример 9. Конвейер целиком + запись в файл
# терминал Ubuntu/JSLinux — итоговая цепочка из лекции
df -h | grep -w / | awk '{print $5}' | sed 's/%//g' > /tmp/df
cat /tmp/df
# 47
Логика: четыре утилиты, каждая делает одно преобразование: таблица → строка → колонка → число; перенаправление > (занятие 04) кладёт результат в файл. Так в Linux решаются задачи: маленькие инструменты соединяются в конвейер.
/tmp — эта папка очищается при перезагрузке, и сломать там нечего. А sed -i по системным файлам (/etc/group) выполняйте только в песочнице JSLinux.