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 ' ' ','