introduzione all'uso del computer

273
1*

Upload: effie

Post on 11-Jan-2016

81 views

Category:

Documents


0 download

DESCRIPTION

Introduzione all'uso del computer. U. n. i. x. Gianluigi Boca [email protected]. Trasparenze disponibili su Web all'indirizzo http://www.pv.infn.it/~boca/lezioni/unix/index.htm. The Linux Users' Guide http://www.linuxhq.com/guides/LUG/guide.html. Referenze. Advanced Linux Programming - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Introduzione all'uso del computer

1*

Page 2: Introduzione all'uso del computer

2*

Page 3: Introduzione all'uso del computer

3*

Page 4: Introduzione all'uso del computer

4*

Page 5: Introduzione all'uso del computer

5*

QQuesto capitolo tratta di sistemi di numerazione a base diversa da quella decimale allauesto capitolo tratta di sistemi di numerazione a base diversa da quella decimale alla

quale siamo abituati. Impareremoquale siamo abituati. Impareremo i i numeri binari numeri binari vale a dire quelli con base vale a dire quelli con base 22,, i i numerinumeriottaliottali, cioe’ quelli con base , cioe’ quelli con base 88,, ed i ed i numeri esadecimalinumeri esadecimali, cioe’ quelli con base , cioe’ quelli con base 1616..

Vedremo che questi sistemi di numerazione sono piu’ utili di quello decimale per descivereil contenuto di una qualunque cella di memoria o registro del computer. Questo poiche’questi ultimi sono sempre composti o da circuiti elettronici o da dispositivi magnetici o dadispositivi ottici che possono assumere solo 2 possibili stati (ON ed OFF; magnetizzazioneYES or NO; superficie riflettente o non riflettente etc.) Cosi’ il sistema binario, cioe’ quelloche usa solo 2 cifre per descrivere i numeri, diventa il modo piu’ naturale da usare con uncomputer, per contare i numeri. L’utilita’ della numerazione ottale ed esadecimalediscende in sostanza dal fatto che sono sistemi di numerazione piu’ sintetici (uno stessonumero in ottale od esadecimale e’ molto piu’ corto del corrispondente binario) che sipossono molto facilmente e direttamente trasformare nel corrispondente numero binario.

Page 6: Introduzione all'uso del computer

6*

La La basebase di un sistema di numerazione di un sistema di numerazione e’ il numero di simboli (cifre) usati e’ il numero di simboli (cifre) usati per descrivere i numeri. Il sistema per descrivere i numeri. Il sistema binario usa solo due cifre : binario usa solo due cifre : 0 0 ed ed ; ; quello ottale usa otto cifre : quello ottale usa otto cifre : 00, , , , 22,, 3 3, , 44, , 55, , 66, , 77 ; quello decimale, come e’ ; quello decimale, come e’ noto, ne usa dieci , dallonoto, ne usa dieci , dallo 0 0 al al 99 ; infine ; infine quello esadecimale ne usa sedici : quello esadecimale ne usa sedici : 00, , , , 22, , 33, , 44,, 5 5, , 66, , 77, , 88, , 99, , AA, , BB, , CC, , DD, , EE, , FF..In tutti i sistemi di numerazione, In tutti i sistemi di numerazione, analogamente al caso della analogamente al caso della numerazione decimale, si usa la numerazione decimale, si usa la notazionenotazione posizionaleposizionale

00 11 22 33 44 55 66 77 88 991010

Base Base 1010Base Base 1010

111111221133114411551166117711881199

ho finito le cifre, metto ho finito le cifre, metto 11 in una in una colonna piu’ a sinistra e nella colonna piu’ a sinistra e nella colonna piu’ a destra riparto dacolonna piu’ a destra riparto da 00

ho finito le cifre, metto ho finito le cifre, metto 11 in una in una colonna piu’ a sinistra e nella colonna piu’ a sinistra e nella colonna piu’ a destra riparto dacolonna piu’ a destra riparto da 00

10101010

ho finito le cifre, metto ho finito le cifre, metto 22 nella nella colonna piu’ a sinistra e nella colonna piu’ a sinistra e nella colonna piu’ a destra riparto dacolonna piu’ a destra riparto da 00

ho finito le cifre, metto ho finito le cifre, metto 22 nella nella colonna piu’ a sinistra e nella colonna piu’ a sinistra e nella colonna piu’ a destra riparto dacolonna piu’ a destra riparto da 00202020202020

Numeri decimali, Numeri decimali, notazione posizionale notazione posizionale ::xxxx

Numeri decimali, Numeri decimali, notazione posizionale notazione posizionale ::xxxx

7.1 Numerazioni con basi 2, 8, 167.1 Numerazioni con basi 2, 8, 167.1 Numerazioni con basi 2, 8, 167.1 Numerazioni con basi 2, 8, 16

Page 7: Introduzione all'uso del computer

7*

00 11 22 33 44 55 66 77 88 991010

Base Base 1010Base Base 1010

1111112211331144115511661177118811992020

7.1 Numerazioni con basi 2, 8, 167.1 Numerazioni con basi 2, 8, 167.1 Numerazioni con basi 2, 8, 167.1 Numerazioni con basi 2, 8, 16

Base Base 22Base Base 22

00 111010101010101111

100100100100100100 101101 110110 111111 10001000 10011001 10101010 10111011 11001100 11011101 11101110 1111111110000100001000110001100101001010011100111010010100

ho finito le cifre, metto ho finito le cifre, metto 11 in una colonna piu’ a sinistra e in una colonna piu’ a sinistra e nella colonna piu’ a destra riparto danella colonna piu’ a destra riparto da 00

ho finito le cifre, metto ho finito le cifre, metto 11 in una colonna piu’ a sinistra e in una colonna piu’ a sinistra e nella colonna piu’ a destra riparto danella colonna piu’ a destra riparto da 00

ho finito le cifre, metto ho finito le cifre, metto 11 in una colonna piu’ a sinistra e in una colonna piu’ a sinistra e nelle colonne piu’ a destra riparto danelle colonne piu’ a destra riparto da 00, etc., etc.

ho finito le cifre, metto ho finito le cifre, metto 11 in una colonna piu’ a sinistra e in una colonna piu’ a sinistra e nelle colonne piu’ a destra riparto danelle colonne piu’ a destra riparto da 00, etc., etc.

Numeri binariNumeri binari traduzione in numero decimale :traduzione in numero decimale :xxxxx

Numeri binariNumeri binari traduzione in numero decimale :traduzione in numero decimale :xxxxx

Page 8: Introduzione all'uso del computer

8*

00 11 22 33 44 55 66 77 88 991010

Base Base 1010Base Base 1010

1111112211331144115511661177118811992020

7.1 Numerazioni con basi 2, 8, 167.1 Numerazioni con basi 2, 8, 167.1 Numerazioni con basi 2, 8, 167.1 Numerazioni con basi 2, 8, 16

Base Base 22Base Base 22

00 1110101111

100100 101101 110110 111111 10001000 10011001 10101010 10111011 11001100 11011101 11101110 1111111110000100001000110001100101001010011100111010010100

Base Base 88Base Base 88

ho finito le cifre, metto ho finito le cifre, metto 11 in una colonna piu’ in una colonna piu’a sinistra e nella colonna piu’ a destra riparto a sinistra e nella colonna piu’ a destra riparto dada 00

ho finito le cifre, metto ho finito le cifre, metto 11 in una colonna piu’ in una colonna piu’a sinistra e nella colonna piu’ a destra riparto a sinistra e nella colonna piu’ a destra riparto dada 00

ho finito le cifre, metto ho finito le cifre, metto 11 in una colonna piu’ a in una colonna piu’ a sinistra e nelle colonne piu’ a destra riparto sinistra e nelle colonne piu’ a destra riparto dada 00, etc., etc.

ho finito le cifre, metto ho finito le cifre, metto 11 in una colonna piu’ a in una colonna piu’ a sinistra e nelle colonne piu’ a destra riparto sinistra e nelle colonne piu’ a destra riparto dada 00, etc., etc.

00 11 22 33 44 55 66 77

10101010101011111212131314141515161617172020202020202121222223232424

Numeri ottaliNumeri ottalitraduzione in numero decimale :traduzione in numero decimale :172.6(8) 1 x 82 + 7 x 81 + 2 x 80 + 6 x 81 = 122.75 (10)

Numeri ottaliNumeri ottalitraduzione in numero decimale :traduzione in numero decimale :172.6(8) 1 x 82 + 7 x 81 + 2 x 80 + 6 x 81 = 122.75 (10)

Page 9: Introduzione all'uso del computer

9*

00 11 22 33 44 55 66 77 88 991010

Base Base 1010Base Base 1010

1111112211331144115511661177118811992020

7.1 Numerazioni con basi 2, 8, 167.1 Numerazioni con basi 2, 8, 167.1 Numerazioni con basi 2, 8, 167.1 Numerazioni con basi 2, 8, 16

Base Base 22Base Base 22

00 1110101111

100100 101101 110110 111111 10001000 10011001 10101010 10111011 11001100 11011101 11101110 1111111110000100001000110001100101001010011100111010010100

Base Base 88Base Base 88 Base Base 1616Base Base 1616

ho finito le cifre, metto ho finito le cifre, metto 11 in in una colonna piu’ a sinistra e una colonna piu’ a sinistra e nelle colonne piu’ a destra nelle colonne piu’ a destra riparto dariparto da 00, etc., etc.

ho finito le cifre, metto ho finito le cifre, metto 11 in in una colonna piu’ a sinistra e una colonna piu’ a sinistra e nelle colonne piu’ a destra nelle colonne piu’ a destra riparto dariparto da 00, etc., etc.

Numeri esadecimaliNumeri esadecimali traduzione in numero decimale :traduzione in numero decimale :B2.6(16) x + x+2 x 160+6x

=

Numeri esadecimaliNumeri esadecimali traduzione in numero decimale :traduzione in numero decimale :B2.6(16) x + x+2 x 160+6x

=

00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF

1010101010101111121213131414

20202121222223232424

1111121213131414151516161717

00 11 22 33 44 55 66 77

1010

Page 10: Introduzione all'uso del computer

10*

7.2 Come passare da un numero decimale al7.2 Come passare da un numero decimale al corrispondente binario, ottale, esadecimalecorrispondente binario, ottale, esadecimale7.2 Come passare da un numero decimale al7.2 Come passare da un numero decimale al corrispondente binario, ottale, esadecimalecorrispondente binario, ottale, esadecimale

Direttamente con degli esempi, facciamo vedere coma passare da un numero decimale Direttamente con degli esempi, facciamo vedere coma passare da un numero decimale al corrispondente binario, ottale, esadecimale.al corrispondente binario, ottale, esadecimale.

Esempio : passare da 29.2 (decimale) al corrispettivo binarioEsempio : passare da 29.2 (decimale) al corrispettivo binarioEsempio : passare da 29.2 (decimale) al corrispettivo binarioEsempio : passare da 29.2 (decimale) al corrispettivo binario

Si considera prima la parte intera, eseguendo Si considera prima la parte intera, eseguendo divisionidivisioni successive successive per per 22 fino a quando il risultato fa fino a quando il risultato fa 00. Le cifre ottenute sono la parte . Le cifre ottenute sono la parte intera del numero binario corrispondente a quello decimale.intera del numero binario corrispondente a quello decimale.11

il risultato della divisione e’ 0, il procedimento e’finito

il risultato della divisione e’ 0, il procedimento e’finito

Il resto della divisione diventa una cifra binaria

Il resto della divisione diventa una cifra binaria

primo resto : ciframeno significativa

primo resto : ciframeno significativa

ultimo resto : cifrapiu’ significativa

ultimo resto : cifrapiu’ significativa

Page 11: Introduzione all'uso del computer

11*

Si considera poi la parte decimale, eseguendo Si considera poi la parte decimale, eseguendo moltiplicazioni moltiplicazioni successive per successive per 22 fino fino a quando il risultato fa a quando il risultato fa 0 0 oppure finche’ si e’ raggiunta la precisione desiderata.oppure finche’ si e’ raggiunta la precisione desiderata.Le cifre ottenute sono la parte a destra del punto.Le cifre ottenute sono la parte a destra del punto.22

x x xx x x xx

La parte intera del risultato diventa una cifra binaria. La parte decimale viene ancora moltiplicata per labase 2

La parte intera del risultato diventa una cifra binaria. La parte decimale viene ancora moltiplicata per labase 2

..

primo parte intera : cifradecimale piu’ significativa

primo parte intera : cifradecimale piu’ significativa

cifra decimalemeno significativa

cifra decimalemeno significativa

La parte decimale del risultatodella moltiplicazione non e’ 0, ma la precisione raggiunta misoddisfa. Termino il procedimento.

La parte decimale del risultatodella moltiplicazione non e’ 0, ma la precisione raggiunta misoddisfa. Termino il procedimento.

Risultato finale : 29.2 decimale Risultato finale : 29.2 decimale binario binarioRisultato finale : 29.2 decimale Risultato finale : 29.2 decimale binario binario

Page 12: Introduzione all'uso del computer

12*

Esempio : passare da 139 decimale al corrispettivo ottaleEsempio : passare da 139 decimale al corrispettivo ottaleEsempio : passare da 139 decimale al corrispettivo ottaleEsempio : passare da 139 decimale al corrispettivo ottale

E’ gia’ un numero intero, cosi’ dovro’ solo eseguire il passaggio E’ gia’ un numero intero, cosi’ dovro’ solo eseguire il passaggio 1 1 dell’esempio precedente. Ora eseguo dell’esempio precedente. Ora eseguo divisionidivisioni successive per successive per 88 fino a fino a quando il risultato fa quando il risultato fa 00. Le cifre ottenute sono il numero ottale . Le cifre ottenute sono il numero ottale corrispondente a quello decimale.corrispondente a quello decimale.

il risultato della divisione e’ 0, il procedimento e’finito

il risultato della divisione e’ 0, il procedimento e’finito

primo resto : ciframeno significativa

primo resto : ciframeno significativa

ultimo resto : cifrapiu’ significativa

ultimo resto : cifrapiu’ significativa

Risultato finale : 139 decimale Risultato finale : 139 decimale ottale ottaleRisultato finale : 139 decimale Risultato finale : 139 decimale ottale ottale

Page 13: Introduzione all'uso del computer

13*

Esempio : passare da 139 decimale al corrispettivo esadecimaleEsempio : passare da 139 decimale al corrispettivo esadecimaleEsempio : passare da 139 decimale al corrispettivo esadecimaleEsempio : passare da 139 decimale al corrispettivo esadecimale

E’ gia’ un numero intero, cosi’ dovro’ solo eseguire il passaggio E’ gia’ un numero intero, cosi’ dovro’ solo eseguire il passaggio 1 1 dell’esempio precedente. Ora eseguo dell’esempio precedente. Ora eseguo divisionidivisioni successive per successive per 1616 fino a fino a quando il risultato fa quando il risultato fa 00. Le cifre ottenute sono il numero esadecimale . Le cifre ottenute sono il numero esadecimale corrispondente a quello decimale.corrispondente a quello decimale.

il risultato della divisione e’ 0, il procedimento e’finito

il risultato della divisione e’ 0, il procedimento e’finito

primo resto : ciframeno significativa

primo resto : ciframeno significativa

ultimo resto : cifrapiu’ significativa

ultimo resto : cifrapiu’ significativa

Risultato finale : 139 decimale Risultato finale : 139 decimale esadecimale esadecimaleRisultato finale : 139 decimale Risultato finale : 139 decimale esadecimale esadecimale

Page 14: Introduzione all'uso del computer

14*

7.3 Come passare da un numero ottale od7.3 Come passare da un numero ottale odesadecimale al corrispondente binario e viceversaesadecimale al corrispondente binario e viceversa7.3 Come passare da un numero ottale od7.3 Come passare da un numero ottale odesadecimale al corrispondente binario e viceversaesadecimale al corrispondente binario e viceversa

Passare da un numero ottale od esadecimale al corrispondente binario e’ molto facile ePassare da un numero ottale od esadecimale al corrispondente binario e’ molto facile eviene illustra to negli esempi che seguono. Anche il viceversa non comporta calcoli viene illustra to negli esempi che seguono. Anche il viceversa non comporta calcoli particolarmente difficili. Capiamo cosi’ anche perche’ i numeri ottali od esadecimale particolarmente difficili. Capiamo cosi’ anche perche’ i numeri ottali od esadecimale vengano preferiti, quando possibile, ai binari : sono molto piu’ sintetici di quest’ultimi vengano preferiti, quando possibile, ai binari : sono molto piu’ sintetici di quest’ultimi (necessitano di minori numero di digits per descrivere lo stesso numero) e si possono (necessitano di minori numero di digits per descrivere lo stesso numero) e si possono all’occorrenza trasformare in binari molto facilmente. all’occorrenza trasformare in binari molto facilmente.

Page 15: Introduzione all'uso del computer

15*

Esempio : passare da 172 ottale al corrispettivo binarioEsempio : passare da 172 ottale al corrispettivo binarioEsempio : passare da 172 ottale al corrispettivo binarioEsempio : passare da 172 ottale al corrispettivo binario

per ogni cifraottale scrivo icorrispondenti3 digits binari

per ogni cifraottale scrivo icorrispondenti3 digits binari il numero binario

corrispondente siottiene accostandonell’ordine i digitsbinari

il numero binariocorrispondente siottiene accostandonell’ordine i digitsbinari

Esempio : passare da 1010001 binario al corrispettivo ottaleEsempio : passare da 1010001 binario al corrispettivo ottaleEsempio : passare da 1010001 binario al corrispettivo ottaleEsempio : passare da 1010001 binario al corrispettivo ottale

faccio l’operazione inversa a quelladi prima. Sostituisco ai 3 digits binariil corrispondente numero ottale

faccio l’operazione inversa a quelladi prima. Sostituisco ai 3 digits binariil corrispondente numero ottale

Inizio suddividendo, Inizio suddividendo, PARTENDO DA DESTRAPARTENDO DA DESTRA, il numero binario di , il numero binario di 33 cifre in cifre in 33 cifre. cifre.Ad ogni terzina sostituisco la corrispondente cifra ottale.Ad ogni terzina sostituisco la corrispondente cifra ottale.

Risultato finale : 172 ottale Risultato finale : 172 ottale binario binarioRisultato finale : 172 ottale Risultato finale : 172 ottale binario binario

Risultato finale : 1010001 binario Risultato finale : 1010001 binario ottale ottaleRisultato finale : 1010001 binario Risultato finale : 1010001 binario ottale ottale

Page 16: Introduzione all'uso del computer

16*

Esempio : passare da 1D8 esadecimale al corrispettivo binarioEsempio : passare da 1D8 esadecimale al corrispettivo binarioEsempio : passare da 1D8 esadecimale al corrispettivo binarioEsempio : passare da 1D8 esadecimale al corrispettivo binario

DD

per ogni cifraesadeciamle scrivoi corrispondenti4 digits binari

per ogni cifraesadeciamle scrivoi corrispondenti4 digits binari il numero binario

corrispondente siottiene accostandonell’ordine i digitsbinari

il numero binariocorrispondente siottiene accostandonell’ordine i digitsbinari

Esempio : passare da 10111100110 binario al corrispettivo esadecimaleEsempio : passare da 10111100110 binario al corrispettivo esadecimaleEsempio : passare da 10111100110 binario al corrispettivo esadecimaleEsempio : passare da 10111100110 binario al corrispettivo esadecimale

faccio l’operazione inversa a quelladi prima. Sostituisco ai 4 digits binariil corrispondente numero esadecimale

faccio l’operazione inversa a quelladi prima. Sostituisco ai 4 digits binariil corrispondente numero esadecimale

Inizio suddividendo, Inizio suddividendo, PARTENDO DA DESTRAPARTENDO DA DESTRA, il numero binario di , il numero binario di 44 cifre in cifre in 4 4 cifre.cifre.Ad ogni quaterna sostituisco la corrispondente cifra esadecimale.Ad ogni quaterna sostituisco la corrispondente cifra esadecimale.

Risultato finale : 1D8 ottale Risultato finale : 1D8 ottale binario binarioRisultato finale : 1D8 ottale Risultato finale : 1D8 ottale binario binario

Risultato finale : 10111100110 binario Risultato finale : 10111100110 binario esadecimale esadecimaleRisultato finale : 10111100110 binario Risultato finale : 10111100110 binario esadecimale esadecimale

Page 17: Introduzione all'uso del computer

17*

7.4 Somma tra numeri binari, ottali, esadecimali7.4 Somma tra numeri binari, ottali, esadecimali7.4 Somma tra numeri binari, ottali, esadecimali7.4 Somma tra numeri binari, ottali, esadecimali

Valgono la stesse regole di somma e di riporto valide pei numeri decimali. Ancora una Valgono la stesse regole di somma e di riporto valide pei numeri decimali. Ancora una volta chiariamo queste regole con degli esempi.volta chiariamo queste regole con degli esempi.

Esempio : eseguire la somma (decimale) 29 + 233 coi corrispondentiEsempio : eseguire la somma (decimale) 29 + 233 coi corrispondentinumeri binari, ottali, esadecimalinumeri binari, ottali, esadecimali

Esempio : eseguire la somma (decimale) 29 + 233 coi corrispondentiEsempio : eseguire la somma (decimale) 29 + 233 coi corrispondentinumeri binari, ottali, esadecimalinumeri binari, ottali, esadecimali

Base Base 1010Base Base 1010 Base Base 22Base Base 22 Base Base 88Base Base 88 Base Base 1616Base Base 1616

11101 +11101001 =

111 0 00000

29 +

233 =

262

35 +351 =

604

1D +E9 =

601

riportiriporti

Page 18: Introduzione all'uso del computer

18*

7.5 Moltiplicazione tra numeri binari, ottali,7.5 Moltiplicazione tra numeri binari, ottali, esadecimaliesadecimali7.5 Moltiplicazione tra numeri binari, ottali,7.5 Moltiplicazione tra numeri binari, ottali, esadecimaliesadecimali

Valgono la stesse regole di moltiplicazioni parziali valide pei numeri decimali. Ancora Valgono la stesse regole di moltiplicazioni parziali valide pei numeri decimali. Ancora una volta chiariamo queste regole con degli esempi.una volta chiariamo queste regole con degli esempi.

Esempio : eseguire la moltiplicazione (decimale) 20 Esempio : eseguire la moltiplicazione (decimale) 20 21 coi corrispondenti 21 coi corrispondentinumeri binari, ottali, esadecimalinumeri binari, ottali, esadecimali

Esempio : eseguire la moltiplicazione (decimale) 20 Esempio : eseguire la moltiplicazione (decimale) 20 21 coi corrispondenti 21 coi corrispondentinumeri binari, ottali, esadecimalinumeri binari, ottali, esadecimali

Base Base 1010Base Base 1010 Base Base 22Base Base 22 Base Base 88Base Base 88 Base Base 1616Base Base 1616

20 x21 =

1010000000

10100

1010000000

110100100

2040

420

14450

644

6414

1A4

10100 x =11 10 010 01 1

24 x =2525

14 x =1551

Page 19: Introduzione all'uso del computer

19*

Computer : insieme di circuiti elettronici + sistemi elettromeccanici (tastiera,

stampante, monitors). Puo’ eseguire calcoli ed operazioni basandosi su istruzioni che vengono messe nella memoria allo scopo di manipolare dati (input) e produrre risultati (output)

Sequenza di istruzioni = programma

Un computer e’ formato (almeno) dalle seguenti parti essenziali

) Memoria : insieme di dispositivi magnetici (nastri, dischi) ottici (dischi laser) o di circuiti elettronici (ad es. la RAM = random access memory) dove vengono conservate le informazioni (istruzioni dei programmi, dati di input, dati di output). La memoria a rapido accesso di solito e’ di dimensioni non molto grandi ed e’ di tipo transitorio. Vi accede di solito la CPU durante il processo di calcolo. La memoria di massa invece e’ di tipo permanente, e serve per immagazzinare grandi quantita’ di dati, e vi si accede in modo piu’ lento. Ciascun insieme di dati e’ chiamato file.

Page 20: Introduzione all'uso del computer

20*

2) CPU (central processor unit) costituito da (almeno) due parti : una parte che acquisisce le istruzioni del programma e le decodifica, una parte aritmetica che fa i calcoli.3) Dispositivo di input : tastiera del computer, lettore di nastri, lettore di dischi etc. Serve per dare comandi e fornire dati4) Dispositivo di output : video, stampante etc. Dispositivi per raccogliere i risultati.

CPU

Memoria RAM

ingresso uscita

Memoria di massa

periferica periferica

periferica

Parte centrale

Page 21: Introduzione all'uso del computer

21*

La parte centrale (CPU, RAM) e’ costituita da circuiti elettronci veloci, al giorno

d’oggi i clock piu’ veloci raggiungono GHz. La memoria di massa ed i dispositivi di input/output possono essere costituiti anche da parti meccaniche (tastiera, dischi) e l’accesso e’ piu’ lento. Di solito il passaggio dei dati tra unita’ lente ed unita’ veloci vengono gestiti in modo automatico senza usare la CPU. Le unita’ piu’ lente in linea di principio potrebbero essere staccate senza pregiudicare il funzionamento della parte centrale e per questo vengono dette unita’ periferiche.

Le memorie e la CPU sono composte da parole (da registri nel caso della CPU). Ogni

parola e’ composta da bytes ed ogni byte e’ composto da 8 bits. Un bit e’ un oggetto (ad es. un microcircuito elettronico bistabile; del materiale magnetizzabile di un disco o di un nastro etc.) che puo’ trovarsi in DUE stati i quali simboleggiano la cifra 0 e la cifra 1 rispettivamente. In tal modo ad ogni parola o registro (che spesso al giorno d’oggi e’ composta da 8 bytes, cioe’ 64 bits) e’ associabile un numero binario. Tutti i dati (numeri, lettere e caratteri, istruzioni di un programma) vengono codificati in numeri binari.

Page 22: Introduzione all'uso del computer

22*

Il numero viene messo in una parola di 32 bits col suo equivalente binario :

La parola Roma viene immagazzinata usando per ciascuna lettera byte e codificando con il codice ASCII

R ; o ; m ; a

I bytes vengono ‘accostati’ l’uno all’altro formando una parola di 32 bits in totale. Nell’accostarli il carattere piu’ a sinistra viene messo dalla parte dei bits meno significativi (cioe’ quelli per cosi’ dire ‘piu’ a destra’) compiendo cosi’ in un certo senso una ‘inversione’.Quindi alla fine Roma viene immagazzinata in 32 bits come segue :

Il codice ASCII originariamente era uno standard USA; oggi e’ diventato internazionale. La codificazione dei caratteri e’ ‘machine independent’ e quindi permette di trasportare facilmente qualsiasi file di informazione da un computer ad un altro.

Page 23: Introduzione all'uso del computer

23*

Tabella ASCII X3.4-1977Tabella ASCII X3.4-1977http://www.cs.utk.edu/~shuford/terminal/ascii_table.txt

Page 24: Introduzione all'uso del computer

24*

Il computer per eseguire il programma obbedisce ad una sequenza di istruzioni. Le

istruzioni, al livello piu’ basso, vengono scritte in ciascuna parola del file contenente il programma, in CODICE MACCHINA, che dipende dal particolare computer. Ad esempio, una parola del tipo potrebbe significare : prendi il contenuto della locazione di memoria chiamata B e copialo nel registro n. 3 della CPU.

Storicamente il codice macchina fu il primo linguaggio sviluppato. In seguito, per

motivi di praticita’ fu introdotto il linguaggio assemblatore (ASSEMBLER) che usa forme mnemoniche piu’ facili da ricordarsi. Ad esempio, l’istruzione precedente potrebbe avere il suo equivalente assembler in LDX 3 B dove LDX sta per load (carica). Anche l’assembler dipende dal particolare computer, ed una istruzione assembler corrisponde ad una operazione della CPU.

Istruzioni e linguaggi dei computersIstruzioni e linguaggi dei computers

Page 25: Introduzione all'uso del computer

25*

Successivamente all’assembler furono inventati i linguaggi ad alto livello che hanno

una sintassi indipendente dal particolare computer e permette al programmatore di scrivere istruzioni senza dover conoscere alcunche’ del linguaggio macchina. Il programmatore dovra’ dunque scrivere un file ASCII in cui sono contenute le istruzioni del programma. Ciascun computer d’altra parte, dovra’ essere dotato di un COMPILATORE cioe’ di un programma in grado di trasformare automaticamente qualunque file ASCII di istruzioni del linguaggio ad alto livello in un file contenete l’equivalente in codice macchina.

Le istruzioni del linguaggio ad alto livello avranno una sintassi facile da ricordare ed

usare, con comandi che corrispondono a piu’ comandi di codice macchina. Sara’ cosi’ possibile usare un programma su qualunque macchina, a patto che abbia il compilatore adatto, e verra’ facilitato lo sviluppo di programmi (software) anche complessi da parte di piu’ persone. Il FORTRAN 77 (ForTran = Formula Translation) e’ un linguaggio ad alto livello. Altri esempi sono : COBOL, PASCAL, BASIC, C, C++. Il Fortran 77 venne codificato nel 1980. E’ specialmente adatto per fare calcoli numerici per progetti, simulazioni, etc. Per questo linguaggio esistono inoltre molte librerie, cioe’ raccolte di programmi gia’ scritti nel corso degli anni che semplificano ed alleviano la mole di lavoro al programmatore.

Page 26: Introduzione all'uso del computer

26*

I computers odierni in generale sfruttano il principio della multiprogrammazione

(multitasking) che si basa sul fatto che il tempo con cui una CPU esegue calcoli matematici o logici e’ molto inferiore al tempo con cui il computer trasferisce i dati dall’input alla CPU o dalla CPU all’output. Si risparmia tempo complessivamente se si eseguono piu’ programmi in una volta e mentre i dati di un programma vengono trasferiti (in maniera automatica che non coinvolge la CPU) la CPU esegue calcoli per un altro programma.

Un altro principio oggi seguito e’ quello del time sharing che permette l’uso del

computer da parte di piu’ utenti alla volta che di solito agiscono da terminale (modo interattivo). Ciascun utente ha il diritto di usare il computer per una frazione di tempo, che dipende dal numero totali di utenti presenti in quel momento, ed interagisce direttamente col computer. Dato che il terminale ha bassa velocita’ di input (dovuto soprattutto alla lentezza umana ma anche alla bassa velocita’ intrinseca del terminale rispetto ad una CPU) il computer puo’ servire piu’ utenti alla volta senza che quest’ultimi in pratica ne risentano troppo.

Multitasking e time sharingMultitasking e time sharing

Page 27: Introduzione all'uso del computer

27*

Ogni computer usa un proprio sistema operativo che non e’ altro che un programma

sempre in funzione sulla macchina quando l’utente non sta facendo girare il proprio. Il sistema operativo permette al programmatore di definire tutte le operazioni che la macchina deve fare, come ad esempio compilare un file di istruzioni fortran (simbolico), eseguirlo, creare dei files, fare una lista dei files presenti in memoria, spedire un messagio per posta elettronica (e-mail) e mille altre funzioni (applicazioni). Quando un utente incomincia una sessione sul computer (login) il sistema operativo viene messo automaticamente in funzione. Il sistema operativo riconosce il linguaggio di controllo del lavoro (JCL) che l’utente dovra’ usare. Sfortunatamente fino a pochi anni fa ogni computer aveva JCL propri, e l’utente doveva impararsi i linguaggi di controllo per ciascun computer.

Un grosso passo avanti nella standardizzazione e’ stato compiuto con l’introduzione di UNIX, un sistema operativo concepito inizialmente nel 1969 da Ken Thompson e da allora sviluppato da molti ed oggi usato quasi universalmente. Una versione di Unix molto usataoggigiorno (ad es. sui PC) e’ LINUX .Esistono diverse versioni di JCL per Unix, che tra loro non differiscono moltissimo. Quelle oggi piu’ in auge si puo’ dire siano la Bourne shell (sh) , la C shell (csh) , la Korn shell (ksh)). Noi useremo la C shell.

Sistema operativoSistema operativo

UnixUnix

Page 28: Introduzione all'uso del computer

28*

Come cominciare una sessione dal PC del laboratorioCome cominciare una sessione dal PC del laboratorioa) Cercare l’applicazione Telnet e connettersi ad axppv.pv.infn.itb) Eseguire il login :Trying 192.84.142.1 …Connected to decux1.pv.infn.itEscape character is ‘^]’

Digital UNIX (decux1.pv.infn.it) (ttyp1)

login: bocaPassword:Last login: Wed Dec 29 20:09:56 from axppv.pv.infn.it

Digital UNIX V4.0D (Rev. 878); Tue Dec 28 16:36:44 MET 1999*******************************************************************decux1>

username

Password (non compare)

Page 29: Introduzione all'uso del computer

29*

Cambiare la passwordCambiare la password

La password deve avere da 6 a 8 caratteri (in molti computers puo’ essere piu’ lunga).

Comando : passwd

D’ora in avanti la notazione in blu verra’ usata per indicare i caratteri che vengono

