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.
Verificar também aliases e comandos embutidos: type -a / command -v
which cd no Ubuntu e não apareceu nada. Mas o cd sempre funciona...cd é embutido no próprio shell (bash). No Ubuntu e no Debian, o which só procura arquivos no PATH, então não enxerga comandos embutidos nem aliases -- ele não exibe nada e retorna o código de saída 1. Para esses casos, use type -a.No Fedora e em sistemas da família RHEL o comportamento é diferente. O pacote bash instala scripts substitutos como /usr/bin/cd para os comandos embutidos, então which cd exibe esse caminho, e em shells interativos o /etc/profile.d/which2.sh faz o which mostrar também aliases e funções do shell. Em qualquer sistema, o type -a é a forma confiável de ver o que realmente é executado. (Fonte: Fedora bash.spec, Fedora which2.sh, CentOS Stream 9 bash.spec / which2.sh, consultado em 2026-09-25)
type -a cd type -a ls
cd is a shell builtin ls is aliased to `ls --color=auto' ls is /usr/bin/ls ls is /bin/ls
O type -a lista todas as correspondências: aliases, comandos embutidos do shell e executáveis no PATH. A primeira linha é o que realmente é executado. (/usr/bin/ls e /bin/ls aparecem juntos em sistemas onde /bin é um link para /usr/bin.)
Dentro de um script de shell, use command -v para verificar se um comando está disponível. Ele é definido pelo POSIX.
command -v git command -v cd
/usr/bin/git cd
Quando não há correspondência, ele não exibe nada e retorna o código de saída 1, então pode ser usado em uma condição: if command -v git >/dev/null 2>&1; then ... fi.
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 o pacote plocate (sudo apt install plocate / sudo dnf install plocate). As diferenças entre distribuições estão em "Perguntas Frequentes e Armadilhas".
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 |
| Descobrir o que um nome realmente é (alias, embutido) | type -a |
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
Nas principais distribuições atuais, o locate vem do pacote plocate. O plocate é uma reimplementação compatível do antigo mlocate, então locate e updatedb funcionam da mesma forma.
# Ubuntu 22.04 ou posterior / Debian 12 ou posterior sudo apt install plocate # Fedora 36 ou posterior / Rocky Linux 10, AlmaLinux 10 etc. sudo dnf install plocate
Em distribuições mais antigas, use o pacote mlocate.
# Ubuntu 20.04 / Debian 11 etc. sudo apt install mlocate # Rocky Linux 9 / AlmaLinux 9 etc. sudo dnf install mlocate
| Distribuição | Pacote que fornece o locate |
|---|---|
| Ubuntu 20.04 / Debian 11 | mlocate (o plocate também está disponível no Debian 11) |
| Ubuntu 22.04 / Debian 12 | plocate (mlocate é um pacote fictício de transição que instala o plocate) |
| Ubuntu 24.04 ou posterior / Debian 13 | plocate (não há pacote mlocate) |
| Fedora 36 ou posterior | plocate (substitui o mlocate; os dois não podem ser instalados juntos) |
| Rocky Linux 9 / AlmaLinux 9 | mlocate |
| Rocky Linux 10 / AlmaLinux 10 | plocate |
(Fonte: Ubuntu Packages Search: mlocate / plocate, Launchpad: mlocate no Ubuntu Focal, busca de pacotes do Debian: mlocate / plocate, Fedora Changes/Plocate as the default locate implementation, repositórios BaseOS: Rocky Linux 9 BaseOS / 10 BaseOS, AlmaLinux 9 BaseOS / 10 BaseOS, consultado em 2026-09-25)