Un lien physique est défini comme un pointeur sur un inode. Un lien symbolique , également appelé lien symbolique , est défini comme un fichier indépendant pointant vers un autre lien sans les restrictions des liens physiques.
Quelle est la différence entre un fichier et un lien physique? Un lien physique pointe vers un inode, alors qu'est-ce qu'un fichier? L'entrée d'inode elle-même? Ou un inode avec un lien dur?
Disons que je crée un fichier tactile. Ensuite, une entrée inode est créée dans la table inode . Et je crée un lien dur, qui a le même numéro d'inode que le fichier. Alors, ai-je créé un nouveau fichier? Ou le fichier vient-il d'être défini comme un inode?
files
filesystems
symlink
hard-link
Levent Divilioglu
la source
la source
Réponses:
La réponse très courte est:
Les fichiers et répertoires Unix fonctionnent exactement comme des fichiers et des répertoires dans le monde réel (et non comme des dossiers dans le monde réel); Les systèmes de fichiers Unix sont structurés (conceptuellement) comme suit:
Garder cette métaphore à l'esprit et garder à l'esprit que les répertoires Unix fonctionnent comme des répertoires du monde réel et non comme des dossiers du monde réel explique nombre des «bizarreries» que rencontrent souvent les nouveaux arrivants, telles que: pourquoi puis-je supprimer un fichier que je ne possède pas? t avoir un accès en écriture à? Tout d'abord, vous ne supprimez pas le fichier, vous supprimez l'un des nombreux noms possibles pour le fichier et, pour ce faire, vous avez uniquement besoin d'un accès en écriture au répertoire, pas au fichier. Juste comme dans le monde réel.
Ou, pourquoi puis-je avoir des liens symboliques? Eh bien, le lien symbolique contient simplement un chemin d'accès. Rien n'indique qu'il doit exister un fichier portant ce nom.
La différence entre un fichier et un lien physique est identique à la différence entre vous et la ligne portant votre nom dans le répertoire.
Un fichier est une donnée anonyme. C'est ça. Un fichier n'est pas un inode, un fichier a un inode, tout comme vous n'êtes pas un numéro de sécurité sociale, vous avez un SSN.
Un lien physique est un nom pour un fichier. Un fichier peut avoir plusieurs noms.
Oui.
Non, un lien physique n'a pas de numéro d'inode, puisqu'il ne s'agit pas d'un fichier. Seuls les fichiers ont des numéros d'inode.
Le lien physique associe un nom à un numéro d'inode.
Oui.
Non, le fichier a un inode, ce n'est pas un inode.
la source
Un lien physique est une entrée de répertoire. Un fichier peut avoir plusieurs entrées de répertoire, s'il est présent sous des noms différents ou dans des répertoires différents. Une entrée de répertoire est appelée «lien physique» lorsqu'elle est mise en relation avec d'autres entrées de répertoire pour le même fichier.
L'inode contient les métadonnées du fichier autres que son nom et son contenu (emplacement du contenu, autorisations, horodatages, etc.). Il y a un inode par fichier. (Tous les systèmes de fichiers ne placent pas les métadonnées dans un espace clairement identifiable sur le disque que l'on pourrait appeler «inode», mais il s'agit d'une architecture commune.) Une entrée de répertoire associe un nom à un inode. Il est possible que plusieurs entrées de répertoire soient liées au même inode, d'où le terme «lien». Un tel lien est appelé «lien dur» par opposition aux «liens symboliques» ou «liens symboliques» qui ne disent pas «pour ce nom, utilisez cet inode» mais «pour ce nom, recherchez cet autre nom».
Considérez les fichiers comme des pièces et les entrées de répertoire comme des portes. "Ouvrir le fichier
/foo/bar
" signifie "aller dans le couloir/foo
et aller dans la chambrebar
". «Go to roombar
» signifie en réalité «ouvrez la portebar
et entrez», mais «go to roombar
» est une façon banale de dire la même chose plus rapidement. Il est possible d'avoir plusieurs portes menant à la même pièce.Lorsque vous créez un lien physique vers un fichier existant (
ln existing new
), vous créez un deuxième lien vers le même fichier, c.-à-d. Que vous créez une nouvelle entrée de répertoire qui renvoie au fichier existant. Après la création, les deux entrées de répertoire ont le même statut: il n'y a pas une «primaire» et une «secondaire», ce sont juste les deux liens vers le même fichier.Vous pouvez également supprimer tous les liens vers un fichier sans supprimer le fichier lui-même. Cela se produit si vous supprimez un fichier (c'est-à-dire que vous supprimez toutes les entrées de son répertoire) alors qu'un programme a toujours le fichier ouvert. Le fichier reste sur le système de fichiers, il n'est réellement supprimé que lorsque le dernier processus l'ouvrant a été fermé. Dans la métaphore chambres et portes, une pièce sans porte prend encore de la place.
la source
En plus de toutes les autres réponses, je tiens à souligner les propriétés importantes suivantes:
Un lien symbolique est une véritable référence, c’est-à-dire qu’il s’agit d’un petit fichier contenant un chemin. La résolution d'un lien symbolique se produit de manière transparente pour l'application: si un processus ouvre un fichier, par exemple
/this/path/here
un lien symbolique pointant vers,/that/other/path
le traitement complet de l'ouverture/that/other/path
est effectué par le système d'exploitation. De plus, s’il/that/other/path
s’agit d’un lien symbolique lui-même, le système d’exploitation le gère également. En fait, le système d’exploitation suit la chaîne de liens symboliques jusqu’à ce qu’il trouve autre chose (par exemple un fichier normal) ou jusqu’à atteindreSYMLOOP_MAX
(voirsysconf(3)
) de nombreuses entrées, auquel cas le système d’exploitation (plus précisément: l’appel système correspondant) renvoie une erreur et définiterrno
àELOOP
. Ainsi, une référence circulaire commexyz -> xyz
ne bloquera pas le processus. (Pour les systèmes Linux, voirpath_resolution(7)
les détails complets.)Notez qu'un processus peut vérifier si un nom de chemin est un lien symbolique ou non via l'utilisation de
lstat(2)
et peut modifier ses attributs de fichier (stockés dans la table inode) vialchown(2)
et d'autres (voirsymlink(7)
l'histoire complète).Maintenant, en termes de permission, vous remarquerez que les liens symboliques ont toujours les permissions 777 (
rwxrwxrwx
en notation symbolique). Ceci est dû au fait que toute autre autorisation peut être contournée en accédant au fichier réel, de toute façon. Inversement, 777 pour un lien symbolique ne rend pas le fichier lié symboliquement accessible s'il n'était pas accessible au départ. Par exemple, un lien symbolique avec des autorisations 777 pointant vers un fichier avec des autorisations 640 ne rend pas le fichier accessible à "autre" (le grand public). En d'autres termes, un fichierxyz
est accessible via un lien symbolique si et seulement si il est directement accessible, c'est-à-dire sans indirection. Ainsi, les autorisations du lien symbolique n'ont aucun effet sur la sécurité.L'une des principales différences visibles entre les liens durs et les liens symboliques (ou liens symboliques) est que les liens symboliques fonctionnent sur les systèmes de fichiers alors que les liens durs sont limités à un système de fichiers. C'est-à-dire qu'un fichier sur la partition A peut être lié de manière symétrique à partir de la partition B, mais il ne peut pas être lié durement à partir de là. Cela ressort clairement du fait qu’un lien dur est en réalité une entrée dans un répertoire, qui consiste en un nom de fichier et un numéro d’inode, et que les numéros d’inode ne sont uniques que par système de fichiers.
Le terme liaison physique est en réalité quelque peu trompeur. Alors que pour les liens symboliques, la source et la destination sont clairement distinguables (le lien symbolique a sa propre entrée dans la table inode), ce n'est pas le cas pour les liens durs. Si vous créez un lien dur pour un fichier, l'entrée d'origine et le lien dur ne peuvent pas être distingués en termes de ce qui était là en premier. (Puisqu'ils se réfèrent au même inode, ils partagent leurs attributs de fichier tels que propriétaire, autorisations, horodatage, etc.). Ceci conduit à l'affirmation que chaque entrée de répertoire est en fait un lien physique et que lier un fichier en dur signifie simplement en créer un deuxième ( ou troisième, ou quatrième ...) hardlink. En fait, chaque inode stocke un compteur pour le nombre de liens durs vers cet inode.
Enfin, notez que les utilisateurs ordinaires ne peuvent pas créer de liens physiques. En effet, cela doit être fait avec la plus grande prudence: un utilisateur imprudent peut introduire des cycles dans l’arborescence de fichiers par ailleurs strictement hiérarchique, ce à quoi tous les outils habituels (comme
fsck
) et le système d’exploitation lui-même ne sont pas préparés.la source
Une réponse simple:
Une entrée de fichier dans un répertoire est un lien physique vers ce fichier.
Certains fichiers ont plusieurs liens physiques, car plusieurs liens physiques menant au même fichier sont autorisés.
la source
Aux débuts d'Unix, les fichiers internes étaient des inodes sur un lecteur de disque particulier. Les noms de fichiers étaient un moyen plus convivial d’y accéder.
Un lien physique assignait plus d'un nom de fichier à un inode. Vous pouvez créer un fichier, lier fermement un deuxième nom à celui-ci et supprimer le premier nom. Il était impossible de distinguer le fait que le fichier avait déjà été créé avec le deuxième nom.
En effet, l'appel système qu'un programme doit utiliser pour supprimer un fichier est "unlink (2)". Les données ne disparaissent pas tant que le nom de famille n'est pas lié à l'inode. (et l'inode n'est pas ouvert par un processus quelque part)
C'est ce qui permet à Linux de mettre à niveau des choses plus facilement tout en exécutant des programmes. Si un processus exécute un fichier exécutable et qu'une mise à jour a lieu, le nom du programme est réutilisé, mais l'inode contenant l'ancienne version existe toujours, de sorte qu'il peut continuer à s'exécuter. Et lorsque le dernier processus exécutant cette ancienne version s’arrête, le stockage de cette ancienne version est libéré.
Les liens symboliques sont apparus car, lorsque vous disposiez d'une arborescence de fichiers unitaire comportant plusieurs points de montage, vous ne pouviez pas établir de lien physique entre un disque dur et un inode sur un autre. Donc, les liens souples ont été inventés.
la source
early days
pourquoi est-ce différent maintenant? votre réponse ne semble de toute façon pas refléter ce point de vue?Un fichier correspond aux données écrites sur le disque. Ces données sont référencées par son inode, qui contient des métadonnées sur le fichier indiquant au système quels blocs sur le disque sont utilisés par ce fichier, entre autres. Un lien physique pointe vers le numéro d'inode de ce fichier.
Donc, techniquement, vous créez un nouveau fichier, mais tout ce que ce fichier contient est le numéro d’inode du fichier qu’il référence et son nom. Il vaut mieux y voir un pointeur sur l'inode ou un pointeur sur le fichier.
la source
Le fichier est un concept largement utilisé sur les entrées dans un système de fichiers.
Habituellement, il comprend l' annuaire , le fichier régulier (lien dur) et le lien symbolique ( lien symbolique ). Et peut même inclure un périphérique et une prise.
Etant donné que même un lien symbolique est généralement compté comme un fichier, un lien dur lui-même peut également être compté comme un fichier. Vous pouvez dire que c'est un fichier, que ce soit un lien physique ou physique.
Le concept est un peu ambigu, aussi pouvez-vous dire qu'une entrée inode est un fichier, bien que vous souhaitiez peut-être vous référer aux données.
Si vous êtes un programmeur C ++ ou Java, vous voudrez peut-être vous renseigner sur std :: filesystem :: file_type , java.io.File et java.nio.file.Files .
Des détails sur les différences entre les liens physiques et les liens symboliques sont disponibles dans le lien dans le commentaire de infixed.
la source
La différence entre un "fichier" avec un prénom et un "lien dur" est une histoire. Un fichier (normal) portant un nom donné est créé à l'aide d'un appel système creat, un lien physique est créé à l'aide d'un appel système link.
Cependant, bien que les humains parlent et se souviennent de l'historique des entrées de répertoire et les appellent en tant que fichiers et liens physiques, le système de fichiers ne le fait pas. Les entrées de répertoire de "fichier d'origine" et de "lien physique" sont d'une qualité absolument indiscernable: toutes deux établissent une référence entre un nom de fichier et l'inode d'un fichier, et une fois que la dernière référence a disparu (les références ne sont pas simplement des noms de fichiers pour un fichier mais également des descripteurs de fichier avec lesquels un fichier ouvert est accessible), le fichier pour l’inode non référencé est considéré comme supprimé et l’inode et l’espace fichier associé sont récupérés.
Ainsi, lorsque les humains opposent "fichiers" et "liens durs", le premier a été créé avec un "nombre de liens égal à 1" et tous les autres ont été créés avec un nombre de liens plus important. La différence est académique, et renommer un fichier à la fois consistait à créer un lien physique pour le nom de la cible, puis à supprimer le lien du nom de la source. De nos jours, on utilise généralement un seul appel système qui le fait de manière atomique.
la source