MaisTools
Sviluppatore/

Linux Cheat Sheet

Riferimento rapido di Linux: comandi del terminale, flag, esempi e combinazioni con pipe, organizzati per sezione con ricerca istantanea.

Linux Cheat Sheet

Comandi terminale, bash, pipe e one-liner

Navigazione

ls

Elenca il contenuto di una directory con permessi, dimensione e data.

Flag-l-a-la-h-S-t-r-R
Esempio
ls -la /var/log
cd

Cambia la directory corrente. Senza argomenti va alla home.

Esempio
cd /etc/nginx
cd ~
cd -
cd ..
pwd

Mostra il percorso completo della directory corrente.

Flag-P-L
Esempio
pwd
tree

Mostra l'albero delle directory in formato visivo.

Flag-L-d-a-I
Esempio
tree -L 2 ~/projects
file

Identifica il tipo di un file (testo, binario, immagine, script, ecc).

Flag-i-b
Esempio
file image.png
file -i script.sh
stat

Mostra metadati dettagliati di un file (dimensione, inode, date, permessi).

Flag-c-f
Esempio
stat file.txt
stat -c "%n %s %y" file.txt

File

touch

Crea un file vuoto o aggiorna la data di modifica.

Flag-a-m-c-t
Esempio
touch newfile.txt
touch -t 202601011200 file.txt
mkdir

Crea una directory. Con -p crea l'intera struttura di genitori mancanti.

Flag-p-m-v
Esempio
mkdir -p projects/app/src
mkdir -m 700 secret
rmdir

Elimina una directory vuota.

Flag-p
Esempio
rmdir empty_dir
rmdir -p a/b/c
rm

Elimina file o directory. Con -rf elimina ricorsivamente senza conferma (pericoloso).

Flag-r-f-i-v
Esempio
rm file.txt
rm -rf node_modules
cp

Copia file o directory.

Flag-r-v-i-p-a-u
Esempio
cp file.txt backup.txt
cp -r src/ dest/
mv

Sposta o rinomina file e directory.

Flag-i-v-n-f
Esempio
mv old.txt new.txt
mv *.log archive/
ln

Crea link: -s per simbolici, senza flag per hard link.

Flag-s-f-v
Esempio
ln -s /usr/local/bin/node ~/node
ln file hardlink
cat

Stampa il contenuto di uno o più file su stdout.

Flag-n-A-b-s
Esempio
cat file.txt
cat -n script.sh
less

Visualizza file pagina per pagina con navigazione. Cerca con /. +F segue come tail -f.

Flag-N-S-X+F
Esempio
less /var/log/syslog
less +F app.log
head

Mostra le prime N righe di un file (default: 10).

Flag-n-c
Esempio
head -n 20 file.txt
head -c 1024 binary
tail

Mostra le ultime N righe. -f segue il file man mano che cresce.

Flag-n-f-F-c
Esempio
tail -n 50 access.log
tail -f /var/log/syslog
wc

Conta righe (-l), parole (-w), byte (-c) o caratteri (-m).

Flag-l-w-c-m
Esempio
wc -l file.txt
wc *.md

Permessi

chmod

Modifica i permessi (rwx) di file e directory.

Flag-R-v
Esempio
chmod 755 script.sh
chmod +x deploy.sh
chmod -R 644 docs/
chown

Modifica il proprietario e/o il gruppo dei file.

Flag-R-v
Esempio
chown user file.txt
chown -R www-data:www-data /var/www
sudo

Esegue un comando come un altro utente (root di default).

Flag-i-u-k-l
Esempio
sudo apt update
sudo -u postgres psql
sudo -i
su

Cambia utente. - carica l'ambiente di quell'utente.

Flag--c-l
Esempio
su - postgres
su -c 'whoami' root
useradd / userdel

Crea (useradd) o elimina (userdel) account utente.

Flag-m-s-G-r
Esempio
sudo useradd -m -s /bin/bash john
sudo userdel -r john
passwd

Imposta o cambia la password di un utente.

