J'essaie d'utiliser des liens symboliques. J'ai lu un peu et j'ai trouvé les commandes suivantes:
Creation -> ln -s {/path/to/file-name} {link-name}
Update -> ln -sfn {/path/to/file-name} {link-name}
Deletion -> rm {link-name}
Les créations et les suppressions fonctionnent bien. Mais les mises à jour ne fonctionnent pas. Après avoir exécuté cette commande, le lien symbolique devient invalide.
J'ai lu ici et là qu'il n'est pas possible de mettre à jour / remplacer un lien symbolique. Il y a donc des informations contradictoires sur le net. Qui a raison? Si un lien symbolique peut être mis à jour / remplacé, comment puis-je y parvenir?
Mise à jour
Voici ma structure de répertoire:
~/scripts/test/
~/scripts/test/remote_loc/
~/scripts/test/remote_loc/site1/
~/scripts/test/remote_loc/site1/stuff1.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site2/stuff2.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site3/stuff3.txt
À partir de ~/scripts/test/
quand je joue:
ln -s /remote_loc/site1 test_link
a test_link
est créé, et je peux le ls -l
faire, mais il semble cassé (contrairement à ce que j'ai dit plus haut dans ma question).
Comment puis-je effectuer un lien à plusieurs niveaux de répertoire?
la source
unlink
au lieu derm
. Avecunlink
vous ne risquez jamais de perdre des fichiers dans un répertoire source en utilisant accidentellement de mauvais commutateurs.-n
? (peut être le problème). De plus, si votre support prend en charge,-t
utilisez-le pour ces cas-T
oudestination/
pour d'autres cas.Réponses:
Utiliser
-f
avecln
va écraser tout lien qui était déjà là, donc tant que vous avez les permissions appropriées, cela devrait fonctionner ... Cela a toujours fonctionné pour moi. Quel système d'exploitation utilisez-vous?la source
ln
paramètres, comme je suis enclin à le faire, le-f
commutateur détruira-t-il vos fichiers existants (cibles de liens)? Dans les deux cas, nous avons également le-i
paramètre (qui demandera à l'utilisateur de remplacer) si vous souhaitez un peu de sécurité.-f
suffit d'appelerunlink()
et de tomberlink()
sous le capot: stackoverflow.com/a/1466570/157385 . J'aimerais bien que je me souvienne du bon ordre!-n
. Voir la réponse acceptée.Ok, j'ai trouvé où est mon erreur: il ne faut pas mettre le premier
/
dans le chemin.En d'autres termes, les commandes dans mes questions devraient être:
au lieu de
compte tenu de mon cas.
la source
relative
chemin (sans le /) et l’autre est unabsolute
chemin (avec le /). Si vous administrez un système Linux, il est CRITIQUE de comprendre les différences. Par exemple, la différence entrerm -rf ./*
etrm -rf /.*
décide si vous conservez votre travail ou non :)-n
paramètre permettant de remplacer le lien de symbole.Premier numéro:
En vous citant:
Le problème avec la structure de répertoire donnée:
et en utilisant la commande:
Est-ce que cela crée un lien symbolique dans votre répertoire $ PWD, ou présent, qui pointe vers un fichier non existant de la racine /, ou racine, dans / remote_loc / site1
Si votre PWD est dans ~ / scripts /, alors vous devriez avoir utilisé ceci:
ln -s remote_loc/site1 test_link
sinon vous auriez pu utiliser le chemin absolu complet comme:
ln -s /home/yourusername/remote_loc/site1 test_link
Deuxième numéro:
En vous citant:
Pour répondre à votre question "Qui a raison", je ne sais pas ce que vous avez lu exactement ni comment cela a été compris. Mais, les éléments suivants devraient aider à éclaircir:
Mise à jour des liens symboliques avec des cibles qui ne sont pas des répertoires.
Exemple:
Mais, comme vous pouvez le voir, cela donnera le chemin absolu si les chemins absolus sont dans
ln
les arguments de. Donner un chemin complet est nécessaire lorsque le répertoire de travail actuel est différent du répertoire parent du lien.Chemins relatifs:
Exemple:
Cependant, la mise à jour d'un lien vers un répertoire ne fonctionnera pas si la cible est un répertoire.
Exemple:
Comme vous pouvez le constater, malgré l’utilisation des noms de chemins absolus indiqués dans
ln
l’argument ci-dessus sans l’option -r, le lien symbolique est toujours relatif au lien.Mettre à jour les liens vers les répertoires:
Exemple:
Par opposition à:
la source
la source