LINUX.ORG.RU

Зачем нужен man-db.service в Ubuntu

 ,


1

1

Обнаружил такой systemd сервис: man-db.service. Вызывается он раз в день с помощью таймера man-db.timer. Смотрю описание:

Daily man-db regeneration

Никак не могу понять, а зачем нужна эта самая регенерация базы? В моем понимании есть набор man-страниц. Есть индекс по ним. Если я не добавляю новые страницы или не удаляю существующие с помощью установки пакетов через apt-get, то как-то регенерировать индекс особого смысла нет, т.к. данные не поменялись, а, следовательно, и индекс не поменяется.

Подскажите пожалуйста, зачем такое может потребоваться?

Ответ на: комментарий от Rootlexx

На мой взгляд сомнительный аргумент: если я установил что-то мимо менеджера пакетов - то я сам себе злой буратино и должен сам перегенерить базу man pages.

Goganchic ★★
() автор топика

В твоей системе есть пакеты. Пакет в Linux - это набор разного говна, в т.ч. man-файлов. Это обычные текстовык файлы, которые разбросаны где ни попадя. Чтобы производить быстрый поиск по этим файлам, их содержимое нужно проиндексировать (засунуть в какую-то базу, где хранятся упорядоченные данные):

➜ fd index.db /                        
/var/cache/man/index.db
/var/cache/man/sk/index.db
/var/cache/man/zh/index.db
/var/cache/man/zh_TW/index.db
/var/cache/man/hr/index.db
/var/cache/man/zh_CN/index.db
/var/cache/man/uk/index.db
/var/cache/man/pt_PT/index.db
/var/cache/man/tr/index.db
/var/cache/man/tr.ISO8859-9/index.db
/var/cache/man/sv/index.db
/var/cache/man/ru/index.db
/var/cache/man/ru.UTF-8/index.db
...

index.db - это файлы с данными для Berkley DB. Почему она используется в душе не апу

➜ file /var/cache/man/ru/index.db
/var/cache/man/ru/index.db: GNU dbm 1.x or ndbm database, little endian, 64-bit

Что там лежит поможет узнать Python:

➜ sudo ipython                              
Python 3.9.6 (default, Jun 30 2021, 10:22:16) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.25.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import dbm
In [2]: with dbm.open('/var/cache/man/ru/index.db') as db:
   ...:     k = db.firstkey()
   ...:     while k is not None:
   ...:         print(k.decode(), '=>', db.get(k).decode())
   ...:         k = db.nextkey(k)
   ...: 
   ...: 
man => -        1 1     1624371230      0       A       -       t    gz доступ к системным справочным страницам
faillog 8 => -  8 8     1599486121      0       A       -       -    gz показывает записи из файла faillog или задаёт предел неудачных попыток входа в систему
manpath =>      manpath 1       manpath 5
mc => - 1       1 1617282218    0       A       -       -       gz   Визуальная оболочка для Unix-подобных систем.
man-recode => - 1 1     1624371230      0       A       -       -    gz изменяет кодировку справочных страниц
groupadd => -   8 8     1599486121      0       A       -       -    gz создаёт новую группу
login.defs => - 5 5     1599486121      0       A       -       -    gz содержит конфигурацию подсистемы теневых паролей
userdel => -    8 8     1599486121      0       A       -       -    gz удаляет учётную запись и файлы пользователя
chgpasswd => -  8 8     1599486121      0       A       -       -    gz обновляет пароли групп в пакетном режиме
accessdb => -   8 8     1624371230      0       A       -       -    gz сбрасывает содержимое базы данных man-db в понятный человеку формат
passwd  1 => -  1 1     1599486121      0       A       -       -    gz изменяет пароль пользователя
$version$ => 2.5.0
whatis => -     1 1     1624371230      0       A       -       -    gz показывает однострочные описания справочных страниц
zsoelim => -    1 1     1624371230      0       A       -       -    gz выполняет .so запросы для входящих данных roff
useradd => -    8 8     1599486121      0       A       -       -    gz регистрирует нового пользователя или изменяет информацию по умолчанию о новых пользователях
shadow =>       shadow  3       shadow  5
peekfd => -     1 1     1612727867      0       A       -       -    gz подглядывает в файловые дескрипторы выполняющихся процессов
...
nmap => -       1 1     1605046041      0       A       -       -    gz Утилита для исследования сети и сканер портов
...

Судя по всему, man-db.service нужен для генерации краткой справки по командам:

➜ LANGUAGE=ru_RU whatis nmap
nmap (1)             - Утилита для исследования сети и сканер портов
tz4678 ★★
()
Последнее исправление: tz4678 (всего исправлений: 1)

