Premier numéro:
En vous citant:
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.
Le problème avec la structure de répertoire donnée:
~ / 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
et en utilisant la commande:
ln -s /remote_loc/site1 test_link
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:
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?
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:
- Que peut-on mettre à jour, et
- Que ne peut pas être mis à jour sans utiliser les commutateurs appropriés.
Mise à jour des liens symboliques avec des cibles qui ne sont pas des répertoires.
ln -sf:
le -f ou --force supprime les fichiers de destination existants. Ceci est utilisé pour mettre à jour la cible ou la destination d'un lien.
Exemple:
ln -sf /tmp/test /tmp/test.link; ls -go /tmp |grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 9 Jun 8 17:27 test.link -> /tmp/test
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:
ln -sfr:
le -r ou --relative crée des liens symboliques relatifs à l'emplacement du lien.
Exemple:
ln -sfr /tmp/test /tmp/test.link ; ls -go /tmp| grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 4 Jun 8 17:27 test.link -> test
Cependant, la mise à jour d'un lien vers un répertoire ne fonctionnera pas si la cible est un répertoire.
Exemple:
ln -sf /tmp/testdir /tmp/testdir.link ; ls -go /tmp |grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:47 testdir.link -> testdir
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:
ln -sfrn:
le -n ou --no-dereference considère LINK_NAME comme un fichier normal s'il s'agit d'un lien symbolique vers un répertoire.
Exemple:
ln -sfn /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 12 Jun 8 17:48 testdir.link -> /tmp/testdir
Par opposition à:
ln -sfnr /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:48 testdir.link -> testdir
unlink
au lieu derm
. Avecunlink
vous ne risquez jamais de perdre des fichiers dans un répertoire source en utilisant accidentellement de mauvais commutateurs.