J'ai un lien symbolique avec ces autorisations:
lrwxrwxrwx 1 myuser myuser 38 Aug 18 00:36 npm -> ../lib/node_modules/npm/bin/npm-cli.js*
Le lien symbolique se trouve dans une archive .tar.gz. Maintenant, quand je décompresse l'archive tar.gz en utilisant maven, le lien symbolique n'est plus valide. J'essaie donc de reconstruire le lien symbolique. Je crée d'abord le lien symbolique en utilisant ln mais comment puis-je définir les mêmes autorisations que le lien symbolique d'origine?
Vous pouvez créer un nouveau lien symbolique et le déplacer vers l'emplacement de l'ancien lien.
ln -s <new_location> npm2
mv -f npm2 npm
Cela préservera la propriété du lien. Vous pouvez également utiliser chown
pour définir manuellement la propriété du lien.
chown -h myuser:myuser npm
Sur la plupart des systèmes, les autorisations de lien symbolique n'ont pas d'importance. Lors de l'utilisation du lien symbolique, les autorisations des composants de la cible du lien symbolique seront vérifiées. Cependant, sur certains systèmes, ils importent. MacOS nécessite une autorisation de lecture sur le lien pour readlink
, et l'option de montage symperm
de NetBSD force les vérifications des autorisations de lien sur la lecture et la traversée. Sur ces systèmes (et leurs proches, y compris FreeBSD et OpenBSD), il existe un équivalent -h
option pour chmod
.
chmod -h 777 npm
Lorsque vous essayez d'utiliser chmod
pour définir les autorisations du lien, vous effectuez en réalité la définition des autorisations de la cible du lien. Les autorisations du lien n'ont aucun sens.
Lorsque vous avez un lien comme:
link -> foo/bar
et souhaitez le changer en:
link -> new/target
Il y a deux cas à considérer:
foo/bar
n'est pas un répertoire ou n'existe pas ou vous n'avez pas accès à la recherche à foo
. alors
ln -s new/target link
échouera car link
existe déjà, mais vous pouvez surmonter cela en utilisant la norme:
ln -fs new/target link
foo/bar
est un répertoire (et vous disposez des droits de recherche sur foo
pour pouvoir déterminer que foo/bar
est un directeur). Dans ce cas, lorsque vous faites:
ln -s new/target link
ou
ln -fs new/target link
Cela signifie que la création d'un nouveau lien symbolique target
dans le répertoire link
(link
est un répertoire car il s'agit d'un lien symbolique vers le foo/bar
répertoire). Vous allez donc créer un:
foo/bar/target -> new/target
Pour surmonter cela, GNU ln
a un -T
option pour que le nom du lien soit toujours considéré comme un nom de lien, et non comme un répertoire dans lequel créer le (s) lien (s). Ainsi, avec GNU ln
:
ln -fsT new/target link
marchera. Comme précédemment, il supprimera le lien symbolique link
d'origine et le créera à nouveau avec new/target
comme cible (et euid et egid du processus comme propriétaire).
GNU ln
a également un -n
option. Cela fonctionne comme -T
sauf lorsque link
est en fait un vrai répertoire, auquel cas il créera toujours le lien symbolique à l'intérieur de ce répertoire (au lieu d'échouer avec une erreur).
Portablement, votre meilleure option est de supprimer le lien d'abord, puis de le recréer:
rm -f link && ln -s new/target link
Sur la plupart des systèmes, les autorisations sur les liens symboliques sont ignorées et généralement fixées à rwxrwxrwx
.
Sur les systèmes où les autorisations de lien symbolique sont importantes (comme OS/X où vous avez besoin d'une autorisation de lecture sur un lien symbolique pour pouvoir résoudre sa cible), il existe généralement un moyen de les modifier (chmod -h
sur OS/X).
Propriété, bien que comme ci-dessus non pertinente pour l'accès au fichier pointé par le lien symbolique sur la plupart des systèmes, peut avoir une autre pertinence par rapport au bit t
du répertoire parent ou des quotas ... =) et il y a une commande standard pour le changer:
chown -h user[:group] the-link
chgrp -h group the-link
Si vous avez vraiment besoin de modifier l'autorisation des liens symboliques (généralement sans signification, comme écrit dans d'autres réponses), j'ai réussi à utiliser -R
option de chown
:
chown -R myuser:mygroup link
Si -R
n'a pas été utilisé, les autorisations n'ont pas été modifiées.