Tutorial de Linux / Encontrar arquivos e comandos: find, locate, which e whereis
Use find para percorrer uma árvore de diretórios e procurar entradas por condições; use locate para consultar rapidamente um índice de nomes preparado antes. Para localizar arquivos associados a comandos, existem which e whereis, mas, no Bash, type e command -v são mais diretos para saber como a sessão atual interpreta um nome. Escolha a ferramenta conforme esteja procurando um arquivo, um nome no índice ou um comando do shell.
Pesquisar caminhos é diferente de procurar palavras dentro de arquivos. Para selecionar e contar linhas do conteúdo, consulte a aula de pesquisa e processamento de texto, em inglês.
Percorrer a árvore atual com find
find percorre a árvore a partir do diretório indicado e avalia condições, como nome, tipo e tamanho. Esta prática usa Bash e GNU find em um diretório onde o usuário comum possa gravar. Se ~/linux-course-11-practice já existir, escolha outro nome e substitua-o nas duas primeiras linhas.
Execute as linhas abaixo uma por vez. Se mkdir ou cd falhar, pare; não continue em uma pasta existente ou em outro local. Após cd, confirme com pwd que está na pasta recém-criada antes de criar drafts, archive e os arquivos vazios. Os nomes indicados devem estar livres.
mkdir ~/linux-course-11-practice
cd ~/linux-course-11-practice
mkdir drafts archive
touch drafts/notes.txt drafts/todo.md archive/old.txt
Confira novamente a localização e procure arquivos regulares cujo nome termine em .txt. As aspas em '*.txt' fazem o Bash entregar o padrão ao find, em vez de expandi-lo com nomes do diretório atual. A condição -name compara o nome final da entrada, sem os diretórios que o precedem.
pwd
find . -maxdepth 2 -type f -name '*.txt'
As duas entradas abaixo devem aparecer, embora a ordem possa variar conforme o sistema de arquivos:
./drafts/notes.txt
./archive/old.txt
O ponto . é o início da pesquisa. Com -maxdepth 2, o GNU find examina até dois níveis abaixo desse início: drafts está no nível 1 e drafts/notes.txt, no nível 2. Um arquivo em drafts/subpasta/ ficaria no nível 3 e seria excluído desta busca. -type f seleciona arquivos regulares; -name diferencia maiúsculas de minúsculas. Para ignorar essa diferença no nome, use -iname.
A busca percorre o estado acessível durante a execução; não é uma fotografia atômica de todos os arquivos. Uma pasta sem permissão pode produzir um erro e deixar parte da árvore sem ser examinada. Encontrar um caminho também não comprova que você pode ler o conteúdo do arquivo. Se houver erro, examine a mensagem e o estado de saída antes de concluir que a busca foi completa. Mais opções estão no guia do comando find.
Consultar o índice de nomes com locate
locate consulta um banco de dados de nomes preparado anteriormente, em vez de percorrer a árvore a cada pesquisa. Isso costuma ser rápido para procurar nomes em uma área ampla, mas arquivos criados depois da última atualização podem não aparecer, e nomes removidos ou alterados podem continuar no índice.
locate hosts
O resultado pode incluir /etc/hosts e outros caminhos que contenham hosts; não é uma busca pelo conteúdo dos arquivos. A saída depende do banco, das exclusões e da implementação instalada. Alguns programas, como plocate, também verificam a visibilidade dos diretórios para o usuário. Mesmo assim, um nome retornado não é garantia de acesso ao conteúdo.
Se o comando ou o banco estiver ausente, confira o pacote e a rotina de atualização da distribuição. O nome updatedb pode pertencer ao GNU Findutils, ao plocate ou a outra implementação; seus formatos de banco e suas opções não são intercambiáveis em todos os casos. Para confirmar que um resultado existe agora, consulte o caminho com ls ou restrinja uma busca com find. Não interprete uma ausência no índice como prova de que o arquivo não existe.
No Ubuntu 26.04 LTS, o pacote plocate consta no repositório Universe. Se estiver disponível nos repositórios configurados e você tiver autorização administrativa, sudo apt install plocate instala o programa; após uma instalação bem-sucedida, sudo updatedb prepara o índice padrão. Se a instalação falhar, resolva o problema antes de continuar. Não execute essa indexação como parte de uma simples pesquisa sem considerar seu alcance.
No Rocky Linux 9, consulte primeiro os repositórios habilitados com dnf provides '*/locate' e instale o pacote realmente indicado, conforme o comando provides do DNF. Não presuma que o mesmo nome de pacote se aplica a toda distribuição. Faça a instalação e a indexação na máquina virtual de prática: updatedb pode percorrer uma área ampla e produzir carga de disco. Exclusões, permissões e horário da última atualização afetam o que será pesquisável.
Distinguir o executável da resolução pelo shell
which normalmente procura executáveis nos diretórios de PATH, a lista de caminhos usada na busca de comandos. O exemplo pode retornar /usr/bin/ls ou /bin/ls, conforme o sistema:
which ls
As implementações de which variam. Algumas têm mecanismos para receber definições de aliases e funções, mas não se deve presumir que um programa externo conheça automaticamente toda a configuração da sessão atual. Encontrar um executável no PATH não prova que ele será usado quando você digitar um nome que também tenha um alias ou uma função.
No Bash, consulte a interpretação do nome na própria sessão:
type -a ls
command -v ls
type -a pode listar aliases, funções, comandos internos e executáveis encontrados com esse nome. command -v informa como o nome é resolvido e retorna um estado diferente de zero se ele não for encontrado. O formato da resposta depende do tipo de comando e da configuração do shell; não trate toda saída como se fosse um caminho de arquivo.
Faça a verificação na sessão em que pretende executar o comando. Um Bash iniciado sem seus arquivos de configuração pode ter aliases e funções diferentes, e a expansão de aliases costuma estar desabilitada em shells não interativos. Para os detalhes dessas consultas, veja os guias de type e command.
Localizar binários e manuais com whereis
whereis procura arquivos associados ao nome de um comando, como binários, fontes e páginas de manual. A implementação do util-linux usa locais predefinidos e caminhos de PATH e MANPATH, entre outras opções. Ela não percorre arbitrariamente todo o sistema de arquivos como uma busca iniciada na raiz com find.
whereis ls
A saída pode mostrar um caminho de binário e outro de manual. Isso depende do que está instalado e dos locais pesquisados: não espere fontes ou manuais que não existem no sistema. Um resultado de whereis também não mostra, por si só, qual alias ou função o Bash usará. Se o programa não estiver instalado, consulte sua distribuição ou use a ferramenta adequada à pergunta, sem substituir uma consulta por outra de significado diferente.
| Pergunta | Comece com | Condição importante |
|---|---|---|
| Que arquivos atuais correspondem às condições? | find |
Escopo e permissões afetam o tempo e a cobertura |
| Que nomes estão registrados no índice? | locate |
O índice pode estar desatualizado |
| Onde está um executável do PATH? | which |
É diferente da interpretação completa pelo shell |
| Como esta sessão interpreta um nome? | type -a, command -v |
Depende do estado do shell atual |
| Onde estão binários ou manuais do comando? | whereis |
Depende da instalação e dos locais pesquisados |
Encontrar um arquivo chamado ls com find não prova que ele será executado quando você digitar ls. Primeiro defina se precisa de um caminho existente, de um nome indexado ou da interpretação de um comando; para esclarecer a última situação no Bash, confira type -a ls na sessão atual.
Documentação oficial
O manual do GNU Findutils descreve find e a implementação GNU de locate. Para a implementação comum em distribuições atuais, consulte também o manual de plocate. As consultas no shell são descritas na documentação GNU de type e outros comandos internos do Bash e de command. Confira ainda os manuais de GNU which e whereis do util-linux, ou man whereis no sistema instalado, se a página estiver disponível.




