Como usar todos os comandos de pesquisa do Linux

Conceito de um terminal Linux cheio de texto em um laptop
Fatmawati Achmad Zaenuri / Shutterstock.com

O Linux oferece seis maneiras diferentes de pesquisar, e cada uma tem seus méritos. Vamos demonstrar como usar find, locate, which, whereis, whatis, e apropos. Cada um se destaca em tarefas diferentes; veja como escolher a ferramenta certa para o trabalho.

Você não tem mais escolha quando se trata de comandos para pesquisar e encontrar no Linux. Por que tantos? Bem, cada um deles tem suas especialidades e tem um desempenho melhor do que os outros em certas circunstâncias. Você pode pensar neles como uma espécie de canivete suíço para pesquisa. Vamos examinar cada lâmina por vez e descobrir seus pontos fortes específicos.

O comando find

O comportamento do  findcomando é difícil de determinar por tentativa e erro. Depois de entender a sintaxe , você começa a apreciar sua flexibilidade e poder.

A maneira mais simples de usar findé apenas digitar finde pressionar Enter.

encontrar

encontre o comando em uma janela de terminal

Usado desta forma findse comporta como ls, mas lista todos os arquivos no diretório atual e aqueles em subdiretórios.

saída do comando find em uma janela de terminal

Algumas implementações de findrequerem que você coloque o .para o diretório atual. Se for esse o caso com sua versão do Linux, use o seguinte comando:

encontrar .

encontrar .  comando em uma janela de terminal

Para fazer a findpesquisa na pasta raiz, você usaria este comando:

encontrar /

comando fin d / em uma janela de terminal

Para iniciar a pesquisa em sua pasta pessoal, use este comando:

encontrar ~

find ~ em uma janela de terminal

Usando encontrar com padrões de arquivo

Para findser algo mais do que uma versão autorrecorrente de ls, devemos fornecer a ele algo para pesquisar. Podemos fornecer nomes de arquivo ou padrões de arquivo. Os padrões usam curingas, onde *significa qualquer sequência de caracteres e ?significa qualquer caractere único.

Os padrões devem ser citados para funcionar corretamente. É fácil esquecer de fazer isso, mas se você não citar o padrão curinga find, não será capaz de executar corretamente o comando que você deu.

Com este comando, vamos pesquisar na pasta atual por arquivos que correspondam ao padrão “*. * S”. Isso significa qualquer nome de arquivo que tenha uma extensão de arquivo que termina em “s”. Usamos a -nameopção para informar findque estamos passando um nome de arquivo ou um padrão de nome de arquivo.

encontrar . -name "*. * s"

encontrar .  -name "*. * s" em uma janela de terminal

find retorna esses arquivos correspondentes.

Observe que duas das extensões de arquivo têm dois caracteres e uma tem três caracteres. Isso ocorre porque usamos o padrão “*. * S”. Se quiséssemos apenas as extensões de arquivo de dois caracteres, teríamos usado “*.? S”.

saída do comando de arquivo em uma janela de terminal

Se soubéssemos com antecedência que estávamos procurando arquivos JavaScript “.js”, poderíamos ter sido mais específicos em nosso padrão de arquivo. Além disso, observe que você pode usar aspas simples para envolver o padrão, se preferir.

encontrar . -name '* .js'

encontrar .  -name "* .js" em uma janela de terminal

Desta vez, findapenas relata os arquivos JavaScript.

Arquivos JavaScript encontrados por localizar em uma janela de terminal

Ignorando maiúsculas e minúsculas com encontrar

Se você souber o nome do arquivo que deseja findlocalizar, pode transmiti-lo ao findinvés de um padrão. Você não precisa envolver o nome do arquivo entre aspas se não houver curingas nele, mas é uma boa prática fazer isso o tempo todo. Isso significa que você não se esquecerá de usá-los quando precisar deles.

encontrar . -name 'Yelp.js'

encontrar .  -name 'Yelp.js' em uma janela de terminal

