Nessuna voce trovata. Prova con meno parole.
Shell / Unix
Navigare, spostare file, cercare, gestire i processi. Uguale su macOS (Terminale) e sul server Linux, salvo dove segnalato.
Navigazione tra cartelle
pwd # percorso corrente
ls # elenca i file
ls -l # elenco dettagliato
ls -la # include anche i file nascosti
ls -lah # + dimensioni leggibili (KB, MB)
cd nome # entra (percorso relativo, dentro la cartella corrente)
cd /percorso/assoluto # percorso assoluto: parte da / e funziona da ovunque
cd .. # cartella superiore
cd ~ # home (server da root: /root · ~ su Mac: ⌥ Option + 5)
cd - # torna all'ultima cartella visitata
Assoluto vs relativo: il percorso assoluto inizia con / e funziona da qualsiasi posizione; quello relativo (senza /) parte dalla cartella corrente.
Creare e gestire file e cartelle
mkdir nome # crea una cartella
mkdir -p a/b/c # crea l'intera catena di cartelle
touch file # crea un file vuoto
cp origine destinazione # copia un file
cp -rp cartella/ backup/ # copia una cartella (-r) con date e permessi (-p)
mv origine destinazione # sposta o rinomina
Eliminare file e cartelle
rm file # elimina un file
rm -r cartella # elimina una cartella e il suo contenuto
rm -rf cartella # come sopra, senza chiedere conferma
Attenzione: rm non ha cestino e non è reversibile. Con -rf non c'è nessuna conferma: controlla due volte il percorso. Mai rm -rf / né rm -rf $VAR/ se la variabile potrebbe essere vuota.
Backup datato prima di modificare un file
cp -p file.txt file-backup-$(date +%Y%m%d).txt
ls -la file-backup-*
$(date +%Y%m%d) inserisce la data di oggi (es. 20260829), così il nome dice sempre quando è stato fatto il backup. Il secondo comando elenca tutti i backup accumulati.
Vedere il contenuto di un file
cat file # mostra tutto il contenuto
less file # sfoglia i file lunghi (q per uscire)
head file # prime 10 righe
tail file # ultime 10 righe
tail -f file # segue il file in tempo reale (utile per i log)
Cercare file e testo
find . -name "*.html" # cerca file per nome, dalla cartella corrente
grep "testo" file # cerca del testo dentro un file
grep -rn "testo" cartella # ricorsivo (-r), col numero di riga (-n)
Cercare in tutto il server:
find / -iname "*.html" -not -path "/proc/*" 2>/dev/null
-iname cerca per nome ignorando le maiuscole, -not -path esclude le cartelle di sistema rumorose, 2>/dev/null nasconde gli errori di "permesso negato".
Permessi e amministratore
chmod +x script.sh # rende un file eseguibile
chmod 644 file # lettura per tutti, scrittura solo al proprietario
chown utente:gruppo file # cambia il proprietario di un file
sudo comando # esegue un comando come amministratore (sul server)
Pipe e redirezione
comando > file # scrive l'output in un file (lo sovrascrive)
comando >> file # aggiunge in fondo al file
comando 2>/dev/null # butta via i messaggi di errore
comando1 | comando2 # passa l'output del primo al secondo
ls -la | grep ".html" # esempio: elenca i file e tiene solo i .html
Archivi compressi
tar -czf sito.tar.gz cartella/ # crea un archivio .tar.gz
tar -xzf sito.tar.gz # lo estrae
zip -r sito.zip cartella/ # crea un .zip
unzip sito.zip # lo estrae
Processi e risorse
top # processi attivi (q per uscire)
ps aux # elenco completo dei processi
kill PID # termina un processo dato il suo numero (PID)
df -h # spazio libero su disco
free -h # memoria RAM disponibile (Linux)
du -sh * # dimensione di ogni cartella qui dentro
whoami # utente corrente
Fermare un comando in esecuzione
Ctrl+C
Ferma un programma che resta attivo occupando il terminale (streamlit run, un server, tail -f). Il terminale torna al prompt.
Eseguire uno script
python3 file.py # esegue uno script Python
python3 /percorso/completo/file.py
chmod +x script.sh # rende eseguibile uno script
./script.sh # lo esegue dalla cartella corrente
Editor da terminale
nano file # editor semplice: Ctrl+O salva, Ctrl+X esce
Utilità e scorciatoie
clear # pulisce lo schermo
history # cronologia dei comandi
which comando # dove si trova un comando
open . # apre la cartella corrente nel Finder (solo macOS)
open file # apre un file con l'app predefinita (solo macOS)
Git
Tenere traccia delle modifiche al codice e tornare indietro quando serve. I comandi si lanciano dentro la cartella del progetto.
Preparare un progetto
git init # trasforma la cartella corrente in un repository
git clone URL # scarica un repository esistente
git config --global user.name "Nome Cognome"
git config --global user.email "[email protected]"
Vedere lo stato
git status # cosa è cambiato, cosa è pronto per il commit
git status -s # versione compatta
git diff # differenze non ancora aggiunte
git diff --staged # differenze già aggiunte con git add
Salvare le modifiche (commit)
git add file.html # aggiunge un file al prossimo commit
git add . # aggiunge tutte le modifiche
git add -p # sceglie pezzo per pezzo (y / n / s / q)
git commit -m "Messaggio chiaro"
git commit --amend # corregge l'ultimo commit (solo se non hai fatto push)
Un messaggio utile dice cosa cambia e perché, non "modifiche varie".
Cronologia
git log --oneline --graph --all -20
git show HASH # dettaglio di un commit
Rami (branch)
git switch -c bozza # crea un ramo nuovo e ci si sposta
git switch main # torna al ramo principale
git branch # elenca i rami
git merge bozza # fonde "bozza" nel ramo corrente
Sincronizzare con GitHub
git remote -v # repository remoti collegati
git push # invia i commit locali
git pull # scarica e integra le modifiche remote
git fetch # scarica senza integrare
Mettere da parte le modifiche (stash)
git stash # nasconde le modifiche non committate
git stash pop # le rimette
git stash list
Utile per cambiare ramo al volo senza committare a metà.
Annullare le modifiche a un file
git restore file.html # riporta il file all'ultimo commit
git restore --staged file.html # toglie dall'add, tiene le modifiche
Attenzione: senza --staged le modifiche non committate vanno perse.
Riportare tutto all'ultimo commit
git reset --hard # scarta OGNI modifica non committata
git reset --hard HEAD~1 # elimina anche l'ultimo commit
Attenzione: non c'è recupero. Se hai dei dubbi, prima git stash.
Ho fatto un casino: torno alla versione su GitHub
git fetch origin
git reset --hard origin/main
Attenzione: butta via tutte le modifiche locali non inviate. Per salvarne una parte, prima git stash oppure git switch -c salvataggio.
SSH e server
Lavorare sul server remoto via SSH: collegarsi, spostare file, gestire i servizi e i container.
Collegarsi
ssh root@IP-DEL-SERVER
ssh [email protected]
ssh-keygen -t ed25519 # crea una chiave SSH (una volta sola)
ssh-copy-id utente@server # installa la chiave sul server
Copiare file da e verso il server
scp file.html root@server:/var/www/sito/html/
scp root@server:/var/log/nginx/error.log .
rsync -avz --dry-run ./html/ root@server:/var/www/sito/html/
rsync -avz --delete ./html/ root@server:/var/www/sito/html/
rsync trasferisce solo le differenze. Prova sempre prima con --dry-run; --delete cancella sul server i file spariti in locale.
Gestire i servizi
systemctl status nginx
systemctl restart nginx
systemctl reload nginx # ricarica la config senza interrompere le connessioni
journalctl -u nginx -n 50 --no-pager
journalctl -u nginx -f # log in tempo reale
Ricaricare nginx in sicurezza
nginx -t && systemctl reload nginx
nginx -t controlla la configurazione; il && ricarica solo se il test passa.
Docker
docker ps # container attivi in questo momento
docker compose up -d # avvia i servizi in background
docker compose down # ferma e rimuove
docker compose logs -f nome # segue i log di un servizio
docker compose exec nome sh # apre una shell dentro il container
Python — strumenti
Ambienti isolati, librerie, avvio e controllo degli script. La sintassi del linguaggio sta nella pagina basi.
Ambiente virtuale (venv)
python3 -m venv venv # crea un ambiente virtuale nella cartella "venv"
source venv/bin/activate # attiva (il prompt mostra "(venv)")
deactivate # disattiva
Il venv tiene separate le librerie di ogni progetto, evitando conflitti.
Installare librerie (pip)
pip install nomelibreria # installa una libreria
pip install libreria1 libreria2 # più librerie insieme
pip install -r requirements.txt # tutte quelle elencate in un file
pip list # librerie installate nel venv attivo
pip freeze > requirements.txt # salva l'elenco esatto delle versioni
Importante: attiva sempre il venv (source venv/bin/activate) prima di installare, altrimenti le librerie finiscono nel sistema globale.
Verificare se una libreria è installata
pip show nomelibreria
Mostra versione e dettagli se è installata nel venv attivo. Se dice Package(s) not found, va installata con pip install.
Eseguire uno script
python nomefile.py # con il venv attivo
python3 nomefile.py # esplicito su Python 3
Controllare la sintassi senza eseguire
python -m py_compile nomefile.py
Controlla parentesi, indentazione e due punti senza eseguire davvero il file. Nessun output = tutto corretto. Utile prima di lanciare script lunghi o dopo modifiche importanti.
Avviare una dashboard Streamlit
streamlit run nomefile.py --server.port 8501 --server.address 0.0.0.0
--server.port è la porta (default 8501); --server.address 0.0.0.0 la rende raggiungibile da fuori il server, non solo da dentro. Poi si apre dal browser su http://IP-DEL-SERVER:8501. Ctrl+C per fermarla.