✅ Решения и ответы

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

⚡ Ключевые ответы

  • >> — дописывает в конец файла (не перезаписывает)
  • tar -czvf — создать (-c), gzip (-z), verbose (-v), файл (-f)
  • merge conflict — несовместимые изменения одного файла в разных ветках
  • monorepo — несколько проектов в одном репозитории

Ответы: Lecture 17 (урок 27)

Вопрос 1. Переменные в testscript.sh

  • EXTPATH=/opt/newfolder/ — путь для распаковки архива
  • ARCHIVE=/tmp/Arh/Arh-$(date '+%d-%m-%y').tar.gz — имя файла архива с датой
  • i — внешний цикл (директории Dir1..Dir5)
  • j — внутренний цикл (файлы File1..File5 в каждой директории)

Вопрос 2. Что делает внутренний цикл for j in {1..5}?

Внутренний цикл выполняется 5 раз для каждой директории Diri. На каждой итерации создаётся файл File$j с именем, содержащим текущее время (через date +'%H-%M-%S'), и скрипт ждёт 5 секунд (sleep 5). Итого создаётся 5 файлов в каждой из 5 директорий = 25 файлов.

Вопрос 3. Как создаётся имя архива в $ARCHIVE?

Имя формируется через подстановку команды: ARCHIVE=/tmp/Arh/Arh-$(date '+%d-%m-%y').tar.gz. Часть $(date '+%d-%m-%y') заменяется текущей датой в формате день-месяц-год, например Arh-20-04-23.tar.gz.

Вопрос 4. Почему используется >> в команде tar?

Оператор >> дописывает (appends) вывод в конец файла ArhList.txt, не перезаписывая его. Это позволяет накапливать историю архивирований. В отличие от >, который создаёт файл заново каждый раз.

Вопрос 5. Что делает tar -czvf?

  • -c — create (создать архив)
  • -z — сжать через gzip
  • -v — verbose (показывать список добавляемых файлов)
  • -f — указать имя файла архива (следующий аргумент)

Вопрос 6. Какие файлы архивируются и распаковываются?

Архивируются содержимое директорий Dir1..Dir5 из /home (25 файлов с временными метками). Архив создаётся в /tmp/Arh/. Распаковывается тот же архив в директорию /opt/newfolder/ с сохранением структуры (tar -xzf ... -C $EXTPATH).

Ответы: Lecture 18 (урок 28)

Вопрос 7. Что такое merge conflict?

Merge conflict — ситуация при слиянии веток, когда Git не может автоматически объединить изменения, потому что обе ветки изменили одну и ту же часть файла несовместимым образом. Git помечает конфликтующие участки маркерами <<<<<<<, =======, >>>>>>>.

Вопрос 8. Виды merge conflict

  • Конфликты файлов — несовместимые изменения одного файла в разных ветках
  • Конфликты слияния директорий — изменения в структуре директорий (переименование, перемещение)

Вопрос 9. Как разрешить merge conflict?

  1. git status — найти конфликтующие файлы
  2. git log --merge — просмотреть коммиты, участвующие в конфликте
  3. git diff — увидеть различия
  4. Открыть файл, вручную выбрать нужную версию (удалить маркеры)
  5. Или: git mergetool — открыть визуальный инструмент
  6. git add <файл> — пометить конфликт разрешённым
  7. git merge --continue — завершить слияние

Вопрос 10. Как избежать merge conflict в команде?

  • Чаще делать git pull с основной ветки
  • Небольшие, частые коммиты
  • Разделение зон ответственности
  • Обсуждение изменений в общих файлах перед реализацией

Вопрос 11. Что такое monorepo?

Monorepo — подход к управлению кодом, при котором несколько проектов или компонентов хранятся в одном репозитории вместо множества отдельных репозиториев.

Вопрос 12. Преимущества monorepo

  • Упрощённая коллаборация — все изменения видны централизованно
  • Единый поиск по всему коду
  • Логическая группировка связанных компонентов

Вопрос 13. Недостатки monorepo

  • Большой размер репозитория
  • Длительное время клонирования
  • Выше вероятность конфликтов при работе большой команды

Решение задания: мониторинг дискового пространства

#!/bin/bash
MY_DIRECTORIES="/home /var/log"
echo "Top Ten Disk Space Usage"
for DIR in $MY_DIRECTORIES
do
  echo "The $DIR Directory:"
  du -S $DIR 2>/dev/null |
  sort -rn
done
exit

Пояснение:

  • MY_DIRECTORIES="/home /var/log" — список директорий через пробел
  • for DIR in $MY_DIRECTORIES — итерация по словам в строке
  • du -S $DIR — показать размер $DIR и её поддиректорий
  • 2>/dev/null — скрыть ошибки (нет доступа к некоторым поддиректориям)
  • sort -rn — числовая сортировка от большего к меньшему