Isso não retornou nada. Mas é estranho, sabemos que esse arquivo deve estar lá. Vamos tentar novamente e dizer findpara ignorar o caso. Fazemos isso usando a -inameopção (ignorar o nome do caso)

encontrar. -iname 'Yelp.js'

encontrar.  -iname 'Yelp.js' em uma janela de terminal

Esse era o problema, o nome do arquivo começa com um “y” minúsculo, e estávamos pesquisando com um “Y” maiúsculo.

Subdiretórios recorrentes com find

Uma coisa excelente findé a maneira como ele pesquisa recursivamente nos subdiretórios. Vamos pesquisar qualquer arquivo que comece com “map”.

encontrar . -name "mapa *. *"

encontrar .  -name "map *. *" em uma janela de terminal

Os arquivos correspondentes são listados. Observe que eles estão todos em um subdiretório.

Resultados de um subdiretório em uma janela de terminal

Procurando por diretórios com encontrar

A -pathopção faz com que findprocure diretórios. Vamos procurar um diretório cujo nome não conseguimos lembrar, mas sabemos que termina com as letras “sobre”.

encontrar . -caminho '* sobre'

encontrar .  -path '* about' em uma janela de terminal

O diretório é encontrado, é apenas denominado “about” e está aninhado dentro de outro diretório dentro do diretório atual.

Recomendado:  Qual é a diferença entre o Facebook e o Facebook Lite

Diretório encontrado em uma janela de terminal

Existe uma opção -ipath(ignorar o caminho do caso) que permite a você pesquisar caminhos e ignorar o caso, semelhante à inameopção discutida acima.

Usando atributos de arquivo com find

find pode procurar arquivos que tenham atributos que correspondam à pista de pesquisa. Por exemplo, você pode procurar arquivos que estão vazios usando a -emptyopção, independentemente de como sejam chamados.

encontrar . -vazio

encontrar .  -vazio em uma janela de terminal

Todos os arquivos de comprimento zero byte serão listados nos resultados da pesquisa.

A -executableopção encontrará qualquer arquivo que possa ser executado, como um programa ou um script.

encontrar . -executável

encontrar .  -executável em uma janela de terminal

Os resultados listam um arquivo chamado “fix_aptget.sh”.

Eles também contêm três diretórios, incluindo ‘.’, O diretório atual. Os diretórios são incluídos nos resultados porque o bit de execução é definido em suas permissões de arquivo. Sem isso, você não seria capaz de entrar (“executar”) esses diretórios.

resultados da pesquisa de arquivo executável na janela do terminal

A opção -type

A -typeopção permite que você pesquise o tipo de objeto que está procurando. Forneceremos o indicador de tipo “f” como parâmetro para a -typeopção porque queremos findpesquisar apenas arquivos.

encontrar . executável -tipo f

encontrar .  executável -tipo f em uma janela de terminal

Desta vez, os subdiretórios não são listados. O arquivo de script executável é o único item nos resultados.

resultados de pesquisa sem diretórios em uma janela de terminal

Também podemos pedir findpara incluir apenas diretórios nos resultados. Para listar todos os diretórios, podemos usar a -typeopção com o indicador de tipo “d”.

encontrar . digite -d

encontrar .  digite -d em uma janela de terminal

Apenas diretórios e subdiretórios são listados nos resultados.

diretórios listados em uma janela de terminal

Usando outros comandos com find

Você pode executar alguma ação adicional nos arquivos encontrados. Você pode ter os arquivos passados, por sua vez, para algum outro comando.

Se precisarmos ter certeza de que não há arquivos executáveis ​​no diretório e subdiretórios atuais, poderíamos usar o seguinte comando:

encontrar . -name "fix_aptget.sh" -exec chmod -x '{}' \;

encontrar .  -name "fix_aptget.sh" -exec chmod -x '{}' \;  em uma janela de terminal