Flag-l-u-d
Esempio
passwd
sudo passwd john
whoami / who

Mostra l'utente corrente (whoami) o tutti gli utenti collegati (who).

Esempio
whoami
who
who -a
id / groups

Mostra UID, GID e gruppi dell'utente corrente.

Flag-u-g-G-n
Esempio
id
id -nG
groups

Processi

ps

Elenca i processi. aux mostra tutti i processi in dettaglio.

Flagaux-ef-u--sort
Esempio
ps aux
ps -ef
top

Mostra i processi in tempo reale, ordinati per uso di CPU/memoria.

Flag-u-p-d-n
Esempio
top
top -u www-data
top -p 1234
kill

Invia un segnale a un processo per PID. -9 forza la terminazione (SIGKILL).

Flag-9-15-l-HUP
Esempio
kill 1234
kill -9 1234
kill -HUP $(pidof nginx)
killall / pkill

Termina processi per nome (killall) o pattern (pkill).

Flag-9-u-i
Esempio
killall firefox
pkill -9 -f node
pkill -u john
jobs / fg / bg

Gestisce i job della shell: jobs elenca, fg porta in foreground, bg riprende in background.

Flag-l-r-s
Esempio
jobs
fg %1
bg %2
# Ctrl+Z to suspend the foreground job
nohup

Esegue un comando che continua anche dopo aver chiuso il terminale.

Esempio
nohup ./long-task.sh > out.log 2>&1 &
nohup python script.py &
nice / renice

Avvia un processo con priorità modificata (nice) o cambia la priorità (renice).

Flag-n
Esempio
nice -n 19 ./heavy.sh
renice -n 5 -p 1234
& (background)

Aggiungere & alla fine del comando lo esegue in background, liberando il terminale.

Esempio
./server.sh &
long-task &
disown %1

Rete

ping

Testa la connettività inviando pacchetti ICMP. -c limita il numero.

Flag-c-i-W-s
Esempio
ping google.com
ping -c 4 8.8.8.8
curl

Esegue richieste HTTP/HTTPS e scarica file. Supporta GET, POST, header, autenticazione.

Flag-X-H-d-o-O-L-I-s-u
Esempio
curl https://api.github.com
curl -X POST -H "Content-Type: application/json" -d '{"a":1}' url
curl -O https://example.com/file.zip
wget

Scarica file via HTTP/FTP. Supporta ripresa con -c e mirror ricorsivo.

Flag-c-r-O-q--mirror
Esempio
wget https://example.com/file.zip
wget -c <url>
wget -r -np https://site/docs/
ssh

Si connette a un server remoto via Secure Shell. -L crea tunnel per porte locali.

Flag-p-i-L-R-D-N-T
Esempio
ssh user@host
ssh -p 2222 -i ~/.ssh/id_ed25519 user@host
ssh -L 8080:localhost:80 user@host
scp

Copia file tra macchine via SSH.

Flag-r-P-i-p
Esempio
scp file.txt user@host:/tmp/
scp -r dir/ user@host:/var/www/
scp user@host:/etc/conf .
rsync

Sincronizza file e directory in modo efficiente. -avz è la combinazione più usata.

Flag-a-v-z-P--delete--exclude
Esempio
rsync -avz src/ user@host:/dest/
rsync -av --delete --exclude='.git' a/ b/
ss / netstat

Mostra porte in ascolto e connessioni attive. -tulpn è l'uso tipico.

Flag-t-u-l-n-p
Esempio
ss -tulpn
ss -t state established
dig / nslookup / host

Interroga il DNS. dig è più dettagliato, nslookup più semplice, host più conciso.

Flag+short-t@
Esempio
dig google.com
dig +short MX gmail.com
nslookup example.com 8.8.8.8

Compressione

tar

Impacchetta e comprime directory. -czf crea con gzip, -xzf estrae.

Flag-c-x-z-j-J-v-f-t
Esempio
tar -czvf archive.tar.gz folder/
tar -xzvf archive.tar.gz
tar -tf archive.tar.gz
zip / unzip

