#import "@docs/bmstu:1.0.0":*
#import "@preview/tablex:0.0.8": tablex, rowspanx, colspanx, cellx
#show: student_work.with(
  caf_name: "Компьютерные системы и сети",
  faculty_name: "Информатика и системы управления",
  work_type: "лабораторной работе",  
  work_num: 5,
  study_field: "09.03.01 Информатика и вычислительная техника",
  discipline_name: "Операционные системы",
  theme: "Исследование методов организации внешней памяти",
  author: (group: "ИУ6-52Б", nwa: "<NAME>"),
  adviser: (nwa: "<NAME>"),
  city: "Москва",
  table_of_contents: true,
)
= Введение
== Цель работы
Исследование файловых систем, применяющихся в UNIX-подобных
системах, а также освоение основных утилит для работы с файлами.

== Задание
- «Установить» на Вашу виртуальную машину второй жесткий диск. 
- Создать на нём файловую систему «ext4» и смонтировать в любой каталог.
- Создать каталог
- Создать в нем файл и записать в него текст
- Скопировать каталог вместе с файлом (одной командой)
- Создать в домашнем каталоге жёсткую и мягкую ссылки на ваш файл
- Вывести в консоль содержимое домашнего каталога
- Вывести в консоль содержимое домашнего каталога, включая скрытые файлы и каталоги в форме таблицы. Определить размер вашего файла.
- Вывести текст вашего файла в консоль, используя ссылку
- Создать архив (gz) вашего каталога
- Создать новый каталог и распаковать в него архив.
- Найти в вашем домашнем каталоге и его подкаталогах файл с заданным именем
- Найти в вашем домашнем каталоге и его подкаталогах файлы с датой последнего изменения старше 7 дней  от текущей даты.
- Определить, из какого каталога запускается leafpad

= Выполнение

== «Установить» на Вашу виртуальную машину второй жесткий диск. 

В настройках устройства нажмем на `+` и добавим еще один диск размером 4Гб.

#img(image("img/1.png", width:70%), [Добавляем диск])

#img(image("img/2.png", width:70%), [Диск добавлен])

== Создать на нём файловую систему «ext4» и смонтировать в любой каталог.

При помощи комманды ```sh fdisk -l``` проверим наличие диска:

#img(image("img/3.png", width:70%), [```sh fdisk -l```])

С помощью той же утилиты будем создавать файловую систему на диске

#img(image("img/4.png", width:70%), [```sh fdisk /dev/sdb```])

Тут появилась строка, в которую можно вводить комманды. Проверим диск коммандой `p`:

#img(image("img/5.png", width:70%), [`p`])

Коммандой `g` создадим новый `GPT disklabel`.

#img(image("img/7.png", width:70%), [`g`])

Далее коммандой `n` зададим параметры новой файловой системы. Конец сектора зададим на 100Мб диска. 

#img(image("img/11.png", width:70%), [`n`])

С помощью комманды `t` зададим тип `FAT32`(`EFI System`).

#img(image("img/12.png", width:65%), [`t`])
#img(image("img/13.png", width:65%), [`t`])
#img(image("img/14.png", width:70%), [`t`])
#img(image("img/15.png", width:70%), [`t`])

Выполним комманду `n` для остальной части диска. Она будет типа `ext4`.

#img(image("img/16.png", width:70%), [`n`])

Запишем все изменения коммандой `w`.

#img(image("img/17.png", width:70%), [`w`])

Проверим получившиеся диски коммандой ```sh lsblk -f```.

#img(image("img/18.png", width:70%), [```sh lsblk -f```])

Все получилось. Теперь смонтируем оба диска: ```sh mkfs -t vfat /dev/sdb1 && mkfs -t ext4 /dev/sdb2```

#img(image("img/21.png", width:70%), [```sh mkfs -t vfat /dev/sdb1 && mkfs -t ext4 /dev/sdb2```])

Проверяем еще раз коммандой ```sh lsblk -f```.

#img(image("img/22.png", width:70%), [```sh lsblk -f```])

Осталось только смонтировать диски.

#img(image("img/23.png", width:70%), [```sh mount /dev/sdb2/ /storage```])


== Создать каталог, создать в нем файл и записать в него текст

Создадим и запишем в файл `text.txt` `xxxxx`, после чего найдем файл утилитой `ls`:

#img(image("img/24.png", width:70%), [```sh echo "xxxxx" > /storage/text.txt && ls /storage```])

== Скопировать каталог вместе с файлом (одной командой)

Комманда копирования ```sh cp``` может работать рекурсивно с флагом `-r`, скопируем наш каталог, после чего покажем обе копии каталога.

#img(image("img/26.png", width:70%), [```sh cp -r /storage ~/storage&& ls -l ~/ /|grep storage```])

== Создать в домашнем каталоге жёсткую и мягкую ссылки на файл

Сначала создадим жесткую ссылку в домашний каталог.

#img(image("img/27.png", width:70%), [```sh ln storage/text.txt text.txt```])

Проверим: 

#img(image("img/28.png", width:70%), [```sh ls -l|grep text```])

Ссылка создана.

Теперь мягкую ссылку:

#img(image("img/31.png", width:70%), [```sh ln -s storage/text.txt newdir/text.txt```])

Проверим:

#img(image("img/42.png", width:70%), [```sh ls -la```])

Видно, что при создании мягкой ссылки указывается директория в которой реально находится файл.

== Вывести в консоль содержимое домашнего каталога

#img(image("img/30.png", width:70%), [```sh ls```])

== Вывести в консоль содержимое домашнего каталога, включая скрытые файлы и каталоги в форме таблицы. Определить размер вашего файла.

#img(image("img/29.png", width:70%), [```sh ls -la```])

Размер `text.txt` 6 байт: 5 букв x и EOF.

== Вывести текст вашего файла в консоль, используя ссылку

По жеской ссылке при помощи ```sh cat``` выводим содержимое файла: 

#img(image("img/32.png", width:70%), [```sh cat text.txt```])

== Создать архив (gz) вашего каталога

При помощи утилиты ```sh tar``` создаем архив каталога.

#img(image("img/33.png", width:70%), [```sh tar -czvf test.tar.gz newdir```])

#img(image("img/34.png", width:70%), [Архив создан])

== Создать новый каталог и распаковать в него архив.

Перейдем в каталог `newnewdir` и распакуем архив
#img(image("img/35.png", width:70%), [```sh tar -xvf test.tar.gz```])
#img(image("img/36.png", width:70%), [Архив распакован])


== Найти в вашем домашнем каталоге и его подкаталогах файл с заданным именем

С помощью утилиты find найдем все `text.txt`, их всего 4 штуки: оригинал, 2 ссылки и из распакованного архива
#img(image("img/39.png", width:70%), [```sh find ~/ -name text.txt```])

== Найти в вашем домашнем каталоге и его подкаталогах файлы с датой последнего изменения старше 7 дней  от текущей даты.

С помощью утилиты find найдем все файлы, старше 7 дней. Выведем первые 10.
#img(image("img/40.png", width:70%), [```sh find ~/ -mtime+7|more -n 10```])

== Определить, из какого каталога запускается leafpad

С помощью утилиты `whereis` найдем все бинарные файлы от `mousepad`:
#img(image("img/41.png", width:70%), [```sh whereis mousepad```])







