Was bedeutet unter Unix „Alles ist ein Bytestrom“?

Was bedeutet unter Unix „Alles ist ein Bytestrom“?

Ich bin ein Linux-Neuling und während ich mich mit dem Dateisystem auseinandersetze, stoße ich recht häufig auf den Satz „Alles ist eine Datei". Ich sehe eine Antwort auf diese FrageHieraber ich verstehe das Konzept immer noch nicht. In der Antwort wird erwähnt, dass genau "Alles ist ein Strom von Bytes"

Ich verstehe nicht, was es bedeutet, wenn man sagt, dass Monitor/Tastatur usw. als „Bytestrom“ dargestellt werden. Kann mir jemand helfen, das zu visualisieren?

Antwort1

„Alles ist eine Datei“ lautet sozusagen der Slogan. Ein Meme, wenn man so will. Ganz stimmt das nicht.

Offensichtlich sind Hardwaregeräte keine echten Dateien im gleichen Sinne wie dies hello.txtbei einem ext4-Dateisystem der Fall wäre. Viele von ihnen haben nicht einmal etwas mit Speichergeräten zu tun.

Aber auch wenn nicht alles einDatei, eine Reihe von Dingen könnenaufgerufen, als obes waren Dateien, zumindest in gewisser Weise. Das heißt, sie haben einen Namen im Dateisystembaum und die read()Systemaufrufe und write()können für sie verwendet werden. Letzteres ist besonders wichtig, wenn wir den Sinn berücksichtigen, dass „alles ein Bytestream ist“, da diese Aufrufe auf Bytestreams zugreifen.

Da dieselben Systemaufrufe für normale Dateien, Raw-Disk-Geräte, Terminals, Netzwerk-Sockets und Pipes funktionieren, können für alle dieselben Tools verwendet werden. Eg echo foofunktioniert unabhängig davon, wo der Ausgang angeschlossen ist, immer gleich. Dies kann die Implementierung der Dienstprogramme vereinfachen und ihre Anwendung für neue Zwecke erleichtern. Eine Shell oder ein anderes Befehlszeilenprogramm muss nichts Besonderes tun, um über eine Pipe oder einen Socket mit einem SSH-Server verbunden und über das Netzwerk darauf zugegriffen werden zu können. (Für interaktive Sitzungen erstellt SSH jedoch ein Pseudo-Terminal, es unterscheidet sich also nicht wesentlich von einer lokalen Sitzung.)

Wenn mehrere Dinge im Dateisystem vorhanden sind, können sie außerdem mit Shell-Umleitungen ( ) aufgelistet lsund aufgerufen werden . Dies kann nützlich sein, um in oder aus Skripten auf spezielle Dateien zuzugreifen, ohne dass für einen weniger gebräuchlichen Systemaufruf eine spezielle Binärdatei erforderlich ist.catecho foo > .../proc/sys

Immer noch nichtallesist eine Datei oder ein Bytestream, und bei Dingen, die das sind, kann nicht alles mit read()und erledigt werden write(). UDP-Sockets sind keine Bytestreams, da sie Multibyte-Datagramme mit festen Größen übertragen. (Obwohl read()und write()immer noch mit ihnen funktionieren, nur ein bisschen anders.) Einige Aktionen müssen immer noch mit dem Systemaufruf ausgeführt werden ioctl(), und die ioctl-Operationen sind gerätespezifisch. Unter Linux haben Netzwerkgeräte keine Namen im Dateisystem.

Siehe auch zB

Antwort2

Alles in einem UNIX-/Linux-System kann als eine Art Eingabe- oder Ausgabegerät visualisiert werden.

Eine Festplatte ist beides – Sie schreiben entweder einen Bytestrom darauf oder Sie lesen einen Bytestrom von ihr. Eine Tastatur ist ein Eingabegerät – Sie lesen einen Bytestrom von der Tastatur.

Die Interpretation dieses Bytestroms obliegt dem Programm, das gerade die Tastatur verwendet – sei es eine Shell, ein Benutzerprogramm, ein Systemprogramm oder etwas anderes. Das Terminal ist einfach ein Bytestrom, der geschrieben wird – STDOUT oder STDERR.

Die Analogie bricht etwas zusammen, wenn Sie über grafische Konsolen sprechen, aber innerhalb jedes Terminalfensters gilt sie. Dieses Terminalfenster ist einfach etwas, das darauf wartet, dass ihm von der Shell/dem Programm Bytes gesendet werden, und zeigt diese Bytes dem Benutzer in Form von Text oder anderen ASCII-Zeichen an.

Wie in den Kommentaren zu dieser Antwort bereits erwähnt wurde, versagt die Analogie noch mehr, je tiefer man in das System eindringt. Der ursprüngliche Satz „Alles ist eine Datei“ und der verwandte Satz „Alles ist ein Bytestrom“ scheinen geprägt worden zu sein, um die Sicht auf das System für diejenigen zu vereinfachen, die neu darin sind oder nur wenig Erfahrung damit haben. Mit zunehmender Erfahrung und je mehr Sie sich mit Linux beschäftigen, desto mehr werden Sie feststellen, dass diese Vereinfachung manchmal falsch ist, aber sie ist immer noch wertvoll für diejenigen, die sich gerade erst mit der Umgebung vertraut machen.

verwandte Informationen