Compressione zip. unzip -l elenca il contenuto senza estrarre.

Flag-r-q-l-d
Esempio
zip -r out.zip folder/
unzip archive.zip
unzip -l archive.zip
gzip / gunzip

Comprime/decomprime file singoli con gzip. -k mantiene l'originale.

Flag-d-k-9-r
Esempio
gzip file.txt
gzip -d file.txt.gz
gzip -k file.txt
bzip2 / bunzip2

Compressione bzip2, più lenta ma con miglior rapporto rispetto a gzip.

Flag-d-k-9
Esempio
bzip2 file.txt
bunzip2 file.txt.bz2
xz / unxz

Compressione xz, rapporto ancora migliore. -T0 usa tutti i core.

Flag-d-k-9-T
Esempio
xz file.txt
unxz file.txt.xz
xz -T0 file
7z

Formato 7z, alto rapporto di compressione. Supporta password e archive divisi.

Sottocomandiaxl
Flag-p
Esempio
7z a out.7z folder/
7z x archive.7z
7z a -p out.7z secret.txt

Ricerca

find

Cerca file per nome, tipo, dimensione, età, ed esegue azioni con -exec.

Flag-name-type-size-mtime-exec-delete-empty
Esempio
find . -name "*.log"
find / -type f -size +100M
find . -mtime -7
find . -name "*.tmp" -delete
grep

Cerca pattern nei file. -r ricorsivo, -i ignora maiuscole, -E attiva regex.

Flag-r-i-n-v-l-E-c-A-B-C
Esempio
grep -rn "TODO" src/
grep -i error log
grep -E "warn|error" file
awk

Elabora testo colonna per colonna. Linguaggio completo per il parsing di file strutturati.

Esempio
awk '{print $1}' file.txt
awk -F',' '{print $2}' csv
awk '/error/ {count++} END {print count}' log
sed

Modifica stream di testo. -i altera il file sul posto, usato soprattutto per sostituzioni.

Flag-i-e-n-E
Esempio
sed 's/old/new/g' file
sed -i 's/old/new/g' file
sed -n '10,20p' file
locate / which / whereis

Trova binari e file: locate (cache), which (nel PATH), whereis (binario, sorgente, manuale).

Flag-i-l
Esempio
locate nginx.conf
which python3
whereis bash

Redirezione

> (redireziona stdout)

Redireziona stdout su un file, sovrascrivendo il contenuto esistente.

Esempio
echo hello > out.txt
ls -la > files.txt
>> (aggiungi a stdout)

Redireziona stdout su un file, aggiungendo al contenuto esistente.

Esempio
echo "line" >> log.txt
date >> events.log
| (pipe)

Collega lo stdout di un comando allo stdin del successivo, concatenando processi.

Esempio
ls -la | grep .conf
cat file | sort | uniq
2> (redireziona stderr)

Redireziona stderr (fd 2). 2>&1 unisce stderr a stdout. &> fa entrambi in bash.

Esempio
cmd 2> errors.log
cmd > out.log 2>&1
cmd &> all.log
tee

Legge da stdin e scrive su file E su stdout. -a aggiunge invece di sovrascrivere.

Flag-a
Esempio
ls | tee files.txt
echo 'data' | sudo tee /etc/conf
make | tee -a build.log
xargs

Costruisce comandi a partire da stdin. Indispensabile per combinare find o grep con altri comandi.

Flag-n-I-P-0
Esempio
find . -name "*.log" | xargs rm
echo "a b c" | xargs -n 1
ls *.txt | xargs -I {} cp {} backup/

Ambiente

export

Imposta variabili d'ambiente che vengono ereditate dai processi figli.

Esempio
export PATH="$PATH:/opt/bin"
export API_KEY="abc123"
export -p
env / printenv

Elenca tutte le variabili d'ambiente attive. printenv può mostrarne una specifica.

Esempio
env
printenv PATH
env VAR=value command
alias / unalias

