Additions:
Per questa esercitazione, si faccia riferimento alla appendici A, B, e C della [[https://docs.google.com/a/dis.uniroma1.it/document/d/1t04FOA9a3FHy7GHF5jQBS-py5o4ITUzXTNyRaFawkoA dispensa del corso]].
Deletions:
Per questa esercitazione, si faccia riferimento all'Appendice A, l'Appendice B e l'Appendice C della [[https://docs.google.com/a/dis.uniroma1.it/document/d/1t04FOA9a3FHy7GHF5jQBS-py5o4ITUzXTNyRaFawkoA dispensa del corso]].
Additions:
==Preliminari==
Deletions:
===Nozioni preliminari===
===Esercitazione===
Additions:
Per questa esercitazione, si faccia riferimento all'Appendice A, l'Appendice B e l'Appendice C della [[https://docs.google.com/a/dis.uniroma1.it/document/d/1t04FOA9a3FHy7GHF5jQBS-py5o4ITUzXTNyRaFawkoA dispensa del corso]].
Deletions:
==File e directory==
Un **file** (archivio) è una sorgente (o un deposito) di informazioni accessibili in lettura e/o in scrittura a un programma. Normalmente è costituito da una sequenza di byte memorizzati in forma permanente su disco.
I file sono organizzati in **directory**, che sono dei contenitori che possono contenere file e altre directory. Il **file system** denota l'insieme di funzionalità e schemi organizzativi con cui un sistema di calcolo si interfaccia con i dispositivi di archiviazione, consentendone la gestisce dei dati.
File e directory hanno un **nome** che li identifica e altre **proprietà**, fra cui un elenco di **permessi** che specificano quali utenti abbiano diritto di leggerli/scriverli.
I nomi dei file hanno spesso delle **estensioni** della forma ##.estensione##, che descrivono la natura del loro contenuto. Ad esempio, l'estensione ##.c## denota file di testo scritti in C (es. ##hello.c##), l'estensione ##.jpg## indica file binari che contengono immagini (es. [[http://1.bp.blogspot.com/_Nx4_AyFzPw0/TMs0JONbGHI/AAAAAAAACoI/QoY1HRCeyqs/s320/linguaccia.jpg foto-montagna.jpg]]), ecc.
La struttura delle directory è tipicamente ad albero: la **directory radice**, denotata da ##/##, contiene tutti i dati memorizzati in forma permanente nel sistema sotto forma di file e sottodirectory.
In questo corso useremo come caso di studio i sistemi [[http://it.wikipedia.org/wiki/Unix UNIX]] e [[http://it.wikipedia.org/wiki/Unix-like UNIX-like]] (Linux, ""MacOS"" X, ecc.), denotati con l'abbreviazione ##*nix##.
L'organizzazione tipica delle directory di un sistema *nix, chiamata [[http://it.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Filesystem Hierarchy Standard]] (FHS), è la seguente (semplificata):
{{image url="/SC/archive/upload_images_linux_directory_structure.png" title="Filesystem Hierarchy Standard (FHS)" alt="Filesystem Hierarchy Standard"}}
Ogni directory, tranne la directory radice ha una **directory genitore**. Se una directory è contenuta in un'altra, allora è una **directory figlia**. Nell'esempio sopra, ##tom## e ##other## sono figlie di ##home##, mentre ##home## è genitore di ##tom## e ##other##.
Ogni file o directory è identificato da un **percorso** (path), che ne identifica la posizione nella struttura delle directory. Un percorso può essere assoluto o relativo:
~- **Percorso assoluto**: elenca tutte le directory che bisogna attraversare per arrivare al punto desiderato a partire dalla directory radice ##/##. Esempio: ##/home/anna/Scrivania/foto-montagna.jpg## è il percorso assoluto di un file chiamato ##foto-montagna.jpg## posizionato nella directory ##Scrivania## localizzata nella home directory dell'utente "anna".
~- **Percorso relativo**: descrive la posizione relativa di una directory rispetto ad un'altra presa come riferimento. Esempio: il percorso relativo del file ##/home/anna/Scrivania/foto-montagna.jpg## rispetto alla directory ##/home## è: ##anna/Scrivania/foto-montagna.jpg##.
Ci sono due casi particolari:
~- ##..## è un percorso relativo che denota la directory genitore. Ad esempio, il percorso relativo ##../Documenti## può essere letto come: sali alla directory genitore e poi entra nella directory figlia ##Documenti##. Relativamente a ##/home/anna/Scrivania##, ##../Documenti## denota ##/home/anna/Documenti##.
~- ##.## è un percorso relativo che denota la directory stessa. Ad esempio, il percorso ##./hello## denota il file chiamato ##hello## nella directory di riferimento.
==Shell dei comandi==
Una **shell** è un programma che consente l'immissione in forma testuale di comandi che devono essere eseguiti dal sistema di calcolo, realizzando quella che viene chiamata **interfaccia a riga di comando** (in inglese: //command-line interface//, o CLI). In questo corso useremo come shell il programma ##bash##.
Aprendo una finestra di terminale, si attiva una shell che mostra la **riga di comando**: nella shell bash la riga di comando è normalmente indicata dal simbolo ##$## seguito dal cursore ▊. Lo scopo del simbolo ##$## è quello di avvisare l'utente che la shell è pronta a ricevere comandi. Il simbolo ##$## è normalmente preceduto da informazioni sull'utente che sta lavorando, sul nome del computer e sulla directory corrente.
Ad esempio, in aula 15 la riga dei comandi appare come:
%%(bash)
studente@c1565:~$
Dove ##studente## è il nome dell'utente autenticato, ##c1565## è il nome del computer e ##~## è la directory corrente (home dell'utente).
Come osservato, in ogni istante la shell è posizionata in una **directory corrente**. All'avvio del terminale, la directory corrente è normalmente la directory ##home## dell'utente con cui ci si è autenticati, indicata dal simbolo ##~##. La directory home raccoglie tutti i file e le impostazioni dell'utente.
Ogni **comando** ha la forma: ##nome-comando parametri##. Per far **eseguire un comando** alla shell, lo si digita nel terminale e poi si preme il tasto Invio (Return) ⏎.
Vi sono due tipi di comandi:
~- **Comandi esterni**: ##nome-comando## è il nome di un file eseguibile. L'esecuzione del comando lancia un nuovo processo basato sull'eseguibile indicato;
~- **Comandi interni** (built-in): ##nome-comando## è un comando eseguito direttamente dalla shell e non provoca l'esecuzione di nuovi processi.
Segue un elenco dei comandi interni ed esterni più comunemente usati.
Comando
Tipo
Descrizione
pwd
interno
Visualizza per il percorso assoluto della directory corrente.
cd
interno
Serve per muoversi tra le directory.
- cd nome-directory: posiziona la shell nella directory specificata dal percorso (assoluto o relativo) nome-directory
Esempio 1:
cd /home/studente
posiziona la shell nella directory /home/studente.
Esempio 2:
cd ..
posiziona la shell nella directory genitore di quella corrente.
Esempio 3:
cd ../Scrivania
posiziona la shell nella directory Scrivania contenuta nella genitore di quella corrente.
- cd: posiziona la shell nella home directory dell'utente corrente
ls
esterno
Elenca il contenuto di una directory.
touch
esterno
Crea un file vuoto o ne aggiorna la data di modifica se esiste già.
mv
esterno
Rinomina o sposta un file o una directory.
- mv sorgente destinazione: rinomina il file o la directory sorgente con il nuovo nome destinazione, purché non esista già una directory con il nome destinazione.
Esempio 1:
mv hello.c hello2.c
rinomina il file hello.c nella directory corrente con il nuovo nome hello2.c.
Esempio 2:
mv pippo pluto
rinomina la directory pippo con il nuovo nome pluto, assumendo che non esista già nella directory corrente una directory chiamata pluto.
- mv sorgente directory: sposta il file o la directory sorgente nella directory directory.
Esempio 1:
mv hello.c pippo
sposta il file hello.c nella directory pippo (assumendo che hello.c che pippo sono nella directory corrente).
Esempio 2:
mv pluto pippo
sposta la directory pluto nella directory pippo (assumendo che pluto che pippo sono nella directory corrente).
mkdir
esterno
Crea una nuova directory vuota.
rmdir
esterno
Elimina una directory, purché sia vuota.
rm
esterno
Elimina un file o una directory e tutto il suo contenuto di file e sottodirectory.
cp
esterno
Copia un file o una directory e tutto il suo contenuto di file e sottodirectory.
- cp file nuovo-file: copia il file file creandone uno nuovo chiamato nuovo-file.
Esempio 1:
cp hello.c hello-copia.c
copia il file hello.c creandone uno nuovo chiamato hello-copia.c.
Esempio 2:
cp /home/studente/Scrivania/hello.c ../hello-copia.c
copia il file hello.c dalla directory /home/studente/Scrivania nella directory genitore di quella corrente con il nome hello-copia.c.
- cp -R directory nuova-directory: copia la directory directory e tutto il suo contenuto di file e sottocartelle creandone una nuova dal nome nuova-directory.
Esempio 1:
cp -R pippo pluto
copia la directory pippo e tutto il suo contenuto di file e sottocartelle creandone una nuova chiamata pluto.
Esempio 2:
cp -R /home/studente/Scrivania/pippo /home/studente/Scrivania/pluto
copia la directory pippo e tutto il suo contenuto creandone una nuova chiamata pluto nella directory /home/studente/Scrivania.
- cp file directory-esistente: copia il file file nella directory directory-esistente.
Esempio 1:
cp hello.c pippo
copia il file hello.c creandone una copia nella directory (esistente) pippo.
Esempio 2:
cp /home/studente/Scrivania/hello.c .
copia il file hello.c dalla directory /home/studente/Scrivania nella directory corrente.
- cp -R directory directory-esistente: copia la directory directory e tutto il suo contenuto di file e sottocartelle nella directory esistente directory-esistente.
Esempio 1:
cp -R pippo pluto
copia la directory pippo e tutto il suo contenuto di file e sottocartelle nella directory esistente pluto.
Esempio 2:
cp -R /home/studente/Scrivania/pippo .
copia la directory pippo e tutto il suo contenuto dalla directory /home/studente/Scrivania nella directory corrente.
- cp -R directory/ directory-esistente: copia il contenuto della directory directory nella directory esistente directory-esistente.
Esempio 1:
cp -R pippo/ pluto
copia il contenuto della directory pippo nella directory esistente pluto.
Esempio 2:
cp -R /home/studente/Scrivania/pippo/ .
copia il contenuto della directory /home/studente/Scrivania/pippo nella directory corrente.
geany
esterno
Lancia l'editor di testo geany.
- geany &: apre l'editor di testo geany.
- geany file &: apre il file di testo file nell'editor di testo geany.
Esempio:
geany hello.c &
apre il file hello.c usando l'editor di testo geany.
cat
esterno
Invia il contenuto di un file sul canale di output standard (di default è il terminale).
- cat file: invia il contenuto del file file sul canale di output standard (di default è il terminale).
less
esterno
Visualizza nel terminale il contenuto di un file, consentendone di scorrere il contenuto con le frecce.
- less file: visualizza il contenuto del file file nel terminale (premere q per uscire).
man
esterno
Visualizza nel terminale la documentazione di un comando esterno.
- man comando-esterno: visualizza nel terminale la documentazione del comando esterno comando-esterno.
Esempio 1:
man cp
visualizza nel terminale la documentazione del comando cp.
Esempio 2:
man man
visualizza nel terminale la documentazione del comando man.
No differences.
Additions:
==Questionario==
Prima di iniziare l'esercitazione, si prega di riempire il [[https://docs.google.com/a/dis.uniroma1.it/forms/d/1LF9xysJd5n3LV2UzMcv3nvmFX3sXe18_KIHSOcYxqDM/viewform questionario anonimo]] sul primo anno del corso di laurea in Ingegneria Informatica e Automatica.
Additions:
In questo corso useremo come caso di studio i sistemi [[http://it.wikipedia.org/wiki/Unix UNIX]] e [[http://it.wikipedia.org/wiki/Unix-like UNIX-like]] (Linux, ""MacOS"" X, ecc.), denotati con l'abbreviazione ##*nix##.
Deletions:
In questo corso useremo come caso di studio i sistemi [[http://it.wikipedia.org/wiki/Unix UNIX]] e [[http://it.wikipedia.org/wiki/Unix-like UNIX-like]] (Linux, ""MacOS"" X), denotati con l'abbreviazione ##*nix##.
Deletions:
==Questionario==
Prima di iniziare l'esercitazione, si prega di riempire il [[https://docs.google.com/a/dis.uniroma1.it/forms/d/1LF9xysJd5n3LV2UzMcv3nvmFX3sXe18_KIHSOcYxqDM/viewform questionario anonimo]] sul primo anno del corso di laurea in Ingegneria Informatica e Automatica.
Additions:
Ogni **comando** ha la forma: ##nome-comando parametri##. Per far **eseguire un comando** alla shell, lo si digita nel terminale e poi si preme il tasto Invio (Return) ⏎.
Deletions:
Ogni **comando** ha la forma: ##nome-comando parametri##. Per far eseguire un comando alla shell, lo si digita nel terminale e si preme il tasto Invio (Return) ⏎.
Additions:
Ogni **comando** ha la forma: ##nome-comando parametri##. Per far eseguire un comando alla shell, lo si digita nel terminale e si preme il tasto Invio (Return) ⏎.
Deletions:
Ogni comando ha la forma: ##nome-comando parametri##. Per far eseguire un comando alla shell, lo si digita nel terminale e si preme il tasto Invio (Return) ⏎.
Additions:
Aprendo una finestra di terminale, si attiva una shell che mostra la **riga di comando**: nella shell bash la riga di comando è normalmente indicata dal simbolo ##$## seguito dal cursore ▊. Lo scopo del simbolo ##$## è quello di avvisare l'utente che la shell è pronta a ricevere comandi. Il simbolo ##$## è normalmente preceduto da informazioni sull'utente che sta lavorando, sul nome del computer e sulla directory corrente.
Deletions:
Aprendo una finestra di terminale, si attiva una shell che mostra la **riga di comando**: nella shell bash la riga di comando è normalmente indicata dal simbolo ##$## seguito dal cursore ▊. Lo scopo del simbolo ##$## è quello di avvisare l'utente che la shell è pronta a ricevere comandi. Il simbolo ##$## è spesso preceduto da informazioni sull'utente che sta lavorando, sul nome del computer e sulla directory corrente.
Additions:
La struttura delle directory è tipicamente ad albero: la **directory radice**, denotata da ##/##, contiene tutti i dati memorizzati in forma permanente nel sistema sotto forma di file e sottodirectory.
Deletions:
La struttura delle directory è normalmente alberiforme: la **directory radice**, denotata da ##/##, contiene tutti i dati memorizzati in forma permanente nel sistema sotto forma di file e sottodirectory.
Additions:
I nomi dei file hanno spesso delle **estensioni** della forma ##.estensione##, che descrivono la natura del loro contenuto. Ad esempio, l'estensione ##.c## denota file di testo scritti in C (es. ##hello.c##), l'estensione ##.jpg## indica file binari che contengono immagini (es. [[http://1.bp.blogspot.com/_Nx4_AyFzPw0/TMs0JONbGHI/AAAAAAAACoI/QoY1HRCeyqs/s320/linguaccia.jpg foto-montagna.jpg]]), ecc.
Deletions:
I nomi dei file hanno solitamente delle **estensioni** della forma ##.estensione##, che descrivono la natura del loro contenuto. Ad esempio, l'estensione ##.c## denota file di testo scritti in C (es. ##hello.c##), l'estensione ##.jpg## indica file binari che contengono immagini (es. [[http://1.bp.blogspot.com/_Nx4_AyFzPw0/TMs0JONbGHI/AAAAAAAACoI/QoY1HRCeyqs/s320/linguaccia.jpg foto-montagna.jpg]]), ecc.
Additions:
I file sono organizzati in **directory**, che sono dei contenitori che possono contenere file e altre directory. Il **file system** denota l'insieme di funzionalità e schemi organizzativi con cui un sistema di calcolo si interfaccia con i dispositivi di archiviazione, consentendone la gestisce dei dati.
Deletions:
I file sono organizzati in **directory**, che sono dei contenitori che possono contenere file e altre directory. Il **file system** denota l'insieme di funzionalità e schemi organizzativi con cui un sistema di calcolo si interfaccia con i dispositivi di archiviazione, consentendo la gestisce dei dati.
Additions:
==Esercizio 4 (hacker in erba!)==
Deletions:
==Esercizio 4 (hacker in erba)==
Additions: