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?
unix
operating-systems
Ein Noob-Student
quelle
quelle
Antworten:
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 .
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.
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.
quelle
WriteFile
. Darüber hinaus gibt es eine noch größere Kategorie von "Synchronisationsobjekten", die nicht nur Dateien, sondern auch Mutexe umfasst.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.
quelle
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
cat
Sie, um es zu zeigen, es durchzuleitengrep
, 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.
quelle
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
quelle
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.
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.
quelle
mmap()
natürlich wenig getan werden kann ...)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".
quelle
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.
quelle
Bitte beachten Sie, dass sogar Linus Torvalds nicht der Meinung ist, dass "alles eine Datei ist". Wenn Sie suchen nach "
"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 .
quelle
The UNIX philosophy is often quoted as "everything is a file", but that really means "everything is a stream of bytes".