Guida ai comandi Linux per la diagnostica di sistema, rete e hardware
Una panoramica pratica dei principali comandi da terminale per il debug e il monitoraggio dei sistemi Linux e macOS: dall'analisi dello spazio su disco al controllo di memoria, risorse e traffico di rete.
Questa guida presenta comandi Linux essenziali per la diagnostica, organizzati per area tematica, con enfasi su strumenti che hanno o non hanno equivalenti su macOS. Si sottolinea la compatibilità di alcuni comandi BSD/UNIX su macOS, mentre altri richiedono l'uso di utility specifiche per Linux o alternative da verificare su macOS.
Introduzione
Questa guida raccoglie i comandi da riga di comando più utili per la quasi totalità delle esigenze diagnostiche quotidiane su un sistema Linux, dal debug di un server in produzione alla semplice curiosità sulla propria macchina di sviluppo, organizzati per area tematica, con una breve spiegazione del funzionamento di ciascuno e, dove utile, dell'alternativa moderna a strumenti ormai superati.
Compatibilità con macOS
Buona parte di questa guida è pensata per Linux, ma vale la pena ricordare che macOS è a sua volta un sistema basato su UNIX (nello specifico deriva da BSD), per cui diversi comandi elencati funzionano invariati anche su un Mac aperto dal Terminale. Rientrano in questo gruppo df -h, du -sh, uname -a, uptime, ping -c 4, traceroute, dig e curl, oltre a strumenti installabili via Homebrew come ncdu, htop, btop e fastfetch.
Altri comandi della guida sono invece specifici del mondo Linux e non hanno un corrispettivo diretto su macOS, perché si appoggiano a sottosistemi che semplicemente non esistono fuori dal kernel Linux, come il filesystem virtuale /proc (da cui dipendono /proc/meminfo, /proc/cpuinfo), lo stack iproute2 (ip a, ip r, ss), systemd (hostnamectl) o il pacchetto lm-sensors (sensors). Anche lsblk, lscpu e lshw sono strumenti legati al mondo Linux, così come lspci, non presente nativamente su macOS.
diskutil list al posto di lsblk, vm_stat al posto di free -h, system_profiler SPHardwareDataType al posto di lscpu/lshw, system_profiler SPDisplaysDataType al posto di lspci | grep -i vga, e ifconfig / netstat -rn al posto di ip a / ip r. Questi comandi sono stati introdotti in questa revisione e non erano presenti nella bozza originale: sintassi e output vanno verificati sulla versione di macOS effettivamente in uso prima di pubblicarli come riferimento.
Disco e filesystem, spazio e partizioni
Per avere una panoramica immediata dello spazio libero e occupato su tutti i filesystem montati si usa il comando seguente, dove il flag -h (human-readable) converte i valori grezzi in blocchi in un formato leggibile espresso in GB o MB.
df -h
Quando invece serve capire quanto spazio occupa nello specifico una cartella e le sue sottocartelle, il comando di riferimento è du, dove -s produce un riassunto totale invece del dettaglio ricorsivo file per file e -h rende l'output leggibile.
du -sh /percorso/della/cartella
Per elencare tutti i dispositivi di archiviazione collegati (dischi, partizioni, chiavette USB) e i rispettivi punti di montaggio si utilizza lsblk, che con il flag -f mostra anche il tipo di filesystem e l'UUID di ciascuna partizione.
lsblk -f
Per la tabella delle partizioni completa di tutti i dischi, comprensiva di schema (MBR o GPT) e dimensioni esatte dei settori, serve invece fdisk in modalità di sola lettura elenco, che richiede i privilegi di amministratore.
sudo fdisk -l
Infine, per chi deve esplorare interattivamente cosa occupa spazio su disco senza scorrere output statici, ncdu è uno strumento a interfaccia testuale molto pratico: se non è già presente si installa con il gestore pacchetti della distribuzione.
sudo apt install ncdu
smartctl -a /dev/sda dal pacchetto smartmontools, comando introdotto in questa revisione e non presente nella bozza originale: va verificato il nome esatto del dispositivo sulla macchina target prima dell'uso.
Memoria RAM e swap
Lo strumento più immediato per controllare memoria RAM e swap libere, utilizzate e totali è free, dove -h formatta automaticamente i valori in KB, MB o GB a seconda della loro grandezza.
free -h
Se serve un monitoraggio continuo, watch permette di rieseguire un comando a intervalli regolari, in questo caso ogni secondo, così da osservare in tempo reale l'andamento della memoria.
watch -n 1 free -h
Per chi ha bisogno del dettaglio più granulare possibile, direttamente dai contatori del kernel, la fonte primaria è il file virtuale seguente.
cat /proc/meminfo
vmstat 1 (dal pacchetto procps, generalmente già preinstallato): comando introdotto in questa revisione, da testare sull'ambiente specifico.
CPU e processore
Per visualizzare architettura della CPU, modello, numero di core fisici, thread logici e livelli di cache, il comando più sintetico è lscpu.
lscpu
Chi ha bisogno delle informazioni dettagliate per ogni singolo core, comprese le frequenze correnti, può leggerle direttamente dal kernel.
cat /proc/cpuinfo
Per il monitoraggio in tempo reale di processi e utilizzo di CPU e RAM, il comando storico è top; sui sistemi moderni conviene però preferire alternative più leggibili e interattive come htop o btop, se disponibili.
top
htop e btop, già citati nella bozza originale come alternative moderne a top, restano scelte solide per chi lavora quotidianamente da terminale, grazie a interfaccia a colori, ordinamento interattivo dei processi e gestione diretta dei segnali (kill, nice) senza uscire dal programma.
Scheda video (GPU) e hardware generale
Per identificare il modello esatto della scheda video installata (NVIDIA, AMD o Intel) si interroga il bus PCI filtrando per la classe video.
lspci | grep -i vga
Su sistemi con GPU dedicata secondaria, in configurazioni ibride o server con acceleratori grafici, la classe da cercare può invece essere quella 3D.
lspci | grep -i 3d
Per informazioni più dettagliate sul controller grafico e sul driver effettivamente in uso, lshw filtrato sulla classe display offre un output più ricco, sempre con privilegi elevati.
sudo lshw -C display
Chi lavora con schede NVIDIA dispone di uno strumento dedicato che mostra temperatura, memoria video occupata e processi attivi sulla GPU in tempo reale.
nvidia-smi
Per un inventario hardware completo dell'intera macchina, in forma sintetica, si usa lshw con il flag di riassunto.
sudo lshw -short
Informazioni di sistema, kernel e dispositivo
Per un quadro d'insieme che comprende nome host, versione del kernel, distribuzione e architettura, hostnamectl è oggi lo strumento di riferimento sulle distribuzioni basate su systemd.
hostnamectl
Se serve solo la versione esatta del kernel Linux in esecuzione, il comando dedicato è più mirato.
uname -r
Per tutte le informazioni di sistema di base condensate in un'unica riga, si aggiunge il flag -a.
uname -a
I dettagli sulla distribuzione, nome, versione e identificativo, si leggono da un file standard presente su praticamente tutte le distribuzioni moderne.
cat /etc/os-release
Per sapere da quanto tempo il sistema è acceso, quanti utenti sono collegati e qual è il carico medio (load average) su 1, 5 e 15 minuti, si usa uptime.
uptime
Per chi desidera anche un colpo d'occhio estetico, con il logo della distribuzione in ASCII art accanto ai dati hardware, neofetch è stato per anni lo strumento più diffuso. Il progetto originale non riceve più sviluppo attivo, per cui oggi conviene orientarsi su fastfetch, il fork mantenuto attivamente e generalmente più veloce, già indicato come alternativa nella bozza originale.
fastfetch
Rete, interfacce e connessioni
Per elencare tutte le interfacce di rete, fisiche e virtuali, con i relativi indirizzi MAC e IP, lo strumento moderno è ip, che ha sostituito il deprecato ifconfig.
ip a
Per la tabella di routing, utile a capire quale sia il gateway predefinito della macchina, si usa il sottocomando dedicato.
ip r
Per verificare quali porte sono in ascolto e a quale processo appartengono, ss ha sostituito il vecchio netstat; i flag -tulpn combinano socket TCP e UDP, mostrano solo quelli in ascolto (listening) e includono il nome del processo.
ss -tulpn
Per scoprire il proprio indirizzo IP pubblico interrogando un servizio esterno, curl verso un endpoint dedicato restituisce direttamente il valore.
curl ifconfig.me
Per informazioni geografiche e di provider più complete sullo stesso indirizzo pubblico, esiste un servizio equivalente più ricco.
curl ipinfo.io
Per verificare la raggiungibilità di un host e misurarne la latenza, limitando l'invio a un numero contenuto di pacchetti per non generare traffico inutile, si usa ping con il flag -c.
ping -c 4 1.1.1.1
Per visualizzare il percorso seguito dai pacchetti verso un server, utile in fase di diagnosi di problemi di instradamento, il comando classico è traceroute; l'alternativa interattiva mtr combina traceroute e ping in un'unica vista aggiornata in tempo reale.
traceroute google.com
Per interrogare direttamente i server DNS e risolvere un dominio nel relativo indirizzo IP, gli strumenti di riferimento sono dig, più verboso e dettagliato, e nslookup, più sintetico.
dig google.com
iftop o nload (da installare separatamente) sono un'aggiunta pratica rispetto ai soli comandi di configurazione: introdotti in questa revisione, non presenti nella bozza originale.
Temperature e sensori
Per leggere le temperature della CPU e degli altri componenti hardware supportati, il comando sensors è lo standard de facto sulle distribuzioni Linux, e richiede il pacchetto lm-sensors installato e configurato tramite sensors-detect al primo utilizzo.
sensors
Tabella riassuntiva dei comandi
| Area | Comando principale | Scopo |
|---|---|---|
| Disco | df -h |
Spazio libero e occupato sui filesystem montati |
| Disco | du -sh |
Spazio occupato da una cartella specifica |
| Memoria | free -h |
RAM e swap libere, usate e totali |
| CPU | lscpu |
Architettura, core, thread e cache |
| GPU | lspci | grep -i vga |
Identificazione della scheda video |
| Sistema | hostnamectl |
Hostname, kernel, distribuzione, architettura |
| Rete | ip a |
Interfacce di rete e indirizzi IP/MAC |
| Temperature | sensors |
Temperature CPU e componenti hardware |