Esercitazione Linux

of 190/190
Esercitazione di laboratorio - Sistemi di Elaborazione dell'Informazione Introduzione a Linux DIIGA - Università Politecnica delle Marche A.A. 2009/10
  • date post

    29-Jun-2015
  • Category

    Documents

  • view

    499
  • download

    6

Embed Size (px)

Transcript of Esercitazione Linux

DIIGA - Universit Politecnica delle Marche A.A. 2009/10

Esercitazione di laboratorio Sistemi di Elaborazione dell'Informazione

Introduzione a Linux

Francesco [email protected] Ricevimento su appuntamento

Gianluca [email protected] Ricevimento su appuntamento

Linuxs Sistema operativo Open Source s Qualit che possiede:

Stabilit Portabilit Sicurezza Interesse in ambito tecnico-scientifico:

Universit e istituti di ricerca Aziende che lavorano con sistemi informatici di qualit

Sistema operativo multiutente

s In questo corso utilizziamo la distribuzione Ubuntu 9.10 64bit s Almeno un utente: root s Utenti diversi da root hanno di solito minori privilegi: per privilegi

si intende la possibilit di eseguire certe azioni su certi oggetti L'utente non-root di default (in Ubuntu) si chiama ubuntu s Privilegi relativi agli accessi ai file: Lettura Scrittura Esecuzione

Struttura di Linux

s Kernel : (lett. gheriglio) cuore del sistema operativo, fornisce le

funzioni fondamentali (es. scheduler, memoria virtuale) e le syscalls Shell: interpreta i comandi; pu essere testuale o grafica s Programmi di servizio, ad esempio lambiente grafico:

Composto da vari livelli Tra cui un Window Manager (ad esempio XFree) Uninterfaccia grafica (ad esempio Gnome)

Distribuzione usata: Ubuntus Basata su Debian s Versione LiveCd: sistema operativo presente su CD, caricato in

memoria principale al momento del boots Kernel 2.6 s Lavvio non presuppone linstallazione s Cambiare la sequenza di boot dal BIOS (eventualmente) Accertarsi che venga interrogato il CDROM in fase di avvio s Salva su Ramdisk: le modifiche alla configurazione si perdono

ad ogni boot

Shell e Consoles Si lavora principalmente da riga di comando s Con ctrl+alt+Fn (Fn = F1 F2 F3 ...) si cambia il terminale

corrente Shell testuale: ctrl + alt + F2 Shell grafica:

ctrl + alt + F5

s Di solito si utilizza lambiente grafico che permette di aprire una

Console (detta anche Terminale) per impartire comandi

Arresto del sistema

s Usare il comando halt (servono i privilegi di root) s Oppure con il comando shutdown h now s Dallinterfaccia grafica si pu usare la sequenza classica di

operazionis Per riavviare usare il comando reboot s Chiudere le console con exit NOTA: se si eseguito 'su', occorre uscire sia dalla shell di root che da quella di utente;

DIIGA - Universit Politecnica delle Marche A.A. 2009/10

Esercitazione di laboratorio Sistemi di Elaborazione dell'Informazione

Shell e comandi

Shell (interprete dei comandi)s La shell uninterfaccia (tipicamente testuale) che permette ad

un utente dinteragire con il sistema, compiendo le seguenti azioni: mostra l'invito, o prompt, all'inserimento dei comandi; interpreta la riga di comando impartita dall'utente; esegue delle sostituzioni, in base ai caratteri jolly e alle

variabili di ambiente; mette a disposizione alcuni comandi interni; manda in esecuzione i programmi esterni installati nel sistema; gestisce la redirezione dell'input e dell'output; interpreta ed esegue file (chiamati anche script o batch) contenenti sequenze di comandi

Tipi di Shells Con l'evoluzione dei sistemi UNIX, allo scopo rendere il pi

comodo e personalizzabile possibile l'ambiente di lavoro, sono stati introdotti diversi tipi di shell: TIPO DI SHELL PROGRAMMA Bourne shell sh C shell csh Korn shell ksh Bash bashs Il funzionamento del sistema fortemente dipendente dalla shell

utilizzata. La shell standard del sistema Linux la Bash.

Sintassi dei Comandis La sintassi dei comandi dipende dal tipo di shell impiegata. s In generale, la sintassi tipica ha la seguente forma:

comando opz1..opzn arg1..argn

opz indica in che modo deve essere compiuta lazione arg un generico oggetto su cui il comando agisce

s La shell cerca in opportune directory; se esiste un file eseguibile

chiamato comando lo esegue e gli passa i parametri; alla fine restituisce un prompt all'utente

Alcuni comandi sono codificati direttamente dentro la shell, per cui non vengono cercati nel filesystem

Notaziones Le metavariabili, scritte in corsivo, esprimono l'informazione che

deve essere inserita al loro posto. Gli altri oggetti sono termini chiave che, se usati, devono essere espressi cos come sono.s Quello che appare racchiuso tra parentesi quadre rappresenta

un termine facoltativo. Es: [uno]s La barra verticale (| , chiamata anche 'pipe') indica la possibilit

di scelta tra due o pi alternative. Es: uno | due | tres I termini tra parentesi graffe rappresentano le alternative di

scelta obbligatoria. Es: {uno | due | tre}s I puntini (...) indicano la possibilit di aggiungere altri elementi

dello stesso tipo di quello che li precede. Es: uno due tre ...

Nozioni sparse (1/2)s Linux cerca di seguire la filosofia Unix: tutto un file

s A differenza di altri sistemi operativi, i file sono strutturati in un

unica struttura ad albero (il filesystem):

/ /bin ... /etc ... /mnt /mnt/disk_1 /mnt/disk_2 ... /home /home/pippo /home/pluto ...

Nozioni sparse (2/2)s Ci sono (sequenze di) caratteri che indicano posizioni speciali

del filesystem:

~ : la home directory dell'utente corrente ~pluto : la home directory dell'utente pluto . : la directory corrente (utile per i path relativi) .. : la directory superiore (o padre), nell'albero / : la directory principale del filesystem (nota come rootdirectory directory radice , utile per i path assoluti)

s Vedremo come saranno utili per specificare gli argomenti da

passare ai comandi

Comandi utilis man

Mostra come usare un comando, la sua sintassi e linsieme dei parametri accettati ex: man lss whoami

Visualizza il nome dellutente che sta utilizzando la shell correntes pwd

Visualizza il percorso completo della directory in cui ci si trova (pwd = print working directory)

lss Elenca i file contenuti in una directory (list directory).

ls [opzioni...] [file...]s Esempi

Elenca il contenuto della directory corrente. $ ls *.doc Elenca tutti i file che terminano con il suffisso .doc che si trovano nella directory corrente. $ ls help oppure $ls -h

$ ls

Mostra una guida sull'utilizzo del comando

Carattery jolly - digressiones Riprendiamo l'esempio precedente:

$ ls *.doc

s La sostituzione dei carattery jolly eseguita dalla shell (non dal

comando!) Se esistono (solamente!) i file pippo.doc e pluto.doc, allora il comando sopra equivale al comando: $ ls pippo.doc pluto.docs Corollario: Le regole di sostituzione dei caratteri jolly sono uniche per

tutti i programmi Linuxs Domanda: Quanti argomenti riceve il comando ls ?

Alcune opzioni di ls

-l : fornisce un elenco con pi dettagli sui files -s : fornisce la dimensione in blocchi dei files (size) -t : elenca nell'ordine di modifica (prima il file modificato per ultimo) (time) -1 : elenca mostrando un nome per ogni riga -a : visualizza tutti i file compresi quelli nascosti (all) -r : inverte lordine di visualizzazione -R : elenca in modo ricorsivo ogni sottodirectory -i : mostra anche gli inode-number dei files

Esempi$ ls /bin visualizza il contenuto della directory bin. I nomi rappresentano file di qualunque tipo (sottodirectory incluse). $ ls -l /bin Si ottenuto un elenco pi dettagliato che, in particolare, mostra i tipi dei files, i permessi e le appartenenze. Non vengono comunque visualizzati i files nascosti. $ ls -la /bin Si ottenuto un elenco dettagliato che mostra anche i files nascosti.

Operare come amministratore

s Due modi per eseguire comandi con i privilegi di root

$sudo[] $su [inserirelapassworddirootseserve] #[] s Differenze sudo non apre una nuova sessione di login, ma si limita ad eseguire il comando specificato e torna in modalit utente su apre una nuova sessione di login; dopo aver eseguito il comando specificato rimane in modalit root

Esempi$ ls /root ls: cannot open directory /root: Permission denied viene segnalato un errore perch occorrono privilegi da amministratore per leggere in contenuto di /root $ sudo ls /root [sudo] password for ubuntu: file1 file2 file3 Tramite il comando sudo scopriamo che in /root sono contenuti i file file1file2file3