scritti al terminale in input dall’utente, in verde i caratteri scritti in risposta dal computer, mentre la notazione in corsivo verra’ usata per simboleggiare dei caratteri da scrivere o per indicare cose da fare da parte dell’utente

L’utente BOCA vuole cambiare la sua passwordpasswdChanging password for boca.

Old password: vecchia passwordNew password: nuova passwordVerification: riscrivo la nuova password per sicurezza

Page 30: Introduzione all'uso del computer

30*

DirectoriesDirectories

In memoria, per esigenze di ordine e comprensione, e’ molto utile organizzare gruppi di

files in directories. Questo significa che ogni file viene associato ad una directory.In UNIX ciascun file viene di conseguenza identificato come segue : directoryname/filename Dopo che si e’ fatto il login nel computer ci si trova automaticamente nella home directory che, ad esempio, per l’utente boca su axppv1.pv.infn.it si chiama /home/boca Se a questa directory fosse associato ad esempio il file prova allora il nome completo del file sarebbe /home/boca/prova Esistono comandi per associare un file ad una particolare directory, per fare la lista di tutti i files che appartengono ad una data directory, ed un comando per sapere in che directory ci si trova (cioe’ sapere qual’e’ la directory di default ). Directory di default significa la directory che viene sottointesa automaticamente - a meno che essa venga esplicitamente indicata - in tutti i comandi Unix. Percio’ se non ci sono esplicite indicazioni, quando si crea un nuovo file esso viene associato alla directory di default; quando si fa una lista di files esistenti tale lista e’ quella dei files associati alla direcotry di default ecc. ecc.

Page 31: Introduzione all'uso del computer

31*

Sapere in che directory ci si trova (directory di default)Sapere in che directory ci si trova (directory di default)

Si usa il comando pwd

Creazione di una nuova directoryCreazione di una nuova directory

L’utente puo’ creare una nuova directory col comando mkdir

pwd/home/bocamkdir dimostrazioneA questo punto e’ stata creata una nuova directory il cui nome completo e’ : /home/boca/dimostrazionecioe’ alla directory di default e’ stata aggiunta una / e poi il nome dimostrazione

pwd/home/boca questo e’ il nome della corrente directory di default

Page 32: Introduzione all'uso del computer

32*

Cambio di directoryCambio di directoryPer cambiare la directory di default di usa cd

Elenco dei files appartenenti ad una data directoryElenco dei files appartenenti ad una data directory e/o aventi un certo nomee/o aventi un certo nome Si usa il comando ls nomedirectory oppure ls nomefile

pwd/usr/users/bocacd dimostrazionepwd/usr/users/boca/dimostrazioneL’utente boca si trovava inizialmente nella directory /usr/users/boca, quindi col comando cd ha definito come directory di default quella vecchia (/usr/users/boca) + /dimostrazione e quindi ora si trova nella directory /usr/users/boca/dimostrazione come e’ dimostrato dal susseguente comando pwd

Page 33: Introduzione all'uso del computer

33*

ESEMPIOESEMPIOls /usr/users/boca/cestinoprova prova.bak prova prova.bakL’utente boca ha richiesto l’elenco dei files appartenenti alla directory /usr/users/boca/cestino ed il computer ha elencato i files esistenti cioe’ prova prova.bak prova e prova.bakESEMPIOESEMPIOpwd/usr/users/boca/cestinolsprova prova.bak prova prova.bakIn questo secondo esempio l’utente boca si trovava gia’ nella directory /usr/users/boca/cestino (come testimonia il comando pwd) ed ha mandato il comando ls senza specificare alcuna directory : il computer percio’ ha assunto come directory quella di default. Il risultato dell’elenco e’ percio’ identico a quello dell’esempio precedente.ESEMPIOESEMPIOls /usr/users/boca/cestino/provaprovaIn questo esempio l’utente ha richiesto una lista di uno specifico file.ESEMPIOESEMPIOls /usr/users/boca/cestino/pro*prova prova.bak prova prova.bakIn questo esempio si e’ richiesto l’elenco di tutti i files che iniziano per pro nella directory /usr/users/boca/cestino Si noti l’uso dell’asterisco (carattere speciale o metacarattere) che significa qualunque numero e tipo di carattere di seguito ai caratteri pro

Page 34: Introduzione all'uso del computer

34*

Per produrre un programma fortran bisogna tradurre il file ASCII che contiene le istruzioni in un file che contiene le istruzioni macchina. Per fare questo in UNIX c’e’ il comando

f77 -static -o nomeoutput nomeinput

lsprova.forf77 statico prova.exe prova.forlsprova.for prova.exeL’utente ha compilato (e ne ha anche fatto il linking) del simbolico (scritto in ASCII) contenuto nel file prova.for il risultato (programma eseguibile) e’ stato messo nel nuovo file prova.exe

Compilazione di simbolici FortranCompilazione di simbolici Fortran

Page 35: Introduzione all'uso del computer

35*

Si possono usare diversi comandi per farlo. Ad esempio c’e’

cat nomefile

oppure

more nomefile

con cat il file viene stampato interamente e di seguito, con more il file viene interamente stampato, ma con la possibilita’ di vederlo per pagine. Nomefile puo’ esseresia il nome completo del file (cioe’ con all’inizio la directory alla quale appartiene) oppure puo’ non avere la directory di appartenenza, nel qual caso il computer assume la directory di default.

Stampa del contenuto di un file ASCII a terminaleStampa del contenuto di un file ASCII a terminale

Page 36: Introduzione all'uso del computer

36*

lsprova prova.bak prova prova.bakrm prova.baklsprova prova prova.bakL’utente ha rimosso dalla corrente directory il file prova.bak dalla directory di default, come e’ testimoniato dal comando ls eseguito dopo la rimozione

Si usa il comandorm nomefileAl solito, se nomefile non e’ il nome completo di directory, viene assunta la directory didefault.

In UNIX esite la possibilita’ di richiedere informazioni su come funziona un dato comando. L’istruzione da dare a terminale e’man nomecomandoAd esempio, se si vogliono informazioni dettagliate sul comando ls basta battere man ls ed una lunga lista di istruzioni comparira’ sul terminale, con la possibilita’ di vederlo per pagine.

Richiesta di istruzioni sull’uso di un comandoRichiesta di istruzioni sull’uso di un comando

Rimozione di un fileRimozione di un file

Page 37: Introduzione all'uso del computer

37*

Una necessita’ che si presenta spessissimo nell’uso di un computer, e’ il creare o

modificare dei files ASCII. Il text editor e’ un programma che fa questo. Ci sono svariati tipi di text editors, noi useremo vi oppure nedit Il comando e’

vi nomefile oppure nedit nomefile

dove nomefile puo’ essere sia un file nuovo che un file gia’ esistente. Come sempre, se ladirectory non e’ esplicitata nel nome del file, quella di default viene assunta. L’uso ed i comandi di vi ed nedit sono articolati e complessi e se ne puo’ avere il dettaglio coni comandiman vioppureman nedit

Creazione di un file ASCII con un text editorCreazione di un file ASCII con un text editor

Page 38: Introduzione all'uso del computer

38*

Unix e’ concepito specialmente per macchine multiuser e multitasking

Schematicamente un sistema operativo e’ fatto a strati, con un nocciolo di funzioni e

programmi piu’ interne (kernel) e 3 strati via via piu’ esterni.Le funzioni del kernel controllanodirettamente l’hardware del computer(controllo della memoria e dellaCPU e delle varie periferiche).Le funzioni dello strato systemservices chiamano le funzionidel kernel. Il linguaggioASSEMBLER fa uso dellefunzioni di questo strato.

user interfaceutilities and toolssystem serviceskernel

Architettura di un sistema operativoArchitettura di un sistema operativo

Page 39: Introduzione all'uso del computer

39*

A volte anche linguaggi a piu’ alto livello chiamano queste routines per ottenere maggiorerapidita’ di esecuzione. Il software dello strato utilities and tools rende la complessita’ dellechiamate alle routines del system service trasparente all’utente. In questo strato ci sono ad esempio i compilatori dei linguaggi ad alto livello ( fortran, C, C++, cobol, pascal, etc. ), la utilities mail od il tool dbx ( debugger di programmi fortran). Distinguiamo le utilities dai tools sulla base della maggior complessita’ delle prime rispetto ai secondi. Nello strato piu’esterno infine, c’e’ l’interfaccia con l’utente cioe’ la shell o command language interpreter,che viene usato per impartire i comandi al computer.

Le shell che sono diventate d’uso piu’ comune in Unix sono :

Bourne shell ( sh ) storicamente la prima disponibile, che viene inclusa in tutte le versioni di UnixC shell ( csh ) standard nei sistemi che usano il software Berkeley Software DistributionKorn shell ( ksh ) standard per il software Sistem V ( AT&T)

Le varie Unix shells differiscono tra loro per le funzioni che svolgono e per la sintassi dei lorocomandi, ma tutte passano il controllo alle stesse funzioni al momento dell’esecuzione, con l’eccezione di alcuni comandi tipici di quella shell.

Page 40: Introduzione all'uso del computer

40*

chshchanging shell for studente.Password:New shell [/bin/bash: /bin/tcshShell changed.

Per cambiare la shell di default si usa il comando :

chsh

Come cambiare la shell di defaultCome cambiare la shell di default

Page 41: Introduzione all'uso del computer

41*

Chiamiamo process un programma attivo. Quando un utente incomincia una nuova

sessione a terminale, viene attivato il programma costituito dalla shell usata per default, che attende ed esegue i comandi dati da terminale. Questo e’ un esempio di process a cui il sistema assegna un numero ( process identifier ) che unicamente lo identifica.Questo process ha accesso alle risorse della macchina ( CPU, memoria, periferici ) con una certa priorita’ che gli viene assegnata dal sistema stesso. La parte del kernel responsabile dello scheduling la assegna dinamicamente, aggiornandola ogni pochi secondi, calcolandola con un algoritmo complesso, che si basa anche su una priorita’ di base data dal system manager all’utente.

Come gia’ detto, al momento del login viene attivato un process ( la shell ). Questo e’ un

parent process . Quando diamo un comando da terminale, il process della shell vieneinterrotto ed un nuovo process, che esegue il comando, viene attivato. Quando quest’ultimotermina, il comando viene restituito alla shell, che riprende a funzionare. In Unix si dice chee’ stato generato un child process (quello che esegue il comando) da parte di unparent process (la shell).Questo meccanismo vien detto forking . Al child process vieneassegnato un proprio process identifier number. Un child process puo’ a sua volta iniziareun altro process, diventando a sua volta parent process di un child process.

Processi e loro priorita’Processi e loro priorita’

Parent process e child processParent process e child process

Page 42: Introduzione all'uso del computer

42*

Multitasking ( o multiprocessing ) significa l’attivazione, da parte di un solo utente, di piu’

programmi contemporaneamente. In Unix il multitasking si ottiene quando un parent process fa il forking di uno o piu’ child process e tutti i process sono attivi contemporaneamente. Un esempio di multitasking e’ la stampa di un file alla line printer, durante la quale si possono eseguire altri comandi. In Unix ci possono essere piu’ processattivi o sospesi contemporaneamente, ma solo uno puo’ ricevere input da terminale.Questo si dice process in foreground mentre gli altri sono in background .

Multitasking in UNIXMultitasking in UNIX

NOTA BENE NOTA BENE I processi attivi in background continuano anche quando il parent process che li ha lanciati esegue un logout dal computer. Se invece ci sono processi sospesi al momento del logout, allora un messaggio di avviso viene mandato a terminale ed il logout non viene eseguito. Se l’utente ripete il comando logout allora la sessione termina ed i processi interrotti vengono persi.

Page 43: Introduzione all'uso del computer

43*

I comandi per fermare, mettere in background o portare in foreground un processo sono :

1) <ctrl>c termina un child process ( job ) che e’ attivo in foreground2) <ctrl>z sospende l’esecuzione (ma non la termina) di un job che e’ attivo in foreground3) & lancia un child process in background4) fg n oppure fg %n porta in foreground un child process sospeso od attivo in background5) bg n oppure bg %n fa diventare attivo un process sospeso e lo porta in background

f77static o myfile.x myfile.f compilazione e link del file fortran myfile.f<ctrl>z la compilazione viene sospesaStopped messaggio a terminale, mandato del sistema, che avvisa della sospensionecat myfile.f stampa a terminale di myfile.ffg riporta in attivita’ in foreground, il process sospesof77 static o myfile.x myfile.f messaggio a terminale che avvisa della ripresa della compilazione e link

Page 44: Introduzione all'uso del computer

44*

Si definisce una shell script un ASCII file contenente dei comandi Unix.

In Unix si puo’ attivare una shell script semplicemente battendone a terminale il nomedel file ASCII che la la contiene. Quando si attiva uno script, il sistema esegue ciascuncomando dello script come se lo stessimo battendo da terminale

il seguente ASCII file e’ un esempio di shell script :ls l *cat pippomv pippo pluto

In una shell script, si usa il comando << label per indicare ad un programma quando finisce l’input che deve leggere.

Shell scriptsShell scripts

Il comando <<Il comando <<

Page 45: Introduzione all'uso del computer

45*

immaginiamo di avere il programma myprogram.x che legge 5 numeri da terminale e ne fa la media. Si consideri la seguente shell script :….myprogram.x << end9. 2.4 5.67.8 9.2end….Questo script, arriva all’esecuzione del comando myprogram.x ed il << fa si’ che tutte le righe a partire dalla successiva, fino a quella che precede la label end vengano considerate come dati in ingresso per il comando stesso. Se non ci fosse << end lo script prenderebbeinput per myprogram.x da terminale (standard input).

La creazione di una pipe e’ un tipo particolare di attivita’, sincronizzata dal kernel, che coinvolge piu’ processes, nella quale l’output di un comando diventa input del comando chesegue, senza bisogno di creare un file intermedio. Il piping e’ indicato dalla barraverticale | Questo comando e’ particolarmente utile e conferisce ad Unix una flessibilita’sconosciuta ad altri sistemi operativi.

PipingPiping

Page 46: Introduzione all'uso del computer

46*

anticipiamo qui che il comando who elenca gli usernames che hanno attualmente una

sessione aperta sul computer, mentre sort ordina alfabeticamente le righe di un testo

ASCII. Infine more stampa il contenuto di un file (interpretato come file ASCII) ad una

pagina per volta.

who | sort | more

questi tre comandi fan si’ che il kernel inizi 3 child process contemporaneamente,

corrispondenti ai comandi who , sort , more. Tuttavia more aspettera’ input da sort che

aspettera’ input da who . Quando l’output di who sara’ passato a sort , il child process

responsabile di who finira’, e cosi’ quando in seguito sort avra’ passato tutto l’output

a more, cessera’. Infine quando more avra’ finito di mandare output allo standard

output, terminera’ ed il controllo ritornera’ al parent process.

Page 47: Introduzione all'uso del computer

47*

Come gia’ detto piu’ sopra, in Unix vengono definiti

stdin input stream, solitamente la tastiera del terminale

stdout output stream, solitamente lo schermo del terminale

stderr device o file dove vengono mandati i messaggi di errore, di solito lo schermo del terminale.

In Unix e’ possibile, in modo semplice, comodo ed elegante, ridirezionare stdin , stdout ,stderr su devices o files che non siano quelli dati di default all’inizio della sessione (terminale), con i simboli della seguente tabella

Ridirezionamento dello standard input, output, errorRidirezionamento dello standard input, output, error

Page 48: Introduzione all'uso del computer

48*

simbolo significato > ridireziona stdout >! ridireziona stdout, senza tenere conto di noclobber >> ridireziona ed appendi stdout >>! ridireziona ed appendi stdout senza dare errore e creando un nuovo file se ancora non esiste >& ridireziona stdout e stderr >&! ridireziona stdout e stderr, senza tenere conto di noclobber >>& ridireziona ed appendi stdout e stderr >>&! ridireziona ed appendi stdout e stderr senza dare errore e creando un nuovo file se non esiste di gia’ < ridireziona stdin << xxx leggi l’input fino alla linea identica con xxx | ridireziona stdout al prossimo comando (piping) | tee nomefile ridireziona stdout, oltre che alla schermo, anche ad un file | & ridireziona stdout e stderr al prossimo comando

Page 49: Introduzione all'uso del computer

49*

ls > outputquesto comando fa si’ che l’output di lsvenga messo nel file (ASCII) output invece che visualizzato al terminale. Se il file output esistesse gia’, verrebbe sovrascritto dalla nuova versione ( in gergo Unix : clobbering ) e la vecchia versione verrebbe persa.L’utente puo’ impedire il clobbering (per evitare che uno sbaglio faccia perdere un file) con il comandoset noclobbercosi’ che il sistema avvisa che il file esiste gia’ ed impedisce l’esecuzione del comando.Un altro esempio e’ dato da :lsl >! outputlsl pippo* >>& outputdove prima viene ridirezionato l’output del comando ls l nel file output , facendo eseguire l’operazione ( grazie a ! ) anche se e’ stato fatto precedentemente set noclobber . Il secondo comando appende ( aggiunge ) il risultato del comando ls l pippo al file output.Anche eventuali messaggi di errore generati dal comando ls verrebbero stampati in output .

Page 50: Introduzione all'uso del computer

50*

I nomi dei files e dei comandi Unix sono case sensitive . Le MAIUSCOLE precedono le minuscole. Esistono delle convenzioni, non obbligatorie, ma generalmente seguite, riguardoalle estensioni che si danno ai files

estensione significato

.a libreria di objects .bas source code di basic .c source code di C .cc source code di C++ .f source code di fortran .h header file per il C .l programma di lex .o object file ottenuto dalla compilazione del source code .p source code per pascal .s source code di assembler .y programma id yacc a.out programma eseguibile

Nomi dei files in UNIXNomi dei files in UNIX

Page 51: Introduzione all'uso del computer

51*

Il comando

lsl t

fa una lista lunga ( opzione l ) di tutti i files presenti nella current directory ordinandoli temporalmente ( opzione t , i files piu’ recenti vengono elencati per primi). Stesso risultato si otterrebbe con

ls lt

Con poche eccezioni, la forma di un comando Unix e’ la seguente :nomecomando [ opzioni ] [ argomenti ]dove le [ ] significano che puo’ anche non esserci, e :• nomecomando sono generalmente lettere minuscole che caratterizzano il comando ;• le opzioni modificano l’azione del comando e di solito sono singole lettere precedute da ; si possono combinare assieme e di seguito piu’ opzioni facendole precedere da un unico oppure separatamente, con uno spazio in mezzo e precedute da

Struttura dei comandi UnixStruttura dei comandi Unix

Page 52: Introduzione all'uso del computer

52*

L’argomento e’ generalmente l’oggetto su cui agisce il comando

nomecomando , opzioni , argomento devono essere separati da spazi o tab che, tranne poche eccezioni, sono gli unici delimitatori validi in un comando Unix.

Si definisce word quei caratteri compresi tra due delimitatori consecutivi. Un semplice

comando Unix percio’, e’ una sequenza di una o piu’ words comprese tra spazi o tabs.

Vengono definite words separate (anche se sono in compagnia di altri caratteri) i caratteri & | < > ; ( ) # I caratteri && || << >> vengono considerate come una ( non due ) word.

il comando ls lte’ formato da 2 words, mentre il comandols lt | moree’ per Unix composto da 4 words.

Page 53: Introduzione all'uso del computer

53*

i seguenti comandi pwd ; ls ltsono equivalenti apwdls lt

Per continuare un comando sulla prossima riga si usa \ prima del return che termina la

linea ( deve essere l’ultimo carattere prima del return ).

Si possono mettere piu’ comandi su una stessa linea, separandoli con ; che, in questo

caso, ha la stessa funzione del carriage return.

Page 54: Introduzione all'uso del computer

54*

In Unix un file e’ identificato in maniera piu’ generale da

host:/ directory / filenamedove host: nome del computer dove il file risiede. Di solito host: si omette e viene usato solo da comandi come rcp o scp

directory nome della directory alla quale il file appartienefilename nome del file

• Si definisce file system un insieme di files e directories organizzato gerarchicamente, con una directory principale in cui ci possono essere files ed altre directories ; in quest’ultime ci possono essere altre directories, etc.

• / e’ il root file system

Devices, directories e struttura dei filesDevices, directories e struttura dei files

Page 55: Introduzione all'uso del computer

55*

il seguente e’ un esempio di /etc/fstab

In Unix non c’e’ la necessita’ di esplicitare il nome del device dove il file fisicamente risiede

(tranne nel caso sia un nastro). Il sistema Unix determina dove si trova il file andando a

leggere /etc/fstab che e’ il file sysem table, dove sono registrati su quali dischi stanno

fisicamente tutti i file systems.

Page 56: Introduzione all'uso del computer

56*

Il sistema utilizza /etc/fstab ad ogni reboot del computer per montare (assegnare) i varidevices fisici sugli appropriati file systems.

L’utente puo’ controllare con

df i file systems montati ed anche la percentuale di spazio rimasto a disposizione.

questo e’ un esempio del printout generato da df

Page 57: Introduzione all'uso del computer

57*

I devices piu’ comunemente usati, hanno in Unix nomi leggermente variabili a seconda della particolare implementazione e computer. Un esempio e’ dato nella seguente tabella

nome device descrizione

/dev/ra0 disk drive ( block ) /dev/rra0 disk drive ( character ) /dev/console system console /dev/tty01 asynchronous terminal /dev/printer default system printer /dev/mt0 tape drive ( block ) /dev/rmt0 tape drive ( character ) /dev/null cestino

Da notare l’esistenza di /dev/null che funziona da cestino. Mandandogli dell’output od

un file, questo viene perso. Analogamente, se si legge da /dev/null si ha subito un end of file. Il comandocp /dev/null myfileha l’effetto di creare il file myfile che e’ vuoto.

Nomi comunemente dati ad alcuni devicesNomi comunemente dati ad alcuni devices

Page 58: Introduzione all'uso del computer

58*

nome contenutodirectory

/bin files eseguibili di sistema, frequentemente usati /dev files speciali, che indirizzano devices /etc miscellanea di files vari /lib files di librerie /tmp files temporanei ( scratch files ) /usr/adm files amministrativi di sistema /usr/bin files eseguibili di sistema, meno frequentemente usati /usr/dict files del dizionario /usr/share/man files del manuale man /usr/spool files che devono essere spooled ( scaricati ) alle code stampanti /usr/tmp files di swap e page

In Unix vi sono delle convenzioni, solitamente seguite, sul nome da dare a directories checontengono particolari files, vedi tabella seguente.

Nomi comunemente dati ad alcuni directoriesNomi comunemente dati ad alcuni directories

Page 59: Introduzione all'uso del computer

59*

/home/boca/cestino/prova e’ un esempio di definizione assoluta di un file cd /home/boca/cestinols prova questo e’ un esempio di uso della definizione relativa di un file

La definizione esplicita di un file Unix per mezzo del nome completo a partire dalla root

directory / e’ detta definizione assoluta del file. Come gia’ detto altre volte, delle / delimitano il directory pathway attraverso tutte le sottodirectories. Tutte le definizioni di files che cominciano con / sono assolute. Invece, le definizioni che partono dalla current directory si dicono definizione relativa di un file e non cominciano mai con la barra.

Definizioni assolute e relative di filesDefinizioni assolute e relative di files

Page 60: Introduzione all'uso del computer

60*

ls l /home/boca/cestino questo e’ un esempio di ricerca dei files contenuti nella directory, indicata con definizione assoluta, /home/boca/cestino

cd /home/bocals l cestino questo e’ un esempio di ricerca di files contenuti nella stessa directory indicata, questa volta, con una definizione relativa a partire dalla directory /home/boca

ls ~boca la ~ seguita da uno username ( boca ) indica la home directory dell’utente ( in questo caso /home/boca ). Questo e’ un esempio di filename substitution (globbing ). Questo comando e’ in definitiva equivalente a ls /home/boca

cd /home/boca/cestinols l ../bin il doppio punto ( .. ) indica la directry appena sopra ( altro esempio di globbing). Il comando percio’ equivale a ls l /home/boca/bincd /home/bocalsl . il singolo punto indica la presente directory. Il comando percio’ equivale a ls l Anche questo e’ un altro esempio di globbing.

Page 61: Introduzione all'uso del computer

61*

Ci sono 3 tipi di files in Unix : i files speciali , i files ordinari ed i directory files.

a) Tutti i devices ( dischi, tape drivers, printers, terminali, e pseudoterminali - quelli usati durante le connessioni alla rete ) vengono trattati come files speciali i quali, come gia’ visto in precedenza, risiedono nella directory /dev Si ottiene un printout sulla line printer, ad esempio, scrivendo allo special file che individua la line printer. Questo normalmente viene fatto tramite i comandi della C-shell, ma in alcuni casi l’utente lo puo’ fare anche direttamente.

b) I files ordinari contengono caratteri ASCII o binari. Copiando un file ordinario in uno special file, si otterra’ l’output del contenuto sul device associato allo special file. Di default Unix NON formatta il file ( cioe’ non aggiunge bits al contenuto del file ) tranne per un <ctrl>D ( end of file ) alla fine del file. Casomai puo’ essere il comando o programma usato dall’utente ad interpretare o scrivere in certo modo i dati ( si pensi alla scrittura ASCII dei caratteri col Fortran 77, ad esempio ).

c) Dei directoy files si e’ gia’ parlato. Un directory file ha una entry per ciascun file contenuto nella directory ed oltre al nome del file ed altre informazioni, contiene anche l’ inode del file. Quest’ultimo e’ un numero che unicamente identifica ciascun file ( si puo’ vedere l’ inode con il comando ls i nomefile ).

Tipi di files in UnixTipi di files in Unix

Page 62: Introduzione all'uso del computer

62*

Sono una particolare classe di files ordinari, e cominciano il loro nome con un punto ( . )Il loro nome e’ dovuto al fatto che non vengo listati dal comando ls a meno che non si usi l’opzione a ( list all ). La tabella che segue fa un sommario dei principali hidden files e della loro funzione. Il motivo per cui sono ‘nascosti’ e’ che cosi’ l’utente ha meno probabilita’ di danneggiarli …. In realta’ l’utente li puo’ modificare per farli aderire alle proprie esigenze. Generalmente si trovano tutti nella directory $HOME dell’utente.

Hidden filesHidden files

Page 63: Introduzione all'uso del computer

63*

nome funzionehidden file

.cshrc eseguito all’inizio della sessione, ma dopo aver eseguito il .login di sistema e prima di aver chiamato il file $HOME/.login Solo se si usa la C-shell viene chiamato .cshrc Usualmente si usa per definire environmentals, alias e definire altre opzioni e paramentri.

.exrc definizione degli environmentals per l’editor ex .forward definisce il forwarding address per il mailer .history contiene la history list .hushlogin disabilita alcuni messaggi di login .login viene eseguito all’inizio della sessione, qualunque sia la shell di default

usata dall’utente. Qui si definiscono environmentals e si settano preferenze etc. che vanno usate indipendentemente dalla particolare shell usata.

.logout viene eseguito subito prima del termine della sessione. Qui l’utente mette tutto cio’ che vuole eseguire appena prima della chiusura della sessione.

.mailrc contiene le definizioni degli environmentals per il programma mail .netrc contiene i parametri per il programma ftp .profile analogo al file .cshrc tranne che viene eseguito ( dopo il .login sistema) se

si usa la Bourne shell .rhosts vengono indicati gli utenti e macchine remote alle quali lo user permette di

accedere al computer tramite il proprio account.

Page 64: Introduzione all'uso del computer

64*

In Unix alcuni caratteri vengono interpretati in modo speciale dalla shell e vengono chiamati

metacaratteri. La tabella che segue ne elenca alcuni di quelli non citati precedentemente peril redirecting ; quelli asteriscati hanno un significato speciale solo per la C-shell. Da notare che il significato di un metacarattere puo’ variare a seconda che venga interpretato dalla C-shell o da una Unix utility.

Caratteri specialiCaratteri speciali

Page 65: Introduzione all'uso del computer

65*

Il metacarattere ( wildcard ) ha in generale il significato di sostituzione di un numero arbitrario di caratteri arbitrari (vedi in seguito) ; il suo effetto tuttavia puo’ differire leggermente a secondo del comando Unix che lo usa.

ls questo comando produce la lista di tutti i files della directory corrente e delle directories ad un livello piu’ basso nella gerarchia delle directories ( in questo casoha un effetto maggiore che la semplice sostituzione ). Invece il comandowc produce il word counting per tutti e solo i files della directory corrente. Il comando

ls . invece, fa la lista della directory corrente soltanto, mentre

wc . interpreta il . letteralmente andando a fare il word counting di un file di nome . (se esiste).

Page 66: Introduzione all'uso del computer

66*

TABELLA DEI METACARATTERI ( I ) metacarattere funzione

& esegue il comando in background && and Booleano = operatore di assegnazione == uguale a ; e’ una comparazione di stringhe di caratteri != diverso da ; e’ una comparazione di stringhe di caratteri =~ simile a ; e’ una comparazione di stringhe di caratteri !~ dissimile da ; e’ una comparazione di stringhe di caratteri <= minore od uguale a >= maggiore od uguale || doppia barra ; or Booleano ; separatore di comandi \ comando di continuazione della linea di comando \m traduzione letterale del metacarattere m ‘ togli il significato speciale ` esegui immediatamente “ raggruppa i caratteri in un unico comando # seguono dei commenti fino al prossimo carriage return ! history substitution % significa un job in background * wildcard , sostituzione di qualunque numero e tipo di caratteri ? wildcard, sostituzione di un singolo carattere

Page 67: Introduzione all'uso del computer

67*

TABELLA DEI METACARATTERI ( II )metacarattere funzione

$ segue una sostituzione di argomento $# numero di argomenti passati ad uno shell script $$ Process ID $? Exit status $< legge una linea da stdin @ esegui un calcolo numerico ~ home directory substitution [ ] filename selective substitution

. current directory { } delimitatore usato in vari comandi

NOTA BENE NOTA BENE • Facendo precedere un metacarattere da \ ha l’effetto di toglierne il significato speciale (il metacarattere viene interpretato come carattere normale).• Facendo precedere \ ad un carriage return si fa diventare quest’ultimo equivalente ad uno spazio.• I caratteri racchiusi tra “ (double quotes) oppure ` (grave accents) oppure ‘ (single quotes) formano UNA word. I metacaratteri racchiusi non formano word separate. E’ possibile includere il carattere carriage return tra apici o apici doppi, a patto di farlo precedere da \

Page 68: Introduzione all'uso del computer

68*

In Unix alcuni metacaratteri vengono usati come wildcards, tipicamente per indicare

nomi di files. La wildcard non viene presa letteralmente dal sistema, ma ad essa vengonosostituiti uno o piu’ caratteri. Le wildcard in uso nella C shell sono indicate nella tabella seguente

WildcardsWildcards

TABELLA DELLE WILDCARDSwildcard funzione

nome composto da un qualunque numero di caratteri qualunque .com qualunque nome di file che termini in .compipp qualunque nome di file che inizia con pipp qualunque nome di file che contenga almeno un . ? sostituzione di UN (solo uno!) carattere qualunque ?.com qualunque nome di file che termini in .com preceduto da un carattere qualunque prova[xyz] le [] indicano sostituzione di uno dei caratteri contenuti nelle parentesi. Quindi in questo caso indica il nome di file provax oppure provay o oppure provaz prova[a-z] un qualunque nome tra quelli da provaa fino a provaz prova[a-z4] un qualunque nome tra quelli da provaa fino a provaz piu’ prova4 prova{o,f} stesso significato di prova[of]

Page 69: Introduzione all'uso del computer

69*

Quando si inizia una sessione Unix, occorre definire un certo numero di environmentals

o variabile di ambiente indispensabili per poter lavorare (vedi qualche trasparenza piu’sotto la spiegazione delle variabili d’ambiente).

Fortunatamente, in genere l’utente non deve preoccuparsi di queste definizioni che vengonoeffettuate dal login di sistema, e dalla esecuzione automatica della .cshrc e del .login che risiedono nella propria home directory.

Page 70: Introduzione all'uso del computer

70*

Quando il prompt del login appare sullo schermo, e l’utente fa il login, il sistema Unix

compie un certo numero di operazioni :il programma /etc/init legge una lookup table che si trova in /etc/ttys e che contiene una stringa per ogni device del tipo terminale ( /dev/tty ) o pseudo-terminale ( /dev/ptty ) disponibi le al sistema. Unix usa un descrittore di 5 caratteri : tty che indica terminale, poi un esadecimale per il numero di controller, un altro esadecimale per il numero di linea ( ad es. tty01 o ttyff ). Si puo’ usare il comando tty per sapere il nome del proprio terminale.

Poi /etc/init passa la stringa corrispondente al terminale al programma /etc/getty che

controlla se al nome del terminale corrisponde un’entry nella lookup table /etc/gettytab ed in caso positivo legge i parametri del terminale ( baud rate, parity, funzione del tasto<break> , etc. etc. ) altrimenti ne assegna di default.

Operazioni del sistema al momento del loginOperazioni del sistema al momento del login

