- O comando apropos serve para localizar um comando que você não lembra a sintaxe por meio de palavras-chave que descrevam a funcionalidade que este comando teria.
- Estamos procurando um comando que encontre uma pasta especifica.
- Dependendo do sistema precisa-se atualizar o cache para o comando apropos funcionar corretamente, o comando é "mandb".
- Procuramos o comando find que localiza arquivos em uma hierarquia de diretórios.
- Mas antes o que significa este (1) a frente do comando find?
- Utilizando o comando man man (que seria o manual do próprio manual do linux), encontramos a descrição do tipo de função que determinada palavra teria caso tivesse determinado numero envolto do ().
- Desta forma procuramos comandos executáveis, que correspondem ao número 1, que nosso comando find possui.
- Por exemplo, poderíamos possuir os mesmos comandos derivativos do find, como find-lib(5) find-ker(9), mas apenas precisamos obter comandos executáveis, para isso utilizaríamos a seguinte flag abaixo junto ao comando apropos.
- Os comandos find-lib e find-ker não existem, apenas os mencionei a título ilustrativo.
- Utilizaremos a flag -s acompanhada do número da sessão que buscamos, nesse caso a sessão (1) destinada para comandos executáveis.
- O comando ficaria: apropos -s 1 search
- Note que a filtragem ficou relativamente menor, pois agora o apropos só nos passa a sessão que escolhemos.
- Agora que sabemos qual comando utilizar para encontrar um arquivo ou diretório, vamos entender separadamente como construir um comando find.
- Para este exemplo estamos procurando uma pasta chamada arquivos.
- Não fazemos ideia de onde se localiza a pasta em questão, apenas sabemos seu nome e que ela é um diretório. Para localizá-la podemos utilizar o seguinte raciocínio:
- Para se encontrar uma caneta perdida em um quarto, primeiro precisamos entrar neste quarto. O comando find segue esta mesma analogia.
- Em sua sintaxe começamos com o comando find (diretório de pesquisa), no nosso exemplo, pegaremos desde o diretório / + a flag -name que será onde colocaremos o nome do diretório que estamos buscando, que por sua vez é o diretório arquivos.
- Nosso comando então seria: find / -name "arquivos"
- Aqui falaremos de dois pontos distintos, o primeiro é o caractere "?" e o segundo é a saída do nosso comando.
- O caractere ?, podemos chamar de caractere coringa, ele tem a função de encontrar ou não qualquer caractere somente naquela posição. Por exemplo, caso tivéssemos a dúvida se a pasta se chama "arquivos" ou "arquivo" no singular, poderíamos utilizar o caractere coringa que nos daria qualquer carácter ou nenhum após a palavra arquivo.
- O segundo ponto é a saída do comando, notamos que temos dois resultados, mas por que isso? Porque deveríamos especificar o tipo de arquivo que queremos encontrar, caso contrário podemos tanto ter a saída de arquivos regulares, especiais ou diretórios.
- Para resolver isso é simples, basta passar a flag -type seguido do parâmetro d de "directory".
- Encontramos finalmente o nosso diretório, mas e se agora precisa-se ainda achar um trecho de texto de código dentro deste diretório que pudesse, por exemplo, ser um erro?
- O comando grep é a chave para esta busca, ele sozinho poderia resolver a nossa tarefa tanto através do caminho absoluto quanto do relativo.
- Caminho absoluto é aquele que é declarado desde a raiz do sistema identificado pelo / até o local a onde deseja-se ir.
- Já o caminho relativo é aquele que parte do diretório que nos encontramos atualmente.
- Neste exemplo criamos várias pastas e arquivos, e cada arquivo com seus textos dentro do diretório "/tmp/arquivos". Para localizar o arquivo em questão, escrevi em um desses documentos a palavra "achou".
- Podemos resolver este problema da seguinte forma: utilizando o comando grep + a flag -r (recursivo) + a palavra em questão "achou" + o caminho do diretório, absoluto ou relativo.
- Desta forma o nosso comando seria: grep -r "achou" /tmp/arquivos/
- Poderíamos ter a solução desta forma, entretanto, usaríamos dois comandos diferentes quando podemos usar apenas uma linha de código.
- Utilizaremos o nosso comando find, utilizando a saída dele como um argumento para um novo input.
- Vamos falar a partir do nosso pipe representado pelo "|". O que estamos querendo passar com o nosso comando, é mais simples do que aparenta.
- Nós pegaremos o output do primeiro comando que é find / -type -name arquivo? Concatenando esta saída em um novo argumento com as junções da | + o comando xargs. O resto do comando grep segue a mesma lógica descrita acima.
- Desta forma o nosso comando fica: find / -d -name arquivo ? | xargs grep -r "achou"
- Em um resumo mais simplificado, estamos pegando a saída do comando find que seria o caminho /tmp/arquivos/ e estamos concatenando com o comando grep, e quem faz esta ponte entre ambos os comandos transformando a saída em um argumento é a junção da barra pipe | com o comando xargs.
- Este comando procuraria recursivamente a partir do diretório /tmp/arquivos/ todos os arquivos existentes dentro dele que contem a palavra "achou". Sendo a nossa saída: "/tmp/arquivos/pasta3/achou.txt:achou".
- Com o comando apropos, podemos achar um comando que não conhecemos por meio de palavras-chave, utilizar o comando find para encontrar um arquivo ou diretório e juntamente com o grep podemos achar dentro deste diretório, trechos de códigos que nos interessem.