Cheat sheet

Comandi Linux: cheat sheet per principianti e amministratori

Aggiornato: · Skillaria.Top

I comandi Linux principali si dividono in gruppi: navigazione (pwd, ls, cd), gestione dei file (cp, mv, rm, mkdir), permessi (chmod, chown), pacchetti (apt), processi (ps, top, kill), ricerca ed elaborazione del testo (find, grep, sed, awk), rete (ip, ss, curl) e servizi (systemctl, journalctl). Di seguito trovi tabelle con i comandi e gli esempi che coprono gran parte del lavoro quotidiano nel terminale.

Questo cheat sheet dei comandi Linux è organizzato per tipo di attività: trovare un file, installare un pacchetto, terminare un processo bloccato, estrarre una riga da un log, verificare una porta. I comandi sono stati provati su Ubuntu e Debian; quasi tutti funzionano anche in altre distribuzioni, con la differenza principale nel gestore dei pacchetti.

Aiuto e suggerimenti

ead>
ComandoCosa fa
man lsmanuale completo del comando; uscita con q, ricerca con /parola
ls --helpriepilogo rapido delle opzioni
type cdindica se è un comando interno, un alias o un file
which python3percorso dell'eseguibile
historycronologia dei comandi; !123 ripete il comando numero 123
Ctrl+Rricerca nella cronologia
Ctrl+C / Ctrl+Dinterrompere un comando / chiudere la shell
ead>
ComandoCosa fa
pwddirectory corrente
ls -latutti i file, inclusi quelli nascosti, con permessi e dimensioni
ls -lhdimensioni leggibili (K, M, G)
ls -ltordinamento per data di modifica
cd /var/logspostarsi con percorso assoluto
cd .. / cd ~ / cd -directory superiore / home / directory precedente
tree -L 2albero delle directory su 2 livelli (pacchetto tree)

Gestione di file e directory

ead>
ComandoCosa fa
touch file.txtcrea un file vuoto o aggiorna la data di modifica
mkdir -p a/b/ccrea le directory insieme a quelle superiori
cp file.txt backup.txtcopia un file
cp -r src/ dst/copia una directory in modo ricorsivo
mv old.txt new.txtrinomina o sposta
rm file.txtelimina un file (non va nel cestino)
rm -r dir/elimina una directory con il contenuto; -f non chiede conferma, attenzione
rmdir direlimina una directory vuota
ln -s /opt/app/current appcrea un collegamento simbolico
stat file.txtdettagli: dimensione, permessi, inode, date
file image.binriconosce il tipo di file dal contenuto

Visualizzazione del contenuto

ead>
ComandoCosa fa
cat filemostra il file per intero
less filelettura pagina per pagina, ricerca /, uscita q
head -n 20 fileprime 20 righe
tail -n 50 fileultime 50 righe
tail -f /var/log/syslogsegue il file in tempo reale
wc -l filenumero di righe
diff a.conf b.confdifferenze tra due file

Permessi e proprietari

ead>
ComandoCosa fa
chmod +x script.shconcede il permesso di esecuzione
chmod 644 filerw-r--r--: il proprietario scrive, gli altri leggono
chmod 755 dirrwxr-xr-x: tipico per directory e script
chmod 600 ~/.ssh/id_ed25519solo il proprietario: per le chiavi private
sudo chown www-data:www-data filecambia proprietario e gruppo
sudo chown -R alice /srv/appcambia il proprietario in modo ricorsivo
idil proprio UID, GID e gruppi
sudo -ishell di root
sudo usermod -aG docker aliceaggiunge un utente a un gruppo

Pacchetti (apt, Debian e Ubuntu)

ead>
ComandoCosa fa
sudo apt updateaggiorna l'elenco dei pacchetti dai repository
sudo apt upgradeaggiorna i pacchetti installati
sudo apt install nginxinstalla un pacchetto
sudo apt remove nginxrimuove, mantenendo le configurazioni; purge le rimuove insieme al pacchetto
sudo apt autoremoveelimina le dipendenze non più necessarie
apt search htopcerca un pacchetto
apt show nginxdescrizione e versione
dpkg -l | grep nginxverifica se il pacchetto è installato
dpkg -L nginxfile installati dal pacchetto

In RHEL, Fedora e Rocky Linux gli equivalenti sono dnf install, dnf remove, dnf upgrade, rpm -qa.

Ambiente e profilo

ead>
ComandoCosa fa
echo $PATHle directory in cui la shell cerca i programmi
envtutte le variabili d'ambiente
export APP_ENV=prodimposta una variabile per la sessione corrente e i processi figli
alias ll='ls -la'scorciatoia per un comando
source ~/.bashrcrilegge il profilo senza disconnettersi
crontab -e / crontab -lmodifica / elenca i task cron

Processi

ead>
ComandoCosa fa
ps auxtutti i processi, con utente, CPU e memoria
ps aux | grep nginxtrova un processo
pgrep -a nginxPID e riga di comando per nome
top / htopcarico in tempo reale
kill 1234chiede al processo di terminare (SIGTERM)
kill -9 1234termina forzatamente (SIGKILL) — ultima risorsa
pkill -f "python app.py"termina per corrispondenza nella riga di comando
command &, jobs, fgavvio in background e gestione dei job
nohup ./job.sh &il processo sopravvive alla chiusura del terminale
free -hmemoria e swap
uptimetempo di attività e carico medio
strace -p 1234chiamate di sistema del processo

Servizi e log (systemd)

