• Non ci sono risultati.

Sistemi operativi ed informatica

N/A
N/A
Protected

Academic year: 2021

Condividi "Sistemi operativi ed informatica"

Copied!
38
0
0

Testo completo

(1)

Sistemi operativi ed informatica

(A. Andreazza)

Scuola di Specializzazione in Fisica Medica

(2)

“Sistemi operativi ed informatica”?

•  Non sarà un vero e proprio corso,

ma piuttosto un insieme di informazioni e stimoli (spero) utili.

•  I temi sono stati scelti in base alla mia esperienza personale (ed ignoranza):

–  Scripting in bash

–  Il funzionamento di internet (modello a strati)

–  Regole basi di sicurezza (password e certificati)

•  Feedback per le prossime edizioni:

–  Attività concrete che secondo voi sarebbe utile trattare –  Equilibrio lezioni teoriche/laboratorio

(3)

Piano del corso

•  Giovedì 18 maggio

–  Connessione ai PC del laboratorio –  Introduzione a Linux/bash/scripting

•  Mertedì 24 e Lunedì 30 maggio

–  Tecniche di Calcolo (prof. Giuliano Grossi)

•  Mercoledì 1 giugno

–  Informazioni sulle reti

–  Dissertazioni sulla sicurezza

PC del laboratorio (o su vs laptop)

Portate i vs. laptop

(4)

Lezione 1: Introduzione alla bash

•  La shell

•  Programmazione in bash

•  Appendice: Cygwin

Referenze:

•  Gareth Anderson, GNU/Linux Command-Line Tools Summary http://tldp.org/guides.html

•  Machtelt Garrels, Bash Guide for Beginners http://tldp.org/guides.html

•  Mendel Cooper, Advanced Bash-Scripting Guide http://tldp.org/guides.html

•  Cygwin site http://www.cygwin.org/cygwin

(5)

Un salto nella preistoria

•  Siamo abituati ad interagire con un calcolatore tramite una Graphical User Interface (GUI).

–  Semplifica le operazioni –  Protegge dagli errori

più comuni

–  Non è sempre stato così –  Non sempre è il modo più

efficiente

•  Oggi interagiremo con il calcolatore attraverso un terminale, usando la linea di comando.

Un editor non interattivo!

Ricerca di espressioni

Linguaggio per

manipolazione di testi

(6)

Un salto nella preistoria

GUI

Olduvai stone chopping tool Neil MacGregor,

A History of the World in 100 objects

http://www.britishmuseum.org/explore/

a_history_of_the_world.aspx

(7)

Connessione ai PC del laboratorio

•  Account di ateneo:

–  Username: nome.cognome (senza @unimi.it))

–  Password: quella del vostro account e-mail di ateneo

•  Per chi ha già frequentato questo laboratorio:

–  esiste ancora il vostro account @studenti.unimi.it –  fateci sapere se avete problemi di accesso

•  Queste slides su:

http://www2.fisica.unimi.it/andreazz –  Per aprire un browser web:

selezionare ApplicationsInternetFirefox Web Broswer –  Per aprire il Nautilus explorer:

cliccare sull’icona Home

–  Per aprire una finestra terminale:

selezionare ApplicationsSystem ToolsTerminal

(8)

Benvenuti in Linux!

•  Linux è un sistema operativo della famiglia UNIX.

•  Le componenti principali sono:

–  Kernel: gestisce le risorse del calcolatore

–  Librerie di sistema: software che realizza le funzionalità di uso generale (shared libraries, equivalenti alle DLL di Windows)

–  Tool di base (generalmente operanti da linea di comando) –  Shell: l’interprete delle istruzioni date sulla linea di comando.

•  In pratica l’interfaccia tra utente e calcolatore

•  Linux in senso stretto è il Kernel del sistema operativo

•  I tool di base sono forniti dal progetto GNU (www.gnu.org)

–  Sarebbe più corretto parlare di GNU/Linux

•  Interfaccia grafica X Windows: www.x.org

•  Distribuzioni: insieme coerente di sistema operativo ed applicativi.

•  Software open source, distribuito secondo la licenza GPL:

http://www.gnu.org/licenses/gpl.html

(9)

La shell

•  La shell o interprete dei comandi è un programma che serve ad impartire comandi al sistema operativo.

•  Ci sono numerose scelte: sh, bash, ksh, zsh, csh, tcsh…

bash è diventata il default di Linux, di Mac OS X e di Cygwin (Windows)

–  anche Windows ha una sua shell (Windows PowerShell), ma qui (e nel resto del corso) preferiamo enfatizzare la portabilità.

