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

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

Assinatura de documentos PDF em lote via Bash

Ingressando estações de trabalho Ubuntu no AD com Closed In Directory

Script GitPratico para criar repositórios remotos sem logar no GitHub

pam_mount e CiD - Gerenciamento centralizado dos mapeamentos de unidades de rede no Ubuntu

Alta disponibilidade de links

  
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