Crea scorciatoie per comandi. Da definire in ~/.bashrc o ~/.zshrc per renderle permanenti.

Esempio
alias ll='ls -la'
alias gs='git status'
unalias ll
echo

Stampa testo o variabili su stdout. -e attiva escape come \n e \t.

Flag-n-e
Esempio
echo "Hello $USER"
echo -e "line1\nline2"
echo $PATH
source / .

Carica uno script nella shell corrente (non in una subshell). Utile per .bashrc e venv.

Esempio
source ~/.bashrc
. ~/.zshrc
source venv/bin/activate
history

Mostra la cronologia dei comandi. !! ripete l'ultimo, !N esegue il comando N.

Flag-c-d!
Esempio
history
history | grep ssh
!!
!42

Pacchetti

apt / apt-get

Gestore di pacchetti Debian/Ubuntu. apt è più moderno e amichevole di apt-get.

Sottocomandiupdateupgradeinstallremovepurgesearchshow
Esempio
sudo apt update && sudo apt upgrade
sudo apt install nginx
sudo apt remove --purge package
apt search keyword
yum / dnf

Gestore di pacchetti Red Hat/Fedora/CentOS. dnf è il successore moderno di yum.

Sottocomandiinstallremoveupdatesearchinfolist
Esempio
sudo dnf install nginx
sudo yum update
dnf search keyword
brew

Gestore di pacchetti per macOS e Linux con formule mantenute dalla community.

Sottocomandiinstalluninstallupdateupgradesearchlist
Esempio
brew install wget
brew update && brew upgrade
brew list
brew search node
pacman

Gestore di pacchetti Arch Linux. -Syu aggiorna tutto, -S installa, -R rimuove.

Flag-S-R-Syu-Ss-Q
Esempio
sudo pacman -S nginx
sudo pacman -Syu
pacman -Ss keyword
snap / flatpak

Pacchetti universali con sandbox. Si installano su qualsiasi distribuzione moderna.

Sottocomandiinstallremovelistfind
Esempio
sudo snap install code
flatpak install flathub org.gimp.GIMP
snap list

SSH

ssh-keygen

Genera coppie di chiavi SSH. ed25519 è la raccomandazione attuale (più veloce e sicura di RSA).

Flag-t-b-C-f-N
Esempio
ssh-keygen -t ed25519 -C "john.doe@example.com"
ssh-keygen -t rsa -b 4096
ssh-copy-id

Copia la chiave pubblica nel ~/.ssh/authorized_keys del server remoto.

Flag-i-p
Esempio
ssh-copy-id user@host
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@host
ssh-agent / ssh-add

L'agent SSH mantiene le chiavi decifrate in memoria per non chiedere la passphrase ad ogni connessione.

Flag-l-d-D
Esempio
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
ssh-add -l
sftp

Client SFTP interattivo per trasferire file via SSH.

Esempio
sftp user@host
put file.txt
get remote.zip
ls
bye
~/.ssh/config

File di configurazione SSH per host. Permette alias, identità, porta, jump host.

Esempio
Host myserver
  HostName 1.2.3.4
  User john
  Port 2222
  IdentityFile ~/.ssh/id_ed25519

Disco

df

Mostra spazio usato e disponibile per file system. -h in formato leggibile.

Flag-h-T-i
Esempio
df -h
df -h /
df -i
du

Mostra lo spazio occupato da file e directory. -sh riassunto in formato leggibile.

Flag-h-s-a-c--max-depth
Esempio
du -sh *
du -h --max-depth=1
du -ah . | sort -rh | head -20
mount / umount

Monta un file system in un mount point. umount smonta.

Flag-a-t-o
Esempio
mount
sudo mount /dev/sdb1 /mnt/data
sudo umount /mnt/data
lsblk / fdisk

Elenca dischi e partizioni in formato albero (lsblk) o tabella (fdisk).

Flag-f-l-p
Esempio
lsblk
lsblk -f
sudo fdisk -l
free