•  I comandi sono righe di testo inserite al prompt, che vengono interpretate ed eseguite quando si preme il tasto di invio.

•  L’immissione di un comando interpretabile fa partire un sotto-processo in cui quel comando viene eseguito.

•  Numerose funzionalità:

–  utilizzo di variabili, wild-character, espressioni

–  auto-completion (tasto TAB ) per i nomi di comandi, file, variabili –  ridirezione di input e output

–  gestione dei processi e del flusso di esecuzione –  history dei comandi (usando il cursore)

(10)

Chi siamo?

•  Unix è un sistema operativo multi-utente.

•  Ciascun utente ha un nome testuale (username) ed un numero (UID), che viene utilizzato internamente al sistema operativo.

•  Utenti possono appartenere a uno o più gruppi

•  Gli utenti accedono alle risorse del sistema in base ai loro privilegi:

•  Esiste un super-user (username=root), preposto all’amministrazione e alla supervisione del sistema.

Sul terminale

•  whoami mostra il nome dell’utente

•  who quali utenti sono connessi sulla macchina

•  groups a quali gruppi apparteniamo

•  echo $SHELL che shell stiamo usando apparteniamo

(11)

Dove siamo?

•  Il sistema operativo è organizzato in file raccolti in directory.

–  Il concetto di file è generico: sono visti come file dal sistema operativo non solo i dati su disco ma anche tutti i dispositivi hardware (tastiera, interfacce di rete...) ed i

processi stessi.

–  Una directory può avere sotto-directory, e tutte partono dalla directory root: / –  Il carattere ‘/’ serve per separare i nomi delle sotto-directory in un path che

definisce la posizione di un file.

•  Ogni utente ha a disposizione una propria home directory sulla quale mette i suoi file

–  Noi useremo in aggiunta una directory /home/comune per il materiale condiviso

Sul terminale

•  pwd mostra in quale directory ci troviamo

•  uname -a informazioni sul kernel e sulla macchina

•  df elenco dei file system disponibili

(12)

File system

•  È il componente che gestisce i dati sui dispositivi di archiviazione

•  Diversi tipi di filesystem

–  Disco: ext2, ext3, reiserfs, xfs, vfat, ntfs, iso, udf,…

–  Virtuali: proc, sys, dev, tmpfs –  Di rete: nfs, coda, smb/cifs

•  Provate a inserire una chiavetta USB e vedere dove compare.

–  fare umount path_della_chiavetta prima di estrarla!

nomi dei file corrispondenti al disco fisico

path da cui accedere al contenuto del file system

dischi montati via rete (tutte le home directory)

(13)

Guardiamoci attorno

Sul terminale

•  ls path mostra il contenuto di una directory (quella corrente se non si fornice il path)

•  ls -a path mostra anche i file nascosti (che iniziano con ‘.’)

•  ls -l path mostra informazioni dettagliate sui file

•  ls -al path fa entrambe le cose di cui sopra

owner group dimensione [B] Due directory speciali:

. = questa directory .. = la directory superiore Altre directory importanti:

~ = home directory / = root directory d = directory

Privilegi dell’owner:

r = lettura w = scrittura x = esecuzione

Privilegi dei membri del gruppo Privilegi di tutti

(14)

AIUTO!!!

•  Nel sistema operativo (e nella distribuzione) ci sono moltissimi comandi:

–  C’è un comando per fare quasi tutto

–  Anche i comandi più semplici hanno spesso opzioni molto utili –  Le opzioni normalmente si forniscono con:

-lettera oppure --parola

•  Quasi tutti i comandi forniscono un sommario con l’opzione –h o –-help

•  Per avere informazioni più dettagliate:

man comando o info comando

man –k parola_chiave cerca comandi relativi alla parola chiave.

Sul terminale

•  ls –h non funziona! la risposta al prossimo comando

•  ls --help sommario del comando

•  man ls descrizione dettagliata del comando

•  info ls descrizione dettagliata del comando

•  man –k directory tutti i comandi che riguardano le directory

...e ricerca in rete!

(15)

File e directory

•  mkdir path : crea una nuova directory

•  cd path : ci si sposta nella directory indicata

(cd .. si sale al livello superiore, cd da solo o cd ~ si torna nella home)

•  cp sorgente destinazione : copia il file sorgente nella destinazione (può essere un altro file o una directory)

•  mv sorgente destinazione : sposta (rinomina) il file sorgente in destinazione. Se la destinazione è una directory, possiamo fornire anche più di un file sorgente.

