Warum ist „Everything is a file“ für die Unix-Betriebssysteme einzigartig?

70

Ich höre oft Leute sagen "Unix's einzigartige Philosophie ist, dass alles als Datei behandelt wird" oder "In Unix ist alles eine Datei". Aber ich habe noch nie jemanden erklären hören, warum es einzigartig für Unix ist.

Warum ist das so einzigartig für Unix? Arbeiten andere Betriebssysteme wie Windows und Mac nicht mit Dateien?

Und ist es einzigartig im Vergleich zu anderen Betriebssystemen?

Ein Noob-Student
quelle
26
Nebenbemerkung: macosx läuft auf einem Unix.
Akira
2
Fwiw, während übergeordnete Dinge keine Dateien verwenden (wie Dbus oder X in * nix), wird Windows auf niedriger Ebene um Griffe gebaut. Sie können mit ihnen viel Gleiches tun wie mit Dateien auf * nix (Öffnen, Schließen, Steuern und normalerweise Senden / Empfangen), aber Sie müssen ein Programmierer sein, um diese Schnittstelle zu sehen. Ob das gut ist, ist eine Frage der Präferenz.
Mark
1
Alles ist eine Datei, außer Netzwerkschnittstellen.
Alvin
8
@akira - OSX ist Unix-zertifiziert und läuft nicht "obendrauf".
Rob
1
@akira Nicht auf einem Unix. OSX ist eines der wenigen zertifizierten UNIX-Betriebssysteme.
Let_Me_Be

Antworten:

53

Warum ist das so einzigartig für Unix?

Typische Betriebssysteme haben vor Unix Dateien in eine Richtung behandelt und jedes Peripheriegerät gemäß den Merkmalen dieses Geräts behandelt. Das heißt, wenn die Ausgabe eines Programms in eine Datei auf der Festplatte geschrieben wurde, war dies der einzige Ort, an dem die Ausgabe erfolgen konnte. Sie konnten es nicht an den Drucker oder das Bandlaufwerk senden. Jedes Programm musste die für die Ein- und Ausgabe verwendeten Geräte kennen und über Befehlsoptionen für alternative E / A-Geräte verfügen.

Unix behandelt alle Geräte als Dateien, jedoch mit speziellen Attributen. Zur Vereinfachung von Programmen sind Standardeingabe und Standardausgabe die Standardeingabe- und -ausgabegeräte eines Programms. Die Programmausgabe, die normalerweise für den Konsolenbildschirm bestimmt ist, kann also an eine beliebige Stelle erfolgen, in eine Festplattendatei, einen Drucker oder eine serielle Schnittstelle. Dies wird als E / A-Umleitung bezeichnet .

Arbeiten andere Betriebssysteme wie Windows und Mac nicht mit Dateien?

Natürlich unterstützen alle modernen Betriebssysteme verschiedene Dateisysteme und können "mit Dateien arbeiten", aber der Unterschied ist, wie mit Geräten umgegangen wird? Keine Ahnung von Mac, aber Windows bietet eine gewisse E / A-Umleitung.

Und im Vergleich zu welchen anderen Betriebssystemen ist es einzigartig?

Nicht mehr wirklich. Linux hat die gleiche Funktion. Wenn ein Betriebssystem eine E / A-Umleitung verwendet, werden andere Unix-Funktionen verwendet, und am Ende sieht es wie Unix aus.

Sägespäne
quelle
29
OS X ist im Grunde genommen Unix, es gibt also keinen großen Unterschied.
Slhck
6
Es gibt ein bisschen mehr zu allem, was ein Dateimodell ist.
artistoex
1
Der erste Absatz stimmt einfach nicht. Es gab Betriebssysteme vor Unix, und sie hatten Funktionen, die später in Unix zu finden waren, einschließlich der E / A-Umleitung.
Patrick Seymour
3
Plan 9 hat das gleiche Konzept Alles ist ein Dateikonzept und wurde sogar "mehr Unix als Unix" genannt
William
2
Windows (seit NT) geht etwas weiter. Es gibt viele Geräte, die sich wie Dateien verhalten, z. B. serielle Anschlüsse und Named Pipes. Sie können an alle mit schreiben WriteFile. Darüber hinaus gibt es eine noch größere Kategorie von "Synchronisationsobjekten", die nicht nur Dateien, sondern auch Mutexe umfasst.
MSalters
34

Die Idee, dass "alles eine Datei ist", kam von Multics. Die Designer von Unix haben einen Großteil ihrer Arbeit auf Vorgängern, insbesondere Multics, aufgebaut. In der Tat basieren viele Dinge im Computing auf Vorgängern.