Page 71: Introduzione all'uso del computer

71*

Quindi /etc/getty passa il controllo a /bin/login che chiede all’utente la password e la

confronta con quella ( incriptata ) contenuta nel file /etc/passwd e quindi, in caso positivo, assicura il permesso ad entrare nel sistema. Inoltre /bin/login updata le informazioni di accounting e cerca nel file /etc/group a quale gruppo l’utente appartiene. Un utente Unix puo’ appartenere a piu’ gruppi. L’appartenere ad un certo gruppo fa si’ che tutti i files dell’utente abbiano di default un certo tipo di protezione group level distinta da quellaworld level e da quella user level . Si puo’ usare il comando groups per sapere a che gruppo si appartiene. Quindi /bin/login invoca il programma /etc/environ che assegna le variabili di ambiente ( environmentals ) del sistema.

Infine /bin/login sempre grazie all’informazione contenuta in /etc/passwd assegna una

copia della shell di default al’utente. Normalmente la Bourne shell ha come prompt il $ , mentre la C-shell ha il %

In Unix tutti gli utenti hanno lo stesso tipo di privilegi, eccetto il superuser con login

name root che ha tutti i privilegi possibili ( e che normalmente e’ il manager del sistema).

Quando un utente si collega, appaiono allo schermo un certo numero di messaggi di

sistema che si possono eliminare creando il file ( anche vuoto ) .hushlogin nella propria home directory.

Page 72: Introduzione all'uso del computer

72*

Come detto, il file /etc/ttys contiene le informazioni relative al terminale usato dalla

presente sessione, incluso il tipo di terminale ( ad es. vt100 ). A questo terminal descriptor corrisponde una entry in un altro file, /etc/termcap nel quale ci sono altre informazioni su un gran numero di tipi di terminali di marche diverse. Queste informazioni sono in genere sufficienti perche’ la shell funzioni adeguatamente su quel terminale. In ogni momento della sessione l’utente puo’ cambiare quelle specifiche.

Nelle situazioni in cui terminali differenti usano la stessa porta del computer (ad es. linee

per modem, network connections, etc.) Unix fa corrispondere una generica definizione in /etc/ttys (ad es. dialup o network) ad una generica definizione in /etc/termcap . Poi l’utente potra’ modificare le caratteristiche del proprio terminale usando i comandi tset (che assegna le caratteristiche di input/output ad una sessione da terminale) e/o stty (che assegna le caratteristiche alla tastiera).Tali comandi sono piuttosto complicati. Ricordiamo qui solamente che setty e tset senzaopzioni fanno una lista delle caratteristiche correnti assegnate al terminale ed alla tastiera.

Page 73: Introduzione all'uso del computer

73*

Definizione diDefinizione di environmental o (o ( variabile d’ambiente variabile d’ambiente )) ::e’ una variabile, assegnata ad un process, che viene conservata in una locazione di memoriadel computer. Questa varibile ha un valore, assegnato dall’utente o dal sistema; le varibilid’ambiente valgono qualunque sia la shell usata dall’utente.

L’utente puo’ definire e/o assegnare un valore ad un environmental col comandosetenv ENVIRON valoredove ENVIRON e’ il nome della variabile, valore e’ il valore dato alla variabile.Una convenzione spesso seguita in Unix e’ quella di usare tutte lettere maiuscole per i nomidegli environmentals.Si puo’ eliminare una variabile d’ambiente conunsetenv ENVIRONe si puo’ stampare il valore di un environmental conprintenv ENVIRONmentre printenv senza argomenti, stampa a terminale tutti gli environmentals definiti peril processo corrente. Si puo’ anche usare il comando :echo $nomeenvironmentaldove nomeenvironmental e’ il nome della variabile. Si noti l’uso del metacarattere $ che attua un argument substitution .

Variabili d’ambiente (environmentals) e shell variablesVariabili d’ambiente (environmentals) e shell variables

Come assegnare, deassegnare, stampare il valore di unaCome assegnare, deassegnare, stampare il valore di unavariabile d’ambientevariabile d’ambiente

Page 74: Introduzione all'uso del computer

74*

setenv DEMO pincopallinoprintenv DEMOpincopallinounsetenv DEMOprintenv DEMOl’ultimo comando non produce output dato che la variabile DEMO e’ stata appena cancella-ta dall’utente col comando unsetenv L’utente boca ottiene la seguente stampa dopo aver dato printenv senza argomenti :

Page 75: Introduzione all'uso del computer

75*

Queste variabili sono analoghe agli environmentals eccetto che vengono definite ed hannovalidita’ solo nell’ambito della shell correntemente usata dall’utente ( ad es. la C-shell )cessando di esistere, per esempio, se l’utente cambia shell.

Nella C-shell l’utente puo’ usare il comandoset shellvar = valoreE’ una convenzione spesso usata in Unix di adoperare le lettere minuscole per definire levariabile di shell . Per eliminare una variabile di shell si usaunset shellvare per stampare il valore di una shell varible si usaecho $shellvar( notiamo il $ che e’ quello special character usato per l’ argument substitution ) mentreset senza argomenti stampa il valore di tutte le shell variables definite.

Shell variablesShell variables

Come assegnare, deassegnare, sampare il valoreCome assegnare, deassegnare, sampare il valoredi una variabile di shelldi una variabile di shell

Page 76: Introduzione all'uso del computer

76*

set prompt = “`hostname` >”decux1.pv.infn.it>

l’utente ha posto nella shell variable prompt (che poi viene stampata automaticamente dalsistema all’inizio di ogni nuova linea di comando) il valore dato dal risultato del comandohostname piu’ il simbolo >

Page 77: Introduzione all'uso del computer

77*

L’utente boca ottiene la seguente stampa dopo aver dato il comando set senza argomenti

Page 78: Introduzione all'uso del computer

78*

Come visto precedentemente, il file /etc/environ viene eseguito dal sistema al mo-mento del login per assegnare gli environmentals di sistema necessari per far funzionare lasessione. Nella tabella seguente sono elencati nome e significato di quelli piu’ comunementedefiniti.

TABELLA DEGLI ENVIRONMENTALS COMUNEMENTE DEFINITI DAL SISTEMA

nome significatoenvironmental

HOME home directory SHELL pathname per la shell usata di default TERM tipo di terminale USER user name LOGNAME login name PATH directories in cui cercare al momento di eseguire comandi non built-in EDITOR editor di default MAIL directory dove controllare se ci sono mail messages

Environmentals piu’ comunemente definiti al momentoEnvironmentals piu’ comunemente definiti al momentodel login di sistemadel login di sistema

Page 79: Introduzione all'uso del computer

79*

Molte delle shell variables assegnate dal sistema quando un’utente invoca la C-shell

hanno lo stesso nome (ma scritto in minuscole) e stesso significato degli environmentalscorrispondenti. Un esempio e’ la variabile home che solitamente corrisponde a HOME Nella tabella seguente sono elencate le variabili piu’ comunemente definite nellaC-shell ed il loro significato. Per togliere l’effetto di tali variabili bisogna usare il comandounset

Variabili di shell comunemente impiegate quandoVariabili di shell comunemente impiegate quandosi usa la C-shellsi usa la C-shell

Particolare importanza riveste l’environmental PATH che e’ usato dal sistema quando

l’utente manda un comando che non sia built-in. In questo caso il comando (che altro non e’che un programma) viene cercato nelle directories specificate da PATH, nell’ordine con cuisono scritte . Ciascuna directory e’ separata dalle altre da : (due punti).

Page 80: Introduzione all'uso del computer

80*

TABELLA DI ALCUNE SHELL VARIABLES COMUNEMENTE DEFINITE nome della significatoshell variable set autologout = n specifica il numero di minuti di idle time prima che una shell

interattiva termini set echo ripete i comandi dati dall’utente set history = n ricorda gli ultimi n comandi impartiti dall’utente set home = string assegna la home directory per la C-shell set ignoreeof impedisce che <ctrl>D faccia il logout della sessione set mail = string assegna la directory dove vengono messi i mail messages set noclobber impedisce la sovrascrittura accidentale durante la redirection set noglob impedisce l’espansione dei filenames set notify avvisa di quando un job e’ finito set path = string path in cui ricercare i comandi della C-shell set prompt = string assegna il prompt per la C-shell set savehist = n ricorda gli ultimi n comandi all’inizio di una nuova sessione set shell = string file dove si trova la shell status variabile che viene messa = 0 ( = buon esito del comando) od

ad un valore diverso da 0 (errore) quando finisce l’esecuzionedi determinati comandi

set time = n per ogni comando che duri piu’ di n secondi viene riportato ilCPU time e l’elapsed time

set verbose le parole usate per ciascun comando vengono ripetute

Page 81: Introduzione all'uso del computer

81*

L’hidden file .cshrc viene eseguito dopo il login di sistema, e nel caso che l’utente usi la

C-shell per default.Se invece viene usata la Bourne shell, allora viene eseguito il file .profileIn entrambi i casi, successivamente viene eseguito un altro hidden file, il .loginTutti questi file si trovano nella propria home directory e l’utente puo’ modificarli per fareseguire quei comandi o assegnare environmentals o shell variables all’inizio della sessione.Ogni volta che c’e’ un forking il child process riceve tutti gli environmentals definitinel login di sistema, nel .login e nel .cshrc (inoltre riceve tutte le definizioni di comandidefiniti con alias , vedi seguito).Questo succede ad es. quando l’utente impartisce un comando che non sia built-in nella shellin uso causando cosi’ il forking di un child process che esegue il comando.

Funzione degli hidden files .login, .cshrc e .profileFunzione degli hidden files .login, .cshrc e .profile

Comando aliasComando alias

Serve per abbreviare o comunque dare un nome equivalente ad un comando. Sintassi :alias nickname comandodove nickname e’ il nuovo nome del comando comando.

Page 82: Introduzione all'uso del computer

82*

alias ll “ls l”dopo questo aliasing quando l’utente impartisce il nuovo comando ll e’ come se battesseil comando ls l

Esempio di .cshrc fileIl seguente .cshrc file assegnera’ nuovi valori alle varibili sevehist , mail e prompt edefinisce i nuovi comandi ll e ceset savehist = 50set mail = $MAILset prompt = “!$USER”alias ll ls lalias ce “cd boca/cestino ; pwd”

Esempio di .login file

Qui vengono ridefiniti gli environmentals SHELL , TERM , EDITOR , MAILsetenv SHELL /bin/cshsetenv TERM vt100setenv EDITOR /usr/local/bin/X11/neditsetenv MAIL /usr/spool/mail/boca

Page 83: Introduzione all'uso del computer

83*

L’utente puo’ finire la sessione in due modi : con il comando logout o con il comando

<ctrl>D se ignoreeof non e’ stato assegnato (vedi sopra). <ctrl>D e’ un marker di endof file e percio’ quando la shell lo vede termina di funzionare (e cominciano le operazionidi logout).

In ogni caso, prima di terminare la shell esegue (se c’e’) una altro hidden file che risiede

nella home directory che e’ .logout In questo file l’utente puo’ mettere quei comandi che vuole che siano eseguiti prima che termini la sessione, come ad es. clear che ‘rinfresca’ lo screen del terminale.

Dopo aver eseguito il .logout il sistema esegue il file /etc/logout per le eventuali ultime

operazioni richieste dal sistema ed infine ripassa il comando al programma /etc/init (lo stesso che era stato attivato al momento del login ) per finire la sessione in modo standard.

Come gia’ accennato precedentemente, non e’ possibile il logout se ci sono

stopped process (il comando jobs fa una lista di tutti i process attivi e stopped). Tuttaviase il comando logout viene ripetuto la seconda volta, la sessione finisce ed gli stopped processes vengono persi.

Operazioni del sistema al momento del logoutOperazioni del sistema al momento del logout

Page 84: Introduzione all'uso del computer

84*

Trattiamo qui quali sono le possibilita’ di history substitution in Unix.

Comandi di history substitution in Unix (I) comando significato

history fa una lista degli ultimi comandi impartiti (history list) !! esegue il comando precedente !n esegue l’ n-esimo comando nella lista della storia dei comandi !string esegue l’ultimo comando che incomincia con string !?string? esegue l’ultimo comando che contiene string !-n esegue l’ n-esimo comando precedente

Come richiamare i comandi precedentiCome richiamare i comandi precedenti

Page 85: Introduzione all'uso del computer

85*

history 18:30 ls l t2 18:34 set ignoreeof3 18:35 ls prova.f4 18:36 more prova.f5 18:40 vi prova.f6 18:43 historyse ora l’utente impartisce da tastiera l’ordine!!ritornera’ ad eseguire il comando history che aveva precedentemente eseguito.Se invece impartira’ il comando ! tornera’ ad eseguire ls lt Se invece battesse a terminale!lsavrebbe come effetto di ripetere il comando ls prova.fSe battesse invece il comando!?rov?ritornerebbe ad eseguire il comando vi prova.f mentre se battesse !5verrebbe eseguito ancora set ignoreeof

Page 86: Introduzione all'uso del computer

86*

Negli esempi seguenti vengono elencati comandi di history substitution in cui vengonoinvece richiamate words appartenenti a comandi precedenti

history1 18:30 ls file1 file2 file3Nel comando precedente, ls e’ la word n. 0 , file1 e’ la word n. 1 etc.Se ora l’utente impartisce da tastiera l’ordinecat !1:1ottiene come effetto l’equivalente di cat file1 ovvero viene sostituita, al posto di !1:1 ,la word del comando n. della history list. Se invece impartisce l’ordinecat !1:ottienecat file1 file2 file3 (sostituzione di tutte le words da 1 in avanti del comando n. 1); invece, concat !1:$si ottiene cat file3 (sostituzione dell’ultima word);mentre con cat !1:2-3si ottiene cat file2 file3 (sostituzione delle words da 2 a 3); infine concat !1:2-3 file10si ottiene l’equivalente di cat file2 file3 file10 (espansione della linea di comando con nuovi argomenti).

Page 87: Introduzione all'uso del computer

87*

Infine, supponendo di impartire il comandocat file1 file2 file3 e susseguentementels !*si ottiene ls file1 file2 file3 cioe’ la sostituzione di tutte le words > 0 del comando precedente.

Page 88: Introduzione all'uso del computer

88*

sintassi : ^string1^string2 sostituisce string2 a string1 nel comandoprecedente

esempio : cat file^cat^lsls file

sintassi : !n:s/string1/string2/ sostituisce string2 a string1 nel comando nesempio : history

….7 18:31 cat file ….!7:s/cat/ls/ls file

sintassi : !n:p:s/string1/string2/ sostituisce string2 a string1 nel comando nma senza eseguire il comando risultante,solo facendolo vedere comunqueaggiungendolo alla history list

!! esegui il comando precedentemente mostratoesempio : !7:p:s/cat/ls

ls file!!ls file

Gli esempi che ora seguono implicano la sostituzione di nuove words in comandi

precedenti.

Page 89: Introduzione all'uso del computer

89*

In Unix esiste il comando man per ottenere informazione su un comando, una funzione, etc. L’output di questo comando ha in generale la forma (ma non per tutti i comandi e’ uguale, ci possono essere piu’ o meno dei paragrafi qui elencati) :

NAME nome del comando e suo propositoSYNOPSIS sommario del suo usoOPTIONS elenco delle possibili opzioni usabili con questo comandoOPERANDS elenco degli operandi su cui agisce il comandoDESCRIPTION descrizione in piu’ dettaglio del comandoSEE ALSO altri luoghi nel manuale dove trovare informazioni relateEXAMPLES esempi d’uso del comandoBUGS descrizione di bachi conosciuti, deficienze e modi di aggiustarli

se sono disponibiliRESTRICTIONS limitazioni che si conosconoAUTHORS autori del codice del comando

Le pagine di man risiedono nelle directories da /usr/share/man/mana /usr/share/man/man8 secondo la classificazione mostrata nella seguente tavola.Ad es. la man page per il comando cat si trova in /usr/man/man/cat.gz

Help online ( comandoHelp online ( comando manman ))

Page 90: Introduzione all'uso del computer

90*

Tavola delle pagine di man

numero di pagina contenuto1 comandi della shell2 funzioni di sistema (kernel access points) 3 librerie di subroutines4 descrizione degli input/output device driver5 include files e formats6 computer games7 special files8 system procedures

Inoltre, le sezioni e 3 sono suddivise come segue comandi general purposec comandi relati alla comunicazioneg comandi relati alla graficam comandi di system maintenance

3 libreria standard di subroutines3f routines di supporto del FORTRAN 773m subroutines di matematica3r librerie per internet network3s subroutines di input/output3x subroutines varie

Page 91: Introduzione all'uso del computer

91*

Ci sono 4 modi di usare man :• sintassi man comando esempio man cat nell’esempio sopra riportato, il computer cerca le pagine di man che si riferiscono al comando cat e l’output viene mandato a terminale

• sintassi man k keyword esempio man k terminal in questo esempio vengono listate tutte le informazioni relative alla parola chiave terminal. Il comando man k puo’ anche essere sostituito dal comando apropos

• sintassi man f comando esempio man f more questo comando produce una breve descrizione del comando more. Il comando man f e’ equivalente al comando whatis

• sintassi man sezione comando esempio man 3 stty in quest’ultimo esempio l’utente sa gia’ in quale sezione di man si trova l’informazione cercata e ne fa il display a terminale.

Page 92: Introduzione all'uso del computer

92*

Unix possiede numerosi comandi ed utilities per la creazione, modifica, il display di

files e directories. La tabella che segue riassume i comandi e le routines chiamabili daun programma scritto in Fortran 77 oppure da un programma scritto in C , per il filemanagement. Sono sottolineati quei comandi di cui in particolare tratteremo, gli altri sipossono approfondire con le pagine di man .Nella tabella vengono anche divisi i comandi che fanno un display di files o di lorocaratteristiche, da quelli che li manipolano. L’utente novizio puo’ usare i primi in tutta sicurezza in quanto i files non vengono modificati, mentre per quanto riguarda i secondi, si dovra’ prestare piu’ cura poiche’ il contenuto dei files potrebbe essere modificato.

Page 93: Introduzione all'uso del computer

93*

TABELLA DEI COMANDI O ROUTINES PER IL MANAGEMENT DI FILES E DIRECTORIES

Display commands

nome comando significatoo routine

cat stampa allo standard output del contenuto di un filecol filtra i reverse line feedcolcrt filtra nroff output per CRT (cathodic ray tube)fmt text formatterfold spezza linee lunghe di un file in piu’ linee di larghezza prefissatahead stampa le prime linee di un filels lista dei file esistenti e/o del contenuto di directoriesmore stampa allo standard output del contenuto di un file, a pagine per voltaod stampa allo standard output del contenuto di un file in ottale, decimale,

esadecimale od ASCIIpr stampa files allo stdouttail stampa l’ultima parte di un file allo stdout

Page 94: Introduzione all'uso del computer

94*

TABELLA DEI COMANDI O ROUTINES PER IL MANAGEMENT DI FILES E DIRECTORIES Manipulation commands riguardanti directories

nome comando significato

cd cambia la current directorychdir cambia la current directory - anche C callable routinegetdirentries trova le directory entries con formato indipendente dal file system

C callable routinegetwd trova il path name del current directory - C callable routinemkdir crea una nuova directorypwd stampa il path name della current directoryrmdir rimuove una directoryscandir, alphasort esamina una directory - C callable routineunlink rimuove una directory entry in una directory ; sia comando che

C callable routineManipulation commands riguardanti files (I)

ar comando che opera su librerieawk pattern scanning and processing languagebasename isola la base di un filenamebcopy, bcmp, bzero, ffs operazioni con stringe di bit o byte ; C callable routines

Page 95: Introduzione all'uso del computer

95*

TABELLA DEI COMANDI O ROUTINES PER IL MANAGEMENT DI FILES E DIRECTORIES Manipulation commands riguardanti files (II)

nome comando significato

checknr controlla files prodotti da nroff e/o troffchgrp cambia il gruppo associato con un file o con una directorychmod cambia la protezione di un file o directory ; sia comando che C routinecmp confronta due files per scoprirne le differenzecomm seleziona od elimina linee comuni a due filescp copia di un file o directorycreat crea un nuovo file ; C callable routinecrypt comando per incrittare o decriptare filescrypt, setkey, encrypt operazioni per incrittare / decriptarectags creazione di un tag filedd conversione e copia di un filediff confronto di 2 files ASCIIdiff3 confronto di 3 files ASCIIexpand, unexpand sostituisce gli spazi con i tabs o viceversafile determina il tipo di file (ASCII, eseguibile, command file etc.)find trova filesflock applica o rimuove un advisory lock su un file aperto ; C callable routine

Page 96: Introduzione all'uso del computer

96*

TABELLA DEI COMANDI O ROUTINES PER IL MANAGEMENT DI FILES E DIRECTORIES

Manipulation commands riguardanti files (III)

nome comando significato

ftp programma per trasferire files da un computer ad un altrogrep, egrep, fgrep ricerca di un pattern in un fileident identifica fileslink crea un link ad un file C callable routineln crea links per fileslockf crea un nuovo file ; C callable routinelook trova linee che cominciano con una certa stringa di caratteri, in filesmerge merge di filesmknod crea special files ( character, block, fifo )mktemp crea un file il cui nome sia unico C callable routinemv rinomina un filencheck elenca inode numbers e nomi di tutti i files in un file systemnroff formatta del testoopen apre un file per read o write ; C callable e Fortran callable routineqsort ordina una tabella ; C callable routineranlib converte archivi in random libraries veloci da consultare da parte di un

linker

Page 97: Introduzione all'uso del computer

97*

TABELLA DEI COMANDI O ROUTINES PER IL MANAGEMENT DI FILES E DIRECTORIES

Manipulation commands riguardanti files (IV)nome comando significatorcp, scp copia di files su una macchina remotaread legge una linea di input da stdinreadv legge input da stdin ; C callable routinereadlink stampa il contenuto di un file symbolic link (a che punta il link)rename cambia nome ad un file; C callable routinerev scrive al contrario le linee di un filesize scrive la grandezza di un object filesort ordina o fa il merge di filessplit spezza files in piu’ pezzistat, lstat, fstat ottiene informazioni sullo stato di un file ; C callable routinestrncpy, strlen, undex, rindex operazioni con le stringhe di bytes ; C callable routinestrings conversione e copia di un filesum somma e conta i blocchi in un fileswab fa lo scambio di bits ; C callable routinesymlink crea crea symbolic links ad un file ; C callable routinetar tape archivertr character translatortouch crea un file vuoto od updata la data dell’ultima modifica di un filetroff formattamento di un testo

Page 98: Introduzione all'uso del computer

98*

TABELLA DEI COMANDI O ROUTINES PER IL MANAGEMENT DI FILES E DIRECTORIES

Manipulation commands riguardanti files (V)

nome comando significato

truncate, ftruncate tronca un file ad una lunghezza prefissata ; C callable routinetsort ordinamento topologicoumask definisce le protezioni di default per i files creatiuniq riporta e/o cancella le linee che si ripetono in un fileutime assegna la data di accesso e di modifica ad un file ; C callable routineutimes assegna la data di accesso e di modifica ad un file ; C callable routinewc conteggio delle parole in un filewhat mostra che versioni di objects sono state usate per costruire un filewhich trova il file corrispondente ad un comando, incluso alias e path

Page 99: Introduzione all'uso del computer

99*

Il comando ls viene usato per elencare files, directories e loro caratteristiche.

Sintassi ls [-options] [arguments]

Negli esempi che seguono, supponiamo di essere in una directory che contiene 4 files :

myfile.txt , program.f , .login (hidden file) e tmp (una directory). Quest’ultima a sua

volta, contenga un file di nome test .

lsmyfile.txt program.f tmpls -a.login myfile.txt program.f tmpls -Rmyfile.txt program.f tmp

tmp:testnell’ultimo esempio, la lista include non solo il contenuto della current directory (esclusi glihidden files) ma anche tutti i files di tutte le sottodirectories piu’ basse nella gerarchia delledirectories.

Elenco del contenuto di una directory ( Elenco del contenuto di una directory ( lsls ) )

Page 100: Introduzione all'uso del computer

100*

ls ltotal 1-rwxr-xr-x 1 user1 GR1 1024 24 Aug 13:40 myfile-rwxrwx--x 1 user1 GR1 512 10 Jul 21:10 program.fdrwxr-xr-x 2 user1 GR1 30 12 Sep 04:10 tmpil comando ls l fa il long listing dando informazioni addizionali sul tipo di file (vedi dopo la sezione sulle caratteristiche di un file)

ls questo comando fa la lista della current directory piu’ dei files contenuti nelle directoriesUN livello piu’ in basso. In modo analogo, ls fa la lista dei files nella current directorye nelle directories UNO e DUE livelli piu’ in basso.ls -Fmyfile.txt program.f tmp/questo comando indica anche il tipo di file : e’ un file che ha la protezione x (puo’ essereeseguito) , / indica che e’ una directory, @ significa un symbolic link mentre = significache e’ un socket .ls -1myfile.txtprogram.ftmp

Page 101: Introduzione all'uso del computer

101*

ls -Cquesto comando forza il formato a multicolonne (che e’ comunque il default)

ls tquesto comando elenca i files in ordine temporale tenendo conto della data di ultima modifica ( i files piu’ recenti vengono elencati prima )

ls relenca i files in ordine alfabetico inverso

ls rtelenca i files in ordine temporale inverso

Ordine seguito nel produrre le listeA meno che non venga modificato da un’opzione, l’ordinamento dei files elencati e’ :1) files che cominciano con un punto2) files che cominciano con un numero3) le maiuscole4) le minuscoleEsempio :ls a.123 .Test .test 123 Prova prova

Page 102: Introduzione all'uso del computer

102*

Le opzioni di ls possono essere combinate tra loro, ad es.ls a l ( equivalente a ls al ) produce una long list di tutti i files, anche gli hidden.

Si consideri il seguente esempio :ls l-rwxr--r-- danny staff 1000 10 Aug 12:20 testfilequesto e’ un full listing delle caratteristiche, che ora esamineremo, del file testfile

) Il primo carattere e’ la descrizione del tipo di file :d directory fileb block-type special filec character-type special filel symbolic links socket- file normale (ASCII o binario)

2) I 9 caratteri seguenti ( rwxr--r-- ) definiscono le protezioni del file per l’utente, il gruppo, tutti gli altri. In Unix e’ sottinteso che il system manager abbia tutti i privilegi.Protezione r significa possibilita’ di leggere il file, w di scrivere o cancellare, x di eseguire.

Combinazioni di piu’ opzioniCombinazioni di piu’ opzioni

Caratteristiche dei filesCaratteristiche dei files

Page 103: Introduzione all'uso del computer

103*

3) Il secondo campo nell’esempio, indica il numero di links che il file possiede ( 1 ) ; un file ha sempre almenolink alla directory alla quale appartiene ; una directory ha sempre almeno 2 links, uno alla directory della quale e’ sottodirectory, un altro ai files contenuti in essa. Altri links possono essere definiti col comando ln4) il terzo campo e’ l’owner del file5) il quarto campo e’ il gruppo al quale l’owner appartiene ( e di conseguenza anche il file )6) segue poi la grandezza del file espressa in bytes7) seguono quindi data di ultima modifica del file ( eventualmente data di creazione del file ) ed ora8) nell’ultimo campo c’e’ il nome del file.

Page 104: Introduzione all'uso del computer

104*

Questo comando assegna il tipo di protezioni od accessi di default per la current shell,per tutti i files creati susseguentemente.Sintassi : umask [opzione] [value]Senza argomenti, mostra la file creation mask di default. Con l’argomento value la assegna.Mask e’ data come valore ottale.Bisogna tenere presente che la mask effettiva assegnata ad un nuovo file e’

mode & value dove mode e’ una maschera aggiuntiva data dal sistema, di solito 666

umask 022

assegna accesso 666 & 022 = 644 vale a dire r , w per user

e r access per group ed other ( tutti gli altri utenti ).

ComandoComando umaskumask

Page 105: Introduzione all'uso del computer

105*

pwd

/home/boca/dimostrazione

cd ../cestino la nuova directory e’ /home/boca/cestino

cd /home/boca la nuova directory e’ /home/boca

cd senza argomenti, indica la home directory. Dopo questo

comando, la directory e’ /home/boca

Current directoryIl comando che mostra la current directory e’ pwd

pwd/home/boca

Cambio di directory

Sintassi : cd directory oppure chdir directory

dove directory puo’ essere sia un relative directory path che un absolute directory path

Current directory, cambio di directoryCurrent directory, cambio di directory

Page 106: Introduzione all'uso del computer

106*

La C-shell estende l’uso di cd per mezzo della shell variable cdpath ; infatti se

directory non e’ un sottodirettorio del current directory, e non incomincia per / , ./

oppure ../ , allora ciascun componente della shell variable cdpath viene controllato

per vedere se ha come sottodirectory directory e se si’ tale sottodirectory diventa la

current directory.

Infine se anche questo fallisce, la C-shell controlla se directory non sia una shell variable il

cui nome incomincia per / , ed in tal caso fa diventare tale nome la current directory (se

esiste).

set cdpath = /usr/testpwd /programs/newcd temppwd/user/test/tempset cdpath = (/usr/doc /user/com)

Page 107: Introduzione all'uso del computer

107*

E’ una lista di directories definito dalla C-shell solo per la sessione corrente.

La current directory e’ sempre in cima alla lista. L’utente puo’ costruire ed utilizzare il

directory stack coi comandi pushd , popd , dirs

Sintassi : pushd directoryname

Azione : mette in cima al directory stack la directory directoryname e fa

diventare directoryname la current directory

Sintassi : dirs

Azione : mostra il directory stack

Sintassi : pushd +n

Azione : ruota lo stack n volte

Sintassi : popd

Azione : elimina il current directory dalla cima della stack, lasciando invariati

gli altri ; fa diventare il prossimo directory dello stack il current

directory

Directory stackDirectory stack

Page 108: Introduzione all'uso del computer

108*

pwd

/user2/programs/new

pushd /usr

/usr /user2/programs/new

pwd

/usr

dirs

/usr /user2/programs/new

pushd /etc

/etc /usr /user2/programs/new

pushd +

/usr /user2/programs/new /etc

pwd

/usr

popd

/user2/programs/new /etc

Page 109: Introduzione all'uso del computer

109*

Per ultimo si noti che il comando cd ( o chdir ) ha l’effetto sul directory stack di

cambiare solo la directory in cima nel current directory, lasciando le altre directories della

lista invariate

dirs

/user2/programs/new /etc

cd /tmp

dirs

/tmp /etc

Page 110: Introduzione all'uso del computer

110*

Sintassi : mkdir [opzioni] directoryname

Azione : crea la nuova directory directoryname . Quest’ultimo puo’ essere sia un

pathname relativo ( alla current directory ) sia un pathname assoluto.

pwd

/user2/programs/new

mkdir tmp pathname relativo

ls

/user2/programs/new/tmp

pwd

/user2/programs/new

mkdir /user2/programs/new/test pathname assoluto

ls

/user2/programs/new/tmp /user2/programs/new/test

Creazione di directoriesCreazione di directories

Page 111: Introduzione all'uso del computer

111*

ls

file file2 pippo prova tmp.f

rm file

rm i p

rm : remove pippo ?

rm : remove prova ?

In questo esempio l’uso dell’opzione i fa apparire il messaggio di conferma

al quale l’utente deve rispondere con un yes o y

Sintassi : rm [opzioni] nomefile

Azione : rimuove nomefile ( dove quest’ultimo puo’ essere un pathname

assoluto o relativo )

Opzioni : i r

l’opzione i fa si’ che prima di rimuovere il file un messaggio appaia a terminale per

chiedere conferma di voler cancellare il file l’opzione r rimuove una directory con

tutto il suo contenuto ( incluse eventuali altre directories con i loro contenuti )

Rimozione di files e directoriesRimozione di files e directories

Page 112: Introduzione all'uso del computer

112*

ls l

-r--r--r-- boca GR1 189 May 18 22;56 prova.f

rm prova.f

rm : override protection 444 for prova.f ?

Il file prova.f ha permission di read only e quindi non viene cancellato. Il sistema

chiede esplicitamente all’utente se vuole rimuovere il file , lo user deve rispondere con yes

o y per poter cancellare il file effettivamente.

NOTA BENE NOTA BENE Per poter rimuovere un file occorre che esso abbia la permission di tipo w (write e

delete permission). Inoltre se la directory contenente il file non ha write

access da parte dell’ owner allora compare il messaggio : Permission denied ed il

comando non viene eseguito.

Page 113: Introduzione all'uso del computer

113*

ls l

-r--r-xr-x boca GR1 189 May 18 22:56 prova.f

drwxr--r-- boca GR1 512 May 19 13:14 cestino

rm r cestino

Questo comando rimuove la directory cestino e tutto il suo contenuto

Page 114: Introduzione all'uso del computer

114*

ls 1

file1

file2

cp i file1 file2

overwrite file2 ?

Sintassi : cp [opzioni] file1 file2

Azione : copia file1 su file2 . Se file2 esiste gia’, la vecchia versione viene

