Processos Unix geralmente abrem três descritores padrões de arquivos, que os permitem processar entrada e saída de dados. Podem ser redirecionados de e para outros arquivos ou processos. Muito utilizado nas atividades diárias de um sysadmin.
- Por padrão, a entrada de dados padrão (stdin) é o teclado.
- A saída padrão de dados (stdout) é a tela do computador.
- A saída padrão de erros (stderr) também é a tela do computador
Os valores numéricos para esses descritores são:
- 0 para o stdin;
- 1 para stdout e;
- 2 para stderr.
Também podem ser acessados através dos dispositivos virtuais, /dev/stdin, /dev/stdout e /dev/stderr.
Para redirecionar a saída de um comando para um arquivo, utiliza-se o operador > após o mesmo. Detalhes importantes:
- Se o arquivo não existir ele será criado.
- Se o arquivo existir ele será sobrescrito.
Exemplos:
cat /etc/services > /home/sysadmin/teste.txt
cat /etc/resolv.conf > /home/sysadmin/teste.txt
Para adicionar conteúdo ao fim de um arquivo sem sobrescrevê-lo usamos o operador `>>` após o mesmo. Se o arquivo não existir ele será criado.
cat /etc/resolv.conf >> /home/sysadmin/resultado.txt
Como você deve ter adivinhado, podemos usar o operador < para enviar dados “para o outro lado”. No exemplo a seguir, redirecionamos o STDIN do comando wc com dados originados diretamente do arquivo que geramos na seção anterior. Vamos tentar isso com wc -l que conta caracteres no arquivo. Exemplo:
wc -l < /home/sysadmin/teste.txt
De acordo com a especificação POSIX, e informado acima, os descritores de arquivo para STDIN, STDOUT e STDERR são definidos como 0, 1 e 2, respectivamente. Esses números são importantes, pois podem ser usados para manipular os fluxos de dados correspondentes da linha de comando enquanto executa ou junta diferentes comandos juntos.
Para entender melhor como os números do descritor de arquivo funcionam, considere este exemplo que redireciona o erro padrão (STDERR):
cat /etc/andre 2> erros.txt
cat erros.txt
Canalização (Pipe), envia a saída de um comando para a entrada de outro comando, utilizando o caractere de canalização |. Muito utilizado para se fazer filtros.
Exemplos:
cat /etc/passwd | wc -l
netstat -nat | grep :80 | grep ESTAB | wc -l
É possível redirecionar simultaneamente a saída de um comando tanto para um arquivo quanto para a saída padrão, através do comando tee. Será exibida a saída do comando na tela e para dentro de um arquivo ao mesmo tempo.
Exemplo:
# cat /etc/passwd | cut -d : -f1 | tee usuarios.txt