Removendo e adicionando permissão usando notação numérica na mesma linha

5

Estou tendo algum problema ao tentar remover a permissão de gravação do grupo proprietário ( g ) e adicionar permissão de leitura a outros usuários ( o ) ao mesmo tempo.

Como eu removerei alguma permissão do grupo proprietário e adicionarei alguma permissão para outras pessoas na mesma linha?

    
por Zanders2001 09.09.2018 / 22:41

5 respostas

10

Observando o título da sua pergunta:

Removing and adding permission using numerical notation on the same line

Com chmod do GNU coreutils, que você provavelmente tem em um sistema Linux, você poderia usar

$ chmod -020,+004 test.txt

para fazer isso. Ele funciona da maneira óbvia: dígito do meio para o grupo, 2 é para gravação; e último dígito para "outros" e 4 para leitura.

Poder usar + ou - com um modo numérico é uma extensão GNU , por exemplo o chmod baseado em BSD no meu Mac dá um erro para +004 :

$ chmod +004 test.txt
chmod: Invalid file mode: +004

Assim, seria mais simples, mais curto, mais portátil e provavelmente mais legível para usar apenas a forma simbólica:

$ chmod g-w,o+r test.txt
    
por 10.09.2018 / 00:07
5

EDIT: Vendo a resposta do ilkkachu, me fez testar isso, e a sintaxe que ele descreve funciona, mas a página man no meu sistema (que eu verifiquei) diz

can be either a symbolic representation of changes to make, or an octal number representing the bit pattern for the new mode bits

que foi o que me levou a escrever a resposta original (abaixo). Eu acho que é uma nova mudança e que eles se esqueceram de atualizar a página de manual.

Resposta original abaixo:

O título das suas perguntas menciona "notação numérica", se por isso você quer dizer especificando modos como números octal, a resposta é que você não pode especificar mudanças com isso, apenas o novo modo do arquivo (s). / p>     

por 09.09.2018 / 23:17
4

Como a segunda linha da man page diz:

chmod g-w,o+r file

$ man chmod

CHMOD(1)                         User Commands             CHMOD(1)

NAME
       chmod - change file mode bits

SYNOPSIS
       chmod [OPTION]... MODE[,MODE]... FILE...

ou a primeira linha de chmod --help

Usage: chmod [OPTION]... MODE[,MODE]... FILE...
    
por 09.09.2018 / 23:03
3

Normalmente, apenas a forma simbólica permite adicionar e remover bits das permissões atuais (veja a @ resposta do ilkkachu se você estiver em um sistema GNU em que chmod suporta-o com a forma numérica como uma extensão).

Com a forma numérica octal, o número que você dá é o novo conjunto de bits de permissão, independentemente do valor anterior.

Você pode, no entanto, obter o valor anterior manualmente e aplicar as modificações como uma operação lógica de bits.

Por exemplo, com zsh :

zmodload zsh/stat
zstat -A mode +mode -- "$file" &&
  perms=$((mode & 8#7777)) &&
  chmod -- $(((perms | 4) & ~ 8#20)) "$file"

Isso é binário OR ( | ) com 4 para adicionar a permissão de leitura a outros e binário AND ( & ) com o binário NOT ( ~ ) de octal 20 para remover o escreva permissões para agrupar.

Por exemplo, se os bits de permissão anteriores (st_mode & 0777) forem 0660 ( rw-rw---- ), 0660 | 4 seria 0664 ( rw-rw-r-- ) e 0664 & ~ 020 seria 0644 ( rw-r--r-- ).

Agora, não sei por que você gostaria de fazer isso em vez de:

chmod -- g-w,o+r "$file"
    
por 09.09.2018 / 23:43
0

Desde que você não especificou um motivo pelo qual você quer fazer dessa maneira. Presumo que você não saiba que é mais rápido (e mais preciso) simplesmente definir o modo desejado, do que inverter as bandeiras uma após a outra.

Explicado em termos simplificados: Especifique 3 valores numéricos para o estado definido / não configurado de todos os sinalizadores de leitura, gravação e execução. Para proprietário , grupo e outros todos de uma vez .

Para simplificar, vou ficar com 3 dígitos. Mas você deve olhar o resto das bandeiras também quando você se acostumar esta maneira de fazer isso.

Para simplificar ainda mais: Esses 3 valores são valores posicionais separados e não um número de três dígitos. O primeiro define as permissões para proprietário , o próximo define as permissões para grupo , e o terceiro, define as permissões para todos os outros ( outros ).

Definindo as bandeiras: Agora. Determinar o que cada dígito significa é onde algumas pessoas se confundem, mas é realmente simples quando você aprende como é feito.

Aqui estão os valores da bandeira:

  • 1 = executar
  • 2 = escrever
  • 4 = ler

Agora, você simplesmente faz uma posição por vez e adiciona (soma) os valores de sinalizadores desejados juntos. Se você deseja definir ler e executar: 4 + 1 = 5. Se você quiser ler e escrever mas não executar: 4 + 2 = 6.

Exemplos

| ### | Owner | Group | Others |
| --- |  ---  |  ---  |  ---   |
| 755 |  RWX  |  R-X  |  R-X   |
| 644 |  RW-  |  R--  |  R--   |

Informações adicionais e mais exemplos podem ser vistos aqui: link

Então, se você quiser que o grupo e outros tenham apenas permissão de leitura, mas o proprietário deve ler e escrever, basta chmod 644 FILENAME

Aqui está um tutorial ótimo : Entendendo Permissões de arquivo do Linux

Uma última dica: Lembre-se de que os usuários precisam de permissão de execução para que os diretórios listem o conteúdo.

    
por 10.09.2018 / 02:45

Tags