Alterando o grupo no shell

0

Simples o suficiente. Eu tenho usuário foo. foo pertence aos grupos foo (principal), audio, A, B e comum .

Normalmente, os arquivos são criados com a propriedade foo.foo.

Por um tempo eu gostaria que o foo criasse arquivos com o grupo common . Basicamente eu vejo assim:

Cache present group
Change group to *common*
Touch alpha
Touch beta 
...
Change group back.

alfa beta (e qualquer coisa depois) deve ser criado com o proprietário foo. comum . Como posso conseguir isso?

PS: Oops Esqueci de dizer que quero fazer isso no bash e no zsh.

    
por TLOlczyk 09.09.2016 / 01:04

3 respostas

1

Nem o bash nem o zsh têm essa funcionalidade.

Você pode ligar para newgrp . Este é um comando externo, que inicia um novo processo. Ele executa o programa indicado pela variável de ambiente SHELL sem argumentos.

newgrp common <<EOS
touch alpha beta
EOS
touch belongs_to_original_group

Observe que, como newgrp inicia um novo shell, ele não herda das variáveis do shell original, apenas de variáveis do ambiente (exportadas). Quaisquer tarefas realizadas lá entrarão em vigor somente lá.

    
por 09.09.2016 / 03:02
2

Para fazer isso, use o comando newgrp :

newgrp common
touch whatever
newgrp foo

Como você é um membro de ambos os grupos (e provavelmente não usou senha para os grupos), você deve poder alternar rapidamente. Na verdade, cada chamada para newgrp faz uma subchave. Você pode verificar "quem" está usando id . Se você sair de um shell (e retomar o grupo anterior) ou criar um novo subshell depende do que você deseja fazer.

Ao contrário de alguns dos comandos relacionados, este está em POSIX :

The newgrp utility shall create a new shell execution environment with a new real and effective group identification.

    
por 09.09.2016 / 01:11
0

Se os arquivos sob consideração não estiverem espalhados em muitos diretórios, você pode até mesmo automatizar o processo usando um recurso sutil de permissões do Unix, ou seja, o SGID-bit para diretórios.

Suponha que um diretório tenha permissões 2775 (digamos), que é rwxrwsr-x e seja de propriedade de xyz.common . Se um usuário que é membro do grupo common criar um arquivo ou subdiretório nesse diretório, a propriedade do grupo será automaticamente definida como common .

    
por 09.09.2016 / 10:21