Mostra memoria RAM totale, usata, libera e cache. -h in formato leggibile.

Flag-h-m-g-s
Esempio
free -h
free -m
free -h -s 2

Monitoring

htop

Versione migliorata di top con colori, scroll e termina processi con F9.

Flag-u-p
Esempio
htop
htop -u www-data
htop -p 1234,5678
vmstat

Statistiche di memoria virtuale, CPU, IO. Utile per diagnosticare colli di bottiglia.

Esempio
vmstat
vmstat 2 5
iostat

Statistiche di IO disco. Identifica dischi saturati.

Flag-x-c-d
Esempio
iostat
iostat -xz 2
dmesg

Mostra messaggi del kernel. Utile per diagnosticare problemi hardware o di driver.

Flag-T-w-l
Esempio
sudo dmesg | tail
sudo dmesg -T
sudo dmesg -w
systemctl

Controlla servizi systemd: avviare, fermare, vedere lo stato, attivare al boot.

Sottocomandistartstoprestartstatusenabledisablereload
Esempio
sudo systemctl start nginx
sudo systemctl status sshd
sudo systemctl enable docker
journalctl

Log di systemd. -f segue dal vivo, -u filtra per servizio, --since per tempo.

Flag-u-f-n--since-p
Esempio
journalctl -u nginx
journalctl -f
journalctl --since "1 hour ago"
journalctl -p err
uptime / w

uptime mostra da quanto tempo il sistema è acceso e la load average. w elenca utenti collegati e cosa stanno facendo.

Esempio
uptime
w

Avanzato

watch

Ripete un comando periodicamente. -d evidenzia i cambiamenti tra esecuzioni.

Flag-n-d-t
Esempio
watch -n 2 "df -h"
watch -d "ls -l"
watch "ps aux | grep node"
screen

Crea sessioni di terminale persistenti che sopravvivono ai logout. Versione classica.

Flag-S-r-ls-d
Esempio
screen -S work
screen -r work
screen -ls
# Ctrl+A D to detach
tmux

Multiplexer di terminale moderno: più finestre, pannelli e sessioni persistenti.

Sottocomandinewattachlskill-session
Esempio
tmux new -s work
tmux attach -t work
tmux ls
# Ctrl+B D to detach
cron / crontab

Pianificatore di task periodici. crontab -e modifica i job dell'utente corrente.

Flag-e-l-r
Esempio
crontab -e
crontab -l
0 3 * * * /script.sh    # daily at 3am
*/15 * * * * /poll.sh   # every 15 minutes
at

Pianifica un comando per essere eseguito una sola volta in futuro.

Flag-l-r-c
Esempio
echo "/script.sh" | at now + 1 hour
at 14:30 tomorrow
atq
at -r 5

Riferimento

stdin, stdout, stderr

Ogni processo ha tre stream di default identificati da file descriptor. Capire questi stream è la chiave per combinare comandi con pipe e redirezioni.

stdinfd 0

Input standard. Di default proviene dalla tastiera, ma può essere sostituito da un file con < o dallo stdout di un altro comando via pipe.

stdoutfd 1

Output standard. Di default va al terminale. Si redireziona con > (sovrascrivi) o >> (aggiungi).

stderrfd 2

Errori e avvisi. Stream separato perché gli errori non si mescolino con l'output normale. Si redireziona con 2>.

Esempio
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
Permessi rwx

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.

Bersagli
  • uproprietario del file
  • ggruppo del file
  • otutti gli altri
  • atutti (u+g+o)
Bit e valori
  • r = 4 — leggere
  • w = 2 — scrivere
  • x = 1 — eseguire (o entrare nella directory)
Esempi comuni
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
Foreground vs Background

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.

Foreground

Job che sta usando il terminale. Riceve input dalla tastiera e mostra output. Blocca il prompt fino al termine.

Background

Job che gira in parallelo, senza occupare il terminale. Libera il prompt per altri comandi. Si termina con kill o portandolo in fg.

Comandi utili
./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
20 one-liner essenziali

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