Sie können sich über die Arbeit des verstorbenen Dennis Ritchie im Design von Unix informieren, um mehr zu erfahren. Er verwies auf Dinge, die von Multics "kopiert" wurden, wie das baumartige Dateisystem, die Befehlsshell und die Nichtstrukturierung von Dateien. Ich will damit nicht andeuten, dass die Unix-Leute von den Multics-Leuten gestohlen haben. In jeder Hinsicht waren es die gleichen Leute.

Patrick Seymour
quelle
6
Dies sollte nicht die Antwort mit der höchsten Bewertung sein. Sie beantwortet nicht die Frage. Sie bittet die Leute lediglich, eine andere Frage zu stellen: "Warum ist 'Alles eine Datei' in Multics?"
Lie Ryan
13
@LieRyan: Eigentlich beantwortet es die Frage, warum es einzigartig ist : Es ist nicht.
Goran Jovic
1
Die Unix-Leute nahmen gerade ihre Ideen mit, als das Multics-Projekt eingestellt und umbenannt wurde. Unix ist nur ein Wortspiel - eins gegen viele.
Fiasco Labs
2
@Lie Ryan - Die Frage war nicht, warum alles eine Datei ist, sondern warum es einzigartig ist. Goran und ich haben darauf hingewiesen, dass dies nicht der Fall ist.
Patrick Seymour
1
Die Frage bezieht sich wirklich auf die „Unix - Betriebssystem s “, dh die Familie. Zu dieser Familie gehören Multics und Linux.
MSalters
28

Einzigartig? Definieren? Absolut.

Wenn Sie alles als Datei oder Gerät in einer bekannten Hierarchie haben, können Sie für alles die gleichen Tools verwenden. Mit Plan 9 von Bell Labs wird dies mit Hardware-Geräten als Dateien noch weiter vorangetrieben.

Noch wichtiger ist, dass dies zwei sehr einfache und leistungsstarke Konzepte ermöglicht. Grundlegende Hilfsprogramme für One Thing Well (tm), die bei Bedarf zusammen mit Rohren aufgereiht werden können. Möchten Sie etwas in einer Textdatei finden? Verwenden catSie, um es zu zeigen, es durchzuleiten grep, und Sie kochen mit Gas. Das ist die wahre Stärke des "Unix" -Verfahrens - spezialisierte Anwendungen, die für ein hohes Maß an Flexibilität zusammenarbeiten.

Mac OS X folgt ebenfalls der Unix-Philosophie, ist jedoch besser versteckt (ein "Anwendungs" -Paket ist eigentlich ein Verzeichnis voller Dateien) und in der Tat ein ordnungsgemäßes, zertifiziertes Unix, das von NeXT abstammt und einige Teile von FreeBSD verwendet .

Unter Windows gibt es seitdem einige Binärkomponenten wie die Ereignisanzeige und die Registrierung, und in diesem speziellen Szenario gibt es einige Geschwindigkeitsvorteile.

Geselle Geek
quelle
1
Plus 1 für die Erwähnung von Plan 9. IMHO Fuse bringt Plan 9 durch Ad-hoc und Iteration einer Implementierung näher.
Danny Staple
2
Nun, Plan 9 ist Plan 9, er funktioniert schon. Fuse ermöglicht auf interessante Weise die Erweiterung des Dateisystems des Userspaces. Mir gefällt der, bei dem IRC als FS behandelt wird.
Geselle Geek
Hmm - weißt du, ich wollte es schon lange nachschlagen, seit ich es vor Jahren in einem Eric Raymond-Buch herausgefunden habe die ISO und probieren es aus.
Danny Staple
2
Ich glaube, es gibt auch eine neuere Version namens Inferno
Journeyman Geek
1
+1 für die Feststellung, dass Darwin von OS X auch ein "richtiger Unix" ist.
calum_b
18

Wegen der speziellen Dateien. Wenn Leute sagen "Alles ist eine Datei in Unix", sind gemeinsame Dateien und Verzeichnisse nicht das, was sie im Sinn haben. Spezielle Dateien gelten nur für Unix-ähnliche Betriebssysteme, von denen es viele gibt. Es ist also nicht eindeutig den Unix.

Spezielle Dateien dienen vielen Zwecken. Es gibt zB Pipes, Sockets und vor allem Gerätedateien. Pipes und Sockets sind Kommunikationsströme zwischen Prozessen. Ein Großteil der Funktionalität der Subsysteme wird dem Benutzer über Gerätedateien zur Verfügung gestellt.

Rohre und Muffen

