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