LPIC 1 - 103.4 FLUXOS, PIPES (CANALIZAÇÃO) E REDIRECIONAMENTO DE SAÍDA

Neste tópico iremos ver como direcionar saídas padrão, entrada padrão e as mensagens de erro, tanto para arquivos quanto para comandos, utilizar saída de um comando para argumento de outros comandos e enviar simultaneamente para um arquivo e para stdout (saída padrão).


Peso 4

DESCRITORES DE ARQUIVOS

Nos sistemas Unix, temos 3 descritores padrões de arquivos, que processam a entrada padrão, saída padrão e erro padrão.
O descritor de entrada padrão (stdin) é o teclado. Já os descritores de saída (stdout) e erro padrão (stderr) são a tela do computador, no caso, o terminal.

Dessa forma temos:

Entrada padrão (stdin)- é o fluxo de entrada de texto atribuída ao teclado (descritor de arquivos 0)
Saída padrão (stdout) - é a saída normal dos programas, atribuída ao terminal (descritor de arquivos 1)
Erro padrão (stderr) - fluxo de saída de texto para identificar erros. Também está atribuído ao terminal (descritor de arquivo 2)

CANALIZAÇÃO - PIPES

O uso do pipe (|) envia a saída de um comando para a entrada de um outro comando.

Exemplo:
cat /etc/group | nl - exibe a saída do comando cat, que vai servir como entrada para o comando nl.
ls /etc | less - executa o comando ls, que canaliza para o less paginar a saída.

REDIRECIONAMENTOS - <, >, >>, <<

Para redirecionarmos a saída padrão de um programa para um arquivo, usamos o redirecionador > (maior-que). Exemplo:

ls / > lista.txt - neste exemplo, a saída não será mostrada na tela, e sim, será redirecionada para o arquivo lista.txt. Se o arquivo não existir, ele será criado. Porém, se existir, ele será substituído.
Para não sobrescrever o arquivo e todo o conteúdo que ele contém, usamos o redirecionador >>.

Exemplo:
echo "Mensagem de texto" >> lista.txt

















Até agora, vimos somente a entrada padrão (stdin) e a saída padrão (stdout). E para redirecionarmos o erro padrão (stderr)?
Se executarmos o comando cp, ele retornará uma saída de erro informando que falta argumentos. Podemos transferir a saída de erro com o comando:
cp > erro.txt

Ops. A saída de erro foi mostrada na tela, o arquivo foi criado, porém está vazio. Por que? Por que o que foi redirecionado foi a saída padrão, e não o erro padrão. Para direcionarmos o erro padrão, temos que colocar o descritor de arquivos 2 na frente do redirecionador maior-que >, dessa forma:

cp 2> erro.txt

Agora sim! Lembrando que se colocarmos apenas um > o arquivo será sobrescrito e se não existir ele será criado. Para não sobrescrever o arquivo, adicionamos o >>.

cp 2>> erro.txt

E para exibir a saída na tela e enviar para o arquivo ao mesmo tempo? Nesse caso usamos o comando tee.

TEE

Envia a saída e padrão para a tela e para um arquivo ao mesmo tempo.

Exemplo:

ls -l /home/usuario | tee conteúdo

Podemos usar a opção -a para aglutinar as saídas e não sobrescrever o conteúdo dos arquivos (parecido com a opção >>).

Para redirecionarmos o erro e a saída padrão, usamos o E comercial - & - seguido do sinal maior >.

Para enviarmos o conteúdo de um arquivo para a entrada de outro, usamos o redirecionador <.

cat < /etc/group

O << redireciona a entrada e deixa a entrada aberta até que seja digitado algum EOF - End of File.
Exemplo:
cat << acaba - será liberado a entrada para o usuário digitar um texto e só irá acabar quando a palavra "acaba" for digitada no inicio da linha.

XARGS

Tem como objetivo principal construir listas de parâmetros a partir de sua entrada padrão e passa para a execução de outros programas ou instruções, tantas vezes for especificado.
Por padrão, o comando xargs utiliza o comando echo. Se você utilizar o xargs sem nenhum parâmetro, ele simplesmente vai ecoar o texto digitado.

Sintaxe:
xargs [opções] comando [argumentos]

Exemplos:

find . -name "*.txt" | xargs rm -f - procura no diretório atual (.) todos os arquivos terminados em .txt e deleta.

Uma opção interessante do xargs é a opção -n. Essa opção faz com que o xargs especifique quantas vezes a saída irá ser executada por vez.

Outras opções:
-a - lê a entrada de um arquivo no lugar da entrada padrão
-p - modo interativo. Pergunta confirmação do usuário a cada execução do comando.

Vamos criar 9 arquivos de texto.
touch arquivo{1..9}.txt





find . -name "*.txt" | xargs -n 3 -p rm - o comando find procurou todos os arquivos .txt e canalizou (|) o resultado da busca para o xargs que executou de 3 em 3 (-n 3), a deleção dos arquivos (rm), pedindo confirmação (-p) para cada execução do comando.



Comentários