sovrascritta

Opzioni : i r

L’opzione i fa si’ che qualora file2 esista gia’, venga richiesta all’utente conferma prima

di copiare. L’opzione r serve per copiare directory intere ( con tutto il loro contenuto ).

Copia di files e directoriesCopia di files e directories

Page 115: Introduzione all'uso del computer

115*

ls R lista recursiva del contenuto della current directory

pippo pluto user1 user2

./user: user e’ a sua volta una directory

program.f dati.dat

./user2: user2 e’ a sua volta una directory

campo.FOR prog.c

cp r user1 user2 copia la directory user1 in user2

ls R

pippo pluto user1 user2

./user1:

program.f dati.dat

./user2:

campo.FOR prog.c user1 in user2 c’e’ anche user1 con tutto il suo contenuto

./user2/user1:

program.f dati.dat

Page 116: Introduzione all'uso del computer

116*

Sintassi : mv [opzioni] file1 file2

Azione : muove files da una directory ad un’altra ovvero cambia nome a files e

directories

Opzioni : i f --

L’opzione -i , come gia’ visto per il comando cp , fa si’ che qualora file2 esista gia’, venga

richiesta all’utente conferma prima di sovrascriverlo.

L’opzione -f al contrario, forza la sovrascrittura di file2 qualora esista gia’, cancellando

l’effetto di un’eventuale opzione -i precedentamente definita ( con un alias ad es. )

L’opzione -- fa si’ che tutti gli argomenti del mv che seguono vengano interpretati

come filenames. Questo permette ai filenames di cominciare con un -

Cambiare nome ad un fileCambiare nome ad un file

Page 117: Introduzione all'uso del computer

117*

ls

file1 file2

mv -i file1 file2

overwrite file2 ? y

ls

file2

ls

file1 file2

mv -- file1 -pinco l’opzione -- permette di dare a file un nome che comincia

con -

ls

file2 -pinco

Page 118: Introduzione all'uso del computer

118*

I comandi piu’ usati per mostrare il contenuto di un file sono : cat , more ( o page ) ,

head , tail , pr , od

Comando cat

Sintassi : cat [opzioni] filename(s)

Azione : stampa a terminale il contenuto del file filename(s) facendo

automaticamente lo scroll del terminale.

Opzioni : -n

L’opzione -n fa il display del file numerando ciascuna linea in modo progressivo.

Display di un fileDisplay di un file

Page 119: Introduzione all'uso del computer

119*

Comando more ( o page )

I comandi more e page sono equivalenti.

Sintassi : more [opzioni] filename(s)

Azioni : mostra il contenuto del file filename(s) una pagina alla volta, per

default sono 2 linee in meno (22) di quante ne puo’ mostrare il terminale

Opzioni : tra le molte opzioni, citiamo solo -number che fa il display con number

linee, e +number che comincia il display a partire dalla linea number.

Questi comandi mostrano una pagina alla volta, indicano la percentuale di file gia’ mostrata

ed attendono il responso dell’utente. Battendo <cr> verra’ mostrata una linea in piu’,

mentre battendo la barra dello spazio, viene mostrata la nuova paginata.

NOTA BENE NOTA BENE Questi comandi hanno alcune delle possibilita’ dell’editor vi , come ad es. la possibilita’ di

andare avanti con f e tornare indietro con b , quella di pattern matching etc.

assomigliando quindi molto ad un line editor read only. Per avere l’elenco completo di

queste possibilita’ basta battere h dopo aver attivato il comando more .

Page 120: Introduzione all'uso del computer

120*

Comando head

Sintassi : head [opzioni] file(s)

Azione : fa il display della prima parte di file(s)

Opzioni : -number che fa il display delle prime number linee. Per default

vengono mostrate le prime 10 linee

Comando tail

Sintassi : tail [opzioni] file(s)

Azione : fa il display dell’ultima parte di file(s)

Opzioni : -number che fa il display delle ultime number linee. Per default

vengono mostrate le ultime 10 linee

Page 121: Introduzione all'uso del computer

121*

cat file

linea1

linea2

linea3

linea4

head -3 file | tail -1

linea3

Page 122: Introduzione all'uso del computer

122*

Comando pr

Sintassi : pr [opzioni] file(s)

Azione : stampa un file allo standard output, con vari formattamenti. Se il file da

stampare non viene specificato, o e’ un - , il comando prende input

da standard input.

Opzioni : citiamo solo le opzioni -number e -m

Senza opzioni, pr stampa file(s) a pagine di 66 linee ciascuna aggiungendo per ogni

pagina, nome del file stampato, data e numero di pagina, ed uno header ed un trailer di 5

righe vuote.

Con l’opzione -number file(s) viene stampato in number colonne.

Con l’opzione -m e nella forma pr -m file1 file2 vengono stampati file1 e file2 uno

accanto all’altro ( utile per fare confronti di files ). E’ da notare che per default pr tronca

le linee troppo lunghe.

Page 123: Introduzione all'uso del computer

123*

Comando od

Sintassi : od [opzioni] file(s)

Azione : stampa il contenuto ( dump ) a terminale di file(s) in formato ottale,

decimale, esadeciamale, ASCII

Opzioni : dipendono da macchina a macchina, per OSF1 citiamo -o -O -a -h

-H -i -I

L’opzione -o ( default ) stampa il file in short words ( parole da 16 bits ) stampando il

contenuto in ottale. L’opzione -O fa lo stesso, ma stampa il file in long words ( 32 bits ).

L’opzione -a stampa file(s) a bytes, e rappresentando ciascun byte col carattere ASCII

corrispondente. Le opzioni -h e -H stampano in esadecimale, il file suddiviso

rispettivamente in short e long words. Infine -i e -I stampano short e long words

interpretate come interi ( senza segno ).

Page 124: Introduzione all'uso del computer

124*

cat file

line1

od -a file

0000000 l i n e 1 nl

0000006

od -o file

0000000 064554 062556 005061

0000006

od -h file

0000006 696c 656e 0a31

la colonna piu’ a sinistra e’ un numeroottale che esprime il numero di bytesfinora stampati

Page 125: Introduzione all'uso del computer

125*

Come gia’ detto, ogni file e directory ha 3 tipi di protezioni od accessi ( r , w , x ) per 3 tipi

di utenti ( owner , group , all ) mentre il superuser ( system manager ) ha sempre tutti gli

accessi disponibili.

Il comando chmod permette

all’utente owner di un file o

directory di cambiare queste

protezioni , mentre umask

assegna le protezioni di default

per la current shell.

Sintassi :

chmod [opzioni] mode file(s)

Il livello di protezione (mode)

puo’ essere dato in 2 modi, in

forma assoluta od in forma

simbolica.

user group world ( other )

rwx rwx rwx

da cui

7 = 4 + 2 + read, write , execute access

6 = 4 + 2 read, write

5 = 4 + read, execute

4 = 4 read only

3 = 2 + write , execute

2 = 2 write only

= execute only

Cambio di protezione di files e directoriesCambio di protezione di files e directories

Page 126: Introduzione all'uso del computer

126*

ls -l a.dat

-r-x------ 1 boca GR1 1954 May 3 18:31 a.dat

chmod 755 a.dat forma assoluta, codice ottale

ls -l a.dat

-rwxr-xr-x 1 boca GR1 1954 May 3 18:31 a.dat

chmod u-w,g+w,o=r a.dat forma simbolica

ls -l a.dat

-r-xrwxr-- 1 boca GR1 1954 May 3 18:31 a.dat

chmod a=rx a.dat

ls -l a.dat

-r-xr-xr-x 1 boca GR1 1954 May 3 18:31 a.dat

Page 127: Introduzione all'uso del computer

127*

Il comando chgrp cambia la proprieta’ di gruppo ( lo user titolare del file rimane lo stesso)

di files e directories. Per applicare questo comando, chi lo fa deve essere il proprietario del

file e deve appartenere al gruppo che riceve la proprieta’ del file.

Sintassi : chgrp [opzioni] newgroup file

groups ; ls -lg file

admin projecta

-rw-rw-r-- 2 system projecta 1594 Feb 20 13:55 file

chgrp admin file ; ls -lg file

-rw-rw-r-- 2 system admin 1594 Feb 20 13:55 file

Cambio di proprieta’ di gruppo di files e directoriesCambio di proprieta’ di gruppo di files e directories

Page 128: Introduzione all'uso del computer

128*

In Unix si possono usare i comandi cmp e diff per stampare a terminale le differenze che

esistono tra due files.

Il comando cmp riporta solo la prima differenza trovata, e funziona anche con files non

ASCII. Il comando diff riporta tutte le differenze tra due ASCII files.

Sintassi : cmp [opzioni] file1 file2

diff [opzioni] file1 file2

pr -m file1 file2

Maine Texas

Montana Montana

Nebraska Illinois

Illinois Alabama

Iowa Maine

cmp file1 file2

file1 file2 differ: char 1 line 1

Confronto tra filesConfronto tra files

Page 129: Introduzione all'uso del computer

129*

si considerino gli stessi files precedenti.

diff file1 file2

1c1

<Maine

---

>Texas

3d2

<Nebraska

5c4,5

<Iowa

---

>Alabama

>Maine

Page 130: Introduzione all'uso del computer

130*

Il significato delle linee di output e’ il seguente :

linea 1 : consiste di 3 campi

a) n. della linea o range dei n. delle linee nel primo file, prima del cambiamento

b) un carattere che descrive il tipo di cambiamento : a =append, c=change , d=delete

c) il n. della linea od il range dei n. delle linee dopo il cambiamento

linea 2 : le linea ( linee ) dal primo file, nel caso sia appropriato, identificate con <

linea 3 : se necessario, il delimitatore --- tra gli items del primo e del secondo file

linea 4 : se necessario, le linee del secondo file, identificate con >

Nell’ esempio quindi, il significato dell’output e’ : cambiare Maine in Texas in file1 , la

linea n. 1 rimane la linea n. 1. Cancellare la linea n. 3 ( Nebraska ) dal file1 cosi’ che

la linea 3 diventa la linea 2. Cambiare la linea 5 in file1 da Iowa in due nuove linee,

Alabama e Maine, cosi’ che la linea 5 diventa linea 4 e linea 5.

diff -e file1 file2

L’opzione -e produce in output i comandi da dare all’editor ed per far diventare

file1 identico a file2

Page 131: Introduzione all'uso del computer

131*

diff -r dir1 dir2

L’opzione -r permette confronti fra le directories dir1 e dir2 , riportando o

l’esistenza di un file in una sola delle directories o le differenze tra files che hanno lo

stesso nome ; questo tipo di confronto viene ripetuto per tutte le sottodirectories di dir1 e

dir2 .

Page 132: Introduzione all'uso del computer

132*

Si usa il comando find per cercare un file che si trova in una certa directory od in

una sua qualunque sottodirectory che si trovi piu’ in basso nella gerarchia delle directories.

Questo comando offre piu’ funzionalita’ di ls R visto in precedenza.

Con find si possono usare vari criteri per localizzare il file(s), si possono manipolare il file(s)

trovati oppure eseguire comandi se si e’ localizzato il file(s). Le ampie funzionalita’ di find

richiedono pero’ una sintassi piu’ complicata dei comandi fin qui visti ; tra l’altro le varie

opzioni devono venir date nel seguente ordine ( a differenza della maggioranza degli altri

comandi della C-shell )

Sintassi : find pathname criterion action

pathname : directory di partenza da cui iniziare la ricerca

criterion : criterio da usare nella ricerca del file(s) ad es. il nome del file(s)

action : quello che il sistema deve fare una volta trovato il file(s)

find / -name ourfile -print

/user1/bin/ourfile

/user3/progs/ourfile

Ricerca di filesRicerca di files

Page 133: Introduzione all'uso del computer

133*

find / -name myfile -exec file {} \;

/user1/bin/myfile: executable

/usr/local/myfile: directory

/etc/myfile: empty

/user3/myfile: ascii text

/user4/data/myfile: data

/user5/scripts/myfile: commands text

trova a partire da / i files di nome myfile e per ognuno di essi esegue il comando file .

Si noti l’uso delle parentesi { } e di \; obbligatorio quando si usa l’opzione -exec .

find /user1 -mtime +45 -print trova i files con modification time maggiore di

45 giorni e stampali a terminale. Da notare che qui modificato significa scritto.

find /user1 -name ‘*.f’ -atime -45 -print trova i files che terminano con

.f e che hanno access time ( cioe’ l’ultima volta che sono stati letti ) minore di 45 giorni.

find /usr -name ‘*.f’ \( -mtime -3 -o -atime -6 \) -exec rm {} \;

trova, a partire da /usr i files che terminano con .f scritti da meno di 3 giorni

OPPURE ( OR logico, opzione -o ) letti da meno di 6 giorni, e cancellali ( -exec rm {} )

Page 134: Introduzione all'uso del computer

134*

Il comando grep cerca una determinata stringa di caratteri in uno o piu’ files.

Sintassi : grep [option(s)] pattern file(s)

cat file

George says :

hey, hello there, what a nice day!

And Ann answers : who cares ?

grep ‘hello there’ file

hey, hello there, what a nice day!

grep -i ‘HELLO there’ file.txt -i : ricerca case insensitive

file1.txt: hey, hello there, what a nice day!

file2 txt: hey, hello there, what a horrible day!

grep -n Goodbye file3 -n : n. della linea(e) che ha la stringa cercata

12:Goodbye and have a nice day!

grep -c Goodbye file3 -c : n. di linee che hanno la stringa cercata

1

Ricerca del contenuto di filesRicerca del contenuto di files

Page 135: Introduzione all'uso del computer

135*

grep -v hey file -v : display delle linee che NON corrispondono

George says :

And Ann answers : who cares ?

grep -l hey fil* -l : mostra solo il nome del file (1 volta sola) nel

file quale una o piu’ corrispondenze sono state trovate

grep -e hello -e George file -e : opzione che serve per cercare

George says : uno o piu’ patterns

hey, hello there, what a nice day!

Per cercare uno o piu’ patterns e’

possibile usare l’opzione -f ed un file

di testo. In tal caso ciascuna linea del

testo diventa la stringa di caratteri con

cui fare il confronto.

cat match

hello

George

grep -f match file

George says :

hey, hello there, what a nice day!

Page 136: Introduzione all'uso del computer

136*

grep mode$ file ricerca del pattern mode posto alla fine della linea

grep ^the file ricerca del pattern the posto all’inizio di una linea

ls -l | grep ^d ricerca delle sottodirectories contenute nella

current directory

Con grep e’ possibile usare le cosiddette regular expressions che sono stringhe composte di

normali caratteri e metacaratteri, che sono un potente mezzo per specificare i patterns con

cui cercare in un file. Le regole per formare regular expressions sono molto articolate, si

possono trovare ad es. con man grep , qui daremo solo un paio di esempi.

Page 137: Introduzione all'uso del computer

137*

cat file1

aaaaa

123

Abbb

zzzzzz

sort file1 sorting nello stesso ordine usato da ls

123 l’output e’ lo standard output

Abbb

aaaaa

zzzzzz

In Unix viene usato il comando sort per ordinare ( sorting ) alfabeticamente un file di testo

e/o per congiungere ( merging ) piu’ files in un unico file.

Sintassi : sort [option(s)] [+pos1] [-pos2] file(s)

Sort e merge di filesSort e merge di files

Page 138: Introduzione all'uso del computer

138*

cat file2

Boca

gianluigi

sort file1 file2 ordina file1 e file2, considerandoli come un unico file,

123 e produce un unico output ( merging ) che va a stdout

Abbb

Boca

aaaaa

gianluigi

zzzzzz

Page 139: Introduzione all'uso del computer

139*

sort -o out file1 output va al file out (uguale a sort file1 > out )

sort -f file1 file2 non fa distinzione tra maiuscole e minuscole

123 al momento del sorting

aaaaa

Abbb

Boca

gianluigi

zzzzzz

cat prova

sedd 123 456 abc

ase 19 25 cccc xdrf

aaa 343 20 arrt eee

sort -k 4,6 prova sceglie il sort key field il quarto campo e, nel

sedd 123 456 abc caso di uguaglianza, il 5o ed il 6o. Se sono ancora uguali, si considera

aaa 343 20 arrt eee tutta la riga. I campi vengono definiti dal delimitatore di

ase 19 25 cccc xdrf default che e’ il blank ; un campo (in assenza dell’opzione

-t ) e’ definito come una sequenza massimale di non-blanks piu’ tutti i blanks che precedono

Page 140: Introduzione all'uso del computer

140*

sort -k 2n,2n prova il sort key field e’ il secondo campo, e’

ase 19 25 cccc xdrf numerico e l’ordinamento considera l’intero

sedd 123 456 abc numero che c’e’ nella sort key ( opzione n )

aaa 343 20 arrt eee

cat prova

sedd:123:456:abc

ase:19:25:cccc:xdrf

aaa:343:20:arrt:eee

sort -t: -k 2n,2n prova come il sort precedente, ma i campi ora

ase:19:25:cccc:xdrf sono delimitati da : (opzione -t ); inoltre

sedd:123:456:abc con questa opzione ogni delimitatore diventa

aaa:343:20:arrt:eee significativo nel senso che due delimitatori

consecutivi definiscono un campo vuoto.

Page 141: Introduzione all'uso del computer

141*

cat prova

sedd:123:456:abc

sedd:123:46:abc

ase:19:25:cccc:xdrf

aaa:343:20:arrt:eee

sort -t: -k 2n,2n -k 3n,3n prova esempio di multifield sort key.

ase:19:25:cccc:xdrf Prima il confronto avviene con il sort key field

sedd:123:46:abc n. 2, in caso di uguaglianza si passa al prossimo

sedd:123:456:abc sort key field, che e’ il n. 3 ; entrambi sono

aaa:343:20:arrt:eee numerici. Il delimitatore e’ :

sort -t: +1n -3 prova esempio di sort field dato con +

ase:19:25:cccc:xdrf Il confronto avviene con il sort key field n. numerico (n)

sedd:123:46:abc e termina col campo 2 (che viene prima del campo 3). Si

sedd:123:456:abc noti che con questa opzione i campi si contano a partire da

aaa:343:20:arrt:eee 0.

Page 142: Introduzione all'uso del computer

142*

ls -l a.out

-rwxr-xr-x 1 boca GR1 24576 May 2 17:29 a.out

ultima modification time

touch a.out

ls -l a.out

-rwxr-xr-x 1 boca GR1 24576 May 25 19:01 a.out

nuova modification time

Il comando touch aggiorna la modification date di un file ( data dell’ultima volta in cui il

file fu scritto ) se esiste gia’, oppure crea un file vuoto se esso non esisteva ancora.

Sintassi : touch [option(s)] file

Creazione od updating di un file : comandoCreazione od updating di un file : comando touchtouch

Page 143: Introduzione all'uso del computer

143*

ls

a.out b.out prova.f

touch pippo ; ls

a.out b.out pippo prova.f crea il file ( vuoto ) pippo

ls

a.out b.out prova.f

touch -c pippo ; ls l’opzione -c impedisce la creazione del file

a.out b.out prova.f pippo

Page 144: Introduzione all'uso del computer

144*

Il comando tr copia caratteri dallo stdin allo stdout con sostituzione o cancellazione dei

caratteri selezionati dall’utente.

Sintassi : tr [option(s)] char1 char2

char1 e’ il carattere che viene sostituito con char2

tr A a < file1 > file2

trasforma tutte le A maiuscole presenti in file1 in a minuscole, e mette l’output

in file2.

tr A-Z a-z < file1 > file2

trasforma tutte le maiuscole presenti in file1 in minuscole, e mette l’output in file2.

tr -d A < file1 > file2

cancella tutte le A maiuscole presenti in file1 e mette l’output in file2.

Character translatorCharacter translator

Page 145: Introduzione all'uso del computer

145*

Il comando wc conta il numero di linee, parole, caratteri ( o bytes ) presenti in uno o piu’

file di testo ASCII e li scrive allo stdout. Nel caso di piu’ files in input ne stampa anche il

totale.

Sintassi : wc [option(s)] file(s)

cat testo

sedd 123 456 abc

ase 19 25 accc xdrf

aaa 343 20 arrt eee

wc testo

3 14 57 testo

wc prov*

12 21 189 prova.f

4 7 47 prova1.f

16 28 236 total

Word countingWord counting

Page 146: Introduzione all'uso del computer

146*

Un link e’ un nome diverso dato ad un file gia’ esistente. Un link non e’ una copia

separata dello stesso file, ma solo una directory entry in piu’ che conduce allo stesso file.

Dato che un file puo’ avere multipli links, puo’ succedere che users diversi leggano o

scrivano contemporaneamente lo stesso file e si possono percio’ avere problemi di

corruzione di files.

Ci sono due tipi di links : un hard link ( default ) ed uno soft o symbolic link. Lo hard link

crea una nuova directory entry per il medesimo file ( senza duplicarlo fisicamente ) cosi’ che

lo stesso file fisico e’ accessibile con due ( o piu’ ) nomi diversi. Se l’utente cancellasse il file

originario ( nome vecchio ) il file sarebbe accessibile allo stesso modo col nome nuovo e

finche’ anche il nome nuovo non e’ cancellato, il file non scompare dalla memoria.

Quando l’utente crea uno hard link il link count aumenta di uno, ma l’ inode del file e’

identico a quello vecchio. Uno hard link non puo’ abbracciare filesystems diversi.

Link tra filesLink tra files

Page 147: Introduzione all'uso del computer

147*

Un symbolic link invece e’ solo un file che contiene il path per il file originale. Se il file

originario fosse cancellato, il link continuerebbe ad esistere, ma non ci sarebbe piu’ modo di

accedere all’informazione del file originario. Un link simbolico non incrementa il link count.

Un link simbolico puo’ abbracciare filesystems diversi.

Page 148: Introduzione all'uso del computer

148*

Sintassi : ln [option(s)] name1 name2

dove name1 e’ il nome del file che esiste gia’ mentre name2 e’ il nome del nuovo file, link

del vecchio.

ls -li

1035465 -rw rw r-- 1 system 2046 Feb 25 13:58 file1.dat

ln file1.dat foo hard link

ls -il

1035465 -rw rw r-- 2 system 2046 Feb 25 13:58 file1.dat

1035465 -rw rw r-- 2 system 2046 Feb 25 13:58 foo

ls -li

1035465 -rw rw r-- 1 system 2046 Feb 25 13:58 file

ln -s file foo link simbolico

ls -il

1035465 -rw rw r-- 1 system 2046 Feb 25 13:58 file

1024567 lrw rw r-- 1 system 2046 Feb 25 13:58 foo -> file

Page 149: Introduzione all'uso del computer

149*

submits a schedule ofcommands to cron

display and update informationabout the top cpu processes

shows current process status

QQuesto capitolo tratta di quei comandi che permettono di :uesto capitolo tratta di quei comandi che permettono di :

monitorare gli users ed i loro processmonitorare gli users ed i loro processmonitorare gli users ed i loro processmonitorare gli users ed i loro process

whoamiusers (u)whowrwhopstopdulimit

whoamiusers (u)whowrwhopstopdulimit

monitorare il sistemamonitorare il sistemamonitorare il sistemamonitorare il sistema

modifica dei processmodifica dei processmodifica dei processmodifica dei process

displays the users’s name

displays a list of users who are on the system

identifies users currently logged in

summary of current system activities

shows users logged in to hosts on the local network

lists the system resources available to useror reduces resources limits of a process

displays a summary of disk usage

displays virtual memory statisticsdisplays statistics on free disk space

vmstatdf

vmstatdf

alters priority to running processes

lowers priority to a process to be executed

runs commands at a later timesend a signal to a process kill

atcrontabnicerenice

killatcrontabnicerenice

Page 150: Introduzione all'uso del computer

150*

7.1 Monitorare gli users ed i loro process7.1 Monitorare gli users ed i loro process7.1 Monitorare gli users ed i loro process7.1 Monitorare gli users ed i loro process

Esaminiamo ora quei comandi che permettono di sapere quanti e quali utenti sonocollegati al sistema, quali process hanno ‘lanciato’, quanto spazio su disco e’ ancoradisponibile, quali sono i limiti di utilizzo delle risorse del computer imposti ad un certoutente.

Esaminiamo ora quei comandi che permettono di sapere quanti e quali utenti sonocollegati al sistema, quali process hanno ‘lanciato’, quanto spazio su disco e’ ancoradisponibile, quali sono i limiti di utilizzo delle risorse del computer imposti ad un certoutente.

Sintassi : whoami

Azione : mostra lo username associato

con la sessione corrente.

Sintassi : whoami

Azione : mostra lo username associato

con la sessione corrente.

Comando Comando whoamiwhoamiComando Comando whoamiwhoami

Serve per esempio quando si utilizzano piu’ sessioni contemporaneamente se ci sidimentica con quale username abbiamo aperto la sessione.

Serve per esempio quando si utilizzano piu’ sessioni contemporaneamente se ci sidimentica con quale username abbiamo aperto la sessione.

Page 151: Introduzione all'uso del computer

151*

Sintassi : users (oppure u )

Azione : stampa a terminale l’elenco alfabetico degli usernames degli utenti

interattivi che sono correntemente collegati

Sintassi : users (oppure u )

Azione : stampa a terminale l’elenco alfabetico degli usernames degli utenti

interattivi che sono correntemente collegati

Comandi Comandi users ( u )users ( u ),, who who,, w w ee rwho rwhoComandi Comandi users ( u )users ( u ),, who who,, w w ee rwho rwho

usernames degli utenti correntemente collegati in interattivousernames degli utenti correntemente collegati in interattivo

Questi comandi forniscono informazioni, via via con maggiore dettaglio, sugli utenticorrentemente collegati in modo interattivo.

Questi comandi forniscono informazioni, via via con maggiore dettaglio, sugli utenticorrentemente collegati in modo interattivo.

Page 152: Introduzione all'uso del computer

152*

Sintassi : who

Azione : stampa a terminale l’elenco degli usernames degli utenti

interattivi che sono correntemente collegati, il nome del device al

quale il terminale dell’utente e’ collegato, e l’ora del login.

Sintassi : who

Azione : stampa a terminale l’elenco degli usernames degli utenti

interattivi che sono correntemente collegati, il nome del device al

quale il terminale dell’utente e’ collegato, e l’ora del login.

login timelogin timedevicedevice

usernameusername

Page 153: Introduzione all'uso del computer

153*

Sintassi : w [option(s)] [username]

Azione : stampa a terminale una linea di header con l’ora corrente, da quanto

tempo il computer e’ attivo, il numero di utenti, ed il load average, vale a dire il numero

di jobs nella run queue negli ultimi 5 secondi, 30 secondi o 60 secondi. Di ciascun utente

(se username manca) od eventualmente solo dell’utente username viene mostrato :

username, device, da quale computer e’ stato fatto il login, ora del login, da quanto tempo

l’utente e’ rimasto idle, il CPU time accumulato da tutti i process dell’utente dal momento

del login (JCPU) in minuti, il CPU time (in minuti) usato da(i) process(es) attivi

correntemente (PCPU), il nome del programma eseguito dal current process.

Sintassi : w [option(s)] [username]

Azione : stampa a terminale una linea di header con l’ora corrente, da quanto

tempo il computer e’ attivo, il numero di utenti, ed il load average, vale a dire il numero

di jobs nella run queue negli ultimi 5 secondi, 30 secondi o 60 secondi. Di ciascun utente

(se username manca) od eventualmente solo dell’utente username viene mostrato :

username, device, da quale computer e’ stato fatto il login, ora del login, da quanto tempo

l’utente e’ rimasto idle, il CPU time accumulato da tutti i process dell’utente dal momento

del login (JCPU) in minuti, il CPU time (in minuti) usato da(i) process(es) attivi

correntemente (PCPU), il nome del programma eseguito dal current process.

Page 154: Introduzione all'uso del computer

154*

Sintassi : w [option(s)] [username]

Azione : stampa a terminale una linea di header con l’ora corrente, da quanto

tempo il computer e’ attivo, il numero di utenti, ed il load average, vale a dire il numero

di jobs nella run queue negli ultimi 5 secondi, 30 secondi o 60 secondi. Di ciascun utente

(se username manca) od eventualmente solo dell’utente username viene mostrato :

username, device, da quale computer e’ stato fatto il login, ora del login, da quanto tempo

l’utente e’ rimasto idle, il CPU time accumulato da tutti i process dell’utente dal momento

del login (JCPU) in minuti, il CPU time (in minuti) usato da(i) process(es) attivi

correntemente (PCPU), il nome del programma eseguito dal current process.

Sintassi : w [option(s)] [username]

Azione : stampa a terminale una linea di header con l’ora corrente, da quanto

tempo il computer e’ attivo, il numero di utenti, ed il load average, vale a dire il numero

di jobs nella run queue negli ultimi 5 secondi, 30 secondi o 60 secondi. Di ciascun utente

(se username manca) od eventualmente solo dell’utente username viene mostrato :

username, device, da quale computer e’ stato fatto il login, ora del login, da quanto tempo

l’utente e’ rimasto idle, il CPU time accumulato da tutti i process dell’utente dal momento

del login (JCPU) in minuti, il CPU time (in minuti) usato da(i) process(es) attivi

correntemente (PCPU), il nome del programma eseguito dal current process.

Page 155: Introduzione all'uso del computer

155*

Sintassi : rwho [-a] [username]

Azione : comando che fornisce informazioni analogomente al comando who,

ma anche per users collegati su computers remoti facenti parte del

network locale. Se username viene specificato, solo su di esso

vengono date informazioni

Opzioni : -a per elencare tutti gli utenti sui computer remoti; altrimenti

sono segnalati solo quelli che hanno toccato la tastiera nell’ultima ora.

Sintassi : rwho [-a] [username]

Azione : comando che fornisce informazioni analogomente al comando who,

ma anche per users collegati su computers remoti facenti parte del

network locale. Se username viene specificato, solo su di esso

vengono date informazioni

Opzioni : -a per elencare tutti gli utenti sui computer remoti; altrimenti

sono segnalati solo quelli che hanno toccato la tastiera nell’ultima ora.

login timelogin timedevicedeviceusernameusername hostnamehostname idle time (in minuti)idle time (in minuti)

Page 156: Introduzione all'uso del computer

156*

Sintassi : ps [option(s)]

Azione : stampa a terminale un elenco di risorse usate da uno o piu’ process

Opzioni : ci sono molte opzioni, molte sono machine-dependent; qui di seguito

sono esemplificate le principali, valide per Linux. Per maggior dettagli : man ps

Sintassi : ps [option(s)]

Azione : stampa a terminale un elenco di risorse usate da uno o piu’ process

Opzioni : ci sono molte opzioni, molte sono machine-dependent; qui di seguito

sono esemplificate le principali, valide per Linux. Per maggior dettagli : man ps

Comando Comando pspsComando Comando psps

Questo comando (process status) mostra le risorse del sistema che vengono ‘consumate’da uno o piu’ process.

Questo comando (process status) mostra le risorse del sistema che vengono ‘consumate’da uno o piu’ process.

comando impartitocomando impartito

CPU time usatodal process

CPU time usatodal process

process ID numberprocess ID number

terminale da cui e’stato lanciato il

process

terminale da cui e’stato lanciato il

process

Page 157: Introduzione all'uso del computer

157*

Sintassi : ps l

Azione : come ps ma con maggiori dettagli (long list)

Sintassi : ps l

Azione : come ps ma con maggiori dettagli (long list)

parent process ID numberparent process ID number priorità (valori piu’ alti = minore priorita’)priorità (valori piu’ alti = minore priorita’)

% CPU used% CPU used

address of the name of the kernel functionthe task currently is sleeping in

address of the name of the kernel functionthe task currently is sleeping in

nice value = process scheduling increment;(valori piu’ alti = minore priorita’)

nice value = process scheduling increment;(valori piu’ alti = minore priorita’)

user ID numberuser ID number

status of process : R = running ; S = sleeping ; D = uninterruptible sleep (IO queues) Z = zombie (stoppato in modo non appropriato dal parent process) ; T = stopped ; W = swapped out ; C = negative nice values ; N = positive nice values

status of process : R = running ; S = sleeping ; D = uninterruptible sleep (IO queues) Z = zombie (stoppato in modo non appropriato dal parent process) ; T = stopped ; W = swapped out ; C = negative nice values ; N = positive nice values

Page 158: Introduzione all'uso del computer

158*

Sintassi : ps f

Azione : come ps ma con maggiori dettagli (full list)

Sintassi : ps f

Azione : come ps ma con maggiori dettagli (full list)

start time of the processstart time of the process

Page 159: Introduzione all'uso del computer

159*

Sintassi : ps v

Azione : come ps ma con maggiori dettagli; mostra lo stato della memoria

virtuale

Sintassi : ps v

Azione : come ps ma con maggiori dettagli; mostra lo stato della memoria

virtuale

status of processstatus of process total amount of physical memory used by the task in Kbytestotal amount of physical memory used by the task in Kbytes

percentage of physical memory used by the jobpercentage of physical memory used by the job

Page 160: Introduzione all'uso del computer

160*

Sintassi : ps u username

Azione : mostra informazioni su tutti i process appartenenti a username,

anche quelli che non sono stati lanciati dalla sessione corrente.

Sintassi : ps u username

Azione : mostra informazioni su tutti i process appartenenti a username,

anche quelli che non sono stati lanciati dalla sessione corrente.

job lanciato dalla sessione corrente ed attaccato al suo terminale

job lanciato dalla sessione corrente ed attaccato al suo terminale

job lanciato non dalla sessione correntee non ‘attaccato’ ad alcun terminale

job lanciato non dalla sessione correntee non ‘attaccato’ ad alcun terminale

Page 161: Introduzione all'uso del computer

161*

Sintassi : ps e

Azione : mostra informazioni su tutti i process presenti sul computer

Sintassi : ps e

Azione : mostra informazioni su tutti i process presenti sul computer

con ancheopzione f

con ancheopzione f

Page 162: Introduzione all'uso del computer

162*

Riassunto delle opzioni disponibil i con ps su LinuxRiassunto delle opzioni disponibil i con ps su Linux

Page 163: Introduzione all'uso del computer

163*

Sintassi : top [option(s)]

Azione : produce una schermata che viene rinfrescata di default ogni 5 secondi

con informazioni sui process maggiormente CPU-intensive.

