Conforme descrito em páginas anteriores, uma instância de um programa Unix-similar mantém internamente uma tabela com ponteiros para arquivos - com descritores de arquivos - mediante os quais a instância se comunica com o restante do sistema. Igualmente, dispositivos físicos são acessados via os assim chamados arquivos de dispositivos alocados em pontos específicos da árvore de diretórios no sistema de arquivos (usualmente na pasta /dev). Instâncias de software podem se comunicar via arquivos, como os "soquetes", especificamente destinados a tal fim.
Há três descritores de arquivos fundamentais nas instâncias de um programa Unix-similar: o descritor "0", que aponta a entrada padrão de dados, o descritor "1", que aponta a saída padrão de dados; e o descritor "2", que aponta a saída padrão de erro (ou informações de controle) geradas pela instância do programa em execução.
O Bash - o shell padrão do projeto GNU - fornece alguns comandos que permitem redirecionar os descritores padrão, copiá-los ou mesmo criar outros descritores. Quaisquer arquivos com acesso permitido podem em princípio ser abertos para escrita ou leitura pela instância do programa e assim acessados uma vez referenciados em descritores de arquivos. [Ref.: 9 | 20]
Eis alguns exemplos na prática.
O comando" ls" lista os arquivos e diretórios presentes no ponto específico do sistema de arquivos solicitado. Uma saída típica do comando "
ls -la /dev/fd/" é vista abaixo. Lembrando, uma forma de se "visualizar" os descritores de arquivos de uma instância de programa em particular e seus apontamentos é listar a partir da instância o diretório citado (recomenda-se mudar o diretório de trabalho para /dev/fd/ e posteriormente listá-lo: cd /dev/fd/ ; ls -la). [Ref.: 14 | 15 | 16]
total 0
dr-x------ 2 chieza users 0 Jul 7 15:46 .
dr-xr-xr-x 9 chieza users 0 Jul 7 15:46 ..
lrwx------ 1 chieza users 64 Jul 7 15:46 0 -> /dev/pts/1
lrwx------ 1 chieza users 64 Jul 7 15:46 1 -> /dev/pts/1
lrwx------ 1 chieza users 64 Jul 7 15:46 2 -> /dev/pts/1
lrwx------ 1 chieza users 64 Jul 7 15:46 255 -> /dev/pts/
Conforme dito anteriormente, estes são os apontamentos dos descritores de arquivos da instância do bash em execução (herdados pelo comando ls). A entrada e saídas padrão apontam para o arquivo de dispositivo do pseudoterminal do konsole em questão.
Vejamos agora a saída desses dois comandos:
ls -la /dev/fd/ >~/redirecionamentos.txt ; cat ~/redirecionamentos.txt
total 0
dr-x------ 2 chieza users 0 Jul 7 16:03 .
dr-xr-xr-x 9 chieza users 0 Jul 7 16:03 ..
lrwx------ 1 chieza users 64 Jul 7 16:03 0 -> /dev/pts/1
l-wx------ 1 chieza users 64 Jul 7 16:03 1 -> /home/chieza/redirecionamentos.txt
lrwx------ 1 chieza users 64 Jul 7 16:03 2 -> /dev/pts/1
lr-x------ 1 chieza users 64 Jul 7 16:03 3 -> /proc/13064/fd
Acima o comando "ls" é igualmente executado, mas antes a saída padrão da instância (descritor 1) é redirecionada ao arquivo "redirecionamentos.txt"; e a saída de dados do comando é de fato gravada dentro deste arquivo, não sendo exibida na tela. O redirecionamento é obtido através da instrução "> NomeDoArquivo" na linha de comando. [Ref.: 9 | 20 | 23]
O comando "cat" seguinte, separado do ls pelo ";" , exibe o conteúdo do arquivo; o til sendo uma abreviação para o diretório "home" do usuário, onde o arquivo foi gravado e lido. Repare que neste exemplo a entrada e a saída de erro padrões não foram afetadas, e eventuais erros no processamento são exibidos na tela do terminal (/dev/pts/1); ao passo que apenas os dados vão ao arquivo. [Ref.: 9 | 21]
Para os leigos, "-la" junto ao "ls¨ acima são parâmetros passados ao comando "ls" que definem como ele irá se comportar; ou seja, dita ao comando quais informações deve selecionar para exibição e como formatá-las na saída. Todo comando geralmente tem um página de manual explicativa. Para detalhes, execute "man" (de manual) seguido pelo nome do comando desejado: "man ls" no caso. Em particular, pesquise pelo comando "exec". Será necessário futuramente. [Ref.: 14 | 22]
Não apenas a saída padrão mas também a entrada e a saída de erro podem ser redirecionadas, seguindo-se as instruções descritas na Carta de Redirecionamentos abaixo. Analise-a com cuidado antes de dar sequência à leitura.
FIGURA 05: Carta Resumo explanando as principais formas de se redirecionar a entrada e as saídas padrão, ou de se adicionar e remover outros descritores de arquivo; junto aos comandos invocados a partir da instância do shell (bash) ou junto ao próprio shell (bash) em execução. [Ref.: 23]
Entendidas as noções de descritor de arquivo, arquivo descritor, arquivo de dispositivo e redirecionamentos, finalmente está-se apto a visualizá-las na prática, "graficamente", o que se fará na próxima seção. Boa leitura e prática...