•  cat nomefile o less nomefile : stampa il contenuto di un file

(il secondo permette di muoversi all’interno del file con il cursore, q per uscire)

•  rm nomefile : cancella il file

•  rm –r nomedirectory : cancella una directory

(16)

File e directory

Esercizio:

1)  creare una sottodirectory SSFM nella vostra home 2)  fare un cd in /home/comune/SSFM/datafiles

(cercare di usare il TAB per completare il nome)

3)  scegliere un file .txt e provare a cambiargli nome 4)  copiarlo nella directory creata precedentemente

5)  spostarsi in quella directory e provare nuovamente a rinominarlo 6)  vederne il contenuto con cat e con less

7)  fare pulizia: cancellare il file e la directory

8)  copiare tutta la directory /home/comune/SSFM/datafiles nella propria home

Per chi vuole usare il proprio PC

•  potete scaricare i file da:

http://www2.fisica.unimi.it/andreazz/SSFM_datafiles.zip

•  chiaramente i passi 2), 4), 5), 7) e 8) non sono più necessari/utili

(17)

Wild character, ridirezione e piping

•  Nello scrivere il nome di un file possiamo usare dei caratteri generici:

* rappresenta un qualunque numero (anche 0) di caratteri –  ? rappresenta esattamente un carattere

[afg] rappresenta esattamente un carattere che può essere a o f o g –  [a-g] rappresenta esattamente un carattere compreso tra a e g

•  Nell’eseguire un comando la shell sostituirà il nome contenente i caratteri generici con la lista dei file che soddisfano la descrizione fornita.

•  Normalmente un comando riceve dati dallo standard input e scrive i risultati sullo standard output

•  Normalmente standard input ed output sono il terminale

–  comando < nomefile : utilizza il file come standard input invece del terminale –  comando > nomefile : utilizza il file come standard output invece del terminale

–  comando | comando : utilizza lo standard output di un comando come standard input del comando successivo

•  Sono istruzioni molto potenti perché permettono di salvare il risultato di un comando in un file, o di concatenare due comandi (piping).

(18)

Wild character, ridirezione e piping

•  wc nomefile : stampa il numero di caratteri, parole e righe nel file

–  o nello standard input se il nomefile non è fornito (utile per il piping) –  se lo standard input è dato da terminale, per terminare dare Ctrl-D

Esercizio:

•  considerare i file copiati da datafiles

•  fare un file con la lista dei file con il cognome Moretti

(usare ls con ridirezione dell’output)

•  verificarne il contenuto con cat e con less

•  contare il numero dei file, usando wc:

•  passando il file come argomento

•  ridirigendo lo standard input di wc

•  contare il numero dei file corrispondenti ad esami nel 2011 facendo una pipe da ls a wc

•  contare il numero dei file corrispondenti ad esami fatti nel mese di luglio

•  Dividere i file in due directory, una con i file prima del 2003 ed una con quelli successivi.

(19)

Espressioni regolari

•  Espressioni regolari definiscono come sono fatte delle stringhe.

•  Possono poi venire usate per verificare se delle stringhe di prova soddisfano o meno tali criteri.

–  Caratteri:

^ rappresenta l’inizio della stringa –  $ rappresenta la fine della stringa . rappresenta un carattere generico

–  [afg] rappresenta esattamente un carattere che può essere a o f o g [a-g] rappresenta esattamente un carattere compreso tra a e g –  caratteri speciali vanno fatti precedere dal carattere di escape \

–  Molteplicità:

* rappresenta un qualunque numero (anche 0) del carattere che lo precede

•  grep espressione nomi_di_file : stampa le righe dei file che contengono l’espressione

–  spesso conviene delimitare l’espressione con singoli o doppi apici

–  l’opzione –c stampa solo il numero di righe che contengono l’espressione –  l’opzione –l stampa solo il nome dei file che contengono l’espressione

(20)

Espressioni regolari

Esercizio:

•  considerare i file copiati da datafiles

•  stampare i nomi delle persone di cognome Rossi

•  stampare i file delle persone il cui nome finisce per due vocali

•  fare una lista dei file corrispondenti al sig. Stefano Bianchi

(21)

Variabili

•  La shell permette di definire due tipi di variabili:

–  locali: nomevariabile=valore

–  di ambiente: export nomevariabile=valore –  le variabili ambiente sono passate ai sottoprocessi –  env elenca le variabili d’ambiente ed i loro valori

•  Per accedere al loro valore si utilizza il prefisso $

