Alterar permissões para um link simbólico

32

Eu tenho um link simbólico com estas permissões:

lrwxrwxrwx 1 myuser myuser       38 Aug 18 00:36 npm -> ../lib/node_modules/npm/bin/npm-cli.js*

O link simbólico está localizado em um arquivo .tar.gz. Agora quando eu descompactar o arquivo tar.gz usando maven o link simbólico não é mais válido. Portanto, estou tentando reconstruir o link simbólico. Primeiro eu crio o link simbólico usando ln mas como eu defino as mesmas permissões que o link simbólico original?

    
por u123 18.08.2013 / 01:16

4 respostas

49

Você pode criar um novo symlink e movê-lo para o local do link antigo.

ln -s <new_location> npm2
mv -f npm2 npm

Isso preservará a propriedade do link. Como alternativa, você pode usar chown para definir a propriedade do link manualmente.

chown -h myuser:myuser npm

Na maioria dos sistemas, as permissões do symlink não importam. Ao usar o symlink, as permissões dos componentes do alvo do symlink serão verificadas. No entanto, em alguns sistemas eles são importantes. O MacOS requer permissão de leitura no link para readlink e a opção symperm do NetBSD força a vinculação das verificações de permissão em leitura e passagem. Nesses sistemas (e seus parentes, incluindo FreeBSD e OpenBSD), existe uma opção -h equivalente a chmod .

chmod -h 777 npm
    
por 18.08.2013 / 01:42
11

Quando você tenta usar chmod para definir as permissões do link, o que você faz é definir as permissões do destino do link. As permissões do link não têm sentido.

    
por 11.06.2015 / 06:27
4

Quando você tem um link como:

link -> foo/bar

e deseja alterá-lo para:

link -> new/target

Existem dois casos a considerar:

  1. foo/bar não é um diretório ou não existe ou você não tem acesso de pesquisa a foo . Então

    ln -s new/target link
    

    falhará porque link já existe, mas você pode superar isso usando o padrão:

    ln -fs new/target link
    
  2. foo/bar é um diretório (e você tem permissão de pesquisa para foo para poder determinar que foo/bar é um diretório). Nesse caso, quando você faz:

    ln -s new/target link
    

    ou

    ln -fs new/target link
    

    Isso é entendido como criar um novo symlink target dentro do diretório link ( link é um diretório porque é um symlink para o diretório foo/bar ). Então você vai criar um:

    foo/bar/target -> new/target
    

    Para superar isso, o GNU ln tem uma opção -T para o nome do link ser sempre considerado como nome do link, e não como um diretório para criar o (s) link (s). Assim, com o GNU ln :

    ln -fsT new/target link
    

    funcionará. Como antes, ele removerá o symlink link original e o criará novamente com new/target como o destino (e o processo 'euid e egid como o proprietário).

    O GNU ln também possui uma opção -n . Ele funciona como -T , exceto quando link é realmente um diretório real, caso em que ele ainda criará o symlink dentro desse diretório (em vez de falhar com um erro).

    Portavelmente, sua melhor opção é remover o link primeiro e depois recriá-lo:

    rm -f link && ln -s new/target link
    

Na maioria dos sistemas, as permissões nos links simbólicos são ignoradas e geralmente corrigidas para rwxrwxrwx .

Em sistemas onde as permissões de links simbólicos são importantes (como OS / X onde você precisa de permissão de leitura para um symlink para poder resolver seu alvo), geralmente há uma maneira de alterá-las ( chmod -h no OS / X). p>

Propriedade, embora, como acima, não seja relevante para o acesso ao arquivo apontado pelo link simbólico na maioria dos sistemas, pode ter alguma outra relevância para o t bit do diretório pai ou das cotas ... ) e há um comando padrão para alterá-lo:

chown -h user[:group] the-link
chgrp -h group the-link
    
por 23.10.2015 / 11:37
0

Se você realmente precisa alterar a permissão de links simbólicos (geralmente sem sentido, conforme escrito em outras respostas), obtive sucesso com o uso da opção -R de chown :

chown -R myuser:mygroup link

Se -R não foi usado, as permissões não foram alteradas.

    
por 23.10.2015 / 10:29

Tags