La barre oblique ( /
) fait-elle vraiment partie du nom du répertoire racine Linux? Ou est-ce juste un symbole pour cela?
Qu'en est-il /etc
et ainsi de suite?
Mise à jour
Suppose /dev/sda2
est le périphérique bloc d'un répertoire racine Linux.
$ sudo debugfs / dev / sda2 debugfs 1.44.1 (24-mars-2018) debugfs: pwd [pwd] INODE: 2 CHEMIN: / [racine] INODE: 2 CHEMIN: / debugfs: stat / Inode: 2 Type: Répertoire Mode: 0755 Drapeaux: 0x80000 Génération: 0 Version: 0x00000000: 00000077 Utilisateur: 0 Groupe: 0 Projet: 0 Taille: 4096 Fichier ACL: 0 Liens: 25 Nombre de blocs: 8 Fragment: Adresse: 0 Numéro: 0 Taille: 0 ctime: 0x5b13c9f1: 3f017990 - dim. 3 juin 15:28:57 2018 atime: 0x5b13ca0f: 3b3ee380 - dim 3 juin 15:29:27 2018 mtime: 0x5b13c9f1: 3f017990 - dim. 3 juin 15:28:57 2018 crtime: 0x5aad1843: 00000000 - sam. mars 17 16:59:39 2018 Taille des champs d'inode supplémentaires: 32 EXTENTS: (0): 9249
Il y a donc un répertoire, l’inode n ° 2, mais il n’a pas de nom.
linux
filesystems
filenames
fhs
mlibre
la source
la source
debugfs
sortie. Pouvez-vous préciser en quoi cela change la question?Réponses:
La norme POSIX.1-2008 dit
La norme établit en outre une distinction entre les noms de fichiers et les noms de chemins .
/
est le chemin d'accès au chemin du répertoire racine. Le nom du répertoire est "le répertoire racine", mais dans le système de fichiers, il n'a pas de nom, il n'a pas de nom de fichier. S'il avait un nom de fichier, ce nom serait une entrée de répertoire dans le répertoire situé au-dessus du répertoire racine. Ce répertoire n'existe pas.Le caractère
/
ne peut jamais faire partie d'un nom de fichier car c'est le séparateur de chemin.Pour plus de clarté: ce
/
n’est pas le nom du répertoire racine, mais son chemin , son chemin ./etc
est un autre chemin. C'est le nom du chemin absolu duetc
répertoire. Le nom du répertoire sur ce chemin estetc
(son nom de fichier estetc
)./usr/local/bin/curl
est le chemin ducurl
fichier exécutable de la même manière que/etc
le chemin duetc
répertoire.la source
/..
pointe vers/
, et/
a une entrée de répertoire pour lui-même - c'est le bon vieux/.
; toutes ces 3 choses pointent vers le même inode - 2./
est défini en termes de racine par processus, mais je ne savais pas que l'inodechroot
n'est pas nécessairement 2. Fait très intéressant. Cela soulève également la question de savoir quel est le/
répertoire des processus du noyau privilégiés. Est-ce que cela signifie que seuls les processus de l'espace utilisateur/
sont associés?slash est un séparateur ; Les noms de répertoire n'incluent pas de séparateurs, mais les noms de chemins complets incluent les séparateurs.
Donc, le "niveau racine"
/
n'a pas de nom . Sur la plupart des systèmes de type Unix, ceci est traité comme un cas spécial comme.
et..
(bien que bien sûr, il n'y a pas de différence entre les deux au niveau racine).La nomenclature peut différer. POSIX.1-2017, par exemple, répertorie certaines définitions couramment utilisées :
3.2 Chemin absolu
3.271 chemin
3.272 composant de chemin d'accès
3.170 Nom de fichier
Alors ... si vous voulez des éclaircissements , ce n'est peut-être pas votre premier arrêt. Des tutoriels tels que cette page des concepts UNIX sont utiles, par exemple, en soulignant que "chemin complet" est synonyme de "chemin absolu".
la source
/
ne constitue pas un nom de fichier valide ni un composant de chemin d'accès, et ce n'est pas une chaîne contenant de tels composants, mais il s'agit toujours d'un chemin d'accès totalement valide pour un répertoire donné. Ce qui doit exister, bien que la partie qui l'exige ne mentionne pas son "nom". D'une certaine manière, je trouve cela légèrement amusant...
à/
relier/
.Sous Unix, les fichiers (et les répertoires ne sont que des fichiers) n'ont pas de "noms". Les liens ont des noms, les liens sont des entrées dans un répertoire qui mappent les noms aux fichiers.
Vous pouvez dire que les liens donnent des noms aux fichiers, mais remarque: cela implique qu’un fichier peut avoir plus d’un nom, puisqu’il peut avoir plus d’un lien.
Etant donné que le répertoire racine est, eh bien, le répertoire racine, il n’existe pas de répertoire "plus haut" dans lequel il puisse y avoir un lien, donc il ne peut y avoir de nom associé. Il serait théoriquement possible d'ajouter un lien vers le répertoire racine dans un autre répertoire, mais la plupart des Unices interdisent l'ajout de liens vers des répertoires existants, car cela peut entraîner des cycles dans la hiérarchie du système de fichiers (qui est en réalité un graphe dirigé), ainsi que des cycles de détection. dans un graphique est coûteux, mais ne pas les détecter peut conduire à une récursion infinie lorsque vous essayez de résoudre des noms dans le noyau.
Donc, fondamentalement, le répertoire racine n’a pas de nom, car il n’y a pas de répertoire au-dessus dans lequel nous pourrions enregistrer le nom.
Comme cela a été souligné dans d'autres réponses, nous devons distinguer entre un nom et un chemin (nom). Le répertoire racine peut être référencé via le chemin (nom)
/
.la source
L'utilisation du mot "nom" est un peu flexible; il peut faire référence à un "chemin d'accès complet"; il pourrait faire référence à "l'entrée de répertoire"; il pourrait faire référence au "nom de fichier" transmis à diverses fonctions ou routines.
Ainsi, par exemple,
/etc/foo
et/var/tmp/../../etc/foo
et/tmp/../../../../../../foo
sont toutes les manières de se référer au même fichier; ce sont tous des noms valides , commefoo
quand ils sont dans l'/etc
annuaire.Revenons donc à l'essentiel.
Un nom de fichier dans unix est constitué de composants séparés par le séparateur de répertoires
/
. La seule restriction relative aux composants est qu'ils ne peuvent pas contenir les/
caractères ou NUL; tout le reste est autorisé.Ainsi , le « nom de chemin complet » de
/etc
est la chaîne complète:/etc
. Cela signifie que leetc
composant se trouve dans le répertoire racine.De même
/x/y/z/foo
aurait lefoo
composant dans le/x/y/z
répertoire.À présent, le répertoire racine est unique en ce sens qu’il ne contient aucun composant dans un répertoire parent; il ne possède le chemin complet comme son nom:
/
.la source