GNU/Linux: alla scoperta di DEV

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

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!