Revista Do Linux
EDIÇÃO DO MÊS
 Gráficos
 Comandos Avançados
 Portáteis

 Capa
 Entrevista
 CD
 Distro
 GNU
 Evento
 Depoimento
 Programação

 

Pipelines

A partir desta edição iniciaremos uma série de dicas exemplificadas de como usufruir o máximo do poder da linha de comando do Linux.

Imagine que seu chefe (nada nervoso), peça a você uma lista de usuários cadastrados atualmente no seu servidor. Como você faria para construir esse relatório no menor tempo possível? Aqui vai um exemplo.

Todos nós sabemos que a lista de usuários cadastrados no Linux fica em um arquivo tipo texto no diretório /etc, cujo nome é passwd.

Para aqueles que não conhecem a formatação do arquivo, segue a instrução abaixo: cada linha do arquivo passwd é um registro de um usuário cadastrado, neste registro possuímos algumas informações vitais do usuário separadas pelo caractere ":" (dois-pontos). Exemplo no quadro abaixo.

Se o arquivo é do tipo texto e já possui todos os dados do usuário, fica fácil. É só fornecer este arquivo, certo? Certo, mas se o seu chefe pedir um relatório que possua a seguinte formatação:

LOGIN -> DESCRICAO

Login -> Descrição

Aí precisaríamos desenvolver um pequeno aplicativo para ler o arquivo e formatar a saída conforme a nossa necessidade, certo? Errado! Com o poder da linha de comando do Linux podemos fazer esse relatório em segundos conhecendo o mínimo ou até mesmo nada de programação. Para isso vamos utilizar os PIPELINES. PIPELINES são uma seqüência de um ou mais comandos separados pelo caractere "|" (pipe). A saída-padrão do comando é conectada à entrada-padrão do próximo comando. Exemplo:

comando1 | comando2

Agora vamos ver isso na prática. Para listar o conteúdo do arquivo passwd utilizaremos o comando "cat" e para separar os campos usaremos o interpretador "awk". Essa não é a única maneira de extrair o relatório, portanto, use os comandos que você mais conhece.

cat /etc/passwd | awk -F":" ‘{print $1"\t->\t",$5}’
root -> root
bin -> bin
daemon -> daemon
adm -> adm
lp -> lp

sync -> sync
halt -> halt
mail -> mail
news -> news
uucp -> uucp
games -> games
gopher -> gopher
ftp -> FTP User
nobody -> Nobody
named -> Domain name server
xfs -> X Font Server
mysql -> MySQL server
edison -> Edison Figueira Junior

Olha que belo relatório! O comando awk recebe a saída-padrão do comando cat e a processa a cada linha recebida. A opção -F do awk é usada para informar o delimitador de cada campo. Separados os campos, podemos usar o print do awk para imprimir a saída conforme nossa necessidade.

Mas você entregaria esse relatório a seu chefe sem que ele estivesse indexado? Para indexar use o comando sort.

cat /etc/passwd | awk -F":" ‘{print $1"\t->\t",$5}’ | sort

Porém, se o seu chefe precisar que o relatório seja indexado pelo campo de descrição, o que você faria?

cat /etc/passwd | awk -F":" ‘{print $1"\t->\t",$5}’ | sort +2

A opção +2 no comando sort, especificada no comando acima, serve para indexar o resultado a partir da coluna 2 e separar por espaços.

Redirecione a saída do comando para um arquivo qualquer.

cat /etc/passwd | awk -F":" ‘{print $1"\t->\t",$5}’ | sort +2 >relatorio.txt

Agora imagine que você precise alterar os direitos de todos os diretórios (somente os diretórios) que pertençam a um determinado usuário em todo o seu sistema de arquivos. Uma maneira simples de fazer isso é usar o comando:

find / -type d -user edison -exec chmod u-w {} \;

Nesse caso não estamos utilizando pipelines diretamente, mas sim um recurso do comando find, a opção -exec. Essa opção do find é interessante porque é possível executar qualquer comando utilizando como seu parâmetro o resultado de cada linha do find, que será substituído pelas chaves ({}).

Edison Figueira Jr.
efigueira@brc.com.br

 

A Revista do Linux é editada pela Conectiva S/A
Todos os Direitos Reservados.

Política de Privacidade
Anuncie na Revista do Linux