Por que usar `chmod 644` em vez de` chmod u = rw, go = r,… `?

38

Estou trabalhando no * nix há alguns anos e uma das coisas com as quais não consigo me acostumar são as permissões octais no código. Existe alguma outra razão do comprimento da linha a preferir chmod 644 ...mais chmod u=rw,go=r ...?

PS: Não estou procurando uma explicação sobre permissões octais. Eu sei como eles funcionam, e está bem explicado no manual. Estou perguntando por que octal parece preferir a forma mais legível para humanos.

l0b0
fonte

Respostas:

40

O uso dos códigos octais tem duas vantagens em que consigo pensar, nenhuma das quais é tão grande:

  1. Eles são mais curtos, mais fáceis de digitar.
  2. Algumas coisas apenas as compreendem e, se você as usar rotineiramente, não estará coçando a cabeça (ou correndo para a documentação) quando encontrar uma. Por exemplo, você deve usar octal para chmodem Perl ou C.

Às vezes, utilitários realmente simples não lidam com as versões "amigáveis"; especialmente em terras de usuários não-GNU.

Além disso, alguns utilitários cospem octal. Por exemplo, se você executar umaskpara ver qual é o seu umask atual, ele será cuspido em octal (embora no bash, umask -Sseja simbólico).

Então, resumindo, eu diria que o único motivo para preferir eles é digitar menos caracteres, mas mesmo que você opte por não usá-los, você deve saber como eles são mapeados para que você possa descobrir um código octal se executar em uma das coisas que apenas octal. Mas você não precisa saber imediatamente que 5 mapeia rx, você só precisa descobrir isso.

derobert
fonte
1
Dizer que chmodem Perl ou C precisa usar representação octal não é realmente uma vantagem, pois a representação já existia em primeiro lugar.
N12pe 12/12
@ MaxMackie: É uma vantagem para você usá-los. Eu vou esclarecer.
Derbert
18

Acho que estou usando octal há muito tempo.

7 é rwx (faça qualquer coisa com ele), 5 é rx (precisa lê-lo para executá-lo), 6 é wr (qualquer arquivo de dados que você precise modificar), 4 é r (vamos deixar você ver) 0 é - (desculpe, nada aqui para ver). E a ordem é Eu, Nós, Todos. Estas são as combinações básicas.

755 Posso mudar e executá-lo, todos os outros podem executá-lo.

644 Eu posso mudar, todos os outros podem ler.

444 Leia apenas para todos, estamos por aqui.

500 Eu posso executá-lo, não quero que isso mude, todo mundo passa.

Para mim, é curto, direto ao ponto. 9 caracteres e uma especificação de arquivo e siga em frente.

Fiasco Labs
fonte
Bem, octal (base 8), não hexadecimal (base 16).
derobert
Sim, aquele, meio hexágono. <grin>
Fiasco Labs
O mesmo aqui, acho o octal mais fácil de ler do que a versão em texto ...
Brian Knoblauch
13

Eu nunca gostei muito da representação octal, sempre busquei uma rwxr-xr-xnotação direta , pois me parece mais simples. No entanto, pelo que eu entendo, a representação octal existe para facilitar a lembrança (não vejo como isso funciona).

O único outro benefício possível que vejo octal trazendo para a mesa é a falta de ambiguidade. As 8 configurações diferentes de bits de permissão são representadas por um único número distinto, o que, com certeza, ajuda algumas pessoas a colocar um wlocal acidentalmente onde não deveriam.

Infelizmente, eu memorizei esta tabela:

#  r  w  x
0  0  0  0
1  0  0  1
2  0  1  0
3  0  1  1
4  1  0  0
5  1  0  1
6  1  1  0
7  1  1  1
n0pe
fonte
8
Aprendi como usar binário para cada conjunto de 3. então rw ------- seria (110) (000) (000), que é (6) (0) (0). rwxr-xr-x seria (111) (101) (101), então (7) (5) (5).
Rob
4
A principal razão pela qual a representação octal existe é porque foi assim que o sistema de permissão Unix original foi programado, a partir de C. 4 dígitos octais (lembre-se dos especiais, como 1777 para /tmp, incluindo o bit pegajoso) leva 12 bits, um tamanho conveniente nos PDPs, especialmente o PDP-8. Se eles usassem hexadecimal, um mapeamento natural de um conjunto de permissões por dígito hexadecimal exigiria uma máquina de palavras de 16 bits +, que nem todos os PDPs eram. Também teria desperdiçado 3 bits ou exigido que eles inventassem um uso para esses bits, o que provavelmente teria complicado as permissões do Unix sem nenhum benefício real.
22712 Warren Young
⁺¹ vai para @Rob btw. De fato, depois que calcular um número real a partir da representação binária é uma combinatória básica, e você nem precisa se lembrar de ter "octal" porque o número máximo (ou seja, 111b) não excede 7.
Hi-Angel
Esta tabela deixa muito claro. Isso é ótimo!!!
Little Roys
6

Eu acho que o motivo é novamente - história. A princípio, os valores octais eram os únicos. Os simbólicos vieram depois.

Eu prefiro os simbólicos. Especialmente se você deseja alterar os valores existentes sem tocar em outras partes.

Como chmod -R u=rwx,g-w+X,o=-fazer isso em octal ...

Nils
fonte
3

Observe que os modos octais podem remover os bits setuid e setgid em alguns sistemas.

Fedora 16:

$ mkdir dir
$ chmod 2775 dir
$ stat -c %a dir
2775
$ chmod 770 dir
$ stat -c %a dir
2770

(o 2é preservado)

FreeBSD 9:

$ mkdir dir
$ chmod 2775 dir
$ stat -f %Mp%Lp dir
2775
$ chmod 770 dir
$ stat -f %Mp%Lp dir
0770

(o 2tornou-se um 0)

Se você deseja alterar as permissões de um arquivo ou diretório, pode ser melhor especificar apenas os bits que deseja alterar (por exemplo, chmod o= dirou chmod o-rwx dirno exemplo acima).

Mikel
fonte
2

A história explica por que os modos octais existem , mas acho que a funcionalidade é a razão pela qual a forma mnemônica existe. E todos os pontos sobre outras ferramentas que usam exclusivamente modos octais são perfeitamente válidos e acho que você precisa aprender e conhecê-los. No entanto, acho que os administradores conservadores não veem a verdadeira utilidade que vem da forma mnemônica.

A forma octal, especialmente quando usada recursivamente, tende a forçar os administradores a fazerem coisas estúpidas. Ou melhor, negligência adicional resulta em que se torna estúpido. Sempre que você encontrar uma pasta com muitos arquivos de texto e o xconjunto de bits, você tem uma prova.

Por que alguém definiria a situação xassim? Porque é difícil não, a menos que você use a forma mnemônica para modos. Considere que você deseja redefinir as permissões /var/wwwe não executa nenhum CGI antigo, portanto o xbit deve ser removido. No entanto, o xbit serve para outro propósito nos diretórios. Então você acaba fazendo algo (as root) como:

chmod -R 666 /var/www
find /var/www -type d -exec chmod 777 {} \;

Se, no entanto, você estava usando a forma mnemônica, poderia fornecer uma "receita":

chmod -R a=rwX /var/www

que é a forma abreviada de chmod -R ugo=rwX /var/www(alcançar o mesmo caminho, mas diferente:) chmod -R a-x,a+rwX /var/www.

Mas há outra coisa mais trivial que não pode ser alcançada com os modos octais. Você não pode ajustar a userou groupou othermáscara individualmente com a forma octal.

Resumindo: é como comparar um bisturi (mnemônico) e uma faca de cozinha afiada (octal) ... mas você ainda precisa conhecer os bits do modo octal por outros motivos :)

A razão pela qual os modos octais ainda são preferidos , eu acho, não é mais a digitação envolvida na forma mnemônica, mas os administradores excessivamente conservadores. E sim, chamando em 2013, esses administradores excessivamente conservadores ainda existem e estão aqui para ficar por algum tempo.

0xC0000022L
fonte
0

Quando você precisa modificar as permissões dos arquivos o tempo todo , aprecia os três caracteres. Muitas vezes, uso as versões +ou -para alterar as permissões.

Por exemplo, eu crio um novo PHP, Python ou outro script na minha pasta apache. chmod a+xé tudo o que faço para que possa ser executado. Eu li como "tudo mais executar". Agora eu sei que vai funcionar, e eu só precisava de 3 caracteres.

Outras vezes, uso 644 e 755 automaticamente. Eu apenas penso nisso como 644um arquivo, 755um script.

Brigand
fonte
0

Ele se encaixa perfeitamente nas configurações de umask, que geralmente são fornecidas na escrita octal (em pamou fstab).

Nikodemus RIP
fonte
0

Sugiro que uma razão importante é que a representação octal corresponde intimamente ao que você vê ls -l(ou melhor, quando faz uma conversão mental entre octal e binário).

Conor O'Neill
fonte