web-dev-qa-db-fra.com

Pourquoi "Tout est un fichier" est-il unique aux systèmes d'exploitation Unix?

J'entends souvent les gens dire "la philosophie unique d'Unix est de traiter tout comme un fichier" ou "Sous Unix, tout est un fichier". Mais je n'ai jamais entendu personne expliquer pourquoi c'est unique à Unix.

Alors, pourquoi est-ce unique à Unix? Les autres systèmes d'exploitation tels que Windows et Mac ne fonctionnent-ils pas sur les fichiers?

Et est-ce unique comparé à d'autres systèmes d'exploitation?

70
Some Noob Student

Alors, pourquoi est-ce unique à Unix?

Les systèmes d'exploitation classiques, avant Unix, traitaient les fichiers dans un sens et traitaient chaque périphérique en fonction des caractéristiques de ce dernier. En d’autres termes, si la sortie d’un programme était écrite dans un fichier sur disque, c’était le seul endroit où la sortie pouvait aller; vous ne pouviez pas l'envoyer à l'imprimante ou au lecteur de bande. Chaque programme devait connaître chaque périphérique utilisé pour les entrées et les sorties et disposer d'options de commande permettant de gérer d'autres périphériques d'E/S.

Unix traite tous les périphériques en tant que fichiers, mais avec des attributs spéciaux. Pour simplifier les programmes, entrée standard et sortie standard sont les périphériques d'entrée et de sortie par défaut d'un programme. Ainsi, les sorties de programme normalement destinées à l’écran de la console peuvent aller n’importe où, dans un fichier disque, une imprimante ou un port série. Cela s'appelle redirection I/O .

Les autres systèmes d'exploitation tels que Windows et Mac ne fonctionnent-ils pas sur les fichiers?

Bien sûr, tous les systèmes d’exploitation modernes prennent en charge divers systèmes de fichiers et peuvent "fonctionner sur des fichiers", mais la différence est de savoir comment les périphériques sont gérés. Je ne connais pas Mac, mais Windows propose une redirection d’entrée/sortie.

Et, comparé à quels autres systèmes d'exploitation, est-il unique?

Pas vraiment plus. Linux a la même fonctionnalité. Bien sûr, si un système d'exploitation adopte la redirection E/S, il a tendance à utiliser d'autres fonctionnalités Unix et finit par ressembler à Unix.

53
sawdust

L'idée que "tout est un fichier" est venue de Multics. Les concepteurs d’Unix se sont beaucoup inspirés de leurs prédécesseurs, notamment de Multics. En effet, beaucoup de choses en informatique sont basées sur des prédécesseurs.

Vous pouvez en savoir plus sur le travail de feu Dennis Ritchie dans la conception d'Unix. Il a référencé des éléments qu'ils ont "copiés" à partir de Multics, tels que le système de fichiers en forme d'arborescence, la commande Shell et la non-structuration des fichiers. Je ne veux pas dire que les gens d'Unix ont volé ceux de Multics. À toutes fins utiles, ce sont les mêmes personnes.

34
Patrick Seymour

Unique? Définir? Absolument.

Tout avoir sous forme de fichier ou de périphérique dans une hiérarchie connue signifie que vous pouvez utiliser le même ensemble d'outils pour tout. Plan 9 de Bell Labs va plus loin dans ce sens, même avec des périphériques matériels sous forme de fichiers.

Plus important encore, cela permet deux concepts très simples et puissants. Utilitaires de base qui font One Thing Well (tm), qui peuvent être reliés au besoin avec des tuyaux. Vous voulez trouver quelque chose dans un fichier texte? Utilisez cat pour le montrer, transmettez-le grep et vous cuisinez au gaz. C'est le vrai pouvoir de la méthode 'Unix' - des applications spécialisées travaillant ensemble pour une énorme flexibilité.

Mac OS X suit également la philosophie Unix, mais il est préférable de le masquer (un bundle 'application' est en réalité un répertoire de fichiers) et, en fait, un véritable Unix certifié, issu de NeXT , qui utilisait des bits de FreeBSD .

Avec Windows, il existe certains composants binaires tels que l'observateur d'événements et le registre, et certains avantages en termes de rapidité s'y trouvent, dans ce scénario particulier.

28
Journeyman Geek

À cause des fichiers spéciaux. Quand les gens disent "tout est un fichier sous Unix", les fichiers et les répertoires courants ne sont pas ce qu'ils ont en tête. Les fichiers spéciaux sont uniques aux systèmes d'exploitation de type Unix, et ils sont nombreux. Donc, il n’est pas propre à le Unix.

Les fichiers spéciaux servent à plusieurs fins. Il y a par exemple les tuyaux, les sockets et, plus particulièrement, les fichiers de périphériques. Les tuyaux et les sockets sont des flux de communication entre les processus. Une grande partie des fonctionnalités des sous-systèmes est mise à la disposition de l'espace utilisateur via les fichiers de périphérique.

Tuyaux et Douilles

Les programmes les utilisent comme ils utilisaient des fichiers ordinaires. En fait, la plupart du temps, ils ne se soucient même pas du type de fichier qu'ils utilisent. C'est pourquoi les commandes Unix peuvent être combinées de manière si multiple pour former de nouveaux systèmes puissants. (Voir la redirection des E/S dans la réponse de sciure de bois)

Fichiers de périphérique

Comme mentionné précédemment, ils agissent comme des interfaces pour l’espace utilisateur. Par exemple, pour éjecter le plateau de disque compact, un programmeur doit d’abord ouvrir le fichier de périphérique correspondant. Autre exemple: vous voulez que votre programme bascule le terminal virtuel. Ouvrez/dev/console en premier.

