Octal para decimal: decodificando um modo, uma máscara ou um despejo antigo
O que esta conversão faz
Lê um valor de base 8 e o reescreve em base 10. É o sentido de que você precisa quando o modo já está escrito em octal — como o chmod e o ls esperam — e o número tem de entrar em um script, em um campo de configuração ou em uma comparação onde o código em volta pressupõe decimal.
Cada posição é uma potência de oito
Da direita para a esquerda, os pesos são 1, 8, 64, 512 e assim por diante. Converta 755 e você obtém 7 × 64 + 5 × 8 + 5 = 493. Repare que os dígitos deixam de ser três permissões independentes assim que o valor vira decimal: a estrutura empacotada que tornava a forma octal legível é exatamente o que a conversão dissolve, e vale lembrar disso antes de usar o resultado.
Tabela de conversão de octal para decimal
Modos e máscaras octais com seus valores decimais. Converter um modo de permissão em decimal é útil para scripting; manter em octal é melhor para ler, então a maioria das equipes registra as duas formas.
| Octal | Decimal |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 7 | 7 |
| 10 | 8 |
| 17 | 15 |
| 100 | 64 |
| 377 | 255 |
| 644 | 420 |
| 755 | 493 |
| 1000 | 512 |
Por que o uso do octal se estreitou às permissões
Uma base ganha seu lugar quando acompanha o agrupamento da máquina. O octal servia às palavras de seis e de doze bits do hardware antigo, e assim que o byte de oito bits se universalizou o agrupamento natural passou a ser de quatro bits, e portanto o hexadecimal. As permissões sobreviveram porque têm de fato nove bits de largura e se dividem em três grupos de três: um caso em que a aritmética da base ainda corresponde à estrutura do dado.
Não faça contas de permissão em decimal
Somar 493 e 64 em decimal para conceder leitura parece razoável e não é: 64 em decimal é sessenta e quatro, e o bit que ele liga em um modo octal não é o bit de leitura que você queria. Faça a aritmética de permissões em octal, com valores como 400 e 40, e converta apenas para armazenar ou exibir.
Perguntas frequentes
Como converter octal em decimal à mão?
Multiplique cada dígito pelo seu valor posicional — 1, 8, 64, 512 e assim por diante, da direita para a esquerda — e some os resultados. Para 755 isso é 7 × 64 + 5 × 8 + 5, ou seja, 448 + 40 + 5, que dá 493.
Por que o chmod 755 aparece como 493 no meu script?
Porque o script está lendo o modo como um inteiro decimal comum. O sistema de arquivos guarda os mesmos bits de qualquer maneira; só a notação muda. Mantenha a forma octal na cabeça e nos comentários, e converta na fronteira em que o valor encontra código que espera decimal.
Qual é o maior valor octal que posso converter aqui?
Muito maior que qualquer modo ou máscara prática. A conversão roda com inteiros exatos, então entradas longas voltam com todos os dígitos corretos, em vez do resultado arredondado que uma calculadora de ponto flutuante produziria.
Um zero à esquerda tem significado em octal?
Não numericamente — 0755 e 755 são o mesmo valor —, mas é um marcador útil que diz "isto é octal", e várias linguagens exigem esse zero para um literal octal. A ferramenta aceita um zero à esquerda e o prefixo 0o na entrada, e nunca imprime nenhum deles na saída.
A ferramenta aceita frações em octal?
Sim, e informa com honestidade quando uma não pode ser representada. Algumas frações octais terminam e outras não, dependendo de o denominador ser potência de 2. Quando a expansão não termina, o resultado é truncado e claramente marcado, em vez de arredondado como se a resposta fosse exata.