J'ai effectué des recherches à ce sujet sur Google, mais les résultats étaient nuageux. Pourquoi le /
signe désigne-t-il le répertoire racine? Y a-t-il des raisons solides derrière cela?
linux
directory-structure
history
Ruban Savvy
la source
la source
cd /home
équivalent d'uncd /home/
ajout/
à la fin du nom vide donne accès à ce répertoire.chroot()
appel, mais que, de l'intérieur, elles sont abstraites./some/dir
TOUJOURS signifie(root)/some/dir
que toutsome/dir
est toujours relatif au répertoire de travail actuel. Ce principe est également transférable à l’utilisation d’URL Web.Réponses:
La barre oblique
/
est le caractère de délimitation qui sépare les répertoires dans les chemins des systèmes d'exploitation de type Unix. Ce personnage semble avoir été choisi dans les années 1970, et selon des sources anecdotiques , les raisons pourraient être liées au fait que le prédécesseur d'Unix, le système d' exploitation Multics , utilisait ce>
caractère comme séparateur de chemin, mais les concepteurs d'Unix l'avaient déjà réservé. les caractères>
et<
pour signifier la redirection des E / S sur la ligne de commande du shell bien avant qu’ils ne disposent d’un système de fichiers multiniveau. Ainsi, lorsque le moment est venu de concevoir le système de fichiers, ils ont dû trouver un autre caractère pour indiquer la séparation des éléments du chemin.Il convient de noter ici que, dans le terminal Lear-Siegler ADM-3A couramment utilisé dans les années 1970, d'où provient entre autres la pratique consistant à utiliser le
~
caractère pour représenter le répertoire de base , la /clé se trouve à côté de la >clé:En ce qui concerne la raison pour laquelle le répertoire racine est désigné par un répertoire unique
/
, il s’agit d’une convention qui est probablement influencée par le fait que le répertoire racine est le répertoire de niveau supérieur de la hiérarchie des répertoires; t une raison de faire référence à quelque chose en dehors du répertoire racine. De même, l'entrée de répertoire elle-même n'a pas de nom, car c'est la limite de l'arborescence de répertoires visible.la source
/
. Les systèmes de fichiers Unix forment une seule arborescence, avec des points de montage pour les différents lecteurs.chroot
et ainsi - vous ne pouvez accéder à rien en dehors de la nouvelle racine, mais cela ne signifie pas qu'ils ne sont pas là.chroot()
, il n’avait aucune propriété semblable à une prison , il affectait simplement la résolution du chemin. Même aujourd’hui, les processus privilégiés peuvent sortir d’un ordinateur de leur propre choix . J'ai également mentionnéchroot()
dans un commentaire précédent .>
comme séparateur de répertoires, mais également<
pour désigner le répertoire parent:<
en elle-même, équivalente à..
, tandis que<foo
équivalente../foo
. J'ai toujours trouvé cela esthétique.Le premier système de fichiers hiérarchique tel que nous le connaissons aujourd'hui a été conçu pour Multics . La conception est décrite dans «Un système de fichiers polyvalent pour le stockage secondaire» par RC Daley et PG Neumann. Une caractéristique essentielle de ce système de fichiers est qu'un répertoire est un fichier qui peut être contenu dans un répertoire comme n'importe quel autre fichier. La structure de fichier forme un arbre dans lequel tous les nœuds non-feuilles sont des répertoires. La racine de l'arbre est toujours un répertoire. Chaque fichier a un nom (le nom de l' entrée ) unique dans son répertoire parent. Le répertoire racine n'a pas de nom puisqu'il ne figure pas dans un autre répertoire.
Pour désigner un fichier, vous devez décrire le chemin à partir de la racine de l’arbre. Multics a adopté une syntaxe naturelle pour les noms de chemins, où if
P
est le chemin d'un répertoire etF
le nom d'un fichier, la syntaxe du fichier appelé dans le répertoire dont le chemin est .P>F
F
P
Pour les moments où vous ne voulez pas vous encombrer de répertoires, Multics avait la notion de répertoire de travail . Un nom de fichier nu sans indication de répertoire est interprété comme un fichier du répertoire de travail.
La combinaison de ces règles
foo
constitue un fichier dans le répertoire de travail;foo>bar
est un fichier dans le répertoire enfant du répertoirefoo
de travail, etc. Ces règles décrivent les chemins relatifs, mais une règle supplémentaire est nécessaire pour créer des chemins absolus à partir du répertoire racine. Etant donné que lire un nom de chemin de gauche à droite correspond au déplacement de la racine vers les feuilles de l'arbre, la racine doit être indiquée par un marqueur spécial à gauche du nom du chemin. Étant donné que les noms de fichier ne sont jamais vides (car cela créerait souvent de la confusion), aucun nom de chemin relatif ne commence jamais par le caractère>
, ce qui en fait un marqueur pratique pour les noms de chemin absolus. C’est donc>foo
le fichier appeléfoo
dans le répertoire racine,>foo>bar
le fichier appelébar
dans le répertoire appeléfoo
dans le répertoire racine, etc. Cela laisse le répertoire racine, qui pourrait être la chaîne vide; Cependant, il n'est souvent pas pratique d'utiliser la chaîne vide comme chemin d'accès. Elle est donc écrite>
, ce qui présente l'avantage supplémentaire qu'un chemin d'accès est absolu si et seulement si son premier caractère l'est>
.Unix a adopté cette conception de Multics. Unix ayant déjà utilisé le caractère
>
pour la redirection de la sortie dans son interpréteur de commandes, ses concepteurs ont choisi un caractère différent/
pour séparer les répertoires dans les noms de chemins.la source
Dans les composants de nom de chemin sous Unix, seuls deux caractères ne peuvent pas être utilisés: le caractère null, qui termine les chaînes en C (le langage du noyau) et la barre oblique, qui est réservée en tant que séparateur de chemin. De plus, les composants de chemin ne peuvent pas être des chaînes vides.
Ainsi, dans un nom de chemin, nous n'avons que deux types de jetons: une barre oblique et un composant.
Supposons que, sans ajouter de nouveaux jetons , nous souhaitons prendre en charge deux types de chemins, relatif et absolu. De plus, nous aimerions pouvoir faire référence au répertoire racine, qui n'a pas de nom (il n'a pas de parent qui lui donnerait un nom).
Comment pouvons-nous représenter des chemins relatifs, des chemins absolus et faire référence au répertoire racine en utilisant uniquement la barre oblique?
Le moyen le plus évident d'étendre un langage (autre que l'introduction d'un nouveau jeton) est de créer une nouvelle syntaxe: donnez un nouveau sens aux combinaisons de jetons qui sont une syntaxe non valide.
Les chemins qui commencent par une barre oblique n’ont pas de sens, alors pourquoi ne pas utiliser une barre oblique comme marqueur qui indique "ce chemin est absolu plutôt que relatif".
Un chemin qui ne contient rien d'autre qu'une barre oblique est également invalide, alors pourquoi ne pas lui attribuer le sens "le répertoire racine".
Ces deux significations sont liées car un chemin absolu commence à chercher dans le répertoire racine. En d'autres termes, une barre oblique peut être considérée comme ayant la signification suivante:
Ensuite, nous pourrions aussi bien insérer une barre oblique de fin, ce qui peut vouloir dire "ce chemin indique que le dernier composant de chemin est le nom d'un répertoire plutôt qu'un fichier normal ou tout autre type d'objet: cette barre oblique de fin indique ce répertoire de la même manière que la façon dont la barre oblique principale indique le répertoire racine. "
Avec toute la syntaxe ci-dessus, nous avons toujours une syntaxe avec une signification non attribuée: doubles barres obliques, triples barres obliques, etc.
Pourquoi ne pas simplement introduire un autre jeton et le faire différemment. C'est probablement parce que les concepteurs ont adopté des approches minimalistes en général. (Pourquoi l’
ed
éditeur n’affiche-t-il un a?
lorsque vous faites quelque chose de mal?) Une langue de chemin avec seulement deux types de jeton (composant et barre oblique) est facile à mémoriser et à utiliser.Une autre considération importante est que des manipulations faciles des chemins sont possibles en utilisant uniquement des représentations de chaîne. Par exemple, nous pouvons "re-root" les chemins absolus vers un nouveau répertoire parent assez facilement:
Cela ne fonctionnerait pas si nous indiquions des chemins absolus d'une autre manière, comme un signe de dollar fort ou autre:
Ce type de codage est encore nécessaire dans certains cas lorsqu'il s'agit de chemins de style Unix, mais il en existe moins.
la source
/
aide du pied droit. Juste comme jouer d'un piano.