Ce qui se passe ensuite n’envoie pas de simples caractères à ces fichiers, mais émet des ioctl () sur eux. Les ioctls individuels que vous pouvez émettre dépendent du périphérique. Par exemple. la console est documentée dans console_ioctl (4)

18
artistoex

Je vais probablement être enthousiasmé pour avoir dit cela, mais je pense que dire que tout est un fichier sous Unix est en réalité une erreur. Ce que c'est vraiment, c'est deux choses.

  1. Les fichiers et les périphériques (et beaucoup d'autres éléments) sont des objets pouvant être modélisés par une interface composée de fonctions d'ouverture, de fermeture, de lecture, d'écriture et de contrôle (ioctl).
  2. L’espace de noms de ces objets est hiérarchique, c’est-à-dire que ces objets sont organisés en une hiérarchie.

Un système de fichiers implémente cet espace de noms, ainsi que le framework permettant l'envoi de fonctions d'interface à ces objets. Un système de fichiers a d'abord été conceptualisé pour héberger des fichiers, mais a ensuite été coopté pour organiser d'autres objets dans la hiérarchie des espaces de noms. Un exemple de polymorphisme avant orienté objet était une chose.

Il n'y a pas de mal à appeler simplement tous les fichiers. Mais en réalité, ce sont ces objets plus génériques (un fichier en est un exemple). De ce point de vue, cette idée n’est pas unique à Unix. Beaucoup d'autres systèmes d'exploitation implémentent de telles hiérarchies d'objets polymorphes.

12
Ziffusion

Quand les gens disent "Sous Unix, tout est un fichier", cela veut dire que les choses qui ne sont pas des fichiers sont traitées comme des fichiers.

Bien sûr, la plupart des systèmes d'exploitation fonctionnent avec des fichiers. Fichiers texte, fichiers image, fichiers son. Mais tous les systèmes d'exploitation ne traitent pas les périphériques comme des fichiers. C'est une différence importante. Si je liste le contenu de mon dossier/dev/dans mon système d'exploitation Ubuntu (basé sur Unix), je reçois une liste de plus de 200 périphériques. Certains de ces périphériques sont matériels, mais apparaissent dans un dossier. Par exemple, les disques durs, les ports USB, la souris et le clavier, les périphériques audio et les imprimantes. Certains des périphériques sont virtuels, par exemple/dev/urandom, qui se comporte comme un fichier infini plein de nombres aléatoires. Ce n'est pas un vrai fichier sur mon disque dur.

Tous ces périphériques sont traités comme des fichiers. Je peux lire et/ou écrire des données dans ces appareils. Il existe ici des exemples de copie de données de différents périphériques sur le périphérique audio. Cela est possible car ils sont traités comme des fichiers. Le résultat (geek) est la capacité à écouterle contenu du disque dur, le mouvement de la souris, la mémoire de l'ordinateur ou les pixels d'une image. Cela serait beaucoup plus difficile à réaliser si les périphériques n'étaient pas traités comme des fichiers, car chaque périphérique nécessitait des méthodes différentes pour lire et écrire des données.

Cela étant dit, la signification de "tout" varie d'un système à l'autre. Par exemple, OS X est basé sur Unix, mais n’a pas de périphérique/dev/audio. Il utilise un système audio propriétaire appelé CoreAudio. Donc, dans ce cas, on pourrait dire "presque tout est un fichier". Ensuite, dans des systèmes tels que Windows, où "tout n'est pas un fichier", vous pouvez toujours effectuer des opérations telles que copier le contenu d'un fichier sur le port d'impression (en saisissant quelque chose comme copy mydocument.txt >lpt1:), ce qui revient à copier un document sur le périphérique d'impression en Systèmes Unix.

Les autres systèmes d'exploitation tels que Windows et OS X ne fonctionnent-ils pas sur les fichiers? Oui ils le font. Windows et OS X fonctionnent sur des fichiers, mais Windows ne traite pas les périphériques comme des fichiers, ce qui fait partie de ce que "tout est un fichier" signifie.

9
Abe

Je vois Multics cité comme la source de "tout est un fichier", mais je pense qu'il faut regarder un peu plus loin que les fichiers de périphérique, les pipes nommées, les fichiers normaux, etc. Vous devez regarder la syntaxe de nommage des fichiers. Cela fait une grande différence même lorsque les "noms de fichiers magiques" AUX, CON et LP existent.

Voir " Le nom hideux " de Rob Pike. Il compare la syntaxe de dénomination de fichier Unix à quelques autres syntaxes, notamment VMS. Notez que les systèmes mainframe de la fin des années 60 et du début des années 70, à l’origine de la création d’Unix, avaient ce que l’esprit moderne considérerait comme une syntaxe de nommage des fichiers extraordinairement rococo. Cela fait des années que je n'ai pas utilisé VM/CMS, ni NOS ni NOS/VE, et je n'ai regardé que par-dessus l'épaule de quelqu'un qui utilise un système d'exploitation Univac, mais il suffit de dire que les excentriques sont plus nombreux que les des régularités.

Je n'ai même jamais vu Multics fonctionner, mais vous pouvez voir un papier sur son système de fichiers . Il semble que l’Unix original prenne le "tout est un fichier" un peu plus loin que Multics, mais votre kilométrage peut varier.

8
Bruce Ediger

Veuillez noter que même Linus Torvalds n’est pas d’accord avec le fait que "tout est un fichier". Si vous recherchez "

tout est un bytestream

"vous trouverez des philosophies intéressantes sur le fait que nous voulons dire que tout n'est pas un fichier, par exemple une structure de données abstraite dans la mémoire ou un pointeur n'est sûrement pas un fichier, OK, tout peut être représenté en tant que fichier mais représentant et étant 2 actions différentes.

3
Niklas Rosencrantz