cds Cambia la directory corrente (change directory).

cd [directory]s Esempi

$ cd .. Cambia la directory corrente, spostandosi nella directory superiore. $ cd ciao Cambia la directory corrente, spostandosi nella directory ciao che discende da quella corrente.

Altri Esempi $ cd ~

Cambia la directory corrente, spostandosi nella directory personale (home) dell'utente. $ cd ~daniele

Cambia la directory corrente, spostandosi nella directory personale dell'utente daniele. $ cd /tmp

Cambia la directory corrente, facendola diventare /tmp. $ cd /bin

$ pwd Cosa stampa?

mkdirs Crea una directory (make directory).

mkdir [opzioni...] directory...s Esempi

$ mkdir cloro Crea la directory cloro, come discendente di quella corrente. $ mkdir /sodio/cloro Crea la directory cloro, come discendente di /sodio. $ mkdir ~/cloro Crea la directory cloro, come discendente di quella dell'utente.

cp (1/2)s Copia

uno o pi file (incluse le directory) in un'unica destinazione (copy file).

cp [opzioni...] origine... destinaziones Se vengono specificati solo i nomi di due file normali, il primo

viene copiato sul secondo, viene cio generata una copia che ha il nome indicato come destinazione.

cp pippo pluto

cp (2/2)s Se il secondo nome indicato una directory, il file viene copiato

nella directory con lo stesso nome di origine.

Es. $ mkdir ./pluto $ cp pippo pluto $ ls ./pluto

s Se vengono indicati pi file, l'ultimo nome deve essere una

directory e verranno generate le copie di tutti i file indicati, all'interno della directory di destinazione.

Es. $ mkdir ./pluto2 $ cp topolino pippo pluto2 $ ls ./pluto2

Opzioni ed esempi

-f : sovrascrive forzatamente i file di destinazione. -p : mantiene le propriet e i permessi originali.

s Esempi