man файлы, кстати, могут быть и к питоновским пакетам. да и сама та же бубунта, а убунта, как я напомню, несомненно говно, позволяет кроме apt использовать snap и flatpak (что если не признак дурного тона, то как минимум признание в копрофилии) для установки всякого кала, многие же додики еще по виндовой привычке .deb файлы качают и «ставят». так что системе доподлиноо неизвестно появились ли новые man файлы или нет, да и как выяснилось этот сервис нужен только для утилиты whatis, которая и идет с пакетом man-db:

➜ yay -Qo whatis
/usr/bin/whatis is owned by man-db 2.9.4-2
tz4678 ★★
()
Последнее исправление: tz4678 (всего исправлений: 4)
Ответ на: комментарий от tz4678

Спасибо за подробное исследование!

То, что для man-страниц нужен некоторый индекс, по которому можно искать не перечитывая все текстовые файлы - это понятно и логично. Меня смущает именно периодическая перегенерация этого индекса, как-будто он автоудаляется через некоторое время, как, какие-нибудь сообщения в телеге.

Получается я могу безболезненно этот таймер отключить и не думать о нем больше: при установке пакетов через dpkg будут вызваны триггеры для man-db которые перегенерируют все что надо один раз, а периодическая перегенерация — это пустая трата процессорного времени.

Goganchic ★★
() автор топика
Последнее исправление: Goganchic (всего исправлений: 1)
Ответ на: комментарий от Legioner

А разве в федоре man-db? Оно вроде только в Debian и производных.

anonymous
()
Ответ на: комментарий от Goganchic

так ставь арч. в гнем вообще по-дефолту ничего нет. я этот man-db.timer сто лет назад еще вручную ставил и включал

tz4678 ★★
()
Ответ на: комментарий от tz4678

арч - тема, да, но я хочу чуть более мейнстримный и стабильный дистриб на рабочем компьютере

сто лет назад еще вручную ставил и включал

а зачем тебе потребовалась перегенерация man-db раз в день?

Goganchic ★★
() автор топика
Ответ на: комментарий от Goganchic

чтобы когда ты whatis вызываешь не ждать пока мановские файлы будут декодированы (они хранятся в формате gz) и распарсены, что бы в памяти построить какую-то структуру для удобной работы с ней.

Пример:

➜ zcat /usr/share/man/de/man1/apropos.1.gz
.\" Man page for apropos
.\"
.\" Copyright (C), 1994, 1995, Graeme W. Wilford. (Wilf.)
.\"
.\" You may distribute under the terms of the GNU General Public
.\" License as specified in the file COPYING that comes with the
.\" man-db distribution.
.\"
.\" Sat Oct 29 13:09:31 GMT 1994  Wilf. (G.Wilford@ee.surrey.ac.uk)
.\"
.pc ""
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH APROPOS 1 2021-02-08 2.9.4 "Dienstprogramme für Handbuchseiten"
.SH BEZEICHNUNG
apropos \- Suche in Handbuchseiten und deren Kurzbeschreibungen
.SH ÜBERSICHT
\fBapropos\fP [\|\fB\-dalv?V\fP\|] [\|\fB\-e\fP\||\|\fB\-w\fP\||\|\fB\-r\fP\|] [\|\fB\-s\fP
\fIListe\fP\|] [\|\fB\-m\fP \fISystem\fP\|[\|,.\|.\|.\|]\|] [\|\fB\-M\fP \fIPfad\fP\|]
[\|\fB\-L\fP \fILocale\fP\|] [\|\fB\-C\fP \fIDatei\fP\|] \fISchlüsselwort\fP \&.\|.\|.
.SH BESCHREIBUNG
Jede Handbuchseite enthält eine kurze Beschreibung. \fBapropos\fP durchsucht
diese Beschreibungen nach dem Vorkommen von \fISchlüsselwort\fP.

Das \fISchlüsselwort\fP ist gewöhnlich ein regulärer Ausdruck und hat den
gleichen Effekt wie (\fB\-r\fP). Es kann außerdem nach einer bestimmten
Zeichenkette (\fB\-e\fP) oder nach Zeichenketten mit Platzhaltern (Wildcards,
\fB\-w\fP) gesucht werden. Bei Nutzung dieser Optionen kann es erforderlich
sein, für das \fISchlüsselwort\fP und Sonderzeichen eine Verarbeitung durch die
Shell zu vermeiden. Für \fISchlüsselwörter\fP werden dafür Anführungszeichen
und für Sonderzeichen Escape\-Sequenzen (\e) verwendet.

Как видим эти файлы тоже имеют свой формат.

tz4678 ★★
()
Ответ на: комментарий от tz4678

Подожди, но разве эта операция не выполняется при установке/удалении пакетов каким-нибудь /var/lib/dpkg/info/man-db.postinst? Т.е. я не против построения индекса, я не понимаю зачем это делать каждый день даже если пакеты не устаравливались и не удалялись. Окей, ты говоришь, что man-страницы могут поставиться еще и из snap, но почему бы не сделать для snap такой же хук, как и для dpkg? Или я чего-то не понимаю?

Goganchic ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.