Задание №1
1)Разработать эмулятор для языка оболочки ОС. Необходимо сделать работу эмулятора как можно более похожей на сеанс shell в UNIX-подобной ОС. Эмулятор должен запускаться из реальной командной строки, а файл с виртуальной файловой системой не нужно распаковывать у пользователя. Эмулятор принимает образ виртуальной файловой системы в виде файла формата tar. Эмулятор должен работать в режиме CLI. Ключами командной строки задаются: • Путь к архиву виртуальной файловой системы. • Путь к лог-файлу. Лог-файл имеет формат json и содержит все действия во время последнего сеанса работы с эмулятором. Необходимо поддержать в эмуляторе команды ls, cd и exit, а также следующие команды:
- whoami.
- tac. Все функции эмулятора должны быть покрыты тестами, а для каждой из поддерживаемых команд необходимо написать 3 теста.
2)Описание функций и настроек
Инициализация (init): Принимает путь к tar-архиву виртуальной файловой системы и путь к лог-файлу. Загружает виртуальную файловую систему с помощью метода load_vfs.
Загрузка VFS (load_vfs): Извлекает файлы и директории из tar-архива и сохраняет их в словаре vfs.
Логирование действий (log_action): Записывает выполненные команды и их результаты в список actions.
Сохранение лога (save_log): Сохраняет список выполненных действий в указанный лог-файл в формате JSON.
Команда ls: Выводит список файлов и директорий в текущей директории. Логирует действие.
Команда cd: Изменяет текущую директорию. Поддерживает переход к родительской директории (..). Логирует действие.
Команда whoami: Выводит имя текущего пользователя. Логирует действие.
Команда tac: Выводит содержимое указанных файлов в обратном порядке. Проверяет, что указанный объект — файл, а не директория. Логирует действие.
Команда exit: Сохраняет лог и завершает выполнение программы.
Метод run: Главный цикл, принимающий пользовательские команды и обрабатывающий их.
3)Описание команд для сборки проекта Импорт библиотек: Импортируйте необходимые библиотеки: os, tarfile, json, argparse.
Создание класса ShellEmulator: Определите все методы, описанные выше.
Создание функции main: Настройте аргументы командной строки для получения путей к tar-архиву и лог-файлу.
Запуск эмулятора: Создайте экземпляр ShellEmulator и вызовите метод run.
4)Тесты команд
Для начала, чтобы запустить эмулятор, надо находиться в директории с эмуляором и прописать команду:


