Sei sulla pagina 1di 40

Breve introduzione a Linux (e dintorni...

)
Luca Baldini, INFN - Pisa versione 1.1 23 dicembre 2003

Indice
Introduzione Indice delle versioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Login e Logout: la shell 1.1 Linux . . . . . . . . . . . . 1.2 Il Login . . . . . . . . . . . 1.3 La shell ed i comandi Linux 1.4 Il Logout . . . . . . . . . . 2 Il lesystem Linux 2.1 I le Linux . . . . . . 2.2 Navigare nel lesystem 2.2.1 pwd . . . . . . 2.2.2 ls . . . . . . . . 2.2.3 cd . . . . . . . 2.3 Modicare il lesystem 2.3.1 mkdir . . . . . 2.3.2 rmdir . . . . . 2.3.3 rm . . . . . . . 2.3.4 cp . . . . . . . 2.3.5 mv . . . . . . . 2.3.6 chmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 4 4 5 5 6 7 7 8 8 8 9 10 10 11 11 12 12 12 14 14 14 14 15 15 15 16 16 16 17 17 17 17

3 I le di testo 3.1 Visualizzare i le . . . . 3.1.1 more . . . . . . . 3.1.2 less . . . . . . . . 3.1.3 head . . . . . . . 3.1.4 tail . . . . . . . . 3.2 Modicare i le: emacs . 4 Qualcosa di pi` utile u 4.1 I processi . . . . . 4.1.1 ps . . . . . 4.1.2 top . . . . . 4.1.3 kill . . . . . 4.2 La stampa . . . . . 4.2.1 lpr . . . . . . . . . . . . . . . . . . . . . . .

4.3

4.4

4.5

4.6 5 Un 5.1 5.2 5.3 5.4 5.5 6 Un 6.1 6.2 6.3 6.4

4.2.2 lpq . . . . . . . . . . 4.2.3 lprm . . . . . . . . . Accesso alle periferiche . . . 4.3.1 mount . . . . . . . . 4.3.2 umount . . . . . . . Accesso al oppy disk . . . 4.4.1 mdir . . . . . . . . . 4.4.2 mcopy . . . . . . . . 4.4.3 mdel . . . . . . . . . Laccesso alle risorse di rete 4.5.1 ping . . . . . . . . . 4.5.2 telnet . . . . . . . . 4.5.3 ssh . . . . . . . . . . 4.5.4 ftp . . . . . . . . . . Il compilatore C++ . . . . 4.6.1 g++ . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

18 18 18 18 18 19 19 19 19 19 19 20 20 20 21 21 22 22 23 25 26 27 28 28 30 31 32

A word-processor avanzato: L TEX Dalla stesura alla stampa . . . . . . A Stesura del documento L TEX . . . . A X e la matematica . . . . . . . . L TE Inserire le gure . . . . . . . . . . . A Le funzioni avanzate di L TEX . . . .

semplice programma di plotting: Lanciare gnuplot . . . . . . . . . . . Visualizzare una serie di dati . . . . Formattazione dei graci . . . . . . . Fit dei dati . . . . . . . . . . . . . .

gnuplot . . . . . . . . . . . . . . . . . . . . . . . .

A Un esempio di t con Scilab 36 A.1 Minimo 2 nel caso lineare . . . . . . . . . . . . . . . . . . . . . 36 A.2 Implementare il t con Scilab . . . . . . . . . . . . . . . . . . . . 37 Bibliograa 39

Introduzione
Questo breve tutorial raccoglie un certo numero di informazioni (per la verit` a piuttosto superciali, bisogna dirlo) sul sistema operativo Linux e sui principali A pacchetti software, built in (come Emacs e L TEX) e no (come gnuplot), comunemente usati negli ambienti scientici. Sono tutte cose che il sico quadratico medio deve imparare, una volta nella vita; e allora... perch` non cominciare il e prima possibile? La scelta degli argomenti da toccare, ` bene notarlo, ` stata eseguita secondo e e un criterio minimale; nel senso che, giunto allultima pagina, il lettore non sapr` a A utilizzare Linux, non sapr` utilizzare Emacs e men che meno L TEXe gnuplot (a a meno che non sapesse gi` farlo sin dallinizio, ma questo ` un altro discorso...). a e Lidea ` che uno dovrebbe acquisire un certo numero di idee fondamentali in e modo da essere capace di andare avanti da solo, minimizzando in un certo senso il trauma dovuto allimpatto iniziale con questo mondo che per molti, probabilmente, potrebbe essere nuovo. Daltra parte la documentazione disponibile in rete ` talmente vasta e cos` facilmente reperibile, che c` solo limbarazzo della e e scelta. Buona fortuna!

Indice delle versioni


versione 1.1 Data: 22 dicembre 2003. Descrizione: Alcune piccole correzioni ortograche e sintattiche. Credits: R. Metere versione 1.0 Data: 21 febbraio 2003. Descrizione: versione iniziale. Credits: F. Angelini, B. Barsella, L. Martinelli.

Segnalare errori ed inesattezze a luca.baldini@pi.infn.it.

Capitolo 1

Login e Logout: la shell


Nel 1965 i laboratori della Bell Telephone (una divisione della AT&T) decisero di interrompere una collaborazione avviata con la General Electric ed il Project MAC del MIT per la scrittura di un sistema operativo che avrebbe dovuto chiamarsi Multics. Purtuttavia due programmatori, Ken Thompson e Dennis Ritchie, ritennero che fosse un peccato sprecare il lavoro fatto; i loro sforzi culminarono nella realizzazione di una prima versione del sistema che un altro ricercatore, Brian Kernighan (futuro inventore del linguaggio di programmazione C), decise di chiamare, in opposizione a Multix, Unix. Nel 1973 Unix, originariamente scritto in assembly language venne interamente tradotto in C; questa riscrittura, ` facile immaginarlo, aument` notevolmente la portae o bilit` del codice e segn` linizio della sua diusione. Alla ne degli anni 70 la a o AT&T forn` a basso costo le licenze del sistema operativo a diversi college ed universit` americane ed in pochi anni la popolarit` di Unix riusc` a superare i a a conni ristretti delle istituzioni accademiche; ovviamente col tempo le cose sono andate avanti ed oggi esistono svariate versioni commerciali del sistema, per le diverse piattaforme hardware. Linux ` un sistema operativo Unix a tutti gli eetti; ` una sorta di clone, e e riscritto da zero, di Unix. La cosa interessante ` che nessuna istituzione come merciale ` stata coinvolta nella sua redazione (ed in eetti assolutamente e e freeware); esso ` il risultato dello sforzo congiunto di migliaia di persone che, e in tutto il mondo, hanno dedicato (e continuano a dedicare) tempo e fatica per perfezionare ci` che era iniziato come progetto di esplorazione del chip 80386. o Pu` essere curioso ricordare che uno dei primi prodotti di Linus Torvalds o (lideatore e padre di Linux) fu un programma che, tramite due processi funzionanti in multitasking, doveva stampare alternativamente AAAA e BBBB. Ne ` e stata fatta di strada per arrivare al sistema operativo che conosciamo oggi! Un ultima cosa: nel seguito parleremo solamente di Linux, ma intendiamoci: probabilmente la maggior parte di quel che segue funzionerebbe altrettanto bene su un qualsiasi sistema Unix.

1.1

Linux

Linux ` un sistema operativo multi-utente e multi-tasking. Preciseremo il sene so di questa aermazione strada facendo; purtuttavia spendere due parole

al proposito ` probabilmente un buon punto di partenza. Multi-utenza sige nica che diversi utenti possono avere diversi dati, programmi ed impostazioni di sistema memorizzate separatamente sulla stessa macchina; la struttura del lesystem Linux ` basata, come vedremo, sui concetti di propriet` e permesso. e a Per certi versi ` ci` che accade nei sistemi operativi come Windows NT/2000 e e o simili; la dierenza radicale ` che Linux permette a pi utenti di accedere simule u taneamente al sistema... Avremo occasione di apprezzare, per lo meno in parte, le nuove possibilit` che tutto questo apre. Multi-tasking signica semplicemente a che pi` comandi possono essere eseguiti contemporaneamente. Anche di questo u ci occuperemo pi` in dettaglio tra breve. u Come tutti i sistemi Unix, Linux ` formato da un kernel e da programmi di e sistema, oltre ovviamente alle applicazioni propriamente dette, con cui lutente fa il lavoro vero e proprio. Il kernel costituisce il cuore del sistema operativo; avvia i processi e permette loro di operare contemporaneamente, assegna le risorse di sistema ai vari processi ed in denitiva fornisce tutti gli strumenti necessari ad implementare i servizi che normalmente si richiedono ad un sistema operativo; questa implementazione avviene attraverso chiamate di sistema. I programmi di sistema, ed a maggior ragione le applicazioni, girano sopra al kernel, in quella che si chiama modalit` utente. a

1.2

Il Login

Una macchina Linux deve sapere chi si trova di fronte prima di permettere laccesso al sistema. A tale scopo lutente ` tenuto a fornire il proprio username e e la propria password (che presumibilmente sono state fornite dallamministratore di sistema) per potersi loggare (cio` eseguire il Login) alla macchina. e Esistono varie schermate di Login, che possono essere grache o testuali a seconda delle impostazioni di sistema e della distribuzione di Linux utilizzata... Ma questo ` un altro discorso (per altro complicato) e ci porterebbe lontano dal e punto essenziale della questione, che di complicato non ha niente. Una sola raccomandazione: Linux (al contrario di DOS e dei sistemi Windows in generale, come probabilmente qualcuno sa) distingue maiuscole e minuscole (cio` ` case ee sensitive) per cui il nome utente, la password ed i comandi in generale devono essere digitati esattamente come sono!

1.3

La shell ed i comandi Linux

Una volta loggato sulla macchina, lutente pu` aprire una shell (se il sistema o non ` congurato per farlo automaticamente). La shell ` il luogo in cui si e e impartiscono i comandi Linux; ` per certi aspetti lequivalente del prompt di e DOS sulle macchine Windows, per chi ha un po di esperienza al proposito. Esistono svariati tipi di shell, che sostanzialmente dieriscono tra di loro per quanto riguarda il linguaggio di scripting ed alcune altre funzionalit` che proba abilmente lutente medio tipicamente non utilizza. Anche questo ` un discorso e che ci porterebbe molto lontano e non ` il caso di approfondirlo adesso. e Luso della shell ` semplicissimo e consiste essenzialmente nello scrivere un e comando Linux valido e nel premere il tasto di INVIO. Ogni comando pu` avere o delle opzioni (che sono precedute da un carattere - e ne determinano lesito) e

pu` accettare dei parametri; in sostanza la struttura tipica di un comando Linux o ` del tipo: e >comando -opzione argomento Sar` tutto pi` chiaro tra poco, quando vedremo alcuni esempi espliciti. Vale a u la pena di notare che Linux ha un eciente sistema di documentazione che pu` rivelarsi utilissimo quando non si ricorda con precisione la sintassi di un o comando o leetto di un opzione sul comando stesso. E suciente digitare dalla shell: >man comando per avere sul display tutta la documentazione disponibile (si torna alla shell semplicemente premendo q). Prima di andare avanti ` utile ricordare che ci sono alcuni modi per riprene dere il controllo della shell nel caso questo dovesse momentaneamente sfuggire (il che accade tipicamente quando si esegue un comando che si apetta linserimento di dati da parte dellutente oppure quando si avvia un programma la cui esecuzione impiega pi` tempo del previsto): u 1. CTRL + c Solitamente elimina ogni programma in esecuzione e riporta alla linea di comando. 2. CTRL + z Sospende il processo corrente mentre ` in esecuzione e riporta alla linea e di comando.

1.4

Il Logout

Il processo di Logout chiude tutti i le che sono (per qualche ragione) aperti e termina ogni programma mandato in esecuzione dallutente. E buona regola scollegarsi sempre, una volta che abbiamo nito di utilizzare il computer; questo permette agli altri utenti, eventualmente collegati da un terminale remoto, di utilizzare nel modo pi` eciente possibile le risorse di sistema. Per fare il logout u da una sessione testuale ` suciente digitare dalla shell: e >logout ed il sistema torna al prompt di login; un nuovo utente pu` collegarsi. Se la o sessione ` graca si pu` in generale avviare la procedura di logout (ed evene o tualmente quella di spegnimento della macchina) accedendo allapposito menu a tendina con il mouse.

Capitolo 2

Il lesystem Linux
A dierenza di ci` che accade nei sistemi operativi tipo Windows, in cui i vari o drive sono associati alle lettere A, B, C, D ecc., il lesystem di Linux ha ununica directory radice (che si chiama root e che si indica con il simbolo /). La directory root pu` contenere le ed altre directory e le directory dei livelli sottostanti o possono a loro volta fare altrettanto. La struttura sica dellhardware ` in e un certo senso nascosta allutente Linux: i drive appaiono semplicemente come sottodirectory della root (come dire che un hard disk non ` altro che una e directory...). Questa gestione del lesystem ha numerosi vantaggi che non ` il e caso di discutere qui. Ogni utente ha inoltre una home directory, che non ha niente di particolare a parte il fatto di essere quella in cui lutente stesso si trova immediatamente dopo il Login.

2.1

I le Linux

I le Linux hanno tre attributi: r, w ed x (che stanno per read, write ed execute); come dire che un le si pu` leggere, scrivere ed eseguire. O meglio che un o determinato utente pu` avere (o non avere) i privilegi necessari per leggere, o scrivere od eseguire un determinato le. Qualsiasi combinazione di questi tre attributi ` ammissibile per il sistema operativo, anche se non tutte sono cos` e sensate; Linux conda nella ragionevolezza dellutente e lo prende alla lettera... Ogni le Linux ha un proprietario (che ` un utente con un account valido e sulla macchina) ed ogni proprietario pu` appartenere ad un gruppo di utenti. o I permessi su ogni le sono settati su tre livelli: quello del proprietario del le, quello del gruppo a cui appartiene il proprietario e quello di tutti gli altri utenti del sistema; tanto per fare un esempio, ` possibile che un le sia leggibile, e scrivibile ed eseguibile dal proprietario, solamente leggibile dal gruppo del proprietario ed assolutamente inaccessibile a tutti gli altri. Vedremo tra poco come ` possibile visualizzare (ed eventualmente cambiare) i permessi relativi ad un e determinato le o ad una directory.

2.2

Navigare nel lesystem

Esiste un certo numero di comandi che sono dedicati alla navigazione nel lesystem e ne vedremo tra breve alcuni esempi; dovrebbero essere pi` o meno suu cienti per sopravvivere nel sistema, ma ` sempre importante ricordare che ogni e comando pu` avere un gran numero di opzioni che in generale ` utile conoscere o e per soddisfare in pieno le proprie esigenze (ed il comando man pu` essere o provvidenziale, a volte...).

2.2.1

pwd

E lacronimo di present work directory e restituisce sullo schermo il nome della directory corrente. E suciente digitare pwd per sapere dove siamo; ad esempio: >pwd /afs/pi.infn.it/user/lbaldini >

2.2.2

ls

Elenca semplicemente i le contenuti in una certa directory (pi` o meno lequivu alente di dir in DOS); se lutente non passa alcun argomento al comando, elenca i le nella directory corrente. Ad esempio: >ls Ciao.doc Temp ClusterAxes.eps > Cio` la directory contiene tre oggetti. A questo livello non siamo in grado di e dire se essi sono les o directory. Per far questo ` necessario invocare il comando e con lopzione -l: >ls -l total 5 -rw-rw-r-drwxrwxr-x -rw-rw-r->

1 2 1

lbaldini glast lbaldini glast lbaldini glast

36352 2048 21847

Dec 20 18:18 Ciao.doc Jul 7 2002 Temp Jul 24 2002 Cluster.ps

Adesso la soluzione si presenta molto pi` complicata; cerchiamo di chiarirla u brevemente. La prima riga dice quanti sono gli oggetti nella directory (in questo caso cinque...capiremo tra un attimo il motivo per cui ne sono elencati solamente 3). Le linee successive visualizzano alcuni dettagli sugli oggetti in questione. Il primo campo indica se si tratta di un le (-), di una directory (d) o di un link (l); di seguito compaiono i permessi per il proprietario, per il gruppo del proprietario e per lutente generico (r, w ed x indicano rispettivamente che lutente possiede il permesso di lettura, scrittura ed esecuzione, mentre il simbolo - indica che il corrispondente permesso ` disabilitato). Ad esempio -rw-rw-r e indica un le che il proprietario ed il suo gruppo possono leggere e modicare, 8

mentre tutti gli altri utenti possono solamente leggere. Invece Temp ` una e directory e cos` via... Il campo successivo nella linea indica il numero di hard link alloggetto in questione, ma per noi ` poco importante. Seguono dunque e il nome del proprietario (in questo caso lbaldini) e del gruppo (glast). Inne vediamo la dimensione delloggetto su disco, la data della sua ultima modica ed il nome; da notare che, nel caso delle directory, la dimensione non corrisponde allo spazio su disco occupato dal contenuto, ma a quello occupato dal le dati che controlla la directory stessa. In generale Linux non mostra allutente (a meno che esso non lo richieda esplicitamente) tutti i le contenuti in una directory. In particolare il semplice comando ls nasconde i le che cominciano con un punto (generalmente si tratta di le di congurazione). Per visualizzare tutti i le si pu` utilizzare o lopzione -a di ls: >ls -a . .. Ciao.doc Temp ClusterAxes.eps > Adesso compaiono anche gli oggetti . (che in Linux sta per directory corrente) e .. che viceversa indica la directory che nel lesystem si trova al livello immediatamente superiore rispetto a quella corrente. Notiamo che loggetto . esiste in tutte le directory e che .. esiste in tutte le directory fatta eccezione per la directory root (/), che si trova in assoluto al livello pi` alto nel lesystem. u Il comando ls pu` accettare un argomento, che indica la directory della quale o si vogliono elencare gli oggetti: >ls -a Temp . .. Luca.jpg > In questo caso ci dice che la directory Temp contiene (oltre ovviamente a . e ..) un solo le che si chiama Luca.jpg. Prima di andare avanti, un trucco utilissimo per risparmiare tempo: nei sistemi Linux il tasto TAB funziona da auto completion, cio` completa autoe maticamente i nomi di comandi od oggetti del lesystem, una volta che lutente ne abbia scritto una parte abbastanza lunga da rimuovere eventuali ambiguit`. a Provare per credere, ` pi` facile a dirsi che a farsi! e u

2.2.3

cd

Esattamente come in DOS, questo comando serve per cambiare directory; necessita, come argomento, del nome della directory di destinazione. Il percorso verso questultima pu` essere quello assoluto (cio` partendo da root) oppure o e quello relativo (cio` partendo dalla directory corrente). Lesempio seguente, che e unisce i pochi comandi visti sino ad adesso, dovrebbe chiarire le idee:

>pwd /afs/pi.infn.it/user/lbaldini >ls Ciao.doc Temp ClusterAxes.eps >cd Temp >ls Luca.jpg >cd . >ls Luca.jpg >cd .. >ls Ciao.doc Temp ClusterAxes.eps >cd /afs/pi.infn.it/user/lbaldini/Temp >ls Luca.jpg > Notiamo che il comando cd . non fa niente (essendo . la directory corrente), mentre cd .. porta nella directory immediatamente superiore nel lesystem. La documentazione di Linux contiene unesposizione esauriente di tutte le possibili opzioni del comando; per visualizzarla, al solito: >man cd (dopo di che barra spaziatrice o frecce per scorrere e q per tornare alla shell).

2.3

Modicare il lesystem

Ovviamente navigare non ` lunica cosa che si pu` fare col lesystem... Esistono e o comandi per creare, copiare, muovere le e cos` via. Al solito diamo unocchiata a quelli veramente indispensabili.

2.3.1

mkdir

Come si pu` intuire dal nome, crea una directory e richiede come argomento o il nome della directory da creare. Al solito il percorso pu` essere assoluto o o relativo; ovviamente se non si specica niente, il nuovo oggetto viene creato nella directory corrente. Esempio: >pwd /afs/pi.infn.it/user/lbaldini >ls Ciao.doc Temp ClusterAxes.eps >mkdir NewDirectory 10

>ls Ciao.doc Temp ClusterAxes.eps NewDirectory > Un consiglio: sotto Linux ` buona norma evitare gli spazi allinterno dei nomi e di le o directory!

2.3.2

rmdir

E il contrario del comando precedente e semplicemente rimuove una directory esistente, a patto che sia vuota: >ls Ciao.doc Temp ClusterAxes.eps NewDirectory >rmdir NewDirectory >ls Ciao.doc Temp ClusterAxes.eps > Come vedremo tra un attimo, per cancellare una directory non vuota ` necese sario usare il comando rm con lopzione -f.

2.3.3

rm

Rimuove il le che gli viene passato come argomento e la sintassi ` analoga a e quella di rmdir (solo che, ovviamente, accetta come parametro un le e non una directory). Ha alcune opzioni che forse vale la pena di conoscere: 1. -i il comando agisce in modo interattivo e chiede conferma prima di cancellare ogni le; caldamente consigliata quando si lavora a notte fonda! 2. -f il comando agisce in modo forzato senza tener conto dei permessi del proprietario del le. 3. -r il comando agisce in modo ricorsivo: con questa pu` accettare il nome o di una directory come argomento ed in tal caso cancella ricorsivamente tutto il contenuto della directory stessa. Un breve commento: il risultato del comando rm ` per ceri versi pi` irree u versibile di quanto accada su altri sistemi operativi, nel senso che recuperare un le cancellato per sbaglio pu` essere, sotto Linux, unimpresa veramente o disperata. Quando lutente esegue il comando, ci` che fa la macchina ` cano e cellare lindirizzo che identica la zona di memoria in cui i dati in questione sono sicamente contenuti; dopo di che il lesystem tende a rimodellarsi piuttosto velocemente ed ` piuttosto probabile che non occorra molto tempo prima e 11

che questa zona di memoria venga eettivamente riscritta. Se proprio dovesse capitarvi di cancellare dei dati essenziali il consiglio ` il seguente: smontare ime mediatamente il lesystem incriminato (impareremo che cosa vuol dire e come si fa), quindi rimontarlo in modalit` read only e sperare che qualche programa mino particolarmente intelligente possa aiutarvi. In ogni caso pu` essere buona o abitudine utilizzare rm in modo interattivo (con lopzione -i) e, cosa forse pi` u utile, evitare di lavorare no a notte fonda dopo una giornata faticosa ed una cena pesante!

2.3.4

cp

E lanalogo di copy in DOS e serve per copiare un le di partenza (che viene passato come primo argomento) in un le o in una directory di destinazione (che costituisce viceversa il secondo argomento). Ad esempio il comando: >cp *.doc Temp > copia tutti i le il cui nome termina per .doc nella directory Temp. Il simbolo * ` e un carattere speciale per Linux ed ` spesso molto utile per esguire le operazioni e desiderate nel modo pi` rapido possibile. Daltra parte: u >cp Ciao.doc Salve.doc > crea una copia del le Ciao.doc nella directory corrente chiamandola Salve.doc.

2.3.5

mv

Serve per rinominare un le: >mv Ciao.doc Salve.doc > oppure per spostarlo in una directory di destinazione, se questultima viene specicata: >mv Ciao.doc Temp > Per inciso notiamo che, dopo il primo comando, il le Ciao.doc non esiste pi`! u

2.3.6

chmod

Serve essenzialmente per cambiare i permessi su un le ed ` spesso un comando e veramente indispensabile. Lutente deve passare al comando il livello del permesso che vuole cambiare (u = proprietario, g = gruppo, o = utente generico), loperazione da eseguire (+ = aggiungere permesso, - = togliere permesso), il tipo di permesso (r = lettura, w = scrittura, x = esecuzione) ed inne il nome del le su cui settare i nuovi permessi. E pi` semplice di quello che sembra; ad u esempio: >chmod u-w Cluster.eps > 12

toglie al proprietario i privilegi necessari per poter modicare il le Cluster.eps. Con il comando ls -l, che abbiamo gi` visto, ` possibile vericare facilmente il a e funzionamento di chmod.

13

Capitolo 3

I le di testo
Al di l` dei le di testo propriamente detti, molte applicazioni Linux (ed il a sistema stesso!) utilizzano le di congurazione di tipo testuale, per cui ` essene ziale avere strumenti per visualizzare (ed eventualmente modicare) gli oggetti di questo tipo.

3.1

Visualizzare i le

Linux ore un ampio set di comandi dedicati alla visualizzazione dei le di tipo testuale. Di seguito elenchiamo i principali; al solito le pagine man sono uno strumento utile per esplorare le svariate opzione che ognuno di questi comandi prevede.

3.1.1

more

Accetta come argomento un le e ne visualizza il contenuto sullo schermo; per esempio >more Cluster.eps visualizza il contenuto del le Cluster.eps. La barra spaziatrice fa avanzare di una pagina, mentre il tasto b riporta indietro di una pagina; si torna alla shell premendo il tasto q. Le pagine man dovrebbero illustrare lelenco completo dei comandi che si possono usare allinterno di more.

3.1.2

less

La sintassi ed il funzionamento sono essenzialmente identici a quelli di more: >less Cluster.eps La dierenza ` che dovrebbe essere pi` facile muoversi allinterno del documento e u (in particolare si possono usare le frecce direzionali...).

14

3.1.3

head

Visualizza le prime 10 righe (ma il numero pu` essere modicato utilizzando o lopportuna opzione) del le che gli viene passato come argomento. La sintassi ` la solita: e >head Cluster.eps E utile quando si vuole dare una sola occhiata ad un le.

3.1.4

tail

Al contrario del precedente visualizza le ultime righe di un le.

3.2

Modicare i le: emacs

La visualizzazione non ` certo lunica cosa di cui uno ha bisogno, lavorando con e i le di tipo testuale; emacs ` probabilmente leditor di testo pi` diuso tra gli e u utenti Linux, ormai. Descrivere, sia pur in modo sommario, le sterminate funzionalit` di emacs ci porterebbe lontano dal lo della discussione; daltra parte a il programma ha un ampio sistema di documentazione integrata che dovrebbe essere pi` che suciente per cavarsela in ogni situazione. Essenzialmente si pu` u o aprire un le con emacs semplicemente digitando dalla shell: >emacs Cluster.eps Fatto questo, emacs funziona pi` o meno come un qualsiasi editor di testo; da u notare che ore un grandissimo numero di comandi da tastiera (ad esempio CTRL + x CTRL + s per salvare...) che rendono veramente veloce ed eciente (per lo meno per gli esperti) lediting. Al solito provare a lavorare con emacs ` e il miglior modo per imparare ad usarlo.

15

Capitolo 4

Qualcosa di pi` utile u


E chiaro che dare unocchiata ad un le di testo ed eventualmente modicarlo non ` granch`... Ci sono molte altre cose che, presumibilmente, un utente e e vorrebbe essere in grado di fare (stampare, gestire le periferiche, accedere alla rete, ecc. ecc.); ne vedremo (molto supercialmente) alcune.

4.1

I processi

Ogni comando Linux crea un processo che il sistema operativo esegue no a quando non nisce o viene interrotto. Il punto fondamentale ` che, essendo e multitasking, Linux permette di mandare in esecuzione pi` di un processo conu temporaneamente; permette inoltre di mandare in esecuzione processi in background (o, come si dice, dietro le quinte) semplicemente facendo seguire un & al comando. Un esempio pu` essere utile per chiarire le idee. Supponiamo di voler aprire o con emacs il le Cluster.eps; possiamo farlo normalmente: >emacs Cluster.eps oppure possiamo farlo in background: >emacs Cluster.eps & [2] 12563 > La dierenza, come si vede, ` che nel secondo caso il sistema torna alla linea e di comando e la shell ` di nuovo utilizzabile, mentre nel primo la shell ` inue e tilizzabile no a che non chiudiamo emacs (possiamo sempre aprire una nuova shell...). Per completezza, i numeri [2] 12563 identicano il processo allinterno del sistema operativo. Linux ore un set di comandi per monitorare i processi ed eventualmente intervenire su di essi. Al solito vedremo i fondamentali.

4.1.1

ps

Visualizza lelenco dei processi in memoria dei quali lutente ` proprietario. Non e servono argomenti e la sintassi ` banale: e 16

>ps Il risultato ` una lista dei processi con il proprio numero di identicazione, lo e stato (Running, Stopped, ecc.) ed altre informazioni per le quali si rimanda alle pagine man.

4.1.2

top

Visualizza un elenco, aggiornato continuamente, di tutti i processi in memoria, fornendo inoltre alcune informazioni importanti come il numero di identicazione, il proprietario, il tempo di esecuzione, la priorit`, ecc. Anche qui non a servono argomenti >top e le pagine man riportano tutte le opzioni valide. Si torna alla shell digitando CTRL + c.

4.1.3

kill

Capita a volte, per qualche ragione, di voler interrompere forzatamente un processo; in tal caso si utilizza il comando kill, che accetta come parametro il numero di identicazione del processo da eliminare. Ad esempio per uccidere il processo avviato quando prima avevamo lanciato emacs in background dovremmo fare: >kill -9 12563 [2]+ Killed > emacs

Si rimanda alle pagine man per il signicato dellopzione -9.

4.2

La stampa

Linstallazione, la conguarzione e la gestione delle stampanti sono punti non proprio banali di cui generalmente si occupa lamministratore di sistema. Allutente ` suciente conoscere pochi comandi, che fortunatamente sono gli stessi e in tutti i casi (stampante locale o stampante condivisa in rete).

4.2.1

lpr

Permette di stampare un le e richiede come argomanti (nellordine) il nome della stampante ed il nome del le da stampare. Supponiamo ad esempio di avere una stampante postscript che si chiama laser00 e di voler stampare il solito Cluster.eps. La sintassi `: e >lpr -P laser00 Cluster.eps > in cui lopzione -P indica che stiamo utilizzando una stampante di tipo postscript.

17

4.2.2

lpq

Accetta come parametro il nome di una stampante e mostra i processi nella coda di stampa per la stampante in questione. Esempio: >lpq -P laser00

4.2.3

lprm

Permette di rimuovere un processo dalla coda di stampa, nel caso ve ne sia bisogno; supponiamo di voler eliminare il processo di stampa 123 (il numero di identicazione ` fornito dal comando lpq): e >lprm -P laser00 123 >

4.3

Accesso alle periferiche

Abbiamo gi` detto che Linux non fa alcuna distinzione, dal punto di vista dela lutente che accede al lesystem, tra dispositivi (ad esempio hard disk) che sono sicamente diversi tra loro. Questo ` vero anche per le periferiche come cd rom e o oppy disk. Lunica cosa che lutente deve fare ` dire al sistema come accedere e a queste periferiche, dopo di che i dati in esse contenuti divengono disponibili nel lesystem esattamente come i le contenuti sullhard disk.

4.3.1

mount

Questo comando dice al sistema come accedere ad un disco o ad una periferica e come essa deve essere visualizzata allinterno del lesystem. Supponiamo per esempio di voler leggere il contenuto di un cd rom (che ` probabilemnte una e delle operazioni pi` comuni che lutente medio esegue). I comandi u >mount /dev/cdrom >cd /dev/cdrom > dovrebbero essere sucienti per montare il dispositivo e spostarsi nella directory corrispondente del lesystem. A questo punto il contenuto del cd rom ` disponie bile nella directory stessa di modo che si possono eseguire senza particolari problemi tutte le operazioni che gi` conosciamo. a

4.3.2

umount

Non ` il caso di preoccuparsi se non si riesce pi` ad aprire il drive del cd rom! e u Probabilmente dipende dal fatto che non si ` fatto correttamente lumount del e dispositivo. E suciente digitare: >umount /dev/cdrom > per poter riprendere il controllo della situazione ed estrarre sicamente il disco.

18

4.4

Accesso al oppy disk

bench si possa accedere al oppy con i comandi mount e umount, esiste sotto e Linux una serie di utility ispirate ai comandi DOS che sono spesso pi` pratiche u da utilizzare.

4.4.1

mdir

Visualizza il contenuto del oppy (che, come generalmente accade sotto Windows, viene identicato con a:). La sintassi tipo `: e >mdir a:

4.4.2

mcopy

Permette di copiare dei le da e su oppy. Un paio di esempi per chiarire... >mcopy Cluster.eps a: > copia il le Cluster.eps (che si trova nella directory corrente) sul oppy, mentre >mcopy a:/Cluster.eps ./Temp > copia il le Cluster.eps (sul oppy) nella directory Temp, che ` contenuta nella e directory corrente (./).

4.4.3

mdel

Permette di rimuovere le dal oppy. Esempio: >mdel a:/Cluster.eps >

4.5

Laccesso alle risorse di rete

Il fatto che Linux consenta a pi` utenti di lavorare contemporaneamente su una u stessa macchina da terminali remoti rende laccesso alle risorse di rete un capitolo estremamente importante del bagaglio di conoscenze richiesto allutente. Dal proprio pc ` possibile accedere al lesystem di unaltra macchina, lanciare e processi su di essa e copiare le e directory dal lesystem in questione. Vediamo alcuni comandi essenziali.

4.5.1

ping

Consente di vericare che la propria macchina sia in grado di dialogare con un altro pc Linux. Supponiamo di voler vericare la connessione con la macchina galileo; ` suciente digitare: e >ping galileo ed il nostro pc cercher` di trasmettere e ricevere indietro alcuni byte di test, a vericando lo stato della connessione. 19

4.5.2

telnet

E un semplice programma di terminale che consente di aprire sessioni di lavoro su una macchina remota (occorre ovviamente possedere un account su quella macchina...). Digitando ad esempio: >telnet galileo si apre il prompt di login sulla macchina remota (in questo caso galileo) e vengono richiesti lo username e la password. Una volta loggato, lutente pu` agire o come se stesse sicamente lavorando sulla macchina remota (e quindi navigare nel lesystem, muovere e copiare le, eseguire programmi, ecc.).

4.5.3

ssh

Telnet non ` il massimo per la sicurezza... si tratta di un semplice protocollo e di connessione il cui punto di forza consiste nellessere disponibile su qualsiasi macchina Linux. In realt` quando ` possibile (il che dipende probabilmente dal a e tipo di installazione e dalla release utilizzata) ` consigliabile usare il comando e ssh, che ` lacronimo di secure shell. E molto probabile, addirittura, che la e macchina a cui state cercando di loggarvi riuti ogni tentativo di connessione, se non attraverso ssh... La sintassi ` quella usuale: e >ssh galileo Buona fortuna!

4.5.4

ftp

Si tratta di un protocollo che consente di connettersi ad un server e, oltre a navigare nel modo consueto allinterno del lesystem, permette di trasferire dati da una macchina allaltra attraverso i comandi put e get (o mput ed mget, che supportano il trasferimento multiplo). Per inciso notiamo che esiste anche la versione sicura di ftp che, nemmeno a farlo a posta, si chiama sftp (la s sta per secure) ed ` in un certo senso per ftp quello che ssh ` per telnet. Digitando: e e >ftp galileo ci connettiamo al server remoto (ovviamente fornendo username e password). A questo punto possiamo ad esempio copiare su di esso il nostro Cluster.eps: >mput Cluster.eps > oppure copiare indietro il le nella directory Temp: >mget Cluster.eps ./Temp > Una precauzione: per evitare che il le si corrompa nel trasferimento pu` essere o a volte necessario digitare: >set bin > 20

4.6

Il compilatore C++

Ogni sistema Linux include un compilatore C++ integrato, il che rende particolarmente facile la programmazione in C++ nelle macchine con questo sistema operativo (se vogliamo proprio dirla tutta, Linux ore anche un compilatore C, che si chiama gcc, ed un ottimo compilatore Fortran, il g77). E utile spendere due parole al proposito, anche per chi non ha mai programmato in C++ (o per chi non ha mai programmato tout court). In generale la realizzazione di un programma (funzionante!) si compone di tre operazioni: 1. Scrittura del codice sorgente (in C++ o in qualsiasi altro linguaggio di programmazione). 2. Compilazione, cio` traduzione del codice sorgente in un insieme di istruzioni e interpretabili dalla macchina (che costituiscono il cosiddetto eseguibile). Il programma che esegue questa traduzione prende il nome di compilatore. 3. Esecuzione delleseguibile.

4.6.1

g++

Il comando g++ compila il programma che lutente passa come parametro e crea un eseguibile che di default ha il nome di a.out. Linsieme di comandi riportato di seguito compila il le HelloWorld.cxx e lancia il corrispondente eseguibile, che non fa altro che stampare sullo schermo la stringa Hello world!. >ls HelloWorld.cxx >g++ HelloWorld.cxx >ls HelloWorld.cxx a.out >./a.out Hello world! > Notiamo che il comando ./a.out ` quello che lancia leseguibile. e

21

Capitolo 5

Un word-processor A avanzato: L TEX


A Sulla maggior parte dei sistemi Linux ` disponibile L TEX, un programma per e la formattazione di documenti di testo molto potente che si ` guadagnato negli e anni una grossa popolarit` allinterno della comunit` scientica e trai sici in a a particolare. Come tutte le applicazioni ha i suoi pregi ed i suoi difetti; di sicuro ore alcune funzionalit` che rendono la realizzazione di alcuni tipi di a documenti (ad esempio quelli contenenti formule matematiche) particolarmente semplice (probabilmente su questo semplice non tutti sono daccordo) e veloce. Per quel poco che pu` contare, queste brevi dispense sono state redatte utilizo A A zando L TEX (pi` precisamente utilizzando L TEX sotto Windows! Solamente u A per notare che L TEX ed Emacs, come molte altre applicazioni, esistono anche per Windows e possono essere scaricate gratuitamente dalla rete. Ma questo ` e un altro discorso...).

5.1

Dalla stesura alla stampa

A L TEX non ` un programma di formattazione del tipo WYSIWYG (what you e see is what you get); il che pu` renderlo poco digeribile, per lo meno a prima o vista, a chi ` abituato ad utilizzare word-processor come Microsoft Word, tanto e per citare quello che probabilmente ` in assoluto il pi` diuso. In un certo e u A senso ` pi` vicino ad un linguaggio di programmazione. Un documento L TEX e u A X validi; il tutto va poi ` composto da un misto di testo e di comandi L TE e compilato, dopo di che pu` essere visualizzato e convertito in postscipt, che o sotto Linux ` il formato principe per la stampa. In sostanza la realizzazione e del prodotto nale passa attraverso le seguanti operazioni ed i seguenti comandi Linux (che ovviamente si danno dalla shell...): A 1. Stesura del documento L TEX. E il documento che contiene, come abbiamo gi` detto, il testo ed i comandi ed ha tipicamente lestensione .tex; a vedremo in seguito alcuni esempi. Tipicamente lutente medio utilizza A Emacs (che supporta alcune funzionalit` speciali per L TEX) per questa a operazione, ma ovviamente qualsiasi altro editor di testo va benissimo!

22

A 2. Compilazione. Si esegue dalla shell di Linux attraverso il comando L TEX. Ad esempio per compilare il documento Tutorial.tex ` suciente digitare: e

>latex Tutorial.tex Con questo comando il programma crea un certo numero di le (Tutorial.aux, Tutorial.log e Tutorial.dvi) di varia natura. O meglio: dovrebbe farlo, a meno che non ci siano errori di sintassi allinterno del documento. Nel qual caso, non abbiate paura, ve ne accorgerete, poich` il compilae tore si lamenter` (ed allora, al solito CTRL + Z per tornare alla shell, a unocchiata al le sorgente pr trovare lerrore e poi si prova di nuovo!). Il le .dvi contiene il documento compilato in una forma che permette la visualizzazione attraverso lapposito programma xdvi. 3. Visualizzazione. xdvi consente di vedere quale sar` la forma nale del a documento. Il comando `: e >xdvi Tutorial.dvi 4. Conversione in formato postscript. Il comando >dvips -o Tutorial.dvi crea il le postscript contenente il documento pronto per la stampa. E possibile visualizzarlo con una applicazione che supporti il formato (ad esempio con ghostview digitando gv Tutorial.ps) e stamparlo con il comando usuale.

5.2

A Stesura del documento L TEX

Adesso non ci resta che imparare quali sono in eetti le regole per la stesura di A un documento L TEX. Certamente in poche righe non ` possibile descrivere in e modo esauriente le sterminate possibilit` che il pacchetto ore; qui si vogliono a solamente introdurre alcune tra le idee base, di modo che poi andare avanti (magari con lausilio di un buon manuale...) risulti meno ostico. Un buon modo per cominciare (pur se un tantino brutale, forse) ` dare unocchiata al e documento sorgente della primissima parte di questo tutorial: \documentclass[a4paper, 10pt]{report} \usepackage[latin1]{inputenc} \usepackage[dvips]{graphicx} \begin{document} \chapter{Login e Logout: la shell} Linux \e un sistema operativo {\itshape multi-utente} e {\itshape multi-tasking}. Preciseremo il senso di questa affermazione strada facendo; purtuttavia spendere 23

due parole al proposito \e probabilmente un buon punto di partenza. Multi-utenza significa che diversi utenti possono avere diversi dati, programmi ed impostazioni di sistema memorizzate separatamente sulla stessa macchina; la struttura del {\itshape filesystem} Linux \e basata, come vedremo, sui concetti di propriet\a e permesso. Per certi versi \e ci\o che accade nei sistemi operativi come Windows NT/2000 e simili; la differenza radicale \e che Linux permette a pi\u utenti di accedere simultaneamente al sistema... Avremo occasione di apprezzare, per lo meno in parte, le nuove possibilit\a che tutto questo apre. Multi-tasking significa semplicemente che pi\u comandi possono essere eseguiti contemporaneamente. Anche di questo ci occuperemo pi\u in dettaglio tra breve. \section{Il Login} Una macchina Linux deve sapere chi si trove di fronte prima di permettere laccesso al sistema. \end{document} Il risultato, dopo la compilazione, ` sostanzialmente la prima parte di pagina 1 e del nostro tutorial. Come si vede, gi` queste poche righe contengono un sacco a di cose da capire; ma cominciamo dal principio. Il comando: \documentclass[a4paper, 10pt]{report} setta limpostazione della pagina (in questo caso un normale foglio A4), la dimensione del font per il testo generico (10 pt) ed il tipo di documento che ci A accingiamo a scrivere (report). Ogni comando L TEX, probabilmente lo avrete notato, ` preceduto da un backslash; questo permette al compilatore di capire e se lutente sta cercando di immettere del semplice testo oppure, appunto, un comando. I comandi, inoltre, possono accettare degli argomenti (inclusi tra parentesi grae, come in questo caso la classe del documento) e delle opzioni (che sono tra parentesi quadre, come il formato ed il font in questo caso). Il comando documentclass ` obbligatorio; la classe report (ma ce ne sono molte e altre: article, book, slides, letter...) prevede i comandi supplementari chapter, section e subsection, tra gli altri. Come si vede la grandezza dei font per il titoli dei capitoli, delle sezioni e delle sottosezioni avviene automaticamente, senza bisogno di dichiarare esplicitamente il cambiamento di corpo o do stile. Anche la numerazione avviene in modo completamente automatico, il che ` particolare mente comodo nel caso uno decida, per esempio, di aggiungere un capitolo nel bel mezzo del suo documento: non ` necessario rinumerare tutti i capitoli suce cessivi, basta ricompilare e tutto va a posto da solo. A questo livello possiamo tranquillamente disinteressarci delle righe: \usepackage[latin1]{inputenc} \usepackage[dvips]{graphicx} 24

che costituiscono il cosiddetto preambolo; il documento vero e proprio `, neme meno a dirlo, quello compreso tra i comandi begindocument ed enddocument (anchessi obbligatori!). Un confronto tra il le sorgente ed il risultato della compilazione dovrebbe rendere chiaro immediatamente quale sia la sintassi A L TEX per accentare le lettere, scrivere in corsivo, cominciare un nuovo paragrafo, dichiarare capitoli e sezioni, tanto per citare alcune delle operazioni che si eseguono con maggiore frequenza. Cos` come si vede che il compilatore non si cura aatto degli spazi e dei ritorni a capo... E chiaro che questo ` solamente e A linizio, ma come si dice... lappetito vien mangiando e la letteratura su L TEX ` cos` estesa e cos` facilmente reperibile in rete che andare avanti da soli non e dovrebbe essere aatto dicile, una volta aperta la strada!

5.3

A L TEX e la matematica

A Uno dei motivi principali per cui L TEX ha avuto un tale successo tra i sici ` probabilmente costituito dalla facilit` con cui ` possibile includere formule e a e matematiche arbitrariamente complesse, il che, come si pu` ben immaginare, o costituisce una notevole facilitazione nella redazione di documenti scientici. Per illustrare le potenzialit` che il pacchetto ore in questo senso, ` necesa e A sario introdurre il concetto di ambiente. Un ambiente L TEX ` una parte del e documento delimitata dai comandi:

\begin{ambiente} \end{ambiente} Lesempio pi` semplice ` quello dellambiente document che gi` conosciamo e u e a che si trova in ogni documento; ma ne esistono molti altri, ognuno con funzionalit` e comandi diversi! Cos` entro lambiente center il testo (come qualsiasi a altro oggetto) viene centrato, tabular ` usato per realizzare tabelle e enumerate e elenchi, verbatim non fa altro che dire al compilatore di ignorare tutti i comandi e di stampar fuori il testo cos` com` (vi siete chiesti come ho fatto a riprodurre e il sorgente del primo capitolo allinterno del documento senza che il compilatore si preoccupasse di tutti i comandi ivi contenuti?). A L TEX ore diversi ambienti esplicitamente dedicati alla matematica, con innumerevoli simboli e comandi specici. Tanto per fare un esempio il seguente frammento di codice: Actually, working out the calculation$^7$, one finds that the non relativistic, polarized photoemission cross section, in this case, is given by: \begin{equation} \frac{d\sigma}{d\Omega} = r_0^2 Z^5 \alpha^4 (\frac{m_e c^2}{h\nu})^{\frac{7}{2}} \frac{4 \sqrt{2} sin^2\theta cos^2\phi}{(1 - \beta cos\theta)^4} \end{equation} where $\theta$ is the polar angle between the direction of propagation $\mathbf{k}$ of the incoming photon and the direction of emission, $\phi$ the azimuthal angle measured starting from the direction of polarization of the radiation and $\beta$ is 25

the final velocity of the photoelectron in terms of the speed of light. fornisce, dopo la compilazione: Actually, working out the calculation7 , one nds that the non relativistic, polarized photoemission cross section, in this case, is given by: 2 7 4 d 2sin2 cos2 2 5 4 me c 2 = r0 Z ( ) (5.1) d h (1 cos)4 where is the polar angle between the direction of propagation k of the incoming photon and the direction of emission, the azimuthal angle measured starting from the direction of polarization of the radiation and is the nal velocity of the photoelectron in terms of the speed of light. Anche qui un confronto tra il documento sorgente ed il risultato della compilazione dovrebbe essere un esercizio molto istruttivo, oltre che uno stimolo allapprofondimento. Per inciso, notiamo che le equazioni, come i capitoli ed i paragra, vengono numerate automaticamente; ` uno dei vantaggi del non e vedere quello che si sta facendo...

5.4

Inserire le gure

A Chiaramente L TEX ore la possibilit` di inserire gure allinterno del testo, ana che se per la verit` accetta solamente il formato eps (encapsulated postscript) a e questa rigidit` ` talvolta piuttosto limitante. Per inciso notiamo che, sotto a e Linux, praticamente qualsiasi formato graco (jpg, tif, gif...) si pu` facilmente o convertire in eps con il comando convert, di cui si rimanda alle pagine man. Per inserire una gura si utilizza lambiente gure ed ` necessario caricare preventivae mente lestensione graphicx (ecco spiegata la prima riga del nostro preambolo...). Per chiarire il tutto osserviamo il frammento:

\begin{figure} \begin{center} \begin{tabular}{c} \includegraphics[height=5.5cm]{./Cluster1376.eps} \includegraphics[height=5.5cm]{./Cluster52.eps} \end{tabular} \end{center} \caption[Samples] { Two real tracks collected in a run with 5.9 keV unpolarized radiation; the area of each hexagon is proportional to the charge inducted on the corresponding pixel of readout plane. The gas mixture used is Ne/DME 80/20 at 1 Atm; since Ne K-shell is 0.9 keV, photoelectron energy is in this case 5 keV. Note that most of this energy is released in the Bragg peak toward the end of the path.} \end{figure}

26

Hit Position

Hit Position

25

25

20

20

15

15

10

10

0 0

10

15

20

25

0 0

10

15

20

25

Figura 5.1: Two real tracks collected in a run with 5.9 keV unpolarized radiation; the area of each hexagon is proportional to the charge inducted on the corresponding pixel of readout plane. The gas mixture used is Ne/DME 80/20 at 1 Atm; since Ne K-shell is 0.9 keV, photoelectron energy is in this case 5 keV. Note that most of this energy is released in the Bragg peak toward the end of the path. che, dopo la compilazione, genera la gura 5.1 (notare che, anche in questo caso, la numerazione ` automatica!). e A Con la pratica noterete che L TEX tende a posizionare le gure (apparentemente!) un po dove pare a lui; in realt` esistono comandi specici, anche a se qui non ` il caso di entrare nel dettagio, che consentono di riacquistare un e minimo di controllo sul layout del documento nale. Del resto non ` che con e altri programmi di formattazione la situazione sia tanto meglio...

5.5

A Le funzioni avanzate di L TEX

A L TEX ore tutta una serie di funzioni avanzate che non abbiamo tempo di descrivere in dettaglio ma che costituiscono il vero punto di forza del programma. A Con L TEX ` semplicissimo inserire dei riferimenti ad equazioni o gure che si e aggiornano automaticamente ad ogni compilazione (di modo che non ` necese sario rinumerare 35 gure per il solo motivo di averne aggiunta una allinizio!). A Con L TEX ` un gioco da ragazzi generare un indice analitico; cos` come ` facile e e scrivere la bibliograa di un documento (ed avere, anche in questo caso, riferimenti sparsi per il testo che si aggiornano da soli). Il consiglio ` sempre lo e stesso: armarsi di un buon manuale e provare; spero che queste poche pagine via abbiano convinto che ne vale la pena.

27

Capitolo 6

Un semplice programma di plotting: gnuplot


Avere a disposizione (ed essere in grado di padroneggiare...) un programma eciente di visualizzazione ed analisi di dati ` una delle esigenze fondamentali e di chiunque si occupi di sica. Inutile ripetere anche qui che i prodotti a disposizione non si contano... E proprio il caso di dire che ce n` per tutti i gusti e (oltre che per tutte le piattaforme hardware e per tutti i sistemi operativi). I sici delle alte energie, tanto per fare un esempio, tendono in genere ad essere molto aezionati a due pacchetti, paw e root, sviluppati al CERN (dalla cui pagina web possono essere scaricati gratuitamente) e dotati ampie potenzialit` a grache e computazionali; ma di nuovo: non ` che una questione di gusti. e Tipicamente i software che si gestiscono da linea di comando sono pi` indiu cati, per le applicazioni avanzate, rispetto a quelli che lutente pu` comandare o completamente a colpi di mouse da uninterfaccia graca; questo perch essi e consentono in modo semplice di realizzare dei piccoli programmi (quelli che in gergo si chiamano macro utili quando si desideri eseguire operazioni di routine di una certa complessit` (come ad esempio potrebbe essere: leggere un a le di dati, istogrammare certe serie di numeri ivi contenute e ttare il tutto con una funzione denita dallutente). Intendiamoci: non ` che i programmi e tipici windows-based (primo tra tutti Excel) non orano questa possibilit`; solo a che un approccio di questo tipo ` molto pi` diretto ed immediato nei pacchetti e u programmabili da linea di comando (basta mettere insieme un certo numero di comandi in un le opportuno, lanciarlo ed il gioco ` fatto!). e

6.1

Lanciare gnuplot

Su di un sistema Linux ` suciente digitare il comando gnuplot per lanciare e il programma (a patto che sia installato, intendiamoci!); cos` facendo lutente viene a trovarsi allinterno del prompt da cui ` in grado di digitare i comandi. e Il tutto dovrebbe apparire (pi` o meno!) cos` u : >gnuplot G N U P L O T 28

1 sin(x)/x

0.8

0.6

0.4

0.2

-0.2

-0.4 -10

-5

10

Figura 6.1: Graco della funxione gnuplot.

sinx x ,

ottenuto utilizzando il comando plot di

Version 3.7 patchlevel 3 last modified Thu Dec 12 13:00:00 GMT 2002 ... gnuplot> Al solito cominciamo dallinizio: il comando gnuplot>help gnuplot> visualizza le pagine di aiuto on-line, che costituiscono sempre un ottimo punto di partenza (per altro sono abbastanza ben scritte, meritano unocchiatina!). A parte questo, probabilmente, la cosa pi` semplice che lutente possa fare ` usare u e il comando plot per visualizzare landamento di una funzione; una cosa del tipo: gnuplot>plot sin(x)/x gnuplot> dovrebbe essere suciente a visualizzare un oggetto in qualche modo rassomigliante alla gura 6.1. Notiamo, per inciso, che gnuplot ` in generale capace di plottare e pi` o meno qualsiasi espressione matematica valida in C, FORTRAN, Pascal u o BASIC (per esempio i le espressioni sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), erf(x), exp(x), log(x), log10(x), sqrt(x) non dovrebbero aver bisogno di alcun commento). 29

50 LeggeOraria.txt using 1:2 45

40

35

30

25

20

15

10 5 10 15 20 25 30

Figura 6.2: Visualizzazione, mediante gnuplot, dei dati contenuti nel le LeggeOraria.txt.

6.2

Visualizzare una serie di dati

Gnuplot ` capace di visualizzare in modo molto semplice i dati contenuti in un e le, purch` organizzati per colonne e separati con spazi o TAB. Supponiamo ad e esempio di avere un le di testo (nominato LeggeOraria.txt) del tipo: # File LeggeOraria.dat: contiene la posizione x di una massa # puntiforme al variare del tempo. # Notare che gnuplot ignora automaticamente le linee che # cominciano con un carattere #, di modo che lutente puo # aggiungere commenti a suo piacimento. # # Tempo (sec) Posizione (cm) Errore (cm) 5 10.1 2.0 10 17.8 1.5 15 26.6 1.5 20 32.8 2.0 25 40.2 2.5 30 47.4 2.0 Il comando: gnuplot>plot LeggeOraria.txt using 1:2 dovrebbe generare qualcosa di non troppo diverso dalla gura 6.2.

30

6.3

Formattazione dei graci

Il risultato, ammettiamolo, non si direbbe proprio esaltante, per lo meno dal punto di vista estetico. Uno vorrebbe essere in grado di visualizzare il titolo del graco, i nomi degli assi e cos` via; ovviamente gnuplot consente di fare tutto questo (e molto altro...). In particolare possiamo farlo, come abbiamo gi` detto, a scrivendo una piccola macro e lanciandola. Una macro dovrebbe apparire pi` o u meno come il le qui di seguito (che chiamiamo PlotMacro.txt): # PlotMacro.txt. # Breve script per plottare i dati contenuti nel file # LeggeOraria.txt. # Di nuovo: gnuplot ignora tutte le linee che iniziano # con il carattere #. # # Definizione del titolo. set title Legge oraria per una particella libera # Label per lasse delle x. set xlabel Tempo (sec) # Label per lasse delle y. set ylabel Posizione (cm) # Definizione del range per lasse delle x. set xrange [0: 40] # Definizione del range per lasse delle y. set yrange [0: 50] # Opzione per eliminare la legenda. set nokey # Comando di plot: plottiamo la colonna 2 contro la 1 # usando la 3 come colonna degli errori sulla y. plot LeggeOraria.txt using 1:2:3 with yerrorbars # Generazione del file .eps per la stampa. set out LeggeOrariaEdit.eps set terminal postscript replot # Ritorno al terminale usuale (loutput appare di nuovo # sullo schermo e non piu sul file). set terminal x11 La macro si lancia con il comando load: gnuplot>load PlotMacro.txt ed il risultato ` un graco come quello che appare in gura 6.3. Notiamo, per e inciso, che scrivere una macro ed eseguirla non ` aatto necessario; avremmo e potuto inserire tutti i comandi, uno dopo laltro, dal terminale ed il risultato sarebbe stato esattamente lo stesso. Cos` come non sono necessari i commenti, del resto; una macro del tipo: set set set set title Legge oraria per una particella libera xlabel Tempo (sec) ylabel Posizione (cm) xrange [0: 40] 31