$ cp -r /test/* ~/prova Copia il contenuto della directory /test in ~/prova copiando anche eventuali sottodirectory poste in /test. $ cp -r /test ~/prova Copia la directory /test in ~/prova, copiando anche eventuali sottodirectories contenute in /test.

rms Rimuove i file indicati come argomento.

rm [opzioni...] nome...s Esempi

$ rm prova Elimina il file prova. $ rm ./-r Elimina il file -r che inizia il suo nome con un trattino. $ rm -r ~/varie Elimina la directory varie insieme a tutte le sue sottodirectory.

rmdirs Rimuove la directory specificata (remove directory). Se si tenta

di eliminare una directory non vuota, con rmdir si ottiene un segnale di errore.

rmdir [opzioni...] directory...s Esempi

$ rmdir carbonio rmdir: carbonio: Directory not empty $ rm -r carbonio Elimina la directory carbonio e tutto ci che da essa discende.

mvs Sposta (rinomina) i file e le directory (move file).

mv [opzioni...] origine... destinaziones Se vengono specificati solo i nomi di due elementi (file o

directory), il primo viene spostato e rinominato in modo da ottenere quanto indicato come destinazione.

Eccezione: se il secondo nome una directory, il primo nome (file o directory) viene spostato dentro il secondo (come il comando cp)

s Se vengono indicati pi elementi (file o directory), l'ultimo

attributo deve essere una directory: verranno spostati tutti gli elementi elencati nella directory di destinazione.s In Linux per cambiare un nome di un file occorre spostarlo.

Esempi$ mv prova1 prova2 Cambia il nome del file (o della directory) prova1 in prova2. Attenzione: se prova2 esiste gi ed una directory cosa succede? E se prova2 esiste gi ed un file? $ mv * /tmp Sposta, all'interno di /tmp, tutti i file e le directory che si trovano nella directory corrente.

touchs Crea un file o ne modifica la data e lora.

touch [opzioni..][time] filename...s Aggiorna la data e l'ora dell'ultimo accesso (opzione -a) o

dell'ultima modifica (opzione -m) del file specificato.

s Se lopzione time non specificato, usa la data e l'ora corrente. s Esempio

$ touch pippo $ ls -l pippo -rw-rw-r-- ... 0 Jan 20 17:38 pippo

ln (1/2)s Associa il nuovo nome (detto anche link) al file esistente.

ln name1 name2s La creazione di un collegamento un'operazione simile alla

copia, con la differenza che invece di creare un duplicato di un file o una directory, si genera un riferimento agli originali.s Due tipi di link simbolico: se elimino il file originale, il link non funziona pi hard-link: se elimino il file originale, il link continua a funzionare

ln (2/2)s Esempio

$ ln -s uno primo $ ls -l primo lrwxrwxrwx ... 3 Dec 25 12:47 primo -> uno

which

s Ci dice in quale punto del file-system si trova un comando s Il comando which non fa una scansione di tutto il file-system,

analizza solo alcune directory. In futuro vedremo qualis $ which ls

/bin/ls s $ which which /usr/bin/whichs $ which cd

$ Perch?

EsercizioUna volta aperta una shell: s Visualizzare qual la directory corrente s Creare una nuova directory chiamata prova s Spostarsi nella directory appena creata s Creare un file chiamato uno s Creare una copia del file uno chiamata uno_copia s Rinominare uno_copia in unouno s Creare un link a unouno chiamato link s Visualizzare i file con i dettagli s Cancellare il file uno s Risalire di una directory s Cancellare la directory prova s Chiudere la shell

Soluzione1. pwd 2. mkdir prova 3. cd prova 4. touch uno 5. cp uno uno_copia 6. mv uno_copia unouno 7. ln s unouno link 8. ls l 9. rm uno 10.cd .. 11.rm r prova 12.exit

DIIGA - Universit Politecnica delle Marche A.A. 2009/10

Esercitazione di laboratorio

File Globbing

File Globbings Il globbing (o filename generation) il metodo

attraverso il quale, tramite un modello simbolico, possibile indicare un gruppo di nomi di file.

s Si possono utilizzare i simboli seguenti:

*:

rappresenta un gruppo qualsiasi di caratteri, compreso il punto purch il punto non si trovi all'inizio del nome; rappresenta un carattere qualsiasi, compreso il punto, purch questo punto non si trovi all'inizio del nome;

?:

[...] : rappresenta un carattere qualsiasi tra quelli contenuti traparentesi, o un intervallo di caratteri possibili. > es. di intervallo: [a-z] > es. di intervalli multipli: [a-z0-9]

Esempis Si supponga che la directory corrente contenga i seguenti files:

microinterruttore, xy123j4, microscopico, xy789j111, nanomicro, xy78j67 supersonico.

Esempi con *s $ ls Elenca tutti i nomi di file e directory della directory corrente. s $ ls * La shell provvede a sostituire l'asterisco con tutto l'elenco di nomi di file e directory contenuti nella directory corrente. In questo caso, non solo viene elencato il contenuto della directory corrente, ma anche quello di tutte le eventuali sottodirectory. s $ ls micro* microinterruttore, microscopico. s $ ls *micro* microinterruttore microscopico nanomicro

Esempi con ?s Se si vuole intervenire su tutti i file lunghi esattamente sette

caratteri che contengono la lettera j nella sesta posizione? $ ls ?????j? xy123j4 xy456j5s Con l'asterisco non si pu limitare il risultato ai file che

contengono j nella sesta posizione, n la lunghezza del nome pu essere presa in considerazione:

$ ls *j* xy123j4 xy456j5

xy789j111

xy78j67

(elenco di tutti i nomi con j)

Esempi con [ ]s $ ls xy????[4567]*

xy123j4 xy456j5s Si ottiene l'elenco di tutti i files i cui nomi: iniziano con xy; proseguono con quattro caratteri qualunque quindi contengono un carattere da 4 a 7 terminano in qualunque modo

s Lo stesso risultato si poteva ottenere dichiarando un intervallo

allinterno delle parentesi quadre:s $ ls xy????[4-7]*

Sequenze di Escapes Il fatto che la shell sostituisca alcuni caratteri impedisce di fatto

il loro utilizzo nei nomi di file e directory.s Per evitare la loro sostituzione si possono far precedere da una

barra obliqua inversa, che funge da carattere di escape (= simbolo di protezione).s $ touch sei\*otto s Con questa tecnica possibile includere nel nome di un file

anche lo spazio:s $ touch ciao\ simone

Verifica del Globbings L'uso di caratteri jolly pu essere pericoloso, soprattutto quando

si utilizzano in comandi distruttivi.s Il modo migliore per verificare l'effetto della sostituzione dei

caratteri jolly l'uso del comando echo (o ls)s Ad esempio, per sapere quali file e directory vengono coinvolti

dal modello micro*, basta il comando seguente: $ echo micro* microinterruttore microscopico

Piccola nota finales Chi gestisce il globbing? la sostituzione del globbing con i nomi effettivi di file e directory, svolta dalla shell Es. riguardiamo l'esempio di prima:

$ echo micro* microinterruttore microscopicoil comando echo riceve DUE argomenti (alias, microinterruttore e microscopio) e NON uno solo (micro*) Da tenere a mente se e quando programmerete con la shell

Esercitazione

Comandi di shell avanzati

Comandi more e lesss Per leggere un file possiamo utilizzare i comandi more o less: more [opzioni] file less [opzioni] file

s I due comandi sono simili: Il primo stampa a video il file, paginandolo Il secondo lo apre in sola lettura per entrambi con lopzione h (in modalit interattiva) si ottiene una breve guida

s Alcuni tasti utili per il less: per muoversi di una pagina usare i tasti spazio e b per muoversi di una riga utilizzare i tasti per uscire utilizzare il tasto q

Comandi more e lesss Se si vuole cercare una stringa allinterno del file, dopo averlo

aperto, ad esempio, con less: /modello effettua una ricerca in avanti ?modello effettua una ricerca allindietro

s Esempio: Spostarsi nella directory /proc Aprire il file devices Cercare il pattern sound con il comando /sound

s Una ricerca allindietro funziona allo stesso modo: basta

sostituire ? al posto di /

Ridireziones I programmi eseguiti hanno a disposizione dei canali per il

flusso dei dati:Uno standard input (che di solito la tastiera) Uno standard output (lo schermo del terminale) Uno standard error (lo schermo del terminale)

s Per la ridirezione dello standard output tramite la shell si usa il

simbolo >

programma > nomefile

s Per la ridirezione dello standard input tramite la shell si usa il

simbolo

stdout stdin Processo stderr

< 2>

Esempis Un esempio per loutput: ls al > file1

Questo comando stampa (sul file file1) loutput del comando ls Infatti, possiamo aprire il file per leggere la lista di file e sottodirectory della directory corrente

s Un esempio per linput: less < file1

Questo comando visualizza il file1 che avevamo creato

Esempio di script: ridirezione input[script] #!/bin/bash read nome read cognome echo Ciao, $nome $cognome

[dati] Pinco Pallino

./script < dati Ciao, Pinco Pallino

Altri simbolis Se si usa il simbolo >>, loutput viene aggiunto in coda al file

programma >> nomefile

s Vediamo un esempio: ls

>> file1

s Lo standard error si ridirige utilizzando il simbolo 2>:

programma 2> nomefile

s Vediamo un esempio: less file 2>> file1

Comandi in pipelines La pipeline ridirige lo standard output del comando a sinistra del

simbolo nello standard input del comando di destra.s Il simbolo utilizzato | s Un esempio: ls al | less

s Nellesempio precedente loutput del comando ls viene utilizzato

come input del comando less

Diagramma pipeline

| Processo 1 (ls al) stdout stdin Processo 2 (less)

Esercizis Esercizio 1:

Fare un elenco dei file e delle directory contenute in / in un file di nome contenuto_root (attenzione: non elencare le sottodirectory delle directory di / !!!)

s Esercizio 2: Stampare il manuale del comando ls in fondo al file contenuto_root Cercare allinterno del file la stringa COPYRIGHT

s Esercizio 3:

Stampare il manuale di ls a video utilizzando una pipeline e cercare la stringa COPYRIGHT

SoluzioniEsercizio 1: $ touch contenuto_root $ ls / > contenuto_root

si pu evitare di creare il file di nome contenuto_root, la creazione avviene automaticamente

Esercizio 2: $ man ls >> contenuto_root $ less contenuto_root lanciare il comando /COPYRIGHT

Esercizio 3: $ man ls | less Lanciare il comando /COPYRIGHT

Esercizis Esercizio 4: Rinominare il file contenuto_root col nome file3 Rimuovere il file creato

soluzionis Esercizio 4: mv contenuto_root file3 rm file3

Esercitazione

Processi Linux

Processi e Job in Linuxs Processo:

Sequenza di istruzioni contenute in un eseguibile Pu avviare altri processi (detti figli) attraverso una syscall fork Il processo padre responsabile dei processi figli (allocazione risorse, terminazione, messaggio fine esecuzione)

s Un job viene avviato dalla shell e pu richiedere lesecuzione di

pi processis Con Linux si ha la possibilit di gestire sia i processi che i job

Stato dei processis Un processo pu essere:

R in esecuzione (running) S in pausa o dormiente (sleeping) T sospeso (suspended) Z defunto (zombie) X morto N valore di nice positivo (rallentato)

s Linux rende disponibile la tabella dei processi nella directory

/proc/s A questa tabella accedono i programmi per la gestione dei

processi

Attributi della tabellasigla UID PID PPID USER PRI NI SIZE RSS descrizione Numero che identifica il proprietario Numero che identifica il processo PID del processo padre Nome del proprietario del processo Priorit del processo Valore di nice Dimensione dellimmagine in memoria virtuale Dimensione effettiva in RAM

Attributi della tabellasigla SWAP SHARE WCHAN STAT TT TIME CTIME COMMAND descrizione Dimensione della memoria virtuale utilizzata Quantit di memoria condivisa utilizzata Evento che il processo attende Stato del processo Terminale utilizzato Tempo di utilizzo CPU Tempo di CPU sommando il tempo dei figli Comando per avviare il processo

Comandi ps e pstrees ps [opzioni] [PID] s Tra le opzioni: l emette un elenco con molti elementi a visualizza anche i processi di altri utenti -aux visualizza anche i processi di sistema

s pstree [opzioni] [PID|utente] s Visualizza i processi in una struttura ad albero s Con lopzione p mostra i PID

Utilizzo del comando top

s Questo comando visualizza lutilizzo delle risorse di CPU,

attraverso una tabella, cio dei processi che la impegnano maggiormente

s top [opzioni]: -d secondi intervallo di aggiornamento -s disabilita i comandi di interattivit

Controllo dei jobs I comandi dalla shell avviano lesecuzione di job in primo piano

(foreground)s Si pu scegliere di eseguire job in background: basta

aggiungere & (e commerciale) alla fine del comandos Un esempio il comando: yes > /dev/null & s Col comando jobs possiamo conoscere i job ed il loro stato s Per riportare un job in primo piano: fg

Invio di segnali ai processis Si possono inviare dei segnali ai processi, vediamo alcuni di

questi:

SIGINT: interrompe il processo in esecuzione SIGKILL: uccide il processo in qualsiasi stato si trovi SIGQUIT: conclude lesecuzione SIGTSTP: ferma lesecuzione SIGCONT: riprende lesecuzione

Invio di segnali ai processis Si possono inviare segnali ai processi: attraverso vari comandi

di shell, oppure da tastieras kill un comando che permette di inviare segnali ai processi: kill [opzioni] PID Per avere un elenco dei segnali: kill l Per inviare un segnale: kill s segnale PID s Per inviare segnali da tastiera: Per inviare un SIGINT: ctrl+c Per inviare un SIGQUIT: ctrl+\ Per inviare un SIGTSTP: ctrl+z Per inviare un SIGCONT: fg

Esempios Avviamo il job yes > /dev/null & s Leggiamo il suo PID con jobs s Lo sospendiamo: kill s 20 %ID s Controlliamo lo stato con jobs s Lo portiamo in foreground: fg s Lo interrompiamo da tastiera ctrl+c

DIIGA - Universit Politecnica delle Marche A.A. 2007/08

Esercitazione di laboratorio

Gli Script

Gli Scripts Uno script un programma scritto nel linguaggio di shell,

salvato in un file di testo.s Lo script di shell un programma molto semplice, che di solito

ha solo lo scopo di automatizzare delle operazioni banali, ma ripetitive.s Si possono realizzare script complessi che, al momento della

loro esecuzione, necessitano di argomenti (parametri) sotto forma di opzione,

Avvio degli Scripts Per richiedere che un determinato script venga interpretato ed

eseguito da una shell, si pu operare nei seguenti modi:

$ shell < script $ shell script $ script

s La prima riga dello script indica chi deve interpretarlo:

#!s Esempio: #!/bin/bash

il simbolo # rappresenta linizio di un commento

Creazione e modifica di un files Per creare un file utilizzare il comando touch.

touch [nomefile]s Esempio

$ touch miadata

s Per modificare un file utilizzare il comando vi.

vi [nomefile]s Esempio

$ vi miadata

Esempimiadata #!/bin/bash echo Data di oggi: dates $ sh < miadata

Data di oggi: gio mag 31 12:16:55 GMT-5 2001s $ sh miadata

Data di oggi: gio mag 31 12:17:05 GMT-5 2001

Esempis $ ./miadata

script1: Permission denieds $ chmod +x miadata s $ ./miadata

Data di oggi: gio mag 31 12:1:45 GMT-5 2001

Variabili di Shells Si tratta di variabili che possono essere impiegate nella shell. Le

loro principali caratteristiche sono:

nome: stringa di lettere, cifre e underscore, il primo elemento deve necessariamente essere una lettera; tipo: solo stringa; non devono essere dichiarate; assegnamento nella forma: nome=valore; per indicare il valore di una variabile: $nome; scope: sono variabili locali alla shell corrente;

Variabili predefinites Esiste un insieme di variabili di shell predefinite (per nome e

significato) che contengono informazioni di interesse.s Il loro valore assegnato direttamente dalla shell, ma a volte

pu essere modificato dallutente con un opportuno comando.s Le pi utilizzate sono:

$0 nome dello script corrente; $1 ... $9 $n il valore dell'n-esimo argomento dello script; $# numero dei parametri dello script; $* lista di tutti gli argomenti dello script; $$ PID della shell corrente; $? codice di uscita dellultimo comando in foreground; $! PID dellultimo comando in background.

sets Alle variabili $1 $2... possibile assegnare un valore anche

mediante il comando set. set [valore ... ]s Esempio:

$ set uno due tre $ echo $1 $2 $3 uno due tre $ echo $1A unoA

Passaggio di parametris A uno script possono essere passati parametri come ad un

normale comando: script par1 par2 ... par9

Esempioleggi #!/bin/bash echo Il tuo nome $1 - Il tuo cognome $2

s $ leggi Luigi Bianchi

Il tuo nome Luigi - Il tuo cognome Bianchi

reads Legge linee dallo standard input della shell e le assegna in

successione alle variabili specificate. read [nomevar ... ]s Esempio: script1

#!/bin/bash echo Please enter your name read name echo Your name is $name

$./script1 Please enter your name Francesco Your name is Francesco

Variabili di ambientes Poich normalmente le variabili sono locali alla shell, occorre un

meccanismo che consenta a questa di passare alcune informazioni ai processi da essa creati.s Infatti, pu essere molto utile passare informazioni sull'ambiente

di esecuzione, come ad esempio, il pathname della home directory.s Per questo si utilizzano i concetti di ambiente e di variabili di

ambiente.s L'ambiente della shell una lista di coppie nome=valore che

viene trasmessa ad ogni processo da essa creato.

Modifica dellambientes Una shell pu:

inserire delle variabili locali nel proprio ambiente (per "esportarle" nei processi che essa generer); rimuovere delle coppie nome=valore dal proprio ambiente.

s La lista delle variabili correnti si ottiene con il comando env. s Per inserire le variabili nell'ambiente dei processi creati si usa:

export [nomevar ... ]s Se nessun argomento specificato, il comando elenca le

variabili esportate dalla shell corrente.

Variabili dambiente predefinites Esiste un insieme di variabili di ambiente predefinite che

contengono informazioni utili sull'ambiente di esecuzione.s Il loro valore in genere assegnato in un file di start-up

(altrimenti, la shell pu usare un valore di default).s Le variabili di ambiente pi usate sono:

$HOME pathname della home directory $PATH lista di directory in cui ricercare un comando $USER user-id dell'utente $SHELL pathname della shell di login $TERM tipo del terminale corrente

Variabili dambiente HOMEs Contiene il pathname della home directory dell'utente. Il suo

valore viene assegnato dal processo di login, che lo preleva da /etc/passwd.s Esempio

$ echo $HOME /home/tacconi $ HOME=/altra $ cd ~knoppix $ pwd /altra

s La nuova home directory dellutente ora /altra. Attenzione: la directory /altra deve esistere (mkdir)

Variabili dambiente PATHs Contiene i percorsi di ricerca per i comandi, cio l'elenco delle

directory nelle quali la shell cerca il comando da eseguire.s Esempio

$ echo $PATH /bin:/usr/sbin:/usr/bin:/usr/ucb:/etc:/usr/etc:. $ PATH=. $ echo $PATH . $ ls ls: not found

s Il comando ls non viene trovato. La shell, per come stata istanziata

PATH, cerca i comandi solo nella directory corrente.

Espressioni condizionalis comando1 && comando2

comando2 viene eseguito solo se comando1 stato eseguito con successo (cio se $?=0) Esempio: $ touch a $ rm a && echo rimosso! rimossos comando1 || comando2

comando2 viene eseguito solo se comando1 stato eseguito senza successo (cio se $?0) Esempio: $ rm a 2> out || echo errore! errore!

Strutture di controllos Come ogni linguaggio di programmazione procedurale, anche

quello della shell dispone di strutture per il controllo dellesecuzione.s Le strutture principali sono le seguenti:

ISTRUZIONE If Case For While, Until

SIGNIFICATOselezione selezione multipla iterazione enumerativa iterazione condizionata

s Tali istruzioni hanno significati e finalit analoghe a quelli dei

tradizionali linguaggi di programmazione.

Esempio (if)#!/bin/sh #Faccio la mia domanda echo -n "Quanti anni hai? #Recupero la risposta read ANNI #Stampo a video il risultato if [ ${ANNI} -lt 10 ] then echo "Sei un bambino" elif [ ${ANNI} -lt 18 ] echo "Sei minorenne" else echo "Sei maggiorenne" fi

Esercitazione

Scheduling dei processi

Scheduling dei processis Linux gestisce i processi in code di scheduling a diversa priorit Real-time Time sharing s Ogni coda utilizza un proprio algoritmo di scheduling Per il time sharing lalgoritmo di tipo round-robin basato su crediti Per il real-time abbiamo due diversi algoritmi: RR e FCFS. s Il valore di priorit assegnato ad un processo utente

modificabile tramite il valore di nices Lesecuzione dei processi time sharing non preemptive,

mentre nel caso di processi real-time vengono prelazionati i processi a priorit minore (compresi i time sharing).

Esecuzione dei processi time sharings Lo scheduler sceglie il processo con il numero maggiore di

crediti e gli assegna un quanto di tempos Al termine del quanto assegnatogli, il processo riceve un

timeout dallo scheduler, il quale assegna la CPU ad un altro processo e decrementa il suo numero di creditis Quando tutti i processi nella ready-queue esauriscono i loro

crediti, termina unepoca e vengono ricalcolati i crediti di tutti i processis Un processo pu rilasciare spontaneamente la CPU:

Al termine dellesecuzione Se richiede un I/O

Calcolo dei creditis Ogni epoca ( 210 ms) vengono ricalcolati i crediti di tutti i

processi time sharing con la seguente formula:

creditin+1 = (creditin / 2) + (ts_prioritn / 4)

s Il sistema del calcolo dei crediti implementa laging per processi

I/O bound riassegnando la met dei crediti residui (posseduti solo da processi nella coda di I/O)s Vediamo un esempio dove 1 secondo = 4 quanti = 20 tick

EsempioProcesso P1 P2 P3 P4 Tempo di Arrivo 0 3 9 12 Classe di scheduling TS TS RT FIFO RT RR Priorit RT 0 0 1 2 Quanto RT ------5 Nice 0 -4 ----CPU burst 7 10 4 6

Crediti(P1) = (20 0)/4 = 5 Crediti(P2) = (20 + 4)/4 = 621: Ricalcolo crediti P1 P2 | P3 | 9 12 P4 |P3 | 18 19 P2 | P1 | 25 27

| 0

| 5

Prelazione

Scelta tra P1 (0 cred) e P2 (2 cred)

Comando nice

s Il comando nice serve ad assegnare un valore di nice al

processo al momento dellesecuziones nice [-n variazione] [comando] s Se non viene specificata, la variazione di default laumento di

un valore 10s Il valore di nice pu variare tra -20 e +19

Comando renices Questo comando modifica il valore di nice di un processo in

esecuziones renice priorit PID s Il processo assumer un valore di nice pari al valore priorit s Anche in questo caso il range va da -20 a +19 s La priorit dei processi non pu variare in maniera indefinita:

infatti un valore di nice molto alto non corrisponder ad un effettivo aumento del valore della priorit

Esempio

s Lanciare il comando top con un certo valore di nice:

nice n -2 tops Aprire unaltra console e visualizzare i processi con ps al s Cambiare il valore di nice del processo top incrementandolo di

qualche unit, ad esempio: renice 3 PIDs Controllare il nuovo valore di nice del processo

DIIGA - Universit Politecnica delle Marche A.A. 2007/08

Esercitazione di laboratorio

Script per lavvio di processi

AVVIO DI SERVIZIs Lutente pu avviare dei servizi di certi programmi attraverso

processi, digitando dei comandi, ecc. s

E possibile farlo in due modi diversi:

tramite interfaccia grafica; tramite degli script. L ideale sarebbe avviare certi servizi (come il web server, per esempio) allavvio della macchina. Vedremo di seguito come farlo

INIT e /etc/inittabs Init il padre di tutti i processi, il suo ruolo principale consiste

nel gestire il lancio di tutti i programmi necessari per rendere il sistema attivo creare i processi a partire da uno script in /etc/inittab.

Questo sistema di avvio si chiama System V: Ubuntu usa un sistema alternativo (chiamato upstart), configurabile con il file /etc/event.d/rc-default ed i comandi runlevel, telin e update-rc.d

s Nell'inittab vengono definite le directory con gli script di avvio

per i diversi runlevel (stati del sistema, in cui possono girare determinati programmi), il runlevel di default, altri script e comandi che vengono eseguiti al boot o in condizioni particolari.

s Il primo script lanciato da inittab (su Fedora)

/etc/rc.d/rc.sysinit: che esegue varie operazioni tra cui:Impostazioni di alcuni path generali nella variabile $PATH; Configurazione dell'ambiente di rete; Avvio swap per la memoria virtuale; Check del filesystem root; Mount del filesystem root in modalit scrittura/lettura; Preparazione del sistema per caricamento dei moduli; Check delle dipendenze dei moduli; Check di tutti i filesystem ed eventuali riparazioni; Mount di tutti i filesystem; Pulizia di file di supporto al boot e di processi non pi attivi; Attivazione dello swapping; Caricamento Moduli; Attivazione dei servizi del runlevel. runlevel

Runlevels Un runlevel un astrazione software per indicare diversi stati della

macchina in cui possono girare diversi programmi.

In genere su Linux sono utilizzati i seguenti livelli: Runlevel 0 : /etc/rc.d/rc0.d

Questo runlevel avvia la sequenza di arresto del sistema (shutdown) Runlevel 1: /etc/rc.d/rc1.d Questo runlevel rappresenta la modalit singolo utente, nessun altro utente pu collegarsi, il servizio di rete disabilitato. Runlevel 2: /etc/rc.d/rc2.d Rappresenta lo stato multiutente, il servizio rete attivo ma disabilitato il file sharing. Runlevel 3: /etc/rc.d/rc3.d In genere quello predefinito quando si opera in modalit testuale, tutti i servizi sono attivi. Runlevel 4: /etc/rc.d/rc4.d Inutilizzato. Pu essere dedicato ad usi personali Runlevel 5: /etc/rc.d/rc5.d E' il runlevel predefinito quando si vuole avviare Linux in modalit grafica Runlevel 6: /etc/rc.d/rc6.d Il runlevel 6 quello di reboot.

s Lo script /etc/rc.d/rc gestisce quali processi far partire a

seconda del runlevel, andando ad analizzare le singole directory /etc/rc.d/rc#.d.s In queste directory esistono una serie di symlink con nomi del

tipo S12syslog o K65identd che puntano a degli script con nomi tipo /etc/rc.d/init.d/syslog o /etc/rc.d/init.d/identd.

s /etc/rc.d/rc a seconda della directory corrispondente al runlevel

da caricare fa partire tutti gli script che iniziano con S e fa chiudere tutti quelli che iniziano con K, eseguendoli nell'ordine indicato dal numero presente nei nomi dei file.

s Gli script che di fatto permettono di gestire l'avvio o lo stop di un

servizio sono quindi nella directory /etc/rc.d/init.d/ e possono essere utilizzati direttamente dall'utente per gestire i singoli processi.s Per esempio:

/etc/rc.d/init.d/httpd start e /etc/rc.d/init.d/httpd stop

fa partire il server Web

lo fa stoppare.

s Se abbiamo il file (link a ../init/httpd )

/etc/rc.d/rc3.d/S85httpd avremo un server web avviato quando la macchina al run-level3 (runlevel di default per un server, che non ha bisogno di Xwindows)

s Se vogliamo evitare che venga avviato un server web, baster

rinominare il file, sostituendo la K alla S: mv /etc/rc.d/rc3.d/S85httpd /etc/rc.d/rc3.d/K85httpd

Molte distribuzioni Linux utilizzano path diversi per il loro script di startup,questo pu disorientare l'utente e costringerlo a cercare script di startup e file in troppi luoghi diversi. NON necessario. Tutto parte da init e init si configura in /etc/inittab. Leggendo questo file possibile ricostruire l'intero processo di boot del sistema e vedere dove risiedono tutti gli script di statup.

s Verificare:

cat /etc/inittabPer verificare gli script lanciati all'avvio e quale runlevel viene utilizzato di default

ls -l /etc/rc.d/Lista dei file delle directory che contengono i vari script lanciati al boot

chkconfig --listVisualizza per ogni servizio, se viene avviato o no nei diversi runlevel.

Il comando getopts Utile per realizzare script da richiamare fornendogli opzioni,

eventualmente associate a parametri (o argomenti) s getopt ha la sintassi seguente:

getopt stringa_di_opzioni stringa_da_interpretare...stringa_di_opzioni: elenco di lettere (non separate da spazi!) che rappresentano, ciascuna, (il nomi di) una opzione ammissibile per opzioni che richiedano un argomento, la lettera identificativa va seguita dal carattere ':' stringa_da_interpretare: sequenza di caratteri da interpretare e far matchare con la stringa_di_opzioni specificata sopra Esempio:

$getopt ab:c -a uno -b due -c tre quattro

Esempio getopts

L'esempio seguente dovrebbe chiarire in che modo si pu utilizzare getopt per scandire gli argomenti della riga di comando: #!/bin/sh # scansione_1.sh : Si raccoglie la stringa generata da getopt STRINGA_ARGOMENTI=`getopt ab:c "[email protected]"` # Si trasferisce nei parametri $1, $2,... eval set -- "$STRINGA_ARGOMENTI" while true ; do case "$1" in -a) echo "Opzione a" shift ;; -b) echo "Opzione b, argomento $2" shift 2 ;; -c) echo "Opzione c" shift ;; --) shift break ;; *) echo "Errore imprevisto" exit 1 ;; esac done echo Argomenti rimanenti: for argomento in [email protected] ; do echo $argomento done

Esempio getopt (note sparse)s QUALCOSA=`espressione`:

esegue l'espressione ed assegna lo standard output alla variabile di nome QUALCOSA

attenzione agli apici inversi `...` e a non mettere spazi fra QUALCOSA,= e `espressione`

s Se allo script passiamo degli argomenti, come in:

$ ./scansione_1.sh primo secondo terzo essi saranno memorizzati nelle variabili $1, $2, ecc... s shift [n]: sposta la variabile $x in $y, dove y = x 2 (per x > n) s set -- [stringa] : se stringa specificata, la suddivide (basandosi sugli spazi) per assegnare ciascun termine ad una variabile posizionale $1, $2, ... per il resto dello script s eval [comandi] : esegue i comandi specificati di seguito e permetti loro di modificare l'ambiente dello script corrente

Risultati dello script di esempios In pratica, si comprende che lo scopo di getopt solo quello di

fare un po' di ordine tra le opzioni e di distinguere le opzioni dal resto. s Supponendo che il nome dello script sia scansione_1.sh, se si utilizza come nell'esempio gi visto, si dovrebbe ottenere il risultato seguente: $ ./scansione_1.sh -a uno -b due -c tre quattro Opzione a Opzione b, argomento due Opzione c Argomenti rimanenti: uno tre quattro

Esercitazione

Pianificazione dei processi

Avvio di comandi in automaticos Si pu avere la necessit di voler avviare dei processi in

maniera automatica:

Questo pu avvenire allavvio del sistema operativo Oppure in un momento stabilito

s Esempi del primo caso sono i processi che partono quando si

accende una macchinas Il secondo caso relativo a processi che si vogliono avviare in

un dato momento, anche se non si fisicamente presenti per avviarli

Allavvio del sistema operativos Il sistema operativo avvia un certo numero di processi al boot:

questi processi vengono chiamati servizis Anche gli utenti possono avviare processi al boot, mediante

opportuni scripts Gli script di avvio dei processi utente si trovano nelle directory

/etc/init.d (come visto la precedente lezione)s Un esempio potrebbe essere un Firewall, che deve partire ad

ogni boot, senza che venga lanciato il relativo comando (pensiamo ad un riavvio a causa di un calo improvviso di tensione)

Sintassi per gli script di avvios La sintassi per lavvio di un servizio da uno script del tipo: nome_servizio {start|stop|restart}

s Naturalmente start e stop sono, rispettivamente, comandi per

avviare e fermare un servizio; restart per riavviarlos Un esempio: /usr/sbin/script1 start s Spesso questi script vanno inseriti in directory differenti a

seconda del runlevel di esecuzione del sistema

Pianificare lavvio di un processos Il secondo caso quello dellavvio di un processo in un

momento stabilitos Per fare questo, esiste un daemon che si chiama Cron un daemon (o demone) un programma che risiede in background e viene invocato per fornire un certo servizio (es. server web, server mail, ...) s Cron legge il file /etc/crontab per avviare processi pu esistere un file del genere associato ad ogni utente (a volte si trova in /var/spool/cron/crontabs/) s Lutente root ha accesso il lettura e scrittura a tutti i file crontab

Comando crontabs Per accedere a questi file si utilizza il comando crontab: crontab [opzioni] s Tra le opzioni: crontab [u utente] file Sostituisce il file crontab con il file passatogli come argomento crontab l [-u utente]

Visualizza il file crontab dellutente

crontab e [-u utente]

Crea o modifica il file crontab dellutente

crontab r [-u utente]

Rimuove il file crontab dellutente

File crontabs Solitamente non si modifica il file crontab direttamente; si usano

appositi comandis Il comando crontab e crea ed edita il file crontab relativo

allutente; il file viene di solito aperto con l'editor vi

s Allinizio del file, si possono assegnare le variabili: SHELL se non ci va bene quella di default (/bin/bash) HOME per cambiare la directory dellutente MAILTO per stabilire a chi viene inviato loutput tramite e-mail

s Di solito si lasciano quelle di default

File crontabs La parte relativa ai comandi fatta di righe del tipo:

data_orario comando

s data_orario composta da cinque campi * * * * *

Minuti da 0 a 59 Ore da 0 a 23 Giorni_del_mese da 1 a 31 Mese da 1 a 12 Giorni_della_settimana da 0 a 7 (0 e 7 per la domenica)

s Lasterisco indica qualsiasi valore possibile

File crontabs Ad esempio: 13 16 * * * indica le 16:13 di qualsiasi giorno s Invece 13 16 5 * * indica le 16:13 di ogni quinto giorno del

mese

s Esempio di comando: min ora * * * /bin/ps > /ramdisk/home/knoppix/uno

Esempis Avviare il daemon cron s Creare un file di nome uno s Inserirci la tabella dei processi s La sequenza dei comandi : cron touch uno crontab e

s Cos viene creato e aperto il file crontab dellutente root

Esempis Per inserirci la tabella dei processi: min ore * * * /bin/ps > /ramdisk/home/knoppix/uno

s In un altro esempio possiamo fargli creare il file di nome f e

inserirci la tabella dei processi: min ore * * * /bin/touch >

/ramdisk/home/knoppix/f min ore * * * /bin/ps > /ramdisk/home/knoppix/f

Esercitazione

Gestione della memoria

Gestione della memorias Linux gestisce la memoria tramite paginazione su richiesta s La memoria virtuale ha un sistema di paginazione a tre livelli

che utilizza unarea del disco detta swap areas Lutilizzo della memoria virtuale permette di avere a

disposizione uno spazio di memoria molto pi grande di quello reales Purtroppo richiede una gestione complessa della memoria fisica

e degli altri dispositivi (backing store)s Allutente sono visibili i parametri utilizzati dal gestore della

memoria

Comandi ps e tops Abbiamo gi visto questi comandi e i loro parametri relativi ai

processis Vediamo i parametri dellutilizzo di memoria da parte dei

processis Il comando ps u: mostra le dimensioni della RAM utilizzata effettivamente (RSS) la percentuale utilizzata su quella totale (%MEM) la memoria virtuale utilizzata dal processo (VSZ): vm_lib+vm_exe+vm_data+vm_stack

s vm_lib lo spazio di memoria virtuale che occupano le librerie,

mentre vm_exe quello occupato dalleseguibile

Comandi ps e tops Il comando top: VIRT simile a VSZ che abbiamo visto RES simile a RSS SHR indica la quantit di memoria condivisa utilizzata dal processo

s Un comando per avere dei parametri generali free: free [opzioni]

s Tra le opzioni: -m visualizza in megabyte -s secondi effettua periodicamente un aggiornamento -t mostra una riga con i totali

Comando frees Se lanciamo free m

total memoria totale used memoria usata free memoria libera shared memoria condivisa buffers memoria dedicata al buffering cached memoria dedicata al caching

s La riga successiva mostra quanta memoria occupata dai

buffer e caches Lultima riga si riferisce alla partizione di swap

Comando pmaps Il comando pmap restituisce un mapping della memoria

utilizzata da un processos La sintassi pmap [opzioni] PID s Se lanciamo il comando pmap x PID: vediamo le dimensioni dei dati utilizzati dal processo (es. le librerie) lo stack il processo relativo il totale

Comando vmstats Il comando vmstat visualizza statistiche relative alla memoria

virtuales La sintassi vmstat [opzioni] s Tra le opzioni: -a per visualizzare quantit di memoria attiva e inattiva -m per visualizzare le dimensioni delle pagine

s Se lanciamo il comando vmstat senza opzioni, ci restituisce

tutta una serie di informazioni (raccolte a partire dall'ultimo reboot)

Comando vmstats procs: r numero di processi in attesa di esecuzione b numero di processi in sleep ininterrompibili s memory: swpd memoria virtuale usata free memoria libera buff memoria usata come buffer cache memoria usata come cache inact memoria inattiva active memoria attiva s swap: si memoria swapped in dal disco so memoria swapped out sul disco

Comando vmstats io: bi numero di blocchi ricevuti da un dispositivo a blocchi bo numero di blocchi inviati ad un dispositivo a blocchi

s system: in numero di interrupt al secondo (incluso il clock) cs numero di context switch al secondo s cpu: us tempo di esecuzione di codice non-kernel sy tempo di esecuzione di codice kernel id tempo di esecuzione idle (esecuzione al minimo) wa tempo di waiting i tempi sopra sono espressi in percentuale % sul tempo totale

Comando vmstats Lanciare il comando vmstat m (visualizza lutilizzo delle

cache) in una modalit detta slabinfo Il risultato del comando sar del tipo:Cache Num 64 4 Total 64 203 Kmem_cache Ip_fib_hash 244 16

Size

Pages 4 1

Cache: in Linux parte della memoria organizzata in cache, una cache per ogni tipo dioggetto; ogni slab(essi sono piccoli e sempre contigui, usualmente lunghi una pag di memoria) contiene molti oggetti inizializzati.

Num: numero di allocazioni che hanno almeno un oggetto allocato attivo Total: totale numero di allocazioni nellacorrente slab cache

Size: questa la dimensione di ogni oggetto allocato. C un overhead nel mantenere lacache; loverhead varia con la dimensione delloggetto ( pi piccolo loggetto pi elementi ci sono nella pagina e pi overhead serve per la gestione di oggetto usato/non usato. Si pu determinare quanti oggetti ci sono in ogni allocazione ( spesso coincide con una pag di memoria) dividendo numero di oggetti allocati per totali allocazioni.

Pages: dimensione di uno slab in pagine

Esercitazione

File system

File system di Linuxs Caratteristiche del file system di Linux: Struttura a grafo generale Allocazione indicizzata Allocazione, il pi possibile, contigua di blocchi logici contigui

s Supporta quasi tutti i tipi di file system s Quello pi diffuso lext2 e il nuovo ext3 derivato direttamente

dal primo:

Lext3 ha in aggiunta il journaling per mantenere la coerenza dei dati in scrittura, anche in seguito ad uninterruzione improvvisa (ad esempio un calo di tensione)

Allocaziones In Linux lallocazione dei file di tipo indicizzato: Utilizza dei blocchi indice detti i-node I blocchi indice puntano ai blocchi del file o ad altri i-node

s Cerca di allocare i blocchi logici contigui in blocchi fisici contigui s Sul disco sono presenti un certo numero di superblock che

fanno riferimento ai diversi gruppi di blocchis Nei superblock ci sono informazioni sui relativi gruppi di blocchi:

mappa dei blocchi, mappa degli i-node, informazioni sui blocchi liberi, ecc.

Struttura a grafos La struttura a grafo generale permette di creare dei link da file

che si trovano in sottoalberi differentis In Linux esistono due tipi di link: Hard link Symbolic link

s I primi condividono i blocchi i-node mentre i secondi hanno i loro

i-nodes Entrambi condividono permessi, owner, data di modifica, ecc.

Pathname assoluti e relativis Se vogliamo fare riferimento ad un file che NON si trova nella

directory corrente (indicata con . ) dobbiamo utilizzare il pathname assoluto: cio, specificare le directory e sottodirectorys Se, invece, ci riferiamo ad un file o directory in quella corrente,

possiamo utilizzare il pathname relativos Vediamo un pathname assoluto e uno relativo: /ramdisk/home/knoppix/Desktop Desktop

Assoluto Relativo

s La directory superiore viene indicata con ..

symlink e hard links Per la creazione dei link si usa il comando ln: ln [opzioni] origine destinazione

lopzione pi usata -s che serve a creare i symlink

s Iniziamo col creare un file di nome uno e un hard link, a questo

file, di nome due: touch uno ln uno due ls l

s Come si vede due viene dichiarato come un file a tutti gli effetti

Symlink e hard links Se vogliamo creare un link simbolico: ln s uno tre

s In questo caso il file tre viene dichiarato come link s Se rimuoviamo il file uno dobbiamo rimuovere anche i link: se lasciamo gli hard link, possiamo ancora accedere al file dai symlink non si pu pi accedere al file (essendo solo un riferimento)

Permessi su file e directorys Con il comando ls l possiamo visualizzare la lista dei file,

delle sottodirectory e dei link, presenti nella directory

s Allinizio compare una stringa di 10 caratteri del tipo: -rwxr--r-- il primo carattere un trattino per i file, una d per le directory e l per un link simbolico gli altri sono relativi ai permessi in lettura, scrittura e modifica per gli utenti user, group e others

s Ad esempio: la stringa precedente ci dice che si tratta di un file,

che lutente attuale ha tutti i permessi e che il gruppo relativo e tutti gli altri hanno accesso in sola lettura

Permessi su file e directorys La notazione sui permessi sui file di facile comprensione: si

capisce cosa vuol dire lettura, scrittura ed esecuziones Per quanto riguarda le directory: la lettura permette di listare la directory la scrittura di creare file e sottodirectory lesecuzione di attraversare la directory

s Attraversare la directory vuol dire avere la possibilit di

accedere alle sottodirectory (es. con il comando cd)

Cambiare i permessis Per la modifica dei permessi si usa il comando chmod: chmod [opzioni] permessi file

s Non tanto interessante conoscere le opzioni quanto sapere la

sintassi di bases I permessi vanno scritti partendo dal tipo di utente che pu

essere:o per others, g per group, u per utente e a per tutti quanti = per settare, + per aggiungere e - per togliere i permessi

s Un esempio : chmod a=rwx nome_file

Cambiare i permessis Se omettiamo lutente, fa riferimento a tutti: chmod r nome_file

toglie il permesso il lettura a tutti gli utenti (attenzione, TUTTI gli utenti = utente + group + others)

s Knoppix ha dei problemi a far funzionare bene questo comando s Per farlo funzionare conviene usare unaltra notazione: -r-xrwx--- in stringa binaria diventa 101111000 tradotto in ottale diventa 570 chmod 570 nome_file

Cambiare i permessis Per sapere come saranno i permessi alla creazione di un file,

utilizziamo il comando umask: umask [-S] per conoscere quelli attuali umask permessi per modificarli

s Anche in questo caso Knoppix non funziona molto bene, ad

esempio ha problemi alla creazione del file per i permessi di esecuzione

Comando finds Per cercare un file si pu utilizzare il comando find: find [percorso] [espressione] [espressione] -> [opzione] [condizione]

s Permette effettuare molti tipi di ricerca su espressioni anche

molto complesse:

sulle propriet di file o directory sui permessi sulle caratteristiche dei nomi sulla data di accesso e modifica sulla dimensione altre espressioni

Comando finds Vediamo alcuni esempi: find / -iname 'desktop' find / -path '*/doc/*' find . amin -5

s Leffetto: cerca i file e le directory di nome desktop in modalit case insensitive cerca i pathname che comprendono una directory doc cerca nella directory corrente i file con data di accesso minore di 5 minuti fa

Comando greps Il comando grep viene utilizzato per cercare stringhe allinterno

di file: grep [opzioni] modello [file]

s Tra le opzioni: -n restituisce il numero di riga -i case insensitive -c restituisce quante righe contengono il modello

s Per gli esempi spostarsi nella directory /etc dove presente un

file services

Comando greps Vediamo alcuni esempi: grep n tcpmux services grep in tcp services grep c tcp services

s Il risultato: restituisce il numero di riga della stringa cercata nel file services come prima, solo che la ricerca case insensitive restituisce il numero di righe che hanno un match positivo

Esercitazione

Gestione dei dischi

Memoria di massas La memoria di massa viene utilizzata come supporto non

volatile di memoria.s Molto utilizzati i dischi magnetici; ad esempio il disco fisso

(come memoria secondaria) e il floppy disk (come supporto rimovibile)s I dischi hanno un accesso diretto, ma permettono anche un

accesso sequenziales Hanno una serie di qualit tecniche che non elenchiamo s Conoscete a grandi linee la struttura a basso e medio livello dei

dischi

Inizializzazione di file systems Prima di poter utilizzare un file system bisogna compiere una

serie di operazioni che inizializzano il disco:inizializzazione a basso livello eventuale suddivisione in partizioni creazione della struttura iniziale

s La prima operazione consiste nella formattazione s La seconda divide il disco in pi parti: unutilit delle partizione

quella di installarci diversi sistemi operativis La terza crea il tipo di file system che si vuole utilizzare

Inizializzaziones Per i dischi il format unistruzione passata direttamente agli

strumenti firmware (controller dei dischi)s Per formattare un disco rimovibile si usa il comando fdformat: fdformat [-n] dispositivo

con lopzione n non effettua il controllo alla fine

fdformat /dev/fd0

formatta il floppy

s Il comando badblocks serve ad effettuare una ricerca dei

blocchi difettosi: badblocks [opzioni] dispositivo [fine] [inizio]

Partizionis Il comando badblocks /dev/hda 100 1 effettua il controllo

sul disco partendo dal primo blocco e fermandosi al numero 100

s Un disco fisso pu contenere pi di una partizione e una

partizione pu essere formata da pi di un discos I dischi vengono indicati con hda, hdb, , sda, sdb, , dove i

primi sono dischi ATA e gli altri SCSI (o SATA, USB, ...)s Le partizioni vengono indicate con hda1, hda2, dove abbiamo

indicato partizioni dello stesso disco (hda1, hdb1 sono dischi diversi che formano una partizione)s Se si vuole installare Linux su una macchina e lasciare un altro

sistema operativo bisogna avere pi partizioni

Partizionis Per partizionare il disco si pu usare il programma fdisk s Permette di creare partizioni primarie, estese: permette di creare massimo quattro partizioni primarie si pu creare una partizione estesa che contiene molte partizioni logiche

s Se vogliamo installare Linux e mantenere Windows: creare due partizioni primarie creare una partizione estesa creare una partizione logica di swap dentro quella estesa

s Il comando fdisk /dev/hda interattivo

Esempios Partizioniamo il disco (ATTENZIONE NON PREMERE W):

cancellare le partizioni esistenti (d) creare una partizione (n) primaria (p) o estesa (e) controllare (p) modificare in NTFS (t) creare una per Linux native creare una estesa creare una di logica di swap uscire senza scrivere (q)

s Il comando cfdisk contiene le stesse funzioni, ha solo

uninterfaccia pi friendly

Mount di file systems Prima di poter accedere al file system, bisogna montarlo: questa

operazione richiede un punto dinnesto (o mountpoint)s Dopo aver montato il file system, possiamo accedervi tramite il

punto dinnestos Il file /etc/fstab specifica le caratteristiche e i punti di innesto dei

vari file system; in questo file si possono specificare i file system che devono essere montati automaticamentes Questo file formato da record: nel primo c il nome del file system nel secondo la directory dinnesto nel terzo il tipo di file system

Mount di file systemnel quarto ci vanno opzioni speciali per il file system nel quinto si specifica se pu essere effettuato il dumping del file system nel sesto viene specificato lordine con cui effettuare il controllo di integrit

s Il file /etc/mtab ha la stessa notazione di /etc/fstab, ma contiene

un elenco dei file system montatis Per effettuare il mount di un file system si utilizza il comando

mount: mount [opzioni] [dispositivo] [directory]

bisogna indicare il dispositivo dove si trova il file system da montare e la directory dinnesto

Mount di file systems Tra le opzioni: -a per montare tutti i file system in /etc/fstab (ad eccezione di

quelli con opzione noauto) -t tipo_filesystem per specificare il tipo -o opzioni_speciali per specificare speciali opzioni s Esempio: montare un floppy nella directory /mnt mount /dev/fd0 /mnt

s Esempio: montare un cdrom nella directory /cdrom mount /dev/cdrom /cdrom

Mount di file systems Spesso capita di dover montare la pen-drive: bisogna inserirla e vedere come viene riconosciuta dal sistema, tramite il comando dmesg alla riga Attached scsi removable poi effettuare il mount specificando il tipo di file system: > mount t vfat /dev/sdb1 /floppy > effettua il mount nella directory dinnesto dei floppy di un file

system creato da Windows s Alla fine bisogna smontare il file system col comando umount: umount [opzioni] [dispositivo] [directory]

valgono le opzioni -a e t del comando mount

Comando dfs Il comando df elenca lo spazio libero delle partizioni: df [opzioni] [dispositivo]

s Tra le opzioni: -i per sapere gli i-node liberi -h per specificare lunit di misura

DIIGA - Universit Politecnica delle Marche A.A. 2009/10

Esercitazione di laboratorio

Utenti Gruppi Password

Controllo degli accessis Linux un sistema multiutente, rende cio possibile lutilizzo

simultaneo di una macchina da parte di pi utenti.s Laccesso pu avvenire da terminali locali connessi attraverso

porte seriali, terminali locali connessi attraverso una rete locale e terminali remoti connessi attraverso il modem.s Ogni utente che accede deve avere un account, cio deve

essere stato registrato precedentemente con un nome (username) e una parola di accesso segreta (password).s La fase in cui un utente viene riconosciuto e quindi abilitato

allaccesso, detta login. La conclusione dell'attivit detta logout.

Tipologie di utentis La multiutenza implica una distinzione tra i vari utenti. Prima

distinzione: l'amministratore del sistema e gli altri utenti.s L'amministratore del sistema (superuser) quell'utente che non

ha restrizioni nelluso e che pu quindi modificare le caratteristiche del sistema.s L'utente comune utilizza il sistema senza poter cambiare la sua

organizzazione e senza poter avviare programmi o accedere a dati che non lo riguardano.s Ogni utente ha una directory personale (home), abbreviata nei

percorsi con il simbolo tilde (~) o mediante ~username.

Definizione degli utentis Il nome dell'amministratore sempre root, quello degli altri

utenti viene deciso di volta in volta.s Ogni altro utente viene denominato con uno user name di al pi

8 caratteri, assegnato dall'amministratore del sistema.s Ad esso corrisponde biunivocamente uno user-id numerico

(UID), assegnato dal sistema.s User name e user-id sono pubblici.

Definizione dei gruppis Ogni utente pu far parte di uno o pi gruppi, definiti

dall'amministratore del sistema.s Ogni gruppo identificato da un group name di al pi 8

caratteri, associato biunivocamente ad un group-id numerico (GID).s Ad ogni istante, solo la appartenenza a un unico gruppo

attiva.s Il file pubblico /etc/group contiene la lista dei gruppi e delle

appartenenze.

superusers un utente privilegiato (user name = root) al quale sono

riservati i compiti di amministrazione del sistema.s Per quanto riguarda la gestione delle utenze e dei gruppi, le

funzioni principali sono:

la creazione, leliminazione delle utenze e la modifica delle loro caratteristiche, tramite i comandi: useradd, userdel, usermod. la creazione e leliminazione dei gruppi, mediante i comandi: addgrp, delgrp.

Comando ids id [opzione] s Il comandi Identifier visualizza user-id, user name, group-id e il

group name dell'utente (cio il gruppo attivo).s Lopzione -a permette di visualizzare tutti i gruppi di

appartenenza.s Esempio

$ id uid=207(tacconi) gid=100(nusmv)

Meccanismi di sicurezzas I meccanismi di sicurezza che Linux/Unix possiede per la

protezione da accessi indesiderati sono di tre tipi:

Accesso al sistema

L'uso del sistema consentito soltanto agli utenti autorizzati, mediante uno schema di login/logout.

Accesso ai files

L'accesso ai files consentito soltanto agli utenti autorizzati, mediante uno schema di permessi di accesso.

Accesso ai processi

L'accesso ai processi (ad esempio per terminarli) consentito solo agli utenti autorizzati.

Accesso al sistema (login)

Conservazione e controllo passwords Le password sono stringhe segrete registrate (in forma

nascosta) nel file di testo pubblico /etc/passwd assieme ad altre informazioni.s Ad ogni utente abilitato allaccesso corrisponde una riga del file

avente il seguente formato:

username:password:UID:GID:nome:home:shell

s Esempio rossi:x:502:100:Mario Rossi:/home/rossi:/bin/bash bianchi:x:504:100:Anna Bianchi:/home/bianchi:/bin/bash s Tramite questo file il sistema verifica la correttezza della

password e quindi autentica (identifica) lutente stesso.

Definizione e modifica passwords Ogni utente pu definire (e in seguito modificare) la propria

password con il comando passwd.s Esempio

$ passwd passwd: Changing password for tacconi Old password: New password: Re-enter new password:

Esempis $ passwd

passwd: Changing password for tacconi Old password: New password: Passwords must differ by at least 3 positions New password: Password is too short - must be at least 6 characters. New password: Password must contain at least two alphabetic characters and at least one numeric or special character. Too many failures - try later.

Uscita dal sistema (logout)s Il sistema prevede solitamente il comando exit o logout per

terminare lesecuzione di una shell aperta da un utente.s Se si tratta di una shell avviata automaticamente, il sistema

provveder ad avviare nuovamente la procedura di accesso.s Esempio

Red Hat Linux release 7.0 Kernel 2.2.16-22 on an i686 login: tacconi Password: Last login: Thu Apr 5 15:05:20 on tty1 (...sessione di lavoro...) [[email protected] tacconi]$ logout login:

Comando sus su [username] s Il comando substitute user permette di diventare l'utente

denominato username senza chiudere la sessione di lavoro.s Se il parametro username manca, si assume che il nuovo

utente sia il root.s Il sistema chiede la password dellutente di cui si vuole

assumere lidentit, impedendo cambiamenti non autorizzati.s Esempio

$ su rossi Password: su: incorrect password

Comando lasts last [username] s Consente di avere informazioni sugli ultimi accessi di un determinato

utente o, in assenza di username, di tutti gli ultimi accessi.s Esempio $ last tacconi

tacconi pts/0 193.205.129.33 Thu Apr 5 09:27 still logged in tacconi tty1 Thu Apr 5 09:26 still logged in tacconi tty1 Thu Apr 5 09:25 - 09:25 (00:00) tacconi pts/0 193.205.129.33 Thu Apr 5 09:24 - 09:26 (00:02) tacconi pts/1 193.205.129.33 Wed Apr 4 14:42 - 18:56 (04:13) tacconi tty1 Wed Apr 4 14:38 - 14:41 (00:02)

DIIGA - Universit Politecnica delle Marche A.A. 2009/10

Esercitazione di laboratorio

File System II

Tipologie di files Nei file system dei sistemi UNIX/Linux i files possono essere

suddivisi in tre grandi categorie: File ordinari Directory File speciali s Ricordiamo che il sistema assegna in modo biunivoco a ciascun

file un identificatore numerico, detto i-number (index-number), che gli permette di individuarlo allinterno del file system.

File Ordinaris I files ordinari sono caratterizzati dalle seguenti peculiarit:

sono costituiti da sequenze di byte (byte stream) possono contenere informazioni qualsiasi (dati, programmi sorgente, programmi oggetto,...) il sistema non impone per loro nessuna struttura interna

s Esempio:

Organizzazione dei files Per consentire all'utente di rintracciare facilmente i propri files, il

sistema permette di raggrupparli in directories, organizzate in una (unica) struttura gerarchicas Le directories sono sequenze di bytes come i files ordinari s Il loro contenuto una serie di directory entries, che definiscono

l'associazione fra gli i-number ed i filename mnemonici

Esempio

Percorsis Ogni file viene identificato univocamente specificando il suo

pathname, che individua il cammino dalla directory radice al file.

Organizzazione di un file system

Directories principalis /dev : contiene i files speciali associati ai dispositivi di I/O s /etc : contiene una serie di file di configurazione del sistema s /home : contiene le home directories degli utenti del sistema s /lib : contiene i file delle librerie condivise dalle applicazioni s /tmp : contiene i dati transitori delle applicazioni in esecuzione s /usr : contiene i componenti di supporto alle applicazioni

Home directorys Ad ogni utente viene assegnata, ad opera dellamministratore

del sistema, una directory di sua propriet (home directory) che ha come nome lo username dellutente assegnatario.s In genere le home directories sono sotto la cartella di

sistema /home

Pathnames Ogni file di un utente pu essere identificato univocamente

specificando solamente il suo percorso (pathname) relativo alla directory corrente.s Esempio

File Specialis Ogni dispositivo di I/O viene visto, a tutti gli effetti, come un file

(file speciale)s Le richieste di lettura/scrittura da/a files speciali si traducono in

operazioni di input/output dai/ai dispositivi associati.s Esempio:

La sigla tty (teletype) identifica un terminale generico, ad esempio la console (= tastiera + video).

Vantaggis Il sistema adotta un trattamento uniforme per i files e i dispositivi

di I/O, in modo che i programmi non sappiano se operano su un file o su un dispositivo.s In questo modo si ottiene lindipendenza delle applicazioni

dallhardware.