Eu sou daquele tipo de pessoa que gosta de ferramentas, por isso tenho uma caixa de ferramentas equipada com diversas ferramentas, como alicates, chaves de fenda e philips e muitas outras. No Linux não é diferente, eu também tenho uma seleção de ferramentas que me ajudam a ser mais produtivo no meu dia a dia de trabalho.

Ao final deste artigo você saberá como:

  • Visualizar o conteúdo de um arquivo de forma inteligente sem editá-lo;
  • Organizar arquivos e saídas de texto;
  • Eliminar linhas duplicadas em um arquivo;
  • Encontrar rapidamente arquivos no sistema;
  • Encontrar e manipular conteúdos em arquivos;

Como eu disse nos meus dois primeiros artigos, se você quer se tornar mais produtivo no Linux, vai precisar enfrentar a tela preta, ou se preferir, o console.
É no console que as possibilidades do Linux se multiplicam e você descobrirá que se conhecer as ferramentas certas, poderá executar tarefas consideradas demoradas (e até impossíveis) pela maioria das pessoas em poucos segundos.

Existem muitas ferramentas no Linux, porém falarei neste artigo apenas das que mais utilizo e considero como sendo o meu kit de sobrevivência.

1 less

less is opposite of more. Isso que está escrito na descrição da man page do less, uma brincadeira ironizando a ferramenta more. Ao contrário do more, o less permite a visualização de um arquivo onde você pode subir ou descer o cursor ou se preferir, voltar e avançar o cursor.
O bacana desta ferramenta é que ela não precisa ler o conteúdo do arquivo inteiro antes de começar a exibir o conteúdo em tela, isso é bastante útil em grandes arquivos.
Como o more, o less também permite monitorar arquivos e mostrar novas linhas inseridas no final do arquivo no momento que são inseridas, com o diferencial de que você pode parar o monitoramento e voltar o cursor para ver um conteúdo que já ficou para trás. Vamos a alguns exemplos:

# visualizar arquivo de log sem contagem de linhas (mais rápido):
$ less -n /var/log/syslog

# monitorar arquivo de log em tempo real:
$ less +F /var/log/syslog
Algumas coisas que você pode fazer:
  1. Parar o monitoramento: ctrl+c e para voltar a monitorar pressione shift+f
  2. Retornar ao início do arquivo: shift+< e para ir ao final do arquivo shift+>
  3. Pesquisar um termo para baixo do arquivo: digite / o termo que quer buscar e enter;
  4. Pesquisar um termo para cima do arquivo: digite ? o termo que deseja buscar e enter;
  5. Uma vez no modo de pesquisa, para pesquisar o próximo termo pressione n (next) ou N (next na direção reversa)

OBS: Para a maioria das ações acima, o modo de monitoramento não pode estar em execução.

2 sort

Esta ferramenta é utilizada para ordenar um arquivo baseado em letras ou números.

Alguns exemplos:

# levando em consideração o seguinte arquivo de texto nomes.txt:
Joana
Ana Paula
Letícia
Jonas
Henrique

$ sort nomes.txt
Ana Paula
Henrique
Joana
Jonas
Letícia

# se modificarmos o arquivo nomes.txt para:
Joana:1
Ana Paula:4
Letícia:8
Jonas:5
Henrique:2

# é possível organizar o arquivo pelo seu campo numérico:
$ sort -k 2 -t : nomes.txt
Joana:1
Henrique:2
Ana Paula:4
Jonas:5
Letícia:8

3 uniq

Esta ferramenta é muito útil para remover linhas duplicadas de um arquivo ou contar quantas vezes uma linha se repete.

# conteúdo do arquivo nomes.txt:
Joana:1
Joana:1
Joana:1
Ana Paula:4
Letícia:8
Jonas:5
Jonas:5
Jonas:5
Henrique:2

$ uniq nomes.txt
Joana:1
Ana Paula:4
Letícia:8
Jonas:5
Henrique:2

# contar quantas vezes cada linha se repete:
$ uniq -c nomes.txt
3 Joana:1
1 Ana Paula:4
1 Letícia:8
3 Jonas:5
1 Henrique:2

# mostrar somente as linhas duplicadas:
$ uniq -d nomes.txt
Joana:1
Jonas:5

4 find

Quer buscar um arquivo dentro do sistema de arquivos? Este é o cara.

Exemplos:

# buscar um arquivo com nome hosts.allow dentro do /:
$ find / -name “hosts.allow”

# não tem certeza do nome completo do arquivo? Sem problemas:
$ find / -name “hosts.*”

# quer buscar somente arquivos e ignorar diretórios?
$ find / -type f -name “hosts.*”

# quer buscar arquivos e executar um comando para cada arquivo que encontrar?
$ find / -type f -name “hosts.*” -exec uniq {} \;

# neste caso o “{}” se transforma no nome do arquivo encontrado.

