Agora na parte 2 do curso, vamos avançar explorando ainda mais o nosso sistema. Eu vou procurar arquivos na estrutura; dentro desses arquivos, vamos conseguir extrair conteúdos e fazer algumas filtragens no conteúdo dos arquivos (e não nos nomes, como fizemos no módulo passado).
Também vamos fazer parte de redirecionamento, entender entrada e saída, e começar a trabalhar, dar uma visão sobre as expressões regulares que vão nos ajudar a fazer essas atividades.
Lembrando que esse curso é destinado a você que precisa aprender Linux para resolver os problemas do dia a dia. Chegou na tela preta, precisa navegar e resolver essas atividades.
Então, vamos abrir o Shell e começar.
Vamos começar diretamente com a mão na massa, no Shell, naquela estrutura que criamos no módulo passado.
Se ficou alguma dúvida do comando que vou usar aqui, dá uma checada na parte 1 do curso para sanar todas as dúvidas.
No meu diretório labs
, vou criar um diretório chamado filtrando_conteudo
para fazermos as buscas. cd filtrando_conteudo
, estou no meu diretório e ele está vazio.
Primeiro item que precisamos fazer é pegar um arquivo para trabalharmos. Ainda não entramos no detalhe de permissão de arquivo – vimos uma coisa ou outra na hora que tentamos executar com sudo
e ele viu que não tinha permissão, mas vamos tratar esse tema mais adiante, pode ficar tranquilo.
O que eu quero mostrar é o seguinte: existe um arquivo no etc
chamado services
que tem a lista de portas e qual protocolo está associado a cada porta.
Então, a primeira coisa: "Não lembro bem se é service, como localizo o arquivo?" Já dei a dica que está no etc
(diretório de configuração) e sei que ele chama “servi” alguma coisa. Então, colocamos um asterisco, /etc/servi*
, já aprendemos isso.
Ele trouxe para nós. Esse arquivo está no services
, é uma configuração de arquivo de sistema. O que vamos fazer? Eu vou fazer uma cópia dele para o nosso diretório de trabalho.
Eu sei que ele está no diretório services
e eu estou no meu diretório de trabalho. Como faço uma cópia de lá para onde estou (~/labs/filtrando_conteudo
)? Fácil, cp
: vou dizer onde está o arquivo de origem e onde quero colocá-lo.
Eu quero colocá-lo em labs/filtrando_conteudo
, eu poderia fazer cp /etc/services ~/labs/filtrando_conteudo/
e ele cairia no meu diretório corrente, mas a vida é mais fácil, só precisamos usar o ponto, cp/etc/services .
.
Aprendemos que com o ponto ponto, ..
, nós voltamos para o diretório-pai, e o ponto é o diretório corrente, ou seja, é onde estou. Então, cp/etc/services .
traz o services
para onde estou. Será que veio? Olha o services
no diretório de trabalho!
Estrutura montada, vamos trabalhar com ele. O primeiro comando para aprender é cat
. O que ele faz? Ele mostra o conteúdo se for um arquivo de texto – se for um binário, ele vai trazer aqueles caracteres misturados.
cat services
. Como comentei, o que ele faz? Ele traz o nome do serviço. Vamos ver do início: ele vai trazer o nome, a porta, se é TCP ou UDP, e traz um descritivo.
É legal que é do IANA, que define os padrões, mas é só um comentário. É isso que queremos, o arquivo já está local. O que fazemos? Imaginemos o seguinte cenário.
Eu quero localizar, nesse arquivo, a porta 80. Se formos ficar subindo e descendo, logicamente vai dar um trabalho que não tem sentido. Eu queria localizar a porta 80, http
. O cat
, você já viu que mostra tudo.
Eu vou usar outro comando muito especial, e você certamente já viu isso em vários exemplos usando internet, o grep
é mágico, porque ele vai resolver vários problemas.
grep
, eu quero procurar pela string http
. Onde quero procurar? Você já aprendeu, o asterisco o que faria? Faria a busca em todos os arquivos. Eu só tenho um arquivo, mas ele faria em todos.
Eu posso especificar o arquivo para filtrar, grep http services
. Olha o que ele trouxe para mim, http
, https
, tudo que tiver a string http
ele retorna para mim.
Vamos melhorar, vamos dizer que eu queria procurar só https
, para você entender: grep https services
. Olha só que interessante, no descritivo do arquivo, ele diz que foi feito o update e https
também aparece, então ele trouxe duas linhas.
O grep
é um comando extremamente útil. grep --help
, logicamente, tem várias opções para trabalharmos. --help
, man grep
, isso você já aprendeu, isso é atividade para você fazer depois do vídeo.
Para expandirmos o conteúdo, grep -i
. O que será que esse -i
faz? Vamos executar para testarmos. grep -i http services
, quero procurar http
no arquivo services
, é a forma do comando.
Veja a saída. Vamos tirar o -i para comparar com a outra saída. Você vê que essa primeira tem mais uma linha. Por quê? Coincidentemente, o que aconteceu?
Eu tenho a string http em várias partes do arquivo e ela em maiúsculo tem, por acaso, na mesma linha. A primeira busca retornou essa linha. Coincidentemente, estava aqui o HTTP também.
Quando eu procurei agora por letra maiúscula – o -i é para ignorar o case da letra, se é maiúscula ou minúscula –, ele vai localizar agora tanto um quanto o outro. Na verdade, ele colocou em vermelho os dois.
Está vendo a diferença? No primeiro retorno tem HTTP só em maiúsculo. Você que no segundo retorno, quando não usamos o -i, ele não trouxe essa linha. Então, para procurar independente da caixa, use o -i.
Vamos trazer outro arquivo para acrescentarmos conteúdo. Que arquivo vou trazer? cp /etc/passwd .. O que isso? À medida que formos conhecendo os arquivos, vou dando um breve descritivo.
O passwd, que está dentro do etc (que é o arquivo de configuração), é a base de dados dos usuários, é uma base de dados local. Quando você fez o login e autenticação local, ele está usando o passwd – ele guarda várias coisas, depois exploraremos melhor.
Vamos ver rapidamente o conteúdo que está local agora. Ele trouxe várias informações e olha como o grep é útil. Eu quero localizar, na minha base local, o usuário "Ricardo".
grep Ricardo, não vou usar o passwd, vou usar asterisco, grep Ricardo *. O que ele vai fazer? Vai varrer todos os arquivos, ele varreu passwd e services. Com services não tem isso.
Aqui fiz de propósito, mas atenção quando usar. O legal do grep é que o seu output fica bem limpo para você trabalhar. Olha só mais dois itens bem interessantes: -l minúsculo e vou procurar por "ricardo": grep -l ricardo.
Onde? Você vai procurar em todo o seu conteúdo, grep -l ricardo *. Isso é muito útil para script, é muito legal. Ele não me retornou dentro do arquivo onde estava o conteúdo, ele me retornou o arquivo que tem aquele conteúdo que eu procuro.
Então, essa sintaxe retorna exatamente que no passwd tem o que você está procurando. O mais legal é o seguinte: grep -L ricardo *, com L maiúsculo. services, como assim? Ele retorna para nós todos os arquivos que não têm a string que estamos procurando.
Isso já abre um leque de opções para você trabalhar e localizar as coisas dentro do sistema. Mais? Na continuação, no próximo vídeo!
Aproveitando que estamos trabalhando com grep
, vamos estender ainda mais o uso dele.
Então, clear
. Só ls
, para você situar o que temos de conteúdo. mkdir
, vou criar um diretório: mkdir teste
. Onde está o teste? Dentro do filtrando_conteudo
, já aprendemos isso.
Dentro do teste
(cd teste
), vou pegar uma cópia do arquivo services
. Vou fazer o seguinte: copia do diretório anterior, cp ../
. Copia o quê? cp ../serv
e tecla “Tab”. Dá o “Tab” que não tem erro, ele completa cp ../services
.
Se você estiver com o diretório errado, ele não vai completar. Eu quero copiar esse arquivo para dentro e já chamá-lo de services2
. A sintaxe, sempre, origem e destino: cp ../services services2
. Essa origem (../services
) para esse destino (services2
). O destino, no caso, é o nome do arquivo, services2
.
ls
, services2
. Vou voltar um diretório, cp ..
, e vou repetir um comando. grep HTTP services
. Estou no diretório filtrando_conteudo
. Ele trouxe um retorno.
Você procurou só em um arquivo, ele não ia expandir a procura. Vamos, então, resolver o nosso problema: grep HTTP *
. Mas ele não foi dentro do diretório teste
. Olha o que ele diz, que teste
é um diretório. Ele restringiu a busca ao diretório corrente.
O legal do Linux é que as coisas se repetem. Quando estudamos a parte de copiar e mover, eu introduzi o contexto de recursividade, que significa "daquele ponto em diante". Será que o grep
trabalha com isso também? Vamos ver: grep -r HTTP services
.
Você verifica que ele já não deu erro do diretório, ele foi lá dentro e procurou também. Podemos mostrar isso de outra forma bem legal. Lembra que usamos o -l
? Vou dar a procura recursiva pela string HTTP
, vou combinar recursividade com a lista: -rl
.
O que é a lista, o -l
? Vai mostrar o nome do arquivo. grep -rl HTTP services
, só tem services
. Mas a ideia não é essa, a ideia é usar esse exemplo: grep -rl HTTP *
. É isso que eu queria mostrar, services
, teste/services2
.
Acho que até usei o exemplo errado. Exatamente, ele tinha que mostrar duas vezes. grep -r HTTP *
, é o exemplo certo. -rl
, da recursividade, ele mostrou os arquivos services
e teste/services2
. O -r
(buscando o conteúdo) colocou na tela o conteúdo do arquivo services
e depois o conteúdo do services2
.
Então, está funcionando direito. Asterisco em grep -rl HTTP *
. Logicamente em grep -rl HTTP services
eu fiz a procura só no arquivo. O asterisco é legal porque você expande essa sua procura.
Isso nos scripts é muito útil para você localizar e filtrar as informações, mas ainda não acabou, vamos continuar.
O curso Linux Onboarding: localizando arquivos e conteúdos possui 108 minutos de vídeos, em um total de 35 atividades. Gostou? Conheça nossos outros cursos de Linux em DevOps, ou leia nossos artigos de DevOps.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.