Linux / Comando whereis: localizar binários, fontes e manuais
O comando whereis procura arquivos relacionados a um programa, como binários, fontes e páginas de manual, em um conjunto de diretórios de busca. Ele serve para localizar esses diferentes tipos de arquivo pelo nome; para saber o que o shell executará, consulte type ou command -v.
As opções descritas seguem o whereis do util-linux, conforme seu manual e a fonte oficial do manual. A prática usa Bash e utilitários GNU para preparar uma pasta exclusiva com um script, uma cópia, um arquivo de fonte C e uma página de manual fictícia. Não é necessário instalar esses arquivos em pastas do sistema.
O util-linux whereis combina locais conhecidos da instalação com informações de PATH e MANPATH, conforme o tipo de busca. Ele não percorre recursivamente todo o disco. Uma árvore personalizada pode ficar fora da busca padrão; as opções -B, -M e -S permitem fornecer diretórios para cada categoria, e -l ajuda a conferir os locais usados.
Sintaxe básica
whereis [opções] [-BMS diretório... -f] nome...
opções e nome são marcadores. Confira whereis --version, whereis --help e man whereis no Linux de destino, pois ferramentas de mesmo nome em outros sistemas podem se comportar de outra forma. Nomes, tipos e diretórios têm papéis diferentes: -b, -m e -s selecionam categorias; -B, -M e -S delimitam onde procurá-las. -f encerra as listas de diretórios e inicia os nomes a consultar.
Uso básico do whereis
Preparar arquivos e procurar categorias relacionadas
Execute a preparação no mesmo terminal e pare se houver erro. O script demo_tool apenas imprime demonstracao; demo_tool.c é uma fonte mínima, e demo_tool.1 é um arquivo de manual simples. A cópia em extra será usada depois para mostrar uma segunda localização de binário. A consulta final limita as três categorias às pastas criadas: deve associar demo_tool ao script em bin, à fonte em src e ao manual em man1. A cópia de extra fica fora dessa primeira consulta. A busca não compila a fonte nem abre o manual.
whereis_demo=$(mktemp -d -p "$PWD" 'whereis-demo.XXXXXXXX') &&
mkdir -- "$whereis_demo/bin" "$whereis_demo/extra" \
"$whereis_demo/src" "$whereis_demo/man1" &&
printf '%s\n' '#!/bin/sh' 'printf "demonstracao\n"' > "$whereis_demo/bin/demo_tool" &&
chmod +x -- "$whereis_demo/bin/demo_tool" &&
cp -- "$whereis_demo/bin/demo_tool" "$whereis_demo/extra/demo_tool" &&
printf '%s\n' 'int main(void)' '{' ' return 0;' '}' > "$whereis_demo/src/demo_tool.c" &&
printf '%s\n' '.TH DEMO_TOOL 1' '.SH NAME' \
'demo_tool \- programa de demonstracao' > "$whereis_demo/man1/demo_tool.1" &&
whereis -B "$whereis_demo/bin" -M "$whereis_demo/man1" \
-S "$whereis_demo/src" -f demo_tool
Procurar apenas na categoria de binários
O -b seleciona binários, enquanto -B escolhe seus diretórios. Com a pasta bin da prática, o resultado deve incluir o caminho terminado em /bin/demo_tool. O nome da categoria não prova que um arquivo seja um programa funcional ou que tenha as permissões necessárias: whereis localiza candidatos pelo nome e pelo diretório. Para uma instalação real, uma consulta como whereis -b ssh depende dos diretórios e arquivos presentes no sistema.
whereis -b -B "$whereis_demo/bin" -f demo_tool
Procurar apenas arquivos de manual
O -m seleciona a categoria de manuais, e -M restringe a busca à pasta man1 preparada. O resultado deve terminar em /man1/demo_tool.1. A localização de um arquivo não significa que o comando man esteja instalado, que o arquivo seja a documentação da versão em uso ou que a busca padrão de man inclua essa pasta. Para localizar apenas a fonte da prática, use whereis -s -S "$whereis_demo/src" -f demo_tool.
whereis -m -M "$whereis_demo/man1" -f demo_tool
Interpretar uma linha com binário e manual
Uma consulta a um programa instalado, como ls, pode trazer o nome seguido de dois-pontos e vários caminhos. Os resultados variam: algumas instalações têm o executável, mas não a documentação local, ou usam outros diretórios e formatos de compressão. O exemplo abaixo ilustra a separação entre um caminho de binário e um arquivo de manual; ele não é uma saída garantida desta prática.
whereis ls
Ilustração do formato, com caminhos que dependem da instalação:
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
Nessa ilustração, /usr/bin/ls é o caminho do executável e /usr/share/man/man1/ls.1.gz é o arquivo de manual comprimido. Para saber qual ls o shell resolverá naquele contexto, consulte type ls ou command -v ls. Se aparecer apenas nome:, nenhum candidato foi mostrado naquela busca; isso não comprova que o programa esteja ausente de todos os diretórios do sistema. Não use o estado de saída isoladamente como uma contagem de resultados.
Principais opções
| Opção | Função no util-linux whereis |
|---|---|
-b |
Selecionar a busca de binários. |
-m |
Selecionar manuais e documentação Info reconhecida pela implementação. |
-s |
Selecionar arquivos de fonte. |
-B DIRS -f |
Definir os diretórios da categoria de binários; não substituir o papel de -b. |
-M DIRS -f |
Definir os diretórios de manuais; usar -m quando só essa categoria for desejada. |
-S DIRS -f |
Definir os diretórios de fontes; usar -s quando só essa categoria for desejada. |
-u |
Filtrar entradas que a implementação considera incomuns; conferir o comportamento da versão antes de usá-lo em auditorias. |
-l |
Listar os caminhos efetivos de busca, inclusive o efeito dos diretórios personalizados. |
O filtro -u não é uma verificação de segurança ou integridade. Também não deve ser usado sozinho para provar a ausência de um arquivo: a contagem e o tratamento de casos sem correspondência precisam ser confirmados na implementação instalada. Para conferir uma categoria de maneira direta, selecione -b, -m ou -s e examine os caminhos retornados.
Exemplos práticos
Listar os diretórios efetivos
No Linux, whereis -l mostra os caminhos conhecidos que a instalação consegue usar. O bloco abaixo mostra o efeito de fornecer as três listas da prática, sem depender das pastas padrão do sistema. Confira os rótulos de categoria e os diretórios, em vez de presumir uma lista universal. A disponibilidade e as permissões dos diretórios podem afetar o que entra na busca.
whereis -B "$whereis_demo/bin" -M "$whereis_demo/man1" \
-S "$whereis_demo/src" -f -l
Fornecer dois diretórios para a mesma categoria
A lista após -B contém bin e extra como dois argumentos separados, ambos entre aspas para preservar espaços nos caminhos. -f marca o fim dessa lista; demo_tool é o nome pesquisado. Com -b, só a categoria de binários é selecionada, e os dois diretórios devem fornecer candidatos. Informar apenas -B, sem -b, pode deixar outras categorias ativas; restringir um diretório e escolher um tipo são operações distintas.
whereis -b -B "$whereis_demo/bin" "$whereis_demo/extra" -f demo_tool
Separar resolução do shell e localização de documentação
O subshell acrescenta bin ao início de PATH e consulta command -v demo_tool; em seguida, o whereis procura somente o arquivo de manual em man1. Assim, a primeira resposta corresponde à resolução do shell, enquanto a segunda se refere a um arquivo relacionado. O PATH do terminal principal permanece como estava ao sair dos parênteses. Nenhuma das consultas executa o script demo_tool.
(
PATH="$whereis_demo/bin:$PATH"
export PATH
command -v demo_tool
whereis -m -M "$whereis_demo/man1" -f demo_tool
)
Comparar whereis e outros comandos
| Comando | Função principal | Quando usar |
|---|---|---|
whereis |
Consultar locais de arquivos relacionados | Localizar binários, fontes e manuais pelo nome |
which |
Consultar executáveis em PATH | Comparar caminhos de programas externos e sua ordem |
type |
Classificar nomes no shell | Conferir aliases, funções, comandos internos e arquivos |
find |
Percorrer caminhos definidos | Buscar na árvore atual, com condições de nome ou metadados |
Cuidados importantes
Não confundir a busca com uma varredura completa
Uma instalação fora dos diretórios consultados pode não aparecer. Comece por -l e depois indique os diretórios apropriados, sem ampliar a busca mais do que o necessário. Para percorrer uma árvore arbitrária, use find com um ponto inicial definido. O locate consulta um índice de nomes, com outro escopo e outras limitações de atualização; ele também não garante uma visão completa e atual de todo o disco.
Passar o nome e interpretar as regras de correspondência
Prefira o nome do programa, como demo_tool, ao caminho de um arquivo específico. O util-linux remove componentes de diretório iniciais do nome consultado e aplica regras próprias para nomes de fontes e manuais, incluindo alguns sufixos e formatos comprimidos. Portanto, fornecer um caminho completo não transforma a consulta em um teste de identidade daquele arquivo. A implementação de whereis mostra que a categoria e a comparação de nomes não equivalem a validar o conteúdo, a permissão de execução ou a autenticidade do candidato.
Manter os tipos e as listas na ordem correta
Coloque -f após as listas personalizadas. As restrições se aplicam aos nomes que vêm depois; novas restrições podem mudar a categoria para os nomes seguintes. Por exemplo, no util-linux, whereis -bm ls tr -m gcc pesquisa binários e manuais de ls e tr, mas só manuais de gcc. Para reduzir ambiguidades em scripts, prefira chamadas separadas por categoria. Isso também facilita distinguir uma lista de diretórios de uma lista de programas.
Perguntas frequentes
O whereis pesquisa apenas PATH?
Não. O util-linux usa locais conhecidos e informações de PATH e MANPATH, conforme a categoria. A opção -l ajuda a conferir os caminhos efetivos; -B, -M e -S permitem substituí-los para as categorias correspondentes.
Por que uma instalação personalizada não aparece?
A pasta pode estar fora da busca, não estar acessível ou o nome não corresponder às regras da implementação. Para um binário em uma pasta conhecida, use uma forma como whereis -b -B /pasta/dos/programas -f NOME, substituindo os marcadores pelos valores reais.
Como ver os diretórios de busca?
No util-linux, use whereis -l. Ao fornecer listas personalizadas, -l também ajuda a verificar seu efeito. Não presuma que todos os sistemas tenham as mesmas pastas de binários, fontes ou manuais.
Como procurar fora desses diretórios?
Use find com o ponto inicial apropriado para examinar a árvore atual. Para nomes já indexados, locate pode ajudar, mas é necessário conferir quais pastas o banco inclui e quando ele foi atualizado. Nenhum dos dois comprova que o shell escolherá um caminho específico ao receber apenas um nome.




