Sistemi di Calcolo

Corso di Laurea in Ingegneria Informatica e Automatica - A.A. 2017-2018

HomePage | Avvisi | Diario lezioni | Programma | Materiale didattico | Esami | Forum | Login

Revision [351]

Last edited on 2014-10-12 12:15:27 by CamilDemetrescu
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]].


Revision [350]

Edited on 2014-10-12 12:14:56 by CamilDemetrescu
Additions:
==Preliminari==
Deletions:
===Nozioni preliminari===
===Esercitazione===


Revision [349]

Edited on 2014-10-12 12:13:29 by CamilDemetrescu
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.

  • ls nome-directory: elenca il contenuto directory specificata dal percorso (assoluto o relativo) nome-directory

  • ls: elenca il contenuto della directory corrente

  • ls -l: elenca il contenuto della directory corrente, fornendo maggiori informazioni (se è un file o directory, la dimensione del file, la data di modifica e altro).

    Esempio output 1:

    -rw-r--r--    9 anna  staff      306 Oct  8 18:10 hello.c
    indica (fra altre cose) che hello.c è un file e non una directory (la riga inizia per -), può essere letto e scritto dall'utente anna (rw) occupa 306 byte, ed è stato modificato l'8 ottobre alle 18:10.


    Esempio output 2:

    drwxr-xr-x    8 studente  staff      272 Sep 27 13:16 foto
    indica (fra altre cose) che foto è una directory (la riga inizia per d) può essere letta, scritta e listata dall'utente studente (rwx), e il suo contenuto è stato modificato il 27 settembre alle 13:16.





touch
esterno
Crea un file vuoto o ne aggiorna la data di modifica se esiste già.

  • touch nome-file: se non esiste, crea il file nome-file . Se esiste, ne aggiorna la data di modifica alla data corrente.

    Esempio 1:

    touch hello.c
    crea il file vuoto hello.c nella directory corrente o ne aggiorna la data di modifica se esiste già.


    Esempio 2:

    touch /home/studente/Scrivania/hello.c
    crea il file vuoto hello.c sulla scrivania dell'utente studente, 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.

  • mkdir directory: crea una nuova directory vuota directory.

    Esempio 1:

    mkdir pippo
    crea la directory pippo nella directory corrente.


    Esempio 2:

    mkdir /home/studente/Scrivania/pippo
    crea la directory pippo nella directory /home/studente/Scrivania.





rmdir
esterno
Elimina una directory, purché sia vuota.

  • rmdir directory: elimina la directory directory.

    Esempio 1:

    rmdir pippo
    elimina la directory pippo dalla directory corrente.


    Esempio 2:

    rmdir /home/studente/Scrivania/pippo
    elimina la directory pippo dalla directory /home/studente/Scrivania.


    Nota: per eliminare directory non vuote, si veda il comando rm.




rm
esterno
Elimina un file o una directory e tutto il suo contenuto di file e sottodirectory.

  • rm file: elimina il file file.

    Esempio 1:

    rm hello.c
    elimina il file hello.c dalla directory corrente.


    Esempio 2:

    rm /home/studente/Scrivania/hello.c
    elimina il file hello.c dalla directory /home/studente/Scrivania.



  • rm -rf directory: elimina la directory directory e tutto il suo contenuto di file e sottodirectory.

    Esempio 1:

    rm pippo
    elimina la directory pippo e tutto il suo contenuto dalla directory corrente.


    Esempio 2:

    rm /home/studente/Scrivania/pippo
    elimina le directory pippo e tutto il suo contenuto dalla directory /home/studente/Scrivania.





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.






Revision [348]

Edited on 2014-10-10 13:41:46 by CamilDemetrescu

No differences.

Revision [346]

Edited on 2014-10-10 13:31:00 by CamilDemetrescu
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.


Revision [345]

Edited on 2014-10-10 07:22:18 by CamilDemetrescu
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##.


Revision [343]

Edited on 2014-10-10 00:22:09 by CamilDemetrescu
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.


Revision [341]

Edited on 2014-10-09 00:40:34 by CamilDemetrescu
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) ⏎.


Revision [340]

Edited on 2014-10-09 00:40:06 by CamilDemetrescu
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) ⏎.


Revision [339]

Edited on 2014-10-09 00:39:03 by CamilDemetrescu
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.


Revision [338]

Edited on 2014-10-09 00:37:11 by CamilDemetrescu
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.


Revision [337]

Edited on 2014-10-09 00:36:41 by CamilDemetrescu
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.


Revision [336]

Edited on 2014-10-09 00:35:53 by CamilDemetrescu
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.


Revision [335]

Edited on 2014-10-09 00:35:27 by CamilDemetrescu
Additions:
==Esercizio 4 (hacker in erba!)==
Deletions:
==Esercizio 4 (hacker in erba)==


Revision [332]

Edited on 2014-10-09 00:33:26 by CamilDemetrescu
Additions: