Часть 8 из 8
Практическая работа: размещение файлов приложения
В этой части применим правила размещения файлов к собственному приложению shop-api и оформим отчёт по уроку.
8.1 Размещение файлов приложения
Предположим, что в систему устанавливается служба shop-api. У неё есть исполняемый файл, настройки, база данных, журнал, файл с номером запущенного процесса и промежуточные файлы. По правилам из частей 2–4 каждый из них должен оказаться в каталоге, соответствующем типу данных.
Если сложить все файлы сервиса в один каталог, например в /home/admin/shop-api, появятся проблемы. При обновлении программы легко затереть настройки и базу. Резервную копию придётся делать для всего каталога целиком. Другой администратор не найдёт журнал там, где его обычно ищут.
| Файл | Каталог | Основание |
|---|---|---|
| исполняемый файл, установленный вручную | /usr/local/bin | программы вне пакетов дистрибутива |
| настройки | /etc/shop-api | конфигурационные файлы |
| база данных | /var/lib/shop-api | постоянные изменяемые данные |
| журнал | /var/log/shop-api | журналы служб |
| номер процесса | /run/shop-api | сведения о работающей службе, до перезагрузки |
| промежуточные файлы | /tmp | временные данные |
Системные каталоги в работе не изменяются. Структура воспроизводится внутри каталога model-root: путь model-root/etc/shop-api соответствует системному /etc/shop-api.
cd ~/linux-fhs-labчто делает
Что делает команда. Переходит в рабочий каталог урока linux-fhs-lab.
По частям:
cd- сменить текущий каталог
~/linux-fhs-lab- куда перейти (путь от домашнего каталога)
mkdir -p model-root/{usr/local/bin,etc/shop-api,var/lib/shop-api,var/log/shop-api,run/shop-api}# создать каталогичто делает
Что делает команда. Создаёт внутри model-root пять каталогов, повторяющих системные места для файлов shop-api.
По частям:
mkdir- создать каталог
-p- создать и все промежуточные каталоги; не выдавать ошибку, если каталог уже есть
model-root/{usr/local/bin,etc/shop-api,var/lib/shop-api,var/log/shop-api,run/shop-api}- какой каталог создать (путь относительно текущего каталога; фигурные скобки: оболочка превратит запись в несколько путей)
cp config/app.conf model-root/etc/shop-api/# настройкичто делает
Что делает команда. Копирует файл настроек в каталог настроек модели сервиса.
По частям:
cp- скопировать файл
config/app.conf- что копировать (путь относительно текущего каталога)
model-root/etc/shop-api/- куда копировать (путь относительно текущего каталога)
cp data/info.txt model-root/var/lib/shop-api/# данныечто делает
Что делает команда. Копирует файл данных в каталог постоянных данных модели.
По частям:
cp- скопировать файл
data/info.txt- что копировать (путь относительно текущего каталога)
model-root/var/lib/shop-api/- куда копировать (путь относительно текущего каталога)
printf "service started\n" > model-root/var/log/shop-api/app.log# журналчто делает
Что делает команда. Создаёт журнал сервиса с первой записью service started.
По частям:
printf- вывести текст по шаблону
"service started\n"- шаблон текста (\n — перевод строки)
>- записать вывод в файл; если файл есть, он будет перезаписан
model-root/var/log/shop-api/app.log- файл, в который записывается вывод
find model-root -type f# список файловчто делает
Что делает команда. Показывает все файлы, созданные в модели сервиса.
По частям:
find- найти файлы и каталоги
model-root- где искать
-type f- отбирать только обычные файлы
- 1журнал
- 2данные
- 3настройки
Весь снимок ↗Структура каталогов shop-api внутри рабочего каталога.
Что показывает снимок. Структура каталогов сервиса повторяет системные каталоги: настройки, данные и журнал разложены по назначению.
Где это пригодится. Так размещают файлы при установке собственной службы на сервер: администратор и другие программы найдут их в стандартных местах.
8.2 Отчёт
Отчёт оформляется в файле README.md в каталоге linux-fhs-lab по шаблону из материалов урока. Снимки экрана сохраняются в каталог screenshots. Под каждым снимком кратко указывается, что проверялось и какой получен результат. Начало отчёта можно создать из терминала: оператор > создаёт файл заново, >> дописывает строки в конец.
cd ~/linux-fhs-labчто делает
Что делает команда. Переходит в рабочий каталог урока linux-fhs-lab.
По частям:
cd- сменить текущий каталог
~/linux-fhs-lab- куда перейти (путь от домашнего каталога)
printf "# Linux FHS lab\n\n" > README.md# создать файлчто делает
Что делает команда. Создаёт файл отчёта README.md с заголовком; старое содержимое, если было, стирается.
По частям:
printf- вывести текст по шаблону
"# Linux FHS lab\n\n"- шаблон текста (\n — перевод строки)
>- записать вывод в файл; если файл есть, он будет перезаписан
README.md- файл, в который записывается вывод
printf "## System\n" >> README.md# дописать строкучто делает
Что делает команда. Дописывает в конец отчёта заголовок раздела System.
По частям:
printf- вывести текст по шаблону
"## System\n"- шаблон текста (\n — перевод строки)
>>- дописать вывод в конец файла
README.md- файл, в который записывается вывод
cat /etc/os-release | head -4 >> README.mdчто делает
Что делает команда. Дописывает в отчёт первые четыре строки сведений о системе.
По частям:
cat- вывести содержимое файла на экран
/etc/os-release- какой файл вывести (абсолютный путь)
|- передать вывод левой команды на вход следующей
head- оставить только первые строки
-4- сколько первых строк оставить: 4
>>- дописать вывод в конец файла
README.md- файл, в который записывается вывод
printf "\n## Root filesystem\n" >> README.mdчто делает
Что делает команда. Дописывает в отчёт заголовок раздела Root filesystem.
По частям:
printf- вывести текст по шаблону
"\n## Root filesystem\n"- шаблон текста (\n — перевод строки)
>>- дописать вывод в конец файла
README.md- файл, в который записывается вывод
findmnt / -o TARGET,SOURCE,FSTYPE >> README.mdчто делает
Что делает команда. Дописывает в отчёт сведения о корневой файловой системе.
По частям:
findmnt- показать подключённые файловые системы
/- для какого пути (корневой каталог)
-o TARGET,SOURCE,FSTYPE- вывести только столбцы TARGET,SOURCE,FSTYPE
>>- дописать вывод в конец файла
README.md- файл, в который записывается вывод
cat README.mdчто делает
Что делает команда. Выводит готовый отчёт на экран для проверки.
По частям:
cat- вывести содержимое файла на экран
README.md- какой файл вывести (путь относительно текущего каталога)
- 1создание файла
- 2дописывание в конец
- 3сведения о корневой файловой системе
Весь снимок ↗Сведения о системе записаны в файл отчёта.
Что показывает снимок. Вывод команд записан в файл отчёта: > создал файл, >> дописал строки в конец.
Где это пригодится. Перенаправление вывода в файл используют для отчётов, журналов работы скриптов и сохранения результатов команд.
Итоги части 8
- Файлы приложения распределяются по каталогам согласно типу данных.
- Настройки —
/etc, программа —/usr/local/bin, данные —/var/lib, журналы —/var/log, сведения о работающей службе —/run. - Отчёт содержит собственные снимки и выводы по каждой части.
В отчётREADME с 13 снимками, структура shop-api и разбор итоговой задачи.
Что сдать
Каталог linux-fhs-lab с заполненным README.md и 13 снимками экрана. Если команду mount выполнить не удалось из-за прав, приложите текст ошибки и разбор опыта по снимкам урока.
| Снимок | Тема | Что написать под снимком |
|---|---|---|
01-root.png | Корневой каталог | Что такое корневой каталог, чем абсолютный путь отличается от относительного. |
02-home.png | Домашний каталог | Где находится домашний каталог, что такое скрытые файлы. |
03-system.png | Каталог /etc | Версия системы, UID, домашний каталог и оболочка. |
04-programs.png | Программы и PATH | Как оболочка находит программу. |
05-var.png | Изменяемые данные | Назначение /var/lib, /var/log, /var/cache и /run. |
06-dev.png | Устройства | Тип устройства и код завершения. |
07-proc.png | Файлы /proc | Почему копия не меняется. |
08-sys.png | Сетевые интерфейсы | Какие интерфейсы есть в системе. |
09-links.png | inode и ссылки | Чем жёсткая ссылка отличается от символической. |
10-space.png | Место на диске | Чем df отличается от du. |
11-mount-before.png | Монтирование tmpfs | Почему before.txt перестал быть виден. |
12-mount-after.png | Отключение tmpfs | Что стало с inside.txt. |
13-model.png | Файлы shop-api | Почему выбран каждый каталог. |
Критерии оценки · 10 баллов
- 2 дерево каталогов, домашний каталог, /etc и учётная запись
- 2 программы и PATH, /var и /run, размещение shop-api
- 2 /dev, /proc и /sys
- 2 типы файлов, inode, жёсткие и символические ссылки
- 2 findmnt, df, du и опыт с tmpfs
По каждому пункту: 2 балла — есть результат и вывод, 1 — результат без вывода, 0 — нет результата или вывод неверный.
Итоговая задача
Служба shop-api установлена в систему. Проверьте её пути и для каждой строки укажите: оставить путь или заменить, правильный путь и из какой части урока это следует. В настоящей системе ничего не перемещайте.
/home/admin/shop.log /usr/bin/config.json /tmp/database.db /etc/shop-api/app.conf /var/log/shop-api/access.log /var/lib/shop-api/database.db
Домашнее задание
Составьте таблицу каталогов для службы резервного копирования backup-agent: программа, настройки, журнал, список сделанных копий и номер процесса. Для каждого файла укажите каталог и основание. Сами резервные копии храните на постоянном носителе.
Сдача: папка lesson_01 в своём репозитории по шаблону os-environments-template — отчёт report.md и 13 снимков в screenshots/, ветка hw-01, Pull Request в свою main, до начала следующего занятия.
Перед сдачей
Отмечено 0 из 5