locate, which e whereis - Três Formas de Encontrar Comandos no Linux
O Que Você Vai Aprender
which, whereis e locate. Cada um faz algo diferente -- vamos ver um por um.Ao final deste artigo você será capaz de:
- Usar
whichpara encontrar o caminhoUma sequência de texto que descreve a localização de um arquivo ou diretório. do executável de um comando - Usar
whereispara encontrar o binário, página man e código-fonte de uma vez - Usar
locatepara buscar qualquer arquivo por nome, rapidamente - Saber qual ferramenta usar em cada situação
1. which -- "Qual executável meu shell realmente executa?"
Conclusão:
whichpesquisa o PATH em ordem e mostra o único executável que seu shellUm programa interativo que interpreta os comandos digitados e os executa. executa.
which?python, qual deles roda? which diz exatamente qual arquivo seu shell encontra.Uso básico
which python3
/usr/bin/python3
which pesquisa os diretórios listados na sua variável de ambienteUm valor nomeado que o shell ou um programa pode consultar durante a execução. PATH, em ordem, e mostra a primeira correspondência encontrada.
which git
/usr/bin/git
which só pesquisa diretórios no $PATH. Execute echo $PATH para ver quais diretórios estão incluídos.
Quando um comando não é encontrado
which nonexistent-command
Sem saída (código de saída 1). Algumas distribuições mostram uma mensagem como:
which: no nonexistent-command in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin)
Útil quando múltiplas versões estão instaladas
which python which python3
/usr/bin/python /usr/bin/python3
Você pode ver de imediato qual versão cada nome aponta.
2. whereis -- "Mostre o binário, página man e código-fonte juntos"
Conclusão:
whereisencontra o binário, página man e código-fonte de uma vez, ignorando seu PATH.
which. O que whereis acrescenta?which só mostra o único executável que seu shell executaria agora. whereis mostra o binário, a página man e às vezes o código-fonte -- tudo de uma vez. E não se limita ao seu PATH atual.Uso básico
whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
/usr/bin/ls é o executável. /usr/share/man/man1/ls.1.gz é a página man compactada.
whereis python3
python3: /usr/bin/python3 /usr/lib/python3 /usr/share/man/man1/python3.1.gz
O que cada campo significa
| Campo | Conteúdo |
|---|---|
Primeiro caminho após comando: |
Binário executável |
Caminho em /usr/share/man/ |
Página man |
Caminho em /usr/lib/ |
Bibliotecas ou arquivos de suporte |
Caminho em /usr/src/ |
Código-fonte (se instalado) |
Filtrando com opções
whereis -b ls # somente binario whereis -m ls # somente pagina man whereis -s ls # somente codigo-fonte
ls: /usr/bin/ls ls: /usr/share/man/man1/ls.1.gz ls:
Diferente de which, whereis pesquisa um conjunto fixo de diretórios padrão do sistema (/bin, /usr/bin, /usr/local/bin, etc.) independentemente do seu PATH atual. Isso significa que ele pode encontrar um comando mesmo se o PATH estiver mal configurado.
3. locate -- "Buscar qualquer arquivo por nome, rapidamente"
Conclusão:
locateconsulta um banco de dados pré-construído para encontrar qualquer arquivo por nome, muito rapidamente.
locate?locate é muito mais rápido que find para isso.Uso básico
locate ssh_config
/etc/ssh/ssh_config /usr/share/doc/openssh-client/examples/ssh_config
Por que é tão rápido?
locate não escaneia o sistema de arquivos em tempo real. Ele consulta um banco de dados (índice) pré-construído, e por isso retorna resultados quase instantaneamente.
O banco de dados é tipicamente reconstruído uma vez por dia por uma tarefa agendada executando updatedb. Arquivos criados após a última atualização não aparecerão nos resultados do locate até que o banco de dados seja atualizado.
Reconstruir o banco de dados manualmente
sudo updatedb
Execute isso após criar novos arquivos, e então o locate vai encontrá-los.
Busca sem diferenciar maiúsculas/minúsculas
locate -i README
/home/user/projects/readme.md /usr/share/doc/curl/README /usr/share/doc/git/README.md
Combinar com grep para filtrar resultados
locate nginx | grep conf
/etc/nginx/nginx.conf /etc/nginx/conf.d/default.conf
Contar correspondências sem listar todos os caminhos
locate -c python
248
Se locate não estiver instalado, instale com sudo apt install mlocate (Debian/Ubuntu) ou sudo dnf install mlocate (Fedora/RHEL).
4. Escolhendo o Comando Certo
Conclusão: Use
whichpara caminhos,whereispara arquivos relacionados,locatepara buscar nomes.
| Objetivo | Comando |
|---|---|
| Encontrar o executável exato que seu shell rodaria | which |
| Ver o binário, página man e código-fonte juntos | whereis |
| Buscar qualquer arquivo por nome, rapidamente | locate |
| Buscar arquivos recém-criados (ainda não no BD) | find |
Exemplos comuns do mundo real
pythoné Python 2 ou Python 3? -->which python- Onde está a página man do git? -->
whereis git - Onde está o
nginx.conf? -->locate nginx.conf - Acabei de instalar algo e preciso encontrá-lo agora -->
sudo updatedb && locate filename
5. Perguntas Frequentes e Armadilhas
Conclusão: Quando
whichnão retorna nada, usewhereisoulocate; executeupdatedbpara dados atualizados.
P. which não retorna nada -- o comando está realmente instalado?
which node e não obtive nada. Eu pensei que tinha instalado...whereis node e locate node | grep bin primeiro. Eles fazem uma busca mais ampla. Também verifique echo $PATH -- talvez o diretório de instalação simplesmente não esteja no seu PATH.# Verificar PATH echo $PATH # Busca mais ampla whereis node # Buscar em diretorios bin comuns locate node | grep "/bin/"
P. locate retorna resultados desatualizados
Se um arquivo que você acabou de criar não aparece:
sudo updatedb locate the-file-you-want
P. comando locate não encontrado
# Debian / Ubuntu sudo apt install mlocate # Fedora / RHEL / CentOS sudo dnf install mlocate