Moltissime guide tecniche o tutorial riguardanti l'installazione o l'aggiornamento di un software in hosting remoto spiegano come assegnare i permessi di files e cartelle, ma spesso lo fanno senza dare alcuna spiegazione. Da un punto di vista è un bene, perché una guida tecnica nasce con lo scopo di fornire istruzioni operative e non spiegazioni teoriche. D'altro canto questo è un rischio, perché se le istruzioni operative non possono essere eseguite alla lettera, o qualcosa va storto, l'utente potrebbe non avere gli strumenti per risolvere il problema.
Con questo articolo vogliamo fornire al lettere le poche basi teoriche che servono per capire cosa sta dietro frasi come “assegnare i permessi 755” oppure “verificare che le cartelle abbiamo i permessi 644”, le quali utilizzano la notazione ottale. Si tratta di una notazione molto semplice, che ci permetterà di prendere due piccioni con una fava: nell'apprendere la notazione ottale impareremo anche a leggere a colpo d'occhio i numeri espressi in base binaria.
Gli unici requisti necessari, prima di proseguire la lettura, sono le conoscenze base di Linux relative alla gestione degli utenti, dei gruppi e dei permessi. Chi non conoscesse l'argomento può trovare alcuni spunti qui:
Cenni teorici
La notazione ottale è semplicemente un modo abbreviato di esprimere una cifra binaria. Se non conosciamo il sistema numerico binario possiamo dare un'occhiata a questo articolo, ma i concetti sono talmente semplice che, in virtù della completezza di questo articolo, possiamo riassumerla in poche righe. Per contare in binario basta fare quello che facciamo, senza rendercene conto, quando leggiamo una cifra scritta in base decimale (il sistema numerico che usiamo tutti i giorni). Ad esempio, la cifra 125 può essere scritta come
125 = 1*100 + 2*10 + 5*1
in altre parole, sappiamo tutti che la cifra 125 è composta da 1 centinaio, 2 decine e 5 unità. Trattandosi di un sistema in base 10, in termini matematici si usa dire che i “pesi” delle varie cifre (le cifre sono i simboli 1, 2 e 5) sono, rispettivamente, 102, 101 e 100. Se non conosciamo le potenze, o non ci piace la notazione 10n, nessun problema: impariamo (come fanno tutti) a memoria la sequenza 1, 10, 100, 1000 ecc. ed il gioco è fatto. Se ci pensiamo un attimo, lo facciamo tutti i giorni, ogni volta che leggiamo una qualsiasi cifra numerica.
In binario abbiamo la stessa cosa, con un'unica differenza: la sequenza “da imparare a memoria” non è più 1, 10, 100, 1000 bensì 1, 2, 4, 8, 16 ecc... Se ci piace giocare con le potenze possiamo ricordare la sequenza come “le potenze di 2”, altrimenti va benissimo ricordarla col metodo che preferiamo.
Questo è tutto. Basta ricordare la sequenza per tradurre qualsiasi cifra binaria. Ad esempio
101 = 1*4 + 0*2 + 1*1
L'unica “stranezza”, rispetto a prima, è che dobbiamo fare la somma per capire di che numero si tratta (in questo caso 5). In realtà non c'è nulla di strano, anche prima abbiamo fatto la somma, ma senza rendercene conto, perché lo facciamo tutti i giorni. Una volta capito il meccanismo, ci accorgeremo che il sistema binario fa ormai parte della vita quotidiana. Non è un caso che le memorie RAM siano passate da 256MB a 512MB, poi ad 1024MB (1 GB) ed infine a 4096MB (4 GB): anche questi sono numeri della sequenza 1,2,4,8,16,32...
Pratica e sintassi
Per utilizzare la notazione ottale basta saper leggere e scrivere i numeri binari di 3 cifre. Consideriamo ad esempio la risorsa
-rwxrw-r-- 1 pippo adm 249 9 mag 22.13 foo.txt
in questo caso i permessi di utente, gruppo e altri (ricordiamo la sigla UGO) sono, rispettivamente: rwx
(utente), rw-
(gruppo) e r--
(altri). La regola è semplice: trasformiamo qualsiasi carattere (sia esso r
, w
o x
) nella cifra “1”, mentre il trattino va letto come “0” (zero). Avremo così
Utente: rwx = 111 = 1*4 + 1*2 + 1*1 = 7
Gruppo: rw- = 110 = 1*4 + 1*2 + 0*1 = 6
Altri : r-- = 100 = 1*4 + 0*2 + 0*1 = 4
ed il gioco è fatto. I permessi della risorsa foo.txt
, che in notazione simbolica si scrivono come -rwxrw-r--
, in notazione ottale diventano 764.
Quali sono i vantaggi della notazione? Immaginiamo di voler cambiare i permessi del file foo.txt
, per lasciare all'utente solo il permesso di lettura, togliere ogni permesso agli altri utenti, e dare tutti i permessi al gruppo proprietario. Quello che vogliamo ottenere è
r--rwx--- 1 pippo adm 249 9 mag 22.13 foo.txt
Tramite il comando chmod
ci toccherebbe eseguire l'operazione in più passaggi, digitando prima chmod u-wx
, poi chmod g+x
ed infine chmod o-r
. Oppure dovremmo ricordarci la sintassi per compiere l'operazione con un solo comando, cosa che nella pratica non succede quasi mai.
La notazione ottale permette di ottenere lo stesso risultato con un solo comando. Basta osservare che, con la regola vista sopra, la sequenza r--rwx---
si traduce nei numeri binari 100,111 e 000, ovvero 4, 7 e 0. Per settare i permessi basterà quindi digitare
chmod 470 foo.txt
Con un po' di pratica, trattandosi di maneggiare solo numeri di 3 cifre, è naturale imparare a memoria le diverse combinazioni, ad esempio: 777 sta per 111,111,111, ovvero rwxrwxrwx
(tre volte rwx
) che significa “tutti i permessi a tutti”. Analogamente, il permesso 000 sta per 000,000,000, ovvero ---------
(9 trattini), che significa “non permettere mai alcuna operazione”.
Dopo aver svelato l'arcano dovrebbe essere facile, o addirittura divertente, capire al volo i permessi di cui si parla nei vari tutorial. Ad esempio
644 significa 110, 100, 100, ovvero rw-r--r--
755 significa 111, 101, 101, ovvero rwxr-xr-x