Legge oraria per una particella libera 50 45 40 35 Posizione (cm) 30 25 20 15 10 5 0 0 5 10 15 20 Tempo (sec) 25 30 35 40

Figura 6.3: Visualizzazione, mediante gnuplot, dei dati contenuti nel le LeggeOraria.txt, dopo la formattazione. set yrange [0: 50] set nokey plot LeggeOraria.txt using 1:2:3 with yerrorbars set out LeggeOrariaEdit.eps set terminal postscript replot set terminal x11 sarebbe andata pi` che bene. Inutile notare che quelli mostrati non costituiscono u che una piccola parte dei comandi disponibili dentro gnuplot; al solito: in rete si trovano con estrema facilit` manuali aggiornati e dettagliati del pacchetto e a queste poche pagine non possono certo pretendere di sostituirli!

6.4

Fit dei dati

Gnuplot non ` solamente un programma di visualizzazione di dati, ma possiede e anche alcune funzionalit` di analisi ed in particolare ` in grado di ttare una a e serie di dati con una generica funzione denita dallutente. La macro seguente dovrebbe risultare chiarissima, ormai: # FitMacro.txt. # Breve script per plottare i dati contenuti nel file # LeggeOraria.txt e fittarli con una retta. # 32

# Definizione del titolo. set title Legge oraria per una particella libera # Label per lasse delle x. set xlabel Tempo (sec) # Label per lasse delle y. set ylabel Posizione (cm) # Definizione del range per lasse delle x. set xrange [0: 40] # Definizione del range per lasse delle y. set yrange [0: 50] # Opzione per eliminare la legenda. set nokey # # Definizione della funzione di fit (retta). f(x) = a + b*x # Stime iniziali dei parametri del fit. a = 1 b = 1 # Esecuzione del fit. fit f(x) LeggeOraria.txt using 1:2:3 via a, b # # Comando di plot: plottiamo la colonna 2 contro la 1 # usando la 3 come colonna degli errori sulla y. # Plottiamo anche la funzione di fit. plot LeggeOraria.txt using 1:2:3 with yerrorbars, a + b*x # Generazione del file .eps per la stampa. set out LeggeOrariaFit.eps set terminal postscript replot # Ritorno al terminale usuale (loutput appare di nuovo # sullo schermo e non piu sul file. set terminal x11 Il risultato `, come uno pu` aspettarsi, un graco simile a quello riportato e o in gura 6.4, oltre ad una serie di messaggi che forniscono informazioni sulla convergenza del t e sulla stima nale dei parametri. Il programma dovrebbe fornire anche il valore del 2 diviso per il numero di gradi di libert` (ChiSquare a / d.o.f), che permette di valutare in modo immediato la bont` del t stesso; il a tutto, tra laltro , viene anche memorizzato su di un le t.log che appare pi` o u meno cos` : *********************************************************** Wed Feb 12 09:45:22 2003

FIT:

data read from LeggeOraria.txt using 1:2:3 #datapoints = 6 function used for fitting: f(x) fitted parameters initialized with current variable values

33

Legge oraria per una particella libera 50 45 40 35 Posizione (cm) 30 25 20 15 10 5 0 0 5 10 15 20 Tempo (sec) 25 30 35 40

Figura 6.4: Visualizzazione, mediante gnuplot, dei dati contenuti nel le LeggeOraria.txt, dopo la formattazione ed il t con un polinomio di grado 1.

Iteration 0 WSSR : 209.004 delta(WSSR) : 0 lambda : 6.93718

delta(WSSR)/WSSR : 0 limit for stopping : 1e-05

initial set of free parameter values a b = 1 = 1

After 5 iterations the fit converged. final sum of squares of residuals : 0.686015 rel. change during last iteration : -2.87956e-12 degrees of freedom (ndf) : 4 rms of residuals (stdfit) = sqrt(WSSR/ndf) : 0.41413 variance of residuals (reduced chisquare) = WSSR/ndf : 0.171504 Final set of parameters ======================= a b = 3.25533 = 1.48589 34 Asymptotic Standard Error ========================== +/- 0.698 +/- 0.03902 (21.44%) (2.626%)

correlation matrix of the fit parameters: a b 1.000 -0.897 1.000

a b

35

Appendice A

Un esempio di t con Scilab


Gnuplot utilizza una variante del metodo di minimo 2 per eseguire i t. Il procedimento in questione ` di tipo iterativo: si parte da una stima iniziale e dei parametri (fornita dallutente) e si cambiano questi ultimi no a che il 2 non converge ad un minimo. Questo ` il modo in cui, in genere, funzionano i e pacchetti di analisi dati per eettuare dei t. In realt`, per lo meno nei casi pi` a u semplici, non ` aatto complicato scrivere dei piccoli programmi che eseguano e dei t; e provare a farlo, una volta nella vita, pu` sicuramente contribuire ad o eliminare quellaura di sacralit` con cui lutente medio tende ad osservare certi a software complicati... In fondo il fatto che altre persone (magari molto pi` u esperte di noi nel campo) abbiano scritto dei programmi che noi utilizziamo non signica che non dobbiamo avere idea di cosa questi programmi stiano facendo!

A.1

Minimo 2 nel caso lineare

Supponiamo di avere una serie di dati sperimentali (per esempio quelli contenuti nel nostro solito le LeggeOraria.txt) e di volerli ttare con la funzione pi u semplice in assoluto: f (x) = ax (A.1) (abbiamo scelto una funzione puramente lineare, ` bene notarlo, solamente per e semplicit`; in generale azzerare lintercetta non ` unoperazione lecita!) Al a e solito, nellipotesi che gli errori sulla x siano piccoli (attenzione al signicato di questa assunzione!) possiamo eseguire il t minimizzando la quantit`: a
N

2 =
i=0

(yi axi )2 (yi )2

(A.2)

Nel nostro caso lequazione da risolvere `: e 2 (yi axi )xi = 2 =0 a (yi )2 i=0
N

(A.3)

36

che conduce allequazione per a: a=


N yi xi i=0 (yi )2 N (xi )2 i=0 (yi )2

(A.4)

Notiamo, per inciso, che introducendo i vettori N-dimensionali: xN x1 x2 , , ..., ) y1 y2 yN y1 y2 yN w=( , , ..., ) y1 y2 yN v=( lequazione per a si pu` scrivere in forma compatta come: o a= vw vv (A.6) (A.5)

in cui il puntino sta ad indicare lusuale prodotto scalare tra vettori.

A.2

Implementare il t con Scilab

A questo punto eseguire il t ` una cosa semplice: basta prendere i dati ed e eseguire, nella giusta sequenza, i prodotti, le divisioni e le somme necessarie a calcolare a secondo lequazione scritta sopra. Una calcolatrice va benissimo, ma il tutto si pu` fare in modo pi` eciente (specialmente nel caso si abbia un gran o u numero di dati) scrivendo un piccolo programma. Anche qui: qualsiasi linguaggio di programmazione pu` servire egregiamente allo scopo; noi proveremo a o farlo con il software Scilab, che ore tutta una serie di funzioni utili per maneggiare matrici e vettori. Lo scopo del gioco dovrebbe essere quello di tirar fuori il numerino in modo trasparente (cio` avendo ben presente che cosa stiamo e facendo). Scilab si lancia dalla shell (udite, udite!) con il comando: >scilab La prima cosa che dobbiamo fare ` importare entro scilab la nostra matrice di e dati, che chiameremo M; il comando da utilizzare ` read: e scilab>[M] = read(LeggeOraria.txt, 6, 3) [M] = | 5 10.1 2.0 | | 10 17.8 1.5 | | 15 26.6 1.5 | | 20 32.8 2.0 | | 25 40.2 2.5 | | 30 47.4 2.0 | scilab> Essenzilmente questo signica: leggiamo il le LeggeOraria.txt ed estraiamo una matrice di 6 righe e 3 colonne che chiamiamo M e che da questo momento ` disponobile in memoria per eettuare le operazioni desiderate; ad ogni passo e Scilab dovrebbe stampare sullo schermo ci` che abbiamo appena fatto, che ` utile o e 37

per vericarne la correttezza. Una precisazione: Scilab non ama i commenti (le righe precedute da #, che invece non creavano problemi a gnuplot) per cui dobbiamo avere la precauzione di cancellarle dal le contenente i dati , prima di eseguire il comando. A questo punto dobbiamo estrarre dalla matrice i vettori che ci interessano, cio` quello delle x, quello delle y e quello degli errori sulla y. e Il modo per farlo (con ovvio signicato dei termini) `: e scilab>[x] = M(:, 1) [x] = | 5 | | 10 | | 15 | | 20 | | 25 | | 30 | scilab>[y] = M(:, 2) | 10.1 | | 17.8 | | 26.6 | | 32.8 | | 40.2 | | 47.4 | scilab>[dy] = M(:,3) | 2.0 | | 1.5 | | 1.5 | | 2.0 | | 2.5 | | 2.0 | scilab> Cio`: deniamo il vettore x come la prima colonna della matrice M, il vettore e y come la seconda colonna e dy come la terza colonna. Costruiamo quindi i vettori v e w deniti nel paragrafo precedente: scilab>v = x./dy scilab>w = y./dy scilab> (notare che loperatore ./ ` quello che consente, dentro Scilab, di eseguire la e divisione membro a membro di due vettori). Non ci resta che eseguire i prodotti scalari per calcolare a: scilab>(v*w)/(v*v) (lapostrofo indica il vettore trasposto, dopo di che il prodotto scalare si esegue con lusuale simbolo di moltiplicazione); Scilab dovrebbe visualizzare sullo schermo il valore del parametro cercato. Facile, no?

38

Bibliograa
[1] Linux: guida dellamministratore di sistema, Lars Wirzenius. ftp://ftp.pluto.linux.it/pub/pluto/ildp

[2] Linux: guida dellutente, Larry Greeneld. ftp://ftp.pluto.linux.it/pub/pluto/ildp

[3] GNU - Emacs manual http://www.gnu.org/manual/emacs/index.html

A [4] Impara L TEX! (...e mettilo da parte), Marc Baudoin.

ftp://ftp.pluto.linux.it/pub/pluto/ildp/misc/imparalatex

[5] GNUPLOT - A brief Manual and Tutorial http://www.duke.edu/~hpgavin/gnuplot.html

39