Вы можете писать в файл только после того, как вы его открыли. Когда вы открываете его, выполняются проверки разрешений. Теоретически можно утверждать, что для запроса на чтение -дескриптора файла записи состояние квоты может быть проверено, но поскольку вам нужен доступ на запись для усечения файла, а квота никогда не должна препятствовать освобождению пространства, я предполагаю, что это не так..
Таким образом, согласно порядку open()
и write()
проверка разрешений всегда должна быть на первом месте.
Далее предполагается, что ваши man
и друзья произошли от man -db . Учитывая, что Поп! _ОС основана на Ubuntu и что в Ubuntu 20.04 по умолчанию установлен man -db, это должно быть правдой.
При работе в режиме «что есть» или в режиме «по поводу»(man -f
и man -k
соответственно ), man
фактически вызывает двоичный файл whatis
и делегирует ему поиск. С другой стороны, при работе в режиме по умолчанию (, например.man page
)или в режиме «где»(man -w page
)поиск выполняется самим двоичным файлом man
. Подпрограммы поиска man
и whatis
реализованы независимо друг от друга.
Две основные причины могут привести к тому, что whatis
перечислит меньше справочных страниц, чемman -a
:
неполная конфигурация :, если путь поиска, настроенный в /etc/manpath.config
(, используется в Debian и его производных; /etc/man_db.conf
в некоторых других дистрибутивах )включает все каталоги, содержащие справочные страницы в вашей системе, но для некоторых из них MANDB_MAP
в этом файле нет,тогда индексная база данных не инициализируется (и не ищется, если она существует )для них; man -a
все равно найдет содержащиеся в них страницы, потому что он ищет непосредственно в каталогах, перечисленных в пути поиска, а whatis
нет, потому что он ищет только в базе данных индекса;
даже если все каталоги, содержащие справочные страницы, имеют правильные записи MANDATORY_MANPATH
и MANDB_MAP
в /etc/manpath.config
, whatis
может по-прежнему содержать меньше результатов, чем man -a
, потому что он просто пропускает дублировать имя -комбинации разделов из его вывода . В вашем случае printf(1)
находится как в /usr/share/man
, так и в /usr/share/fish/man
, и указан только тот из каталога, который идет первым в пути поиска.
Вы можете использовать команду manpath
, чтобы отобразить путь поиска, который будут использовать man
и друзья, и убедиться, что он включает все соответствующие каталоги. По умолчанию он строится на основе записей MANDATORY_MANPATH
в /etc/manpath.config
.
man
& друзья также могут быть вызваны с явно определенным путем поиска, установив MANPATH
для изменения результатов поиска. Например, если вы находитесь в случае (2 ),
MANPATH=/usr/share/fish/man:/usr/share/man whatis printf
скорее всего напечатает однострочное описание -для /usr/share/fish/man/man1/printf.1
, а не одно для /usr/share/man/man1/printf.1.gz
.
Вы также можете посмотреть, что происходит под капотом, используя опцию --debug
. Скорее всего, это покажет, что ваши программы используют путь поиска, в котором /usr/share/man
указан до /usr/share/fish/man
, и что все три файла найдены, но строка для второго найденного printf
в секции 1
просто не печатаетсяwhatis
(или man -f
).
Наконец, для решения случая (2 )вы можете определить вспомогательную функцию, которая обертывает man
, чтобы она также отображала повторяющиеся комбинации имен -разделов:
slowman () (
IFS=:
for path in ${MANPATH-$(manpath)}
do
printf '%s\n' "Searching ${path}:" 1>&2
MANPATH="$path" man "$@"
done
)
мужчина мужчина:
-w, --where, --path, --location
Don't actually display the manual page, but do print the loca‐
tion of the source nroff file that would be formatted. If the
-a option is also used, then print the locations of all source
files that match the search criteria.