Brincando com pseudoterminais e redirecionamentos

Há uma máxima no mundo dos sistemas similares ao Unix: tudo é arquivo. Dispositivos físicos, processos ou instâncias de programas comunicam-se um com os outros através de arquivos de dispositivo ou arquivos em dispositivos referenciados em nível de execução de software em descritores de arquivos. Neste artigo ver-se-ão alguns exemplos que auxiliarão na compreensão deste princípio conforme implantado em várias distribuições Linux modernas.

[ Hits: 11.301 ]

Por: Anonimo Oculto Culto em 06/08/2018


A máxima nos sistemas Unix-similares: tudo é arquivo. Arquivos descritores e redirecionamentos



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...

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. A máxima nos sistemas Unix-similares: tudo é arquivo. Bash e os descritores de arquivos
   3. A máxima nos sistemas Unix-similares: tudo é arquivo. Bash e os arquivos descritores
   4. A máxima nos sistemas Unix-similares: tudo é arquivo. Arquivos descritores e redirecionamentos
   5. A máxima nos sistemas Unix-similares: tudo é arquivo. Pseudoterminais e redirecionamentos (saídas)
   6. A máxima nos sistemas Unix-similares: tudo é arquivo. Pseudoterminais e redirecionamentos (entrada)
   7. A máxima nos sistemas Unix-similares: tudo é arquivo. Referências - Comentários - Créditos às imagens
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Redundância de link de internet

Gerar músicas aleatórias com YAD (Modo Gráfico)

cal2svg - brincando com shell script e arquivos vetoriais SVG

Monitoramento de pops para provedores

Blacklist - O que é? Como consultar o IP? Como automatizar?

  
Comentários
[1] Comentário enviado por albfneto em 06/08/2018 - 14:02h

Seu artigo é ótimo, excelente. Bem escrito, muito detalhado.
favoritado,
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].

[2] Comentário enviado por anonimoculto em 06/08/2018 - 19:18h

@Albfneto: fico grato ter apreciado. À disposição.

[3] Comentário enviado por binbash em 25/08/2018 - 00:29h

Favoritei!


"Primeiro eles te ignoram, depois riem de você, depois brigam, e então você vence."
Mahatma Gandhi
http://terminalroot.com.br/shell

[4] Comentário enviado por F4xl em 18/10/2018 - 08:22h

Parabéns pelo excelente artigo! É praticamente um livro pronto!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts