Concordo que não faz muito sentido se você pensar em um symlink como um link simbólico.
Mas se você acha que um link simbólico é como um link físico, faz mais sentido.
A primeira linha de man 7 symlink
diz exatamente isso
Symbolic links are files that act as pointers to other files.
To understand their behavior, you must first understand how hard links work.
A hard link to a file is indistinguishable from the original file because
it is a reference to the object underlying the original filename.
[...]
Changes to a file are independent of the name used to reference the file.
Assim, com um link físico, quando você altera as permissões no arquivo por meio de qualquer nome, as permissões subjacentes são alteradas para todos os nomes.
A maioria das ferramentas tenta seguir links simbólicos, para que você possa fingir que é realmente um link físico.
Except as noted below, commands follow symbolic links named as
command-line arguments.
The mv(1) and rm(1) commands do not follow symbolic links named as
arguments, but respectively attempt to rename and delete them.
Commands traversing a file tree [...]
Criar links simbólicos (ou links físicos) para binários às vezes é útil, mas, como você acabou de descobrir, ele cria alguns casos que podem causar problemas.
Dito isso, acho que o maior problema aqui foi usar sudo
quando não foi necessário.
Se o outro usuário tiver acesso de leitura ao seu ~/bin
, então sudo
foi completamente desnecessário.
Ou, se eles não tiverem acesso, você poderá concedê-lo (por exemplo, usando chmod g+rx $HOME/bin
) ou fornecer-lhes um tarball.
Se você ainda acha que usar sudo
é uma boa ideia, veja algumas alternativas:
sudo chown -h $USER $HOME/bin/*
chmod 755 $HOME/bin/*
-h
diz chown
para não seguir os links simbólicos
chmod -R 755 $HOME/bin/*
-R
diz ao chmod para "percorrer a árvore de arquivos", o que faz com que ele ignore os links simbólicos como sugerido acima em man 7 symlink
.
sudo find $HOME/bin/ -type f -exec chmod 755 {} +
-type f
diz find
para não executar o comando exec (neste caso chmod
) em links simbólicos.
# as user 2
cd ~user2/bin
sudo tar -C ~user1/bin -cf - . | tar -xf -
executa a raiz tar -cf
as para que você possa ver todos os arquivos, mas executa tar -xf
como usuário2, o que faz com que os arquivos extraídos sejam de propriedade do usuário2.