• Non ci sono risultati.

Lab. di Sistemi Operativi Esercitazioni proposte per la lezione del 18 marzo 2011

N/A
N/A
Protected

Academic year: 2021

Condividi "Lab. di Sistemi Operativi Esercitazioni proposte per la lezione del 18 marzo 2011"

Copied!
8
0
0

Testo completo

(1)

Lab. di Sistemi Operativi

Esercitazioni proposte per la lezione del 18 marzo 2011

Utilizzando la shell di Linux e disponendosi in gruppi di due persone per ogni PC del laboratorio.

1. Creare una directory nella propria home di nome ”miadir”

2. Invocare ls per visualizzare il contenuto di miadir

3. Invocare ls per visualizzare il nome e gli attributi della directory miadir 4. Rendiamo la directory miadir illeggibile da tutti

5. Invochiamo nuovamente ls per visualizzare la directory poi il suo contenuto 6. Rendiamo il file leggibile dal solo proprietario

7. Verificare cosa avviene al file prova settando a 1 e 0 i 12 bit dei permessi

8. Impostare il bit di eseguibilit`a di miadir a zero per tutti. Provare a spostare la directory corrente in miadir

9. Impostare il bit di eseguibilit`a di miadir a uno per tutti. Provare a spostare la directory corrente in miadir

10. Spostare la directory corrente al di fuori di miadir, utilizzando il link ”..”

11. Eliminare la directory miadir

12. Creare nuovamente la directory miadir e popolarla con qualche file 13. Provare ad eliminare la directory miadir

14. Utilizzare il comando ”rm” per eliminare miadir ed il suo contenuto.

15. Invocare il comando true e visualizzarne l’exit value 16. Invocare il comando false e visualizzarne l’exit value

17. Creare uno shell script che invochi il comando true e ne visualizzi l’exit value 18. Fare lo stesso con il comando false

19. Creare uno shell script che controlli l’exit value di true e stampi ”vero” su stdout in caso affermativo 20. Creare la variabile d’ambiente ”var1” ed assegnarle il valore ”ciao”

21. Utilizzando la man page del comando test, invocarlo da linea di comando con gli argomenti necessari a verificare che la variabile d’ambiente ”var1” sia uguale alla stringa ciao; visualizzare l’exit value 22. Assegnare alla variabile precedente il valore di stringa nulla o ””

23. Ripetere l’invocazione precedente del comando test ed analizzare il comportamento della shell. Con quali argomenti viene invocato il comando test?

24. Trovare un metodo per eseguire il test anche con stringhe vuote

25. Creare uno shell script che stampi su stdout il messaggio ”vero” se il suo primo argomento `e uguale alla stringa ciao.

26. Creare uno shell script che stampi su stdout il messaggio ”vero” se il suo primo argomento `e uguale alla stringa 123.

(2)

27. Si modifichi lo script precedente in modo che il test venga eseguito sulla rappresentazione numerica della variabile; cosa avviene se lo script viene invocato senza argomenti?

28. Aggiungere un controllo preventivo sulla presenza di almeno un argomento nella linea di comando 29. Visualizzare l’exit value di test quando incontra un errore, ad esempio in test abc -eq 123. Confrontarlo

con l’exit value di condizione vera e di condizione falsa

30. Modificare lo script precedente in modo da visualizzare il messaggio ”errore” in caso di argomento non numerico; si ridirezioni il messaggio di errore del comando test (standard error) su /dev/null

31. (20 minuti) Creare uno script che controlli di essere invocato con esattamente 1 argomento e che tale argomento rappresenti un nome di directory esistente e leggibile nel filesystem

32. (20 minuti) Creare uno script che controlli di essere invocato con esattamente 2 argomenti e, se il primo argomento rappresenta una directory esistente e scrivibile, allora creare al suo interno un file con il nome passato come secondo argomento e contenente il nome assoluto della directory indicata come primo argomento. Nota: la directory deve anche essere esplorabile?

33. (20 minuti) Possiamo migliorare il nostro crea script.sh in modo che lo script generato esegua un controllo sul numero dei parametri dopo aver chiesto all’utente se esiste un numero minimo?

(3)

Soluzione

Esercitazioni proposte per la lezione del 18 marzo 2011

Utilizzando la shell di Linux e disponendosi in gruppi di due persone per ogni PC del laboratorio.

1. Creare una directory nella propria home di nome ”miadir”

Soluzione:

mkdir miadir

2. Invocare ls per visualizzare il contenuto di miadir Soluzione:

ls miadir

3. Invocare ls per visualizzare il nome e gli attributi della directory miadir Soluzione:

ls -l -d miadir ls -ld miadir

# Piu’ opzioni, come -l e -d, possono essere normalmente composte

# in una opzione singola -ld

4. Rendiamo la directory miadir illeggibile da tutti Soluzione:

chmod a-r miadir

