• Non ci sono risultati.

Lab. di Sistemi Operativi Esercitazioni proposte per la lezione dell’11 marzo 2011

N/A
N/A
Protected

Academic year: 2021

Condividi "Lab. di Sistemi Operativi Esercitazioni proposte per la lezione dell’11 marzo 2011"

Copied!
8
0
0

Testo completo

(1)

Lab. di Sistemi Operativi

Esercitazioni proposte per la lezione dell’11 marzo 2011

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

1. Elencare i file nella directory corrente

2. Elencare i file nella directory corrente visualizzando i permessi associati 3. Visualizzare il nome assoluto della directory corrente

4. Spostare la directory corrente alla radice del filesystem 5. Visualizzare il nome assoluto della directory corrente

6. Ritornare alla propria home indicandone il nome in modo assoluto; verificare l’operazione 7. Spostare la directory corrente alla radice del filesystem

8. Ritornare alla propria home indicandone il nome in modo relativo; verificare l’operazione 9. Spostare la directory corrente alla radice del filesystem

10. Ritornare alla propria home utilizzando il comando cd senza argomenti; verificare l’operazione 11. Copiare il file /usr/share/vim/vimrc nella directory corrente

12. Copiare il file /usr/share/vim/vimrc nella directory corrente attribuendo al nuovo file il nome ”file- copia”

13. Visualizzare i file nella directory corrente, comprendendo il file che iniziano con il punto 14. Cancellare il file ”vimrc” dalla home

15. Cancellare il file filecopia e .vimrc con una unica command line

16. Copiare /usr/share/vim/vimrc in .vimrc nella propria home e modifichiamolo con l’editor vim 17. Creiamo un file di nome prova con il vim, inserendo al suo interno la linea ”Questo e’ un file di prova”

18. Rendiamo il file prova illeggibile da tutti 19. Rendiamo il file leggibile dal solo proprietario

20. Verificare cosa avviene al file prova settando a 1 e 0 i 12 bit dei permessi 21. Rinominare il file prova in prova2

22. Eseguire un link di prova2 in prova

23. Eseguire un link simbolico di prova2 con il nome prova3

24. Invocare cat per visualizzare un file, ma utilizzando la ridirezione della shell

25. Utilizzare cat per creare in file, sempre mediante ridirezione della shell; cosa avviene se si esegue la ridirezione con due maggiori affiancati?

26. Creare e visualizzare una variabile d’ambiente

27. Creare e visualizzare una variabile d’ambiente contenente spazi

(2)

28. Combinare i comandi ps e grep per individuare i processi che eseguono bash; utilizzare un file tempo- raneo. Cosa fanno ps e grep? Utilizzare man ps e man grep per scoprirlo

29. Combinare i comandi ps e grep utilizzando il carattere di pipe 30. Cosa e’ cambiato? il S.O. ha creato un file temporaneo per voi o no?

31. Creiamo con il vim un file di nome script.sh ed inseriamo al suo interno una command line 32. Rendere il file eseguibile

33. Mettiamo in esecuzione il file script.sh (con e senza l’ausilio di source)

34. Modificare lo script in modo che venga visualizzato il nome dell’interprete. Utilizzare ”ls -l /proc/$$/exe”.

Chi esegue lo script?

35. Modifichiamo lo script in modo che la prima linea contenga solo i seguenti caratteri, senza virgolette:

”#!/bin/dash”. Chi esegue ora lo script?

36. (20 minuti circa) Creare uno script che crei un file regolare il cui nome risulta specificato dalla vari- abile di ambiente NOMEFILE; Supporre che tale variabile sia stata precedentemente impostata ed esportata. All’interno del file devono essere presenti i seguenti caratteri: Questo file contiene il carattere $.

37. (20 minuti circa) Creare uno script che crei un file regolare vuoto il cui nome risulta specificato dal primo argomento della linea di comando e che i permessi siano impostati con il valore ottale espresso dal secondo argomento.

38. (20 minuti circa) Creare uno script per la creazione automatica di uno script. Si salvi il file con il nome crea script.sh. Il nome del file da creare deve essere creato partendo da una stringa richiesta all’utente con il comando read, appendendo i caratteri ”.sh”. Lo script creato deve avere lo sha-bang in linea 1 e il bit di eseguibilit´a attivo per tutti gli utenti. Lettura e modifica consentiti solo al proprietario.

(3)

Soluzione

Esercitazioni proposte per la lezione dell’11 marzo 2011

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

1. Elencare i file nella directory corrente Soluzione:

ls

2. Elencare i file nella directory corrente visualizzando i permessi associati Soluzione:

ls -l

3. Visualizzare il nome assoluto della directory corrente Soluzione:

pwd

4. Spostare la directory corrente alla radice del filesystem Soluzione:

cd /

5. Visualizzare il nome assoluto della directory corrente Soluzione:

pwd

6. Ritornare alla propria home indicandone il nome in modo assoluto; verificare l’operazione Soluzione:

cd /home/nXXXXX pwd

7. Spostare la directory corrente alla radice del filesystem Soluzione:

cd /

8. Ritornare alla propria home indicandone il nome in modo relativo; verificare l’operazione Soluzione:

cd home/nXXXX pwd

9. Spostare la directory corrente alla radice del filesystem Soluzione:

cd /

10. Ritornare alla propria home utilizzando il comando cd senza argomenti; verificare l’operazione

(4)

Soluzione:

cd pwd

11. Copiare il file /usr/share/vim/vimrc nella directory corrente Soluzione:

# Copia di un file: comando cp sorgente destinazione: se la destinazione e’ una

# directory, il nome del file viene mantenuto:

cp /usr/share/vim/vimrc . ls

12. Copiare il file /usr/share/vim/vimrc nella directory corrente attribuendo al nuovo file il nome ”file- copia”

Soluzione:

# Copia di un file indicando il nome della copia:

cp /usr/share/vim/vimrc filecopia ls

13. Visualizzare i file nella directory corrente, comprendendo il file che iniziano con il punto Soluzione:

# Nomi di file "particolari": se il nome inizia con un punto il file non e’

# normalmente visibile

cp /usr/share/vim/vimrc .vimrc ls

# Visualizzare i file "nascosti" con ls ls -a

14. Cancellare il file ”vimrc” dalla home Soluzione:

# Cancellazione di file: il comando rm rm vimrc

15. Cancellare il file filecopia e .vimrc con una unica command line Soluzione:

rm filecopia .vimrc

16. Copiare /usr/share/vim/vimrc in .vimrc nella propria home e modifichiamolo con l’editor vim Soluzione:

# .vimrc sara’ il file di configurazione di vim per il nostro "utente".

# Molti programmi consentono una configurazione personalizzata tramite un file

# nella home che inizia con il punto e, di conseguenza, risulta normalmente invisibile.

cp /usr/share/vim/vimrc .vimrc vim .vimrc

17. Creiamo un file di nome prova con il vim, inserendo al suo interno la linea ”Questo e’ un file di prova”

Soluzione:

(5)

vim prova

# da vim, comando iQuesto e’ un file di prova<ESC>

# da vim, comando :wq

18. Rendiamo il file prova illeggibile da tutti Soluzione:

chmod a-r prova ls -l prova vim prova

# Il vim non mostrera’ il contenuto del file: non e’ leggibile 19. Rendiamo il file leggibile dal solo proprietario

Soluzione:

chmod u+r prova ls -l prova vim prova

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

chmod a-rwx prova ls -l prova chmod 00777 prova ls -l prova

21. Rinominare il file prova in prova2 Soluzione:

mv prova prova2 ls -l prova ls -l prova2

22. Eseguire un link di prova2 in prova Soluzione:

ln prova2 prova ls -l prova ls -l prova2

23. Eseguire un link simbolico di prova2 con il nome prova3 Soluzione:

ln -s prova2 prova3 ls -l prova*

24. Invocare cat per visualizzare un file, ma utilizzando la ridirezione della shell Soluzione:

cat < prova

25. Utilizzare cat per creare in file, sempre mediante ridirezione della shell; cosa avviene se si esegue la ridirezione con due maggiori affiancati?

(6)

Soluzione:

cat > prova cat >> prova

# La seconda command line esegue una ridirezione in append, quindi il contenuto

# precedente del file viene mantenuto.

# Ricordare il CTRL-D per indicare la fine del file 26. Creare e visualizzare una variabile d’ambiente

Soluzione:

variabile=valore echo $variabile

27. Creare e visualizzare una variabile d’ambiente contenente spazi Soluzione:

# Doppi apici:

variabile=un valore echo $variabile variabile="un valore"

echo $variabile

28. Combinare i comandi ps e grep per individuare i processi che eseguono bash; utilizzare un file tempo- raneo. Cosa fanno ps e grep? Utilizzare man ps e man grep per scoprirlo

Soluzione:

# Combinazione di comandi:

ps -A > tempfile grep bash < tempfile rm tempfile

# Cosa fa ps?

man ps

# Per uscire dal man, tasto q

29. Combinare i comandi ps e grep utilizzando il carattere di pipe Soluzione:

ps -A | grep bash

30. Cosa e’ cambiato? il S.O. ha creato un file temporaneo per voi o no?

Soluzione:

No! Il sistema operativo ha creato un canale di comunicazione fra i due processi ed ha provveduto alla sincronizzazione reciproca in modo che:

1) Il processo produttore (ps) venga interrotto quando ci sono troppi caratteri in attesa nel canale

2) Il processo utilizzatore (grep) venga svegliato quando ci sono caratteri da processare nel canale

31. Creiamo con il vim un file di nome script.sh ed inseriamo al suo interno una command line Soluzione:

(7)

vim script.sh

# Come convenzione, terminiamo il nome dei file in linguaggio shell con .sh

# inseriamo un comando shell, ad esempio:

echo "Ciao Mondo"

32. Rendere il file eseguibile Soluzione:

chmod 00744 script.sh

33. Mettiamo in esecuzione il file script.sh (con e senza l’ausilio di source) Soluzione:

source script.sh ./script.sh

34. Modificare lo script in modo che venga visualizzato il nome dell’interprete. Utilizzare ”ls -l /proc/$$/exe”.

Chi esegue lo script?

Soluzione:

# Chi esegue il file per voi?

# Aggiungiamo nello script la linea:

35. Modifichiamo lo script in modo che la prima linea contenga solo i seguenti caratteri, senza virgolette:

”#!/bin/dash”. Chi esegue ora lo script?

Soluzione:

I n s e r i a m o un commento i n prima l i n e a :

#! / b i n / d a s h

l s − l / p r o c / $$ / e x e

I l programma ( s h e l l ) c h e e s e g u e s c r i p t . sh o r a non e ’ sh ma dash ( s i n t a s s i s i m i l e ma non c o m p a t i b i l e ) . Fortunatamente l a command l i n e c o n t e n u t a n e l l o s c r i p t v i e n e i n t e r p r e t a t a a l l o s t e s s o modo ma , t i p i c a m e n t e , uno s c r i p t s c r i t t o i n l i n g u a g g i o bash non puo ’ e s s e r e i n t e r p r e t a t o da a l t r e s h e l l . I l commento i n l i n e a 1 , q u i n d i , e ’ f o n d a m e n t a l e p e r g a r a n t i r e c he

l ’ i n t e r p r e t e s i a q u e l l o g i u s t o . Se i l commento f o s s e a s s e n t e , l a s e l e z i o n e d e l l ’ i n t e r p r e t e s a r e b b e d i p e n d e n t e d a l l a c o n f i g u r a z i o n e d e l s i s t e m a e d a l l e p r e f e r e n z e d e l l ’ u t e n t e . Uno s c r i p t ben p r o g e t t a t o deve , p e r t a n t o , d i c h i a r a r e l ’ i n t e r p r e t e da u t i l i z z a r e ( e s i s t o n o t a n t i l i n g u a g g i

d i s c r i p t o l t r e a l l e v a r i e s h e l l , come i l p e r l o i l php ad e s e m p i o ) . S u l l e n o s t r e macchine , sh , bash e mosh s o n o l i n k a l medesimo f i l e / b i n / bash 36. (20 minuti circa) Creare uno script che crei un file regolare il cui nome risulta specificato dalla vari-

abile di ambiente NOMEFILE; Supporre che tale variabile sia stata precedentemente impostata ed esportata. All’interno del file devono essere presenti i seguenti caratteri: Questo file contiene il carattere $.

Soluzione:

#! / b i n / s h

echo ’ Questo f i l e c o n t i e n e i l c a r a t t e r e $ ’ > $NOMEFILE

(8)

37. (20 minuti circa) Creare uno script che crei un file regolare vuoto il cui nome risulta specificato dal primo argomento della linea di comando e che i permessi siano impostati con il valore ottale espresso dal secondo argomento.

Soluzione:

#! / b i n / s h

> ” $1 ”

chmod ” $2 ” ” $1 ”

38. (20 minuti circa) Creare uno script per la creazione automatica di uno script. Si salvi il file con il nome crea script.sh. Il nome del file da creare deve essere creato partendo da una stringa richiesta all’utente con il comando read, appendendo i caratteri ”.sh”. Lo script creato deve avere lo sha-bang in linea 1 e il bit di eseguibilit´a attivo per tutti gli utenti. Lettura e modifica consentiti solo al proprietario.

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

Riferimenti

Documenti correlati

(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

(30 minuti) es47p.sh Controllo parametri della parte shell del compito del 7 luglio 2009: La parte in Shell deve prevedere due parametri: il primo deve essere il nome assoluto di

(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;