–  Spesso conviene mettere il nome tra parentesi

•  Le variabili vengono trattate come stringhe di caratteri

–  Per effettuare operazioni aritmetiche, l’operazione deve venire inclusa tra (( ... ))

•  Confrontare il risultato delle seguenti serie di istruzioni:

•  Suggerimento: si possono mettere più istruzioni su una stessa riga, separate da ; a=1

b=2 c=a+b echo $c

a=1 b=2

c=$a+$b echo $c

a=1 b=2

((c=a+b)) echo $c

a=1 b=2

((c=$a+$b)) echo $c

(22)

Shell scripting

•  La bash è anche un linguaggio di programmazione:

–  si possono inserire delle sequenze di istruzioni in un file (script) –  eseguire il file

•  Permette di automatizzare delle operazioni ripetitive.

•  In generale, gli scripting language sono linguaggi di programmazione in cui delle istruzioni vengono passare ad un interprete al momento dell’esecuzione.

–  diversamente dai linguaggi compilati dove l’interpretazione viene fatta prima dell’esecuzione e risulta nella costruzione di un file eseguibile.

–  sviluppo più rapido (non necessita di compilazione) –  sintassi molto più accomodante

–  spesso hanno una migliore manipolazione delle stringhe –  sono meno efficienti (interpretazione ad ogni esecuzione)

(23)

Il nostro primo script

•  Ripetiamo l’ultimo esercizio usando uno script

•  gedit listfiles.sh & : apre l’editor per il nostro script in background

•  chmod u+x listfiles.sh : diamo al file il privilegio di esecuzione

•  ./listfiles.sh Stefano Bianchi : eseguiamo lo script

sha-bang: il path dell’interprete

argomenti: all’interno dello script sono predefinte le variabili 1, 2, 3... corrispondenti al primo, secondo, terzo argomento della riga di comando

(24)

Controllo del flusso

•  Per essere utile, un linguaggio di programmazione deve permettere di controllare il flusso di un programma:

–  eseguire cicli:

for variabile in lista_di_valori do

...

done

–  controllare il verificarsi di determinate condizioni:

if [[ condizione ]]

then ...

fi

•  Queste sono solo quelle che servono per fare degli esercizi:

–  tutte le strutture di controllo sono nelle pagine indicate in bibliografia –  in particolare si possono fare:

•  cicli su variabili numeriche

•  cicli while

•  condizioni alternative (else, elif)

(25)

Ciclo for ... in

•  Nel ciclo for:

for variabile in lista_di_valori do

...

done

•  la lista_di_valori può venire data esplicitamente, o risultare da una sostituzione operata dalla shell:

–  wild character

–  sostituzione con l’output di un comando (usando gli accenti): `comando`

(26)

creadirectory.sh

(copia i file in una directory individuale)

Lista dei file relativi ad una persona messi in un file temporaneo

Lista dei valori della

variabile filename creata dall’output di cat

Rimuovo il file temporaneo

Esercizio:

•  scrivere lo script invocando lo script dell’esempio precedente

(27)

Test di condizioni

•  La condizioni tra parentesi [[...]] dell’if può essere:

–  un comando: vera se il comando viene eseguito con successo –  un test, tipicamente su di un file o directory, ad esempio:

•  -d directory vero se la directory esiste

-f file vero se il file esiste

•  -r file vero se il file esiste ed è leggibile

-w file vero se il file esiste ed è scrivibile

•  -x file vero se il file esiste ed è eseguibile

•  Si possono usare gli operatori logici ! (not) && (and) || (or) tra i test

•  Si possono usare confronti aritmetici, ma bisogna usare ((...)) invece di [[...]]

(28)

creadirectorysafe.sh

(con controllo di esistenza della directory)

(29)

Manipolazione di stringhe e file

•  La bash ha delle funzioni molto potenti per manipolare le stringhe.

•  Questo, oltre alla stretta interazione con il sistema operativo, la rende utile per effettuare operazioni sui file.

–  un’operazione su stringhe è racchiusa tra ${...}

