Linux Cheat Sheet
Comandi terminale, bash, pipe e one-liner
Navigazione
Elenca il contenuto di una directory con permessi, dimensione e data.
ls -la /var/log
Cambia la directory corrente. Senza argomenti va alla home.
cd /etc/nginx cd ~ cd - cd ..
Mostra il percorso completo della directory corrente.
pwd
Mostra l'albero delle directory in formato visivo.
tree -L 2 ~/projects
Identifica il tipo di un file (testo, binario, immagine, script, ecc).
file image.png file -i script.sh
Mostra metadati dettagliati di un file (dimensione, inode, date, permessi).
stat file.txt stat -c "%n %s %y" file.txt
File
Crea un file vuoto o aggiorna la data di modifica.
touch newfile.txt touch -t 202601011200 file.txt
Crea una directory. Con -p crea l'intera struttura di genitori mancanti.
mkdir -p projects/app/src mkdir -m 700 secret
Elimina una directory vuota.
rmdir empty_dir rmdir -p a/b/c
Elimina file o directory. Con -rf elimina ricorsivamente senza conferma (pericoloso).
rm file.txt rm -rf node_modules
Copia file o directory.
cp file.txt backup.txt cp -r src/ dest/
Sposta o rinomina file e directory.
mv old.txt new.txt mv *.log archive/
Crea link: -s per simbolici, senza flag per hard link.
ln -s /usr/local/bin/node ~/node ln file hardlink
Stampa il contenuto di uno o più file su stdout.
cat file.txt cat -n script.sh
Visualizza file pagina per pagina con navigazione. Cerca con /. +F segue come tail -f.
less /var/log/syslog less +F app.log
Mostra le prime N righe di un file (default: 10).
head -n 20 file.txt head -c 1024 binary
Mostra le ultime N righe. -f segue il file man mano che cresce.
tail -n 50 access.log tail -f /var/log/syslog
Conta righe (-l), parole (-w), byte (-c) o caratteri (-m).
wc -l file.txt wc *.md
Permessi
Modifica i permessi (rwx) di file e directory.
chmod 755 script.sh chmod +x deploy.sh chmod -R 644 docs/
Modifica il proprietario e/o il gruppo dei file.
chown user file.txt chown -R www-data:www-data /var/www
Esegue un comando come un altro utente (root di default).
sudo apt update sudo -u postgres psql sudo -i
Cambia utente. - carica l'ambiente di quell'utente.
su - postgres su -c 'whoami' root
Crea (useradd) o elimina (userdel) account utente.
sudo useradd -m -s /bin/bash john sudo userdel -r john
Imposta o cambia la password di un utente.
passwd sudo passwd john
Mostra l'utente corrente (whoami) o tutti gli utenti collegati (who).
whoami who who -a
Mostra UID, GID e gruppi dell'utente corrente.
id id -nG groups
Processi
Elenca i processi. aux mostra tutti i processi in dettaglio.
ps aux ps -ef
Mostra i processi in tempo reale, ordinati per uso di CPU/memoria.
top top -u www-data top -p 1234
Invia un segnale a un processo per PID. -9 forza la terminazione (SIGKILL).
kill 1234 kill -9 1234 kill -HUP $(pidof nginx)
Termina processi per nome (killall) o pattern (pkill).
killall firefox pkill -9 -f node pkill -u john
Gestisce i job della shell: jobs elenca, fg porta in foreground, bg riprende in background.
jobs fg %1 bg %2 # Ctrl+Z to suspend the foreground job
Esegue un comando che continua anche dopo aver chiuso il terminale.
nohup ./long-task.sh > out.log 2>&1 & nohup python script.py &
Avvia un processo con priorità modificata (nice) o cambia la priorità (renice).
nice -n 19 ./heavy.sh renice -n 5 -p 1234
Aggiungere & alla fine del comando lo esegue in background, liberando il terminale.
./server.sh & long-task & disown %1
Rete
Testa la connettività inviando pacchetti ICMP. -c limita il numero.
ping google.com ping -c 4 8.8.8.8
Esegue richieste HTTP/HTTPS e scarica file. Supporta GET, POST, header, autenticazione.
curl https://api.github.com
curl -X POST -H "Content-Type: application/json" -d '{"a":1}' url
curl -O https://example.com/file.zipScarica file via HTTP/FTP. Supporta ripresa con -c e mirror ricorsivo.
wget https://example.com/file.zip wget -c <url> wget -r -np https://site/docs/
Si connette a un server remoto via Secure Shell. -L crea tunnel per porte locali.
ssh user@host ssh -p 2222 -i ~/.ssh/id_ed25519 user@host ssh -L 8080:localhost:80 user@host
Copia file tra macchine via SSH.
scp file.txt user@host:/tmp/ scp -r dir/ user@host:/var/www/ scp user@host:/etc/conf .
Sincronizza file e directory in modo efficiente. -avz è la combinazione più usata.
rsync -avz src/ user@host:/dest/ rsync -av --delete --exclude='.git' a/ b/
Mostra porte in ascolto e connessioni attive. -tulpn è l'uso tipico.
ss -tulpn ss -t state established
Interroga il DNS. dig è più dettagliato, nslookup più semplice, host più conciso.
dig google.com dig +short MX gmail.com nslookup example.com 8.8.8.8
Compressione
Impacchetta e comprime directory. -czf crea con gzip, -xzf estrae.
tar -czvf archive.tar.gz folder/ tar -xzvf archive.tar.gz tar -tf archive.tar.gz
Compressione zip. unzip -l elenca il contenuto senza estrarre.
zip -r out.zip folder/ unzip archive.zip unzip -l archive.zip
Comprime/decomprime file singoli con gzip. -k mantiene l'originale.
gzip file.txt gzip -d file.txt.gz gzip -k file.txt
Compressione bzip2, più lenta ma con miglior rapporto rispetto a gzip.
bzip2 file.txt bunzip2 file.txt.bz2
Compressione xz, rapporto ancora migliore. -T0 usa tutti i core.
xz file.txt unxz file.txt.xz xz -T0 file
Formato 7z, alto rapporto di compressione. Supporta password e archive divisi.
7z a out.7z folder/ 7z x archive.7z 7z a -p out.7z secret.txt
Ricerca
Cerca file per nome, tipo, dimensione, età, ed esegue azioni con -exec.
find . -name "*.log" find / -type f -size +100M find . -mtime -7 find . -name "*.tmp" -delete
Cerca pattern nei file. -r ricorsivo, -i ignora maiuscole, -E attiva regex.
grep -rn "TODO" src/ grep -i error log grep -E "warn|error" file
Elabora testo colonna per colonna. Linguaggio completo per il parsing di file strutturati.
awk '{print $1}' file.txt
awk -F',' '{print $2}' csv
awk '/error/ {count++} END {print count}' logModifica stream di testo. -i altera il file sul posto, usato soprattutto per sostituzioni.
sed 's/old/new/g' file sed -i 's/old/new/g' file sed -n '10,20p' file
Trova binari e file: locate (cache), which (nel PATH), whereis (binario, sorgente, manuale).
locate nginx.conf which python3 whereis bash
Redirezione
Redireziona stdout su un file, sovrascrivendo il contenuto esistente.
echo hello > out.txt ls -la > files.txt
Redireziona stdout su un file, aggiungendo al contenuto esistente.
echo "line" >> log.txt date >> events.log
Collega lo stdout di un comando allo stdin del successivo, concatenando processi.
ls -la | grep .conf cat file | sort | uniq
Redireziona stderr (fd 2). 2>&1 unisce stderr a stdout. &> fa entrambi in bash.
cmd 2> errors.log cmd > out.log 2>&1 cmd &> all.log
Legge da stdin e scrive su file E su stdout. -a aggiunge invece di sovrascrivere.
ls | tee files.txt echo 'data' | sudo tee /etc/conf make | tee -a build.log
Costruisce comandi a partire da stdin. Indispensabile per combinare find o grep con altri comandi.
find . -name "*.log" | xargs rm
echo "a b c" | xargs -n 1
ls *.txt | xargs -I {} cp {} backup/Ambiente
Imposta variabili d'ambiente che vengono ereditate dai processi figli.
export PATH="$PATH:/opt/bin" export API_KEY="abc123" export -p
Elenca tutte le variabili d'ambiente attive. printenv può mostrarne una specifica.
env printenv PATH env VAR=value command
Crea scorciatoie per comandi. Da definire in ~/.bashrc o ~/.zshrc per renderle permanenti.
alias ll='ls -la' alias gs='git status' unalias ll
Stampa testo o variabili su stdout. -e attiva escape come \n e \t.
echo "Hello $USER" echo -e "line1\nline2" echo $PATH
Carica uno script nella shell corrente (non in una subshell). Utile per .bashrc e venv.
source ~/.bashrc . ~/.zshrc source venv/bin/activate
Mostra la cronologia dei comandi. !! ripete l'ultimo, !N esegue il comando N.
history history | grep ssh !! !42
Pacchetti
Gestore di pacchetti Debian/Ubuntu. apt è più moderno e amichevole di apt-get.
sudo apt update && sudo apt upgrade sudo apt install nginx sudo apt remove --purge package apt search keyword
Gestore di pacchetti Red Hat/Fedora/CentOS. dnf è il successore moderno di yum.
sudo dnf install nginx sudo yum update dnf search keyword
Gestore di pacchetti per macOS e Linux con formule mantenute dalla community.
brew install wget brew update && brew upgrade brew list brew search node
Gestore di pacchetti Arch Linux. -Syu aggiorna tutto, -S installa, -R rimuove.
sudo pacman -S nginx sudo pacman -Syu pacman -Ss keyword
Pacchetti universali con sandbox. Si installano su qualsiasi distribuzione moderna.
sudo snap install code flatpak install flathub org.gimp.GIMP snap list
SSH
Genera coppie di chiavi SSH. ed25519 è la raccomandazione attuale (più veloce e sicura di RSA).
ssh-keygen -t ed25519 -C "john.doe@example.com" ssh-keygen -t rsa -b 4096
Copia la chiave pubblica nel ~/.ssh/authorized_keys del server remoto.
ssh-copy-id user@host ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@host
L'agent SSH mantiene le chiavi decifrate in memoria per non chiedere la passphrase ad ogni connessione.
eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 ssh-add -l
Client SFTP interattivo per trasferire file via SSH.
sftp user@host put file.txt get remote.zip ls bye
File di configurazione SSH per host. Permette alias, identità, porta, jump host.
Host myserver HostName 1.2.3.4 User john Port 2222 IdentityFile ~/.ssh/id_ed25519
Disco
Mostra spazio usato e disponibile per file system. -h in formato leggibile.
df -h df -h / df -i
Mostra lo spazio occupato da file e directory. -sh riassunto in formato leggibile.
du -sh * du -h --max-depth=1 du -ah . | sort -rh | head -20
Monta un file system in un mount point. umount smonta.
mount sudo mount /dev/sdb1 /mnt/data sudo umount /mnt/data
Elenca dischi e partizioni in formato albero (lsblk) o tabella (fdisk).
lsblk lsblk -f sudo fdisk -l
Mostra memoria RAM totale, usata, libera e cache. -h in formato leggibile.
free -h free -m free -h -s 2
Monitoring
Versione migliorata di top con colori, scroll e termina processi con F9.
htop htop -u www-data htop -p 1234,5678
Statistiche di memoria virtuale, CPU, IO. Utile per diagnosticare colli di bottiglia.
vmstat vmstat 2 5
Statistiche di IO disco. Identifica dischi saturati.
iostat iostat -xz 2
Mostra messaggi del kernel. Utile per diagnosticare problemi hardware o di driver.
sudo dmesg | tail sudo dmesg -T sudo dmesg -w
Controlla servizi systemd: avviare, fermare, vedere lo stato, attivare al boot.
sudo systemctl start nginx sudo systemctl status sshd sudo systemctl enable docker
Log di systemd. -f segue dal vivo, -u filtra per servizio, --since per tempo.
journalctl -u nginx journalctl -f journalctl --since "1 hour ago" journalctl -p err
uptime mostra da quanto tempo il sistema è acceso e la load average. w elenca utenti collegati e cosa stanno facendo.
uptime w
Avanzato
Ripete un comando periodicamente. -d evidenzia i cambiamenti tra esecuzioni.
watch -n 2 "df -h" watch -d "ls -l" watch "ps aux | grep node"
Crea sessioni di terminale persistenti che sopravvivono ai logout. Versione classica.
screen -S work screen -r work screen -ls # Ctrl+A D to detach
Multiplexer di terminale moderno: più finestre, pannelli e sessioni persistenti.
tmux new -s work tmux attach -t work tmux ls # Ctrl+B D to detach
Pianificatore di task periodici. crontab -e modifica i job dell'utente corrente.
crontab -e crontab -l 0 3 * * * /script.sh # daily at 3am */15 * * * * /poll.sh # every 15 minutes
Pianifica un comando per essere eseguito una sola volta in futuro.
echo "/script.sh" | at now + 1 hour at 14:30 tomorrow atq at -r 5
Riferimento
Ogni processo ha tre stream di default identificati da file descriptor. Capire questi stream è la chiave per combinare comandi con pipe e redirezioni.
stdinfd 0Input standard. Di default proviene dalla tastiera, ma può essere sostituito da un file con < o dallo stdout di un altro comando via pipe.
stdoutfd 1Output standard. Di default va al terminale. Si redireziona con > (sovrascrivi) o >> (aggiungi).
stderrfd 2Errori e avvisi. Stream separato perché gli errori non si mescolino con l'output normale. Si redireziona con 2>.
cmd > out.txt # stdout → file cmd 2> err.txt # stderr → file cmd > out 2>&1 # stdout + stderr → file cmd &> all.txt # bash shorthand cmd < input.txt # stdin ← file cmd1 | cmd2 # stdout cmd1 → stdin cmd2
Ogni file ha tre gruppi di permessi (utente, gruppo, altri) con tre bit ciascuno (read, write, execute). In formato numerico ogni gruppo è la somma dei suoi bit.
u— proprietario del fileg— gruppo del fileo— tutti gli altria— tutti (u+g+o)
r= 4 — leggerew= 2 — scriverex= 1 — eseguire (o entrare nella directory)
chmod 755 file # rwx r-x r-x (typical script) chmod 644 file # rw- r-- r-- (regular file) chmod 600 file # rw- --- --- (private, e.g. SSH key) chmod 700 dir # rwx --- --- (private dir) chmod +x script.sh # add execute for everyone chmod u+w,g-w file # add write to owner, remove from group chmod -R 755 dir/ # recursive
La shell può avere più job contemporaneamente. Solo il job in foreground occupa il terminale; i job in background continuano a girare mentre digiti altri comandi.
Job che sta usando il terminale. Riceve input dalla tastiera e mostra output. Blocca il prompt fino al termine.
Job che gira in parallelo, senza occupare il terminale. Libera il prompt per altri comandi. Si termina con kill o portandolo in fg.
./long-task.sh & # start in background Ctrl+Z # suspend the foreground job jobs # list jobs of the current shell fg %1 # bring job 1 to foreground bg %1 # resume job 1 in background disown %1 # detach from shell (survives logout) nohup ./task.sh & # ignore HUP, redirect to nohup.out ps -ef # list all system processes
Combinazioni di comandi frequenti nel quotidiano. Ognuna risolve un compito specifico in una singola pipeline.
- 01.Trova file più grandi di 100MB su tutto il sistema.
find / -type f -size +100M 2>/dev/null - 02.Elenca i 10 file più grandi nella directory corrente.
du -ah . | sort -rh | head -10 - 03.Cerca e sostituisce testo in tutti i file che lo contengono.
grep -rl 'old' . | xargs sed -i 's/old/new/g' - 04.Conta ricorsivamente il numero totale di file.
find . -type f | wc -l - 05.Mostra tutti gli utenti attualmente collegati al sistema.
who - 06.Rende ricorsivamente eseguibili tutti gli script .sh.
find . -name '*.sh' -exec chmod +x {} + - 07.Ripete un comando ogni 2 secondi per vedere i cambiamenti dal vivo.
watch -n 2 "df -h" - 08.Ottiene l'IP pubblico esterno della macchina corrente.
curl -s ifconfig.me - 09.Elenca tutte le porte aperte e i processi che le usano.
ss -tulpn - 10.Mostra i 10 processi che consumano più memoria.
ps aux --sort=-%mem | head -10 - 11.Mostra i 10 processi che consumano più CPU.
ps aux --sort=-%cpu | head -10 - 12.Trova symlink rotti (puntano a file inesistenti).
find . -xtype l - 13.Cancella tutti i file .DS_Store generati da macOS.
find . -name '.DS_Store' -delete - 14.Crea un backup tar.gz con la data nel nome del file.
tar czf backup-$(date +%F).tar.gz folder/ - 15.Avvia un semplice server HTTP sulla porta 8000 per condividere file.
python3 -m http.server 8000 - 16.Formatta e stampa JSON in modo leggibile.
cat data.json | python3 -m json.tool - 17.Segue un log dal vivo partendo dalle ultime 100 righe.
tail -f -n 100 logfile - 18.Trova tutti i file e le directory vuote.
find . -empty - 19.Conta le righe di codice sommando tutti i file .py del progetto.
find . -name '*.py' | xargs wc -l - 20.Mostra la dimensione di ogni sottodirectory ordinata dalla più piccola alla più grande.
du -h --max-depth=1 | sort -h