который показывает мою локальную установку php
и где php показывает глобальную установку php (общий env)
У этих двух программ разные представления о том, где искать. Они также могут быть реализованы по-разному в разных системах. По моему, whereis
это двоичный исполняемый файл и which
это сценарий оболочки Борна.
Если вам нужны другие мнения о том, где что-то находится, попробуйте следующее:
type -a php
и
locate php
Из whereis
man
страница:
whereis имеет жестко запрограммированный путь, поэтому не всегда может найти то, что вы ищете.
Из which
man
страница:
который возвращает пути к файлам, которые были бы выполнены в текущей среде, если бы его аргументы были заданы как команды в строго совместимой с POSIX оболочке. Это делается путем поиска в PATH исполняемых файлов, соответствующих именам аргументов.
Так whereis
ищет жестко запрограммированный путь, which
использует переменную $ PATH, locate
использует базу данных (по умолчанию) всей файловой системы, и type
, который является встроенной функцией Bash, просматривает $ PATH, встроенные функции, псевдонимы и определения функций.
я использую type
и locate
в первую очередь и очень редко используют два других, поскольку их возможности относительно ограничены.
Ох, и чтобы ответить на ваш вопрос, which
, поскольку он выполняет поиск $ PATH, с большей вероятностью покажет вам местоположение, которое действительно будет запускаться, если вы введете команду "php
". И type
вероятно, будет даже лучше в тех случаях, когда у вас есть псевдонимы или функции с одним и тем же именем, поскольку они выполняются предпочтительно над местоположением $ PATH. Обратите внимание, что все это зависит от системы, а также от оболочки, которую вы используете (я предполагаю, что это Bash). В моей системе, использующей Bash, порядок следующий: функции, псевдонимы, встроенные команды, затем $ PATH (в том порядке, в котором там перечислены каталоги). Сравните вывод этих различных команд с:
echo $PATH