Aprenda os princípios básicos de como funciona o redirecionamento de E/S (entrada/saída) do Linux
Um dos tópicos mais importantes e interessantes na administração do Linux é o redirecionamento de E/S. Este recurso da linha de comando permite redirecionar a entrada e/ou saída de comandos de e/ou para arquivos, ou unir vários comandos usando pipes para formar o que é conhecido como “pipeline de comando” .
Todos os comandos que executamos produzem fundamentalmente dois tipos de saída:
- o resultado do comando – dados que o programa foi projetado para produzir, e
- o status do programa e mensagens de erro que informam ao usuário os detalhes de execução do programa.
No Linux e em outros sistemas semelhantes ao Unix, existem três arquivos padrão nomeados abaixo que também são identificados pelo shell usando números de descritores de arquivo:
- stdin ou 0 – está conectado ao teclado, a maioria dos programas lê a entrada deste arquivo.
- stdout ou 1 – é 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 é anexado à tela.
Portanto, o redirecionamento de E/S permite alterar 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 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 estão as bandeiras:
-b
– permite que top seja executado em modo batch, para que você possa redirecionar sua saída para 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 maneira:
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), 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 é igual a:
top -bn 5 1>top.log
Como redirecionar erro padrão para arquivo no Linux
Para redirecionar o erro padrão de um comando, você precisa especificar explicitamente o número do descritor do arquivo, 2
para que o shell entenda 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 conforme abaixo:
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 arquivo
Também é possível capturar toda a saída de um comando (saída padrão e erro padrão) em um único arquivo. Isso pode ser feito de duas maneiras possíveis, especificando os números do descritor de arquivo:
1. O primeiro é 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 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
). Implicando 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, assim:
ls -l /root/ &>>ls-error.log
Como redirecionar a entrada padrão para arquivo
A maioria, senão todos os comandos, obtém sua entrada da entrada padrão e, por padrão, a entrada padrão é anexada 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/saída padrão para arquivo
Você pode executar o redirecionamento de entrada padrão e saída padrão ao mesmo tempo usando o comando sort conforme abaixo:
sort <domains.list >sort.output
Como usar o redirecionamento de E/S usando pipes
Para redirecionar a saída de um comando como entrada de outro, você pode usar pipes, este é um meio poderoso de construir linhas de comando úteis para operações complexas.
Por exemplo, o comando abaixo listará os cinco principais arquivos modificados recentemente.
ls -lt | head -n 5
Aqui, as opções:
-l
– ativa o formato de listagem longa-t
– classifica por hora de modificação com os arquivos mais recentes mostrados primeiro-n
– especifica o número de linhas de cabeçalho a serem mostradas
Comandos importantes para construir pipelines
Aqui, revisaremos brevemente dois comandos importantes para construir pipelines de comando e são eles:
xargs que é usado para construir e executar linhas de comando a partir de entrada padrão. Abaixo está um exemplo de pipeline que usa 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
E as opções:
-n 1
– instrui 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 informações e opções de uso, leia a página de manualxargs:
man xargs
Um comando tee lê a entrada padrão e grava na saída e nos arquivos padrão. Podemos demonstrar como tee funciona da seguinte forma:
echo "Testing how tee command works" | tee file1
Filtros de arquivo ou texto são comumente usados com pipes para operações eficazes de arquivos Linux, para processar informações de maneiras poderosas, como reestruturar a saída de comandos (isso pode ser vital para a geração de relatórios úteis do Linux), modificar texto em arquivos e vários outros recursos de administração do sistema Linux. tarefas.
Para saber mais sobre filtros e pipes do Linux, leia este artigo Encontre os 10 principais endereços IP de acesso ao servidor Apache, que mostra um exemplo útil de uso de filtros e pipes.
Neste artigo, explicamos os fundamentos do redirecionamento de E/S no Linux. Lembre-se de compartilhar suas idéias por meio da seção de comentários abaixo.