Linux which, whereis, locate: 3 comandos para achar a localização (caminho) de um arquivo

Às vezes você precisa editar o httpd.conf mas não sabe onde o arquivo está, ou um comando com o mesmo nome existe em dois lugares e não está claro qual roda. O comando which do Linux acha o arquivo que realmente roda, o comando whereis acha o executável mais as pastas de configuração e os manuais, e o comando locate acha todo caminho que contém o nome. Este post compara os três numa tabela e deixa você testá-los num servidor virtual no navegador.
No AlmaLinux 9.8, o which vem no pacote which 2.21 e o whereis no util-linux 2.37.4, então os dois funcionam de cara, enquanto o locate precisa do pacote mlocate 0.26 instalado à parte.
✅ which vs whereis vs locate
Os três comandos procuram em lugares diferentes. which e whereis vasculham pastas fixas na hora, enquanto o locate procura nomes numa lista de arquivos (DB) montada antes.
| Comando | O que encontra | Onde procura | Arquivos novos |
|---|---|---|---|
| which | O único arquivo de comando que roda, mais aliases | Pastas listadas no PATH | Encontra na hora |
| whereis | Executável · pastas de configuração · manuais | Pastas fixas como /usr/bin · /etc · /usr/share/man | Encontra na hora |
| locate | Todo arquivo e pasta que contém o nome | Uma DB montada antes (/var/lib/mlocate/mlocate.db) | Encontra depois do updatedb |
Procure o mesmo httpd com which e whereis e a diferença aparece na hora.
~]# which httpd
/usr/sbin/httpd
~]# whereis httpd
httpd: /usr/sbin/httpd /usr/lib64/httpd /etc/httpd /usr/share/httpd /usr/share/man/man8/httpd.8.gzO locate mostra todo caminho que bate mesmo com parte do nome, então digitar [locate httpd.conf] traz também o manual (httpd.conf.5.gz) e eventuais cópias de backup, não só o arquivo de configuração.
No servidor virtual abaixo, escolha which, whereis ou locate à esquerda para trocar os chips; clicar num chip digita aquele comando. Você também pode digitar pelo teclado.
Para achar arquivos por tamanho ou data de modificação em vez de nome, use o comando find; para ver o caminho da pasta em que você está, use o comando pwd.
✅ Comando which do Linux
O which vasculha as pastas do PATH a partir da primeira, uma a uma, e mostra o primeiro executável que encontra. Esse é o arquivo que realmente roda quando você digita o comando.
No AlmaLinux, o bash passa a lista de aliases para o which, então para um comando com alias você recebe o alias e o arquivo real. Se não estiver em lugar nenhum do PATH, aparece [no command in (PATH)].
~]# which ll
alias ll='ls -l --color=auto'
/usr/bin/ls
~]# which htop
/usr/bin/which: no htop in (/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)Na prática, -a é a única opção. Quando o mesmo nome existe em duas pastas do PATH, ele mostra as duas, e a de cima é a que realmente roda.
~]# which ping
/usr/sbin/ping
~]# which -a ping
/usr/sbin/ping
/usr/bin/pingNo AlmaLinux 9.8, /usr/sbin/ping é um link que aponta para /usr/bin/ping, então o resultado é o mesmo. Um programa que você instalou em /usr/local/bin roda antes do que está em /usr/bin por causa da ordem do PATH.
O [which cd] mostra /usr/bin/cd, mas quando você digita cd no shell, roda o comando interno do shell, não esse arquivo. Confira se um comando é interno com [type cd], que mostra [cd is a shell builtin].
✅ Comando whereis do Linux
O whereis usa o nome do comando para achar o executável e os manuais juntos. Ele ignora o PATH e vasculha pastas fixas como /usr/bin · /usr/sbin · /usr/lib64 · /etc · /usr/share, então até uma pasta de configuração com o mesmo nome (/etc/httpd) aparece.
| Opção | Descrição | |
|---|---|---|
| -b | Só binários. Para o httpd: /usr/sbin/httpd e /usr/lib64/httpd · /etc/httpd · /usr/share/httpd | |
| -m | Só manuais (/usr/share/man · /usr/share/info) | |
| -s | Só fontes. Numa instalação padrão do AlmaLinux 9.8, aparece só o nome, como [httpd:] | |
| -l | Lista de pastas que o whereis vasculha |
~]# whereis -b httpd
httpd: /usr/sbin/httpd /usr/lib64/httpd /etc/httpd /usr/share/httpd
~]# whereis -m httpd
httpd: /usr/share/man/man8/httpd.8.gz
~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1ossl.gz /usr/share/man/man1/passwd.1.gzSe nada for encontrado, aparece só o nome, como [htop:]. O which devolve código de saída 1 quando não acha nada e o whereis devolve 0, então use o which para conferir num script se algo está instalado.
✅ Comando locate do Linux
O locate não vasculha o disco; ele procura nomes numa DB montada antes. Por isso é rápido, mas não acha arquivos criados depois que a DB foi montada.
~]# dnf -y install mlocate
~]# updatedbSe você rodar logo depois de instalar, ainda não há DB e aparece [locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory]; rodar o updatedb uma vez a cria. Depois disso, o mlocate-updatedb.timer remonta a DB uma vez por dia.
Um arquivo novo só aparece depois do updatedb, e um arquivo apagado continua aparecendo até lá. Para ver só os arquivos que existem agora, adicione -e.
~]# touch report.txt
~]# locate report.txt
~]# updatedb
~]# locate report.txt
/root/work/report.txt
~]# rm -f report.txt
~]# locate report.txt
/root/work/report.txt
~]# locate -e report.txtO PRUNEPATHS do /etc/updatedb.conf inclui /tmp · /var/tmp · /mnt · /media, então arquivos dessas pastas não aparecem nem depois do updatedb.
🔲 Opções do comando locate
| Opção | Descrição | |
|---|---|---|
| -i | Ignorar maiúsculas e minúsculas | |
| -c | Só o número de ocorrências em vez dos caminhos | |
| -l= -n | Coloque um número depois para limitar os resultados a essa quantidade. -l 3 | |
| -b | Comparar só o nome do arquivo no fim do caminho | |
| -e | Deixar de fora arquivos que estão na DB mas não existem mais | |
| -S | Informações da DB (pastas · arquivos · tamanho) | |
| -r | Buscar com expressão regular. locate -r "httpd.conf$" |
ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.