Aprenda os Conceitos Básicos de Como a Redirecionamento de E/S (Entrada/Saída) do Linux Funciona

Um dos assuntos mais importantes e interessantes na administração do Linux é a redirecionamento de E/S. Essa funcionalidade da linha de comando permite que você redirecione a entrada e/ou saída de comandos de e/ou para arquivos, ou junte vários comandos usando tubos para formar o que é conhecido como uma “pipeline de comandos”.

Todos os comandos que executamos produzem basicamente dois tipos de saída:

  1. o resultado do comando – os dados que o programa foi projetado para produzir, e
  2. as mensagens de status e erro do programa, que informam ao usuário os detalhes de execução do programa.

No Linux e outros sistemas Unix-like, há três arquivos padrão denominados abaixo, que também são identificados pelo shell usando números de descritor de arquivo:

  1. stdin ou 0 – ele é conectado ao teclado, a maioria dos programas lê entrada deste arquivo.
  2. stdout ou 1 – ele é anexado à tela, e todos os programas enviam seus resultados para este arquivo e
  3. stderr ou 2 – os programas enviam mensagens de status / erro para este arquivo, que também está anexado à tela.

Portanto, o redirecionamento de E/S permite que você altere a fonte de entrada de um comando, bem como para onde sua saída e mensagens de erro são enviadas. E isso é possível graças aos operadores de redirecionamento “<” e “>”.

Como redirecionar a saída padrão para um arquivo no Linux

Você pode redirecionar a saída padrão como no exemplo abaixo, aqui, queremos armazenar a saída do comando top para inspeção posterior:

$ top -bn 5 >top.log

Onde as flags:

  1. -b – habilita o top para rodar em modo de lote, para que você possa redirecionar sua saída para um arquivo ou outro comando.
  2. -n – especifica o número de iterações antes do comando terminar.

Você pode visualizar o conteúdo do arquivo top.log usando o comando cat da seguinte forma:

$ cat top.log

Para anexar a saída de um comando, use o operador “>>”.

Por exemplo, para anexar a saída do comando top acima no arquivo top.log especialmente dentro de um script (ou na linha de comando), insira a linha abaixo:

$ top -bn 5 >>top.log

Nota: Usando o número do descritor de arquivo, o comando de redirecionamento de saída acima é o mesmo que:

$ top -bn 5 1>top.log

Como Redirecionar o Erro Padrão para um Arquivo no Linux

Para redirecionar o erro padrão de um comando, você precisa especificar explicitamente o número do descritor de arquivo, 2, para o shell entender o que você está tentando fazer.

Por exemplo, o comando ls abaixo irá gerar um erro quando executado por um usuário normal do sistema sem privilégios de root:

$ ls -l /root/

Você pode redirecionar o erro padrão para um arquivo da seguinte forma:

$ ls -l /root/ 2>ls-error.log
$ cat ls-error.log 
Redirect Standard Error to File

Para anexar o erro padrão, use o comando abaixo:

$ ls -l /root/ 2>>ls-error.log

Como redirecionar a saída/erro padrão para um único arquivo

Também é possível capturar toda a saída de um comando (tanto a saída padrão quanto o erro padrão) em um único arquivo. Isso pode ser feito de duas maneiras possíveis, especificando os números de descritor de arquivo:

1. O primeiro é um método relativamente antigo que funciona da seguinte forma:

$ ls -l /root/ >ls-error.log 2>&1

O comando acima significa que o shell primeiro enviará a saída do comando ls para o arquivo ls-error.log (usando >ls-error.log), e então escreverá todas as mensagens de erro para o descritor de arquivo 2 (saída padrão) que foi redirecionado para o arquivo ls-error.log (usando 2>&1). Isso implica que o erro padrão também é enviado para o mesmo arquivo da saída padrão.

2. O segundo método direto é:

$ ls -l /root/ &>ls-error.log

Você também pode anexar a saída padrão e o erro padrão a um único arquivo da seguinte forma:

$ ls -l /root/ &>>ls-error.log

Como redirecionar a entrada padrão para um arquivo

A maioria, senão todos, os comandos obtém sua entrada a partir da entrada padrão, e por padrão a entrada padrão está associada ao teclado.

Para redirecionar a entrada padrão de um arquivo que não seja o teclado, use o operador “<” como abaixo:

$ cat <domains.list 
Redirect Standard Input to File

Como Redirecionar a Entrada/Saída Padrão para um Arquivo

Você pode realizar a redireção da entrada padrão e saída padrão ao mesmo tempo usando o comando sort como abaixo:

$ sort <domains.list >sort.output

Como Usar Redirecionamento de E/S Usando Pipes

Para redirecionar a saída de um comando como entrada de outro, você pode usar pipes, que é um meio poderoso de construir linhas de comando úteis para operações complexas.

Por exemplo, o comando abaixo irá listar os cinco arquivos modificados recentemente.

$ ls -lt | head -n 5 

Aqui, as opções:

  1. -l – habilita o formato de listagem longa
  2. -tordena por tempo de modificação com os arquivos mais recentes são mostrados primeiro
  3. -n – especifica o número de linhas de cabeçalho a serem exibidas

Comandos Importantes para Construir Pipelines

Aqui, iremos revisar brevemente dois comandos importantes para construir pipelines de comando e eles são:

xargs que é usado para construir e executar linhas de comando a partir da entrada padrão. Abaixo está um exemplo de um pipeline que utiliza xargs, este comando é usado para copiar um arquivo em vários diretórios no Linux:

$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh
Copy Files to Multiple Directories

E as opções:

  1. -n 1 – instrui xargs a usar no máximo um argumento por linha de comando e enviar para o comando cp
  2. cp – copia o arquivo
  3. -vexibe o progresso do comando de cópia.

Para mais opções de uso e informações, leia a página do manual do xargs.

$ man xargs 

A tee command reads from standard input and writes to standard output and files. We can demonstrate how tee works as follows:

$ echo "Testing how tee command works" | tee file1 
tee Command Example

Filtros de arquivo ou texto são comumente usados com pipes para operações de arquivo Linux eficazes, para processar informações de maneiras poderosas, como reestruturar a saída de comandos (isso pode ser vital para geração de relatórios úteis do Linux), modificar texto em arquivos e várias outras tarefas de administração do sistema Linux.

Para saber mais sobre filtros e pipes do Linux, leia este artigo Encontre os 10 principais endereços IP acessando o servidor Apache, mostra um exemplo útil de uso de filtros e pipes.

Neste artigo, explicamos os fundamentos da redireção de E/S no Linux. Lembre-se de compartilhar seus pensamentos através da seção de feedback abaixo.

Source:
https://www.tecmint.com/linux-io-input-output-redirection-operators/