Um dos temas 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 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 essencialmente dois tipos de saída:
- o resultado do comando – os dados que o programa foi projetado para produzir,
- as mensagens de status e erro do programa, que informam ao usuário os detalhes de execução do programa.
No Linux e em outros sistemas Unix-like, há três arquivos padrão denominados abaixo, que também são identificados pela shell usando números de descritor de arquivo:
- stdin ou 0 – está conectado ao teclado, a maioria dos programas lê a entrada deste arquivo.
- stdout ou 1 – está anexado à tela, e todos os programas enviam seus resultados para este arquivo e
- 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, onde nós queremos armazenar a saída do comando top para inspeção posterior:
$ top -bn 5 >top.log
Onde as flagas:
-b
– habilita o top para executar em modo de lote, então você pode redirecionar sua saída the um arquivo ou outro comando.-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 acrescentar a saída de um comando, use o operador “>>”
.
Por exemplo, para acrescentar a saída do comando top acima no arquivo top.log especialmente dentro de um script (ou na linha de comando), digite 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 a Saída de Erro Padrão para um Arquivo no Linux
Para redirecionar a saída de 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 produzirá 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

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 do descritor de arquivos:
1. A primeira é um método relativamente antigo que funciona da seguinte maneira:
$ 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 em seguida, escreverá todas as mensagens de erro no descritor de arquivo 2 (saída padrão) que foi redirecionado para o arquivo ls-error.log (usando 2>&1
). Implicando que o erro padrão também é enviado para o mesmo arquivo que a saída padrão.
2. O segundo método direto é o seguinte:
$ 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 maneira:
$ ls -l /root/ &>>ls-error.log
Como Redirecionar a Entrada Padrão para um Arquivo
A maioria, se não todos, os comandos recebem sua entrada da entrada padrão e, por padrão, a entrada padrão está ligada ao teclado.
Para redirecionar a entrada padrão de um arquivo diferente do teclado, use o operador “<”
conforme abaixo:
$ cat <domains.list

Como Redirecionar Entrada Padrão/Saída para um Arquivo
Você pode realizar redirecionamento de entrada padrão, saída padrão ao mesmo tempo usando o comando sort conforme abaixo:
$ sort <domains.list >sort.output
Como Usar Redirecionamento de E/S Usando Tubos
Para redirecionar a saída de um comando como entrada de outro, você pode usar tubos, que é uma forma poderosa de criar linhas de comando úteis para operações complexas.
Por exemplo, o comando abaixo irá listar as cinco principais modificações recentes em arquivos.
$ ls -lt | head -n 5
Aqui, as opções:
-l
– ativa o formato de listagem longa-t
– ordena por data de modificação com os arquivos mais recentes são mostradas primeiro-n
– especifica o número de linhas de cabeçalho a mostrar
Comandos Importantes para Construção de Tubos
Aqui, nós brevemente revisaremos dois comandos importantes para construir linhas de comando em tubos e eles são:
xargs é usado para construir e executar linhas de comando a partir do stdin. Abaixo está um exemplo de um pipeline que usa xargs, este comando é usado para copiar um arquivo para múltiplos diretórios no Linux:
$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh

E as opções:
-n 1
– instrui o xargs a usar, no máximo, um argumento por linha de comando e enviar para o comando cpcp
– copia o arquivo-v
– exibe o progresso do comando de cópia.
Para mais opções de uso e informações, leia a página de manual de 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

Filtros de arquivo ou texto são comumente usados com pipe para operações de arquivo eficientes no Linux, para processar informações de modo poderoso, como reestruturar a saída de comandos (isto pode ser vital para a geração de relatórios úteis no Linux), modificar texto em arquivos e muitas outras tarefas de administração do sistema Linux.
Para saber mais sobre os filtros e os tubos no Linux, leia este artigo Encontre os 10 IP Mais Frequentes que Acessam o Servidor Apache, que mostra um exemplo útil de uso de filtros e tubos.
Neste artigo, explicamos os fundamentos da redireção de E/S no Linux. Lembre-se de compartilhar suas ideias através da seção de feedback abaixo.
Source:
https://www.tecmint.com/linux-io-input-output-redirection-operators/