Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/06/2017, à 09:17

Vbuntu

Renommer Hard link/lien symbolique

Bonjour,

J'ai des lien symbolique ln un peu de partout d'un de mes gros fichiers sur le serveur, et j'aimerai le renommer quelque part et que ça renomme de partout... d'après la doc ubuntu c'est impossible, et d'après "help" de la fonction ln aucune option semble permettre le renommage de partout.

Autre option que j'ai, c'est supprimer tous les liens symboliques que j'ai et les recréer. Mais comment être sûr que le fichier qui s'affiche sur la console est un lien symbolique et non le vrai fichier que je ne veux surtout pas effacer?

Merci

Dernière modification par Vbuntu (Le 22/06/2017, à 09:18)

Hors ligne

#2 Le 22/06/2017, à 10:19

Bougron

Re : Renommer Hard link/lien symbolique

Bonjour
u16041@u16041:~$ mkdir LIENS
u16041@u16041:~$ cd LIENS
u16041@u16041:~/LIENS$ touch toto
u16041@u16041:~/LIENS$ ln -s -T toto totolnk
u16041@u16041:~/LIENS$ ls -ls
total 0
0 -rw-rw-r-- 1 u16041 u16041 0 juin  22 10:14 toto
0 lrwxrwxrwx 1 u16041 u16041 4 juin  22 10:18 totolnk -> toto
u16041@u16041:~/LIENS$

du coup, il devrait y avoir cette commande permettant de trouver tous les liens

sudo ls -Rls / | grep lrwxrwxrwx

Dernière modification par Bougron (Le 22/06/2017, à 10:30)

Hors ligne

#3 Le 22/06/2017, à 13:39

Vbuntu

Re : Renommer Hard link/lien symbolique

Merci pour le bout de code. Je l'ai testé mais je crois qu'il ne fait pas ce que je souhaite. Lorsque je modifie le nom du fichier à un endroit ça ne le modifie pas ailleurs.

Quant à la dernière commande elle me liste tous les liens sous cette forme " totolnk -> toto" (donc ceux crées avec les options -s et -T), mais pas ceux créés avec juste "ln" sans option

Hors ligne

#4 Le 22/06/2017, à 15:01

Sciensous

Re : Renommer Hard link/lien symbolique

pour recherher les liens en durs:

find -samefile <nomdufichier1>

et pour renommer: option -exec du find
voir la man
cool


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#5 Le 22/06/2017, à 15:04

Bougron

Re : Renommer Hard link/lien symbolique

Si dans la commande ln,  tu ne mets pas l'option -s, ce n'est pas un lien symbolique que tu fais mais un lien réel qui enregistre une position physique.

Si tu changes son nom à un endroit, il reste disponible aux autres endroits avec les anciens noms https://doc.ubuntu-fr.org/lien_physique_et_symbolique
Il n'y a donc absolument pas lieu de changer son nom.

Pour retrouver tous les endroits où  il est répertorié:

u16041@u16041:~/LIENS$ ls -lis
total 0
1455035 0 -rw-rw-r-- 3 u16041 u16041 0 juin  22 10:14 toto
1455035 0 -rw-rw-r-- 3 u16041 u16041 0 juin  22 10:14 toto1
1455035 0 -rw-rw-r-- 3 u16041 u16041 0 juin  22 10:14 toto2
1455037 0 lrwxrwxrwx 1 u16041 u16041 4 juin  22 10:18 totolnk -> toto
u16041@u16041:~/LIENS$ 

tu constateras  que les trois fichiers toto, toto1 et toto2 sont un seul et même fichier car ils pointent sur le même inode.

Je te propose d'essayer la commande

ls  -lis toto

tu obtiendras l'endroit physique de stockage, dans mon contexte 1455035
et tu recherches tous les fichiers pointant à cet endroit.
Je vois cette codif

ls -Rlis * | grep 1455035

Il peut y avoir mieux