Programme verwenden sie genauso wie gewöhnliche Dateien. Tatsächlich ist es ihnen die meiste Zeit egal, welchen Dateityp sie verwenden. Das ist der Grund, warum Unix-Befehle so vielfältig kombiniert werden können, um leistungsstarke neue Systeme zu bilden. (Siehe E / A-Umleitung in der Antwort von Sägemehl)

Gerätedateien

Wie bereits erwähnt, fungieren diese als Schnittstellen für den Benutzerbereich. Um beispielsweise die CD-Lade auszuwerfen, öffnet ein Programmierer zunächst die entsprechende Gerätedatei. Ein weiteres Beispiel: Sie möchten, dass Ihr Programm das virtuelle Terminal umschaltet. Öffnen Sie zuerst / dev / console.

Was als nächstes passiert sendet nicht nur Zeichen zu diesen Dateien, aber die Ausgabe ioctl () ‚s auf sich. Die einzelnen Ioctls, die Sie ausgeben können, hängen vom Gerät ab. ZB ist die Konsole in console_ioctl (4) dokumentiert

artistoex
quelle
12

Ich werde mich wahrscheinlich dafür ärgern, dass ich das sage, aber ich denke, dass es ein Trugschluss ist, zu sagen, dass alles eine Datei in Unix ist. Was es wirklich ist, sind zwei Dinge.

  1. Dateien und Geräte (und viele andere Dinge) sind Objekte, die über eine Schnittstelle modelliert werden können, die Funktionen zum Öffnen, Schließen, Lesen, Schreiben und Steuern (ioctl) umfasst.
  2. Der Namensraum für diese Objekte ist hierarchisch, dh diese Objekte sind in einer Hierarchie organisiert.

Ein Dateisystem implementiert diesen Namespace und das Framework, das das Versenden von Schnittstellenfunktionen an diese Objekte ermöglicht. Ein Dateisystem wurde zunächst so konzipiert, dass es Dateien enthält, wurde dann jedoch so ausgewählt, dass andere Objekte in der Namespace-Hierarchie organisiert werden. Ein Beispiel für Polymorphismus von früher war objektorientiert.

Es schadet nicht, einfach alle Dateien aufzurufen. In Wirklichkeit handelt es sich jedoch um diese allgemeineren Objekte (eine Datei ist ein solches Objekt). Aus dieser Perspektive ist diese Idee überhaupt nicht auf Unix beschränkt. Viele andere Betriebssysteme implementieren solche Hierarchien von polymorphen Objekten.

Ziffusion
quelle
Genau! In Unix ist alles eine Datei - Descriptor (nicht unbedingt eine Datei!), Also alles (außer Speicher) I / O, auch Dateien. Auf Dateien muss zugegriffen werden, als handele es sich um E / A-Streams (obwohl sie durchsuchbar sind, also etwas zufällig zugreifbar, aber die extremen Kosten zusätzlicher Systemaufrufe). (mit Ausnahme dessen, was mit mmap()natürlich wenig getan werden kann ...)
Greg A. Woods
9

Wenn Leute sagen "In Unix ist alles eine Datei", meinen sie, dass auch Dinge, die keine Dateien sind, als Dateien behandelt werden.

Natürlich arbeiten die meisten Betriebssysteme mit Dateien. Textdateien, Bilddateien, Audiodateien. Aber nicht alle Betriebssysteme behandeln Geräte als Dateien. Das ist ein wichtiger Unterschied. Wenn ich den Inhalt meines / dev / -Ordners in meinem Ubuntu-Betriebssystem (das auf Unix basiert) aufführe, erhalte ich eine Liste mit mehr als 200 Geräten. Einige dieser Geräte sind Hardware-Geräte, werden jedoch in einem Ordner angezeigt. Beispielsweise Festplatten, USB-Anschlüsse, Maus und Tastatur, Audiogeräte und Drucker. Einige der Geräte sind virtuell, zum Beispiel / dev / urandom, das sich wie eine unendliche Datei voller Zufallszahlen verhält. Es ist keine echte Datei auf meiner Festplatte.

Alle diese Geräte werden als Dateien behandelt. Ich kann Daten von diesen Geräten lesen und / oder darauf schreiben. Hier finden Sie Beispiele für das Kopieren von Daten von verschiedenen Geräten in das Audiogerät. Dies ist möglich, weil sie als Dateien behandelt werden. Das (geeky) Ergebnis ist die Fähigkeit , zu hören , um den Inhalt von der Festplatte, der Maus - Bewegung, dem Computerspeicher oder den Pixeln eines Bildes. Dies wäre viel schwieriger zu erreichen, wenn Geräte nicht als Dateien behandelt würden, da für jedes Gerät unterschiedliche Methoden zum Lesen und Schreiben von Daten erforderlich wären.

