Se sei in quarta in un istituto tecnico a indirizzo informatico, in questi giorni il docente di Sistemi e reti (o di Informatica) sta probabilmente portando la classe davanti a un terminale Linux. La verifica, pratica più scritta, arriva fra sei-otto settimane. Il copione è quasi sempre lo stesso: ti danno una macchina virtuale, una lista di operazioni da fare e, sul foglio, una serie di righe di comandi a cui rispondere con «cosa fa» oppure «che permessi ha adesso questo file».
Il terminale spaventa perché non perdona: un errore di battitura non ti dà un suggerimento, ti dà un messaggio e basta. La buona notizia è che il programma di quarta usa un insieme piccolo di comandi e un solo concetto che richiede ragionamento, i permessi. Qui li prendo uno alla volta.
Dove sei e cosa c’è: pwd, ls, cd
Una sessione tipica comincia così. Il simbolo $ è il prompt, non va scritto.
$ pwd
/home/studente
$ ls
documenti progetti
$ cd progetti
$ pwd
/home/studente/progetti
pwd stampa la directory corrente. ls elenca il contenuto. cd cambia directory: cd .. sale di un livello, cd da solo ti riporta nella home, cd / va alla radice. Un percorso che inizia con / è assoluto, partendo dalla radice. Senza quella barra iniziale è relativo, cioè parte da dove sei.
ls ha opzioni che in verifica compaiono sempre. ls -l mostra il formato lungo con permessi, proprietario, dimensione e data. ls -a mostra anche i file nascosti, quelli il cui nome inizia con un punto. Si possono unire: ls -la.
Creare, copiare, spostare, cancellare
$ mkdir esercizi
$ touch note.txt
$ cp note.txt copia.txt
$ mv copia.txt vecchia.txt
$ rm vecchia.txt
mkdir crea una directory, touch crea un file vuoto (o aggiorna la data di uno esistente), cp origine destinazione copia, mv origine destinazione sposta o rinomina (è lo stesso comando: rinominare è spostare nella stessa directory), rm cancella. Due note su rm: non esiste cestino, un file cancellato è andato; e rm -r cancella una directory con tutto il contenuto, perciò va scritto con attenzione. Per creare un percorso annidato, mkdir -p a/b/c crea tutte le directory intermedie in un colpo solo. Per copiare una directory serve cp -r.
Per leggere un file: cat note.txt lo stampa tutto. Prendiamo un file note.txt di tre righe:
ciao
mondo
ciao linux
wc -l note.txt conta le righe e risponde 3 note.txt.
grep, pipe e redirezione
grep cerca un testo dentro un file e stampa le righe che lo contengono. Con -n mostra anche il numero di riga:
$ grep -n ciao note.txt
1:ciao
3:ciao linux
La pipe | prende l’output di un comando e lo passa come input al successivo. Per contare le righe che contengono «ciao»:
$ cat note.txt | grep ciao | wc -l
2
La redirezione manda l’output in un file invece che a schermo. > sovrascrive, >> aggiunge in coda:
$ echo uno > a.txt
$ echo due >> a.txt
$ cat a.txt
uno
due
$ echo tre > a.txt
$ cat a.txt
tre
L’ultimo passaggio è la trappola preferita dei docenti: un solo > al posto di >> e «uno» e «due» sono spariti. Esiste anche 2>, che redirige i messaggi di errore: ls /inesistente 2> err.txt non stampa niente a schermo e scrive l’errore nel file.
I permessi: la parte che si chiede sempre
Ogni file ha tre categorie di utenti: il proprietario (user), il gruppo (group) e tutti gli altri (others). Per ciascuna ci sono tre permessi: lettura r, scrittura w, esecuzione x. Nel formato lungo di ls -l il primo campo li mostra:
$ ls -l
total 4
-rw-r--r-- 1 studente studente 22 Oct 12 09:10 note.txt
-rw-r--r-- 1 studente studente 0 Oct 12 09:10 script.sh
La stringa -rw-r--r-- si legge così: il primo carattere è il tipo (- file normale, d directory), poi tre gruppi da tre. rw- per il proprietario (legge e scrive), r-- per il gruppo (solo legge), r-- per gli altri (solo legge). Poi vengono il numero di collegamenti, proprietario, gruppo, dimensione in byte, data e nome.
Per i file, x significa poter eseguire il file come programma. Per le directory significa poterci entrare (con cd) e accedere ai file che contiene. Senza x su una directory non ci entri, anche se hai r.
chmod in forma numerica
Ogni permesso vale un numero: r = 4, w = 2, x = 1. Si sommano per categoria e si ottengono tre cifre, una per proprietario, gruppo e altri. Conviene saperlo a memoria, la tabella è corta:
| Cifra | Binario | Permessi | Somma |
|---|---|---|---|
| 7 | 111 | rwx | 4+2+1 |
| 6 | 110 | rw- | 4+2 |
| 5 | 101 | r-x | 4+1 |
| 4 | 100 | r-- | 4 |
| 0 | 000 | --- | 0 |
Quindi 644 è rw-r--r-- e 755 è rwxr-xr-x. Prova pratica: se lancio ./script.sh su un file senza x, ottengo un errore.
$ ./script.sh
bash: ./script.sh: Permission denied
$ chmod 755 script.sh
$ ls -l script.sh
-rwxr-xr-x 1 studente studente 0 Oct 12 09:10 script.sh
Ora il proprietario può eseguirlo, gruppo e altri possono leggerlo ed eseguirlo, ma solo il proprietario può modificarlo. Con chmod 640 note.txt si ottiene -rw-r-----: il proprietario legge e scrive, il gruppo solo legge, gli altri non hanno accesso.
Esiste anche la forma simbolica: chmod u+x file aggiunge l’esecuzione al proprietario, chmod go-r file toglie la lettura a gruppo e altri, chmod a+r file dà la lettura a tutti. Qui u, g, o, a indicano le categorie (a sta per all) e +, -, = l’operazione. Le due forme sono equivalenti e in verifica ti chiedono spesso di passare dall’una all’altra.
chown e sudo
chown cambia proprietario e gruppo: sudo chown studente:studente note.txt. Il comando sudo esegue una riga con i privilegi dell’amministratore (root), ed è necessario per cambiare il proprietario di un file. Regola pratica: usalo solo quando il comando senza sudo dà «Permission denied» e sai perché lo stai dando. Un sudo rm -r scritto con distrazione è il modo più rapido di perdere un sistema.
Gli errori tipici in verifica
- Confondere
>e>>. Il primo svuota il file prima di scrivere, il secondo aggiunge in fondo. - Leggere i permessi nell’ordine sbagliato. Sono sempre proprietario, gruppo, altri.
rwxr-x---non è755: è750, perché gli altri hanno---. - Dimenticare
xsulle directory. Con una directory senzaxnon ci si entra e non si raggiungono i file che contiene. Per una directory di lavoro la combinazione normale è755. - Pensare che
mvecpsiano diversi per la destinazione.cp a blasciaadov’è.mv a bno: dopo il comandoanon esiste più con quel nome. - Dimenticare la differenza tra percorso assoluto e relativo.
cd documentifunziona solo sedocumentiè nella directory corrente;cd /documenticerca dalla radice. - Scrivere maiuscole a caso. Linux distingue:
Note.txtenote.txtsono due file diversi.
Esercizi svolti
Esercizio 1: cosa fa questo comando? Dato il file note.txt di sopra, cosa stampa grep -c ciao note.txt?
-c conta le righe che contengono la parola invece di stamparle. Le righe 1 e 3 contengono «ciao»: risposta 2. Lo stesso risultato che avevamo ottenuto con grep ciao note.txt | wc -l. Nota che conta le righe, non le occorrenze: una riga con «ciao ciao» conterebbe una volta sola.
Esercizio 2: dai permessi al numero e viceversa.
a) Un file ha -rw-r-----. Che numero è? Proprietario rw- = 4+2 = 6, gruppo r-- = 4, altri --- = 0. Risposta: 640.
b) Scrivi la stringa dei permessi per chmod 750. 7 = rwx, 5 = r-x, 0 = ---. Risposta: rwxr-x---.
c) Quale numero corrisponde a rwxrw-r--? Proprietario 7, gruppo rw- = 6, altri r-- = 4. Risposta: 764.
Esercizio 3: dal permesso attuale al comando. Un file ha -rw-r--r-- (cioè 644). Voglio che il proprietario possa anche eseguirlo e che gruppo e altri non abbiano alcun accesso. Scrivi il comando in forma simbolica e numerica.
Parto da rw-r--r--. Aggiungo x al proprietario: rwx. Tolgo r a gruppo e altri: --- e ---. Ottengo rwx------, cioè 7 seguito da 0 e 0. In simbolico: chmod u+x,go-r file. In numerico: chmod 700 file. Controllo: 4+2+1 = 7 per il proprietario, zero per gli altri due. Quadra.
Come prepararti nelle prossime settimane
Su informatica non c’è ancora una simulazione dedicata: la prova pratica si prepara in un solo modo, davanti a un terminale. Se non hai Linux in casa, una macchina virtuale con una distribuzione qualsiasi (o il sottosistema Linux di Windows) basta e avanza. Il mio suggerimento è creare una directory di prova e rifare da zero tutti i comandi di questo post, guardando ogni volta ls -l prima e dopo. Chi arriva in verifica avendo visto cambiare i permessi sullo schermo non ha bisogno di ricordare una tabella: la ricostruisce. Altro materiale sulla materia è nella pagina informatica.
Nello stesso periodo, in Sistemi e reti, il programma passa di solito per indirizzi IP e subnetting e per il modello ISO/OSI e TCP/IP: sono argomenti separati, ma la stessa verifica può metterli insieme. Se poi ti avvicini al quinto anno, il filo continua con VLAN e sicurezza. Per chi sente che la parte di programmazione è ancora un po’ fragile, ho scritto anche Python da zero.
Se vuoi capire dove sei, scrivimi dalla pagina contatti e facciamo una diagnosi gratuita: guardiamo insieme i comandi che ti sembrano più oscuri, e vediamo se il problema è nei permessi, nella redirezione o nella lettura dell’esercizio.