Команда whereis в Linux возвращает путь к неисполняемому файлу.

Вопрос или проблема

Помогите мне понять логику, пожалуйста – откуда 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.

Оцените материал
Добавить комментарий

Капча загружается...