Italiano

Strumenti per sviluppatori · Calcolatore Chmod

Perché chmod usa l'ottale: la scorciatoia base-8 e da dove viene

· Sfondo

chmod unix controllo degli accessi

raggruppamento ottale mostrato come un diagramma di bit di autorizzazione Unix distinto
Illustrazione vettoriale originale ToolAcre

L'ottale sembra arbitrario finché non noti che una cifra contiene esattamente tre bit. Questo post spiega l'adattamento tra la base 8 e rwx, l'abitudine dell'era DEC che rendeva naturale l'ottale e la convenzione dello zero iniziale.

Perché 755 e non 493: la stessa modalità in decimale non significa nulla per nessuno e c'è una ragione per cui l'ottale ha vinto

Il valore decimale 493 e ottale 755 possono rappresentare lo stesso numero intero, ma 755 espone direttamente il raggruppamento di autorizzazioni. Ogni cifra visualizzata corrisponde a una classe e ogni classe contiene esattamente tre scelte binarie. La calcolatrice funziona in base a tale adattamento aritmetico; non è necessaria una storia storica per mostrare perché l'ottale è leggibile per le modalità rwx.

Inserisci 755 e l'output diventa rwxr-xr-x. Il proprietario riceve 7, il gruppo 5 e altri 5. Convertire lo stesso numero intero in un'etichetta decimale non raggruppata nasconderebbe quei limiti di classe. Ciò spiega l'utilità della notazione all'interno del modello implementato senza spiegare il motivo per cui ogni comando o piattaforma esterna l'ha adottata.

Tre bit per cifra: come base 8 raggruppa il binario in triple che si allineano esattamente con r, w e x

Una cifra in base otto comprende valori da zero a sette, esattamente i totali disponibili da tre bit indipendenti ponderati 4, 2 e 1. Le combinazioni vengono mappate in modo chiaro: 0 è ---, 1 è --x, 2 è -w-, 3 è -wx, 4 è r--, 5 è r-x, 6 è rw- e 7 è rwx.

Tre cifre ordinarie quindi si allineano con proprietario, gruppo e altro. Per 640, le triple binarie sono 110, 100 e 000, ottenendo rw-r-----. La matrice delle caselle di controllo rende visibile lo stesso raggruppamento senza richiedere la notazione binaria. La modifica di un'autorizzazione modifica solo il totale della classe corrispondente e la posizione simbolica associata.

L'abitudine all'hardware: le macchine DEC su cui girava il primo Unix erano documentate in ottale, quindi i programmatori ci pensavano già

Le fonti del repository non stabiliscono una discendenza hardware per la notazione ottale. Contengono maschere di bit JavaScript, regole del parser, test e controlli dell'interfaccia utente, non documentazione per processori o ambienti di sviluppo precedenti. Qualsiasi affermazione che una particolare cultura della macchina abbia causato l'adozione avrebbe bisogno di prove storiche oltre i file consentiti per questo articolo.

La spiegazione basata sulla fonte è invece aritmetica. Tre bit hanno otto possibili combinazioni, quindi una cifra in base otto cattura una tripla rwx senza oltrepassare il confine di classe. Questa relazione può essere dimostrata in ogni risultato della calcolatrice. Resta valido il fatto che un resoconto storico più ampio venga eventualmente fornito da fonti primarie o meno.

La cronologia dell'hardware non è stabilita dalle origini del repository

Il parser accetta da una a quattro cifre ottali ed elimina un prefisso 0o opzionale. Di conseguenza, 644, 0644 e 0o644 si risolvono tutti nello stesso valore. Le cifre 8 e 9 vengono rifiutate con una spiegazione specifica perché nessuna delle due appartiene alla base otto e il testo non corretto non viene indovinato in una modalità valida.

Una cifra significativa iniziale trasporta bit speciali anziché un'altra classe ordinaria. I suoi pesi 4, 2 e 1 rappresentano setuid, setgid e sticky, mentre le cifre finali mantengono proprietario, gruppo e altro. Il formattatore mostra tre cifre quando non è impostato alcun bit speciale e quattro quando ne è richiesto uno, a meno che non sia esplicitamente richiesto un output a quattro cifre.

Forme iniziali accettate e la cifra del bit speciale in questo parser

La conversione di 0644 per triple fornisce 6, 4 e 4. In binario questi sono 110, 100 e 100, quindi il risultato simbolico è rw-r--r--. Il proprietario ha letto e scritto, mentre il gruppo e gli altri hanno solo letto. Ogni vista deriva dallo stesso numero intero, consentendo un controllo diretto della coerenza.

Invertire il processo raggiunge lo stesso risultato. Inizia con rw-r--r--, aggiungi 4 e 2 per il proprietario, prendi 4 per il gruppo e prendi 4 per l'altro. Le cifre sono 644. Lo zero iniziale opzionale accettato dal parser non aggiunge un bit speciale; lascia invariato il valore numerico.

Perché l'esadecimale non ha mai preso il sopravvento: due cifre esadecimali non si dividono in tre classi in modo netto

L'esadecimale può codificare il numero intero, ma i suoi limiti di cifre a quattro bit non si allineano con le classi di autorizzazione a tre bit. Questo è un confronto aritmetico, non una prova su quale notazione le persone storicamente preferissero. La calcolatrice non accetta input esadecimali e i suoi output sono progettati attorno a cifre ottali, posizioni simboliche e controlli booleani con nome.

Ad esempio, i permessi ordinari occupano nove bit, naturalmente visibili come tre gruppi ottali. Raggruppare gli stessi bit in blocchi da quattro bit dividerebbe una classe rwx oltre i limiti delle cifre. Ciò rende l'esadecimale meno trasparente per questo scopo di visualizzazione, ma da questa sola osservazione non deriva alcuna affermazione sull'adozione, sugli standard o sulla cronologia della riga di comando.

Il confronto esadecimale è aritmetico, non è una prova di adozione storica

Le costanti denominate da altri linguaggi o interfacce di sistema sono esterne a questa implementazione JavaScript. Il repository utilizza le proprie proprietà descrittive comeownerRead, groupWrite, otherExecute, setuid, setgid e sticky. Questi nomi rendono leggibile l'aritmetica dei bit interni senza affermare un'equivalenza con una particolare intestazione esterna o API.

Rimani entro ciò che lo strumento può verificare: il valore numerico di una modalità fornita, i valori booleani della sua classe, il rendering simbolico, la spiegazione e il testo del comando generato. La pagina del browser non controlla la piattaforma di destinazione né compila costanti native. Chiunque traduca il risultato in un'altra interfaccia di programmazione dovrebbe consultare separatamente la documentazione autorevole di quell'interfaccia.

Le costanti C denominate sono esterne a questa implementazione JavaScript

L'ottale si adatta a questo calcolatore perché ciascuna classe di autorizzazione è una quantità di tre bit e ciascuna cifra in base otto trasporta esattamente tre bit. La corrispondenza è visibile, reversibile e facile da testare. I bit speciali utilizzano una quarta cifra con lo stesso modello 4, 2 e 1, mentre i simbolici s, S, t e T conservano i dettagli della posizione di esecuzione.

Usa la notazione come aiuto per il ripasso piuttosto che come incantesimo. Suddividi il valore in proprietario, gruppo, altro e qualsiasi prefisso speciale; verificare le lettere e le caselle; quindi decidere l'idoneità in base alla proprietà reale e alle prove del carico di lavoro. L'aritmetica spiega completamente il raggruppamento senza affermazioni non supportate sulla storia dell'hardware, sugli standard o sulla politica universale.