Quel mode de fichier indique quun fichier est un lien symbolique (lien symbolique)?


Mon cas dutilisation est de détecter symbolique liens dans un référentiel git (et son historique). Javais limpression quun lien symbolique est un lien symbolique en raison de son mode fichier, et que ce mode fichier est ce que loutil chmod définit.

Commentaires

  • Voir superuser.com/questions/303040/…
  • Il semble que ma question ait peut-être mieux été posée ‘ quel mode de fichier sont les liens symboliques dans git ‘.
  • stackoverflow.com/questions/15465436/git-how-to-handle-symlinks
  • chmod définit les bits de permission (rwx et sticky / setuid / setgid bits, …): cest ce que nous appelons un mode  » « . Mais vous semblez faire référence aux types de fichiers à la place.
  • @JohnWHSmith Je serais impatient de voter pour un lien vers des documents distinguant les différences de modes de fichiers et de types de fichiers! : D

Réponse

Les modes de fichiers couvrent deux notions différentes: les types de fichiers et les permissions sur les fichiers. Le mode dun fichier « s est représenté par la valeur de st_mode dans le résultat des appels stat(2) et ls -l les présente tous ensemble; voir Comprendre les autorisations UNIX et les types de fichiers pour plus de détails.

Une fois quun fichier est créé, son type peut « T être changé. De plus, sur les systèmes Linux, vous ne pouvez pas « t spécifier les permissions dun lien symbolique »; tout ce qui compte, cest la permission de la cible (et effectivement le mode complet puisque cela détermine aussi le comportement du lien symbolique). Voir Comment les autorisations de fichier sappliquent-elles aux liens symboliques? pour plus de détails. Sous Mac OS X, les liens symboliques peuvent avoir leurs propres autorisations.

Enfin, git utilise un modèle simplifié, avec un nombre limité de modes reconnus:

  • 040000 pour un répertoire
  • 100644 pour un fichier normal
  • 100755 pour un fichier exécutable
  • 120000 pour un lien symbolique

Vous pouvez voir ces valeurs à laide de commandes telles que git cat-file -p "master^{tree}"; voir Pro Git pour plus de détails.

Réponse

Quel mode de fichier indique quun fichier est un lien symbolique (lien symbolique)?

LAPI POSIX à vérifier si un fichier est un lien symbolique utilise la macro S_ISLNK.

Dans la glibc, S_ISLNK est défini comme suit:

#define __S_IFMT 0170000 /* These bits determine file type. */ #define __S_IFLNK 0120000 /* Symbolic link. */ #define __S_ISTYPE(mode, mask) (((mode) & __S_IFMT) == (mask)) #define S_ISLNK(mode) __S_ISTYPE((mode), __S_IFLNK) 

ie un fichier est un lien symbolique if ((mode & 0170000) == 0120000) (au moins sous GNU / Linux).

Réponse

Un lien symbolique (bien que certains systèmes de fichiers gèrent différemment les liens symboliques) est une entrée de table inode qui pointe vers le même endroit quun autre fichier (ou répertoire).

Par exemple, si foo est inode 1234 alors bar (a lien symbolique vers toto) est inode 1234.

bar nexiste pas vraiment, il « est juste un pointeur vers un « vrai » fichier.

Symlinks nont généralement pas de permissions en dehors des permissions du fichier vers lequel elles pointent. Donc, les permissions bar"s sont « the same » as foo"s. Vous ne pouvez « t définir des autorisations sur bar (le lien symbolique) que sur foo (le vrai fichier).

Cela étant dit, cest « une vue de très haut niveau. Différents systèmes de fichiers gèrent les liens symboliques différemment. Différents outils gèrent symlinks différemment. Certains systèmes de fichiers » signalent « symlinks et les gérer spécialement, mais certains ne le font pas.

Par exemple, chmod sur Linux na « pas changé de symlinks autorisations mais sur OSX vous pouvez y accéder. Dans les deux cas, les autorisations des fichiers réels sont modifiées.

Je ne pense à aucun système (ne « t signifie que « nest pas là-bas) où un symlink a des autorisations distinctes du fichier réel.

Commentaires

  • Non, un lien symbolique est un type de fichier ( » tout est un fichier « ) qui contient un nom de fichier plutôt que général- données de finalité. Généralement, ce nom de fichier fait référence à un fichier existant – que ‘ est tout lintérêt davoir des liens symboliques – mais il nest pas garanti que ce soit vrai. Oui, un lien symbolique (comme tous les autres type de fichier) a un inode. Non, un lien symbolique et le fichier quil pointe pour avoir des inodes séparés, avec des numéros dinode différents. Hard les liens ont le même inode, et donc le même numéro dinode ber.
  • eh bien cétait censé être de haut niveau mais les systèmes modernes ne font pas ‘ un fichier sur le disque dur la table des inodes contient la chaîne et aucun fichier réel nest créé. Je pense quil ‘ sappelle  » lien symbolique rapide  »
  • Si ‘ foo ‘ et ‘ bar ‘ sont tous les deux des pointeurs vers le nœud 1234, puis ils ‘ concernent des liens HARD, pas des liens symboliques. Si  » bar  » était un SYMlink, alors ce serait littéralement la chaîne de caractères  » foo  » (ou même le chemin vers foo) au lieu dun nœud. En fait, vous pouvez créer un lien symbolique qui ne pointe ‘ nulle part significatif du tout, par exemple ln -s 'this is not a real file' bar
  • Aussi: BSD (qui inclut Mac OS X) a un appel système lchmod () qui vous permettra de définir les permissions du lien symbolique lui-même. Je nai aucune idée de son utilité.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *