Você acabou de instalar uma ferramenta, mas já não sabe se ela está localizada em /usr/bin, ou em outro lugar. A ordem onde está Ele pode recuperar o binário, o código-fonte e as páginas de manual. No entanto, não responde à pergunta mais importante antes de qualquer intervenção: qual arquivo o seu shell realmente executará?
Para evitar modificar a instalação defeituosa, vou cruzar os dedos. onde está com comando -v E tipoEsses comandos não procuram a mesma coisa. Essa diferença torna-se útil rapidamente quando várias versões de um programa, um alias ou uma função Bash têm o mesmo nome.

O que o Whereis realmente procura
O caso de uso mais simples é fornecer o nome de um comando, sem nenhuma opção:
onde está o bash
whereis ssh
onde está o nginx
A saída pode conter vários caminhos na mesma linha. onde está Ele busca três tipos de arquivos: o binário, o código-fonte e a documentação do manual. Examina locais conhecidos do Linux e também leva em consideração… CAMINHO e de MANPATH
whereis -m bash
whereis -s bash
-bbusca por binários;-m-sprocure fontes.
Uma busca vazia no código-fonte não indica necessariamente que o programa esteja instalado incorretamente. As distribuições geralmente instalam o binário e o manual sem incluir o código-fonte. /usr/srcPara visualizar os arquivos efetivamente inspecionados em sua máquina, utilize:
onde está -l
Lá onde está a página de manual Este comando detalha esses caminhos e as opções disponíveis. Ele não realiza uma busca recursiva de arquivos. Para encontrar um arquivo específico em uma árvore de diretórios, consulte o guia sobre [link para o guia]. encontrar no Linux.
Verifique o comando realmente executado pelo shell.
Se o seu objetivo é saber o que aparecerá quando você digitar python3, Ou montool comando -v :
comando -v python3
comando -v nginx
comando -v minhaferramenta
Este comando segue a resolução do shell. Dependendo do nome fornecido, ele pode exibir o caminho para um executável, um comando interno, uma função ou a definição de um alias. Seu código de retorno também permite verificar corretamente a presença de um comando em um script:
se o comando -v mytool >/dev/null 2>&1; então
eco "minha ferramenta está disponível"
outro
fi
onde está
tipo Vai além, explicando como o Bash interpreta o nome:
tipo de CD
tipo ls
digite -a ls
tipo -P ls
tipo de CDindica queCDé um comando interno do shell;tipo lsMostra a primeira definição utilizada;digite -a lsExibe aliases, funções, comandos internos e executáveis com esse nome;tipo -P lsforça a busca por um arquivo executável emCAMINHO.
Isso descreve esses resultados com precisão. Se você estiver usando Zsh, Fish ou outro shell, consulte a documentação específica: a resolução de aliases e funções não é a mesma em todos os casos.
Entendendo por que “qual” não conta toda a história.
qual continua sendo comum em tutoriais:
qual python3
qual nginx
Normalmente, ele procura um executável em CAMINHOO problema é que, frequentemente, trata-se de um programa externo que desconhece o estado exato do shell atual. Dependendo da implementação e da distribuição, ele pode ignorar um alias, uma função ou um comando interno. Para um teste em um script de shell, comando -v é mais adequado. Para entender uma colisão de nomes em uma sessão interativa, digite -a fornece mais informações.
Um exemplo simples ilustra a diferença:
alias ll='ls -lah'
onde está tudo
comando -v ll
tipo II
onde está não foi possível encontrar um arquivo chamado tudo, porque o alias não é um binário. comando -v E tipo No entanto, eles veem a conhecida definição de Bash. O artigo sobre o alias no Linux Explica como verificar e contornar esses problemas sem excluir sua configuração.
Identificar múltiplas instalações do mesmo programa
As colisões costumam ocorrer após a instalação manual em /usr/local/bin, a adição de $HOME/.local/bin ou a implantação de uma versão em /optarComece por comparar os resultados:
onde está python3
digite -a python3
comando -v python3
digite -P python3
readlink -f "$(type -P python3)"
onde está Pode exibir vários arquivos binários e manuais. digite -a Mostra as versões que o Bash encontra na ordem de resolução. comando -v confirma a primeira escolha, então link de leitura -f Resolve qualquer possível link simbólico. Por fim, verifique o proprietário do pacote do arquivo:
dpkg -S "$(type -P python3)"
rpm -qf "$(type -P python3)"
pacman -Qo "$(type -P python3)"
Execute apenas o comando apropriado para sua distribuição. Se nenhum pacote contiver o arquivo, ele pode ter sido instalado manualmente. Antes de substituí-lo, verifique a versão, o destino real e os serviços que o utilizam. O tutorial sobre Arquivos tar.gz no Linux mostra por que uma cópia em /usr/local/bin deve permanecer rastreável.
O Bash também armazena em cache certos caminhos que já foram resolvidos. Após mover ou substituir um executável, limpe esse cache e verifique novamente:
hash -l
hash -r
comando -v python3
digite -a python3
em vez de excluir um binário aleatório. O guia sobre PATH no Linux Detalha o teste temporário e a modificação permanente.
Limitar o uso do `whereis` a uma pasta específica.
Para controlar o software instalado em /optarVocê pode substituir os caminhos de pesquisa para binários ou manuais. A opção -f marca o fim da lista de pastas e o início dos nomes a serem pesquisados:
whereis -b -B /opt/mytool/bin /usr/local/bin -f mytool
whereis -m -M /opt/mytool/share/man -f mytool
Essa busca direcionada permite verificar o conteúdo de uma instalação sem precisar escanear o disco inteiro. Ela também não altera nada. CAMINHOnem o comando executado pelo shell. Portanto, lembre-se da seguinte ordem antes de remover ou substituir um programa:
- usar
comando -vpara descobrir a definição ativa; - lançar
digite -apara detectar colisões; - resolver os links com
link de leitura -f; - Verifique o pacote proprietário do arquivo;
- usar
onde estápara encontrar os arquivos binários e a documentação associada.
Com essas verificações, você sabe qual arquivo será executado, de onde ele vem e onde encontrar o manual. Assim, você pode corrigir uma instalação ou um… CAMINHO sem apagar acidentalmente a versão correta.