Cercherò di affrontare la ragione di fondo per cui è 777, piuttosto che aaa, o 999.
Ricorda che le autorizzazioni sono disponibili nel seguente formato:
u g o
rwx rwx rwx
dove u = utente, g = gruppo, o = altro.
Ora, immagina di rappresentare ognuno di questi gruppi come binario. 1 è vero, 0 è falso.
Se vuoi dare pieno accesso a tutti, assegneresti le seguenti autorizzazioni in binario:
u g o
rwx rwx rwx
111 111 111
Ora, se conosci il binario, ti renderai conto che quando converti 111
da binario a decimale, ottieni 7
.
Pertanto, è possibile rappresentare l'accesso completo come 777
.
Nota: stiamo davvero convertendo da binario a ottale. Vedi la modifica qui sotto.
Funziona anche con tutte le altre modalità di accesso.
Ad esempio, possiamo facilmente capire cosa 555
significa convertendoli 5
in binari e scrivendoli nel formato sopra. 5
in binario è 101
, quindi abbiamo le seguenti autorizzazioni:
u g o
r-x r-x r-x
101 101 101
5 5 5
Allo stesso modo, se vogliamo dare tutte le autorizzazioni all'utente, ma solo consentire ad altre persone di leggere, possiamo trovare una rappresentazione numerica.
u g o
rwx r-- r--
111 100 100
7 4 4
Ora sappiamo che 111
in binario è 7
in decimale e 100
in binario è 4
in decimale. Pertanto, le autorizzazioni saranno 744
.
Modificare:
Tecnicamente, come evidenziato da @ LưuVĩnhPhúc e @Braiam, stiamo convertendo da binario a ottale, come descritto di seguito. Tuttavia, le rappresentazioni decimali e ottali dei numeri <8 sono uguali, quindi per i numeri binari con 3 cifre o meno, le rappresentazioni sia decimali che ottali sono uguali.
Se rappresentato come numeri ottali, anziché dividere in gruppi di tre, e fare una conversione binaria in decimale su ciascun gruppo, è possibile effettivamente prendere tutti e tre i gruppi insieme come un singolo numero binario e convertirli in ottali.
Ad esempio, ecco alcune conversioni binarie in ottali:
0b111111111 == 0o777
0b101101101 == 0o555
0b111100100 == 0o744
Nota che sto anteponendo "0b" e "0o" per distinguere tra numeri binari e ottali.
Se vuoi giocare con questo, apri un terminale, corri python
e poi gioca con i seguenti comandi:
oct(0b111111111)
bin(0o555)
Ricorda di anteporre "0b" o "0o" ai numeri per far sapere al computer a quale base sei interessato. (In caso contrario, assumerà la base 10.)