web-dev-qa-db-fra.com

Qu'advient-il d'un lien symbolique lorsque le fichier d'origine est remplacé?

J'ai un logiciel de mise à jour dans/opt/minergate-cli. J'ai renommé le répertoire minergate-cli en minergate-old avec une commande mv, puis installé une version plus récente du logiciel en donnant le même nom de répertoire.

En supposant que j'avais un ancien programme et maintenant un nouveau programme du même nom, qui est "minergate", que deviennent les liens symboliques pointant vers le programme minergate?

Est-ce qu'ils pointent vers le programme original installé dans l'ancien Minergate, ou le lien a-t-il été déplacé vers le nouveau programme minergate.cli?

3
Joe Molnar

Un lien symbolique contient simplement le nom du fichier vers lequel il pointe. (indice, faites ls -l symlink et notez sa taille). Si vous supprimez le fichier cible, mais créez ensuite un nouveau fichier portant le même nom, le lien symbolique continuera à fonctionner, en référence au contenu du nouveau fichier:

$ echo "first file" > file
$ ln -s file symlink
$ ls -l symlink
lrwxrwxrwx 1 jackman jackman 4 Oct 23 23:33 symlink -> file
# ...........................^=size ...................^^^^ target is 4 chars
$ cat symlink
first file
$ mv file file.old
$ echo "this is the second" > file
$ cat symlink
this is the second

Vous pensez peut-être à un lien "dur", qui fait référence au fichier cible inode:

$ echo "first line" > file
$ ln file hardlink
$ ls -li hardlink file
1078415 -rw-r--r-- 2 jackman jackman 11 Oct 23 23:38 file
1078415 -rw-r--r-- 2 jackman jackman 11 Oct 23 23:38 hardlink
$ cat hardlink
first line
$ mv file file.old
$ echo "this is the new contents" > file
$ cat hardlink
first line
$ ls -li hardlink file file.old
1059446 -rw-r--r-- 1 jackman jackman 25 Oct 23 23:39 file
1078415 -rw-r--r-- 2 jackman jackman 11 Oct 23 23:38 file.old
1078415 -rw-r--r-- 2 jackman jackman 11 Oct 23 23:38 hardlink

ici hardlink est le même fichier que le fichier d'origine file.

3
glenn jackman

Une fois que vous avez déplacé un fichier vers lequel un lien symbolique est pointé, ce dernier est rompu, à savoir le lien symbolique pendant. Vous devez le supprimer et en créer un nouveau. Voir aussi https://unix.stackexchange.com/a/18365/85039

2