chown não está mudando link simbólico

312

Estou tentando alterar o usuário / grupo de um link simbólico com o comando:

$ chown -h myuser:mygroup mysymbolic/ 

Mas não está mudando. Estou logado como root. O usuário / grupo atual está definido como root: root. O que deu errado?


fonte
Qual sistema operacional você usa? De acordo com a página de manaul, a opção -h só afeta os sistemas que podem alterar a propriedade do link simbólico.
Jichao
Você está em uma montagem NFS?
Ortomala Lokni
Tudo o que termina com /é um diretório. Você quer dizer mysymbolic, qual é o link simbólico, não mysymbolic/qual é provavelmente o diretório para o qual ele aponta.
David Schwartz

Respostas:

381

Eu estava colocando uma barra no final do alvo:

chown -h myuser:mygroup mysymbolic/ 

acabou de remover a barra no final e funciona. Aqui está a maneira correta:

 chown -h myuser:mygroup mysymbolic
rizidoro
fonte
9
não funciona para mim no Ubuntu
Radek
2
Uau, isso me levou horas para encontrar.
define
54
@Radek Funcionou para mim no Ubuntu desde que me lembrei da -hbandeira.
IQAndreas
29
Funciona para mim no Ubuntu com -h e sem a barra final.
Friederbluemle
8
Não posso acreditar que, depois de quatro anos, esbarrei no meu passado sofrendo o mesmo problema, a falta -h!
Antony D'Andrea
29

Eu tentei isso sozinho e funciona para mim. Se você possui -h, ele altera o proprietário do link simbólico, mas, se não, o proprietário do arquivo e não o link.

Mas parece que o link simbólico não está ligado a um diretório

Arto Uusikangas
fonte
2
Pelo que vale a pena, a página de manual no OS X é muito mais clara na opção -h do que a do (Arch) Linux. “-H Se o arquivo for um link simbólico, altere o ID do usuário e / ou o ID do grupo do próprio link.” Vs. “-h, --no-dereference afeta os links simbólicos em vez de qualquer arquivo referenciado (útil apenas em sistemas que podem alterar a propriedade de um link simbólico)”
Matijs
6

Eu era incapaz de chownum diretório, mesmo com, -hmas usando o caminho completo funcionou.

# 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/
Steve Tauber
fonte
5

O destino é um arquivo ou um diretório?

Se for um diretório, tente -H (H maiúsculo)


fonte
o alvo é um directório
veja a minha resposta editada sobre diretório
6
Desculpe pela necromancia do encadeamento, mas gostaria de ressaltar que a sintaxe correta está com a letra minúscula 'h'.
4

simplesmente.

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

deve ser suficiente e trabalhar!  

Aziz Zoaib
fonte
3

Recrie esse link por myuser na casa do myuser e mv esse link para o local de destino por sudo.

Por exemplo: (como myuser), ln -s somedir/ linkname (será um link quebrado se houver algum som / não existir no diretório do usuário)

Em seguida, sudo mv linkname targetlocation(se tornará um link válido, desde que targetlocation/somedir/exista)

Wangdong
fonte
Sua resposta é sem detalhes e difícil de entender completamente. Por favor, considere revisar sua resposta para fornecer mais detalhes.
James Mertz
1

Eu tive um problema parecido. Para mim, eu não poderia chmod o link simbólico, mesmo como root, independentemente de como chamei chmod. Para acrescentar confusão, o nautilus estava mostrando o proprietário / grupo como nada. O proprietário estava em branco. Então, tentei mudar o link simbólico usando o nautilus executando como root, pois o chmod não estava funcionando e o nautilus travou!

Mas acho que descobri o problema. O diretório para o qual o link simbólico estava apontando tinha permissões diferentes do link simbólico. Então, modifiquei o diretório de destino (usando -h) para o meu nome de usuário / grupo. Então chmod'ed o link simbólico para o mesmo e funcionou! E visualizar os detalhes do link simbólico no nautilus (com permissões de root) agora não trava mais.

Portanto, para outras pessoas com problemas semelhantes, verifique as permissões do diretório / arquivo de destino e verifique se é compatível com as permissões para as quais você está configurando o link simbólico.

cgrey
fonte
1

Observe que alterar o ownerlink simbólico só funcionará se o destino estiver acessível pelo novo usuário ao qual você deseja atribuir.

Por exemplo, se o seu destino estiver dentro de uma pasta à qual o usuário ao qual você deseja atribuir não possui direitos suficientes, o ln -s commandcomportamento é tal que ele não fará absolutamente nada.

AnomalySmith
fonte
1

Para Solaris (verificado no S11.3) para um link simbólico para um diretório, você precisará executar

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/
RaamEE
fonte