5. Invochiamo nuovamente ls per visualizzare la directory poi il suo contenuto Soluzione:

ls -ld miadir ls miadir

6. Rendiamo il file leggibile dal solo proprietario Soluzione:

chmod u+r miadir ls -ld miadir ls miadir

7. Verificare cosa avviene al file prova settando a 1 e 0 i 12 bit dei permessi Soluzione:

chmod 00000 miadir ls -ld miadir ls miadir

chmod 00001 miadir ls -ld miadir ls miadir

chmod 00002 miadir ls -ld miadir ls miadir

(4)

...

chmod 04000 miadir ls -ld miadir ls miadir

8. Impostare il bit di eseguibilit`a di miadir a zero per tutti. Provare a spostare la directory corrente in miadir

Soluzione:

chmod a-x miadir cd miadir

9. Impostare il bit di eseguibilit`a di miadir a uno per tutti. Provare a spostare la directory corrente in miadir

Soluzione:

chmod a+x miadir cd miadir

10. Spostare la directory corrente al di fuori di miadir, utilizzando il link ”..”

Soluzione:

cd ..

# In ogni directory, esiste un link di nome ".." alla directory

# di livello superiore 11. Eliminare la directory miadir

Soluzione:

rmdir miadir

12. Creare nuovamente la directory miadir e popolarla con qualche file Soluzione:

mkdir miadir touch miadir/a touch miadir/b

13. Provare ad eliminare la directory miadir Soluzione:

rmdir miadir

14. Utilizzare il comando ”rm” per eliminare miadir ed il suo contenuto.

Soluzione:

rm -Rf miadir

# Attenzione a questo comando!

15. Invocare il comando true e visualizzarne l’exit value Soluzione:

true echo $?

(5)

16. Invocare il comando false e visualizzarne l’exit value Soluzione:

false echo $?

17. Creare uno shell script che invochi il comando true e ne visualizzi l’exit value Soluzione:

#! / b i n / s h true echo $ ?

18. Fare lo stesso con il comando false Soluzione:

#! / b i n / s h f a l s e echo $ ?

19. Creare uno shell script che controlli l’exit value di true e stampi ”vero” su stdout in caso affermativo Soluzione:

#! / b i n / s h i f true then

echo v e r o f i

20. Creare la variabile d’ambiente ”var1” ed assegnarle il valore ”ciao”

Soluzione:

var1=ciao

21. Utilizzando la man page del comando test, invocarlo da linea di comando con gli argomenti necessari a verificare che la variabile d’ambiente ”var1” sia uguale alla stringa ciao; visualizzare l’exit value Soluzione:

test $var1 = ciao echo $?

22. Assegnare alla variabile precedente il valore di stringa nulla o ””

Soluzione:

var1=""

23. Ripetere l’invocazione precedente del comando test ed analizzare il comportamento della shell. Con quali argomenti viene invocato il comando test?

Soluzione:

test $var1 = ciao

24. Trovare un metodo per eseguire il test anche con stringhe vuote

(6)

Soluzione:

test "$var1" = ciao test B$var1 = Bciao

25. Creare uno shell script che stampi su stdout il messaggio ”vero” se il suo primo argomento `e uguale alla stringa ciao.

Soluzione:

#! / b i n / s h

i f t e s t ” $1 ” = c i a o then

echo v e r o f i

26. Creare uno shell script che stampi su stdout il messaggio ”vero” se il suo primo argomento `e uguale alla stringa 123.

Soluzione:

#! / b i n / s h

i f t e s t ” $1 ” = 123 then

echo v e r o f i

27. Si modifichi lo script precedente in modo che il test venga eseguito sulla rappresentazione numerica della variabile; cosa avviene se lo script viene invocato senza argomenti?

Soluzione:

#! / b i n / s h

i f t e s t ” $1 ” −eq 123 then

echo v e r o f i

28. Aggiungere un controllo preventivo sulla presenza di almeno un argomento nella linea di comando Soluzione:

#! / b i n / s h

i f t e s t $# −g e 1 then

i f t e s t ” $1 ” −eq 123 then

echo v e r o f i

f i

29. Visualizzare l’exit value di test quando incontra un errore, ad esempio in test abc -eq 123. Confrontarlo con l’exit value di condizione vera e di condizione falsa

Soluzione:

(7)

test abc -eq 123 echo $?

test 123 -eq 123 echo $?

test 124 -eq 124 echo $?

30. Modificare lo script precedente in modo da visualizzare il messaggio ”errore” in caso di argomento non numerico; si ridirezioni il messaggio di errore del comando test (standard error) su /dev/null

Soluzione:

#! / b i n / s h

i f t e s t $# −g e 1 then

t e s t ” $1 ” −eq 123 2> / dev / n u l l i f t e s t $ ? −eq 2

then

echo e r r o r e f i

f i