u16041@u16041:~$ ls -Rlis | grep toto
1455035 4 -rw-rw-r-- 3 u16041 u16041 5 juin  22 15:10 toto
1455035 4 -rw-rw-r-- 3 u16041 u16041 5 juin  22 15:10 toto2
1455037 0 lrwxrwxrwx 1 u16041 u16041 4 juin  22 10:18 totolnk -> toto
u16041@u16041:~$ ls -Rlis | grep 1455035
1455035 4 -rw-rw-r-- 3 u16041 u16041 5 juin  22 15:10 titi
1455035 4 -rw-rw-r-- 3 u16041 u16041 5 juin  22 15:10 toto
1455035 4 -rw-rw-r-- 3 u16041 u16041 5 juin  22 15:10 toto2
u16041@u16041:~$ find -samefile toto
find: «toto»: Aucun fichier ou dossier de ce type
u16041@u16041:~$ 

Dernière modification par Bougron (Le 22/06/2017, à 15:31)

Hors ligne

#6 Le 22/06/2017, à 15:30

DonutMan75

Re : Renommer Hard link/lien symbolique

Hello,
rien ne t'interdit de renommer ton "vrai" fichier puis de faire un lien symbolique nom_ancien_fichier --> nom_nouveau_fichier
Ainsi tu as renommé ton fichier et tout tes liens symboliques fonctionnent.

Sinon, tu peux lister tous les liens qui pointent vers ton "vrai" fichier via l'option -lname de find

$ find . -lname '/chemin/absolu/vers/nom_ancien_fichier'

Cela devrait fonctionner à condition que tout tes liens sont en chemin absolu et non pas en relatif...
Sinon cette commande devrait marcher dans tous les cas (mais elle est moins robuste car elle suppose qu'il n'y a pas d'autre fichier qui s'appelle "nom_ancien_fichier")

$ find . -lname '*nom_ancien_fichier'

Après, je suppose qu'on peut redéfinir les liens à la volée par :

$ find . -lname '*ancien_fichier' - exec ln -sf ./nouveau_fichier {} \;

Ne pas oublier l'option -f de ln qui écrase les anciens liens. Je te recommande de faire une sortie de find dans le exec avant pour contrôler que tu n'écrases pas des trucs qu'il ne faudrait pas !

Exemple :

$ mkdir testln
$ cd testln
$ echo "coucou" > ancien_fichier
$ ln -s ./ancien_fichier lien1
$ ln -s ./ancien_fichier lien2
$ ln -s ./ancien_fichier lien3
$ ll
lrwxr-xr-x  1 xxx  yyy  16 22 jui 15:24 lien1 -> ./ancien_fichier
lrwxr-xr-x  1 xxx  yyy  16 22 jui 15:24 lien2 -> ./ancien_fichier
lrwxr-xr-x  1 xxx  yyy  16 22 jui 15:24 lien3 -> ./ancien_fichier
$ cat lien1
coucou
$ mv ancien_fichier nouveau_fichier
$ cat lien1
cat: lien1: No such file or directory
$ find . -lname '*ancien_fichier' -exec ln -sf ./nouveau_fichier {} \;
$ ll
lrwxr-xr-x  1 xxx  yyy  17 22 jui 15:25 lien1 -> ./nouveau_fichier
lrwxr-xr-x  1 xxx  yyy  17 22 jui 15:25 lien2 -> ./nouveau_fichier
lrwxr-xr-x  1 xxx  yyy  17 22 jui 15:25 lien3 -> ./nouveau_fichier
$ cat lien1
coucou

Ouep, ça marche bien smile

EDIT : ambiguité dans la question, le titre parle de liens physiques (hard link) et le message de liens symboliques. Ca n'a rien à voir. Si on a un seul fichier existant sont différents hard link alors modifier le nom de l'un n'impactera pas les autres.... Pour savoir sous combien de liens physique différent existe ton fichier, il faut faire un ll et regarder la première valeur juste avant le user :

ll a écrit :

lrwxr-xr-x  1 xxx  yyy  17 22 jui 15:25 lien1 -> ./nouveau_fichier

A bientôt,

Donut

Dernière modification par DonutMan75 (Le 22/06/2017, à 15:38)

