Вопрос или проблема
Помогите мне понять логику, пожалуйста – откуда man:
OPTIONS
-b
Искать бинарные файлы.
Но когда я использую это, он возвращает путь к директории:
kl@debian:~$ whereis -b postfix
postfix: /usr/sbin/postfix /usr/lib/postfix /etc/postfix
kl@debian:~$ whereis --version
whereis из util-linux 2.38.1
kl@debian:~$ file /usr/lib/postfix
/usr/lib/postfix: директория
kl@debian:~$ file /etc/postfix
/etc/postfix: директория
kl@debian:~$
whereis
не очень сложен: он сопоставляет имена файлов в заданном наборе директорий. Для «бинарников» это включает /etc
и /usr/lib
, а также /usr/sbin
(и другие подобные директории), поэтому поиск postfix
совпадает с директориями в /etc
и /usr/lib
. Вы можете выполнить whereis -l
, чтобы увидеть список директорий, которые он проверяет.
Если вы хотите подтвердить, что какой-то файл является исполняемым, скриптом или файлом и т.д., вы можете использовать вторую команду file
для результата, чтобы узнать, какого он типа, например:
whereis man
man: /usr/bin/man /usr/local/man /usr/share/man /usr/share/man/man7/man.7.gz /usr/share/man/man1/man.1.gz
file /usr/bin/man
/usr/bin/man: ELF 64-битный LSB pie исполняемый файл, x86-64, версия 1 (SYSV), динамически связанный, интерпретатор /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=70bd707aa6a7ea95d80aaa2933e2d49f1cc56c5f, для GNU/Linux 3.2.0, с символами
В этом случае он показывает, что /usr/bin/man
является исполняемым.
Вы также можете использовать команду type
, чтобы узнать тип команды или найти расположение man
как исполняемого файла:
type -a man
Ответ или решение
Команда whereis
в Linux предназначена для поиска местоположения исполняемых файлов, исходных кодов и страниц руководства для указанных команд. Однако, несмотря на то что в документации упоминается опция -b
, которая предполагает поиск только бинарных файлов, она не ограничивается только исполняемыми файлами.
Ваша команда:
whereis -b postfix
возвращает следующие пути:
postfix: /usr/sbin/postfix /usr/lib/postfix /etc/postfix
Как видно, среди найденных путей есть директории (/usr/lib/postfix
и /etc/postfix
), а не только именованный исполняемый файл. Это связано с тем, что whereis
ищет файлы по определенному набору директорий, который не строго ограничивается только бинарными файлами. Например, к этому набору относятся директории /etc
, /usr/lib
и другие.
Функция whereis
не является очень изощренной и просто ищет совпадения имен файлов в указанных каталогах, не проверяя, являются ли эти файлы действительно исполняемыми или нет. Поэтому в вашем случае команда возвращает пути к директориям, даже если использована опция -b
.
Чтобы проверить, является ли конкретный файл исполняемым, можно использовать команду file
. Например:
file /usr/sbin/postfix
Эта команда даст более детальную информацию о выбранном файле, включая его тип (исполнимый или обычный).
Также вы можете использовать команду type
, чтобы определить, является ли команда исполняемой, и узнать ее местоположение:
type -a postfix
Эта команда выведет информацию о том, что postfix
является командой, и в каких директориях она может быть найдена.
В резюме, чтобы лучше понять результат команды whereis -b
, следует помнить, что она ищет в определенных директориях и возвращает все соответствующие пути, независимо от того, являются ли это файлы или директории. Для более детального анализа конкретных файлов следует использовать другие утилиты, такие как file
.