OBS: Cuidado se copiar e colar estes comandos no console, pois as aspas duplas podem se transformar em outra coisa e o comando não funcionar.

5 grep

O grep é um dos meus preferidos e possui tantos usos que eu precisaria de outro artigo somente sobre ele para demonstrar tudo que é possível fazer.
O grep busca por expressões dentro de arquivos e os exibe na tela (ou não).

Alguns exemplos:

$ grep 'Ana' nomes.txt
Ana Paula:4

$ grep -i 'ana' nomes.txt
Joana:1
Joana:1
Joana:1
Ana Paula:4

$ grep -c 'ana' nomes.txt
3

# após encontrar a primeira expressão, mostrar também uma linha antes (ótimo para buscar erros em arquivos de log e saber o que aconteceu antes do erro):
$ grep -B1 'Henrique' nomes.txt
Jonas:5
Henrique:2

# após encontrar a última expressão, mostrar também uma linha após:
$ grep -A1 'Jonas' nomes.txt
Jonas:5
Jonas:5
Jonas:5
Henrique:2

O poder do grep multiplica-se quando se utiliza expressões regulares, mas este será assunto para um próximo artigo.

6 sed

sed é um editor de fluxo de dados para filtragem e transformação de texto. A descrição é um pouco complexa e o seu uso pode ser muito mais complexo ainda. Vejamos alguns exemplos BEM simples:

# substituição de texto:
$ sed 's/Paula/Maria/' nomes.txt
Joana:1
Joana:1
Joana:1
Ana Maria:4
Letícia:8
Jonas:5
Jonas:5
Jonas:5
Henrique:2

$ sed 's/a/X/' nomes.txt
JoXna:1
JoXna:1
JoXna:1
AnX Paula:4
LetíciX:8
JonXs:5
JonXs:5
JonXs:5
Henrique:2

# substituição de texto com memória:
$ sed 's/\(.*\)as/Eu sou \1, muito prazer/' nomes.txt
Joana:1
Joana:1
Joana:1
Ana Paula:4
Letícia:8
Eu sou Jon, muito prazer:5
Eu sou Jon, muito prazer:5
Eu sou Jon, muito prazer:5
Henrique:2

# apagar linhas que contenham um texto:
$ sed '/ana/d' nomes.txt
Ana Paula:4
Letícia:8
Jonas:5
Jonas:5
Jonas:5
Henrique:2

E por ai vai. Acredite, isso pode ficar muito mais complicado. Existem pessoas que fizeram jogos utilizando sed, não acredita? Veja aqui uma biblioteca de jogos feitos em sed: http://sed.sourceforge.net/local/games/

7 awk

Chegamos ao meu preferido. O awk não é apenas uma ferramenta, ele é uma linguagem de programação e é extramente veloz para processamento de arquivos grandes. Pode inclusive substituir algumas ferramentas acima demonstradas.

Alguns exemplos:

# Conteúdo do arquivo cadastro.txt para os exemplos:
Joana:Av sete de setembro, 1201:Centro:SP
Ana Paula:Rua das Perobas, 100:Nova Parada:SP
Letícia:Rua 12 de outubro, 345:Centro:RJ

# imprimir somente as linhas que contiverem a palavra “Centro”:
$ awk '/Centro/{print}' cadastro.txt
Joana:Av sete de setembro, 1201:Centro:SP
Letícia:Rua 12 de outubro, 345:Centro:RJ

# imprimir apenas o número da casa:
$ awk -F”,” '{ split($2,num,":");print num[1] }' cadastro.txt
1201
100
345

# contar quantos campos separados por “:” cada linha tem:
$ awk -F":" '{print NF}' cadastro.txt
4
4
4

# imprimir somente o campo Estado
$ awk -F":" '{print $4}' cadastro.txt
SP
SP
RJ

# imprimir o campo Estado somente se for igual a “SP”:
$ awk -F":" '{ if ($4 == "SP") print $4}' cadastro.txt
SP
SP

Como eu disse o awk é uma linguagem de programação. Veja um script feito em awk abaixo (count-passwd.awk):

#!/usr/bin/awk -f
BEGIN {
  FS=":"
}
{
  shell[$7]++
}
END {
  for (x in shell) {
    printf ("%s: %s\n", x, shell[x])
  }
}

# agora em ação:
$ ./count-passwd.awk /etc/passwd
/bin/false: 12
/bin/sh: 18
/bin/bash: 2
/bin/sync: 1

Este script contou quantas vezes cada shell se repete dentro do arquivo “/etc/passwd”.

O objetivo deste artigo é apenas mostrar um pouco do que cada ferramenta pode fazer, pois suas utilizações vão muito além do que foi demonstrado aqui.
Agora você conhece algumas ferramentas do meu kit de sobrevivência e espero que este conteúdo tenha te ajudado de alguma forma ou pelo menos aguçado a sua curiosidade.

Deixe seus comentários abaixo e até a próxima!

Comentários

comentários