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 descompacto o arquivo tar.gz usando o maven, o link simbólico não é mais válido. Estou, portanto, tentando reconstruir o link simbólico. Primeiro, crio o link simbólico usando ln, mas como faço para definir as mesmas permissões que o link simbólico original?
Quando você tenta usar
chmod
para definir as permissões do link, na verdade o que você faz é definir as permissões do destino do link. As permissões do link não fazem sentido.fonte
test
com-rw-rw-r-- root root
, poisrm test
recebo o promptrm: remove write-protected regular empty file 'test'?
A solução é colocar arquivos confidenciais em diretórios para os quais os usuários têm acesso somente leitura.Quando você tem um link como:
e deseja alterá-lo para:
Há dois casos a serem considerados:
foo/bar
não é um diretório ou não existe ou você não tem acesso à pesquisafoo
. Entãofalhará porque
link
já existe, mas você pode superar isso usando o padrão:foo/bar
é um diretório (e você tem permissão de pesquisafoo
para poder determinar quefoo/bar
é um diretório). Nesse caso, quando você faz:ou
Isso é entendido como a criação de um novo
target
link simbólico dentro dolink
diretório (link
é um diretório porque é um link simbólico para ofoo/bar
diretório). Então, você realmente criará um:Para superar isso, o GNU
ln
tem uma-T
opção para que o nome do link seja sempre considerado como nome do link, e não como um diretório para criar o (s) link (s). Portanto, com o GNUln
:vai funcionar. Como antes, ele removerá o
link
link simbólico original e o criará novamentenew/target
como o destino (e o processo 'euid e egid como o proprietário).O GNU
ln
também tem uma-n
opção. Funciona como,-T
exceto quando,link
na verdade, é um diretório real; nesse caso, ele ainda criará o link simbólico dentro desse diretório (em vez de falhar com um erro).Portably, sua melhor opção é remover o link primeiro e depois recriá-lo:
Na maioria dos sistemas, as permissões nos links simbólicos são ignoradas e geralmente fixadas
rwxrwxrwx
.Nos sistemas em que as permissões de link simbólico são importantes (como o OS / X, em que você precisa de permissão de leitura para um link simbólico para poder resolver seu destino), geralmente existe uma maneira de alterá-las (
chmod -h
no OS / X).A 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 no
t
bit do diretório pai ou das cotas ... ) e existe um comando padrão para alterá-lo:fonte
Se você realmente precisar alterar a permissão de links simbólicos (geralmente sem sentido, conforme escrito em outras respostas), obtive sucesso ao usar a
-R
opção dechown
:Se
-R
não foi usado, as permissões não foram alteradas.fonte
chown
porque está-R
implícito-P
lá, no entanto, isso não é garantido e não funcionará em outras implementações de chown. A maneira padrão de alterar a propriedade do link simbólico é com a-h
opção Acabei de atualizar a resposta aceita incorreta.