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: 10.635 ]

Por: Anonimo Oculto Culto em 06/08/2018


Introdução



A máxima: tudo é arquivo. Arquivos de dispositivo.

No mundo dos sistemas operacionais similares ao Unix há uma máxima: tudo é arquivo. Transferência ou leitura de dados diretamente aos dispositivos físicos (hardware) são feitas através de comandos de escrita e leitura em "arquivos de dispositivo" dinamicamente alocados pelo próprio núcleo do sistema em pontos específicos da árvore de diretórios. Comunicações entre processos também seguem a máxima. [Ref.: 1 | 2 ]

Nos velhos tempos dos terminais burros - dispositivos capazes apenas de exibir dados por eles recebidos usando caracteres alfanuméricos em suas telas, e de repassar dados captados via teclados, através de cabos seriais padrão rs232, à unidade realmente responsável pelo processamento - em um computador dotado usualmente de uma placa multisserial que lhe conferia o controle de múltiplos terminais burros simultaneamente, tais portas físicas de comunicação eram abertas para escrita e leitura, pelo sistema "Unix-like", através de arquivos de dispositivo nomeados "ttyS0", "ttyS1", "ttyS2", etc. alocados no diretório /dev. O nome de tais arquivos remete a "teletype", teletipo em Português, S significando serial.
FIGURA 01: um terminal de vídeo modelo VT420 conectado ao seu teclado e, segundo informações em sua tela, à primeira porta serial (ttyS0) um servidor (não mostrado) com sistema operacional openSUSE Linux 11.1. Junto ao rodapé o cabo de força (preto) e o cabo serial padrão RS232 (cinza) para conexão ao servidor.

Crédito da imagem: Jacek Ruzyczka - Wikimedia Commons - Licença de uso: Creative Commons CC BY-SA 3.0 [Ref.: 3]

Em dias atuais, não se têm mais tais dispositivos físicos, mas dadas a inexorável necessidade de comunicação entre o usuário e o sistema, estes são emulados no próprio console (teclado e monitor) do servidor. Elucidando, nas distribuições Linux atuais, têm-se consoles virtuais de texto acessíveis através da combinação de teclas CTRL-ALT-F1 até CTRL-ALT-F6; o número deles variando com a distribuição. E dentro do ambiente gráfico, têm-se também vários programas emuladores distintos que simulam terminais em janelas; entre eles o gnome-terminal no ambiente Gnome e o konsole no ambiente KDE.

O konsole é um programa do ambiente gráfico KDE que simula os antigos teletipos citados, e igualmente, a comunicação com instâncias desses pseudoteletipos é feita através de arquivos de dispositivo, às vistas do servidor, que operam de forma análoga aos antigos arquivos ttySx. Cada instância de pseudoterminal (cada janela do konsole) - e doravante o dito valendo também para outros pseudoterminais gráficos como os do gnome-terminal - representa, para todos os efeitos, um terminal burro outrora fisicamente situado em local efetivamente distinto do servidor. Cada janela de pseudoterminal funciona como um monitor independente dos demais, e a janela do pseudoterminal com o foco é para todos os efeitos o terminal proprietário do teclado do servidor.
Linux: Brincando com pseudoterminais e redirecionamentos
FIGURA 02: o openSUSE é uma distribuição Linux que permite a instalação concomitante de ambientes gráficos distintos. Na imagem, quatro programas de pseudoterminais diferentes: o konsole (padrão no KDE), o gnome-terminal (padrão no GNOME), o xfce4-terminal (padrão no XFCE) e o lxterminal (padrão no LXDE). O comando "tty" exibe o arquivo de dispositivo do terminal; rigorosamente "o nome do arquivo conectado à entrada padrão" do shell (no caso o bash) que o invoca. Repare que as instâncias de pseudoterminais e suas respectivas instâncias atreladas de shell têm, cada qual, um PID (número de processo) único. O shell (bash) e o pseudoterminal são efetivamente instâncias distintas. [Ref.: 4 | 5 | 6 | 7]

Os arquivos de dispositivo dos terminais do konsole são alocados por suas instâncias dentro do diretório /dev/pts/ ; sendo os arquivos nomeado sequencialmente através de dígitos à medida que se abrem pseudoterminais. O primeiro terminal aberto atrela-se ao arquivo /dev/pts/1 ; a segunda instância ao arquivo /dev/pts/2, e assim por diante. A abreviação pts remete à pseudoterminal. Algo similar ocorre para os terminais de console acessíveis via CTRL-ALT-F1, CTRL-ALT-F2, etc., neste caso seus respectivos arquivos de dispositivos situando-se diretamente dentro do diretório de dispositivos: /dev/tty0 ; /dev/tty1 ; etc. [Ref.: 8 ]

Leituras e escritas nesses arquivos de dispositivos refletem a transmissão de dados entre (as respectivas instâncias de) teletipos e as respectivas instâncias de programas que solicitaram a escrita ou leitura de em tais teletipos (em nosso caso, o shell bash).

    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

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

Shell Script como serviço no Windows

Simples sistema de backup com acesso remoto

Entendendo, criando e editando pacotes Debian (.deb)

Relatório de sistema via browser (shell script + CGI)

  
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