31. (20 minuti) Creare uno script che controlli di essere invocato con esattamente 1 argomento e che tale argomento rappresenti un nome di directory esistente e leggibile nel filesystem

Soluzione:

#! / b i n / s h

i f t e s t $# −e q 1 then

i f t e s t −d ” $1 ” −a −r ” $1 ” then

echo ” i n v o c a z i o n e c o r r e t t a ” e x i t

f i f i

echo ” i n v o c a z i o n e e r r a t a ”

32. (20 minuti) Creare uno script che controlli di essere invocato con esattamente 2 argomenti e, se il primo argomento rappresenta una directory esistente e scrivibile, allora creare al suo interno un file con il nome passato come secondo argomento e contenente il nome assoluto della directory indicata come primo argomento. Nota: la directory deve anche essere esplorabile?

Soluzione:

#! / b i n / s h

i f t e s t $# −e q 2 then

i f t e s t −d ” $1 ” −a −w ” $1 ” then

cd ” $1 ” pwd > ” $2 ”

echo ” f i l e c r e a t o ” e l s e

echo ” i m p o s s i b i l e c r e a r e ”

(8)

f i e x i t f i

echo ” p o c h i a r g o m e n t i ”

33. (20 minuti) Possiamo migliorare il nostro crea script.sh in modo che lo script generato esegua un controllo sul numero dei parametri dopo aver chiesto all’utente se esiste un numero minimo?

Soluzione:

#! / b i n / s h

# c r e a s c r i p t : s c r i p t p e r c r e a r e a l t r i s c r i p t

#

# R i c h i e s t a i n t e r a t t i v a d e l nome d e l f i l e da c r e a r e :

echo −n ”Nome d e l l o s c r i p t da c r e a r e , s e n z a . sh ” ; read n o m e f i l e

# A g g i u n t a d e l l ’ e s t e n s i o n e . s h : n o m e f i l e=$ { n o m e f i l e } . sh

# C r e a z i o n e d e l f i l e ( v u o t o )

>$ n o m e f i l e

# M o d i f i c a d e i p e r m e s s i : t u t t i l o p o s s o n o e s e g u i r e , s o l o i l p r o p r i e t a r i o puo ’

# l e g g e r l o o m o d i f i c a r l o chmod 00711 $ n o m e f i l e

# A g g i u n t a d e l l o s h a r p −bang echo ” #!/ b i n / sh ” >>$ n o m e f i l e

# R i c h i e s t a d e l numero minimo d i a r g o m e n t i c h e l o s c r i p t a c c e t t a echo −n ”Numero minimo d i a r g o m e n t i , 0 p e r n e s s u n c o n t r o l l o ” read m i n a r g s

# Siamo s i c u r i c h e l ’ u t e n t e a b b i a immesso un numero?

t e s t $ m i n a r g s −eq 0 2>/dev / n u l l i f t e s t $ ? −eq 2

then

echo ” V a l o r e non v a l i d o ” e x i t

f i

i f t e s t $ m i n a r g s −g t 0 then

echo ’ i f t e s t $# − l t ’ $ m i n a r g s >> $ n o m e f i l e echo ’ then ’ >> $ n o m e f i l e

echo $ ’ \ t ’ ’ echo ”Numero a r g o m e n t i e r r a t o ” ’ >> $ n o m e f i l e echo $ ’ \ t ’ ’ e x i t 1 ’ >> $ n o m e f i l e

echo ’ f i ’ >> $ n o m e f i l e f i

Riferimenti

Documenti correlati

(40 minuti) es51p.sh Controllo parametri della parte shell del compito del 17 luglio 2007: La parte in Shell deve prevedere tre parametri: il primo deve essere il nome assoluto di

(15 minuti) es62p.sh Controllo parametri della parte shell del compito del 6 febbraio 2009 : La parte in Shell deve prevedere tre parametri: il primo deve essere il nome assoluto di

, FN e riportare su stdout un carattere di ogni file indicato, il primo carattere del primo file F1, l’ultimo carat- tere dell’ultimo file FN, il secondo carattere del secondo file

(15 minuti) es88.c Recupero degli exit value dei processi figli: modificare es88.c in modo che il processo padre attenda la terminazione di tutti i processi figli riportando su

Far creare al padre N processi (con N valore del primo argomento) ed utilizzare una singola pipe per passare una struttura di dati da ogni figlio al

Ognuno di tali processi figli deve creare un file il cui nome (FiK) risulti dalla concatenazione del nome del file associato (Fi) con la stringa che corrisponde al numero K;

Determinare con un programma c (es111.c) il segnale che causa la terminazione di un processo figlio quando questo tenta di scrivere su una pipe con lato di lettura chiuso

(10 minuti) es55p.sh Controllo parametri della parte shell del compito del 6 febbraio 2009 : La parte in Shell deve prevedere tre parametri: il primo deve essere il nome assoluto di