Não tenho certeza se você está perguntando sobre whereis
ou which
, então vou abordar ambos.
whereis
whereis
localiza os arquivos binários, de origem e manuais para o nomes de comandos especificados. (...) [It] tenta localizar o desejado programa nos locais padrão do Linux e nos locais especificados por$PATH
e$MANPATH
.
(…)
A maneira mais fácil de saber quais caminhos estão em uso é adicionar a opção de listagem-l
.
Origem:man whereis
Execute whereis -l
para obter uma lista de caminhos que o programa usa. Por padrão, ele pesquisa arquivos binários, de origem e manuais. Você pode alterar esse comportamento com as opções -b
, -s
e -m
, por exemplo,
$ whereis -m apt
apt: /usr/share/man/man8/apt.8.gz
$ whereis -b apt
apt: /usr/bin/apt /usr/lib/apt /etc/apt
Ao contrário de which
(veja abaixo) whereis
não testa se o arquivo é executável ao pesquisar binários, é por isso que touch /bin/apt
altera sua saída.
which
which
retorna os nomes de caminho (…) pesquisando o PATH para arquivos executáveis que correspondem aos nomes dos argumentos.
Source:man which
O que which
faz
Eu aceito which
essencialmente o mesmo que este comando find
:
IFS=':'; find $PATH -mindepth 1 -maxdepth 1 -type f -executable -name "SEARCH"
Ele procura cada diretório presente em PATH
por arquivos executáveis chamados SEARCH
, por exemplo. para apt
:
$ which apt
/usr/bin/apt
$ IFS=':'; find $PATH -mindepth 1 -maxdepth 1 -type f -executable -name "apt"
/usr/bin/apt
Por que sua tentativa falhou
Por padrão, which
apenas imprime a correspondência primeiro dos diretórios PATH
, ou seja, o arquivo executado. Com touch /bin/apt
você criou um arquivo que corresponde à restrição de nome, mas esqueceu de torná-lo executável e não emitiu which
para a saída de a
ll correspondências. Vamos tentar de novo:
$ touch /bin/apt
$ chmod +x /bin/apt
$ which -a apt
/usr/bin/apt
/bin/apt
$ IFS=':'; find $PATH -mindepth 1 -maxdepth 1 -type f -executable -name "apt"
/usr/bin/apt
/bin/apt