Fluxos de Entrada e Saída no Linux: Domine o Redirecionamento de Dados

Fundamentos dos Descritores de Arquivo

No sistema operacional Linux, cada processo é inicializado com três fluxos de comunicação padrão, conhecidos como descritores de arquivo (file descriptors):

  • STDIN (0): Entrada padrão, que por definição recebe dados via teclado.
  • STDOUT (1): Saída padrão, direcionada por padrão para o terminal.
  • STDERR (2): Saída de erro, também anviada ao terminal para exibir falhas e diagnósticos.

Manipulando o Direcionamento de Saída

É possível alterar o destino das saídas utilizando operadores específicos, permitindo salvar logs ou suprimir mensagens.

  • >: Direciona a saída padrão (STDOUT) para um arquivo, sobrescrevendo o conteúdo existente.
  • 2>: Direciona apenas as mensagens de erro (STDERR).
  • &>: Captura tanto a saída comum quanto os erros em um único destino.
  • >>: Acrescenta a saída ao final do arquivo sem apagar o que já existe.

Para evitar a perda acidental de dados ao sobrescrever arquivos, pode-se ativar a proteção de shell:

set -C  # Impede a sobrescrita de arquivos existentes
# Para forçar a sobrescrita mesmo com a proteção ativa, utiliza-se o pipe:
echo "Dados" >| arquivo.txt
set +C  # Desativa a proteção

Exemplo prático de separação de logs:

find /var/log -name "*.log" > lista_arquivos.txt 2> erros_permissao.log

Para descartar saídas indesejadas, utilize o dispositivo nulo do sistema:

useradd novo_usuario &> /dev/null

Redirecionamento de Entrada (STDIN)

O operador < permite que um comando leia dados de um arquivo em vez de aguardar a digitação manual.

# Exemplo com o utilitário de cálculo bc
cat calculos.txt
10 * 5
100 / 4

bc < calculos.txt > resultados.out

Trensformação de Dados com o comando tr

O comando tr (translate) é utilizado para substituir ou excluir caracteres de um fluxo de texto.

Sintaxe básica: tr [OPÇÕES] CONJUNTO1 [CONJUNTO2]

  • -d: Remove os caracteres especificados.
  • -s: Compacta sequências de caracteres repetidos em um único caractree.
  • -t: Trunca o primeiro conjunto para o tamanho do segundo.
  • -c: Opera sobre o complemento do conjunto definido.

Exemplo de conversão de minúsculas para maiúsculas:

tr '[:lower:]' '[:upper:]' < /etc/hostname

Entrada Multilinha (Here Documents)

O recurso "Here Document" (<<) permite enviar múltiplas linhas de texto para um comando diretamente do script ou terminal até que um delimitador específico seja encontrado.

cat << TERMINAR > configuracao.conf
servidor=localhost
porta=8080
timeout=30
TERMINAR

Encadeamento com Pipelines

O pipe (|) conecta a saída de um comando diretamente à entrada do próximo, permitindo criar sequências complexas de processamento.

# Listar apenas diretórios e converter nomes para maiúsculas
ls -d */ | tr 'a-z' 'A-Z'

Para incluir o STDERR no pipeline, utiliza-se a construção |& ou 2>&1 |:

ls -R /root |& grep "Negada"

Multiplicação de Saída com tee

O comando tee é utilizado para salvar a saída em um arquivo e, ao mesmo tempo, exibi-la no terminal ou passá-la para outro comando no pipeline.

# Gera uma sequência, salva em arquivo e formata a saída
echo {1..10} | tee sequencia.txt | tr ' ' ','

Tags: Linux Bash ShellScript SysAdmin

Publicado em 9-4 23:43