✅ Решения заданий

⚡ Кратко

vi-сессия: vi /tmp/filei → текст → Esc:wq; дата — date >> /tmp/file; строка с датой удаляется dd. НЕверное утверждение в тесте — №1 (поток №2 — это ошибки, а не обычный вывод). Практическая работа: df -h >, затем два конвейера с >>: ls -a / | head -9 и cat /etc/group | tail -3 | wc -m. Отличие awk и sed: awk — про колонки и анализ, sed — про построчные замены.

Задание 1. Работа с vi

# терминал Ubuntu/JSLinux — пункты 1–5
vi /tmp/file       # 1) создать файл и открыть для редактирования
# внутри vi
i                  # 2) перейти в режим вставки (внизу слева: - → I)
Hello from ICH!    # 3) написать текст
<Esc>              # 4) выйти из режима редактирования
:wq                # 5) сохранить и выйти (равноценно ZZ или :x)
# терминал Ubuntu/JSLinux — пункт 6
date >> /tmp/file  # дозаписать дату (приём занятия 04!)
vi /tmp/file       # открыть и посмотреть на результат
# внутри vi — пункты 7–8
i                  # вставка: заменить ICH на ваше имя
<Esc>              # назад в командный режим
                   # стрелкой ↓ встать на строку с датой
dd                 # удалить строку с датой
:wq                # 8) сохранить и выйти

Логика: файл реально появится на диске только после первого сохранения. Дату добавляем снаружи дозаписью >> — редактор для этого открывать не обязательно. dd работает в командном режиме (после Esc); если удалили не то — u вернёт строку.

Задание 2. Два редактора — один документ

# терминал Ubuntu/JSLinux — шаг 1: создаём документ в vi
vi /home/text_editors
# внутри vi
i                  # режим вставки
I love vi          # первая строка — от vi
<Esc>
:wq                # сохранить и выйти
# терминал Ubuntu/JSLinux — шаг 2: дописываем в nano
nano /home/text_editors
# внутри nano — режимов нет, сразу печатаем
                   # стрелкой ↓/End спускаемся на новую строку
I love nano        # вторая строка — от nano
Ctrl+O, Enter      # сохранить (Write Out + подтвердить имя)
Ctrl+X             # выйти
# терминал Ubuntu/JSLinux — проверка
cat /home/text_editors
# I love vi
# I love nano

Логика: задание показывает разницу подходов: в vi путь к тексту лежит через режимы (iEsc:wq), в nano — просто печатаете и сохраняете по подсказкам внизу экрана. Результат одинаковый.

Задание 3. Экспресс-опрос: отличие awk и sed

awk — утилита и язык программирования для обработки и анализа текстовых данных: читает строки, разбивает их на поля-колонки ($1, $2, …) и выполняет операции над этими данными — например, выводит нужную колонку ('{print $5}').

sed (Stream Editor) — утилита для преобразования потока: читает вход построчно и выполняет замены/удаления/вставки текста ('s/что/на_что/g').

Коротко: awk — про структуру (колонки и анализ), sed — про правки (поиск и замена в строках). В конвейере урока они работают в паре: awk вырезал колонку 47%, sed убрал знак %.

Задание 4. Найдите НЕверное утверждение

Неверное — утверждение № 1. Поток № 2 — это stderr, стандартный поток ошибок (занятие 04), а «данные, которые оболочка выводит после выполнения каких-то действий», — это описание потока № 1, stdout. Остальные утверждения верны: grep — поиск по текстовым данным (2), awk — утилита анализа и преобразования текста (3), df — показывает занятость дисков (4).

Задание 5. Вопросы на понимание

  1. Режимы vi: в командном режиме клавиши — это команды (перемещение, удаление, копирование), в режиме вставки — обычный набор текста. Переключение: i — в режим вставки, Esc — обратно в командный.
  2. С сохранением: :wq, :x, ZZ (большие буквы). Без сохранения: :q! — отменяет все изменения с момента последнего сохранения.
  3. yy копирует текущую строку в буфер, p вставляет её после текущей строки. Режим вставки не нужен — обе команды работают в командном режиме.
  4. Без -w grep ищет часть строки: символ / есть в каждом пути монтирования, и фильтр пропустит почти все строки. -w требует совпадения слова целиком — остаётся только строка корневого раздела.
  5. s — substitute (подмена), /%/ и // — заменить «%» на пустую строку, g — глобально: все вхождения в каждой строке.

Задание 6. Практическая работа: myfile.txt

# терминал Ubuntu/JSLinux — реализация из лекции (+ недостающий шаг)
mkdir -p /root/test3                              # папка под файл (1)
df -h > /root/test3/myfile.txt                    # (2) вывод df — в файл
ls -a / | head -9 >> /root/test3/myfile.txt       # (3) первые 9 объектов корня
cat /etc/group | tail -3 | wc -m >> /root/test3/myfile.txt  # (4) символы 3 последних строк
cat /root/test3/myfile.txt                        # проверка

Логика: первый шаг — > (создаём файл с нуля), все «допишите» — только >>. Конвейер шага 3: ls -a / выводит все объекты корня (включая скрытые), head -9 оставляет первые девять. Шаг 4: tail -3 берёт три последние строки /etc/group, wc -m считает в них символы. Обратите внимание: на слайде лекции у четвёртой команды потерялось >> /root/test3/myfile.txt — это предполагается из полного контекста задания. В WSL для записи в /root понадобится sudo -i.

Задание 7. Конвейер по шагам

# терминал Ubuntu/JSLinux
# 1) таблица дисков
df -h

# 2) только корневой раздел (сравните с вариантом без -w!)
df -h | grep /        # почти все строки — слеш есть в каждом пути
df -h | grep -w /     # одна строка корня

# 3) колонка с процентом
df -h | grep -w / | awk '{print $5}'        # 47%

# 4) убрать % и записать в файл
df -h | grep -w / | awk '{print $5}' | sed 's/%//g' > /tmp/df

# 5) проверка
cat /tmp/df           # 47

Логика: конвейер строится постепенно — после каждого добавленного звена смотрите промежуточный результат. Это главный приём отладки пайпов: если итог неожиданный, «отрезайте» команды с конца, пока не найдёте звено, где данные испортились.