loading
icone Accueil du site > Le mag' > Mac & Cie


Passez la commande (7) : ln

Catégorie : Système neilime / 26 février 2007 à 00:00

Imprimer

Leçon n°7

Il existe en unix la possibilité de créer des liens entre les fichiers : les liens physiques et les liens symboliques.

C’est le numéro inode (voir la leçon n°6) qui permet de réaliser le premier des deux types de lien. Cette possibilité n’est pas offerte par l’interface graphique de Mac OS X. Elle permet d’associer à deux fichiers, le même numéro d’inode : virtuellement, il existe deux fichiers, mais sur le disque, il n’existe qu’un seul emplacement où sont inscrites les données : c’est le lien physique.
Un fichier essai.txt peut être lié physiquement à un fichier essai_lien.txt (pas encore créé) en utilisant la commande suivante dans le Terminal :
- ln essai.txt essai_lien.txt
En utilisant la commande ls -i, on vérifie que les deux fichiers possèdent le même numéro inode. Si l’un des deux fichiers est modifié, l’autre le sera de fait puisqu’ils ne correspondent en fait qu’à un seul emplacement physique en mémoire. Si l’on supprime le fichier essai.txt, le contenu du fichier sera toujours accessible par ouverture du fichier essai_lien.txt.

Un second type de lien entre deux fichiers existe : c’est le lien symbolique. Son concept est repris dans Mac OS X sous le nom d’alias. La création d’un tel lien entraîne la création d’un fichier contenant une référence du fichier lié. La commande associée est une option de la commande ln :
- ln -s essai.txt essai_lien_symb.txt
Dans le Finder, on peut vérifier que le fichier essai_lien.txt est bien du type alias. Mais contrairement au lien physique, si l’on supprime le fichier essai.txt, son contenu ne sera plus accessible, le fichier essai_lien_symb.txt ne contenant plus que l’endroit où était situé essai.txt avant d’être effacé.

Exercice : Créez un dossier dans le Finder et à l’intérieur un fichier essai.txt, rendez-y vous avec la commande cd (voir la leçon n°2) puis liez le fichier de manière symbolique et physique comme vu au dessus. Comment est symbolisé chaque type de lien après utilisation de la commande ls -li ?

- Leçon précédente
- Leçon suivante


Réagissez, 9 Commentaires

patrick314159
La relation entre un link symbolique du monde unix et un alias du monde HFS+ est plus subtile qu'il ne parait à première vue. Voir par exemple

http://developer.apple.com/documentation/M...es/Aliases.html

