Часть 4 из 8
Изменяемые и временные данные
В этой части рассмотрим каталог /var, где программы хранят данные, изменяющиеся во время работы, и каталоги временных файлов /tmp, /var/tmp и /run.
4.1 Каталог /var
Программы не только читают свои файлы, но и создают новые данные: записывают журналы, ставят задания в очередь, ведут базы. Такие данные нельзя хранить рядом с программой в /usr, поэтому для них предназначен отдельный каталог /var (от английского variable — изменяемый).
Разницу между /usr и /var можно представить так. Программа — это учебник: его текст не меняется, сколько бы его ни читали. Журнал — это тетрадь, в которую каждый день дописывают новые записи. Учебники и тетради хранят отдельно: учебник можно заменить новым изданием, а тетрадь с записями терять нельзя.
Внутри /var данные разделены по тому, насколько они важны и можно ли их восстановить. Постоянные данные программ, например базы, хранятся в /var/lib: их потеря приводит к утрате информации. Журналы находятся в /var/log. Кэш, то есть данные, которые программа может вычислить заново, хранится в /var/cache. Очереди заданий, ожидающих обработки, — в /var/spool.
| Каталог | Данные | Последствия удаления |
|---|---|---|
/var/lib | постоянные данные программ, базы | данные теряются |
/var/log | журналы событий | теряется история, программа работает |
/var/cache | кэш | программа создаёт его заново |
/var/spool | очереди заданий | теряются необработанные задания |
Примеры. Сервер баз данных MySQL хранит базы в /var/lib/mysql. Веб-сервер Apache пишет журнал посещений сайта в /var/log/apache2. Менеджер пакетов apt держит скачанные пакеты в кэше /var/cache/apt: если кэш очистить, пакеты просто скачаются заново. Задания печати ждут своей очереди в /var/spool/cups.
Запись журнала тоже состоит из частей: дата и время события, имя компьютера, название программы с номером процесса в квадратных скобках и само сообщение. Например, строка Sep 14 18:53:08 ubuntu systemd-resolved[1223]: Using degraded feature set… означает: 14 сентября в 18:53 на компьютере ubuntu служба разрешения имён systemd-resolved (процесс 1223) сообщила, что сменила режим работы с DNS-сервером. По таким строкам восстанавливают, что и когда происходило в системе.
ls /var# подкаталоги /varчто делает
Что делает команда. Показывает подкаталоги /var с изменяемыми данными: журналами, кэшем, очередями.
По частям:
ls- вывести содержимое каталога
/var- что показать (абсолютный путь)
ls -lah /var/log | head -12# первые файлы журналовчто делает
Что делает команда. Показывает подробный список журналов в /var/log и оставляет первые 12 строк.
По частям:
ls- вывести содержимое каталога
-l- подробный список: права, владелец, размер, дата
-a- показать и скрытые файлы, имена которых начинаются с точки
-h- размеры в понятном виде: K, M, G
/var/log- что показать (абсолютный путь)
|- передать вывод левой команды на вход следующей
head- оставить только первые строки
-12- сколько первых строк оставить: 12
ls /var/lib | head -8# постоянные данные программчто делает
Что делает команда. Показывает первые восемь каталогов с постоянными данными программ в /var/lib.
По частям:
ls- вывести содержимое каталога
/var/lib- что показать (абсолютный путь)
|- передать вывод левой команды на вход следующей
head- оставить только первые строки
-8- сколько первых строк оставить: 8
journalctl -n 3 --no-pager# три последние записи системного журналачто делает
Что делает команда. Выводит три последние записи системного журнала прямо в терминал.
По частям:
journalctl- прочитать системный журнал
-n 3- вывести последние 3 записи
--no-pager- вывести сразу в терминал, без постраничного просмотра
- 1кэш
- 2постоянные данные
- 3журналы
- 4очереди
Весь снимок ↗Подкаталоги /var.
Что показывает снимок. Подкаталоги /var: кэш, постоянные данные, журналы и очереди; ниже — последние записи системного журнала.
Где это пригодится. Когда служба работает с ошибками, первым делом смотрят её журнал в /var/log или через journalctl. Когда на диске заканчивается место, проверяют /var/log и /var/cache.
4.2 Временные файлы
Для временных данных в системе предусмотрено три каталога с разным сроком хранения. В /tmp программы создают промежуточные файлы; система может удалять их в любой момент, как правило при перезагрузке. /var/tmp также предназначен для временных файлов, но они сохраняются после перезагрузки. В /run хранятся сведения о работающих службах: номера процессов и файлы для обмена данными между программами. Этот каталог очищается при каждой загрузке системы.
Пример. Архиватор распаковывает файлы во временный каталог внутри /tmp и после работы удаляет их. Работающая служба записывает в /run номер своего процесса, чтобы систему можно было попросить её остановить. После перезагрузки номер процесса будет другим, поэтому старое значение хранить незачем.
ls -ld /tmp /var/tmp /run# сведения о самих каталогахчто делает
Что делает команда. Показывает сведения о трёх каталогах для временных данных.
По частям:
ls- вывести содержимое каталога
-l- подробный список: права, владелец, размер, дата
-d- показать сам каталог, а не его содержимое
/tmp- что показать (абсолютный путь)
/var/tmp- что показать (абсолютный путь)
/run- что показать (абсолютный путь)
findmnt -T /run -o TARGET,SOURCE,FSTYPEчто делает
Что делает команда. Показывает, какая файловая система хранит /run: точку монтирования, источник и тип.
По частям:
findmnt- показать подключённые файловые системы
-T /run- найти файловую систему, в которой лежит путь /run
-o TARGET,SOURCE,FSTYPE- вывести только столбцы TARGET,SOURCE,FSTYPE
findmnt -T /tmp -o TARGET,SOURCE,FSTYPEчто делает
Что делает команда. Показывает, какая файловая система хранит /tmp: точку монтирования, источник и тип.
По частям:
findmnt- показать подключённые файловые системы
-T /tmp- найти файловую систему, в которой лежит путь /tmp
-o TARGET,SOURCE,FSTYPE- вывести только столбцы TARGET,SOURCE,FSTYPE
ls /run | head -8# содержимое /runчто делает
Что делает команда. Показывает первые восемь элементов в /run — файлы и каталоги работающих служб.
По частям:
ls- вывести содержимое каталога
/run- что показать (абсолютный путь)
|- передать вывод левой команды на вход следующей
head- оставить только первые строки
-8- сколько первых строк оставить: 8
- 1/run — tmpfs
- 2/tmp — tmpfs в этой сессии
Весь снимок ↗В Live-сессии и /run, и /tmp находятся в оперативной памяти.
Что показывает снимок. Команда findmnt показывает, что /run хранится в оперативной памяти — на файловой системе tmpfs.
Где это пригодится. Важные файлы нельзя оставлять в /tmp и /run: после перезагрузки их может не оказаться.
4.3 Изменяемые данные службы печати
На примере CUPS видно, как данные одной службы распределяются по сроку хранения. Настройки находятся в /etc/cups, журналы — в /var/log/cups, очередь печати — в /var/spool/cups, кэш — в /var/cache/cups. Файл cups.sock, через который программы обращаются к работающей службе, находится в /run/cups и после перезагрузки создаётся заново.
ls /etc/cups# настройкичто делает
Что делает команда. Показывает файлы настроек службы печати.
По частям:
ls- вывести содержимое каталога
/etc/cups- что показать (абсолютный путь)
ls -l /var/log/cups# журналычто делает
Что делает команда. Показывает подробный список журналов службы печати.
По частям:
ls- вывести содержимое каталога
-l- подробный список: права, владелец, размер, дата
/var/log/cups- что показать (абсолютный путь)
ls -ld /var/spool/cups /var/cache/cups# очередь печати и кэшчто делает
Что делает команда. Показывает сведения о каталогах очереди печати и кэша CUPS.
По частям:
ls- вывести содержимое каталога
-l- подробный список: права, владелец, размер, дата
-d- показать сам каталог, а не его содержимое
/var/spool/cups- что показать (абсолютный путь)
/var/cache/cups- что показать (абсолютный путь)
ls -l /run/cups# файлы работающей службычто делает
Что делает команда. Показывает файлы работающей службы печати, в том числе сокет cups.sock.
По частям:
ls- вывести содержимое каталога
-l- подробный список: права, владелец, размер, дата
/run/cups- что показать (абсолютный путь)
findmnt -n -o TARGET,FSTYPE -T /run/cups | catчто делает
Что делает команда. Коротко показывает, на какой файловой системе лежит /run/cups: точку монтирования и тип, без заголовка.
По частям:
findmnt- показать подключённые файловые системы
-n- не выводить строку заголовков
-o TARGET,FSTYPE- вывести только столбцы TARGET,FSTYPE
-T /run/cups- найти файловую систему, в которой лежит путь /run/cups
|- передать вывод левой команды на вход следующей
cat- вывести полученный текст как есть; findmnt тогда печатает простой список без рамок дерева
findmnt -n -o TARGET,FSTYPE -T /var/log/cups | catчто делает
Что делает команда. Коротко показывает, на какой файловой системе лежат журналы CUPS: точку монтирования и тип.
По частям:
findmnt- показать подключённые файловые системы
-n- не выводить строку заголовков
-o TARGET,FSTYPE- вывести только столбцы TARGET,FSTYPE
-T /var/log/cups- найти файловую систему, в которой лежит путь /var/log/cups
|- передать вывод левой команды на вход следующей
cat- вывести полученный текст как есть; findmnt тогда печатает простой список без рамок дерева
- 1основной файл настроек
- 2журнал обращений к службе
- 3файл для связи со службой
- 4/run/cups — в оперативной памяти
- 5журналы — на основной файловой системе
Весь снимок ↗Файлы службы печати с разным сроком хранения.
Что показывает снимок. У одной службы настройки лежат в /etc, журнал — в /var/log, а файл для связи со службой — в /run, в оперативной памяти.
Где это пригодится. Зная срок хранения данных, администратор решает, что включать в резервную копию (/etc, /var/lib), а что сохранять не нужно (/run, кэш).
Итоги части 4
- Данные, изменяющиеся во время работы программ, хранятся в
/var. /var/lib— постоянные данные,/var/log— журналы,/var/cache— кэш,/var/spool— очереди./tmpи/runочищаются при перезагрузке,/var/tmp— нет.- tmpfs хранит файлы в оперативной памяти.
В отчётСнимок с ls /var и findmnt для /run.