Entendendo Pipes e Redirecionamento Para a Linha de Comando do Linux
Duas características poderosas do shell de linha de comando do Linux são o redirecionamento e os pipes, que permitem que a saída (ou até mesmo a entrada) de um programa seja enviada para um arquivo ou outro programa. Você pode já ter usado esses recursos sem estar ciente disso. Sempre que você usou o sinal “ > ” em um comando ou “ | ”, você utilizou redirecionamento ou um pipe, respectivamente.
Em todos os sistemas operacionais semelhantes ao Unix, como Linux e FreeBSD, a saída de um programa de linha de comando vai automaticamente para um lugar conhecido como saída padrão (stdout). Por padrão, a saída padrão é a tela (o console), mas isso pode ser alterado usando pipes e redirecionamento. Da mesma forma, o teclado é considerado a entrada padrão (stdin) e, assim como a saída padrão, pode ser alterado.
Pipes
Os pipes permitem que você canalize a saída de um comando para outro, onde será usada como entrada. Em outras palavras, a saída padrão de um programa se torna a entrada padrão de outro.
O comando “ more ” pega a entrada padrão e a pagina na saída padrão (a tela). Isso significa que, se um comando exibe mais informações do que podem ser mostradas em uma tela, o programa “ more ” pausará após a primeira página cheia e aguardará que o usuário pressione a tecla SPAÇO para ver a próxima página ou RETORNO para ver a próxima linha.
Aqui está um exemplo que listará todos os arquivos, com detalhes ( -la) no diretório /dev e enviará a saída para more. O diretório /dev deve ter dezenas de arquivos e, portanto, assegure-se de que o more precise paginar.
ls-la/dev |more
Note o prompt --More-- na parte inferior da tela. Pressione SPAÇO para ver a próxima página e continue pressionando SPAÇO até que a saída termine.
Aqui está outro exemplo de pipe, desta vez usando a ferramenta “ wc ” (contagem de palavras).
ls-1/dev |wcwc conta o número de linhas, palavras e caracteres na entrada padrão. Se você usar o parâmetro -l, ele exibirá apenas o número de linhas, que é uma boa maneira de ver quantos arquivos estão em um diretório!
O tutorial Olhar Profundo sobre os Comandos de Arquivamento e Compressão do Linux tem um exemplo usando tar e 7-Zip juntos:
tar cvf - *| 7zr a -si somefiles.tar.7zNeste caso, o hífen após a opção f diz ao tar para enviar sua saída para a saída padrão e não para um arquivo. A saída do tar será alimentada pelo pipe no 7zr, que está aguardando entrada da entrada padrão devido à opção -si.
Redirecionamento
O redirecionamento é semelhante aos pipes, exceto que usa arquivos em vez de outro programa. A saída padrão para um programa é a tela. Usando o símbolo > (maior que), a saída de um programa pode ser enviada para um arquivo. Aqui está uma listagem do diretório /dev novamente, mas desta vez redirecionada para um arquivo chamado listing.txt
ls-la> listing.txtNada será exibido no terminal, pois tudo foi enviado para o arquivo. Você pode dar uma olhada no arquivo usando o comando cat (que pode ser enviado para more) ou, para conveniência, você pode simplesmente usar o comando more por conta própria:
more listing.txtSe listing.txt já existisse, ele será sobrescrito. Mas você pode anexar a um arquivo existente usando >>, assim:
ls-la/home > listing.txt
ls-la/dev >> listing.txtO primeiro redirecionamento sobrescreverá o arquivo listing.txt, enquanto o segundo irá anexar a ele.
O comando cat pode ser usado para criar um arquivo usando redirecionamento, por exemplo:
cat> atextfile.txtAgora, qualquer texto que você digitar será enviado para o arquivo atextfile.txt até que você pressione Control-D, momento em que o arquivo será fechado e você será retornado ao prompt de comando. Se você quiser adicionar mais texto ao arquivo, use o mesmo comando, mas com dois sinais de maior ( >>).
Conclusão
Muitos dos programas da linha de comando do Linux são projetados para trabalhar com redirecionamento e pipes; tente experimentar com eles e veja como interagem. Por exemplo, a saída do comando ps, que lista os processos atuais, pode ser enviada para grep. Veja se você consegue descobrir como listar os processos pertencentes ao root.