Was "alles" bedeutet, ist jedoch von System zu System unterschiedlich. Beispielsweise basiert OS X auf Unix, verfügt jedoch nicht über ein / dev / audio-Gerät. Es verwendet ein proprietäres Audiosystem namens CoreAudio. In diesem Fall könnte man also sagen "fast alles ist eine Datei". In Systemen wie Windows, in denen "Alles ist keine Datei" ist, können Sie weiterhin den Inhalt einer Datei auf den Druckeranschluss kopieren (z. B. eingeben copy mydocument.txt >lpt1:). Dies ähnelt dem Kopieren eines Dokuments auf das Druckergerät in Unix systeme.

Arbeiten andere Betriebssysteme wie Windows und OS X nicht mit Dateien? Ja, das tun sie. Windows und OS X verarbeiten Dateien, aber Windows behandelt Geräte nicht als Dateien. Dies ist Teil der Bedeutung von "Alles ist eine Datei".

Abe
quelle
8

Ich sehe Multics als Quelle für "Alles ist eine Datei", aber ich denke, Sie müssen ein bisschen tiefer schauen als nur Gerätedateien, Named Pipes, reguläre Dateien usw. usw. Sie müssen sich die Syntax der Dateinamen ansehen. Das macht einen großen Unterschied, auch wenn AUX, CON und LP "magische Dateinamen" existieren.

Siehe " The Hideous Name " von Rob Pike. Es vergleicht die Syntax zur Benennung von Unix-Dateien mit einigen anderen Syntaxen, insbesondere VMS. Beachten Sie, dass die Mainframe-Betriebssysteme der späten 60er / frühen 70er Jahre, als Unix auf den Markt kam, die für den modernen Verstand ungewöhnlich rokokoartige Syntax für Dateinamen hatten. Es ist Jahre her, dass ich VM / CMS oder NOS oder NOS / VE verwendet habe, und ich habe nur jemandem, der ein Univac-Betriebssystem verwendet, über die Schulter geschaut, aber es genügt zu sagen, dass die Macken die Regelmäßigkeiten übertroffen haben.

Ich habe noch nie gesehen, wie Multics ausgeführt wurde, aber Sie können ein Papier in seinem Dateisystem sehen . Es scheint, dass das ursprüngliche Unix die "Alles ist eine Datei" etwas weiter entfernt hat als Multics, aber Ihre Laufleistung kann variieren.

Bruce Ediger
quelle
1
Nun, in Multics ist alles Speicher, außer E / A (obwohl dies auch auf den Speicher abgebildet werden kann). In Unix alles (außer Speicher) ist eine Datei - Descriptor , einschließlich Dateien. Dh in Unix ist alles I / O.
Greg A. Woods
1
Übrigens gibt es jetzt einen Emulator, der Multics startet und ausführt.
Greg A. Woods
3

Bitte beachten Sie, dass sogar Linus Torvalds nicht der Meinung ist, dass "alles eine Datei ist". Wenn Sie suchen nach "

alles ist ein bytestream

"Finden Sie interessante Philosophien finden , wie wir meinen , dass alles ist keine Datei zum Beispiel eine abstrakte Datenstruktur im Speicher oder ein Zeiger ist sicher nicht eine Datei, OK sicher kann alles sein , dargestellt als Datei , sondern repräsentieren und sein sind zwei verschiedene Aktionen .

Niklas Rosencrantz
quelle
1
Sie haben keinen Link angegeben. Bei einer Suche habe ich yarchive.net/comp/linux/everything_is_file.html gefunden und Torvalds Antworten in einem E-Mail-Thread zitiert, in dem er implizit bestätigt, dass das Modell "Alles ist eine Datei" sein sollte.
BGVAUGHAN
1
Eigentlich @bgvaughan ist es das Gegenteil: yarchive.net/comp/linux/everything_is_file.html gibt das ZitatThe UNIX philosophy is often quoted as "everything is a file", but that really means "everything is a stream of bytes".
Little Ancient Forest Kami
1
@LIttleAncientForestKami: und Unix behandelt Dateien traditionell als einfache Byteströme, im Gegensatz zu Systemen, die Dateien als Streams von Datensätzen (oder sowohl Streams von Bytes als auch Streams von Datensätzen) oder als Auflistungen von Streams (oder Ressourcengabeln) behandelten oder hatten komplexere Modelle, bei denen es verschiedene Möglichkeiten gab, auf verschiedene Arten von Objekten zuzugreifen.
Ninjalj