Opzioni : [d delay specifica che il display venga rinfrescato ogni delay

secondi

[p ID viene mostrato solo il process con ID number ID

[q viene rinfrescato il display il piu’ velocemente possibile

[n num viene rifrescato il display num volte e poi top finisce.

Sintassi : top [option(s)]

Azione : produce una schermata che viene rinfrescata di default ogni 5 secondi

con informazioni sui process maggiormente CPU-intensive.

Opzioni : [d delay specifica che il display venga rinfrescato ogni delay

secondi

[p ID viene mostrato solo il process con ID number ID

[q viene rinfrescato il display il piu’ velocemente possibile

[n num viene rifrescato il display num volte e poi top finisce.

Comando Comando toptopComando Comando toptop

Questo comando mostra l’attivita’ del processore in real time. Mostra una lista dei jobsmaggiormente CPU-intensive del sistema e fornisce un’interfaccia interattiva permanipolare i process.

Questo comando mostra l’attivita’ del processore in real time. Mostra una lista dei jobsmaggiormente CPU-intensive del sistema e fornisce un’interfaccia interattiva permanipolare i process.

Page 164: Introduzione all'uso del computer

164*

size of the jobcode + data + stack, in Kbytes

size of the jobcode + data + stack, in Kbytes

numero e tipo di jobsnumero e tipo di jobs% CPU usata dagli utenti% CPU usata dagli utenti

% CPU usata dal sistema% CPU usata dal sistema % jobs con NICEnegativa

% jobs con NICEnegativa

% jobs idle% jobs idle

stato swapspace

stato swapspace

stato memoriadel sistema

stato memoriadel sistema

status, < for processes with negativenice, W for swapped processes (doesn’twork correctly for kernel processes)

status, < for processes with negativenice, W for swapped processes (doesn’twork correctly for kernel processes)

total shared memorytotal shared memorytotal physicalmemoryused by job,in Kbytes

total physicalmemoryused by job,in Kbytes

Page 165: Introduzione all'uso del computer

165*

Sintassi : du [option(s)] [file(s)] [directory(ies)]

Azione : segnala quanto spazio su disco e’ occupato dai files o directories

specificate (in unita’ di 1024 bytes Kbyte) e per ciascuna

subdirectory.

Opzioni : a se l’argomento e’ una directory mostra lo spazio occupato da

ciascun file, non solo dalla directory

s summary, fa vedere lo spazio occupato in totale da ciascun

argomento.

Sintassi : du [option(s)] [file(s)] [directory(ies)]

Azione : segnala quanto spazio su disco e’ occupato dai files o directories

specificate (in unita’ di 1024 bytes Kbyte) e per ciascuna

subdirectory.

Opzioni : a se l’argomento e’ una directory mostra lo spazio occupato da

ciascun file, non solo dalla directory

s summary, fa vedere lo spazio occupato in totale da ciascun

argomento.

Comando Comando duduComando Comando dudu

Page 166: Introduzione all'uso del computer

166*

equivalente adu .

equivalente adu .

dimensioni in Kbytesdimensioni in Kbytes directorydirectory

Page 167: Introduzione all'uso del computer

167*

Sintassi : limit [resource] [value]

Azione : e’ un commando built-in nella C shell. Elenca le risorse di sistema

disponibili ai process di un utente. Si puo’ usare questo comando per diminuire

(non per aumentare !) i valori assegnati, specificando resource e value.

Sintassi : limit [resource] [value]

Azione : e’ un commando built-in nella C shell. Elenca le risorse di sistema

disponibili ai process di un utente. Si puo’ usare questo comando per diminuire

(non per aumentare !) i valori assegnati, specificando resource e value.

Comando Comando limitlimitComando Comando limitlimit

maximum CPU time assignedmaximum CPU time assigned

maximum size in Kbytes of any one filemaximum size in Kbytes of any one file

maximum size in Kbytesof the core dump file

maximum size in Kbytesof the core dump file

amount of maximum memory(in Kbytes) a user can consume

amount of maximum memory(in Kbytes) a user can consume

maximum processes at the same timemaximum processes at the same time

maximum number open files at the same timemaximum number open files at the same time

Page 168: Introduzione all'uso del computer

168*

pone a zero la massima grandezzapossibile del file core (cioe’ inpratica impedisce la creazione di core ).

pone a zero la massima grandezzapossibile del file core (cioe’ inpratica impedisce la creazione di core ).

Page 169: Introduzione all'uso del computer

169*

7.2 Monitorare il sistema7.2 Monitorare il sistema7.2 Monitorare il sistema7.2 Monitorare il sistema

Esaminiamo ora dei comandi che permettono di sapere come l’insieme di tutti gli utentiusa le risorse di memoria virtuale e di memoria su disco ( comandi vmstat e df ).

Esaminiamo ora dei comandi che permettono di sapere come l’insieme di tutti gli utentiusa le risorse di memoria virtuale e di memoria su disco ( comandi vmstat e df ).

Sintassi : vmstat [option(s)] [delay [count]]

Azione : mostra la statistica della memoria virtuale del sistema, fornendo

anche informazioni sui process, su paging, block IO, traps ed attivita’

della CPU. Il primo output del comando fa una media a partire

dall’ultimo reboot del sistema, successivamente, se delay e’ stato

specificato, le varie quantita’ vengono calcolate ogni delay secondi,

per count volte. Se delay e’ stato specificato ma count no, il

display viene fatto fino ad interruzione del comando con <ctrlC>.

Opzioni : n lo header dell’output del comando viene fatto vedere una volta sola.

Sintassi : vmstat [option(s)] [delay [count]]

Azione : mostra la statistica della memoria virtuale del sistema, fornendo

anche informazioni sui process, su paging, block IO, traps ed attivita’

della CPU. Il primo output del comando fa una media a partire

dall’ultimo reboot del sistema, successivamente, se delay e’ stato

specificato, le varie quantita’ vengono calcolate ogni delay secondi,

per count volte. Se delay e’ stato specificato ma count no, il

display viene fatto fino ad interruzione del comando con <ctrlC>.

Opzioni : n lo header dell’output del comando viene fatto vedere una volta sola.

Comando Comando vmstatvmstatComando Comando vmstatvmstat

Page 170: Introduzione all'uso del computer

170*

memory (in Kb)process statusr : n. waiting for run timeb : n. in uninterruptible sleepw : n. runnable but swapped out

process statusr : n. waiting for run timeb : n. in uninterruptible sleepw : n. runnable but swapped out

virtual memory used

amount of cache

memory used as buffers

free memory

Page 171: Introduzione all'uso del computer

171*

swap spacesi : memory swapped in from disk (Kb/s)so : memory swapped out to disk (Kb/s)

swap spacesi : memory swapped in from disk (Kb/s)so : memory swapped out to disk (Kb/s)

I/Obi : blocks sent to a block device (blocks/s)bo : blocks received from a block device (blocks/s)

I/Obi : blocks sent to a block device (blocks/s)bo : blocks received from a block device (blocks/s)

systemin : n. interrupts per sec.cs : number of context switch per sec.us : % user CPU timesy : % system CPU time

systemin : n. interrupts per sec.cs : number of context switch per sec.us : % user CPU timesy : % system CPU time

ogni 10 secondi, per 5 volteogni 10 secondi, per 5 volte

Page 172: Introduzione all'uso del computer

172*

Sintassi : df [options] [file(s),directory(ies)]

Azione : mostra lo spazio su disco usato e disponibile. Senza argomenti, mostra la

quantita’ di spazio per tutti i file systems montati sulla macchina. Con

argomento file(s) o directory(ies) lista lo spazio disponibile ed

usato del filesystem al quale il file o la directory appartiene.

Opzioni : a all, lista anche i filesystems che hanno dimensione 0

blocksize=SIZE usa come unita’ di misura blocchi da SIZE-byte

k usa come unita’ di misura blocchi da 1024 bytes

i lista l’informazione sugli inodes al posto della dimensioni in blocchi.

Sintassi : df [options] [file(s),directory(ies)]

Azione : mostra lo spazio su disco usato e disponibile. Senza argomenti, mostra la

quantita’ di spazio per tutti i file systems montati sulla macchina. Con

argomento file(s) o directory(ies) lista lo spazio disponibile ed

usato del filesystem al quale il file o la directory appartiene.

Opzioni : a all, lista anche i filesystems che hanno dimensione 0

blocksize=SIZE usa come unita’ di misura blocchi da SIZE-byte

k usa come unita’ di misura blocchi da 1024 bytes

i lista l’informazione sugli inodes al posto della dimensioni in blocchi.

Comando Comando dfdfComando Comando dfdf

Page 173: Introduzione all'uso del computer

173*

mount pointmount point% spaziousato

% spaziousato

spaziodisponibile(Kb)

spaziodisponibile(Kb)

spaziousato(Kb)

spaziousato(Kb)

spazio totaledisponibile in Kb

spazio totaledisponibile in Kb

filesystemsfilesystems

viene mostrato lo spazio su disco disponibileed usato del filesystem al quale la directory/home/boca appartiene

viene mostrato lo spazio su disco disponibileed usato del filesystem al quale la directory/home/boca appartiene

Page 174: Introduzione all'uso del computer

174*

7.3 Modifica dei process7.3 Modifica dei process7.3 Modifica dei process7.3 Modifica dei process

Unix possiede 5 comandi usati comunemente per modificare i process degli utenti :kill , per terminare un process; at , per far partire un process piu’ tardi; crontab ,per schedulare la partenza periodica di jobs, nice per modificare la priorita’ che ilsystema assegna di default ad un process che parte; renice per modificare la priorita’di un process gia’ lanciato e limit , che abbiamo gia’ visto, per ridurre le risorsedisponibili ad un process.

Unix possiede 5 comandi usati comunemente per modificare i process degli utenti :kill , per terminare un process; at , per far partire un process piu’ tardi; crontab ,per schedulare la partenza periodica di jobs, nice per modificare la priorita’ che ilsystema assegna di default ad un process che parte; renice per modificare la priorita’di un process gia’ lanciato e limit , che abbiamo gia’ visto, per ridurre le risorsedisponibili ad un process.

Sintassi : kill [options] [-s signal] [PID] [%jobnumber]

Azione : comando built-in nella C shell. Manda il signal specificato al process

specificato da PID o da %jobnumber .

Opzioni : segnalo l’opzione 9 per far terminare certamente un process.

Sintassi : kill [options] [-s signal] [PID] [%jobnumber]

Azione : comando built-in nella C shell. Manda il signal specificato al process

specificato da PID o da %jobnumber .

Opzioni : segnalo l’opzione 9 per far terminare certamente un process.

Comando Comando killkillComando Comando killkill

Page 175: Introduzione all'uso del computer

175*

jobnumberjobnumber process identificationnumber (PID)

process identificationnumber (PID)

opzione 9 per eliminarecertamente il process

opzione 9 per eliminarecertamente il process

Page 176: Introduzione all'uso del computer

176*

Sintassi : at [options] time

command

...

command

<ctrlD>

Azione : esegue uno o piu’ comandi all’istante specificato da time . La lista dei

comandi da eseguire deve essere messa nelle linee che seguono

at [options] time e deve essere terminata da un <ctrlD>.

L’eventuale output dei comandi che normalmente verrebbe mandato a

stdout , viene invece spedito per mail all’utente. La data puo’ essere

specificata (in LINUX) in vari modi, vedi man at per la lista completa

delle possibilita’. Nel seguito vengono mostrati solo alcuni esempi.

Sintassi : at [options] time

command

...

command

<ctrlD>

Azione : esegue uno o piu’ comandi all’istante specificato da time . La lista dei

comandi da eseguire deve essere messa nelle linee che seguono

at [options] time e deve essere terminata da un <ctrlD>.

L’eventuale output dei comandi che normalmente verrebbe mandato a

stdout , viene invece spedito per mail all’utente. La data puo’ essere

specificata (in LINUX) in vari modi, vedi man at per la lista completa

delle possibilita’. Nel seguito vengono mostrati solo alcuni esempi.

Comando Comando atatComando Comando atat

Page 177: Introduzione all'uso del computer

177*

ora alla qualeil comandoverra’ eseguito

ora alla qualeil comandoverra’ eseguito

Page 178: Introduzione all'uso del computer

178*

data alla qualeil comandoverra’ eseguito

data alla qualeil comandoverra’ eseguito

Page 179: Introduzione all'uso del computer

179*

comando da eseguirecomando da eseguire

Page 180: Introduzione all'uso del computer

180*

il <ctrl>D finaleper segnalareche l’input di ate’ finito

il <ctrl>D finaleper segnalareche l’input di ate’ finito

Page 181: Introduzione all'uso del computer

181*

ora alla quale il comandoverra’ eseguito, in questocaso alle 16:00 (altri modiammessi sono : noon , midnight )

ora alla quale il comandoverra’ eseguito, in questocaso alle 16:00 (altri modiammessi sono : noon , midnight )

Page 182: Introduzione all'uso del computer

182*

Sintassi : crontab [options]

Azione : questo comando edita, lista o rimuove la tabella usata da cron, che e’

un programma daemon che permette di far partire programmi o

comandi in maniera automatica e periodica. Come at fa partire jobs

automaticamente, tuttavia li fa partire periodicamente, ad una data ora

di determinati giorni di determinati mesi dell’anno. Il programma cron

legge la tabella nella quale sono elencati i jobs da far partire, ad ogni

quanto tempo.

Opzioni : l mostra la tabella usata da cron

e edita la tabella usata da cron con l’editor di default

r cancella la tabella usata da cron

Sintassi : crontab [options]

Azione : questo comando edita, lista o rimuove la tabella usata da cron, che e’

un programma daemon che permette di far partire programmi o

comandi in maniera automatica e periodica. Come at fa partire jobs

automaticamente, tuttavia li fa partire periodicamente, ad una data ora

di determinati giorni di determinati mesi dell’anno. Il programma cron

legge la tabella nella quale sono elencati i jobs da far partire, ad ogni

quanto tempo.

Opzioni : l mostra la tabella usata da cron

e edita la tabella usata da cron con l’editor di default

r cancella la tabella usata da cron

Comando Comando crontabcrontabComando Comando crontabcrontab

Page 183: Introduzione all'uso del computer

183*

opzionel : lista la tabella usata da cronopzionel : lista la tabella usata da cron

il minuto (da 0 a 59)in cui deve partire il job

il minuto (da 0 a 59)in cui deve partire il job

NOTA BENE NOTA BENE valori accettati nei campi numerici :- un intero- una lista di interi separati da virgole- due interi separati da per indicare un range- un per indicare tutti i valori possibili

NOTA BENE NOTA BENE valori accettati nei campi numerici :- un intero- una lista di interi separati da virgole- due interi separati da per indicare un range- un per indicare tutti i valori possibili

il giorno del mese (da 1 a 31)in cui deve partire il job

il giorno del mese (da 1 a 31)in cui deve partire il job

l’ora (da 0 a 23) in cuideve partire il job

l’ora (da 0 a 23) in cuideve partire il job

Page 184: Introduzione all'uso del computer

184*

il mese dell’anno (da 1 a 12) in cui deve partire il job( = ogni mese)

il mese dell’anno (da 1 a 12) in cui deve partire il job( = ogni mese)

il giorno della settimanain cui deve partire il job( = ogni giorno)

il giorno della settimanain cui deve partire il job( = ogni giorno)

nome del job da far partirenome del job da far partire

NOTA BENE NOTA BENE si possono specificare i giorni incui far partire il job in due campi(giorno del mese e giorno dellasettimana). Si possono usare siaentrambi i campi, che un campo solo.Se si usa solo un campo, l’altro deveavere l’asterisco.

NOTA BENE NOTA BENE si possono specificare i giorni incui far partire il job in due campi(giorno del mese e giorno dellasettimana). Si possono usare siaentrambi i campi, che un campo solo.Se si usa solo un campo, l’altro deveavere l’asterisco.

Page 185: Introduzione all'uso del computer

185*

Comandi Comandi nice nice ee renice reniceComandi Comandi nice nice ee renice renice

Sintassi : nice number [command]

Azione : questo comando fa partire il nuovo job command con scheduling

priority modificata aggiungendo number alla priorita’ normalmente

assegnata di default dal sistema. La priorita’ aggiuntiva va da -20 (il

job viene eseguito piu’ in fretta) a 19 (esecuzione piu’ lenta).

Tuttavia solo il superuser puo’ assegnare un nice negativo.

Opzioni : ADJUST priorita’ aggiuntiva; il normale utente puo’ usare solo un

valore positivo.

Sintassi : renice number [PID] [-g [pgrp]] [-u [user] ]

Azione : altera la scheduling priority di uno o piu’ jobs che runnano. Per la

priority vale lo stesso discorso fatto per nice. Specificando PID si altera

il nice di un job, specificando -g pgrp si alterano le priorita’ di tutti

i process di quel gruppo, specificando -u user si alterano tutti

quelli di quell’utente.

Page 186: Introduzione all'uso del computer

186*

fa partire il job in normalmente e lo mette in backgroundfa partire il job in normalmente e lo mette in background

Process ID numberProcess ID number priorita’ del jobpriorita’ del job

fa partire il job con nice positiva e lo mette in backgroundfa partire il job con nice positiva e lo mette in background

Process ID numberProcess ID number

Page 187: Introduzione all'uso del computer

187*

nice del jobnice del jobpriorita’ del jobpriorita’ del job

modifica il nice del job 974 che gia’ runnamodifica il nice del job 974 che gia’ runna

Page 188: Introduzione all'uso del computer

188*

QQuesto capitolo tratta della programmazione mediante comandi di shell, raggruppati inuesto capitolo tratta della programmazione mediante comandi di shell, raggruppati in

in costrutti in un file chiamato in costrutti in un file chiamato shell scriptshell script . . Discuteremo solo la sintassi della C (tcsh) shell.

Page 189: Introduzione all'uso del computer

189*

E’ sufficiente scrivere a terminale il nome dello script. Se tale nome e’ dato in forma E’ sufficiente scrivere a terminale il nome dello script. Se tale nome e’ dato in forma relativa, la C shell usera’ la variabile di shell relativa, la C shell usera’ la variabile di shell pathpath per sapere in quali directories cercare per sapere in quali directories cercare lo script. Lo script dovra’ avere la protezione lo script. Lo script dovra’ avere la protezione x x on per poter essere eseguibile.on per poter essere eseguibile.

directories nelle quali viene cercato lo scriptdirectories nelle quali viene cercato lo scriptdirectories nelle quali viene cercato lo scriptdirectories nelle quali viene cercato lo script

8.1 Esecuzione di un shell script8.1 Esecuzione di un shell script8.1 Esecuzione di un shell script8.1 Esecuzione di un shell script

#!/bin/tcsh -f#questa e’ una linea di commentoexit

Come tutti i comandi che non sono built-innella shell, lo script viene eseguito da unchild process con un forking al momentodell’esecuzione del comando. Il child processeredita tutte le variabili di shell definite per ilparent process. In piu’ per esso viene eseguitoil file .cshrc (e .tcshrc) e quindi eredita tuttele definizioni ivi contenute. Quest’ultimacosa viene evitata con l’opzione -f (fast start) e far partire lo script piu’ velocemente

unica eccezione : NON e’ unalinea di commento ma ladichiarazione che il testo chesegue deve essere interpretato dalprogramma /bin/tcsh (la tc shell)

unica eccezione : NON e’ unalinea di commento ma ladichiarazione che il testo chesegue deve essere interpretato dalprogramma /bin/tcsh (la tc shell)

il # serve per commentareil # serve per commentare

Page 190: Introduzione all'uso del computer

190*

Sono gia’ state definite le variabili di shell precedentemente ed e’ gia’ stato detto che ad Sono gia’ state definite le variabili di shell precedentemente ed e’ gia’ stato detto che ad esse si possono assegnare valori tramite il comando esse si possono assegnare valori tramite il comando setset. Riassumiamo qui alcuni . Riassumiamo qui alcuni concetti:concetti:

8.2 Variabili di shell8.2 Variabili di shell8.2 Variabili di shell8.2 Variabili di shell

le variabili di shell sono valide solo per il process per il quale vengono assegnatee per tutta la durata di quest’ultimo. Vengono perse quando si cambia shell.

le variabili di shell sono valide solo per il process per il quale vengono assegnatee per tutta la durata di quest’ultimo. Vengono perse quando si cambia shell.

ad una variabile di shell si possono assegnare sia numeri che caratteriad una variabile di shell si possono assegnare sia numeri che caratteri

il contenuto di una variabile di shell si ottiene facendo precedere il nome dellavariabile dal metacarattere $

il contenuto di una variabile di shell si ottiene facendo precedere il nome dellavariabile dal metacarattere $

ci si e’ dimenticati del $ !!ci si e’ dimenticati del $ !!

valore numericovalore numerico

valore alfanumericovalore alfanumerico

Page 191: Introduzione all'uso del computer

191*

Variabili di shell preassegnateVariabili di shell preassegnateVariabili di shell preassegnateVariabili di shell preassegnate

il comando set senza argomentici da’ la lista delle variabili dishell preassegnate e di quelledefinite dall’utente

il comando set senza argomentici da’ la lista delle variabili dishell preassegnate e di quelledefinite dall’utente

nome della variabile di shellnome della variabile di shell

contenuto dellavariabile di shell

contenuto dellavariabile di shell

Page 192: Introduzione all'uso del computer

192*

Forme speciali di una variabili di shellForme speciali di una variabili di shellForme speciali di una variabili di shellForme speciali di una variabili di shell

La tavola qui sotto riporta le forme speciali che puo’ assumere una variabile di shell che, La tavola qui sotto riporta le forme speciali che puo’ assumere una variabile di shell che, tra l’altro, puo’ contenere piu’ valori, come un vettore. In questo caso (a differenza del tra l’altro, puo’ contenere piu’ valori, come un vettore. In questo caso (a differenza del C) gli elementi del vettore vengono contati a partire da C) gli elementi del vettore vengono contati a partire da . .

$?$?namename 0 se la variabile0 se la variabile namename non e’ definita, 1 se e’ definitanon e’ definita, 1 se e’ definita$#$#namename numero di elementi della variabilenumero di elementi della variabile namename$$namename[[mm]] da’ l’elementoda’ l’elemento m m -esimo della variabile-esimo della variabile$$namename[[mm--nn]] da’ gli elementi dada’ gli elementi da mm aa n n compresi della variabilecompresi della variabile namename$$namename[[mm-]-] da’ gli elementi dada’ gli elementi da m m (compreso) fino all’ultimo della variabile(compreso) fino all’ultimo della variabile namename$$namename[-[-mm]] da’ gli elementi dal primo fino alda’ gli elementi dal primo fino al mm-esimo compresi-esimo compresi

della variabiledella variabile namename$$namename[[]] da’ tutti gli elementi della variabileda’ tutti gli elementi della variabile namename$$namename[$#[$#namename] ] l’ultimo elemento della variabilel’ultimo elemento della variabile namename

TavolaTavola

Page 193: Introduzione all'uso del computer

193*

Forme speciali di una variabili di shellForme speciali di una variabili di shellForme speciali di una variabili di shellForme speciali di una variabili di shell

assegnazione di 8 valoriassegnazione di 8 valorialla variabile di shell alla variabile di shell varvarche cosi’ diventa un vettore.che cosi’ diventa un vettore.Si notino le Si notino le ( )( ) , obbligatorie. , obbligatorie.

assegnazione di 8 valoriassegnazione di 8 valorialla variabile di shell alla variabile di shell varvarche cosi’ diventa un vettore.che cosi’ diventa un vettore.Si notino le Si notino le ( )( ) , obbligatorie. , obbligatorie.

dal secondo al sesto valoredal secondo al sesto valoredella variabile della variabile varvar

dal secondo al sesto valoredal secondo al sesto valoredella variabile della variabile varvar

la variabile la variabile varvar e’ un array di 8 valori e’ un array di 8 valorila variabile la variabile varvar e’ un array di 8 valori e’ un array di 8 valori

la variabile la variabile varvar e’ stata definita e’ stata definitala variabile la variabile varvar e’ stata definita e’ stata definita

dal terzo all’ultimo valore della variabile dal terzo all’ultimo valore della variabile varvardal terzo all’ultimo valore della variabile dal terzo all’ultimo valore della variabile varvar

tutti i valori della variabile tutti i valori della variabile varvartutti i valori della variabile tutti i valori della variabile varvar

ultimo valore contenuto nella variabile ultimo valore contenuto nella variabile varvarultimo valore contenuto nella variabile ultimo valore contenuto nella variabile varvar

Page 194: Introduzione all'uso del computer

194*

Comando Comando shiftshiftComando Comando shiftshift

Shift Shift opera sulle variabili di shell riducendone il opera sulle variabili di shell riducendone il numero di elementi di uno, scartandone ogni numero di elementi di uno, scartandone ogni volta il primo elemento.volta il primo elemento.

SintassiSintassi ::

shift shift variablevariable

SintassiSintassi ::

shift shift variablevariable

#!/bin/tcsh#!/bin/tcshset z = ( uno due 3 )set z = ( uno due 3 )echo “Before using shift there are $#z elements :$z”echo “Before using shift there are $#z elements :$z”while ($#z>0)while ($#z>0) echo $z[1]echo $z[1] shift zshift zendendecho “After using shift there are $#z elements”echo “After using shift there are $#z elements”exitexit

Page 195: Introduzione all'uso del computer

195*

Passare variabili ad uno scriptPassare variabili ad uno scriptPassare variabili ad uno scriptPassare variabili ad uno script

Nella tavola qui sotto vengono indicate i nomi della varibili che possono essere passate al Nella tavola qui sotto vengono indicate i nomi della varibili che possono essere passate al runtimeruntime, piu’ altre utili variabili di shell. Negli esempi ne viene illustrato un possibile , piu’ altre utili variabili di shell. Negli esempi ne viene illustrato un possibile uso.uso.

$$n n o o $argv[$argv[nn]] da’ il valore dellada’ il valore della nn--esima variabile passata allo scriptesima variabile passata allo script$$ da’ il valore di tutte le variabili passate allo scriptda’ il valore di tutte le variabili passate allo script

$$$$ da’ il process number (da’ il process number (PIDPID) della shell corrente) della shell corrente$<$< accetta input dal terminaleaccetta input dal terminale$0$0 variabile contenente il nome dello script che viene eseguitovariabile contenente il nome dello script che viene eseguito$?0$?0 da’ 0 se il nome dello script che viene eseguito e’ conosciuto,da’ 0 se il nome dello script che viene eseguito e’ conosciuto,

1 altrimenti1 altrimenti

TavolaTavola

Page 196: Introduzione all'uso del computer

196*

#!/bin/tcsh# returns variable passed \to scriptecho $argv[1]echo $2echo $argv[$#argv]echo -n “Enter Text String:”set name = $<echo “This script is called $0”echo “This script is being processed by PID $$”echo “The string entered has $#name elements”echo “The first word is $name[1]”echo “The last word is $name[$#name]”exit

Passare variabili ad uno scriptPassare variabili ad uno scriptPassare variabili ad uno scriptPassare variabili ad uno script

input dato da terminalesi notino le parentesi tonde,obbligatorie per poter fardiventare name un vettore

input dato da terminalesi notino le parentesi tonde,obbligatorie per poter fardiventare name un vettore

argomenti passatiargomenti passatia a test_script3

argomenti passatiargomenti passatia a test_script3

continuazione delcontinuazione delcommento allacommento allaprossima rigaprossima riga

continuazione delcontinuazione delcommento allacommento allaprossima rigaprossima riga

Page 197: Introduzione all'uso del computer

197*

I filename modifiers fanno si che il sistema ritorni porzioni di un filename relativo od assoluto, come esemplificato dalla tabella qui sotto, e dallo script test_script4test_script4.

8.3 Filename modifiers8.3 Filename modifiers8.3 Filename modifiers8.3 Filename modifiers

#!/bin/tcshecho -n “Enter filename”set filename = $<echo $filename:recho $filename:eecho $filename:hecho $filename:texit

:r :r da’ la parte del filename che precededa’ la parte del filename che precede ilil . . , se non contiene il, se non contiene il . . , ritorna il, ritorna il nome completonome completo:e :e da’ la parte del filename che segueda’ la parte del filename che segue ilil . . , se non contiene il, se non contiene il . . , da’, da’ NULLNULL:h :h da’ la prima parte del nome assolutoda’ la prima parte del nome assoluto del file (head) quella formata dalledel file (head) quella formata dalle directories.directories.:t :t da’ l’ultima parte del nome assolutoda’ l’ultima parte del nome assoluto del file (tail) cioe’ il nome vero edel file (tail) cioe’ il nome vero e proprio del file.proprio del file.

TavolaTavola

Page 198: Introduzione all'uso del computer

198*

Si e’ gia’ visto precedentemente la funzione dei 3 tipi di quotes usati in Unix : Si e’ gia’ visto precedentemente la funzione dei 3 tipi di quotes usati in Unix : ’ ’’ ’ singlesingle(forward ) quotes(forward ) quotes, , “”“” double quotesdouble quotes, , ```` single backward quotessingle backward quotes o o backticksbackticks..Viene qui riassunto il loro comportamento con le variabili di shell :Viene qui riassunto il loro comportamento con le variabili di shell :

8.4 Variable expansion8.4 Variable expansion8.4 Variable expansion8.4 Variable expansion

le ’ ’’ ’ prevengono ogni tipo di variable expansion la variabile ritorna cosi’la variabile ritorna cosi’com’e’ scrittacom’e’ scritta

le ’ ’’ ’ prevengono ogni tipo di variable expansion la variabile ritorna cosi’la variabile ritorna cosi’com’e’ scrittacom’e’ scritta

le le ```` causano l’immediata esecuzione del comando corrispondente, ed il suo causano l’immediata esecuzione del comando corrispondente, ed il suo(eventuale) (eventuale) stdoutstdout viene sostituito al posto delle viene sostituito al posto delle ````..

le le ```` causano l’immediata esecuzione del comando corrispondente, ed il suo causano l’immediata esecuzione del comando corrispondente, ed il suo(eventuale) (eventuale) stdoutstdout viene sostituito al posto delle viene sostituito al posto delle ````..

le le “”“” raggruppano tutti i caratteri contenuti in esse in un’unica word, permetteraggruppano tutti i caratteri contenuti in esse in un’unica word, permettela variable expansion ma la variable expansion ma NON NON il il globbingglobbing della wildcard ( della wildcard ( ). ).

le le “”“” raggruppano tutti i caratteri contenuti in esse in un’unica word, permetteraggruppano tutti i caratteri contenuti in esse in un’unica word, permettela variable expansion ma la variable expansion ma NON NON il il globbingglobbing della wildcard ( della wildcard ( ). ).

Page 199: Introduzione all'uso del computer

199*

le ’ ’’ ’ prevengono ogni tipo di variable expansion la variabile ritorna cosi’la variabile ritorna cosi’com’e’ scrittacom’e’ scritta

le ’ ’’ ’ prevengono ogni tipo di variable expansion la variabile ritorna cosi’la variabile ritorna cosi’com’e’ scrittacom’e’ scritta

le le “”“” raggruppano tutti i caratteri contenuti in esse in un’unica word, permetteraggruppano tutti i caratteri contenuti in esse in un’unica word, permettela variable expansion ma la variable expansion ma NON NON il il globbingglobbing della wildcard ( della wildcard ( ). ).

le le “”“” raggruppano tutti i caratteri contenuti in esse in un’unica word, permetteraggruppano tutti i caratteri contenuti in esse in un’unica word, permettela variable expansion ma la variable expansion ma NON NON il il globbingglobbing della wildcard ( della wildcard ( ). ).

le le ```` causano l’immediata esecuzione del comando corrispondente, ed il suo causano l’immediata esecuzione del comando corrispondente, ed il suo(eventuale) (eventuale) stdoutstdout viene sostituito al posto delle viene sostituito al posto delle ````..

le le ```` causano l’immediata esecuzione del comando corrispondente, ed il suo causano l’immediata esecuzione del comando corrispondente, ed il suo(eventuale) (eventuale) stdoutstdout viene sostituito al posto delle viene sostituito al posto delle ````..

le le “”“” impediscono il globbing impediscono il globbingdellodello , quindi il valore dato a, quindi il valore dato anamename e’ e’ ls testls test

le le “”“” impediscono il globbing impediscono il globbingdellodello , quindi il valore dato a, quindi il valore dato anamename e’ e’ ls testls test

e’ come se scrivessi e’ come se scrivessi echo ls testecho ls test (cioe’ (cioe’al posto di al posto di $name$name viene messo il suo viene messo il suovalore) e quindi ora c’e’ globbing dello valore) e quindi ora c’e’ globbing dello

e’ come se scrivessi e’ come se scrivessi echo ls testecho ls test (cioe’ (cioe’al posto di al posto di $name$name viene messo il suo viene messo il suovalore) e quindi ora c’e’ globbing dello valore) e quindi ora c’e’ globbing dello

> set name = > set name = ls test*ls test*> echo $name> echo $namels test_script2 test_script3 test_script4ls test_script2 test_script3 test_script4> echo > echo ''$name$name''$name$name> echo “$name”> echo “$name”ls test*ls test*> echo > echo `̀$name$name`̀test_script2 test_script3 test_script4test_script2 test_script3 test_script4

Page 200: Introduzione all'uso del computer

200*

> set name = > set name = ls test*ls test*> echo $name> echo $namels test_script2 test_script3 test_script4ls test_script2 test_script3 test_script4> echo > echo ''$name$name''$name$name> echo “$name”> echo “$name”ls test*ls test*> echo > echo `̀$name$name`̀test_script2 test_script3 test_script4test_script2 test_script3 test_script4

le ’ ’’ ’ prevengono ogni tipo di variable expansion la variabile ritorna cosi’la variabile ritorna cosi’com’e’ scrittacom’e’ scritta

le ’ ’’ ’ prevengono ogni tipo di variable expansion la variabile ritorna cosi’la variabile ritorna cosi’com’e’ scrittacom’e’ scritta

le le ```` causano l’immediata esecuzione del comando corrispondente, ed il suo causano l’immediata esecuzione del comando corrispondente, ed il suo(eventuale) (eventuale) stdoutstdout viene sostituito al posto delle viene sostituito al posto delle ````..

le le ```` causano l’immediata esecuzione del comando corrispondente, ed il suo causano l’immediata esecuzione del comando corrispondente, ed il suo(eventuale) (eventuale) stdoutstdout viene sostituito al posto delle viene sostituito al posto delle ````..

le le ‘’‘’ impediscono la variable impediscono la variablesostitutionsostitution

le le ‘’‘’ impediscono la variable impediscono la variablesostitutionsostitution

le le “”“” permettono la permettono lavariable sostitutionvariable sostitutionma poi impedisconoma poi impedisconoil globbing delloil globbing dello

le le “”“” permettono la permettono lavariable sostitutionvariable sostitutionma poi impedisconoma poi impedisconoil globbing delloil globbing dello

le le “”“” raggruppano tutti i caratteri contenuti in esse in un’unica word, permetteraggruppano tutti i caratteri contenuti in esse in un’unica word, permettela variable expansion ma la variable expansion ma NON NON il il globbingglobbing della wildcard ( della wildcard ( ). ).

le le “”“” raggruppano tutti i caratteri contenuti in esse in un’unica word, permetteraggruppano tutti i caratteri contenuti in esse in un’unica word, permettela variable expansion ma la variable expansion ma NON NON il il globbingglobbing della wildcard ( della wildcard ( ). ).

Page 201: Introduzione all'uso del computer

201*

> set name = > set name = ls test*ls test*> echo $name> echo $namels test_script2 test_script3 test_script4ls test_script2 test_script3 test_script4> echo > echo ''$name$name''$name$name> echo “$name”> echo “$name”ls test*ls test*> echo > echo `̀$name$name`̀test_script2 test_script3 test_script4test_script2 test_script3 test_script4

le ’ ’’ ’ prevengono ogni tipo di variable expansion la variabile ritorna cosi’la variabile ritorna cosi’com’e’ scrittacom’e’ scritta

le ’ ’’ ’ prevengono ogni tipo di variable expansion la variabile ritorna cosi’la variabile ritorna cosi’com’e’ scrittacom’e’ scritta

le le ```` causano l’immediata esecuzione del comando corrispondente, ed il suo causano l’immediata esecuzione del comando corrispondente, ed il suo(eventuale) (eventuale) stdoutstdout viene sostituito al posto delle viene sostituito al posto delle ````..

le le ```` causano l’immediata esecuzione del comando corrispondente, ed il suo causano l’immediata esecuzione del comando corrispondente, ed il suo(eventuale) (eventuale) stdoutstdout viene sostituito al posto delle viene sostituito al posto delle ````..

i backtics i backtics ```` interpretano il interpretano ilcomando racchiuso tra dicomando racchiuso tra diessi, lo eseguono e sostituisconoessi, lo eseguono e sostituisconoal loro posto un eventuale outputal loro posto un eventuale outputmandato a mandato a stdoutstdout . .

i backtics i backtics ```` interpretano il interpretano ilcomando racchiuso tra dicomando racchiuso tra diessi, lo eseguono e sostituisconoessi, lo eseguono e sostituisconoal loro posto un eventuale outputal loro posto un eventuale outputmandato a mandato a stdoutstdout . .

le le “”“” raggruppano tutti i caratteri contenuti in esse in un’unica word, permetteraggruppano tutti i caratteri contenuti in esse in un’unica word, permettela variable expansion ma la variable expansion ma NON NON il il globbingglobbing della wildcard ( della wildcard ( ). ).

le le “”“” raggruppano tutti i caratteri contenuti in esse in un’unica word, permetteraggruppano tutti i caratteri contenuti in esse in un’unica word, permettela variable expansion ma la variable expansion ma NON NON il il globbingglobbing della wildcard ( della wildcard ( ). ).

Page 202: Introduzione all'uso del computer

202*

Gli operatori di comparazione servono nei costrutti di Gli operatori di comparazione servono nei costrutti di flow controlflow control che vedremo in che vedremo in seguito, come seguito, come ifif, , whilewhile etc. e sono elencati nella tabella. Negli esempi invece, viene etc. e sono elencati nella tabella. Negli esempi invece, viene usato il costrutto usato il costrutto if if completo solo per il primo esempio, negli altri il costrutto corretto completo solo per il primo esempio, negli altri il costrutto corretto e’ sottinteso.e’ sottinteso.

8.5 Operatori di comparazione8.5 Operatori di comparazione8.5 Operatori di comparazione8.5 Operatori di comparazione

TavolaTavola== assign value to variableassign value to variable==== equal toequal to!! Boolean NOT Boolean NOT !=!= NOT equal toNOT equal to&& && Boolean ANDBoolean AND|||| Boolean ORBoolean OR>> greater thangreater than<< less thanless than>=>= greater or equal togreater or equal to<=<= less or equal toless or equal to

si noti la negazionesi noti la negazionedell’operatore logicodell’operatore logicoche sta in parentesiche sta in parentesi

si noti la negazionesi noti la negazionedell’operatore logicodell’operatore logicoche sta in parentesiche sta in parentesi

# assignment# assignmentset string = pipposet string = pippo# equal to# equal toif( $i if( $i ==== 10 ) then 10 ) thenecho “numero uguale a 10 “echo “numero uguale a 10 “endifendifif( $string if( $string == == pippo ) then pippo ) then# not equal to# not equal toif( $i if( $i !=!= 2 ) then 2 ) thenif( $string if( $string != != pippo) then pippo) then# greater than 1 and less than 10# greater than 1 and less than 10if( $i if( $i > > 1 1 &&&& $i $i << 10 ) then 10 ) then# equal to 0 or 1# equal to 0 or 1if( $i if( $i ==== 0 0 |||| $i $i ==== 1) then 1) then# not less than nor equal to 10# not less than nor equal to 10if(!($i if(!($i <=<= 10)) then 10)) then

Page 203: Introduzione all'uso del computer

203*

La tavola che segue riassume i tipi di La tavola che segue riassume i tipi di file operatorsfile operators ammessi dalla C shell. Essi ritornano ammessi dalla C shell. Essi ritornanoun valore true o false e vengono quindi usati nei costrutti logici (ad esempio in costrutti un valore true o false e vengono quindi usati nei costrutti logici (ad esempio in costrutti con con ifif).).

8.6 Files operators8.6 Files operators8.6 Files operators8.6 Files operators

TavolaTavola

-d-d true if file is a directorytrue if file is a directory-e-e true if file existstrue if file exists-f-f true if file contains texttrue if file contains text-o -o true if executor of file is ownertrue if executor of file is owner-r-r true if file is readable by executortrue if file is readable by executor-w-w true if file is writable by executortrue if file is writable by executor-x-x true if file is executable by executortrue if file is executable by executor-z-z true if file is emptytrue if file is empty

# true if /usr/fred is a directory# true if /usr/fred is a directoryif( if( -d-d /usr/fred ) then /usr/fred ) then# true if /tmp/file exists# true if /tmp/file existsif ( if ( -e-e /tmp/file) then /tmp/file) then# true if /usr/fred/text contains text# true if /usr/fred/text contains textif ( if ( -f-f /usr/fred/text ) then /usr/fred/text ) then# true if fred owns /usr/fred/file# true if fred owns /usr/fred/fileif ( if ( -o-o /usr/fred/file) then /usr/fred/file) then#true if /usr/fred/file is readable#true if /usr/fred/file is readableif( if( -r-r /usr/fred/file) then /usr/fred/file) then#true if /usr/fred/file is writeable#true if /usr/fred/file is writeableif( if( -w-w /usr/fred/file) then /usr/fred/file) then# true if /usr/fred/file is executable# true if /usr/fred/file is executableif( if( -x-x /usr/fred/file) then /usr/fred/file) then#true if /usr/fred/file is empty#true if /usr/fred/file is emptyif( if( -z-z /usr/fred/file) then /usr/fred/file) then

Page 204: Introduzione all'uso del computer

204*

Affrontiamo ora quegli operatori che Affrontiamo ora quegli operatori che permettono di eseguire calcoli permettono di eseguire calcoli aritmetici con variabili di shell che aritmetici con variabili di shell che contengano valori interi.contengano valori interi.Nella tavola che segue, sono Nella tavola che segue, sono raggruppati prima gli operatori raggruppati prima gli operatori aritmetici, poi quelli che agiscono sui aritmetici, poi quelli che agiscono sui bit di tali variabili.bit di tali variabili.

8.7 Operatori matematici8.7 Operatori matematici8.7 Operatori matematici8.7 Operatori matematici

TavolaTavolaIntegersIntegers== AssignAssign++ AddAdd SubtractSubtract MultiplyMultiply// DivideDivide++++ Increment by 1Increment by 1 Decrement by 1Decrement by 1%% ModuloModulo

BitsBits>>>> Right bit shiftRight bit shift<<<< Left bit shiftLeft bit shift~~ 1’s complement1’s complement!! Logical negationLogical negation|| Inclusive ORInclusive OR^̂ Exclusive ORExclusive OR&& ANDAND

Page 205: Introduzione all'uso del computer

205*

#!/bin/tcsh#!/bin/tcshset i = 15set i = 15@ j = 3@ j = 3echo “i :$i ; j :$j”echo “i :$i ; j :$j”# addition# addition@ k = $i + $j@ k = $i + $jecho “addition : $k”echo “addition : $k”#subtraction#subtraction@ k = $i - $j@ k = $i - $jecho “subtraction : $k”echo “subtraction : $k”#division#division@ k = $i / $j@ k = $i / $jecho “division : $k”echo “division : $k”# multiplication# multiplication@ k = $i * $j@ k = $i * $jecho “multiplication : $k”echo “multiplication : $k”# modulo# modulo@ k = $i % $j@ k = $i % $jecho “modulo : $k”echo “modulo : $k”# autoincrement# autoincrementset k = 10set k = 10@ k++@ k++echo “autoincrement : $k”echo “autoincrement : $k”

si noti si noti @ piu’ lo spazio bianco@ piu’ lo spazio bianco che indica che la che indica che la variabile di shellvariabile di shell k k deve avere come valore il deve avere come valore il risultato dell’operazione a destra dell’uguale.risultato dell’operazione a destra dell’uguale.

si noti si noti @ piu’ lo spazio bianco@ piu’ lo spazio bianco che indica che la che indica che la variabile di shellvariabile di shell k k deve avere come valore il deve avere come valore il risultato dell’operazione a destra dell’uguale.risultato dell’operazione a destra dell’uguale.

Page 206: Introduzione all'uso del computer

206*

# autodecrement# autodecrementset k = 10set k = 10@ k@ kecho “autodecrement : $k”echo “autodecrement : $k”# right bit shift# right bit shift@ k = ( $i >> 2 )@ k = ( $i >> 2 )echo “right bit shift i by 2 : $k”echo “right bit shift i by 2 : $k”# left bit shift# left bit shift@ k = ( $i << 2 )@ k = ( $i << 2 )echo “left bit shift i by 2 : $k”echo “left bit shift i by 2 : $k”# invert bits# invert bits@ k = ~ $i@ k = ~ $iecho “invert bits : $k”echo “invert bits : $k”# logical negation# logical negation@ k = ! $i@ k = ! $iecho “logical negation : $k”echo “logical negation : $k”# bitwise inclusive OR# bitwise inclusive OR@ k = ( $i | $j )@ k = ( $i | $j )echo “bitwise inclusive OR : $k”echo “bitwise inclusive OR : $k”# bitwise exclusive OR# bitwise exclusive OR@ k = ( $i ^ $j )@ k = ( $i ^ $j )echo “bitwise exclusive OR : $k”echo “bitwise exclusive OR : $k”# bitwise AND# bitwise AND@ k = ( $i & $j )@ k = ( $i & $j )echo “bitwise AND : $k”echo “bitwise AND : $k”

Page 207: Introduzione all'uso del computer

207*

Gli statements di Gli statements di flow controlflow control servono a direzionare la servono a direzionare la sequenza di istruzioni da eseguire in dipendenza dal sequenza di istruzioni da eseguire in dipendenza dal verificarsi di determinate condizioni.verificarsi di determinate condizioni.Nella C shell questi comandi sono molto simili a quelli del Nella C shell questi comandi sono molto simili a quelli del linguaggio C e sono elencati nella tavola qui sotto.linguaggio C e sono elencati nella tavola qui sotto.

8.8 Flow control8.8 Flow control8.8 Flow control8.8 Flow control

Tavola degli statementsTavola degli statementsdi flow controldi flow control

ififwhilewhileforeachforeachswitchswitchgotogoto

Page 208: Introduzione all'uso del computer

208*

Comando Comando ififComando Comando ifif

Come nel linguaggio C, questo comando provoca un branching semplice, doppio o Come nel linguaggio C, questo comando provoca un branching semplice, doppio o multiplo.multiplo.

SintassiSintassi : : if ( if ( conditioncondition ) ) statement statement

oppure : oppure : if ( if ( conditioncondition ) then ) then

[[statementsstatements]]

endifendif

oppure : oppure : if ( if ( conditioncondition ) then ) then

[[statementsstatements]]

elseelse

[[statementsstatements]]

endifendif

SintassiSintassi : : if ( if ( conditioncondition ) ) statement statement

oppure : oppure : if ( if ( conditioncondition ) then ) then

[[statementsstatements]]

endifendif

oppure : oppure : if ( if ( conditioncondition ) then ) then

[[statementsstatements]]

elseelse

[[statementsstatements]]

endifendif

oppure : oppure : if ( if ( conditioncondition ) then ) then

[[statementsstatements]]

else if ( else if ( conditioncondition ) then ) then

[[statementsstatements]]

……

[[ else if ( else if ( conditioncondition ) then ) then

statements statements ]]

......

[[ else else

statements statements ]]

endifendif

oppure : oppure : if ( if ( conditioncondition ) then ) then

[[statementsstatements]]

else if ( else if ( conditioncondition ) then ) then

[[statementsstatements]]

……

[[ else if ( else if ( conditioncondition ) then ) then

statements statements ]]

......

[[ else else

statements statements ]]

endifendif

Page 209: Introduzione all'uso del computer

209*

Comando Comando ififComando Comando ifif

#!/bin/tcsh#!/bin/tcsh# report a file executable satus# report a file executable satusecho -n “enter filename”echo -n “enter filename”set a = $<set a = $<if (-x $a) thenif (-x $a) thenecho “$a is an executable”echo “$a is an executable”elseelseecho “$a is not an executable”echo “$a is not an executable”endifendifexitexit

#!/bin/tcsh#!/bin/tcsh# displays a non-empty file# displays a non-empty fileif(-z $1) thenif(-z $1) thenecho “File $1 is empty”echo “File $1 is empty”exitexitendifendifmore $1more $1exitexit

piccolo script che riporta se il filepiccolo script che riporta se il fileche diamo come input da terminale,che diamo come input da terminale,e’ un eseguibilee’ un eseguibile

piccolo script che riporta se il filepiccolo script che riporta se il fileche diamo come input da terminale,che diamo come input da terminale,e’ un eseguibilee’ un eseguibile

file operator che rende verafile operator che rende veral’espressione se l’espressione se $a$a e’ un eseguibile e’ un eseguibile

file operator che rende verafile operator che rende veral’espressione se l’espressione se $a$a e’ un eseguibile e’ un eseguibile

file operator che rende verafile operator che rende veral’espressione se l’espressione se $a$a e’ vuoto e’ vuoto

file operator che rende verafile operator che rende veral’espressione se l’espressione se $a$a e’ vuoto e’ vuoto

piccolo script che riporta se il filepiccolo script che riporta se il fileche diamo come argomento, e’ nonche diamo come argomento, e’ nonvuoto ed in tal caso lo stampa avuoto ed in tal caso lo stampa aterminale.terminale.

piccolo script che riporta se il filepiccolo script che riporta se il fileche diamo come argomento, e’ nonche diamo come argomento, e’ nonvuoto ed in tal caso lo stampa avuoto ed in tal caso lo stampa aterminale.terminale.

Page 210: Introduzione all'uso del computer

210*

Comando Comando whilewhileComando Comando whilewhile

Come nel linguaggio C, questo e’ un Come nel linguaggio C, questo e’ un comando di loop, che viene eseguito comando di loop, che viene eseguito finche’ una certa condizione e’ vera.finche’ una certa condizione e’ vera.

SintassiSintassi ::

while ( while ( conditioncondition ) )

......

[[statementsstatements]]

......

endend

SintassiSintassi ::

while ( while ( conditioncondition ) )

......

[[statementsstatements]]

......

endend

#!/bin/tcsh#!/bin/tcsh# displays calendar by month# displays calendar by monthset i = 1set i = 1while ($i != 13)while ($i != 13)cal $i 2002cal $i 2002@ i = ($i + 1)@ i = ($i + 1)endendecho “Calendar complete”echo “Calendar complete”exitexit

se se $i$i non e’ uguale a non e’ uguale a 33se se $i$i non e’ uguale a non e’ uguale a 33

Page 211: Introduzione all'uso del computer

211*

#!/bin/tcsh#!/bin/tcsh# displays characteristics# displays characteristics# of files of the list# of files of the listset files = ( test1 test2 test3 )set files = ( test1 test2 test3 )foreach i ( $files )foreach i ( $files )ls -l $ils -l $iendendexitexit

Comando Comando foreachforeachComando Comando foreachforeach

Anche questo e’ un comando di loop che Anche questo e’ un comando di loop che esegue un blocco di statements per ogni esegue un blocco di statements per ogni componente di una lista di elementi.componente di una lista di elementi.

SintassiSintassi ::

foreach foreach variable variable ( ( list list ) )

......

[[statementsstatements]]

......

endend

SintassiSintassi ::

foreach foreach variable variable ( ( list list ) )

......

[[statementsstatements]]

......

endend#!/bin/tcsh#!/bin/tcsh# displays all .txt files# displays all .txt filesforeach i ( foreach i ( .txt ).txt )cat $icat $iendendexitexit

l’uso di l’uso di crea una lista dicrea una lista difiles che terminano con files che terminano con .txt.txtLa variabile di shell La variabile di shell i i assume,assume,uno per volta, tutti i valori diuno per volta, tutti i valori ditale lista.tale lista.

l’uso di l’uso di crea una lista dicrea una lista difiles che terminano con files che terminano con .txt.txtLa variabile di shell La variabile di shell i i assume,assume,uno per volta, tutti i valori diuno per volta, tutti i valori ditale lista.tale lista. in questo esempio, la lista diin questo esempio, la lista di

valori chevalori che i i assume, e’ stataassume, e’ statadefinita direttamente nellodefinita direttamente nelloscript.script.

in questo esempio, la lista diin questo esempio, la lista divalori chevalori che i i assume, e’ stataassume, e’ statadefinita direttamente nellodefinita direttamente nelloscript.script.

Page 212: Introduzione all'uso del computer

212*

SintassiSintassi ::

switch ( switch ( stringstring ))

case case stringstring::

[[statementsstatements]]

[[breakswbreaksw]]

case case string2string2::

[[statementsstatements]]

[[breakswbreaksw]]

......

case case stringnstringn::

[[statementsstatements]]

[[breakswbreaksw]]

[[default:default:]]

[[statementsstatements]]

endswendsw

SintassiSintassi ::

switch ( switch ( stringstring ))

case case stringstring::

[[statementsstatements]]

[[breakswbreaksw]]

case case string2string2::

[[statementsstatements]]

[[breakswbreaksw]]

......

case case stringnstringn::

[[statementsstatements]]

[[breakswbreaksw]]

[[default:default:]]

[[statementsstatements]]

endswendsw

#!/bin/tcsh#!/bin/tcshecho “select printer ; l or <cr> for laser, p for plotter”echo “select printer ; l or <cr> for laser, p for plotter”set var = $<set var = $<switch ( $var )switch ( $var )case l:case l: lpr -Plaser $1lpr -Plaser $1 breakswbreakswcase p:case p: lpr -Pplotter $1lpr -Pplotter $1 breakswbreakswdefault:default: lpr -Plaser $1lpr -Plaser $1endswendswexitexit

Comando Comando switchswitchComando Comando switchswitchQuesto e’ un comando di flow control del tutto analogo al corrispondente Questo e’ un comando di flow control del tutto analogo al corrispondente comando in C. Il flusso di istruzione da eseguire viene diretto a quella comando in C. Il flusso di istruzione da eseguire viene diretto a quella case case labellabel la cui label corrisponde al valore della variabile dello la cui label corrisponde al valore della variabile dello switchswitch. Si puo’ poi . Si puo’ poi definire anche una label (comando definire anche una label (comando default:default:) per i casi in cui la variabile dello ) per i casi in cui la variabile dello switch switch non corrisponda a nessuna altra label. Infine il comando non corrisponda a nessuna altra label. Infine il comando breakswbreaksw serve serve per far saltare fuori dal costrutto di per far saltare fuori dal costrutto di switchswitch e far eseguire la prima istruzione e far eseguire la prima istruzione che segue che segue endswendsw..

var var e’ la variabile dello e’ la variabile dello switchswitchvar var e’ la variabile dello e’ la variabile dello switchswitch

se se var var ha valoreha valore p p il programma salta qui il programma salta quied esegue tutti i comandi che seguonoed esegue tutti i comandi che seguono

se se var var ha valoreha valore p p il programma salta qui il programma salta quied esegue tutti i comandi che seguonoed esegue tutti i comandi che seguono

il programma salta alla prima istruzioneil programma salta alla prima istruzionedopo dopo endswendsw poiche’ qui c’e’ poiche’ qui c’e’ breakswbreaksw

il programma salta alla prima istruzioneil programma salta alla prima istruzionedopo dopo endswendsw poiche’ qui c’e’ poiche’ qui c’e’ breakswbreaksw

se se var var NON ha ne’ valoreNON ha ne’ valore p p ne’ valore ne’ valore l lil programma salta qui ed esegue tutti iil programma salta qui ed esegue tutti icomandi che seguonocomandi che seguono

se se var var NON ha ne’ valoreNON ha ne’ valore p p ne’ valore ne’ valore l lil programma salta qui ed esegue tutti iil programma salta qui ed esegue tutti icomandi che seguonocomandi che seguono

Page 213: Introduzione all'uso del computer

213*

#!/bin/tcsh#!/bin/tcshif ($1 == “” ) goto undefinedif ($1 == “” ) goto undefinedecho “the value of variable 1 is :$1”echo “the value of variable 1 is :$1”exitexitundefined:undefined:echo “Variable 1 is undefined”echo “Variable 1 is undefined”exitexit

Comando Comando gotogotoComando Comando gotogoto

Il flusso d’esecuzione dei comandi viene ridiretto Il flusso d’esecuzione dei comandi viene ridiretto all’istruzione marcata dalla label all’istruzione marcata dalla label labellabel. Anche questo . Anche questo e’ un comando che ha una eguale controparte nel C.e’ un comando che ha una eguale controparte nel C.

SintassiSintassi ::

goto goto labellabel

SintassiSintassi ::

goto goto labellabel

In questo esempio viene stampatoIn questo esempio viene stampatoa terminale il valore della primaa terminale il valore della primavariabile passata allo script, se l’utentevariabile passata allo script, se l’utentel’ha passata effettivamente.l’ha passata effettivamente.Nel caso contrario, viene stampatoNel caso contrario, viene stampatoil messaggio :il messaggio :Variable Variable is undefined is undefined

In questo esempio viene stampatoIn questo esempio viene stampatoa terminale il valore della primaa terminale il valore della primavariabile passata allo script, se l’utentevariabile passata allo script, se l’utentel’ha passata effettivamente.l’ha passata effettivamente.Nel caso contrario, viene stampatoNel caso contrario, viene stampatoil messaggio :il messaggio :Variable Variable is undefined is undefined

si noti che la label si noti che la label undefinedundefineddevedeve essere seguita da essere seguita da ::

si noti che la label si noti che la label undefinedundefineddevedeve essere seguita da essere seguita da ::

Page 214: Introduzione all'uso del computer

214*

Error handling and flow controlError handling and flow controlError handling and flow controlError handling and flow control

Error handlingError handling significa dirigere il flusso di istruzioni a seconda che un comando vada significa dirigere il flusso di istruzioni a seconda che un comando vada a buon fine o abbia esito negativo. In Unix questo si puo’ fare almeno in due modi, sia a buon fine o abbia esito negativo. In Unix questo si puo’ fare almeno in due modi, sia usando gli operatori logici usando gli operatori logici || || e e &&&& , sia usando direttamente la varibile di shell , sia usando direttamente la varibile di shell statusstatus , , che assume generalmente valore che assume generalmente valore 00 quando comando va a buon fine. quando comando va a buon fine.

Sintassi OR logico :Sintassi OR logico :

commandcommand |||| command2 command2

Sintassi AND logico :Sintassi AND logico :

commandcommand &&&& command2 command2

Sintassi OR logico :Sintassi OR logico :

commandcommand |||| command2 command2

Sintassi AND logico :Sintassi AND logico :

commandcommand &&&& command2 command2

Funzionamento degli operatoriFunzionamento degli operatorilogici usati con comandilogici usati con comandi

command 1 operator command 2command 1 operator command 2succeeds executessucceeds executesyes yes || || no nono no || || yes yesyes yes && && yes yesno no && && no no

Cominciamo con gli operatori logiciCominciamo con gli operatori logici

Page 215: Introduzione all'uso del computer

215*… … spedisci un mail con l’elenco dispedisci un mail con l’elenco ditali utentitali utenti

… … spedisci un mail con l’elenco dispedisci un mail con l’elenco ditali utentitali utenti

#!/bin/tcsh#!/bin/tcshcc test.c >& error cc test.c >& error || || mail studente < error mail studente < error

Error handling and flow controlError handling and flow controlError handling and flow controlError handling and flow control

se la compilazione del programmase la compilazione del programmain C test.c in C test.c NON NON va a buon fine …va a buon fine …

se la compilazione del programmase la compilazione del programmain C test.c in C test.c NON NON va a buon fine …va a buon fine …

#!/bin/tcsh#!/bin/tcshgrep tcsh /etc/passwd > lista grep tcsh /etc/passwd > lista &&&& mail studente < lista mail studente < lista

se nel file delle passwords esistonose nel file delle passwords esistonoutenti che usano la tcsh shell …utenti che usano la tcsh shell …

se nel file delle passwords esistonose nel file delle passwords esistonoutenti che usano la tcsh shell …utenti che usano la tcsh shell …

… … spedisci un mail con gli errori dispedisci un mail con gli errori dicompilazione all’utente compilazione all’utente studentestudente

… … spedisci un mail con gli errori dispedisci un mail con gli errori dicompilazione all’utente compilazione all’utente studentestudente

Page 216: Introduzione all'uso del computer

216*

Error handling and flow controlError handling and flow controlError handling and flow controlError handling and flow control

Uso della variable di shell Uso della variable di shell statusstatus

La variabile La variabile status status viene ridefinita dopo viene ridefinita dopo l’esecuzione di ogni comando o shell l’esecuzione di ogni comando o shell script.script.Sfortunatamente il valore assunto non Sfortunatamente il valore assunto non e’ consistente per tutti i comandi ed e’ e’ consistente per tutti i comandi ed e’ generalmente anche dipendente dai vari generalmente anche dipendente dai vari flavours flavours di Unix. In generale si tenga di Unix. In generale si tenga presente che se presente che se statusstatus e’ e’ 00 vuol dire che vuol dire che l’esecuzione del comando ha avuto l’esecuzione del comando ha avuto successo, se successo, se statusstatus =1=1 vuol dire che la vuol dire che la sintassi era giusta, ma il comando non sintassi era giusta, ma il comando non ha in qualche modo raggiunto lo scopo ha in qualche modo raggiunto lo scopo che si era prefisso, infine se che si era prefisso, infine se statusstatus ha ha qualche altro valore vuol dire che la qualche altro valore vuol dire che la sintassi non era corretta o qualche file sintassi non era corretta o qualche file non esiste. Ad ogni modo e’ buona non esiste. Ad ogni modo e’ buona norma controllare sempre come si norma controllare sempre come si comporta comporta statusstatus quando lo si vuole quando lo si vuole usare in uno script.usare in uno script.

Il file prrrr.txtnon esiste; status e’

Il file prrrr.txtnon esiste; status e’

Il comandoha avutosuccesso,status e’ 0

Il comandoha avutosuccesso,status e’ 0

Sintassi giusta,ma pallino non e’stato trovato ;status e’

Sintassi giusta,ma pallino non e’stato trovato ;status e’

Page 217: Introduzione all'uso del computer

217*

Error handling and flow controlError handling and flow controlError handling and flow controlError handling and flow control

Ecco un esempio di script in cui viene eseguito il comando Ecco un esempio di script in cui viene eseguito il comando grepgrep sui due argomenti sui due argomenti passati allo script. Viene quindi sfruttata la variabile passati allo script. Viene quindi sfruttata la variabile status status per fare un minimo di per fare un minimo di error handling.error handling.

Ecco un esempio di script in cui viene eseguito il comando Ecco un esempio di script in cui viene eseguito il comando grepgrep sui due argomenti sui due argomenti passati allo script. Viene quindi sfruttata la variabile passati allo script. Viene quindi sfruttata la variabile status status per fare un minimo di per fare un minimo di error handling.error handling.

Uso della variable di shell Uso della variable di shell statusstatus

#!/bin/tcsh#!/bin/tcshgrep $1 $2grep $1 $2set error = $statusset error = $statusif( $error == 0) thenif( $error == 0) then echo “execution successful”echo “execution successful”else if ($error == 1 ) thenelse if ($error == 1 ) then echo “nothing found”echo “nothing found”elseelse echo “severe error found you, idiot !”echo “severe error found you, idiot !”endifendifexitexit

Lo script vuole dueargomenti nella chiamata :$e’ il pattern da cercare,$2 e’ il file in cui cercare.

Lo script vuole dueargomenti nella chiamata :$e’ il pattern da cercare,$2 e’ il file in cui cercare.

Il pattern non c’e’ nelfile; status e’ .

Il pattern non c’e’ nelfile; status e’ .Gli argomenti

passati a grepgenerano unerrore disintassi !

Gli argomentipassati a grepgenerano unerrore disintassi !

Page 218: Introduzione all'uso del computer

218*

8.9 Comandi built-in nella C shell8.9 Comandi built-in nella C shell8.9 Comandi built-in nella C shell8.9 Comandi built-in nella C shell

E’ E’ gia’ stato detto precedentemente dei comandi built-in nella C shell. Esempi digia’ stato detto precedentemente dei comandi built-in nella C shell. Esempi di

di tali comandi sono di tali comandi sono aliasalias,, bg bg,, cd cd,, dirs dirs,, echo echo, , fgfg,, history history,, if if ((else else etc. ),etc. ), jobs jobs, , killkill,, limit limit,,logoutlogout,, nice nice, , popdpopd, , pushdpushd,, set set, , setenvsetenv,, shift shift,, switch switch, , umaskumask,, unalias unalias,, unlimit unlimit,, unset unset,,unsetenvunsetenv, , whichwhich,, while while..Vengono introdotti qui altri comandi built-in utili nella programmazione della C shell.Vengono introdotti qui altri comandi built-in utili nella programmazione della C shell.Si tratta di :Si tratta di :

onintronintrevalevaltimetimesourcesource

ridireziona il flusso di istruzioni quando viene mandato un interrupt allo script

ridireziona il flusso di istruzioni quando viene mandato un interrupt allo script

determina quant’e’ il tempodi esecuzione di un comando

determina quant’e’ il tempodi esecuzione di un comando

prende i comandi da eseguire da una sorgente (source, appunto; tipicamente un ASCII file).Eventuali definizione di shell variables e di alias NON vengono perse dopo l’esecuzione di tutti i comandi contenuti nella sorgente

prende i comandi da eseguire da una sorgente (source, appunto; tipicamente un ASCII file).Eventuali definizione di shell variables e di alias NON vengono perse dopo l’esecuzione di tutti i comandi contenuti nella sorgente

forza l’esecuzione di un comando interpretando eventuali metacaratteri presenti nel comando

forza l’esecuzione di un comando interpretando eventuali metacaratteri presenti nel comando

Page 219: Introduzione all'uso del computer

219*

Questo comando ridirige il flusso dello script quando l’utente da’ un Questo comando ridirige il flusso dello script quando l’utente da’ un <ctrl>C<ctrl>C interrupt interruptda tastiera. Il flusso di comandi dello script, invece di interrompersi semplicemente,da tastiera. Il flusso di comandi dello script, invece di interrompersi semplicemente,salta alla label indicata ed esegue i comandi a partire da li’ come indicato nell’esempiosalta alla label indicata ed esegue i comandi a partire da li’ come indicato nell’esempioseguente.seguente.

Comando Comando onintronintrComando Comando onintronintr

#!/bin/tcsh#!/bin/tcsh# partial example of interrupt handling# partial example of interrupt handlingonintr onintr pippopippo……exitexitpippo:pippo:echo “script terminated abnormally”echo “script terminated abnormally”exitexit

Se l’utente da’ un Se l’utente da’ un <ctrl>C<ctrl>Cil comando salta alla labelil comando salta alla labelindicata (indicata (pippopippo) ed esegue) ed eseguei comandi che seguonoi comandi che seguono

Se l’utente da’ un Se l’utente da’ un <ctrl>C<ctrl>Cil comando salta alla labelil comando salta alla labelindicata (indicata (pippopippo) ed esegue) ed eseguei comandi che seguonoi comandi che seguono

Page 220: Introduzione all'uso del computer

220*

E gia’ stato detto precedentemente che generalmente per eseguire dei comandi che nonE gia’ stato detto precedentemente che generalmente per eseguire dei comandi che nonsiano built-in, la C shell genera un child process. Nei casi pero’ in cui il comando siasiano built-in, la C shell genera un child process. Nei casi pero’ in cui il comando siacontenuto ad esempio in una contenuto ad esempio in una shell variableshell variable, il child process , il child process NONNON interpreta eventuali interpreta eventualimetacaratteri in esso presenti, ma prende ogni elemento letteralmente e questo puo’metacaratteri in esso presenti, ma prende ogni elemento letteralmente e questo puo’produrre risultati del tutto non voluti. Il comando produrre risultati del tutto non voluti. Il comando eval eval e’ utile in questo caso, poiche’e’ utile in questo caso, poiche’forza l’esecuzione da parte della current shell (cioe’ senza forking) interpretandoeventuali metacaratteri presenti nel comando. L’esempio che segue dovrebbe chiarire ilproblema.

Comando Comando evalevalComando Comando evaleval

Page 221: Introduzione all'uso del computer

221*

Comando Comando evalevalComando Comando evaleval

Qui l’intenzione e’ di far eseguireil comando ls -l | grep example_0

Qui l’intenzione e’ di far eseguireil comando ls -l | grep example_0

Il comando (command string)e’ stato depositato nella variabile test

Il comando (command string)e’ stato depositato nella variabile test

eval ci viene in soccorsointerpretando | comemetacarattere di pipinged eseguendo il comandocome volevamo !

eval ci viene in soccorsointerpretando | comemetacarattere di pipinged eseguendo il comandocome volevamo !

Il metacarattere | non vienericonosciuto come tale maletteralmente come nome di file!

Il metacarattere | non vienericonosciuto come tale maletteralmente come nome di file!

Page 222: Introduzione all'uso del computer

222*

Il comando Il comando timetime lancia un comando od uno script e ne fornisce anche il tempo che ci lancia un comando od uno script e ne fornisce anche il tempo che ci vuole per eseguirlo. Se non gli viene dato un argomento, vuole per eseguirlo. Se non gli viene dato un argomento, timetime riporta il tempo usato riporta il tempo usato dal parent process e da tutti i suoi child processes dall’inizio della sessione.dal parent process e da tutti i suoi child processes dall’inizio della sessione.

Comando Comando timetimeComando Comando timetime SintassiSintassi ::

time time [command]

SintassiSintassi ::

time time [command]

lancia lo script lancia lo script myscriptmyscript e ne calcola il tempo e ne calcola il tempolancia lo script lancia lo script myscriptmyscript e ne calcola il tempo e ne calcola il tempo

uuser timeser timeconsumatoconsumato

uuser timeser timeconsumatoconsumato

ssystem timeystem timeconsumatoconsumato

ssystem timeystem timeconsumatoconsumato

tempo solaretempo solaretrascorsotrascorso

tempo solaretempo solaretrascorsotrascorso

% delle risorse% delle risorsedi CPU usato

% delle risorse% delle risorsedi CPU usato

Kb di physical memoryKb di physical memory+ 2 Kb di memory stack+ 2 Kb di memory stack

Kb di physical memoryKb di physical memory+ 2 Kb di memory stack+ 2 Kb di memory stack

page faulted in +page faulted in + page faulted outpage faulted out

page faulted in +page faulted in + page faulted outpage faulted out

page (cioe’ 512 bytes) inputpage (cioe’ 512 bytes) input++ page di output sul disco page di output sul disco

page (cioe’ 512 bytes) inputpage (cioe’ 512 bytes) input++ page di output sul disco page di output sul disco

0 minuti e 22.21 secondi 2.801 secondi

Page 223: Introduzione all'uso del computer

223*

Questo comando serve quando si vogliono eseguire i comandi da una Questo comando serve quando si vogliono eseguire i comandi da una sorgentesorgente ( (sourcesource, , appunto) che tipicamente e’ un file ASCII. Questo risultato si potrebbe ottenere appunto) che tipicamente e’ un file ASCII. Questo risultato si potrebbe ottenere ugualmente dando direttamente il comando ugualmente dando direttamente il comando sorgentesorgente da da STDINSTDIN (a patto (a patto che il file abbia la protezione che il file abbia la protezione xx on). on).La differenza e’ che con La differenza e’ che con sourcesource eventuali definizione di shell variables ed eventuali eventuali definizione di shell variables ed eventualidefinizioni con definizioni con aliasalias NON NON vengono perse dopo l’esecuzione di tutti i comandi contenuti vengono perse dopo l’esecuzione di tutti i comandi contenuti in in sorgente sorgente ma continuano a valere per la current shell. ma continuano a valere per la current shell.

Comando Comando sourcesourceComando Comando sourcesource

SintassiSintassi ::

source source [-h] sorgente

Opzione : Opzione : -h-h serve solo per mettere i comandi contenuti in serve solo per mettere i comandi contenuti in sorgentesorgente nella nella

history listhistory list (per default (per default NONNON ci vengono messi) ; i comandi ci vengono messi) ; i comandi NONNON

vengono effettivamente eseguiti.vengono effettivamente eseguiti.

SintassiSintassi ::

source source [-h] sorgente

Opzione : Opzione : -h-h serve solo per mettere i comandi contenuti in serve solo per mettere i comandi contenuti in sorgentesorgente nella nella

history listhistory list (per default (per default NONNON ci vengono messi) ; i comandi ci vengono messi) ; i comandi NONNON

vengono effettivamente eseguiti.vengono effettivamente eseguiti.

Page 224: Introduzione all'uso del computer

224*

Comando Comando sourcesourceComando Comando sourcesource#!/bin/tcsh#!/bin/tcsh# definizioni di variabili ed esecuzione \# definizioni di variabili ed esecuzione \di lsdi lsset var1 = testset var1 = test##lslsexitexit

pwd/home/bocalsprogram.f program.x prova.com test_script zoomtest_scriptprogram.f program.x prova.com test_script zoomecho $var1var1: Undefined variablesource test_scriptprogram.f program.x prova.com test_script zoomecho $var1test

esegue direttamente lo scriptesegue direttamente lo scriptesegue direttamente lo scriptesegue direttamente lo script

la variabile di shell la variabile di shell varvar viene persa viene persadopo l’esecuzione di test_scriptdopo l’esecuzione di test_script

la variabile di shell la variabile di shell varvar viene persa viene persadopo l’esecuzione di test_scriptdopo l’esecuzione di test_script

con con source source la variabile di shell la variabile di shell varvar mantiene mantienela sua definizione anche nella current shellla sua definizione anche nella current shell

con con source source la variabile di shell la variabile di shell varvar mantiene mantienela sua definizione anche nella current shellla sua definizione anche nella current shell

Page 225: Introduzione all'uso del computer

225*

8.10 Debugging8.10 Debugging8.10 Debugging8.10 Debugging

Si puo’ fare il Si puo’ fare il debuggingdebugging (eliminazione degli errori di programmazione) di uno shell (eliminazione degli errori di programmazione) di uno shell script eseguendo lo script mediante il comando script eseguendo lo script mediante il comando csh csh con determinate opzioni; tra tutte con determinate opzioni; tra tutte esaminiamo qui solo esaminiamo qui solo xx e e vv

SintassiSintassi ::

csh csh [-options] script

Opzione : Opzione : xx ripete le linee di comando dopo aver eseguito eventuali ripete le linee di comando dopo aver eseguito eventuali

variable substitutions. Utile per localizzare problemi legativariable substitutions. Utile per localizzare problemi legati

a variable substitutions.a variable substitutions.

vv ripete le linee di comando ripete le linee di comando PRIMAPRIMA di aver eseguito eventuali di aver eseguito eventuali

variable substitutions. Utile per localizzare quale comandovariable substitutions. Utile per localizzare quale comando

fa fallire lo script.fa fallire lo script.

SintassiSintassi ::

csh csh [-options] script

Opzione : Opzione : xx ripete le linee di comando dopo aver eseguito eventuali ripete le linee di comando dopo aver eseguito eventuali

variable substitutions. Utile per localizzare problemi legativariable substitutions. Utile per localizzare problemi legati

a variable substitutions.a variable substitutions.

vv ripete le linee di comando ripete le linee di comando PRIMAPRIMA di aver eseguito eventuali di aver eseguito eventuali

variable substitutions. Utile per localizzare quale comandovariable substitutions. Utile per localizzare quale comando

fa fallire lo script.fa fallire lo script.

Page 226: Introduzione all'uso del computer

226*

8.10 Debugging8.10 Debugging8.10 Debugging8.10 Debugging

esegue lo script ripetendo iesegue lo script ripetendo icomandi comandi DOPO DOPO aver fatto ...aver fatto ...

esegue lo script ripetendo iesegue lo script ripetendo icomandi comandi DOPO DOPO aver fatto ...aver fatto ...

… … la variable sustitutionla variable sustitution… … la variable sustitutionla variable sustitution

esegue lo script ripetendo i comandiesegue lo script ripetendo i comandiletteralmente, come sarebbero letteralmente, come sarebbero SENZASENZAla variable substitutionla variable substitution

esegue lo script ripetendo i comandiesegue lo script ripetendo i comandiletteralmente, come sarebbero letteralmente, come sarebbero SENZASENZAla variable substitutionla variable substitution

Page 227: Introduzione all'uso del computer

227*

Si definisco programmi di Si definisco programmi di text processingtext processing quelli che leggono un file di input ASCII, lo quelli che leggono un file di input ASCII, lo manipolano in vari modi e generalmente producono un testo di output. manipolano in vari modi e generalmente producono un testo di output.

Si definisco programmi di Si definisco programmi di text processingtext processing quelli che leggono un file di input ASCII, lo quelli che leggono un file di input ASCII, lo manipolano in vari modi e generalmente producono un testo di output. manipolano in vari modi e generalmente producono un testo di output.

In questa categoria possiamo mettere i comandi di screen editor In questa categoria possiamo mettere i comandi di screen editor vivi e e neditnedit gia’ visti in gia’ visti in precedenza.precedenza.

In questa categoria possiamo mettere i comandi di screen editor In questa categoria possiamo mettere i comandi di screen editor vivi e e neditnedit gia’ visti in gia’ visti in precedenza.precedenza.

Vedremo ora il comando Vedremo ora il comando awkawk che e’ un potente programma di text processing la cui che e’ un potente programma di text processing la cui versatilita’ lo avvicina ad un linguaggio ad alto livello. E’ un comando di text processing versatilita’ lo avvicina ad un linguaggio ad alto livello. E’ un comando di text processing line orientedline oriented poiche’ il testo viene analizzato una linea alla volta. Le possibilita’ offerte poiche’ il testo viene analizzato una linea alla volta. Le possibilita’ offerte da da awkawk sono tra l’altro : sono tra l’altro :

Vedremo ora il comando Vedremo ora il comando awkawk che e’ un potente programma di text processing la cui che e’ un potente programma di text processing la cui versatilita’ lo avvicina ad un linguaggio ad alto livello. E’ un comando di text processing versatilita’ lo avvicina ad un linguaggio ad alto livello. E’ un comando di text processing line orientedline oriented poiche’ il testo viene analizzato una linea alla volta. Le possibilita’ offerte poiche’ il testo viene analizzato una linea alla volta. Le possibilita’ offerte da da awkawk sono tra l’altro : sono tra l’altro :

1) field oriented processing1) field oriented processing

2) predefined variables2) predefined variables

3) variable assignment3) variable assignment

4) logical operations4) logical operations

5) arithmetic expressions5) arithmetic expressions

