chown non sta cambiando il collegamento simbolico


312

Sto provando a cambiare l'utente / gruppo di un collegamento simbolico con il comando:

$ chown -h myuser:mygroup mysymbolic/ 

Ma non sta cambiando. Ho effettuato l'accesso come root. L'utente / gruppo corrente è impostato su root: root. Cosa è andato storto?


Quale sistema operativo usi? Secondo la pagina di manaul, l'opzione -h ha effetto solo sui sistemi che possono cambiare la proprietà del collegamento simbolico.
Jichao,

Sei su un mount NFS?
Ortomala Lokni,

Tutto ciò che termina /è una directory. Intendi mysymbolicqual è il collegamento simbolico, non mysymbolic/quale sia probabilmente la directory a cui punta.
David Schwartz,

Risposte:


381

Stavo mettendo una barra alla fine del bersaglio:

chown -h myuser:mygroup mysymbolic/ 

ho appena rimosso la barra alla fine e funziona. Ecco il modo corretto:

 chown -h myuser:mygroup mysymbolic

9
non funziona per me su Ubuntu
Radek,

2
Wow, mi ci sono volute ore per trovarlo.
definisce il

54
@Radek Ha funzionato per me su Ubuntu finché mi sono ricordato della -hbandiera.
IQAndreas,

29
Funziona per me su Ubuntu con -h e senza la barra finale.
friederbluemle,

8
Non ci posso credere dopo 4 anni, mi sono imbattuto nel mio passato subendo lo stesso problema, il missin '-h'!
Antony D'Andrea il

29

L'ho provato io stesso e funziona per me. Se hai -h cambia il proprietario del link simbolico, ma se non lo fai cambia il proprietario del file stesso e non il link.

Ma sembra che il collegamento simbolico non sia collegato a una directory


2
Per quello che vale, la pagina man su OS X è molto più chiara sull'opzione -h rispetto a quella su (Arch) Linux. "-H Se il file è un collegamento simbolico, modificare l'ID utente e / o l'ID gruppo del collegamento stesso." Vs. "-h, --no-dereference influisce sui collegamenti simbolici anziché su qualsiasi file di riferimento (utile solo su sistemi che possono cambiare la proprietà di un
collegamento

6

Non sono stato in grado di accedere a chownuna directory anche con, -hma utilizzando il percorso completo ha funzionato.

# 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/

4

Il target è un file o una directory?

Se è una directory, prova -H (maiuscola H)


l'obiettivo è una directory

vedere la mia risposta modificata sulla directory

6
Ci scusiamo per la negromanzia del thread, ma vorrei sottolineare che la sintassi corretta è con la 'h' minuscola.

4

semplicemente.

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

dovrebbe essere abbastanza e funzionare!  


3

Ricrea quel link da myuser a casa di myuser e mv questo link alla posizione di destinazione su sudo.

Ad esempio: (come myuser), ln -s somedir/ linkname (sarà un collegamento interrotto se somedir / non esiste nella directory dell'utente)

Quindi, sudo mv linkname targetlocation(diventerà un collegamento valido fornito targetlocation/somedir/esiste)


La tua risposta è senza dettagli e difficile da comprendere appieno. Considera di rivedere la tua risposta per fornire maggiori dettagli.
James Mertz,

1

Ho avuto un problema simile. Per quanto mi riguarda, non sono riuscito a modificare il link simbolico nemmeno come root, indipendentemente da come ho chiamato chmod. Per aggiungere confusione a questo, nautilus mostrava il proprietario / gruppo come niente. Il proprietario era solo vuoto. Quindi ho provato a cambiare il collegamento simbolico usando nautilus in esecuzione come root poiché chmod non funzionava e nautilus si è bloccato !!

Ma penso di aver capito il problema. La directory a cui puntava il collegamento simbolico aveva autorizzazioni diverse rispetto al collegamento simbolico. Quindi ho modificato la directory di destinazione (usando -h) per il mio nome utente / gruppo. Quindi ha modificato il collegamento simbolico con lo stesso e ha funzionato! E la visualizzazione dei dettagli del collegamento simbolico in nautilus (con permessi di root) ora non si blocca più.

Quindi, per gli altri che hanno un problema simile, controlla le autorizzazioni della directory / file di destinazione e assicurati che sia compatibile con le autorizzazioni a cui stai impostando il collegamento simbolico.


1

Si noti che la modifica ownerdi un collegamento simbolico può funzionare solo se la destinazione è accessibile dal nuovo utente a cui si desidera assegnarlo.

Ad esempio, se la destinazione è all'interno di una cartella a cui l'utente che si desidera assegnare non dispone di diritti sufficienti, il ln -s commandcomportamento è tale che non farà nulla.


1

Per Solaris (verificato su S11.3) per un collegamento simbolico a una directory è necessario eseguire

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/
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.