I comandi linux sysadmin essenziali sono la tua unica salvezza quando un server va in tilt in produzione e non hai una GUI a disposizione. Ti permettono di diagnosticare un disservizio, ripulire un disco pieno o tracciare un attacco in pochi secondi, direttamente dalla shell.
| Categoria | Comandi chiave | Uso principale |
|—|—|—|
| Navigazione | find, locate, tree | Trovare file e mappare directory |
| Testo | grep, sed, awk | Filtrare e trasformare output |
| Processi | ps, kill, lsof | Gestire risorse e porte |
| Rete | curl, wget, netstat | Testare connettività e porte |
| Diagnostica | dmesg, journalctl | Leggere log di sistema |
Quando ho dovuto ripulire un filesystem pieno al 99% su un cluster che gestisce 2000 workstation per un ente sanitario pubblico, non avevo tempo per aprire un file manager. Conoscere i comandi giusti a memoria ha fatto la differenza tra un downtime di 5 minuti e uno di 2 ore. Il 78% dei professionisti IT usa Linux quotidianamente come ambiente di lavoro primario (Stack Overflow Developer Survey 2025), e il 60% del tempo di un sysadmin viene speso in troubleshooting e manutenzione (SRE Report 2025). Ecco i 20 comandi che devi avere sulla punta delle dita.
Prerequisiti per usare i comandi linux sysadmin essenziali
Ti serve un terminale Bash, accesso SSH al server e un utente con privilegi sudo. Tutti i comandi funzionano sulle distribuzioni principali (Ubuntu, Debian, RHEL, AlmaLinux). Testali sempre in un ambiente non critico prima di usarli in produzione.
Navigazione e file system
Trovare file in un filesystem con milioni di nodi richiede precisione. ls e cd li conosci già, ma il vero lavoro lo fanno gli altri.
Il comando find è il coltellino svizzero della ricerca. Cerca per nome, data di modifica o dimensione.
# Trova file di log più vecchi di 30 giorni e cancellali
find /var/log -name "*.log" -mtime +30 -type f -exec rm -f {} \;
# Combina find con xargs per elaborare migliaia di file senza saturare la memoria
find /tmp -type f -name "*.tmp" -print0 | xargs -0 rm -f
locate è più veloce di find perché usa un database preindicizzato, ma ricorda di aggiornarlo con sudo updatedb. tree -L 2 ti dà una mappa visiva della directory a due livelli di profondità.
Testo e ricerca
I log di sistema sono miniere d’oro, ma devi sapere come setacciare migliaia di righe al secondo.
grep filtra l’output. sed modifica il testo in streaming. awk elabora dati strutturati per colonne.
# Estrai solo gli indirizzi IP dal log di accesso e rimuovi i duplicati
grep -oE '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' /var/log/auth.log | sort -u
# Usa sed per sostituire una porta di ascolto in un file di config
sed -i 's/Port 22/Port 2222/g' /etc/ssh/sshd_config
# Usa awk per calcolare la dimensione totale dei file listati da ls -l
ls -l | awk '{sum += $5} END {print sum/1024/1024 " MB"}'
Aggiungi tail -f per seguire un log in tempo reale mentre riproduci un errore. cut e sort completano la cassetta degli attrezzi. Usa diff per confrontare due file di configurazione prima e dopo una modifica. tee ti permette di vedere l’output a schermo e salvarlo su file contemporaneamente: cat config.yml | tee backup_config.yml.
Processi
Un processo zombie o un’applicazione che consuma tutta la CPU possono bloccare un server in pochi minuti.
ps aux mostra tutti i processi in esecuzione. Aggiungi --sort=-%mem per vedere chi consuma più RAM o --sort=-%cpu per la CPU.
# Trova i processi che consumano più RAM
ps aux --sort=-%mem | head -n 10
# Forza l'arresto di un processo ribelle
kill -9 12345
# Scopri esattamente quale processo tiene occupata la porta 8080
lsof -i :8080
top e htop offrono una vista dinamica, ma in scripting ps è insostituibile. Usa nice e renice per abbassare la priorità di processi batch che non devono interferire con il traffico production. nohup lancia un comando che sopravvive alla chiusura del terminale. Infine, usa watch per ripetere un comando a intervalli regolari: watch -n 2 'ps aux | grep myapp' aggiorna lo stato ogni 2 secondi.
Rete
Verificare se un servizio è raggiungibile o se un firewall sta bloccando il traffico è routine.
ss è il nuovo standard per ispezionare i socket, ma netstat resta diffusissimo.
# Elenca tutte le connessioni TCP in ascolto con il processo associato
netstat -tlnp
# Recupera l'header HTTP di un sito per diagnosticare redirect o errori
curl -I https://dodoo.it
# Scarica un file di backup da un server remoto
wget https://esempio.com/backup.tar.gz
traceroute mappa il percorso dei pacchetti per capire dove si interrompe la comunicazione nella rete.
Disco e storage
Il problema numero uno nei server trascurati è il disco pieno. Un filesystem al 100% ferma i database e crasha le applicazioni.
df -h mostra lo spazio disponibile. du -sh * | sort -h trova la cartella che sta divorando i gigabyte.
# Troca le 10 directory più pesanti nella root
du -sh /* | sort -hr | head -n 10
lsblk mappa i dischi e le partizioni logiche. fdisk -l mostra i dettagli grezzi dei device block. Se aggiungi un nuovo disco virtuale su VMware o Proxmox, questi due comandi ti confermano che il kernel lo ha riconosciuto.
Utenti e permessi
Gestire chi può fare cosa su un sistema multiutente è sicurezza base.
id e whoami verificano l’utente corrente. su - cambia utente. sudo esegue comandi con privilegi elevati. chmod modifica i permessi di lettura, scrittura ed esecuzione.
# Rendi eseguibile uno script di deploy
chmod +x deploy.sh
# Crea un alias per un comando lungo e noioso che usi spesso
alias cleanup='find /tmp -type f -mtime +7 -delete'
Gli alias ti salvano dal sindrome del tunnel carpale. Aggiungili al tuo ~/.bashrc per renderli permanenti.
Archivi e compressione
Spostare directory intere tra server richiede compressione.
tar archivia, gzip comprime. Spesso si usano insieme.
# Crea un archivio compresso di una directory
tar -czvf backup_etc.tar.gz /etc/
# Estrai lo stesso archivio
tar -xzvf backup_etc.tar.gz
Per la sincronizzazione, rsync batte chiunque. Copia solo le differenze tra sorgente e destinazione, risparmiando banda e tempo.
# Sincronizza una cartella locale su un server remoto via SSH, mostrando l'avanzamento
rsync -avz --progress /data/ utente@server:/backup/
Se la connessione cade a metà, lanci di nuovo lo stesso comando e rsync riprende esattamente da dove si era interrotto.
Diagnostica rapida
Quando un server si pianta e non sai perché, inizia da qui.
dmesg -T legge il ring buffer del kernel. I messaggi di errore hardware o i panic del kernel finiscono qui. journalctl -u ssh filtra i log di systemd per un servizio specifico.
# Mostra gli ultimi 20 messaggi di errore del kernel con timestamp leggibile
dmesg -T -l err | tail -n 20
last mostra gli accessi degli utenti. uptime ti dice da quanto il sistema è acceso e il carico medio (load average). Se il load average supera il numero di core CPU, il server è in sovraccarico.
Non dimenticare history rivisitato: usa history | grep "comando_dimenticato" per ritrovare quella sequenza complessa che hai usato mesi fa. E usa screen o tmux per mantenere sessioni SSH attive anche se il tuo collegamento cade, così i processi lunghi non muoiono per un timeout di rete.
Errori comuni e troubleshooting
L’errore più frequente è lanciare kill -9 a caso sperando di risolvere. Uccidere il processo sbagliato in produzione può peggiorare la situazione. Usa prima ps aux per confermare il PID.
Un altro errore classico: usare grep su file binari o di log ruotati e compressi. Se devi cercare dentro un .gz, usa zgrep invece di decomprimere tutto.
Infine, dimenticare xargs quando si elaborano troppi file. Se find restituisce migliaia di risultati, il comando successivo potrebbe fallire per limite degli argomenti. xargs suddivide l’input in batch sicuri.
FAQ — Domande Frequenti
Qual è la differenza tra find e locate?
find cerca in tempo reale sul disco ed è sempre aggiornato, ma è più lento su filesystem enormi. locate usa un database indicizzato, è velocissimo, ma non trova file creati dopo l’ultimo updatedb. Usa locate per ricerche rapide, find per precisione.
Come fare quando un comando Linux non risponde?
Premi Ctrl+Z per metterlo in pausa, poi lancia kill -9 %1 per terminarlo. Se l’intera shell è bloccata, apri un’altra sessione SSH, trova il PID con ps aux | grep nomescript e forza l’arresto con kill -9.
Perché usare rsync invece di cp o scp?
rsync copia solo le differenze tra sorgente e destinazione. Se trasferisci 10 GB e la connessione cade, riprendi dal punto di interruzione. scp ricomincia da zero. Inoltre rsync preserva permessi, ownership e timestamp.
Come monitorare un processo in continuo?
Usa watch. Per esempio, watch -n 1 'free -m' aggiorna l’uso della memoria ogni secondo. È molto più pratico che lanciare lo stesso comando manualmente.
Come trovare file cancellati che occupano ancora spazio su disco?
Esegui lsof | grep deleted. Se un processo ha ancora un file aperto che è stato cancellato, lo spazio su disco non viene liberato finché non chiudi quel processo con kill.
Conclusioni con takeaway operativi
Padroneggiare i comandi linux sysadmin essenziali non è un esercizio accademico. È una necessità operativa. Quando un server va in crash alle 3 di notte, la tua memoria muscolare è l’unico strumento che funziona senza rete.
Tre takeaway da applicare subito:
- Automatizza le operazioni ripetitive con alias e script bash minimi.
- Usa
tail -fejournalctl -fper osservare i log in tempo reale durante i cambiamenti. - Impara a combinare i comandi con pipe (
|) exargsper risolvere problemi complessi in una sola riga.
La pratica costante è l’unico modo per fissare questi comandi. Crea una VM, rompila e riparala usando solo il terminale.
Per la documentazione ufficiale sui comandi GNU Coreutils, consulta https://www.gnu.org/software/coreutils/manual/.
[Leggi anche: Hardening SSH su Linux: 10 Impostazioni Essenziali]
[Leggi anche: Journalctl Comandi Linux: 15 Istruzioni Essenziali]
[Leggi anche: Configurare un VPS Linux da Zero: Checklist 2026]
Aggiornato: Aprile 2026