6) scalar variables and arrays6) scalar variables and arrays

7) output redirection and piping7) output redirection and piping

Page 228: Introduzione all'uso del computer

228*

SintassiSintassi ::

awkawk [[-options-options] ] ’’program textprogram text’’ file [file2 … ] file [file2 … ]

dove dove program text program text ha la forma :ha la forma :

pattern {action} ... pattern {action}pattern {action} ... pattern {action}

SintassiSintassi ::

awkawk [[-options-options] ] ’’program textprogram text’’ file [file2 … ] file [file2 … ]

dove dove program text program text ha la forma :ha la forma :

pattern {action} ... pattern {action}pattern {action} ... pattern {action}

Opzione : Opzione : FFdelimiterdelimiter questa opzione specifica che l’ input questa opzione specifica che l’ input field separator field separator

e’ e’ delimiterdelimiter invece che il blank (che e’ il default)invece che il blank (che e’ il default)

f f awk_scriptawk_script specifica che i comandi da eseguire non vengono specifica che i comandi da eseguire non vengono

dati da terminali ma sono contenuti nel file ASCII dati da terminali ma sono contenuti nel file ASCII awk_scriptawk_script

v v varvar==valval viene definita una variabile viene definita una variabile varvar che puo’ essere ‘vista’ che puo’ essere ‘vista’

durante l’esecuzione dei comandi di durante l’esecuzione dei comandi di awkawk. A tale variabile viene anche assegnato . A tale variabile viene anche assegnato

assegnato il valore assegnato il valore valval prima di cominciare ad eseguire le altre operazioni. prima di cominciare ad eseguire le altre operazioni.

Opzione : Opzione : FFdelimiterdelimiter questa opzione specifica che l’ input questa opzione specifica che l’ input field separator field separator

e’ e’ delimiterdelimiter invece che il blank (che e’ il default)invece che il blank (che e’ il default)

f f awk_scriptawk_script specifica che i comandi da eseguire non vengono specifica che i comandi da eseguire non vengono

dati da terminali ma sono contenuti nel file ASCII dati da terminali ma sono contenuti nel file ASCII awk_scriptawk_script

v v varvar==valval viene definita una variabile viene definita una variabile varvar che puo’ essere ‘vista’ che puo’ essere ‘vista’

durante l’esecuzione dei comandi di durante l’esecuzione dei comandi di awkawk. A tale variabile viene anche assegnato . A tale variabile viene anche assegnato

assegnato il valore assegnato il valore valval prima di cominciare ad eseguire le altre operazioni. prima di cominciare ad eseguire le altre operazioni.

Azione : il comando esamina ogni riga di Azione : il comando esamina ogni riga di file file (se ci sono piu’ files in input (se ci sono piu’ files in input

vengono concatenati e visti come un unico grande file), una riga alla volta,vengono concatenati e visti come un unico grande file), una riga alla volta,

la scompone in campi (la scompone in campi (fieldsfields), indidua eventuali ), indidua eventuali patternspatterns, esegue, esegue

eventuali azioni (eventuali azioni (actionsactions).).

Azione : il comando esamina ogni riga di Azione : il comando esamina ogni riga di file file (se ci sono piu’ files in input (se ci sono piu’ files in input

vengono concatenati e visti come un unico grande file), una riga alla volta,vengono concatenati e visti come un unico grande file), una riga alla volta,

la scompone in campi (la scompone in campi (fieldsfields), indidua eventuali ), indidua eventuali patternspatterns, esegue, esegue

eventuali azioni (eventuali azioni (actionsactions).).

Page 229: Introduzione all'uso del computer

229*

Le single quotes ( ’ ) delimitano le combinazioni pattern - action statements ; le parentesigraffe { } isolano le actions dai patterns. Il pattern viene per primo, poi si mette l’action.Sia il pattern che l’action possono non esserci ma, non entrambi.Se il pattern manca, l’action sara’ eseguita per ogni record (cioe’ per ogni riga) di input.Se manca l’action allora viene assunta quella di default che e’ print vale a dire lastampa dell’intera riga di input.Infine in mancanza dell’opzioneF il field delimiter e’ lo spazio (blank).

pattern :il primo campo sia uguale a pippo

pattern :il primo campo sia uguale a pippo

action :stampa a stdout il primo e terzo campo

action :stampa a stdout il primo e terzo campo

Page 230: Introduzione all'uso del computer

230*

9.1 Definizione dei campi con i field separators9.1 Definizione dei campi con i field separators9.1 Definizione dei campi con i field separators9.1 Definizione dei campi con i field separators

Per default il delimitatore di campi (field separator) e’ qualunque un numero di blankstra caratteri non blank. Eventuali blanks all’inizio della riga vengono trascurati.

cat dimostrazione_campi.txt primocampo secondo terzo

field delimiterfield delimiter

primo campoprimo campo

terzo campoterzo campo

secondo camposecondo campo

Page 231: Introduzione all'uso del computer

231*

Si puo’ ridefinire il Si puo’ ridefinire il field separatorfield separator con una qualunque stringa di caratteri, con l’opzione con una qualunque stringa di caratteri, con l’opzioneFF come negli esempi che seguono. A differenza del blank, piu’ field separators di seguito come negli esempi che seguono. A differenza del blank, piu’ field separators di seguitodefiniscono definiscono campi vuoticampi vuoti ed eventuali field separators all’inizio di una riga ed eventuali field separators all’inizio di una riga NONNON vengono vengonotrascurati da trascurati da awkawk..

cat esempio.txt::nome:cognome::via:paeseawk -F: ‘{print $4}’ esempio.txtcognome

primo campo(vuoto)

primo campo(vuoto)

l’action e’ un printsu stdout

l’action e’ un printsu stdout

quarto campoquarto campo

il : e’ il field delimiteril : e’ il field delimiter

Page 232: Introduzione all'uso del computer

232*

il fielddelimiter

e’ :

il fielddelimiter

e’ :

pattern : unoqualunque dei campi

sia uguale a boca

pattern : unoqualunque dei campi

sia uguale a boca

l’action e’ un printdi $0 (tutta la riga)

l’action e’ un printdi $0 (tutta la riga)

delimitatore deicampi pattern-action

delimitatore deicampi pattern-action

file esaminatoda awk

file esaminatoda awk

risultato del comandorisultato del comandorisultato del comandorisultato del comando

Page 233: Introduzione all'uso del computer

233*

BEGINBEGIN esegue dei comandi esegue dei comandi primaprima di esaminare alcunadi esaminare alcuna linea di inputlinea di inputENDEND esegue dei comandi esegue dei comandi dopodopo aver saminato aver saminato tuttetutte le linee le linee di inputdi input//regular expressionregular expression/ / pattern di pattern di matchmatch (con una regular expression) (con una regular expression)relational expressionrelational expression pattern che contiene pattern che contiene relational operator(s)relational operator(s)patternpattern &&&& patternpattern AND AND logico di due patternslogico di due patternspatternpattern || || patternpattern OR OR logico di due patternslogico di due patterns!!patternpattern NOTNOT logico di un pattern logico di un patternpattern1pattern1??pattern2pattern2::pattern3pattern3 questo operatore ternario e’ uguale all’analogo del C.questo operatore ternario e’ uguale all’analogo del C. Se Se pattern1pattern1 e’ vero allora il pattern usato nel test logicoe’ vero allora il pattern usato nel test logico e’ e’ pattern2pattern2, altrimenti e’ , altrimenti e’ pattern3pattern3 pattern1pattern1,, pattern2pattern2 questa forma e’ chiamata questa forma e’ chiamata pattern rangepattern range. Corrisponde. Corrisponde a tutti i recors in input che cominciano con un recorda tutti i recors in input che cominciano con un record che corrisponde a che corrisponde a pattern1pattern1 fino al record che soddisfa fino al record che soddisfa pattern2pattern2, inclusi., inclusi.

Tavola dei patterns di awkTavola dei patterns di awk

9.2 Patterns9.2 Patterns9.2 Patterns9.2 Patterns

Diamo la tavola dei tipi di patterns di awk e, nelle pagine seguenti, numerosi esempi.

Page 234: Introduzione all'uso del computer

234*

prima dell’esame delle righeprima dell’esame delle righedi input viene eseguitadi input viene eseguita

la stampa tra parentesi graffela stampa tra parentesi graffe

prima dell’esame delle righeprima dell’esame delle righedi input viene eseguitadi input viene eseguita

la stampa tra parentesi graffela stampa tra parentesi graffe

backslash prima di return per labackslash prima di return per lacontinuazione del comandocontinuazione del comando

nella prossima riganella prossima riga

backslash prima di return per labackslash prima di return per lacontinuazione del comandocontinuazione del comando

nella prossima riganella prossima riga

operatore aritmetico dioperatore aritmetico diautoincremento comeautoincremento come

quello del Cquello del C

operatore aritmetico dioperatore aritmetico diautoincremento comeautoincremento come

quello del Cquello del C

dopo aver esaminato il dopo aver esaminato il file di input viene eseguitofile di input viene eseguito

lo statement tra parentesi graffelo statement tra parentesi graffe

dopo aver esaminato il dopo aver esaminato il file di input viene eseguitofile di input viene eseguito

lo statement tra parentesi graffelo statement tra parentesi graffe

Patterns contenenti Patterns contenenti BEGINBEGIN od od ENDENDPatterns contenenti Patterns contenenti BEGINBEGIN od od ENDEND

Page 235: Introduzione all'uso del computer

235*

patternpattern : :un campo qualunque sia uguale a un campo qualunque sia uguale a bocaboca

patternpattern : :un campo qualunque sia uguale a un campo qualunque sia uguale a bocaboca

Pattern di match (con una regular expression)Pattern di match (con una regular expression)Pattern di match (con una regular expression)Pattern di match (con una regular expression)

Il pattern di match e’ indicato dalla presenza delle barre in avanti (slash). Il match siverifica quando uno o piu’ campi contengono la stringa di caratteri con cui si fa il match.Quest’ultima e’ appunto quella racchiusa tra barre. Si noti che quest’ultima puo’ esseresia una stringa normale, sia una con i simboli speciali (ad es. il $ ed il ^) che si possonousare con il comando grep, con significato analogo. In UNIX sia le stringhe normali chequelle con simboli speciali vengono chiamate regular expressions.

action statementaction statement : :printprint da solo, cioe’ print di tutta la riga da solo, cioe’ print di tutta la riga

action statementaction statement : :printprint da solo, cioe’ print di tutta la riga da solo, cioe’ print di tutta la riga

l’output del comandol’output del comandoawk awk e’ il printout die’ il printout ditutte le righe del filetutte le righe del file

/etc/passwd/etc/passwd che abbiano che abbianoun qualunque campoun qualunque campo

uguale a uguale a bocaboca

l’output del comandol’output del comandoawk awk e’ il printout die’ il printout ditutte le righe del filetutte le righe del file

/etc/passwd/etc/passwd che abbiano che abbianoun qualunque campoun qualunque campo

uguale a uguale a bocaboca

Page 236: Introduzione all'uso del computer

236*

Pattern di match (con una regular expression)Pattern di match (con una regular expression)Pattern di match (con una regular expression)Pattern di match (con una regular expression)

Il pattern di match e’ indicato dalla presenza delle barre in avanti (slash). Il match siverifica quando uno o piu’ campi contengono la stringa di caratteri con cui si fa il match.Quest’ultima e’ appunto quella racchiusa tra barre. Si noti che quest’ultima puo’ esseresia una stringa normale, sia una con i simboli speciali (ad es. il $ ed il ^) che si possonousare con il comando grep, con significato analogo. In UNIX sia le stringhe normali chequelle con simboli speciali vengono chiamate regular expressions.

patternpattern : :un campo qualunque sia uguale alla un campo qualunque sia uguale alla regular expressionregular expression ^b ^b

(che vuol dire una stringa di caratteri che inizi con (che vuol dire una stringa di caratteri che inizi con b b ))

patternpattern : :un campo qualunque sia uguale alla un campo qualunque sia uguale alla regular expressionregular expression ^b ^b

(che vuol dire una stringa di caratteri che inizi con (che vuol dire una stringa di caratteri che inizi con b b ))

l’output del comandol’output del comandoawk awk e’ il printout die’ il printout di

tutte le righe che hannotutte le righe che hannoqualche campo chequalche campo che

comincia percomincia per b b

l’output del comandol’output del comandoawk awk e’ il printout die’ il printout di

tutte le righe che hannotutte le righe che hannoqualche campo chequalche campo che

comincia percomincia per b b

Page 237: Introduzione all'uso del computer

237*

Pattern di match (con una regular expression)Pattern di match (con una regular expression)Pattern di match (con una regular expression)Pattern di match (con una regular expression)

Il pattern di match e’ indicato dalla presenza delle barre in avanti (slash). Il match siverifica quando uno o piu’ campi contengono la stringa di caratteri con cui si fa il match.Quest’ultima e’ appunto quella racchiusa tra barre. Si noti che quest’ultima puo’ esseresia una stringa normale, sia una con i simboli speciali (ad es. il $ ed il ^) che si possonousare con il comando grep, con significato analogo. In UNIX sia le stringhe normali chequelle con simboli speciali vengono chiamate regular expressions.

action mancante, significa action mancante, significa print print ;;l’output del comandol’output del comandoawk awk e’ il printout die’ il printout di

tutte le righe che hannotutte le righe che hannoil primo campo cheil primo campo che

comincia percomincia per g g

action mancante, significa action mancante, significa print print ;;l’output del comandol’output del comandoawk awk e’ il printout die’ il printout di

tutte le righe che hannotutte le righe che hannoil primo campo cheil primo campo che

comincia percomincia per g g

patternpattern : :il primo campo sia uguale alla il primo campo sia uguale alla regular expressionregular expression ^g ^g

( stringa di caratteri che inizi con ( stringa di caratteri che inizi con g g ))

patternpattern : :il primo campo sia uguale alla il primo campo sia uguale alla regular expressionregular expression ^g ^g

( stringa di caratteri che inizi con ( stringa di caratteri che inizi con g g ))

Page 238: Introduzione all'uso del computer

238*

Pattern di match (con una regular expression)Pattern di match (con una regular expression)Pattern di match (con una regular expression)Pattern di match (con una regular expression)

Il pattern di match e’ indicato dalla presenza delle barre in avanti (slash). Il match siverifica quando uno o piu’ campi contengono la stringa di caratteri con cui si fa il match.Quest’ultima e’ appunto quella racchiusa tra barre. Si noti che quest’ultima puo’ esseresia una stringa normale, sia una con i simboli speciali (ad es. il $ ed il ^) che si possonousare con il comando grep, con significato analogo. In UNIX sia le stringhe normali chequelle con simboli speciali vengono chiamate regular expressions.

l’output del comandol’output del comandoawk awk e’ il printout die’ il printout di

tutte le righe che hannotutte le righe che hannoqualunque campo chequalunque campo che

termina pertermina per tcsh tcsh

l’output del comandol’output del comandoawk awk e’ il printout die’ il printout di

tutte le righe che hannotutte le righe che hannoqualunque campo chequalunque campo che

termina pertermina per tcsh tcsh

patternpattern : :qualunque campo sia uguale alla qualunque campo sia uguale alla regular expressionregular expression tcsh$ tcsh$

che vuol dire stringa di caratteri che finisca con che vuol dire stringa di caratteri che finisca con tcshtcsh

patternpattern : :qualunque campo sia uguale alla qualunque campo sia uguale alla regular expressionregular expression tcsh$ tcsh$

che vuol dire stringa di caratteri che finisca con che vuol dire stringa di caratteri che finisca con tcshtcsh

Page 239: Introduzione all'uso del computer

239*

ANDAND logico dei due patterns logico dei due patternsANDAND logico dei due patterns logico dei due patterns

operatore matematicooperatore matematicooperatore matematicooperatore matematicooperatore relazionaleoperatore relazionale < <operatore relazionaleoperatore relazionale < <

actionactionactionactionAltri esempi di patternsAltri esempi di patternsAltri esempi di patternsAltri esempi di patterns

Page 240: Introduzione all'uso del computer

240*

se il 3se il 300 campo e’ < campo e’ < 00000000allora il 3allora il 300 campo sia < campo sia <2020

altrimenti il 4altrimenti il 400 campo sia < campo sia < 2020

se il 3se il 300 campo e’ < campo e’ < 00000000allora il 3allora il 300 campo sia < campo sia <2020

altrimenti il 4altrimenti il 400 campo sia < campo sia < 2020

corrisponde ai records (linee)corrisponde ai records (linee)cominciando da quello che contienecominciando da quello che contieneil pattern il pattern halt halt a quello che contiene a quello che contiene

il pattern il pattern opeope all’inizio della riga. all’inizio della riga.L’action non e’ indicata, quindi e’L’action non e’ indicata, quindi e’

quella di default : quella di default : print $0print $0

corrisponde ai records (linee)corrisponde ai records (linee)cominciando da quello che contienecominciando da quello che contieneil pattern il pattern halt halt a quello che contiene a quello che contiene

il pattern il pattern opeope all’inizio della riga. all’inizio della riga.L’action non e’ indicata, quindi e’L’action non e’ indicata, quindi e’

quella di default : quella di default : print $0print $0

Altri esempi di patternsAltri esempi di patternsAltri esempi di patternsAltri esempi di patterns

Page 241: Introduzione all'uso del computer

241*

NOTNOT logico (negazione) logico (negazione)NOTNOT logico (negazione) logico (negazione)Altri esempi di patternsAltri esempi di patternsAltri esempi di patternsAltri esempi di patterns

Page 242: Introduzione all'uso del computer

242*

9.3 Actions9.3 Actions9.3 Actions9.3 Actions

Come gia’ detto, le actions sono racchiuse tra parentesi graffe. Gli statements che formanouna action sono uguali a quelle disponibile nel linguaggio C. Il numero ed il tipo di actionspossedute da awk lo avvicinano molto ad un vero e proprio linguaggio ad alto livello.Nel seguito, ciascuna categoria di action verra’ spiegata mediante un esempio.

Tipi di action statementsTipi di action statements

1) Variable assignment1) Variable assignment2) Formatted printing, I/O statements, output redirecting2) Formatted printing, I/O statements, output redirecting3) Mathematical and logiacal operators, string and mathematical3) Mathematical and logiacal operators, string and mathematical functionsfunctions4) Conditional, flow control and looping statements4) Conditional, flow control and looping statements

Page 243: Introduzione all'uso del computer

243*

Variable assignmentVariable assignmentVariable assignmentVariable assignment

In awk si possono definire delle variabili che possono essere scalari oppure anche vettori

ad una dimensione. Esistono anche delle variabili predefinite. Le variabili sono dinamiche,cioe’ vengono create quando vengono usate per la prima volta. Inoltre, a differenza diquanto succede in molti linguaggi di alto livello, NON occorre dichiarare prima il tipo divariabile. I valori che possono assumere le variabili possono essere floating point, interi,stringhe di caratteri in dipendenza da come vengono usate. L’utente assegna valori allevariabili mediante l’uguale ( = ).

