Seguindo com o guia da certificação LPI, vamos ver hoje alguns comandos para filtragem de dados e saídas de outros comandos. Podemos usar este tipo de comando para receber apenas os dados que precisamos ou até mesmo receber dados únicos para usá-los em scripts.
grep
O comando grep procura palavras ou expressões específicas dentro de um arquivo. O comando mostra na tela apenas as linhas do arquivo que contém a expressão procurada.
Por exemplo, vamos pegar apenas a linha do root no arquivo /etc/passwd:
grep root /etc/passwd
Este comando vai retornar algo assim:
root:x:0:0:root:/root:/bin/bash
Podemos também utilizar a flag -v para retornar todas as linhas que não contém a expressão procurada.
Outras flags interessantes:
-i - Ignora diferença entre maiúsculas e minúsculas
-n - Mostra o número da linha encontrada
-A [n] - Mostra n linhas depois
-B [n] - Mostra n linhas antes
egrep
Similar ao grep, mas um pouco mais avançado. Alguns usos para o egrep:
Encontrar uma linha que contenha "user" ou "root":
egrep "root|user" /etc/passwd
Procurar por linhas que contenham a palavra Debian ou debian:
egrep [dD]ebian /etc/passwd
Procurar por linhas que começam com a letra “b”:
egrep ^b /etc/passwd
Procurar por linhas que terminam com a palavra “false”:
egrep false$ /etc/passwd
fgrep
Ao utilizar o fgrep toda operação de expressão regular será ignorada, tornando o
processo de localização muito mais rápido. Visualize o conteúdo do arquivo /etc/shadow:
cat /etc/shadow
Agora visualize apenas as linhas que contenham o caracter $:
fgrep $ /etc/shadow
sed
O comando sed é utilizado para procurar e substituir padrões em texto, mostrando o resultado em stdout. No sed, a expressão fica circunscrita entre barras(/). Por exemplo: Deletar as linhas comentadas do arquivo “/etc/fstab:
sed -i ’/^#/d' /etc/fstab
-e - Executa a expressão e comando a seguir.
ˆ - início de linha
# - string de busca
A letra d ao lado da expressão regular é um comando sed, que indica a exclusão de linhas contendo o respectivo padrão. Para substituir uma string, utilize a opção -s: Substitua todos os caracteres "#" por "@"em /etc/fstab:
sed -e s ’/#/@/’ /etc/fstab
Substitua agora os caracteres “/” por “@” :
sed -e s ’/\//@/’ /etc/fstab
Observe que você tem que escapar o caracter “/”, pois este é o separador dos campos.
Ou mais fácil, utilize outro separador de campos:
sed -e s ’|/|@|’ /etc/fstab
cut e awk
O comando “cut” pode ser muito útil para conseguir listagens a partir de arquivos com separadores de colunas definidos. Por exemplo, para conseguir o nome de todos os usuários da máquina, ou seja, a primeira coluna do arquivo “/etc/passwd” e também seu uid , cujo delimitador de colunas é o sinal “:”, podemos usar o comando:
cut -f1 ,3 -d: --output-delimiter=" " /etc/passwd > /root/uid
Onde:
-f - coluna
1,3 - coluna 1 e 3
-d - delimitador
--output-delimiter - delimitador da saída do comando
Para o mesmo exemplo acima, agora utilizando o awk:
awk -F : ’{print $1," ",$4} ’/etc/passwd > /root/uid
Onde:
-F - delimitador
print - imprime o valor da coluna especificada
$1 - coluna1
$4 - coluna4
“ “ - delimitador da saída do comando
join e paste
O comando “join” (unir), concatena registros de dois arquivos de texto baseado em índices comuns entre os registros.
Por exemplo, podemos unir os arquivos /root/uid e /root/gid, onde o índice em comum é o nome do usuário. Para isso usamos o seguinte comando:
join /root/uid /root/gid
O comando “paste”, junta os arquivos na saída padrão. Diferente do “join”, ele joga os dois arquivos lado-a-lado.:
paste /root/uid /root/gid
E por hoje é isso!
Fique ligado no blog que não estamos nem na metade do guia da LPI 1.
0 comentários:
Postar um comentário