chown ne change pas de lien symbolique


312

J'essaie de changer l'utilisateur / le groupe d'un lien symbolique avec la commande:

$ chown -h myuser:mygroup mysymbolic/ 

Mais ça ne change pas. Je suis connecté en tant que root. L'utilisateur / groupe actuel est défini sur root: root. Qu'est ce qui ne s'est pas bien passé?


Quel système d’exploitation utilisez-vous? Selon la page de manuel manaul, l’option -h n’a d’effet que sur les systèmes pouvant modifier la propriété du lien symbolique.
Jichao

Êtes-vous sur un montage NFS?
Ortomala Lokni

Tout ce qui se termine par /est un répertoire. Vous voulez dire mysymbolic, qui est le lien symbolique, et non mysymbolic/le répertoire vers lequel il pointe.
David Schwartz

Réponses:


381

Je mettais une barre oblique à la fin de la cible:

chown -h myuser:mygroup mysymbolic/ 

vient de supprimer la barre oblique à la fin et fonctionne. Voici la bonne façon:

 chown -h myuser:mygroup mysymbolic

9
ça ne marche pas pour moi sur ubuntu
Radek

2
Wow, cela m'a pris des heures pour trouver.
définit

54
@Radek Cela a fonctionné pour moi sur Ubuntu aussi longtemps que je me suis souvenu du -hdrapeau.
IQAndreas

29
Fonctionne pour moi sur Ubuntu avec -h et sans la barre oblique finale.
friederbluemle

8
Je ne peux pas croire après 4 ans, je suis tombé sur mon passé, souffrant du même problème, le raté -h '!
Antony D'Andrea

29

J'ai essayé cela moi-même et cela fonctionne pour moi. Si vous avez le -h, cela change le propriétaire du lien symbolique, mais sinon, le propriétaire du fichier lui-même et non le lien.

Mais cela ne semble pas fonctionner si le lien symbolique est lié à un répertoire


2
Pour ce que cela vaut, la page de manuel sur OS X est beaucoup plus claire sur l'option -h que celle sur (Arch) Linux. "-H Si le fichier est un lien symbolique, modifiez l'ID utilisateur et / ou l'ID de groupe du lien lui-même." Vs "-h, --no-dereference" affecte les liens symboliques systèmes pouvant modifier la propriété d'un lien symbolique) "
Matijs

6

Je ne pouvais pas accéder à chownun répertoire même avec, -hmais le chemin complet fonctionnait.

# ls -al
drwxr-xr-x 2 deploy deploy 4096 Dec 30 10:29 .
drwxr-xr-x 3 deploy deploy 4096 Dec 30 08:59 ..
lrwxrwxrwx 1 root   root     32 Dec 30 09:02 apps -> /u/apps/
# chown -h deploy:deploy apps
# ls -al
drwxr-xr-x 2 deploy deploy 4096 Dec 30 10:29 .
drwxr-xr-x 3 deploy deploy 4096 Dec 30 08:59 ..
lrwxrwxrwx 1 root   root     32 Dec 30 09:02 apps -> /u/apps/
# chown -h deploy:deploy apps/
# ls -al
drwxr-xr-x 2 deploy deploy 4096 Dec 30 10:29 .
drwxr-xr-x 3 deploy deploy 4096 Dec 30 08:59 ..
lrwxrwxrwx 1 root   root     32 Dec 30 09:02 apps -> /u/apps/
# pwd 
/var/www/html
# chown -h deploy:deploy /var/www/html/apps
# ls -al
drwxr-xr-x 2 deploy deploy 4096 Dec 30 10:29 .
drwxr-xr-x 3 deploy deploy 4096 Dec 30 08:59 ..
lrwxrwxrwx 1 deploy deploy   32 Dec 30 09:02 apps -> /u/apps/

5

La cible est-elle un fichier ou un répertoire?

S'il s'agit d'un répertoire, essayez -H (majuscule H)


la cible est un répertoire

voir ma réponse éditée à propos du répertoire

6
Désolé pour la nécromancie des threads, mais je voudrais préciser que la syntaxe correcte est celle qui est en minuscule 'h'.

4

simplement.

chown -h myuser:mygroup <symlink> [without trailing slash]

devrait être suffisant et travailler!  


3

Recréez ce lien par myuser chez myuser, et mv ce lien vers l'emplacement cible par sudo.

Par exemple: (en tant que myuser), ln -s somedir/ linkname (sera un lien cassé si quelque chose / n'existe pas dans le répertoire de l'utilisateur)

Ensuite, sudo mv linkname targetlocation(deviendra un lien valide à condition qu'il targetlocation/somedir/existe)


Votre réponse est sans détail et difficile à comprendre. Veuillez envisager de réviser votre réponse pour fournir plus de détails.
James Mertz

1

J'avais un problème similaire. Pour moi, je ne pouvais pas chmoder le lien symbolique même en tant que root, peu importe comment j'ai appelé chmod. Pour ajouter à la confusion, nautilus ne montrait rien au propriétaire / groupe. Le propriétaire était juste vide. J'ai donc essayé de changer le lien symbolique en utilisant Nautilus en tant que racine car chmod ne fonctionnait pas et Nautilus s'est écrasé !!

Mais je pense avoir résolu le problème. Le répertoire pointé par le lien symbolique avait des autorisations différentes de celles du lien symbolique. J'ai donc modifié le répertoire cible (en utilisant -h) avec le nom de mon utilisateur / groupe. Ensuite, cliquez sur le lien symbolique et vérifiez le résultat! Et l'affichage des détails du lien symbolique dans Nautilus (avec les autorisations root) ne se bloque plus.

Par conséquent, pour les autres personnes ayant un problème similaire, vérifiez les autorisations du répertoire / fichier cible et assurez-vous qu'il est compatible avec les autorisations pour lesquelles vous définissez le lien symbolique.


1

Notez que la modification ownerdu lien symbolique ne peut fonctionner que si la cible est accessible au nouvel utilisateur auquel vous souhaitez l'attribuer.

Par exemple, si votre cible se trouve dans un dossier auquel l'utilisateur auquel vous souhaitez attribuer ne dispose pas de droits suffisants, le ln -s commandcomportement est tel qu'il ne fera rien du tout.


1

Pour Solaris (vérifié sur S11.3) pour un lien symbolique vers un répertoire, vous devez exécuter

root@ac11x017:/var/tmp$ ls -lal dumpdir
lrwxrwxrwx   1 root     root          16 Jun 15 09:08 dumpdir -> /data/dumpdir/
root@ac11x017:/var/tmp$ chown -RP oracle:oinstall dumpdir
lrwxrwxrwx   1 oracle   oinstall      16 Jun 15 09:09 dumpdir -> /data/dumpdir/
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.