O comando significa:

  • Procure no diretório atual por um objeto nomeado chamado “fix_aptget.sh”.
  • Se for encontrado, execute o chmodcomando.
  • Os parâmetros que são passados chmodsão -xpara remover as permissões executáveis ​​e '{}'que representam o nome do arquivo encontrado.
  • O ponto e vírgula final marca o fim dos parâmetros que serão transmitidos chmod. Isso deve ser ‘escapado’ precedendo-o com uma barra invertida ‘\’.

Uma vez que este comando foi executado, podemos pesquisar por arquivos executáveis ​​como antes, e desta vez não haverá nenhum arquivo listado.

Resultados da pesquisa sem arquivos executáveis ​​em uma janela de terminal

Para ampliar nossa rede, poderíamos usar um padrão de arquivo em vez do nome de arquivo que usamos em nosso exemplo.

Essa flexibilidade permite que você pesquise os tipos de arquivo especificados, ou com padrões de nome de arquivo, e execute alguma ação nos arquivos correspondentes.

Localizar tem muitas outras opções , incluindo pesquisar arquivos por data de modificação, arquivos pertencentes a um usuário ou grupo, arquivos que são legíveis ou arquivos que têm um conjunto específico de permissões de arquivo.

Os comandos localizar e mlocate

Muitas distribuições de Linux costumavam ter uma cópia do locateincluído com eles. Isso foi substituído pelo mlocatecomando, que era uma versão aprimorada e atualizada do locate.

Quando mlocateé instalado em um sistema, ele modifica o locatecomando para que você realmente use, mlocatemesmo se digitar locate.

As versões atuais do Ubuntu, Fedora e Manjaro foram verificadas para ver se elas tinham versões desses comandos pré-instaladas. Ubuntu e Fedora incluídos. mlocate. Ele precisava ser instalado no Manjaro, com este comando:

sudo pacman -Syu mlocate
sudo pacman -Syu mlocate em uma janela de terminal

No Ubuntu, você pode usar localizar e de forma mlocateintercambiável. No Fedora e no Manjaro você deve digitar locate, mas o comando é executado para você por mlocate.

Se você usar a  --versionopção com, locateverá que o comando que responde é realmente mlocate.

localizar --version

localize --version em uma janela de terminal

Como locate funciona em todas as distribuições Linux que foram testadas, usaremos locateem nossas explicações abaixo. E é uma letra a menos para digitar.

O banco de dados de localização

A maior vantagem disso locate é a velocidade.

Quando você usa o findcomando, ele sai correndo e realiza uma pesquisa em seu sistema de arquivos. O locatecomando funciona de maneira muito diferente. Ele faz uma pesquisa no banco de dados para determinar se o que você está procurando está no seu computador. Isso torna a pesquisa muito mais rápida.

Claro, isso levanta uma questão óbvia sobre o banco de dados. O que garante que o banco de dados esteja atualizado? Quando mlocate é instalado, ele (geralmente) coloca uma entrada em cron.daily. Isso é executado todos os dias (muito cedo pela manhã) e atualiza o banco de dados.

Para verificar se esta entrada existe, use este comando:

