locate, which e whereis - Três Formas de Encontrar Comandos no Linux

locate, which e whereis - Três Formas de Encontrar Comandos no Linux

O Que Você Vai Aprender

Lina: Linny-senpai, eu instalei um comando mas não tenho ideia de onde ele foi parar...
Veterano Linny: Isso acontece o tempo todo! O Linux tem três comandos especificamente para encontrar onde as coisas estão: which, whereis e locate. Cada um faz algo diferente -- vamos ver um por um.

Ao final deste artigo você será capaz de:


1. which -- "Qual executável meu shell realmente executa?"

Conclusão: which pesquisa o PATH em ordem e mostra o único executável que seu shellUm programa interativo que interpreta os comandos digitados e os executa. executa.

Lina: Quando eu usaria which?
Veterano Linny: Digamos que você tem tanto o Python 2 quanto o Python 3 instalados. Se você simplesmente digitar 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)
Lina: Por que não tem saída?
Veterano Linny: Significa que o comando não está em nenhum lugar do seu PATH -- ou não está instalado, ou o diretórioUm local que organiza arquivos. É a mesma ideia da "pasta" do Windows ou macOS. de instalação não está no PATH.

Ú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

Lina: Executei which cd no Ubuntu e não apareceu nada. Mas o cd sempre funciona...
Veterano Linny: O 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: whereis encontra o binário, página man e código-fonte de uma vez, ignorando seu PATH.

Lina: Eu consigo obter o caminho com which. O que whereis acrescenta?
Veterano Linny: 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: locate consulta um banco de dados pré-construído para encontrar qualquer arquivo por nome, muito rapidamente.

Lina: Para que serve o locate?
Veterano Linny: Não é só para comandos -- você pode encontrar qualquer arquivo por nome, muito rápido. Pense em buscar um arquivo de configuração cuja localização exata você esqueceu. 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 which para caminhos, whereis para arquivos relacionados, locate para buscar nomes.

Lina: Ok, você pode me dar uma regra simples de quando usar cada um?
Veterano Linny: Claro -- aqui vai a versão de uma linha para cada um!
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 which não retorna nada, use whereis ou locate; execute updatedb para dados atualizados.

P. which não retorna nada -- o comando está realmente instalado?

Lina: Executei which node e não obtive nada. Eu pensei que tinha instalado...
Veterano Linny: Tente 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)


Próximas Leituras

Compartilhe este artigo

Próximo passo