Shell Linux
e Macchine Virtuali
Dalle VM alla riga di comando: un percorso pratico
Macchine Virtuali
Cos'è una VM e perché usarla
Cos'è una Macchina Virtuale?
Una VM è un ambiente software che emula un computer fisico completo — CPU, RAM, disco e rete — tutto gestito
tramite software.
Hardware virtuale Come un PC reale... Esempio pratico
CPU virtuali ...ma tutto è software VirtualBox su Windows
RAM virtuale Risiede dentro un'altra macchina ospita Ubuntu Linux
Disco rigido virtuale Isolato dal sistema host come se fosse hardware reale
Scheda di rete virtuale
Perché usare le Macchine Virtuali?
Isolamento e Sicurezza Efficienza delle Risorse
Testa software o configurazioni rischiose senza mettere a rischio il Un solo server fisico ospita decine di VM con SO diversi.
sistema host. Se qualcosa va storto, il PC principale rimane intatto. Fondamentale nei data center per ottimizzare spazio ed energia.
Portabilità Apprendimento
Una VM si copia, sposta o clona facilmente. Crei una configurazione Sperimenta con sistemi operativi diversi senza hardware dedicato o
complessa una volta sola e la duplichi infinite volte. partizionare il disco.
VM nel Mondo Reale
Cloud Computing
AWS, Azure, Google Cloud: quando 'noleggi' un server nel cloud stai usando una VM. La virtualizzazione è la base dell'intera
industria cloud.
Data Center Aziendali
Prima ogni applicazione richiedeva un server fisico dedicato. Oggi centinaia di server fisici sono consolidati in poche macchine con
decine di VM ciascuna.
Cybersecurity
I ricercatori analizzano malware in VM isolate (sandbox). Le aziende testano la resilienza dei sistemi in ambienti sicuri e controllati.
Installazione: VirtualBox + Ubuntu
1 VirtualBox
Scarica 2 Ubuntu LTS
Scarica 3 la VM
Crea
[Link] → Downloads → versione [Link]/download/desktop → versione RAM: 2-4 GB • CPU: 2+ • Disco: 30-40 GB
per il tuo OS (~100-150 MB) LTS più recente (es. Ubuntu 24.04) Tipo: Linux / Ubuntu 64-bit
Opzionale: scarica anche l'Extension Pack File .iso da ~4-5 GB
4 Ubuntu
Installa 5 Additions
Guest
Avvia la VM con la ISO → segui il wizard Dispositivi → Inserisci immagine Guest
Utente, password, fuso orario Additions
Migliorano risoluzione, clipboard condivisa,
drag&drop
Introduzione alla Shell Linux
Cos'è, come funziona, perché usarla
Cos'è la Shell?
Utente Shell Kernel
Interpreta i comandi Gestisce le risorse
Analizza il testo digitato, verifica la correttezza e passa al kernel Mette a disposizione file, directory, programmi e dispositivi
l'operazione da eseguire. hardware del sistema.
Ambiente di lavoro Linguaggio di programmazione
Mantiene directory corrente, variabili d'ambiente e cronologia dei
Variabili, cicli for/while, condizioni if-else, funzioni, script complessi.
comandi.
Manuale e help
Iniziamo!
Ricorda che nella maggior parte dei sistemi Unix sono disponibile le pagine di manuale per molti dei comandi. Per
consultare la pagina di manuale di un comando, per esempio ls, è sufficiente invocare il comando man:
$ man ls
In particolare il comando man stesso ha un manuale, invocabile con man man.
Inoltre, ogni comando ha un suo help, consultabile con il comando:
$ comando --help
Apriamo il terminale
Ctrl + Alt + T per aprire il terminale
Il Prompt e le Regole Fondamentali
studente@ubuntu-vm:~$
← nome_utente @ nome_computer : directory $ comando
Case Sensitive File nascosti
Aa .
I file che iniziano con . non appaiono con ls
ls ✓ — LS ✗ — Ls ✗
Es: .bashrc .ssh .gitignore
[Link] ≠ [Link] ≠ [Link]
Usare ls -a per vederli
Cancellazione definitiva Sistema di aiuto
rm ?
rm elimina PERMANENTEMENTE il file comando --help → aiuto rapido
Non esiste il cestino da terminale! man comando → manuale completo
Usare -i per chiedere conferma (uscire con q)
Sintassi dei Comandi
comando <opzioni> <argomenti>
date cd mydir
Nessun argomento → mostra data e ora Un argomento → cambia directory
wc -w file1 ls -als
Opzione + argomento → conta parole nel file Più opzioni combinate → lista dettagliata
cat file1 file2 file3 cd newdir ; ls -l
Più argomenti → concatena file Più comandi separati da ;
Funzioni Utili della Shell
Tab Completion Cronologia (History) Alias
Premi Tab per completare La shell ricorda tutti i comandi digitati. Scorciatoie per comandi lunghi o
automaticamente complessi.
nomi di file e comandi. history → mostra la lista
↑/↓ → naviga i comandi alias ll='ls -la'
cp un[TAB] → cp un-file-con-nome-lungo Ctrl+R → ricerca nella history
!! → ripete l'ultimo comando Ora digiti ll invece di ls -la.
Se ci sono più possibilità, premi Tab !n → ripete il comando n Si inseriscono in ~/.bashrc
due volte per vedere la lista. per renderli permanenti.
Il File System Linux
Struttura gerarchica e organizzazione
Struttura Gerarchica del File System
Tutto in Unix è un file. Le directory contengono altri file/directory formando un albero con radice /
bin dev etc home tmp usr var
user1 user2 bin lib
/bin Comandi essenziali del sistema /etc File di configurazione
/home Directory personali degli utenti /usr Programmi non essenziali ma utili
/var File di dimensione variabile (log...) /dev Dispositivi di input/output
Pathname e Navigazione
Pathname ASSOLUTO Pathname RELATIVO
Parte dalla radice / Parte dalla directory corrente
Valido da qualsiasi posizione . = directory corrente .. = directory padre
/usr/local/doc/training training/sample
/home/rossi ../bin
/bin/ls ~/projects/report
/etc/passwd ../../etc
Esempio — Spostarsi da /home/rossi a /home/bianchi:
cd ../bianchi → percorso relativo cd /home/bianchi → percorso assoluto
Comandi sul File System
Navigazione, file, directory, visualizzazione
Navigare e Visualizzare
pwd cd [dir]
$ pwd cd /bin
/home/rossi cd ..
Mostra il percorso assoluto della directory Cambia directory. Senza argomenti torna cd ~
corrente. alla home.
ls [-alsFR] [dir] mkdir <dir>
ls -l mkdir reports
ls -a mkdir dir1 dir2
Elenca il contenuto della directory. ls -lah Crea una o più directory.
rmdir <dir> whoami
rmdir old_dir $ whoami
studente
Rimuove una directory solo se vuota. Mostra il nome utente corrente.
Gestione di File e Directory
touch <file> cp [-ir] <src> <dst>
Crea un file vuoto (o aggiorna il timestamp touch [Link] -i chiede conferma prima di sovrascrivere. cp file1 file2
se già esiste). -r copia ricorsivamente le directory. cp -r dir1 dir2
mv [-i] <src> <dst> rm [-ir] <file>
Sposta o rinomina file/directory. mv file1 dir/file2 Rimuove file. -r rimuove ricorsivamente. rm [Link]
L'originale scompare. mv [Link] [Link] Attenzione! Cancellazione DEFINITIVA! rm -r old_dir
rm -i *
cat [file...] echo [-n] <str>
Visualizza/concatena file sullo schermo. cat [Link] Stampa una stringa sullo schermo. echo Ciao!
cat f1 f2 f3 echo $HOME
Manipolazione di file
sort [-nr] <file> grep <pattern> <file>
Ordina le righe di un file. Di default sort [Link] Permette di individuare quali righe di un file grep Paolo [Link]
l’ordinamento è lessicografico in ordine contengono un certo pattern (es un parola).
crescente -v stampa solo le righe che non contengono
-n Effettua un ordinamento numerico il pattern
invece che lessicografico.
-r Inverte la direzione dell’ordinamento
Redirezione e pipe
sort [-nr] <file>
Ogni comando nella shell inizia con tre file aperti dai quali è possibile leggere e scrive:
• standard input - Da dove viene letto l’input
• standard output - Dove viene inviato l’output
• standard error - Dove vengono inviati i messaggi di errore.
Lo standard input viene solitamente “preso” da tastiera, mentre lo standard output e lo standard error stampano su terminale. È però possibile redirigere
lo standard output su file usando > dopo un comando. Per esempio:
ls-l > [Link]
reindirizza tutto quando viene mandato in standard output da ls-l nel file [Link] (sovrascrivendo il contenuto precedente del file).
La redirezione può anche aggiungere contenuto ad un file se effettuata con >> invece di >.
È anche possibile collegare lo standard output di un comando allo standard input di un altro comando tramite una pipe |. In questo modo è possibile
comporre comandi in sequenza. Per esempio
head -n 20 [Link] | grep Ciao
passa come input a grep Ciao l’output di head-n 10 [Link], quindi il risultato finale di questo comando sarà di produrre in output le righe tra le prime 20
del file [Link] che contengono la sequenza di caratteri Ciao.
Visualizzare il Contenuto dei File
less <filename> head [-n] <file>
Visualizza il file una schermata alla volta. Permette di tornare a Mostra le prime 10 righe di un file.
pagine precedenti. -n mostra le prime n righe.
↑ / ↓ Scorre su/giù di una riga head -5 [Link]
/<pattern> Cerca in avanti
?<pattern> Cerca indietro
tail [-n] <file>
<n>g Va alla riga n
Mostra le ultime 10 righe di un file.
g / G Inizio / fine file -n mostra le ultime n righe.
q Esce e torna al prompt tail -20 [Link]
h Aiuto in linea
Wildcards (Metacaratteri)
Qualsiasi stringa Un singolo carattere
* ?
ls *.txt ls data?
cp data* ~/backup Sostituisce esattamente un carattere rm file?.log
Sostituisce zero o più caratteri qualsiasi.
qualsiasi.
Carattere nel set NON nel set
[set] [!set]
ls [abc]*.c echo [!id]*
Qualsiasi carattere nella lista o ls [a-z]*.txt Qualsiasi carattere che NON è nella
nell'intervallo. lista.
La shell espande i metacaratteri PRIMA di passare gli argomenti al comando (espansione di percorso).
Permessi e Proprietà dei File
chmod, chown, chgrp, umask
Permessi di Accesso
-rw-r--r-- 1 rossi users 1234 Mar 9 [Link]
Ottale → rwx
- rw- r-- r--
0=---
Tipo Owner Group Others
file permessi permessi permessi 1=--x
2=-w-
r (read=4) Lettura del file / elenco della directory
3=-wx
w (write=2) Modifica del file / creazione file in directory
4=r--
x (execute=1) Esecuzione del file / accesso alla directory 5=r-x
- Permesso non concesso 6=rw-
7=rwx
Cambiare i Permessi: chmod
chmod <triads> <filename>* oppure chmod <ottale> <filename>
Forma simbolica: who action permission Esempi
who action permission chmod a+r file.c
chmod o-r file.c
u = user + = aggiunge r = read
chmod og+rx prog*
g = group - = rimuove w = write
chmod g=rw rep*
o = other = = assegna x = execute chmod 640 file → rw-r-----
chmod 754 file → rwxr-xr--
a = all
chmod 664 file → rw-rw-r--
Opzione -R: cambia i permessi ricorsivamente su tutta una directory e le sue sottodirectory.
Proprietario, Gruppo e umask
chown <new_owner> <file> chgrp <new_group> <file>
Cambia il gruppo del file.
Cambia il proprietario del file.
Il proprietario può cambiarlo in uno qualsiasi dei gruppi a cui
Richiede privilegi di super-user (root) nella maggior parte dei sistemi.
appartiene.
chown bianchi [Link] chgrp staff [Link]
umask <mask> — Permessi di default
Default del sistema: 666 per file, 777 per directory. umask sottrae la maschera da questi valori.
umask 077 → file=600 (rw-------) dir=700 (rwx------)
umask 022 → file=644 (rw-r--r--) dir=755 (rwxr-xr-x)
umask 002 → file=664 (rw-rw-r--) dir=775 (rwxrwxr-x)
Riepilogo
01 02 03 04 05
Macchine Virtuali Shell Linux File System Comandi Permessi
Cos'è una VM, VirtualBox, Prompt, sintassi, alias, Struttura ad albero, ls, cd, cp, mv, rm, cat, chmod, chown, chgrp,
Ubuntu history pathname less... umask
man <comando> | comando --help | Ctrl+Alt+T per aprire il terminale