ls /etc/cron.daily/*loc*

ls /etc/cron.daily/*loc* em uma janela de terminal

Se você não encontrar uma entrada lá, pode configurar uma tarefa automatizada para fazer isso no momento que você escolher.

E se o seu computador não estiver ligado no momento em que o banco de dados deve ser atualizado? Você pode executar manualmente o processo de atualização do banco de dados com o seguinte comando:

sudo atualizadob

sudo updatedb em uma janela de terminal

Usando localizar

Vamos procurar por arquivos que contêm a string “getlatlong”. Com a localização, a pesquisa procura automaticamente por quaisquer correspondências que contenham o termo de pesquisa em qualquer lugar do nome do arquivo, portanto, não há necessidade de usar curingas.

localizar getlatlong
localize getlatlong em uma janela de terminal

É difícil transmitir velocidade em uma captura de tela, mas quase imediatamente os arquivos correspondentes são listados para nós.

Recomendado:  Como ver sua página do Facebook como outra pessoa

localizar resultados com arquivos contendo getlatlong em uma janela de terminal

Dizendo localize quantos resultados você deseja

Às vezes, você pode saber que há muitos arquivos do tipo que está procurando. Você só precisa ver alguns deles. Talvez você apenas queira ser lembrado em qual diretório eles estão e não precisa ver todos os nomes de arquivos.

Usando a -nopção (número), você pode limitar o número de resultados que locateretornarão para você. Neste comando, definimos um limite de 10 resultados.

localizar .html -n 10

localize .html -n 10 em uma janela de terminal

locate responde listando os primeiros 10 nomes de arquivo correspondentes que ele recupera do banco de dados.

resultados de pesquisa localizados limitados a 10 resultados em uma janela de terminal

Contando Arquivos Correspondentes

Se você deseja apenas saber o número de arquivos correspondentes e não precisa saber como eles são chamados ou onde estão em seu disco rígido, use a opção -c (contagem).

localizar -c .html

localize -c .html em uma janela de terminal

Portanto, agora sabemos que existem 431 arquivos com a extensão “.html” neste computador. Talvez queiramos dar uma olhada neles, mas pensamos em dar uma olhada e ver quantos havia primeiro. Armados com esse conhecimento, sabemos que precisaremos canalizar a saída less.

localizar .html | Menos

localizar .html |  menos em uma janela de terminal

E aqui estão todos eles, ou pelo menos, aqui está o topo da longa lista deles.

lista de arquivos html canalizada através de less em uma janela de terminal

Ignorando o caso com localizar

O -i(ignorar locatemaiúsculas e minúsculas ) faz exatamente isso, ele ignora diferenças em maiúsculas e minúsculas entre o termo de pesquisa e os nomes de arquivo no banco de dados. Se tentarmos contar os arquivos HTML novamente, mas fornecermos por engano o termo de pesquisa em maiúsculas, não obteremos resultados.

localizar -c .HTML

localize -c .HTML em uma janela de terminal

Ao incluir a -iopção, podemos  locate ignorar a diferença no caso e retornar nossa resposta esperada para esta máquina, que é 431.

localizar -c -i .HTML

localize -c -i .HTML em uma janela de terminal

A localização do status do banco de dados

Para ver o status do banco de dados, use a -sopção (status). Isso faz locatecom que sejam retornadas algumas estatísticas sobre o tamanho e o conteúdo do banco de dados.

localizar -s

localizar -s em uma janela de terminal

O qual comando

O whichcomando pesquisa os diretórios em seu caminho e tenta localizar o comando que você está procurando. Ele permite que você determine qual versão de um programa ou comando será executada quando você digitar seu nome na linha de comando.

Imagine que temos um programa chamado geoloc. Sabemos que está instalado no computador, mas não sabemos onde está localizado. Deve estar em algum lugar do caminho porque quando digitamos seu nome, ele é executado. Podemos usar whichpara localizá-lo com este comando:

qual geolocalização

qual geolocalização em uma janela de terminal

whichrelatórios em que o programa está localizado /usr/local/bin.

geolocalização em / usr / local / bin

Podemos verificar se existem outras cópias do programa em outros locais dentro do caminho usando a -aopção (todos).

qual -a geolocalização

que -a geoloc em uma janela de terminal

Isso nos mostra que temos o geolocprograma em dois lugares.

que -a geoloc em uma janela de terminal

Obviamente, a cópia /usr/local/binserá encontrada primeiro pelo shell Bash todas as vezes, portanto, ter o programa em dois lugares não faz sentido.

Remover a versão /usr/bin/geolocirá economizar um pouco da capacidade do disco rígido. Mais importante, também evitará problemas criados por alguém atualizando manualmente o programa e fazendo isso no lugar errado. Então se perguntando por que eles não veem as novas atualizações quando executam o programa.

O comando whereis

O whereiscomando é semelhante ao whichcomando, mas é mais informativo.

Além da localização do comando ou arquivo de programa, whereis também relata onde as páginas man (manuais) e os arquivos de código-fonte estão localizados. Na maioria dos casos, os arquivos de código-fonte não estarão em seu computador, mas se estiverem, whereisfarão um relatório sobre eles.

O executável binário, as páginas do manual e o código-fonte são freqüentemente chamados de “pacote” para esse comando. Se você quiser saber onde os vários componentes do pacote para o  diff comando estão localizados, use o seguinte comando:

onde está diff

onde está o diff em uma janela de terminal

whereisresponde listando a localização das diffpáginas do manual e do diffarquivo binário.

whereis resuts para diff em uma janela de terminal

Para restringir os resultados para mostrar apenas a localização do binário (na verdade, faça whereisfuncionar como which) use a -bopção (binário).

whereis -b diff

whereis -b diff em uma janela de terminal

whereis apenas relata a localização do arquivo executável.

onde a saída é restrita ao local binário apenas em uma janela de terminal

Para restringir a pesquisa ao relatório apenas nas páginas de -mmanual, use a opção (manual). Para restringir a pesquisa para relatar apenas os arquivos de código-fonte, use a -sopção (fonte).

Para ver os locais que whereispesquisam, use a -lopção (locais).

whereis -l

whereis -l em uma janela de terminal

Os locais são listados para você.

Recomendado:  Como obter seus dados de um Mac que não inicializa

onde estão os locais de busca listados em uma janela de terminal

Agora que sabemos os locais whereisa serem pesquisados, podemos, se escolhermos, restringir a pesquisa a um determinado local ou grupo de locais.

A opção -B(lista binária) restringe a pesquisa de arquivos executáveis ​​à lista de caminhos fornecida na linha de comando. Você deve fornecer pelo menos um local para whereispesquisar. A -f opção (arquivo) é usada para sinalizar o fim do local, por último o início do nome do arquivo.

whereis -B / bin / -f chmod

whereis -B / bin / -f chmod em uma janela de terminal

whereisolha no único lugar que pedimos para pesquisar. É onde o arquivo está localizado.

whereis resulta do uso da opção -B em uma janela de terminal

Você também pode usar a opção -M(lista manual) para restringir pesquisas por páginas de manual aos caminhos fornecidos na linha de comando. A opção -S (lista de fontes) permite restringir a pesquisa de arquivos de código-fonte da mesma maneira.

O comando whatis

O whatiscomando é usado para pesquisar rapidamente nas páginas man (manuais). Ele fornece descrições resumidas de uma linha do termo que você pediu para pesquisar.

Vamos começar com um exemplo simples. Embora pareça o ponto de partida de um profundo debate filosófico, estamos apenas pedindo whatispara nos dizer o que o termo “homem” significa.

o que é homem

o que é homem em uma janela de terminal

whatisencontra duas descrições correspondentes. Ele imprime uma breve descrição para cada partida. Também lista a seção numerada do manual que contém cada descrição completa.

o que resulta em uma janela de terminal

Para abrir o manual na seção que descreve o mancomando, use o seguinte comando:

homem 1 homem

homem 1 homem em uma janela de terminal

O manual abre na seção man (1), na página para man.

página do manual aberta na seção um em uma janela de terminal

Para abrir o manual na seção 7, na página que discute as macros que você pode usar para gerar páginas de manual, use este comando:

homem 7 homem

homem 7 homem em uma janela de terminal

A página do manual para as macros do manual é exibida para você.

página do manual aberta na seção sete em uma janela de terminal

Pesquisando Em Seções Específicas do Manual

A -sopção (seção) é usada para limitar a pesquisa às seções do manual de seu interesse. Para whatisrestringir a pesquisa à seção 7 do manual, use o seguinte comando. Observe as aspas em torno do número da seção:

o que é - homem "7"

o que é - o homem "7" em uma janela de terminal

Os resultados referem-se apenas à seção 7 do manual.

os resultados estão restritos à seção sete em uma janela de terminal

Usando whatis com curingas

Você pode usar curingas com whatis. Você deve usar a -wopção (curinga) para fazer isso.

whatis -w char *

whatis -w char * em uma janela de terminal

Os resultados correspondentes são listados na janela do terminal.

quais são as correspondências de curinga em uma janela de terminal

O Comando apropriado

O aproposcomando é semelhante a whatis, mas tem mais alguns sinos e assobios . Ele pesquisa os títulos das páginas do manual e as descrições de uma linha à procura do termo de pesquisa. Ele lista as descrições da página do manual correspondentes na janela do terminal.

A palavra apropos significa “relacionado a” ou “concernente”, e o comando apropostirou seu nome disso. Para pesquisar qualquer coisa relacionada ao groupscomando, podemos usar este comando:

grupos apropriados

grupos apropriados em uma janela de terminal

apropos lista os resultados na janela do terminal.

resultados apropos para o grupo em uma janela de terminal

Usando mais de um termo de pesquisa

Você pode usar mais de um termo de pesquisa na linha de comando. aproposirá pesquisar por páginas de manual que contenham  qualquer um dos termos de pesquisa.

apropos chown chmod

apropos chown chmod em uma janela de terminal

Os resultados são listados como antes. Nesse caso, há uma única entrada para cada um dos termos de pesquisa.

apropos resultados para chmod e chown em uma janela de terminal.

Usando correspondências exatas

aproposretornará as páginas do manual que contêm o termo de pesquisa, mesmo se o termo estiver no meio de outra palavra. Para fazer aproposretornar apenas correspondências exatas para o termo de pesquisa, use a -eopção (exata).

Para ilustrar isso, usaremos aproposcom grepcomo termo de pesquisa.

apropos grep

apropos grep em uma janela de terminal

Há muitos resultados retornados para isso, incluindo muitos onde grepestá incorporado em outra palavra, como bzfgrep.

resultados para apropos grep em uma janela de terminal

Vamos tentar novamente e usar a -eopção (exata).

apropos -e grep

apropos -e grep em uma janela de terminal

Desta vez, temos um único resultado, para o que estávamos realmente procurando.

resultados para apropos -e grep em uma janela de terminal

Combinando todos os termos de pesquisa

Como vimos anteriormente, se você fornecer mais de um termo de apropospesquisa, pesquisará páginas de manual que contenham  qualquer um dos termos de pesquisa. Podemos mudar esse comportamento usando a -aopção (e). Isso faz com que aproposapenas as correspondências selecionadas tenham todos os tempos de pesquisa nelas.

Vamos tentar o comando sem a -aopção para que possamos ver o que resulta apropos.

apropos crontab cron

apropos crontab cron em uma janela de terminal

Os resultados incluem páginas de manual que correspondem a um ou outro dos termos de pesquisa.

apropos resultados para crontab cron em uma janela de terminal

Agora vamos usar a -aopção.

apropos -a cron crontab

apropos -a cron crontab em uma janela de terminal

Desta vez, os resultados são limitados àqueles que contêm os dois termos de pesquisa.

resultados para apropos -a crontab cron na janela do terminal

Ainda mais opções

Todos esses comandos têm mais opções – alguns deles muitas mais opções – e você é incentivado a ler as páginas de manual dos comandos que discutimos neste artigo.

Aqui está um rápido resumo de cada comando:

  • find : fornece um recurso de pesquisa granular e rico em recursos para procurar arquivos e diretórios.
  • Localizar : Fornece uma pesquisa rápida baseada em banco de dados para programas e comandos.
  • que : Pesquisa o $ PATH procurando por arquivos executáveis
  • whereis : Pesquisa o $ PATH procurando por arquivos executáveis, páginas de manual e arquivos de código-fonte.
  • whatis : Pesquisa as descrições de uma linha do homem em busca de correspondências com o termo de pesquisa.
  • apropos : Pesquisa a página de manual com mais fidelidade do que whatis, por correspondências com o termo ou termos de pesquisa.

Procurando mais informações sobre o terminal Linux? Aqui estão 37 comandos que você deve saber .