Hors ligne

#7 Le 22/06/2017, à 16:37

Vbuntu

Re : Renommer Hard link/lien symbolique

@Sciensous

Quoi que je cherche avec cette commande ça me ressort ./nomdufichier, donc ça ne pointe pas vers la direction du fichier d'origine.

@Bougron
Effectivement, ce n'était pas un lien symbolique que je faisais mais un lien normal. Je me suis trompé dans la traduction.
Le Hard link (lien normal) fonctionne toujours si jamais je déplace le fichier source ou si je le supprime. Donc ça me va très bien le hard link, par mesure de précaution il me semble meilleur que le lien symbolique.

j'ai un dossier qui contient totosource.txt et un dossier nommé DOSSIER
dans DOSSIER j'ai fait un ln (hard link) de totosource.txt et j'ai renommé le fichier en totodest.txt
j'ai donc

$ ls
totosource.txt
DOSSIER

$ cd DOSSIER
$ ls
totodest.txt

Lorsque je fais

$ ls  -lis totodest.txt

j'ai

61988893 0 -rw-rw-r-- 2 user user 0 22 juin  16:16 totodest.txt

si je fais ensuite

$ ls -Rlis * | grep 61988893

il m’apparaît

61988893 0 -rw-rw-r-- 2 user user 0 22 juin  16:16 totodest.txt

J'ai un peu l'impression de tourner en rond et de ne jamais avoir ni le nom du fichier source ni encore moins le chemin. Le find samefile ne me donne pas non plus ces infos.

@Donut
je n'avais jamais fait attention à ce petit chiffre lorsqu'on fait un ll! Info utile, merci!
Sinon c'est bien des hard link que je veux.
Le fichier d'origine a souvent un nom composé de lettres et de longues séries de chiffres. Immémorisable.
Je fais un hard link vers ailleurs où je traduis ça en nom barbare plein d'infos sur mon fichier.
Et j'en fais ensuite d'autres à droite et à gauche avec des noms très simplifiés. Ce que je pensais être une méthode de simplification, avec es noms bien mémorisable pour savoir sur quoi on travaille, c'est petit à petit transformé en gros truc complexe avec plein de fichiers identiques mais nommés différemment ce qui parfois porte à confusion. C'est pour ça que j'aimerai renommer tous mes hard links qui sort répartis de partout de la même manière.

Merci à tous

Hors ligne

#8 Le 23/06/2017, à 08:47

Vbuntu

Re : Renommer Hard link/lien symbolique

Ah, c'est bon j'ai réussi! Merci!

ls -Rlis | grep 1451812 il faut le faire depuis un dossier le plus proche de la racine, sinon on ne voit pas tous les hard link.
donc ça c'est très bien, je peux voir tous les noms différents de mon même fichier.
Maintenant comment je peux modifier tous les noms en une seule fois, sans les chercher un par un ? Ou au pire comment avoir le chemin d'accès pour totobidule et totodest?

merci

Hors ligne

#9 Le 23/06/2017, à 09:34

Bougron

Re : Renommer Hard link/lien symbolique

Bonjour
Si tu as des centaines de noms différents pour le même fichier, il te faut un script. Mais je ne suis pas très compétent.
si tu n'en as qu'une dizaine, je pense que cela doit marcher:

    mv    nomancien    NouveauNom
    mv    anciennom    NouveauNom
    mv      Oldname     NouveauNom
    mv  Le fichierlinké  NouveauNom
   mv     xxxxxxx          NouveauNom

Je te rappelle simplement que le changement de nom n'est pas nécessaire.

Je ne connais pas d'option permettant de lister sous la forme

-rwxrwx--- 1 u16041 plugdev 1013K juin  30  2016 /home/u16041/Téléchargements/UM_Acer_1.0_Fr/Acer Regulatory Information and Safety Guide_FR_v5.pdf

Mais ces commandes devraient coller puisque tu connais le inode

cd   /
sudo     find .   -inum 61988893 

Dernière modification par Bougron (Le 23/06/2017, à 10:26)

Hors ligne