pour plus de précision.
Ali Baba
Je confirme que bien qu'ils servent à la même chose conceptuellement, un lien symbolique est un objet différent d'un alias. Le Fider affiche certes les liens symboliques comme des alias (ce qui n'est pas le cas de Path Finder, au passage, qui les distingue par une couleur différente), mais il ne permet pas plus de créer des liens symboliques que des liens durs : il n'est capable de créer que des alias. Par ailleurs, un alias est inexploitable dans le Terminal qui le voit comme un simple fichier binaire qu'il est incapable d'interpréter.
Derw
CITATION(Ali Baba @ Feb 26 2007, 08:39) [snapback]126908[/snapback]

Je confirme que bien qu'ils servent à la même chose conceptuellement, un lien symbolique est un objet différent d'un alias.


OK. Un lien symbolique et un alias sont conceptuellement identiques mais techniquement différents. Toutefois, qu'est-ce qu'implique cette différence ? En gros, quel avantages/inconvénients offre chacun des deux systèmes ? Premier élément de réponse : on ne peut créer/utiliser les alias via le Terminal, mais on ne peut pas non pas non plus créer/utiliser les liens symbolique via le Finder. Autre chose ?

PS : je pense qu'il doit y avoir les réponses dans le lien donné par Patrick, mais comme on est ici pour "vulgariser" et en français… wink.gif
zoz
CITATION(Derw @ Feb 26 2007, 11:41) [snapback]126915[/snapback]

OK. Un lien symbolique et un alias sont conceptuellement identiques mais techniquement différents. Toutefois, qu'est-ce qu'implique cette différence ? En gros, quel avantages/inconvénients offre chacun des deux systèmes ? Premier élément de réponse : on ne peut créer/utiliser les alias via le Terminal, mais on ne peut pas non pas non plus créer/utiliser les liens symbolique via le Finder. Autre chose ?

PS : je pense qu'il doit y avoir les réponses dans le lien donné par Patrick, mais comme on est ici pour "vulgariser" et en français… wink.gif


Attention aussi à faire la différence entre un alias du Finder et l'alias sous le terminal, un alias sous le terminal donne un raccourcis pour une commande, un exemple :
alias ll='ls -alG' -> maintenant, quand je tape ll dans le terminal, il m'affiche en fait la commande ls -alG, sauf que ll est plus court à taper ;-)
stefd
CITATION(MacPlus @ Feb 26 2007, 01:38) [snapback]126905[/snapback]


pour répondre :

-> ~/Desktop/Term stefd$ ls -li essai.txt
2931589 -rw-r--r-- 2 stefd stefd 17 Feb 26 14:51 essai.txt

-> ~/Desktop/Term stefd$ ls -li essai_lien.txt
2931589 -rw-r--r-- 2 stefd stefd 17 Feb 26 14:51 essai_lien.txt

-> ~/Desktop/Term stefd$ ls -li essai_lien_symb.txt
2931774 lrwxr-xr-x 1 stefd stefd 9 Feb 26 16:00 essai_lien_symb.txt -> essai.txt

était-ce cela ?

bien à vous

PS :

j'ai fait un petit fichier rtf reprenant toutes les lecons et réponses, c'est par ici

Merci à vous smile.gif
garulfo
CITATION(Derw @ Feb 26 2007, 05:41) [snapback]126915[/snapback]

OK. Un lien symbolique et un alias sont conceptuellement identiques mais techniquement différents. Toutefois, qu'est-ce qu'implique cette différence ? En gros, quel avantages/inconvénients offre chacun des deux systèmes ? Premier élément de réponse : on ne peut créer/utiliser les alias via le Terminal, mais on ne peut pas non pas non plus créer/utiliser les liens symbolique via le Finder. Autre chose ?

PS : je pense qu'il doit y avoir les réponses dans le lien donné par Patrick, mais comme on est ici pour "vulgariser" et en français… wink.gif


L'alias se fait facilement dans le finder; pas le lien symbolique.
Le lien symbolique se fait dans le terminal; pas l'alias.

Le lien symbolique peut être suivi par la commande 'cd' dans un terminal. On peut changer de répertoire à l'aide d'un lien symbolique.
L'alias ne le peut pas. Le terminal voit un fichier et non un lien. C'est génant pour les scripts.

Le lien symbolique ne peut être particularisé (customizé)
L'alias peut se voir ajouter un icône pour le rendre plus joli, et une couleur de répertoire par exemple.

Voilà trois différences.
Je préfère donc utiliser le lien symbolique puisque j'utilise beaucoup le terminal.

CITATION(zoz @ Feb 26 2007, 05:56) [snapback]126918[/snapback]

Attention aussi à faire la différence entre un alias du Finder et l'alias sous le terminal, un alias sous le terminal donne un raccourcis pour une commande, un exemple :
alias ll='ls -alG' -> maintenant, quand je tape ll dans le terminal, il m'affiche en fait la commande ls -alG, sauf que ll est plus court à taper ;-)


Oui enfin là ça n'a plus de rapport et tu vas méler l'assistance sleep.gif
patrick314159
J'étais un peu absent, au dessus des mers smile.gif D'où ma réponse tardive...

- Un alias du finder est un inode, c'est à dire l'identité du fichier pour le système de fichiers. En particulier on peut renommer un fichier, le déplacer sans perturber l'alias, il pointera toujours sur le bon fichier, puisque l'identité système du fichier, une fois créé, ne change pas, jusqu'à sa destruction.

- Un link est un chemin d'accès (un path), par exemple ~/my_file.txt désigne le fichier qui s'appelle my_file.txt, situé à la racine de votre dossier "Maison" (home directory). Donc si vous avez changé le nom ou déplacé le fichier, le lien qui n'est rien d'autre que le chemin d'accès, ne pointe plus sur rien.

Mais aujourd'hui un alias du Finder contient en plus de l'inode, le lien symbolique (le chemin d'accès). Conséquence intéressante : si vous détruisez votre fichier, l'alias ne pointe plus sur rien, mais si vous créez au même endroit un nouveau fichier qui porte le même nom, votre alias pointera dessus (à nouveau si j'ose dire), par le mécanisme décrit par la doc.

Il n'y a pas un meilleur choix, entre l'un et l'autre, tout dépend de l'usage que l'on en fait. Perso, j'utilise les deux dans mes scripts suivant que j'exploite une structure privée du script, qui ne bouge pas (dans les dossier de la librairie par exemple), là j'utilise des links, car ils sont légers 4KO. Et, si je veux pister un fichier d'utilisateurs, alors j'utilise un alias (plus lourds, quelques dizaines de KO), car je ne peux pas imposer à l'utilisateur de mettre son fichier où je veux wink.gif Je lui laisse la liberté (magnanime non ?).

Les scripts de terminal c'est bien pour une gestion perso mais pas pour le développement. Les alias ont été introduit pour justement permettre cette souplesse de gestion de fichiers que Mac OS a toujours offerte. C'est vrai que les mac users qui viennent du monde unix pur et dur peuvent être surpris .

P.S. La notion de link existe aussi pour mac depuis le début, c'est appelé une référence de fichier en apple-script, par exemple "file my_file.txt of home folder" est equivalent à "~/my_file.txt"

P.S.2 Si vous voulez programer, ou simplement comprendre l'informatique, il vaut mieux vous mettre à l'anglais tout de suite wink.gif Comme disait Coluche "Quand on pense qu'il y a à peine 60 millions de français et plus de 6 milliards d'étrangers" laugh.gif
garulfo
CITATION(patrick314159 @ Feb 27 2007, 17:59) [snapback]127012[/snapback]

- Un alias du finder est un inode, [...]

Derw voulait pas de langage technique, me semble happy.gif


CITATION

Les scripts de terminal c'est bien pour une gestion perso mais pas pour le développement.
[...]


Tiens... on ne vit pas dans le même monde. rolleyes.gif
patrick314159
CITATION(garulfo @ Mar 1 2007, 18:02) [snapback]127131[/snapback]

Derw voulait pas de langage technique, me semble happy.gif
Je ne veux pas polémiquer à l'infini, mais j'explique ensuite ce que cela signifie de façon non technique. Pour mieux comprendre il faut parois entrer dans les détails wink.gif
CITATION(garulfo @ Mar 1 2007, 18:02) [snapback]127131[/snapback]

Tiens... on ne vit pas dans le même monde. rolleyes.gif
Je fais juste part de mon expérience. Un logiciel développé pour un usage général ne peut pas imposer à l'utilisateur une hierarchie rigide. Il faut donc pouvoir retrouver les fichiers créés par l'appli simplement, en minimisant les boites de dialogues et l'intervention de l'utilisateur. L'usage d'alias mac facilite ce travail. Je te donne un exemple : Si tu veux gérer l'ensemble des fichiers créés par l'utilisateur avec ton appli tu peux créer un dossier de ton application dans le dossier "Application Support" créé à cet usage par le système. Dans ce dossier tu copies, pour chaque document créé, un alias sur le document. Ensuite tu peux relire le contenu de ce dossier et retrouver tout de suite, sans l'intervention de l'utilisateur, les fichiers créés où que l'utilisateur les ait rangés. Tu peux difficilement faire de même en te contentant de symlink unix. De cette façon tu évites les boites de dialogue du style "Vous avez changé votre fichier de place, voulez vous le retrouver ?".

Maintenant, ton dossier à toi, qui contient toutes ces infos, tu peux y référer par les symlink dans la mesure où son emplacement dans la hierarchie est fixe.

Cet usage évite aussi le problème suivant : imagine que l'utilisateur ait créé un fichier "my_file.txt" dans un certain dossier, qu'il le change d'endroit et qu'il recrée dans le même dossier un nouveau fichier avec le même nom. Avec la méthode décrite au dessus il retrouvera le bon fichier, l'original. Avec un symlink il trouvera le second qui n'aura peut-être aucun rapport avec ton appli.

Il y a d'autres exemples où l'usage d'alias est nécesaire et peut difficilement être remplacé par un symlink. Mais l'essentiel de la discussion portait sur la différence entre un alias et un symlink, je pense que c'est un peu plus clair maintenant, non ?


P.S. Si cela intéresse quelqu'un je peux écrire une petite applet pour illustrer cette méthode.

Réagissez

Surfez futé

  • mac2sell
  • mac2sell
  • mac2sell
  • petites Annonces
  • mac2sell
  • petites Annonces
Publicité
annonce Refurb Store Vous souhaitez acheter un mac à petit prix ? Aucun doute, le refurb est fait pour vous...

Mac disponibles

MacBook Air Intel Core 2 Duo 1,86 GHz reconditionné : 1.149,00 € MacBook Air Intel Core 2 Duo 1,8 GHz reconditionné : 1.199,00 € iMac Intel Core 2 Duo 27 po 3,06 GHz reconditionné : 1.279,00 € MacBook Air Intel Core 2 Duo 1,86 GHz reconditionné : 1.349,00 € MacBook Air Intel Core 2 Duo 2.13 GHz reconditionné : 1.449,00 € MacBook Pro à processeur Intel Core 2 Duo de 2,66 GHz reconditionné : 1.499,00 € MacBook Pro à processeur Intel Core 2 Duo de 2,53 GHz reconditionné : 1.629,00 € MacBook Pro à processeur Intel Core 2 Duo de 2.8 GHz reconditionné : 1.799,00 € MacBook Pro à processeur Intel Core 2 Duo de 2.8 GHz reconditionné : 1.839,00 € MacBook Pro à processeur Intel Core 2 Duo de 2,66 GHz reconditionné : 1.899,00 € MacBook Pro à processeur Intel Core 2 Duo de 2,8 GHz reconditionné : 1.949,00 € MacBook Pro à processeur Intel Core 2 Duo de 2,93 GHz reconditionné : 1.969,00 € MacBook Pro à processeur Intel Core 2 Duo de 3,06 GHz reconditionné : 1.979,00 € Mac Pro reconditionné 2,66 Ghz Xeon Intel 4 cÅ“urs : 1.999,00 € MacBook Pro à processeur Intel Core 2 Duo de 2,66 GHz reconditionné : 2.069,00 € MacBook Pro Intel Core 2 Duo 2,5 GHz reconditionné : 2.349,00 € Mac Pro reconditionné 2,26 Ghz Xeon Intel 8 cÅ“urs : 2.599,00 €

w3c