Oggi andiamo a scoprire /dev, una delle cartelle più importanti e più affascinanti del sistema. Se hai letto l’articolo sulle cartelle di Linux ci eri già passato, qui entriamo nel dettaglio.
Cos’E’ /dev
Su Linux vale il principio che tutto è un file, e anche l’hardware non fa eccezione: dischi, terminali, generatori di numeri casuali hanno un file speciale dentro /dev. Non sono file normali con dei dati: sono i punti di accesso ai dispositivi, e i programmi li aprono, leggono e scrivono come qualunque altro file. Dai un’occhiata:
ls /dev
Escono parecchie voci. Per capire di che tipo sono, usa ls -l:
ls -l /dev/null /dev/zero /dev/random /dev/urandom /dev/tty
L’output mostra i dispositivi speciali:
crw-rw-rw- 1 root root 1, 3 ott 17 15:35 /dev/null
crw-rw-rw- 1 root root 1, 5 ott 17 15:35 /dev/zero
crw-rw-rw- 1 root root 1, 8 ott 17 15:35 /dev/random
crw-rw-rw- 1 root root 1, 9 ott 17 15:35 /dev/urandom
crw-rw-rw- 1 root tty 5, 0 ott 17 15:35 /dev/tty
La prima lettera dei permessi è il tipo: c sta per dispositivo a caratteri, che si legge e scrive un byte alla volta (terminali, tastiere, generatori); b per dispositivo a blocchi, che si legge e scrive a blocchi (dischi e partizioni). Al posto della dimensione ci sono due numeri, major e minor, con cui il kernel sa a quale driver e a quale dispositivo ti stai riferendo.
I dispositivi speciali
- /dev/null: il buco nero. Tutto ciò che ci scrivi sparisce, e leggendolo non esce nulla. Serve per scartare l’output;
- /dev/zero: produce all’infinito byte a zero;
- /dev/random e /dev/urandom: producono byte casuali;
- /dev/full: un dispositivo sempre pieno, ogni scrittura fallisce;
- /dev/tty: il terminale su cui stai lavorando.
Proviamoli. Scrivere su /dev/null non dà nessun errore, e il testo sparisce:
echo ciao > /dev/null
echo $?
Il codice di uscita è 0, il comando è riuscito. Per scartare i messaggi di errore di un comando si usa la stessa cosa. Questa ricerca, per esempio, mostra solo i risultati senza i permessi negati:
find /etc -name "*.conf" 2> /dev/null
Con /dev/zero e /dev/urandom puoi ottenere dei byte. Qui ne prendo 8 a zero e li guardo in esadecimale con xxd:
head -c 8 /dev/zero | xxd
Otto byte nulli:
00000000: 0000 0000 0000 0000 ........
E lo stesso con 16 byte casuali:
head -c 16 /dev/urandom | xxd
Ogni volta esce una sequenza diversa. Con urandom puoi anche generare una password casuale, filtrando solo i caratteri alfanumerici e prendendone 16:
tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 16; echo
E /dev/full simula un disco pieno, per provare come reagisce un programma:
echo prova > /dev/full
Il comando fallisce con un errore di scrittura, spazio esaurito sul device.
I dischi
I dischi e le partizioni sono dispositivi a blocchi: sda, sdb per i dischi SATA e USB, nvme0n1 per gli NVMe, con le partizioni numerate (sda1, sda2, nvme0n1p1). Per vederli nel loro insieme:
lsblk
Mostra dischi, partizioni e dove sono montati. Dentro /dev/disk ci sono anche i collegamenti con nomi più stabili, per uuid, per etichetta o per id, che non cambiano se i dischi cambiano ordine:
ls /dev/disk
Le cartelle by-id, by-uuid, by-path e così via. Attenzione: scrivere direttamente su un dispositivo a blocchi, per esempio con dd, può distruggere i dati del disco. Questi file vanno trattati con rispetto.
Altre voci
- /dev/stdin, /dev/stdout e /dev/stderr: collegamenti ai descrittori di file del processo corrente (/proc/self/fd);
- /dev/pts: i pseudo terminali, ogni finestra di terminale o sessione SSH ne ha uno;
- /dev/shm: memoria condivisa, un filesystem in RAM;
- /dev/loop0, loop1 e così via: dispositivi che permettono di montare un file come se fosse un disco;
- /dev/mapper: i volumi gestiti dal device mapper (LVM, dischi cifrati).
Chi li crea? Non devi crearli tu: /dev è un filesystem gestito automaticamente da udev, che crea e toglie le voci man mano che i dispositivi compaiono o spariscono. Infila una chiavetta USB e guarda cosa appare con ls /dev prima e dopo.
Conclusione
/dev è il ponte tra i programmi e l’hardware. Capire che tutto è un file, anche i dispositivi, ti dà strumenti potenti: scartare output con /dev/null, generare dati con /dev/zero e /dev/urandom, ispezionare i dischi. Apri la tua Linux box e curiosa tra i file di /dev, ma con attenzione quando scrivi.
Link e risorse
- il video su YouTube
- esempi e comandi della puntata su GitHub
- null(4), man page — /dev/null e /dev/zero
- random(4), man page — /dev/random e /dev/urandom
- tty(4), man page — /dev/tty
- mknod(1), man page — creare file di dispositivo
Sostieni il canale
PER SOSTENERE IL CANALE BASTANO UN LIKE E UN’ISCRIZIONE!
ma se vuoi offrirmi un caffè, mi aiuterà a rimanere sveglio mentre registro i video 😁☕
clicca qui per scoprire come https://buymeacoffee.com/thelinuxnerd
questi link sono affiliati Amazon, acquistando i libri che ti consiglio sostieni il canale!
