No Unix, o que significa "Tudo é um fluxo de bytes"?

No Unix, o que significa "Tudo é um fluxo de bytes"?

Sou um novato no Linux e, ao explorar o sistema de arquivos, muitas vezes encontro a frase "Tudo é um arquivo". Vejo uma resposta para esta perguntaaquimas ainda não consigo entender o conceito. Na resposta é mencionado que precisamente "Tudo é um fluxo de bytes"

Não estou entendendo o que significa dizer que monitor/teclado etc. é representado como "fluxo de bytes". Alguém pode me ajudar a visualizar isso?

Responder1

“Tudo é um arquivo” é um slogan, por assim dizer. Um meme, se você quiser. Não é exatamente verdade.

Obviamente, os dispositivos de hardware não são arquivos reais da mesma maneira que hello.txtseria um sistema de arquivos ext4. Muitos deles nem têm nada a ver com dispositivos de armazenamento.

Mas mesmo que nem tudo seja umarquivo, uma série de coisas podem seracessado como seeram arquivos, pelo menos um pouco. Ou seja, eles têm um nome na árvore do sistema de arquivos e as chamadas de sistema read()e write()podem ser usadas para eles. Este último é especialmente importante se considerarmos o sentido de que "tudo é um fluxo de bytes", uma vez que essas chamadas acessam fluxos de bytes.

Como as mesmas chamadas de sistema funcionam para arquivos regulares, dispositivos de disco brutos, terminais, soquetes de rede e pipes, o mesmo conjunto de ferramentas pode ser usado com cada um. Por exemplo, echo foofunciona da mesma forma, independentemente de onde a saída está conectada. Isso pode simplificar as implementações de utilitários e facilitar sua aplicação para novos propósitos. Um shell ou outro utilitário de linha de comando não precisa fazer nada especial para ser conectado através de um pipe ou soquete a um servidor SSH e acessado pela rede. (Embora para sessões interativas, o SSH crie um pseudoterminal, portanto não é tão diferente de uma sessão local.)

Além disso, quando várias coisas estão presentes no sistema de arquivos, elas podem ser listadas lse acessadas com catredirecionamentos de shell ( echo foo > ...). Isso pode ser útil para acessar arquivos especiais em /procou /sysa partir de scripts, sem a necessidade de um binário especial para fazer uma chamada de sistema menos comum.

Ainda nãotudoé um arquivo ou um fluxo de bytes e, para coisas que são, nem tudo pode ser feito com read()e write(). Os soquetes UDP não são fluxos de bytes, pois transmitem datagramas multibyte com tamanhos fixos. (Embora read()e write()ainda trabalhe neles, de forma um pouco diferente.) Algumas ações ainda precisam ser realizadas com a ioctl()chamada do sistema, e as operações do ioctl são específicas do dispositivo. No Linux, os dispositivos de rede não possuem nomes no sistema de arquivos.

Veja também, por exemplo

Responder2

Tudo em um sistema UNIX/Linux pode ser visualizado como algum tipo de dispositivo de entrada ou saída.

Um disco é ambos - você grava um fluxo de bytes nele ou lê um fluxo de bytes dele. Um teclado é um dispositivo de entrada – você lê um fluxo de bytes do teclado.

A interpretação desse fluxo de bytes depende do programa que está usando o teclado no momento - seja um shell, um programa de usuário, um programa de sistema ou qualquer outra coisa. O terminal é simplesmente um fluxo de bytes gravados - STDOUT ou STDERR.

A analogia falha um pouco quando você fala sobre consoles gráficos, mas dentro de cada janela do terminal ela se mantém. Essa janela do terminal é apenas algo que espera que os bytes sejam enviados pelo shell/programa e exibe esses bytes na forma de texto ou outros caracteres ASCII para o usuário.

Como foi apontado nos comentários a esta resposta, a analogia se deteriora ainda mais à medida que você se aprofunda no sistema. A frase inicial “Tudo é um arquivo” e a frase relacionada “Tudo é um fluxo de bytes” parecem ter sido cunhadas para simplificar a visão do sistema para aqueles que são novos ou têm experiência limitada com ele. À medida que você ganha experiência e se envolve mais com o Linux, você perceberá que essa simplificação às vezes é incorreta, mas ainda tem valor para aqueles que estão começando a se familiarizar com o ambiente.

informação relacionada