${#string} restituisce la lunghezza di $string

${string:position} restituisce una sottostringa di $string a partire da $position ${string:position:length} restituisce una sottostringa di $string lunga $length a

partire da $position

${string#pattern} cancella il primo match di $pattern all’inizio di $string

${string##pattern} cancella il più lungo match di $pattern all’inizio di $string ${string%pattern} cancella il primo match di $pattern alla fine di $string

${string%%pattern} cancella il più lungo match di $pattern alla fine di $string

•  sed “comando” nomefile : lo stream editor della GNU, produce in output il file modificato dal comando:

–  Ad esempio un comando per sostituire Prova con Test è “s|Prova|Test|”

(30)

Manipolazione di stringhe e file

Esempio:

•  modificare la data da giorno/mese/anno in anno/mese/giorno.

•  Lo script cambiadata.sh prende come argomento il nome di un file e restituisce nello standard output il file con la data modificata.

Esercizio:

•  scrivere uno script che, utilizzando cambiadata.sh e la ridirezione dell’output crei una cartella newfiles, e metta in questa tutti i file in datafiles dopo il

cambiamento del formato della data.

Esempio con Bianchi_20020826.txt data⇐“Data⇥26/08/2002”

vecchiadata⇐“26/08/2002”

anno⇐“2002”

giorno⇐“26”

data⇐“26/08”

mese⇐“08”

(31)

L’esercizione

Esercizio:

•  considerare i file copiati da datafiles

•  per ogni persona che abbia fatto almeno un esame, creare una cartella con il suo nome e cognome e copiare in questa cartella i file che le corrispondono.

•  L’esercizio quindi richiede:

•  ciclare su tutti i file

•  per ogni file estrarre il nome della persona

•  controllare se la directory corrispondente esiste

•  se non esiste, crearla

•  copiare il file nella directory

Altri esercizi:

•  cambiare in tutti i file il suffisso .txt in .dat

•  modificare il nome del file in modo che compaia prima la data e dopo il cognome.

(32)

Cygwin

•  Cygwin (

http://www.cygwin.org/cygwin

) è un applicativo per MS Windows che crea un ambiente simile a GNU/Linux

integrato all’interno di Windows:

–  terminale: da cui è possibile accedere sia ai comandi MS che quelli GNU

–  server X (opzionale): utillizzare i programmi sviluppati per X –  openssh (opzionale): vedete lezioni sulle reti

–  N.B.: i dischi X: di Windows diventano directory /cygdrive/X

(33)

Cygwin - installazione

Scaricare ed eseguire setup.exe

(34)

Cygwin - installazione

È più sicuro scaricare localmente i pacchetti prima di eseguire l’installazione

(35)

Cygwin - download

Il GARR di Bologna è un buon mirror per l’Italia

(36)

Cygwin – selezione pacchetti

•  La distribuzione completa è molto pesante.

•  La versione di Default è abbastanza basilare.

•  Consiglio di aggiungere almeno:

openssh (sotto Net)

Xinit, Xlaunch, Xterm (sotto X11) –  ma curiosate se trovate qualcosa che

vi interessa (ad esempio un editor come gedit)

–  Il programma di installazione

dovrebbe essere in grado di gestire le dipendenze dei pacchetti.

(37)

Cygwin – download e installazione

•  Una volta terminato il donload, far ripartire setup.exe

•  Questa volta selezionando di installare da una cartella locale

•  Confermare le opzioni di tutte le schermate che seguono (selezione pacchetti, scelta di cartelle...)

(38)

Cygwin – fine installazione

•  Una volta terminata l’installazione:

–  Un’icona per fare partire una finestra di cygwin sul desktop

(opzione sconsigliata: non usa X) –  Nello start menu:

•  la stessa icona

•  il launcher del server X, sotto Cygwin-X

(la mia scelta preferita: fa partire un terminale ed il server X)

Buon divertimento!

Riferimenti

Documenti correlati

Il tamponamento intraoculare conseguente alla vitrectomia per foro maculare, facilita il riposizionamento del margine della neuro retina staccata, e fornisce

Nel capitolo 2 l’attenzione sarà rivolta allo standard DVB-H; dopo una panoramica sulle strutture di trama del sistema, verranno affrontate in maniera dettagliata le soluzioni

• Il comando pipe | permette di usare lo standard output di un processo come standard input di un altro processo. &lt;programma_1&gt;

 file e directory.. © 2002-2005 Renzo Davoli, Alberto Montresor

Emit a copy of the input data = Local top-k list emitted by a reducer of Job #1 (NullWritable, (“product_x,product_y”, num. Occurrences_xy)

Per aprire uno stream di output occorre dichiarare che appartiene alla classe ofstream: ofstream out;.. Uno stream che eseguirà operazioni di input ed output deve appartenere

This example assumes that TESTFILE is a file with a few lines of data written to it using the Write # statement; that is, each line contains a string in quotations and a

o implementare una funzione virtuale nella classe base implementata nelle classi derivate (con output). o implementare una funzione virtuale nella classe base non implementata