Non c’e’ bisogno cheNon c’e’ bisogno chela variabile la variabile xx sia sia

stata definita primastata definita prima

Non c’e’ bisogno cheNon c’e’ bisogno chela variabile la variabile xx sia sia

stata definita primastata definita prima

La variabile La variabile xx puo’ assumere puo’ assumerevalori sia interi chevalori sia interi che

alfanumerici (stringa di caratteri)alfanumerici (stringa di caratteri)

La variabile La variabile xx puo’ assumere puo’ assumerevalori sia interi chevalori sia interi che

alfanumerici (stringa di caratteri)alfanumerici (stringa di caratteri)

;; separatore separatoredi comandidi comandi(come in C(come in C

e nella C shell)e nella C shell)

;; separatore separatoredi comandidi comandi(come in C(come in C

e nella C shell)e nella C shell)

Page 244: Introduzione all'uso del computer

244*

Tavola delle variabili predefiniteTavola delle variabili predefinite

Come detto prima, awk ha un set di varibili predefinite (built-in variables)che l’utentepuo’ usare in qualunque punto del suo script ; sono riassunte nella tavola che segue.

ARGC ARGC il numero di argomenti dati nella linea di comando di il numero di argomenti dati nella linea di comando di awkawk, ad, ad esclusione delle opzioni e dell’input file.esclusione delle opzioni e dell’input file.ARGIND ARGIND l’indice in l’indice in ARGV ARGV del file correntemente esaminato.del file correntemente esaminato.ARGV ARGV array degli argomenti dati nella linea di comando di array degli argomenti dati nella linea di comando di awkawk. L’array e’. L’array e’ numerato da numerato da 0 0 ad ad ARGCARGC11. Modificando dinamicamente . Modificando dinamicamente ARGVARGV si possono controllare i files di dati in input.si possono controllare i files di dati in input.CONVFMT CONVFMT il formato di conversione per i numeri che per default e’ il formato di conversione per i numeri che per default e’ “%.6g”“%.6g”ENVIRON ENVIRON e’ l’array contenente i valori correnti delle e’ l’array contenente i valori correnti delle environment variablesenvironment variables.. Questo array e’ indicizzato dal nome della variabile d’ambiente eQuesto array e’ indicizzato dal nome della variabile d’ambiente e ciascun elemento e’ il valore di tale variabile. Ad esempio,ciascun elemento e’ il valore di tale variabile. Ad esempio, ENVIRON[“HOME”]ENVIRON[“HOME”] potrebbe essere potrebbe essere /home/studente/home/studente (vedi anche (vedi anche seguitoseguito la sintassi degli arrays). Da notare che se si cambia questola sintassi degli arrays). Da notare che se si cambia questo array all’interno di awk array all’interno di awk NONNON cambia il set di variabili d’ambiente cambia il set di variabili d’ambiente visto da programmi fatti partire da awk mediante redirection ovisto da programmi fatti partire da awk mediante redirection o dall’uso della funzione dall’uso della funzione systemsystem..

Variabili predefiniteVariabili predefiniteVariabili predefiniteVariabili predefinite

Page 245: Introduzione all'uso del computer

245*

Tavola delle variabili predefiniteTavola delle variabili predefinite

Come detto prima, awk ha un set di varibili predefinite (built-in variables)che l’utentepuo’ usare in qualunque punto del suo script ; sono riassunte nella tavola che segue.

ERRNO ERRNO se c’e’ un errore di sistema durante la ridirezionamento con lase c’e’ un errore di sistema durante la ridirezionamento con la la funzione la funzione getlinegetline o durante un read con o durante un read con getlinegetline e durante una e durante una closeclose allora allora ERRNOERRNO conterra’ una stringa che descrive l’errore. conterra’ una stringa che descrive l’errore.FILENAME FILENAME il nome del file di input corrente.il nome del file di input corrente.FNR FNR l’input record number nel file di input corrente.l’input record number nel file di input corrente.FS FS l’input field separator (uno spazio per default).l’input field separator (uno spazio per default).IGNORECASE IGNORECASE controlla la case-sensitivity di tutte le regular expressions e lecontrolla la case-sensitivity di tutte le regular expressions e le operazioni con stringhe. Se esso ha un valore diverso da operazioni con stringhe. Se esso ha un valore diverso da 00, allora, allora tutte le operazioni che coinvolgono pattern matching, regulartutte le operazioni che coinvolgono pattern matching, regular expressions etc. non fanno differenza tra maiuscole e minuscole. Adexpressions etc. non fanno differenza tra maiuscole e minuscole. Ad es. es. /aB//aB/ corrisponde alle stringhe corrisponde alle stringhe “ab”“ab”, , “aB”“aB”,, “Ab” “Ab” e e “AB”“AB”..NF NF il numero di campi della riga correnteil numero di campi della riga correnteNR NR numero totale di numero totale di input recordsinput records (cioe’ righe di input) viste finora. (cioe’ righe di input) viste finora.

Variabili predefiniteVariabili predefiniteVariabili predefiniteVariabili predefinite

Page 246: Introduzione all'uso del computer

246*

Tavola delle variabili predefiniteTavola delle variabili predefinite

Come detto prima, awk ha un set di varibili predefinite (built-in variables)che l’utentepuo’ usare in qualunque punto del suo script ; sono riassunte nella tavola che segue.

OFMT OFMT il formato di output per i numeri, per default il formato di output per i numeri, per default “%.6g”“%.6g”. Modificando. Modificando questa variabile si puo’ modificare l’output del comando print questa variabile si puo’ modificare l’output del comando print NONNON formattato; vedi in seguito nella sezione sull’ formattato; vedi in seguito nella sezione sull’ I/OI/O..OFS OFS l’ l’ output field separatoroutput field separator, uno spazio per default., uno spazio per default.ORS ORS l’ l’ output record separatoroutput record separator; per default e’ un ; per default e’ un newlinenewline..RS RS l’l’ nput record separator nput record separator; per default e’ un ; per default e’ un newlinenewline..RSTART RSTART l’indice del primo carattere corrispondente ai criteri della funzionel’indice del primo carattere corrispondente ai criteri della funzione match( )match( ) ; ; 0 0 se non ce n’e’ nessuno.se non ce n’e’ nessuno.RLENGTH RLENGTH la lunghezza della stringa individuata da la lunghezza della stringa individuata da match( )match( ) ; ;11 se non ce n’e’ se non ce n’e’ alcuna.alcuna.SUBSEP SUBSEP il carattere usato per separare gli indici ‘multipli’ negli arrays, peril carattere usato per separare gli indici ‘multipli’ negli arrays, per default e’ default e’ “\034”“\034” (cioe’ il carattere ASCII corrispondente al numero (cioe’ il carattere ASCII corrispondente al numero ottale ottale 34 34 ( ( CC in esadecimale) ; vedi seguito nella sezione dedicata in esadecimale) ; vedi seguito nella sezione dedicata agli arrays).agli arrays).

Variabili predefiniteVariabili predefiniteVariabili predefiniteVariabili predefinite

Page 247: Introduzione all'uso del computer

247*

Tavola delle variabili predefiniteTavola delle variabili predefinite

Come detto prima, awk ha un set di varibili predefinite (built-in variables)che l’utentepuo’ usare in qualunque punto del suo script ; sono riassunte nella tavola che segue.

$0 $0 tutto il record ( tutta la riga ) correntetutto il record ( tutta la riga ) corrente$$nn il field il field nnesimoesimo del record corrente del record correntelength(length(varvar) ) lunghezza (in caratteri) del contenuto di lunghezza (in caratteri) del contenuto di varvar

Variabili predefiniteVariabili predefiniteVariabili predefiniteVariabili predefinite

Page 248: Introduzione all'uso del computer

248*

Come gia’ detto, in awk si possono definire delle variabili anche vettori. Tali arraysvengono indicati, come in C, con un nome seguito da parentesi quadre ( [ ] ). Non e’necessario dichiararne il tipo prima poiche’ vengono creati al momento dell’uso. La lorodimensione e’ solo . Tuttavia se ne puo’ sfruttare una notevole particolarita’, vale a direche l’indice dei vettori e’ una stringa di caratteri (proprieta’ associativa dell’indice delvettore ) per simulare arrays a piu’ dimensioni.

Il vettore Il vettore vv ha indici ha indicialfanumerici ( alfanumerici ( hash tablehash table ) )

Il vettore Il vettore vv ha indici ha indicialfanumerici ( alfanumerici ( hash tablehash table ) )

VettoriVettoriVettoriVettori

Page 249: Introduzione all'uso del computer

249*

Infatti, se il vettore viene indicizzato con una lista di espressioni :expr1, expr2,expr3 …allora l’indice del vettore diventa la stringa risultato della concatenazione dei valori (comestringhe) di ciascuna espressione, separate dal valore della variabile SUBSEP (vedi tavolaprecedente delle variabili predefinite). In tal modo e’ possibile simulare la presenza di piu’indici per il vettore.

Il vettore Il vettore vv ha un ha un UNICOUNICO indice dato dalla indice dato dalla concatenazione dei valori concatenazione dei valori A B CA B C separati tra loro separati tra loro dal separatore dal separatore \034 \034 (cioe’ dal valore contenuto in (cioe’ dal valore contenuto in SUBSEPSUBSEP))

Il vettore Il vettore vv ha un ha un UNICOUNICO indice dato dalla indice dato dalla concatenazione dei valori concatenazione dei valori A B CA B C separati tra loro separati tra loro dal separatore dal separatore \034 \034 (cioe’ dal valore contenuto in (cioe’ dal valore contenuto in SUBSEPSUBSEP))

Il vettore Il vettore vecvec ha un ha un UNICOUNICO indice dato dalla indice dato dalla concatenazione dei valori concatenazione dei valori 3 1 53 1 5 separati tra loro separati tra loro dal separatore dal separatore \034 \034 (cioe’ dal valore di (cioe’ dal valore di SUBSEPSUBSEP). ). Cosi’ il riferimento al vettore Cosi’ il riferimento al vettore vecvec nello statement nello statement printprint e’ e’ formalmente formalmente identico a quello di un vero identico a quello di un vero vettore multidimensionalevettore multidimensionale

Il vettore Il vettore vecvec ha un ha un UNICOUNICO indice dato dalla indice dato dalla concatenazione dei valori concatenazione dei valori 3 1 53 1 5 separati tra loro separati tra loro dal separatore dal separatore \034 \034 (cioe’ dal valore di (cioe’ dal valore di SUBSEPSUBSEP). ). Cosi’ il riferimento al vettore Cosi’ il riferimento al vettore vecvec nello statement nello statement printprint e’ e’ formalmente formalmente identico a quello di un vero identico a quello di un vero vettore multidimensionalevettore multidimensionale

VettoriVettoriVettoriVettori

Come gia’ detto, in awk si possono definire delle variabili anche vettori. Tali arraysvengono indicati, come in C, con un nome seguito da parentesi quadre ( [ ] ). Non e’necessario dichiararne il tipo prima poiche’ vengono creati al momento dell’uso. La lorodimensione e’ solo . Tuttavia se ne puo’ sfruttare una notevole particolarita’, vale a direche l’indice dei vettori e’ una stringa di caratteri (proprieta’ associativa dell’indice delvettore ) per simulare arrays a piu’ dimensioni.

Page 250: Introduzione all'uso del computer

250*

VettoriVettoriVettoriVettori

Esiste in awk l’operatore in che serve per determinare se un valore e’ un possibile indicedi un vettore.

Valori possibili dell’indice di vecsono e 3

Valori possibili dell’indice di vecsono e 3

operatore in che restituisce un valore(true o false ) che e’ possibile usare in uno

statement logico (if in questo esempio)

operatore in che restituisce un valore(true o false ) che e’ possibile usare in uno

statement logico (if in questo esempio)

Page 251: Introduzione all'uso del computer

251*

Formatted printing, I/O statements,Formatted printing, I/O statements,output redirectingoutput redirectingFormatted printing, I/O statements,Formatted printing, I/O statements,output redirectingoutput redirecting

Il printout a stdout si ottiene con lo statement print come abbiamo gia’ visto in numerosi

esempi precedenti. Si noti che print e’ anche l’action di default nel caso l’utente non neindichi esplicitamente di proprie. Nel caso invece si voglia formattare l’output si puo’ usare,in modo del tutto analogo al C, lo statement printf.

SintassiSintassi ::

{{ printf “printf “format statementformat statement”” expression expression }}

dove dove program text program text ha la forma :ha la forma :

pattern {action} ... pattern {action}pattern {action} ... pattern {action}

SintassiSintassi ::

{{ printf “printf “format statementformat statement”” expression expression }}

dove dove program text program text ha la forma :ha la forma :

pattern {action} ... pattern {action}pattern {action} ... pattern {action}

{ printf “%8.2f”,i }{ printf “variabile intera %10d\n”,i }{ printf “formato variabile %10.6g\n”,i}

{ printf “%8.2f”,i }{ printf “variabile intera %10d\n”,i }{ printf “formato variabile %10.6g\n”,i}

printout di variabile floating point, in un campoprintout di variabile floating point, in un campoda 8 cifre con 2 cifre decimalida 8 cifre con 2 cifre decimali

printout di variabile floating point, in un campoprintout di variabile floating point, in un campoda 8 cifre con 2 cifre decimalida 8 cifre con 2 cifre decimali

printout di variabile intera in campo di printout di variabile intera in campo di cifre cifreprintout di variabile intera in campo di printout di variabile intera in campo di cifre cifre

printout di variabile con formato variabileprintout di variabile con formato variabilein campo diin campo dicifre con 2 cifre significative cifre con 2 cifre significative

printout di variabile con formato variabileprintout di variabile con formato variabilein campo diin campo dicifre con 2 cifre significative cifre con 2 cifre significative

Page 252: Introduzione all'uso del computer

252*

action :printout delle variabilii e $ con un campo di5 interi e come stringa

rispettivamente

action :printout delle variabilii e $ con un campo di5 interi e come stringa

rispettivamente

Page 253: Introduzione all'uso del computer

253*

In In awkawk e’ possibile ridirigere l’output, normalmente diretto a e’ possibile ridirigere l’output, normalmente diretto a stdoutstdout, ad un file, ad un fileoppure ad un altro comando con un piping.oppure ad un altro comando con un piping.

In In awkawk e’ possibile ridirigere l’output, normalmente diretto a e’ possibile ridirigere l’output, normalmente diretto a stdoutstdout, ad un file, ad un fileoppure ad un altro comando con un piping.oppure ad un altro comando con un piping.

> > : ridirezione dell’output da : ridirezione dell’output da stdoutstdout a a users_file.lisusers_file.lis> > : ridirezione dell’output da : ridirezione dell’output da stdoutstdout a a users_file.lisusers_file.lis

>> >> : ridirezione dell’output da : ridirezione dell’output da stdoutstdouta a users_file.lisusers_file.lis

>> >> : ridirezione dell’output da : ridirezione dell’output da stdoutstdouta a users_file.lisusers_file.lis

piping dell’output di awk al comandohead3

piping dell’output di awk al comandohead3

Page 254: Introduzione all'uso del computer

254*

Esistono anche altri statements che riguardano l’ Esistono anche altri statements che riguardano l’ I/OI/O; sono riassunti nella tavola seguente ; sono riassunti nella tavola seguente Esistono anche altri statements che riguardano l’ Esistono anche altri statements che riguardano l’ I/OI/O; sono riassunti nella tavola seguente ; sono riassunti nella tavola seguente

Tavola degli statements di Input/OutputTavola degli statements di Input/Outputclose(close(filefile)) close file or pipeclose file or pipegetline getline set set $0$0 equal to the next input line; set equal to the next input line; set NFNF, , NRNR, , FNRFNRgetline <getline < file file set set $0$0 equal to the next input line of equal to the next input line of filefile ; set ; set NFNFgetline getline var var set set varvar equal to the next input line; set equal to the next input line; set NRNR, , FNRFNR getline getline var var << file file set set varvar equal to the next input line of equal to the next input line of filefilenext next stop processing the current input record. The next input record stop processing the current input record. The next input record is read and processing starts over with the first pattern in theis read and processing starts over with the first pattern in the awkawk program. If the end of the input is reached, the program. If the end of the input is reached, the ENDEND block(s), if any, are executed.block(s), if any, are executed.nextfile nextfile stop processing the current input record. The next input recordstop processing the current input record. The next input record read comes from the next input file. read comes from the next input file. FILENAMEFILENAME and and ARGINDARGIND are updated, are updated, FNRFNR is reset to is reset to and processing starts over with the and processing starts over with the first pattern in the first pattern in the awkawk program. If the end of the input data is program. If the end of the input data is reached, the reached, the ENDEND block(s), if any, are executed. block(s), if any, are executed.

Page 255: Introduzione all'uso del computer

255*

Esistono anche altri statements che riguardano l’ Esistono anche altri statements che riguardano l’ I/OI/O; sono riassunti nella tavola seguente ; sono riassunti nella tavola seguente Esistono anche altri statements che riguardano l’ Esistono anche altri statements che riguardano l’ I/OI/O; sono riassunti nella tavola seguente ; sono riassunti nella tavola seguente

Tavola degli statements di Input/OutputTavola degli statements di Input/Outputfflush(fflush([file][file])) flush any buffers associated with the open output file or pipeflush any buffers associated with the open output file or pipe filefile . If . If filefile is missing, then is missing, then stdoutstdout is flushed. If is flushed. If file file is the is the NULLNULL string, then all open output files and pipes have their buffersstring, then all open output files and pipes have their buffers flushed.flushed.system(system(command linecommand line) ) executes executes command linecommand line and returns the status. The and returns the status. The command is executed in the Bash shell (command is executed in the Bash shell (shsh).).

Page 256: Introduzione all'uso del computer

256*

action action ::quando quando NRNR

(numero di records)(numero di records)e’ uguale a 3e’ uguale a 3

action action ::quando quando NRNR

(numero di records)(numero di records)e’ uguale a 3e’ uguale a 3

salta un record esalta un record eponi il prossimoponi il prossimo

input record in input record in $0$0

salta un record esalta un record eponi il prossimoponi il prossimo

input record in input record in $0$0

non ha stampato lanon ha stampato laterza riga perche’terza riga perche’

l’ha saltata con l’ha saltata con nextnext

non ha stampato lanon ha stampato laterza riga perche’terza riga perche’

l’ha saltata con l’ha saltata con nextnext

Page 257: Introduzione all'uso del computer

257*

pattern pattern ::NRNR sia sia <= 3<= 3

pattern pattern ::NRNR sia sia <= 3<= 3

esegue il comando di (Bash) shell esegue il comando di (Bash) shell datedate esegue il comando di (Bash) shell esegue il comando di (Bash) shell datedate

Page 258: Introduzione all'uso del computer

258*

Operatori matematici e logiciOperatori matematici e logiciOperatori matematici e logiciOperatori matematici e logici

Vengono di seguito elencati nella tavola gli operatori matematici e logici disponibili in

awk in ordine di priorita’ decrescente (gli operatori in cima all’elenco vengono eseguitiper primi, quelli sulla stessa riga hanno la stessa priorita’ e vengono eseguiti da sinistra adestra). Si nota una volta di piu’, che sono uguali agli operatori del C ; hanno anchela stessa sintassi.

( ) ( ) parenthesisparenthesis$ $ field reference field reference++++ increment and decremet, both prefix and postfixincrement and decremet, both prefix and postfix^ ^ exponentiation (alsoexponentiation (also ))++ ! ! unary plus, unary minus, negate value of expressionunary plus, unary minus, negate value of expression * / % * / % multiply, divide and remainder (modulo)multiply, divide and remainder (modulo)+ + addition andaddition and subtractionsubtractionspacespace string concatenation string concatenation< > < > less than, greater than less than, greater than

Tavola degli operatori matematici e logiciTavola degli operatori matematici e logici

Page 259: Introduzione all'uso del computer

259*

Operatori matematici e logiciOperatori matematici e logiciOperatori matematici e logiciOperatori matematici e logici

<= >= <= >= less than or equal to, less than or equal to, greater than or equal togreater than or equal to!= == != == not similar to, similar tonot similar to, similar to~ !~ ~ !~ match ( for example, match ( for example, $2$2~/~/AA||||BB||||CC// ), ), no match ( for example, no match ( for example, $2$2!~/!~/AA||||BB||||CC// ) )in in array membershiparray membership&& && Boolean ANDBoolean AND|| || Boolean ORBoolean OR?: ?: the C conditional expressionthe C conditional expression= += = += = = = /= %= ^= = /= %= ^= assignments assignments

Tavola degli operatori matematici e logiciTavola degli operatori matematici e logici

Vengono di seguito elencati nella tavola gli operatori matematici e logici disponibili in

awk in ordine di priorita’ decrescente (gli operatori in cima all’elenco vengono eseguitiper primi, quelli sulla stessa riga hanno la stessa priorita’ e vengono eseguiti da sinistra adestra). Si nota una volta di piu’, che sono uguali agli operatori del C ; hanno anchela stessa sintassi.

Page 260: Introduzione all'uso del computer

260*

pattern pattern ::quandoquando NR NR e’ uguale a e’ uguale a 5 5

pattern pattern ::quandoquando NR NR e’ uguale a e’ uguale a 5 5

elevamento alla 4elevamento alla 4aa potenza potenzaelevamento alla 4elevamento alla 4aa potenza potenzail resto di il resto di $4$4 / 3 / 3il resto di il resto di $4$4 / 3 / 3autoincremento di 1autoincremento di 1autoincremento di 1autoincremento di 1

Page 261: Introduzione all'uso del computer

261*

String functionsString functionsString functionsString functions

gensub(gensub(rr , , s s , , hh , , [, t ][, t ] ) ) search the stringsearch the string t t for matches of the regular expression for matches of the regular expression r r . If h is a string beginning with . If h is a string beginning with gg or or GG, then replace, then replace all matches ofall matches of r r with with ss. Otherwise, . Otherwise, hh is a number is a number indicating which match of indicating which match of rr to replace.If no to replace.If no t t is suppliedis supplied $0$0 is used insted. is used insted.gsub(gsub(rr , , s s , , [, t ][, t ] ) ) for each substring matching the regular expression for each substring matching the regular expression rr in in the stringthe string t t , substitute the string , substitute the string s s , and return the, and return the number of substitutions. Ifnumber of substitutions. If t t is not supplied, use is not supplied, use $0$0 . .index(index(stringstring, , substringsubstring) ) starting position of starting position of stringstring in in substringsubstring;; if not found returns 0if not found returns 0length(length(stringstring) ) length of length of stringstringmatch (match (s s , , rr ) ) returns the position in returns the position in ss where the regular expression where the regular expression r r occurs, or 0 ifoccurs, or 0 if r r is not present, and sets the values ofis not present, and sets the values of RSTARTRSTART and and RLENGTHRLENGTH

Tavola degli string operatorsTavola degli string operators

Il comando awk possiede anche una notevole varieta’ di funzioni che manipolano le

stringhe di caratteri.

Page 262: Introduzione all'uso del computer

262*

String functionsString functionsString functionsString functions

sprintf(sprintf(fmt fmt , , expr-listexpr-list) ) prints prints expr-listexpr-list according to according to fmtfmt and returns the resulting and returns the resulting string string split(split(stringstring, , arrayarray, , ““separatorseparator””) ) separates separates stringstring into elements of into elements of arrayarray according to the according to the field field separatorseparatorsub(sub(rr , , s s , , [, t ][, t ] ) ) just like just like gsub( )gsub( ) but only the first matching substring is replaced but only the first matching substring is replacedsubstr(substr(stringstring, , positionposition, , lengthlength) ) substring of substring of stringstring , starting at , starting at positionposition , and , and lengthlength characters longcharacters longtolower( tolower( stringstring ) ) returns a copy of the string returns a copy of the string stringstring with all the upper-case with all the upper-case characters in characters in stringstring translated to their corresponding translated to their corresponding lower-case counterparts. Non-alphabetic characters arelower-case counterparts. Non-alphabetic characters are left unchanged.left unchanged.toupper ( toupper ( stringstring ) ) returns a copy of the string returns a copy of the string stringstring with all the lower-case with all the lower-case characters in characters in stringstring translated to their corresponding translated to their corresponding upper-case counterparts. Non-alphabetic characters areupper-case counterparts. Non-alphabetic characters are left unchanged.left unchanged.

Tavola degli string operatorsTavola degli string operators

Il comando awk possiede anche una notevole varieta’ di funzioni che manipolano le

stringhe di caratteri.

Page 263: Introduzione all'uso del computer

263*

inizializza lainizializza lavariabile variabile ncnc a 0 a 0

inizializza lainizializza lavariabile variabile ncnc a 0 a 0

action action ::incrementa la variabileincrementa la variabile nc nc della lunghezza della lunghezza

(numero di caratteri) di ciascuna linea di input(numero di caratteri) di ciascuna linea di input

action action ::incrementa la variabileincrementa la variabile nc nc della lunghezza della lunghezza

(numero di caratteri) di ciascuna linea di input(numero di caratteri) di ciascuna linea di input

action action ::splitting del 4splitting del 400 campo del record campo del record

di input, secondo il field separatordi input, secondo il field separator : : e creazione del vettore e creazione del vettore time time concondentro il risultato dello splittingdentro il risultato dello splitting

action action ::splitting del 4splitting del 400 campo del record campo del record

di input, secondo il field separatordi input, secondo il field separator : : e creazione del vettore e creazione del vettore time time concondentro il risultato dello splittingdentro il risultato dello splitting

action action ::printout degliprintout degli

elementi del vettoreelementi del vettoretimetime

action action ::printout degliprintout degli

elementi del vettoreelementi del vettoretimetime

Page 264: Introduzione all'uso del computer

264*

solo un solo un BEGINBEGIN ed un ed un ENDENDin questo awk script; in praticain questo awk script; in pratica

il file di input e’ irrilevanteil file di input e’ irrilevante

solo un solo un BEGINBEGIN ed un ed un ENDENDin questo awk script; in praticain questo awk script; in pratica

il file di input e’ irrilevanteil file di input e’ irrilevante

Page 265: Introduzione all'uso del computer

265*

Mathematical functionsMathematical functionsMathematical functionsMathematical functions

atan2(atan2(y y , , xx) ) preturns the arctang of preturns the arctang of y y //x x in radiansin radianscos(cos(exprexpr) ) returns cosine of returns cosine of exprexpr (which is in radians) (which is in radians)exp(exp(exprexpr) ) exponential functionexponential functionint(int(exprexpr) ) truncates to integertruncates to integerlog(log(exprexpr) ) natural logarithmnatural logarithmrand ( ) rand ( ) returns a andom number between 0 and 1returns a andom number between 0 and 1sin(sin(exprexpr) ) returns sine of returns sine of exprexpr (which is in radians) (which is in radians)sqrt(sqrt(exprexpr) ) returns the square root functionreturns the square root functionsrand(srand(exprexpr) ) uses uses exprexpr as a new seed for the random number generator as a new seed for the random number generator

Tavola delle funzioni matematicheTavola delle funzioni matematiche

La tabella che segue mostra le funzioni matematiche disponibili con awk.

Page 266: Introduzione all'uso del computer

266*

pattern pattern ::NRNR

minore diminore di

pattern pattern ::NRNR

minore diminore diaction action ::

calcolo di calcolo di sqrt(NR)sqrt(NR) e e log(NR)log(NR)

action action ::calcolo di calcolo di sqrt(NR)sqrt(NR) e e log(NR)log(NR)

Page 267: Introduzione all'uso del computer

267*

Conditional, flow control and looping statementsConditional, flow control and looping statementsConditional, flow control and looping statementsConditional, flow control and looping statements

if(if(conditioncondition) ) statement statement [[ else else statementstatement ] ]while (while (conditioncondition) ) statementstatement do do statement statement while while conditioncondition for(for(expr1 expr1 ; ; expr2 expr2 ;; expr3 expr3 ) ) statementstatement for( for( varvar in in array array ))breakbreakcontinuecontinueexit exit [[ expressionexpression ] ] { { statements statements }}

Tavola dei conditional, flowTavola dei conditional, flowcontrol e looping statements control e looping statements

Sono uguali a quelli del linguaggio C.

Page 268: Introduzione all'uso del computer

268*

Page 269: Introduzione all'uso del computer

269*

action action ::test del loop test del loop whilewhile

action action ::test del loop test del loop whilewhile

action action ::loop loop whilewhile

action action ::loop loop whilewhile

Page 270: Introduzione all'uso del computer

270*

loop loop forfor con la stessa sintassi del C con la stessa sintassi del Cloop loop forfor con la stessa sintassi del C con la stessa sintassi del C

# esempio 1 for (x = 1; x<=NF; x++) { print $x }…# esempio 2 for (x in test;) {print x, test[x] }…# esempio 3for (x = 1; x<=NF; x++) { if( $x == “halt”) break }...# esempio 4for (x = 1; x<=NF; x++) { if( $x == “end”) continue }

print del print del contenutocontenuto della variabile della variabilexx (cioe’ (cioe’ $ $, , $2$2, , $3$3 .. etc.) .. etc.)

print del print del contenutocontenuto della variabile della variabilexx (cioe’ (cioe’ $ $, , $2$2, , $3$3 .. etc.) .. etc.)

loop loop forfor con l’uso dell’operatore con l’uso dell’operatore ininloop loop forfor con l’uso dell’operatore con l’uso dell’operatore inin

salta fuori dal loopsalta fuori dal loope continua con glie continua con gli

statements seguentistatements seguenti

salta fuori dal loopsalta fuori dal loope continua con glie continua con gli

statements seguentistatements seguenti

forza l’esecuzione del prossimo ciclo del loop (aforza l’esecuzione del prossimo ciclo del loop (apartire dall’inizio del loop)partire dall’inizio del loop)

abbandonando l’esecuzione di quello correnteabbandonando l’esecuzione di quello corrente

forza l’esecuzione del prossimo ciclo del loop (aforza l’esecuzione del prossimo ciclo del loop (apartire dall’inizio del loop)partire dall’inizio del loop)

abbandonando l’esecuzione di quello correnteabbandonando l’esecuzione di quello corrente

Page 271: Introduzione all'uso del computer

271*

# esempio 1 for (x = 1; x<=NF; x++) { print $x }…# esempio 2 for (x in test;) {print x, test[x] }…# esempio 3for (x = 1; x<=NF; x++) { if( $x == “halt”) break }...# esempio 4for (x = 1; x<=NF; x++) { if( $x == “end”) continue } …# esempio 5for (x = 1; x<=NF; x++) { incr += 1 ; if (incr > 100) exit }...# esempio 6{ for (x = 1; x<=NF; x++) if( NF < 4) getline }...# esempio 7{ for (x = 1; x<=NF; x++) if( NF == 1) next }

salta fuori dal loop e va direttamentesalta fuori dal loop e va direttamentead ad ENDEND oppure, in mancanza di oppure, in mancanza di

quest’ultimo, esce dai comandi di quest’ultimo, esce dai comandi di awkawk

salta fuori dal loop e va direttamentesalta fuori dal loop e va direttamentead ad ENDEND oppure, in mancanza di oppure, in mancanza di

quest’ultimo, esce dai comandi di quest’ultimo, esce dai comandi di awkawk

scartascarta il record corrente e il record corrente elegge il legge il prossimoprossimo record, record,

ricominciando il flusso di comandiricominciando il flusso di comandiDAL PRIMO comandoDAL PRIMO comando

scartascarta il record corrente e il record corrente elegge il legge il prossimoprossimo record, record,

ricominciando il flusso di comandiricominciando il flusso di comandiDAL PRIMO comandoDAL PRIMO comando

scartascarta il record corrente e il record corrente elegge il legge il prossimoprossimo record, record,ricominciando il flusso diricominciando il flusso di

comandi comandi dal puntodal puntoappena dopoappena dopo getline getline

scartascarta il record corrente e il record corrente elegge il legge il prossimoprossimo record, record,ricominciando il flusso diricominciando il flusso di

comandi comandi dal puntodal puntoappena dopoappena dopo getline getline

Page 272: Introduzione all'uso del computer

272*

SommarioSommarioSommarioSommario

Come esempio finale dell’uso di awk viene mostrato un awk script che controlla se uno

o piu’ files di testo hanno due parole adiacenti identiche (errore tipografico piuttostocomune) e riporta tale evenienza in output.

FILENAMEFILENAME :nome del file :nome del filecorrentemente esaminatocorrentemente esaminato

FILENAMEFILENAME :nome del file :nome del filecorrentemente esaminatocorrentemente esaminato

NFNFnumero di fieldsnumero di fields

nel recordnel recordcorrentementecorrentemente

esaminatoesaminato

NFNFnumero di fieldsnumero di fields

nel recordnel recordcorrentementecorrentemente

esaminatoesaminato

numero totalenumero totaledi linee di inputdi linee di inputesaminate finoraesaminate finora

numero totalenumero totaledi linee di inputdi linee di inputesaminate finoraesaminate finora

Page 273: Introduzione all'uso del computer

273*