Os dois programas têm idéias diferentes sobre onde procurar. Eles também podem ser implementados de maneiras diferentes em sistemas diferentes. No meu, whereis
é um executável binário e which
é um script de shell Bourne.
Se você quiser outras opiniões sobre onde algo está, tente estas:
type -a php
e
locate php
Da página whereis
man
:
whereis has a hard-coded path, so may not always find what you’re looking for.
Da página which
man
:
which returns the pathnames of the files which would be executed in the current environment, had its arguments been given as commands in a strictly POSIX-conformant shell. It does this by searching the PATH for executable files matching the names of the arguments.
Portanto, whereis
pesquisa um caminho codificado, which
usa a variável $ PATH, locate
usa um banco de dados do sistema de arquivos inteiro (por padrão) e type
, que é um Bash incorporado, procura no $ PATH, nos builtins, nos aliases e nas definições de funções.
Eu uso type
e locate
principalmente e só muito raramente uso os outros dois, pois eles são relativamente limitados em capacidade.
Ah, e para responder a sua pergunta, which
, porque ele pesquisa $ PATH, é mais provável que você mostre o local que será executado se você digitar o comando " php
". E type
provavelmente será ainda melhor nos casos em que você tiver apelidos ou funções com o mesmo nome, uma vez que eles são executados preferencialmente no local $ PATH. Note que tudo isso é dependente do sistema e também depende do shell que você está usando (suponho que seja Bash). No meu sistema, usando Bash, a ordem é funções, aliases, builtins e $ PATH (na ordem em que os diretórios são listados). Compare a saída desses vários comandos para:
echo $PATH