ОП.05Файловая система Linuxзанятие 3Материалы

Часть 4 из 8

Изменяемые и временные данные

В этой части рассмотрим каталог /var, где программы хранят данные, изменяющиеся во время работы, и каталоги временных файлов /tmp, /var/tmp и /run.

  1. 4.1 Каталог /var
  2. 4.2 Временные файлы
  3. 4.3 Изменяемые данные службы печати

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-сервером. По таким строкам восстанавливают, что и когда происходило в системе.

В терминалеСодержимое /var
  1. ls /var# подкаталоги /var
    что делает

    Что делает команда. Показывает подкаталоги /var с изменяемыми данными: журналами, кэшем, очередями.

    По частям:

    ls
    вывести содержимое каталога
    /var
    что показать (абсолютный путь)
  2. ls -lah /var/log | head -12# первые файлы журналов
    что делает

    Что делает команда. Показывает подробный список журналов в /var/log и оставляет первые 12 строк.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    -a
    показать и скрытые файлы, имена которых начинаются с точки
    -h
    размеры в понятном виде: K, M, G
    /var/log
    что показать (абсолютный путь)
    |
    передать вывод левой команды на вход следующей
    head
    оставить только первые строки
    -12
    сколько первых строк оставить: 12
  3. ls /var/lib | head -8# постоянные данные программ
    что делает

    Что делает команда. Показывает первые восемь каталогов с постоянными данными программ в /var/lib.

    По частям:

    ls
    вывести содержимое каталога
    /var/lib
    что показать (абсолютный путь)
    |
    передать вывод левой команды на вход следующей
    head
    оставить только первые строки
    -8
    сколько первых строк оставить: 8
  4. journalctl -n 3 --no-pager# три последние записи системного журнала
    что делает

    Что делает команда. Выводит три последние записи системного журнала прямо в терминал.

    По частям:

    journalctl
    прочитать системный журнал
    -n 3
    вывести последние 3 записи
    --no-pager
    вывести сразу в терминал, без постраничного просмотра
Результат

в /var есть cache, lib, log и spool.

Снимок 4.1Ubuntu 24.04
  1. 1кэш
  2. 2постоянные данные
  3. 3журналы
  4. 4очереди
Подкаталоги /var.Весь снимок ↗

Подкаталоги /var.

Что показывает снимок. Подкаталоги /var: кэш, постоянные данные, журналы и очереди; ниже — последние записи системного журнала.

Где это пригодится. Когда служба работает с ошибками, первым делом смотрят её журнал в /var/log или через journalctl. Когда на диске заканчивается место, проверяют /var/log и /var/cache.

4.2 Временные файлы

Для временных данных в системе предусмотрено три каталога с разным сроком хранения. В /tmp программы создают промежуточные файлы; система может удалять их в любой момент, как правило при перезагрузке. /var/tmp также предназначен для временных файлов, но они сохраняются после перезагрузки. В /run хранятся сведения о работающих службах: номера процессов и файлы для обмена данными между программами. Этот каталог очищается при каждой загрузке системы.

Пример. Архиватор распаковывает файлы во временный каталог внутри /tmp и после работы удаляет их. Работающая служба записывает в /run номер своего процесса, чтобы систему можно было попросить её остановить. После перезагрузки номер процесса будет другим, поэтому старое значение хранить незачем.

В терминалеНа какой файловой системе находятся /run и /tmp
  1. ls -ld /tmp /var/tmp /run# сведения о самих каталогах
    что делает

    Что делает команда. Показывает сведения о трёх каталогах для временных данных.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    -d
    показать сам каталог, а не его содержимое
    /tmp
    что показать (абсолютный путь)
    /var/tmp
    что показать (абсолютный путь)
    /run
    что показать (абсолютный путь)
  2. findmnt -T /run -o TARGET,SOURCE,FSTYPE
    что делает

    Что делает команда. Показывает, какая файловая система хранит /run: точку монтирования, источник и тип.

    По частям:

    findmnt
    показать подключённые файловые системы
    -T /run
    найти файловую систему, в которой лежит путь /run
    -o TARGET,SOURCE,FSTYPE
    вывести только столбцы TARGET,SOURCE,FSTYPE
  3. findmnt -T /tmp -o TARGET,SOURCE,FSTYPE
    что делает

    Что делает команда. Показывает, какая файловая система хранит /tmp: точку монтирования, источник и тип.

    По частям:

    findmnt
    показать подключённые файловые системы
    -T /tmp
    найти файловую систему, в которой лежит путь /tmp
    -o TARGET,SOURCE,FSTYPE
    вывести только столбцы TARGET,SOURCE,FSTYPE
  4. ls /run | head -8# содержимое /run
    что делает

    Что делает команда. Показывает первые восемь элементов в /run — файлы и каталоги работающих служб.

    По частям:

    ls
    вывести содержимое каталога
    /run
    что показать (абсолютный путь)
    |
    передать вывод левой команды на вход следующей
    head
    оставить только первые строки
    -8
    сколько первых строк оставить: 8
Результат

для /run указан тип tmpfs.

Снимок 4.2Ubuntu 24.04
  1. 1/run — tmpfs
  2. 2/tmp — tmpfs в этой сессии
В Live-сессии и /run, и /tmp находятся в оперативной памяти.Весь снимок ↗

В 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 и после перезагрузки создаётся заново.

В терминалеКаталоги CUPS
  1. ls /etc/cups# настройки
    что делает

    Что делает команда. Показывает файлы настроек службы печати.

    По частям:

    ls
    вывести содержимое каталога
    /etc/cups
    что показать (абсолютный путь)
  2. ls -l /var/log/cups# журналы
    что делает

    Что делает команда. Показывает подробный список журналов службы печати.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    /var/log/cups
    что показать (абсолютный путь)
  3. ls -ld /var/spool/cups /var/cache/cups# очередь печати и кэш
    что делает

    Что делает команда. Показывает сведения о каталогах очереди печати и кэша CUPS.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    -d
    показать сам каталог, а не его содержимое
    /var/spool/cups
    что показать (абсолютный путь)
    /var/cache/cups
    что показать (абсолютный путь)
  4. ls -l /run/cups# файлы работающей службы
    что делает

    Что делает команда. Показывает файлы работающей службы печати, в том числе сокет cups.sock.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    /run/cups
    что показать (абсолютный путь)
  5. 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 тогда печатает простой список без рамок дерева
  6. 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 тогда печатает простой список без рамок дерева
Результат

/run/cups находится на tmpfs, журналы — на основной файловой системе.

Снимок 4.3Ubuntu 24.04
  1. 1основной файл настроек
  2. 2журнал обращений к службе
  3. 3файл для связи со службой
  4. 4/run/cups — в оперативной памяти
  5. 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.

Открыть в отдельной вкладке ↗