ead>
ComandoCosa fa
systemctl status nginxstato del servizio e ultime righe del log
sudo systemctl start|stop|restart nginxavvia, arresta, riavvia
sudo systemctl reload nginxrilegge la configurazione senza fermare il servizio
sudo systemctl enable --now nginxabilita l'avvio automatico e avvia subito
systemctl --failedunità in errore
journalctl -u nginx -flog del servizio in tempo reale
journalctl -u nginx --since "1 hour ago"log dell'ultima ora
journalctl -p err -berrori dall'ultimo avvio

Ricerca di file

ead>
ComandoCosa fa
find /var/log -name "*.log"cerca per nome
find . -type f -mtime -1file modificati nell'ultimo giorno
find / -size +500M 2>/dev/nullfile grandi; errori di accesso nascosti
find . -name "*.tmp" -deletetrova ed elimina
du -sh *dimensione di ogni elemento della directory
df -hspazio libero sui file system

Ricerca ed elaborazione del testo: grep, sed, awk, jq

ead>
ComandoCosa fa
grep "error" app.logrighe che contengono la parola
grep -i -n "error" app.logsenza distinguere maiuscole e minuscole, con i numeri di riga
grep -r "listen" /etc/nginx/ricerca ricorsiva in una directory
grep -v "DEBUG" app.logrighe in cui la parola non compare
grep -c "500" access.lognumero di corrispondenze
grep -E "warn|error" app.logespressioni regolari estese
sed 's/old/new/g' filesostituisce e mostra il risultato
sed -i 's/8080/9090/' app.confsostituisce direttamente nel file
sed -n '10,20p' filemostra le righe dalla 10 alla 20
awk '{print $1}' access.logil primo campo di ogni riga
awk -F: '{print $1}' /etc/passwdnomi utente (separatore :)
awk '$9 == 500' access.logrighe in cui il nono campo vale 500
sort | uniq -c | sort -rnconta le ripetizioni e ordina per frequenza
cut -d, -f2 data.csvla seconda colonna di un CSV
jq '.items[].name' data.jsonestrae campi da JSON

Esempio di pipeline: i dieci indirizzi IP che hanno inviato più richieste a nginx.

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

Reindirizzamenti e pipe

ead>
CostruttoCosa fa
cmd > out.txtscrive l'output nel file (sovrascrive)
cmd >> out.txtaggiunge in fondo al file
cmd 2> err.txtreindirizza gli errori
cmd > all.log 2>&1output ed errori nello stesso file
cmd1 | cmd2passa l'output di un comando all'input di un altro
cmd | tee out.txtmostra a schermo e salva
cmd1 && cmd2esegue il secondo solo se il primo ha successo
cmd1 || cmd2esegue il secondo se il primo fallisce

Archivi

ead>
ComandoCosa fa
tar -czf backup.tar.gz dir/impacchetta e comprime con gzip
tar -xzf backup.tar.gzestrae
tar -tzf backup.tar.gzmostra il contenuto
zip -r site.zip site/ / unzip site.ziparchivi zip

Rete

ead>
ComandoCosa fa
ip ainterfacce e indirizzi IP
ip rtabella di routing
ping -c 4 8.8.8.8raggiungibilità di un host
ss -tulpnporte aperte e processi che le usano
dig example.com / nslookup example.cominterrogazione DNS
curl -I https://example.comsolo le intestazioni della risposta
curl -s https://api.example.com | jqrichiesta a un'API e JSON formattato
wget URLscarica un file
traceroute example.compercorso dei pacchetti verso un host
ssh user@hostconnessione a un server
ssh-keygen -t ed25519crea una coppia di chiavi SSH
scp file user@host:/tmp/copia un file sul server
rsync -avz dir/ user@host:/srv/dir/sincronizza una directory
sudo ufw statusregole del firewall

Sistema e dischi

ead>
ComandoCosa fa
uname -akernel e architettura
cat /etc/os-releasedistribuzione e versione
hostnamectlnome host e informazioni di sistema
lsblkdischi e partizioni
sudo mount /dev/sdb1 /mntmonta una partizione
who / wchi è connesso al sistema
sudo reboot / sudo shutdown -h nowriavvio / spegnimento

In breve

Per il lavoro quotidiano bastano un paio di decine di comandi: ls, cd, cp, mv, rm, chmod, sudo, apt, ps, kill, systemctl, journalctl, grep, find, ss, curl e ssh. Conserva questo cheat sheet e consultalo finché i comandi non diventano automatici. Tutti i gruppi di comandi sono trattati nel corso con esercizi pratici.

Domande frequenti

Come si esce da man o less?

Premi <code>q</code>. Per cercare dentro il testo digita la barra seguita dalla parola; <code>n</code> passa alla corrispondenza successiva.

Come si esce dall'editor vim?

Premi <code>Esc</code>, poi digita <code>:q!</code> e Invio per uscire senza salvare, oppure <code>:wq</code> per salvare e uscire. Per iniziare è più semplice modificare i file con nano.

Perché rm -rf è pericoloso?

Il comando elimina senza chiedere conferma e senza passare dal cestino, e un errore nel percorso (ad esempio uno spazio in più prima dell'asterisco) può cancellare la directory sbagliata. Prima di eseguirlo controlla il percorso con <code>ls</code>.

Come ripeto l'ultimo comando con sudo?

Digita <code>sudo !!</code>: la shell sostituisce l'intero comando precedente.

Come si ferma un comando bloccato nel terminale?

<code>Ctrl+C</code> invia il segnale di interruzione. Se il comando non risponde, trova il suo PID con <code>ps</code> o <code>pgrep</code> da un altro terminale e terminalo con <code>kill</code>.