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

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

BackRE - Seu script de backup remoto

ShellBot - Crie Bots para Telegram em Shell Script

Entendendo, criando e editando pacotes Debian (.deb)

Backup automatizado com HD externo

GNU Parallel: criando atividades em paralelo com shell script

  
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