Copie as permissões de proprietário de um arquivo para agrupar permissões

25

Como posso copiar as permissões de usuário / proprietário de um arquivo para suas permissões de grupo?

Por exemplo, se as permissões forem 755, quero que elas se tornem 775.

Esclarecimento: 755 -> 775 123 -> 113 abc -> aac

Bônus se eu puder fazer isso recursivamente para todos os arquivos em um diretório.

(Ou seja, para cada arquivo, as permissões do ownder são copiadas para as permissões do grupo. Cada arquivo pode ter permissões diferentes.)

Annan
fonte
Não tenho certeza de entender. Deseja alterar a permissão no diretório / arquivos para que a permissão do grupo seja como o proprietário? Se sim, então brinque com o chmod. Posso mostrar um exemplo mais explícito na minha resposta, se você quiser.
Anarko_Bizounours
Na sua resposta, todos os arquivos são alterados para 775. E se um dos arquivos tiver originalmente a permissão 123? Em seguida, deve ser alterado para 113 e não 775. A permissão que usei na pergunta (755) é apenas um exemplo, a permissão real pode ser qualquer coisa. Eu quero fazer isso programaticamente.
Annan
o número após chmod é apenas permissão numérica. Se você faz um ls -l e obtém 452 como permissão, basta chmod 442 / you_directory /. Tudo está explicado (muito bem) na página da wikipedia que eu vinculei à minha resposta.
Anarko_Bizounours
isso parece ser uma pergunta duplicada do serverfault.com/questions/241082/… #
ShoeLace

Respostas:

54

você pode usar g=upara tornar as permissões de grupo iguais às permissões de usuário

ls -l file
-rw------- 1 user users 0 Jun 27 13:47 file

chmod g=u file

ls -l file
-rw-rw---- 1 user users 0 Jun 27 13:47 file

e recursivamente

chmod -R g=u *

ou para alguns arquivos

find /patch/to/change/perms -name '*.txt' -exec chmod g=u {} +

a página de manual do chmod é sua amiga.

user9517 suporta GoFundMonica
fonte
boa maneira de fazê-lo! Esqueci-me este truque cada vez xD
Anarko_Bizounours
Nunca ouvi falar desse truque! Útil.
skinp
Esse g=utruque me salvou horas de gerenciamento tedioso. Aí vai um +1 ;-)
Edurne Pascual
eu tinha vários arquivos de propriedade do meu usuário que eu queria compartilhar com todos os usuários. então eu fizchmod -R ag=u ${path_to_directory}
Trevor Boyd Smith
2

Como as pessoas disseram, alterar as permissões de arquivo pode ser perigoso. Com grande poder vem uma grande responsabilidade, e tudo isso shizas. Esta é a minha resposta:

arquivo / usr / bin / otog:

#!/bin/sh

f=$1
p=`stat -c "%a" $f`
chmod ${p:0:1}${p:0:1}${p:2:1} $f

Exemplo de uso:

find . -exec otog {} \;

Usa stat para obter permissões numéricas, usa chmod para alterar permissões.

PS: Por favor, veja a resposta de Iain para uma maneira melhor de fazer isso!

Annan
fonte
1
Não deveria ser $ {p: 0: 1} $ {p: 0: 1} $ {p: 2: 1}?
Minaev 27/06
Sim, você está certo. Estranhamente funcionou do meu jeito também.
Annan
Alguém por favor, explique o voto negativo?
Annan
Não eu, mas gostaria de compensar. Esta é uma boa solução que funciona.
Minaev
1
Eu diria que é mais seguro usar comandos perigosos em scripts do que manualmente. Em scripts bem testados, isso é :). Por outro lado, chmodestá longe de ser um comando muito, muito perigoso. Comparado a rm, quero dizer, rsync --deleteou a alguns outros.
Minaev
1

Primeiro de tudo, você precisa listar o seu direito.

ls -l /your_directory/
-rwxr-xr-x  1   57 Jul  3 10:13  file1
-rwxr-xr-x  1   57 Jul  3 10:13  file2

para converter o resultado em permissão numérica, use isto: R = 4, W = 2, X = 1.

Portanto, neste arquivo 2, a permissão é 755.

Depois de acertar, você deve usar o comando chmod para mudar da maneira que deseja:

chmod 775 /your_directory/

Este comando mudará apenas o direito no diretório, mas não no arquivo interno.

Se você deseja alterar o lado direito também, execute este comando:

chmod 775 /your_directory/ -fR

O -fR forçará a recursividade. (use-o apenas se tiver certeza do direito que deseja aplicar e o arquivo dentro do diretório.)

Se você deseja alterar apenas o direito no arquivo1, então:

chmod 775 /your_directory/file1

E é assim que os biscoitos se desfazem!

/! \ Cuidado, o uso indevido deste comando pode destruir todas as permissões do seu sistema operacional e causar mau funcionamento dele. /! \

ps: procure aqui para descobrir mais informações sobre o chmod.

Espero que isso ajude você.

Anarko_Bizounours
fonte
Eu adicionei alguns esclarecimentos à pergunta. Os arquivos podem não ter as mesmas permissões de proprietário, portanto, se o chmod for usado, deve haver uma maneira de extrair as permissões do proprietário antes de passá-lo ao chmod?
Annan
é complicado, mas o comando ls -l deve dar a você a permissão, mas será neste formato -rw-rw-r--. O problema é que você NÃO DEVE usar um script para trabalhar com o chmod! você deve primeiro obter toda a permissão do arquivo. Depois, chmod para ter o bom direito para o grupo. Vou editar minha resposta para mostrar um exemplo.
Anarko_Bizounours