Leggi il diciottesimo capitolo

19. Unix


Segnalibro
  1. Che cos'è Unix?
  2. Che cos'è un "sistemista" o "amministratore" di un computer Unix?
  3. Cosa sono e a cosa servono esattamente un "login" e una "password"?
  4. Che cos'è l'"area" di un utente su una macchina Unix?
  5. Che cos'è una shell? Come funziona il sistema dei file dello Unix?
  6. Che cosa sono e come si modificano gli attributi di un file?
  7. Quali sono i principali comandi Unix?
  8. Che cos'è un "demone" Unix?
  9. Che cos'è X-Windows?
  10. Che cos'è il Perl?
  11. Posso creare un sito WWW nella mia area Unix?
  12. Come posso avere Unix sul mio PC?

Segnalibro 19.1. Che cos'è Unix?

Unix non è nè una ditta di computer, nè un programma, nè un singolo sistema operativo, ma piuttosto un nome che indica una famiglia di sistemi operativi di produttori diversi e progettati per computer diversi; questi sistemi sono tra loro non uguali, ma comunque simili per modalità di funzionamento e comandi implementati. Non esiste pertanto lo Unix, ma ogni utente si troverà a fare i conti con il proprio Unix, quello installato sulla macchina con cui lavora. Per questo motivo non è possibile dare indicazioni assolutamente generali, anche se ciò che si dirà nel seguito dovrebbe valere praticamente per qualsiasi sistema Unix.

Il tipico Unix è molto potente, molto sicuro, molto ben funzionante e molto complicato da usare. Dimenticatevi icone, mouse, eccetera: lo Unix è esclusivamente testuale e funziona a riga di comando, proprio come MS-DOS - anche se, successivamente, è stato introdotto X-Windows, che sta a Unix come Windows sta a MS-DOS, e permette di lavorare con un'interfaccia grafica. Del resto, Unix è nato nel 1972 (difatti, MS-DOS è una pallida copia di Unix).

Segnalibro Proprio perchè "Unix" vuol dire in realtà un grande numero di sistemi e di computer diversi, sappiate che lavorare con Unix vuol dire lavorare con il linguaggio C, il più diffuso linguaggio di programmazione al mondo, abitualmente utilizzato per la scrittura dei programmi comunemente utilizzati sui vari tipi di computer. Un programma scritto in un qualsiasi linguaggio deve essere compilato, utilizzando appunto un compilatore, per ottenere il file eseguibile, che può direttamente essere utilizzato. Mentre i programmi per MS-DOS vengono distribuiti direttamente sotto forma di file eseguibile, la cui compilazione è già stata effettuata dalla ditta produttrice, quando volete installare un programma sotto Unix tipicamente avete in mano i sorgenti del programma, scritti in linguaggio C; per poter usare il vostro programma dovrete compilarlo! Questo perchè, se si volessero distribuire i file eseguibili, bisognerebbe prevedere decine di versioni diverse per le versioni diverse di Unix usate comunemente; al contrario, il C è un linguaggio di programmazione sufficientemente standard. Comunque, tipicamente voi non dovrete installare niente: ci penserà il vostro sistemista.

Segnalibro Mentre i comuni PC, ossia personal computer, sono pensati per essere usati da un solo utente alla volta, le grosse macchine Unix - proprio perchè grosse, ossia molto potenti e molto costose - sono progettate per poter essere usate da più utenti contemporaneamente e per poter svolgere più compiti contemporaneamente (ossia sono multiuser e multitasking). Ogni comando dato da un utente genera un processo, ossia una serie di istruzioni da eseguire, che possono a loro volta "duplicarsi" e generare altri processi; il sistema operativo divide le risorse disponibili cercando di mandare avanti in parallelo tutti i processi esistenti, fino alla loro conclusione.

Segnalibro Ciascun utente, per utilizzare il computer, si serve di un terminale, ossia di una unità che è composta essenzialmente da una tastiera, un monitor e quel poco di elettronica necessaria per trasmettere i dati dalla tastiera al computer centrale e da esso al monitor. Non è quindi necessario che il terminale sia un vero e proprio computer, anche se spesso si usa un PC con un programma di Telnet. Difatti, Telnet è sostanzialmente una emulazione di un terminale; solitamente il terminale emulato è di tipo VT52 oppure VT100, i due standard di terminali più diffusi. Mentre voi state lavorando, comunque, ci sono solitamente altre dieci o venti persone che stanno usando lo stesso computer, lavorando da terminali diversi!


Segnalibro 19.2. Che cos'è un "sistemista" o "amministratore" di un computer Unix?

Un computer Unix è molto grosso (tipicamente dispone di gigabyte di hard disk e decine di megabyte di RAM), è usato da molte persone ciascuna delle quali compie tipicamente numerosi pasticci, è difficile da usare ed è difficilissimo, per i motivi suddetti, da configurare e da riempire con i vari programmi; soprattutto, ogni versione di Unix ha caratteristiche proprie che vanno conosciute bene per poterla far funzionare. Pensate soltanto a cosa vuol dire dover compilare un programma delle dimensioni di molti megabyte, magari modificandolo per adattarlo alla macchina, o dover mantenere in ordine un hard disk da 8 gigabyte!

Pertanto, le macchine Unix sono affidate in gestione a uno o più sistemisti o amministratori (administrator), ossia a persone il cui unico scopo nella vita è far sì che il computer continui a funzionare, installare i nuovi programmi, risolvere i pasticci creati dagli utenti e sorvegliare su eventuali usi non autorizzati del computer. Sfortunatamente, talvolta i sistemisti sono più pasticcioni degli utenti...

Un sistemista Unix è spesso specializzato in una determinata versione di Unix; il suo login è per convenzione root, ed egli solo può fare una serie di operazioni, tra cui abilitare nuovi utenti, leggere qualsiasi file gli piaccia, eccetera. Per questi motivi, un sistemista deve anche essere una persona fidata, in quanto chiunque abbia un accesso di tipo root può sostanzialmente fare quel che gli pare e leggere tutto ciò che vuole, compresi dati dei singoli utenti tendenzialmente riservati.


Segnalibro 19.3. Cosa sono e a cosa servono esattamente un "login" e una "password"?

In generale, un login (nome utente) e una password (parola chiave) sono i due elementi richiesti da un computer su cui funziona un sistema operativo di tipo Unix (o anche altri) per identificare gli utenti autorizzati e permettere loro l'uso del computer. Poichè spesso su tali macchine sono conservati dati estremamente importanti e riservati, diventa di vitale importanza controllare chi può metterci le mani sopra, e da qui il sistema di login e password. In questo modo, inoltre, è possibile riconoscere tra loro i vari utenti ed attribuire ad ognuno un proprio livello di "autorizzazione all'uso" per ciascun file, tramite il sistema degli attributi. Infine, individuando con certezza chi sta usando il computer è possibile memorizzare tutte le sue azioni in un file, permettendo così di risalire al responsabile in caso di problemi. Per questo motivo è bene che non diffondiate la vostra password: voi siete responsabile delle azioni di chiunque usi il computer con il vostro login e la vostra password.

Le password sono conservate all'interno della macchina, in un file che può essere nascosto o anche visibile da tutti. Ovviamente, le password non sono scritte nel file in chiaro, ma sono criptate con un sistema che funziona in un verso solo; questo significa che si usa un algoritmo di cifratura non invertibile, ossia tale da rendere impossibile la decrittazione anche dal punto di vista teorico. Per controllare la password che inserite all'atto del collegamento, pertanto, il computer non decritta la password memorizzata nel file delle password, ma invece cripta con lo stesso algoritmo la parola che voi avete inserito e confronta le due stringhe cifrate.


Segnalibro 19.4. Che cos'è l'"area" di un utente su una macchina Unix?

Poichè una macchina Unix può essere usata da vari utenti, sia per motivi di ordine, sia per motivi di sicurezza, è opportuno che tutti i file appartenenti ad un dato utente siano raggruppati in un unica zona dell'hard disk (in senso logico, ossia di directory, e non in senso fisico, ossia di posizione fisica sul disco). In pratica, ciascun utente riceve insieme all'autorizzazione ad usare il computer (e quindi al login e alla password) una propria directory, comunemente detta area (account) dell'utente, nella quale egli può leggere e scrivere tutti i file che vuole, e inoltre può modificare gli attributi dei file, ossia può stabilire quali altri utenti della macchina sono autorizzati a leggere e a scrivere su ciascuno dei file posti nella sua area. Ovviamente, l'utente può creare sottodirectory nella propria area e può organizzare i propri file come meglio crede, proprio come se l'area fosse in realtà un vero e proprio hard disk dedicato solo a lui. Poichè in realtà tutte le aree risiedono sullo stesso hard disk, ogni utente ha anche un limite di spazio occupabile su di esso (detto quota): anche se, per ipotesi, sull'hard disk ci fossero ancora molti megabyte disponibili, egli comunque non è autorizzato ad avere all'interno della propria area file che in totale occupino più spazio della propria quota. Nel caso si abbia la necessità momentanea di maggiore spazio, si può utilizzare una directory temporanea comune per tutti gli utenti, generalmente denominata tmp e posta nella root directory, che viene però svuotata regolarmente e frequentemente.

Poichè l'area è semplicemente uno spazio sul disco, e poichè le macchine Unix sono multitasking, è normalmente ammesso che più utenti (o lo stesso utente usando più terminali) utilizzino contemporaneamente il computer con lo stesso login e la stessa password.

Poichè il termine "area", che correttamente indica uno spazio sull'hard disk, nell'uso comune è passato ad indicare la possibilità di accesso ad una macchina garantita dal disporre di questo spazio, la directory base dell'utente viene spesso indicata come home directory.

Nella home directory dell'utente sono anche contenuti i suoi file di configurazione, come ad esempio un batch che viene eseguito quando si collega (.login), o le configurazioni personalizzate di vari programmi (normalmente il file di configurazione del programma xxx si chiama .xxxrc). Molti programmi permettono di svolgere operazioni particolari tramite file posti nella home; ad esempio, inserendo in un file di testo chiamato .forward un indirizzo di posta elettronica, la posta in arrivo sarà rediretta automaticamente a tale indirizzo - ovviamente, a patto che questa opzione sia stata abilitata dai vostri amministratori di sistema.


Segnalibro 19.5. Che cos'è una shell? Come funziona il sistema dei file dello Unix?

La shell è sostanzialmente il programma che si occupa di far funzionare l'interfaccia a riga di comando, ossia l'equivalente del COMMAND.COM del DOS. Tuttavia, sotto Unix esistono varie shell (talvolta anche più di un tipo sulla stessa macchina), che ovviamente differiscono per comandi accettati, per cui dovrete adeguarvi alla vostra (le più diffuse sono bash e tcsh, mentre sh è la più semplice e standard di tutte; ne esistono molte altre).

Vi sono tuttavia alcuni comandi che funzionano più o meno con tutte le shell. Prima di vederli, comunque, è il caso di accennare al sistema di file (filesystem) di Unix, che è simile a quello dell'MS-DOS ma più esteso e completo. Ad esempio, non esistono le varie unità (A:, C:...), ma tutte le unità collegate al sistema - incluse quelle non fisse, come i floppy disk drive o i cd-rom - sono viste come se fossero un unico, grande hard disk. Nella root directory del sistema (la directory base, quella che sul vostro hard disk sarebbe C:\) sono poi poste varie sottodirectory, alcune delle quali sono effettivamente sottodirectory sull'hard disk, mentre altre corrispondono alle unità: ad esempio, nella root potreste trovare una directory denominata cdrom, entrando nella quale... vi troverete nella directory base del CD-ROM che in quel momento è inserito nel lettore CD! La root directory è indicata con /; si noti che la barra è diritta e non rovesciata, ossia è l'opposto di quella dell'MS-DOS (un tipico errore compiuto dai neofiti di Unix è usare le barre rovesciate; un altro errore è non ricordarsi che per Unix, a differenza del DOS, maiuscole e minuscole sono diverse e pippo.txt e PIPPO.TXT indicano due file diversi).

A partire dalla root, vi è poi un albero di sottodirectory, simile a quello del DOS ma con una differenza: vi possono essere rami che si incontrano, ossia percorsi diversi possono portare allo stesso punto dell'hard disk! Questo è in realtà un effetto di ciò che si definisce un link simbolico: in una directory, oltre che ai file, alle sottodirectory . (la directory corrente) e .. (la directory parent, ossia quella immediatamente superiore nell'albero) e ad eventuali sottodirectory, possono essere contenuti dei "rimandi" a file o directory che sono contenuti in un altro punto del disco, e che sono soltanto apparentemente posti nella directory che state leggendo.

Questo può essere disorientante: ad esempio può succedere, visitando siti FTP di entrare in una directory e... venire proiettati in una directory con un altro nome! Inoltre, se voi a questo punto tornate indietro di una directory (ossia entrate in ..), vi troverete in una directory diversa da quella da cui siete partiti. Si tratta però di una caratteristica molto utile, che permette di avere percorsi diversi per raggiungere i singoli file, e quindi rende più facile ritrovare i dati sull'hard disk ed organizzarli secondo criteri diversi in parallelo.

Come già detto, all'atto del collegamento non vi troverete nella root, ma nella vostra home directory, che è la directory che vi è stata assegnata perchè ci salviate i vostri file e in generale ci facciate quel che volete. Comunque, potete benissimo risalire a monte, facendo cd .. per tornare indietro di un livello o cd / per entrare nella root. Tipicamente, la home directory corrisponde alla directory /users/login/, dove login è appunto il vostro login; questo può in realtà essere un link simbolico, ma solitamente funziona su qualsiasi Unix. Dovunque siate, potete tornare nella vostra home directory con il comando cd ~ .

Esistono su un sistema Unix alcune directory predefinite, in cui troverete determinati tipi di file, e che è bene conoscere, specialmente se dovete svolgere attività sistemistiche (ad esempio perchè avete installato Linux sul vostro PC). Eccone un breve elenco:

/bin, /usr/binQueste due directory contengono i file eseguibili (comandi e programmi) installati nel sistema
/etcContiene i file di configurazione del sistema e dei programmi
/devContiene dei "finti file" che rappresentano le periferiche del sistema (dischi, stampante, porte seriali...)
/varContiene i dati di vari programmi (tra cui le aree di lavoro per la coda di stampa, i demoni di rete e posta elettronica...)
/usr/docContiene documentazione utile
/usr/users
o /users
Contiene le home directory degli utenti
/usr/localIn questa directory sono poste sottodirectory bin, etc... da usare per i programmi installati manualmente dagli utenti


Segnalibro 19.6. Che cosa sono e come si modificano gli attributi di un file?

Sulle macchine Unix ciascun file o directory, oltre ad essere caratterizzato dal nome, dalla dimensione... è caratterizzato da una serie di attributi che stabiliscono quali utenti del computer sono autorizzati a leggere e/o scrivere in quel file, ed è proprio tramite questi attributi che, ad esempio, l'utente che pone nella propria area alcune pagine ipertestuali stabilisce quali siano i file e le directory accessibili dagli utenti anonimi e quali no, e in generale può proteggere da occhi indiscreti - a parte quelli del sistemista - i propri dati riservati.

Ogni file possiede attributi riguardo a tre operazioni diverse, indicate con le lettere r (accesso in lettura), w (accesso in scrittura) e x (possibilità di esecuzione, solo se il file è eseguibile, oppure possibilità di attraversamento, per una directory). Inoltre, gli utenti della macchina sono divisi per gli attributi in tre categorie: l'utente proprietario dell'area in cui è posto il file (u), i membri dei gruppi di lavoro a cui l'utente appartiene (g) e tutti gli altri (o; le tre categorie insieme si indicano con la lettera a).

Eseguendo il comando ls -l, a sinistra del nome di ogni file o directory comparirà una riga del tipo:

-rw-r--r--

A parte la prima casella (che vale d se si tratta di una directory), le restanti nove sono raggruppate in tre gruppi di tre (da sinistra: utente, gruppi, altri), ciascuno dei quali contiene le lettere corrispondenti agli attributi abilitati per la corrispondente categoria di utenti. Ad esempio, la riga suddetta significa che il file è abilitato in lettura e scrittura per l'utente, solo in lettura per gli altri.

Il comando che permette di modificare gli attributi è solitamente chmod, che ha sintassi chmod who+attr file o chmod who-attr file, a seconda che si desideri abilitare o disabilitare un attributo. Al posto di attr andranno inserite le lettere relative agli attributi da modificare, al posto di who le lettere relative alle categorie di utenti interessate, al posto di file il nome del file. Pertanto si possono dare comandi del tipo:

chmod g-w pippo.txtDisabilita la possibilità di leggere pippo.txt per i membri dei gruppi di lavoro
chmod go+r pippo.txtAbilita la possibilità di leggere pippo.txt per i membri dei gruppi di lavoro e per tutti gli altri
chmod a+rx pippoAbilita la possibilità di leggere e eseguire pippo per tutti (utente, membri dei gruppi, altri).

Gli attributi vengono spesso indicati in forma numerica. Questa forma è costituita da tre cifre che variano da 0 a 7, ciascuna corrispondente ai tre tipi di utenti (utente, gruppi, altri). Ogni cifra è ottenuta partendo da zero e aggiungendo 1 per dare il permesso di esecuzione/attraversamento, 2 per la scrittura, 4 per la lettura. Alcuni tipici permessi in forma numerica sono 644 (permette lettura a tutti e scrittura solo al proprietario), 755 (permette lettura e esecuzione/attraversamento a tutti e scrittura solo al proprietario), 666 (permette lettura e scrittura a tutti). La forma numerica può essere usata come primo argomento di chmod, al posto della forma con i segni più e meno.

Anche le directory hanno i propri attributi, distinti da quelli dei file in esse contenuti. In particolare, non è possibile creare ex-novo un file in una directory o cancellarlo o modificarne il nome senza avere il permesso di scrittura per la directory, perchè in tutti questi casi è necessario modificare la lista dei file contenuti nella directory, a cui appunto si applicano i relativi attributi.


Segnalibro 19.7. Quali sono i principali comandi Unix?

Assodato che i comandi accettati dalle varie versioni di Unix e dalle varie shell sono diversi, in questo paragrafo saranno presentati alcuni comandi che dovrebbero funzionare dappertutto:
cd dirEntra nella directory dir (/ per la root, .. per la parent, ~ per la vostra home).
pwdScrive il nome completo della directory in cui vi trovate.
lsMostra i file contenuti nella directory corrente (equivale a dir del DOS); vedi sotto per le varie opzioni.
cp src destCopia il file src in dest (usate cp -R srcdir destdir per copiare intere directory).
mv src destSposta il file src in dest (se i due file sono nella stessa directory, funziona anche come rename del DOS).
cat fileVisualizza sullo schermo il file indicato (equivale al type del DOS).
more fileVisualizza sullo schermo il file indicato, con pause dopo ogni schermata (equivale a type file | more nel DOS).
rm fileCancella il file (usate rm -rf directory per cancellare intere directory come con deltree in DOS).
quotaMostra la vostra quota e lo spazio che attualmente occupano i vostri file.
duMostra lo spazio utilizzato dai file nella directory corrente e nelle sottodirectory (usate du -k per esprimerlo in kilobyte).
dfMostra lo spazio libero sul disco (usate df -k per esprimerlo in kilobyte).
whoMostra gli utenti attualmente collegati alla macchina.
which comandoMostra in quale directory è installato il comando.
chmod who+attr file
chmod who-attr file
Modifica gli attributi del file, attivando o disattivando una determinata possibilità di accesso (attr) per una determinata categoria (who) (vedi la parte sugli attributi).
exitChiude la shell / il terminale.
logoutSi disconnette dall'area.
man comandoMostra la guida per il comando indicato.
Il comando man è vitale: se non lo userete spesso, non sopravviverete.

Talvolta, nella configurazione dell'area, sono definiti degli alias, ossia delle equivalenze che vi permettono ad esempio di digitare dir per fare ls -al, o comunque di definire nuovi comandi in funzione di quelli preesistenti. Spesso vengono predefinite le equivalenze con i comandi del DOS (ad esempio delete è spesso un alias per rm).

E' possibile indicare al sistema di eseguire il comando in background, ossia di sfruttare le potenzialità di multitasking per eseguire il comando e nel contempo permettervi di inserire altri comandi dalla shell. Ciò si fa ad esempio inserendo una & alla fine della riga di comando. Inoltre, è possibile sospendere un processo in corso e tornare alla riga di comando, premendo Ctrl-Z, oppure ucciderlo immediatamente premendo Ctrl-C. I seguenti comandi sono relativi alla gestione dei processi:
psMostra tutti i processi che state facendo funzionare.
kill pid"Uccide" immediatamente il processo numero pid (i numeri dei processi sono leggibili con il comando ps). Usate kill -9 pid per uccidere un processo che non vuole saperne di morire. Usate kill -HUP pid per far ripartire da capo il processo (solitamente usato con i demoni).
bgFa ripartire in background il processo attualmente sospeso.
fgPorta in "primo piano" il processo precedentemente mandato in background.

Segnalibro Riguardo al comando ls, spesso lo si usa in congiunzione a vari switch per modificare il modo in cui presenta le directory. Ad esempio -a mostra anche i file "nascosti" (quelli il cui nome inizia per .), -l mostra le dimensioni dei file e i loro attributi, -F permette di distinguere tra i tipi di file ponendo al termine del loro nome il carattere / se directory o @ se link simbolico, -r mostra il contenuto anche per le sottodirectory della directory corrente. Gli switch si cumulano dopo il segno -: ad esempio potete selezionare tutte e quattro le opzioni sopra indicate con il comando ls -alrF (l'ordine è ininfluente).

Va ricordato infine che il tasto TAB, con le shell più avanzate, permette solitamente di "completare" i nomi di file o directory che si stanno scrivendo: ad esempio, se volete entrare dentro la directory public_html, potete scrivere cd publ e poi premere TAB; se non vi sono possibilità di confusione, comparirà automaticamente il resto del nome della directory.

Oltre a ciò, sulla macchina possono essere installati vari programmi che potete lanciare scrivendone il nome sulla riga di comando: per quanto riguarda la rete, potreste trovare un programma di Telnet (telnet nomesito porta, dove nomesito è il nome del sito a cui collegarsi e porta, che potete solitamente omettere, è il numero della porta), di FTP (ftp o ncftp: questi programmi utilizzano normalmente una interfaccia testuale in cui dovete inserire i comandi FTP), di Talk (talk nomeutente@nomemacchina), di Finger (finger nomeutente@nomemacchina), di Gopher (gopher) e un browser WWW (solitamente lynx); spesso vi è anche un programma per la lettura delle news (rn, trn, tin...) e un programma di posta elettronica (mail, elm, mh: è il meno standardizzato, per cui è bene che vi facciate dare istruzioni dal sistemista). Oltre a questi, tipicamente il sistema dispone di un compilatore per il linguaggio C (cc o gcc) e di un interprete Perl (perl). Vitale è anche la disponibilità di un buon editor di testo: il migliore, specialmente per chi proviene dai PC, è joe, ma esistono anche vi e emacs. Esistono anche programmi che permettono di leggere e scrivere file su un dischetto MS-DOS dalla workstation Unix; i comandi sono mdir, mcopy... (usate man mtools per leggere le istruzioni). Se avete problemi con gli attachment di posta elettronica, spesso è installato metamail, un sistema di codifica e decodifica MIME, oltre a uuencode e uudecode.


Segnalibro 19.8. Che cos'è un "demone" Unix?

Tipicamente, i computer su cui funziona Unix non vengono mai spenti; sono progettati per essere sempre accesi e disponibili 24 ore su 24 per qualsiasi utente autorizzato che desideri servirsene; in qualsiasi momento può arrivare una richiesta di utilizzo. D'altra parte, può succedere che arrivi una qualche richiesta quando nessun utente sta fisicamente usando e controllando il computer: è quindi necessario che esso sia capace di "autoavviare" dei programmi in risposta a determinate richieste, senza dover attendere un preciso comando da parte di un utente. Per questo motivo, esistono programmi permanentemente in esecuzione, normalmente inattivi, ma pronti a "risvegliarsi" e ad eseguire le operazioni richieste nel caso di eventi particolari (come la richiesta di un utente) oppure di condizioni prefissate (ad esempio ad intervalli di tempo regolari). Un programma di questo tipo si dice demone (daemon); ne esistono per tutti gli scopi.

Ad esempio, si pensi al caso in cui un utente di Internet, tramite un browser, richiede al computer su cui è ospitato un sito WWW di recuperare una pagina e spedirgliela. È ovvio che debba esistere un modo per far partire l'opportuno programma senza che sia necessario un comando umano; questo si ottiene facendo eseguire sul computer un demone HTTP (httpd), che ascolta le richieste in arrivo sulla porta convenzionalmente assegnata al protocollo HTTP e le soddisfa spedendo ai richiedendi le pagine desiderate; dopodichè, si "riaddormenta" in attesa di nuove richieste. Tutti i programmi server sotto Unix sono realizzati tramite demoni: esistono demoni FTP, Telnet... Esiste anche, ad esempio, il demone cron, che si attiva in istanti (data e ora) predefiniti dall'utente per eseguire un comando: in questo modo, ciascun utente (se autorizzato dall'amministratore) può predisporre una scaletta temporale di comandi (schedule) che saranno eseguiti alle ore indicate, anche se egli in quel momento non sarà più collegato.

Sotto certi aspetti, i demoni Unix equivalgono ai cosiddetti programmi TSR (Terminate and Stay Resident) per MS-DOS, che sono programmi che dopo essere stati eseguiti restano in memoria e si attivano quando l'utente compie certe operazioni (ad esempio, preme una combinazione predefinita di tasti). Tuttavia, l'architettura dello Unix è stata pensata per permettere un uso più esteso e approfondito di questo tipo di tecnologie.


Segnalibro 19.9. Che cos'è X-Windows?

In prima approssimazione, X-Windows (spesso detto semplicemente X) sta a Unix come Windows sta al DOS: si tratta di una estensione, che viene lanciata dalla riga di comando, e che permette di offrire una interfaccia grafica all'utente. Al giorno d'oggi sono disponibili molti programmi per X, che spesso non hanno nulla da invidiare a quelli per Windows.

Una differenza fondamentale tra Windows e X-Windows è però nella "architettura" di quest'ultimo. Difatti, X è nato per sistemi multiutente, tipicamente collegati ad una rete; per questo motivo, esso è progettato secondo uno schema client-server. Esiste quindi un X-server, che è il programma che si occupa di fornire agli altri programmi l'interfaccia grafica, e uno o più X-clienti o X-terminali, aperti con il comando xterm (o, meglio, xterm &, altrimenti per aprire un terminale ne occupate un altro...), che vengono utilizzati dagli utenti, e possono stare sulla stessa macchina o su un'altra collegata in rete. Un'altra differenza fondamentale sta nel fatto che Windows è un sistema completamente proprietario, mentre X è aperto: soltanto la Microsoft può produrre Windows, ma nel mondo X esiste la concorrenza, e quindi una spinta naturale al miglioramento.

L'X-server deve essere scelto in funzione del vostro hardware, e in particolare, su di un PC, della vostra scheda grafica: esistono varie versioni di X ottimizzate per diverse schede grafiche, garantendo così una velocità molto maggiore nella visualizzazione. Esso deve essere inoltre configurato in funzione del monitor usato e di una serie di altri parametri. L'X-server è la prima cosa che deve essere mandata in esecuzione per "aprire" X-Windows; questo è solitamente fatto con il comando startx (come il WIN di Windows!). Esso provvede poi a fornirvi almeno un terminale, chiudendo il quale (con il comando exit) si esce da X, tornando allo Unix normale.

Segnalibro L'interfaccia a finestre presentata da X è leggermente diversa da quella a cui siamo abituati con Windows; in particolare, con la configurazione standard la finestra attiva è quella sopra cui è posto il puntatore del mouse! Tuttavia, anche questi aspetti possono essere personalizzati: difatti, "sopra" l'X-server viene eseguito un window manager, ossia un programma che definisce l'aspetto delle finestre e il loro funzionamento. Se quindi il window manager standard (twm) non vi piace, potete provare a installarne un altro (ad esempio fwv95-2 fornisce finestre simili a Windows 95). Solitamente, premendo il pulsante destro sullo sfondo dello schermo otterrete un menu per compiere alcune operazioni utili.

Segnalibro Per l'X-server, è del tutto indifferente che il terminale sia posto sulla stessa macchina o in rete. E' quindi possibile utilizzare a distanza X, così come TELNET permette di utilizzare a distanza un computer remoto con lo Unix testuale. Sui PC, esistono appositi programmi detti appunto X-terminal, che provvedono a ricevere dal computer remoto, tramite la rete, l'output grafico dei programmi, permettendo il controllo a distanza di applicazioni grafiche per X-Windows. Tipicamente, questi programmi richiedono quindi all'utente di fornire il nome del computer remoto su cui ha l'accesso, il login, la password e il nome del programma da eseguire (o meglio, il comando da dare sulla riga di comando dello Unix per far partire il programma); dopo di ciò, essi stabiliscono un collegamento e provvedono a visualizzare sullo schermo del computer dell'utente l'output grafico del programma che, fisicamente, sta venendo eseguito sul computer remoto. A tutti gli effetti, difatti, il computer che esegue il programma è quello remoto, e quindi il programma potrà accedere all'hard disk, sfruttare l'hardware e il software del computer e le sue possibilità di connessione in rete; il computer dell'utente sarà soltanto un terminale (anzi, un X-terminale!). Poichè tuttavia la quantità di dati da trasmettere ed elaborare è molto maggiore di quella necessaria per un collegamento Telnet, tipicamente i collegamenti con X-terminal si effettuano soltanto all'interno di reti locali, su cui si può mantenere una velocità di trasmissione medio-alta; è difficile pensare ad un collegamento di questo tipo tramite modem. Inoltre, anche se il PC svolge soltanto la funzione di terminale grafico, è comunque necessario disporre di un processore medio-alto (almeno un 386, ma è consigliato un 486). Infine, per stabilire un collegamento X-terminal può essere necessario aver stabilito in precedenza anche un normale collegamento Telnet; dopo aver lanciato entrambi i collegamenti, sarà normalmente possibile lanciare dal terminale testuale (Telnet) applicazioni grafiche di X-Windows, pur senza averlo fatto partire sul computer remoto, che verranno visualizzate sul PC dell'utente grazie all'X-terminal.


Segnalibro 19.10. Che cos'è il Perl?

Il Perl (Practical Extraction and Report Language) è un linguaggio di programmazione tipico dei sistemi Unix, posto a metà tra un vero linguaggio come il C e i comuni script di sistema. Si tratta di un linguaggio interpretato: per poter eseguire script in Perl è necessario che nel sistema sia installato l'interprete, giunto attualmente alla versione 5. I programmi in Perl sono quindi costituiti da comuni file di testo, di solito con l'estensione .pl, che contengono il codice, e la cui prima riga deve richiamare l'interprete (con la sintassi #!/usr/bin/perl, sostituendo il percorso corretto per l'eseguibile perl).

Il Perl è un linguaggio estremamente adatto per tutte le funzioni di sistema (lettura, elaborazione e scrittura di file e directory...) e per la manipolazione di stringhe: per questo motivo, è molto usato anche per scrivere programmi CGI. All'inizio il codice può apparire piuttosto caotico, ma un rapido esame del manuale (che, sotto Unix, può essere richiamato semplicemente con il comando man perl) permette di addentrarsi rapidamente nel linguaggio.

Segnalibro In particolare, il Perl basa le sue funzioni di elaborazione di stringhe sull'uso intensivo delle espressioni regolari (regular expression o brevemente regexp), che sono comunque utilizzate da moltissimi altri ambienti e programmi Unix. Una espressione regolare è l'opposto delle "espressioni con asterisco" a cui siamo abituati sulla riga di comando. Ad esempio, nel comando DOS type pi l'espressione pi individua solo ed esclusivamente il file denominato pi, mentre per individuare i file che iniziano per pi è necessario scrivere pi*. Nelle espressioni regolari, invece, è sufficiente che quello che viene indicato ricorra almeno una volta: la regexp pi individua non solo la stringa pi, ma anche piano, campi, respiro. I modificatori servono quindi a restringere il campo, e non ad espanderlo: ad esempio l'espressione regolare ^pi, grazie al carattere ^ (inizio riga), individua le stringhe che iniziano per pi. In questo modo, è possibile scrivere espressioni piuttosto complesse, che però permettono di individuare facilmente determinate strutture o parti di un insieme di caratteri.

Maggiori informazioni e documentazione sul Perl sono reperibili a http://www.perl.com/ o nei siti della catena CPAN.


Segnalibro 19.11. Posso creare un sito WWW nella mia area Unix?

Se disponete di un'area su di un server Unix collegato in permanenza alla rete, quasi sicuramente potete inserire in essa pagine WWW. E' difatti sufficiente che sul sistema sia eseguito un demone che si occupi di accogliere le richieste provenienti dai browser degli utenti e di spedire le corrispondenti pagine secondo il protocollo HTTP. Il più diffuso programma di questo tipo è Apache (http://www.apache.org/), distribuito gratuitamente in rete; nel caso, il vostro sistemista può recuperarlo e installarlo facilmente.

La configurazione di default di Apache, e di quasi tutti i server HTTP, prevede che ogni utente crei all'interno della propria home directory (quella in cui ci si trova quando ci si collega alla macchina) una directory denominata public_html; essa corrisponderà all'indirizzo

http://nomemacchina/~login/

che rappresenterà quindi l'indirizzo della vostra home page.

Ad esempio, se il computer si chiama www.pippo.it e il vostro login è paperino, un ipertesto denominato pagina.html posto nella directory public_html corrisponderà all'URL

http://www.pippo.it/~paperino/pagina.html

Sempre nella configurazione di default, è previsto che inserendo l'indirizzo relativo alla directory venga restituita, se esistente, la pagina index.html o index.htm posta nella directory. Se essa non esiste, a seconda della configurazione potrà essere restituito l'elenco dei file contenuti nella directory oppure un messaggio di "Access forbidden".

Comunque, i nomi public_html e index.html non sono strettamente standard, per cui vi conviene informarvi presso l'amministratore del server.

Quanto detto sopra vale anche per sistemi Unix non collegati alla rete (o collegati via modem, nelle fasi in cui si è scollegati); tuttavia, poichè il sistema è isolato dalla rete, l'unico computer da cui il vostro sito sarà visibile è... quello stesso computer! Tuttavia, è comunque possibile far partire il server HTTP e un browser come Netscape, e navigare nel vostro sito proprio come se steste accedendo dalla rete, utilizzando l'indirizzo IP 127.0.0.1 o il nome letterale localhost corrispondenti al "loopback". In altre parole, basterà usare l'indirizzo http://127.0.0.1/ per collegarsi con la pagina iniziale del vostro sito. Questa modalità è utilissima ad esempio per testare in locale, sul vostro PC di casa, le pagine che poi intendete mettere sul server: difatti in questo modo potrete testare anche i programmi CGI, le inclusioni e altre caratteristiche tecniche che non funzionerebbero se vi limitaste ad aprire i file dal browser senza passare dal server HTTP, come si fa sotto Windows.


Segnalibro 19.12. Come posso avere Unix sul mio PC?

Se avete concluso che Unix vi piace, potrebbe venirvi il desiderio di disporne sul vostro PC. I motivi per avere Unix su di un PC sono vari: può esservi molto utile se desiderate approfondire la vostra conoscenza tecnica del WWW e in particolare scrivere programmi CGI; inoltre quasi tutto il software per Unix, per qualche strano motivo legato all'uso accademico e amatoriale che ne è sempre stato fatto, è distribuito come freeware, ed è quindi disponibile gratuitamente (a differenza di quello per Windows): sulla rete troverete ottimi pacchetti di word processing (StarOffice) o di grafica (ImageMagick), nonchè versioni apposite di molti dei più diffusi programmi (ad esempio Netscape). A differenza di Windows, Unix (con X-Windows) è un sistema operativo solido ed efficiente, che non si blocca ogni quarto d'ora per un qualsiasi stupido motivo, in cui il malfunzionamento di un programma può provocare la sua fine ma non il reset dell'intero computer, e in cui i programmi non occupano decine di megabyte ciascuno e funzionano velocemente persino su di un vecchio 486. D'altra parte, esso è più complicato da usare, richiede spesso l'uso della riga di comando al posto del mouse, va configurato manualmente nei minimi particolari, e non sempre è facile capire come funzionano le cose; inoltre, vi è abbondanza di software specialistico in certi settori - ad esempio nel settore scientifico - ma carenza di software applicativo generale. Insomma, per il momento il suo uso è consigliato soltanto ad utenti che abbiano una discreta familiarità con Windows (tanto da averne individuato tutti i palesi difetti...) e il PC, e che non abbiano paura di imparare, tanto più che è possibile installare contemporaneamente sullo stesso PC entrambi i sistemi operativi.

Segnalibro Lo Unix per PC universalmente diffuso è Linux (versione 2.0.x); questo sistema operativo è disponibile gratuitamente in rete (ad esempio consultate http://www.linux.org/; per documentazione in italiano potete anche consultare il sito del Pluto, l'associazione degli utenti Linux italiani, a http://www.pluto.linux.it/ildp/). Esso viene diffuso nelle cosiddette distribuzioni, ossia in set di dischetti che contengono il sistema operativo e i più svariati pacchetti applicativi; poichè una distribuzione, con tutti i possibili accessori, può occupare 30 o 40 dischi, la cosa migliore è investire qualche decina di migliaia di lire nell'acquisto di un CD-ROM contenente una distribuzione recente (i pacchetti in commercio sono normalmente formati da 6 o 8 CD che contengono alcune distribuzioni più tutto il software possibile e immaginabile). Le distribuzioni più diffuse sono la Slackware, la Red Hat e la Debian; la scelta è sostanzialmente una questione di gusti, in quanto le principali differenze sono nel sistema di installazione di Linux e dei singoli programmi.

Per installare Linux, dovrete prima creare una partizione dell'hard disk da destinare ad esso; con molte distribuzioni è acclusa una utility che vi permette di convertire lo spazio libero sul vostro hard disk di Windows in una partizione per Linux, senza dover riformattare l'hard disk. Ricordate che, trattandosi di due sistemi operativi diversi, non solo sono diverse e incompatibili le interfacce e i programmi, ma anche l'hard disk deve essere fisicamente diverso, e questo si ottiene "spezzando" in due il vostro hard disk, ossia partizionandolo. Il partizionamento è una operazione che va fatta con cautela, seguendo le istruzioni, per non cancellare il contenuto dell'hard disk; valutate bene quanto spazio dedicare a Linux (consigliati da 150 a 500 MB a seconda dello spazio disponibile) in quanto successive modifiche delle dimensioni delle partizioni sono di fatto impossibili! (Comunque, da Linux è possibile accedere ai file memorizzati sulla "parte DOS" dell'hard disk; il contrario è invece attualmente impossibile.) Conviene solitamente dedicare a Linux due partizioni: una per i file, e una, più o meno pari alla RAM di cui disponete, da utilizzare come memoria virtuale. Le partizioni possono essere create da DOS con il comando fdisk, o con vari pacchetti commerciali per Windows; con Linux è comunque accluso un programma per DOS chiamto fips, che dovrebbe creare la vostra partizione Linux utilizzando lo spazio libero sul disco DOS, senza danneggiare i file esistenti.

Dopo aver creato la partizione, seguite le istruzioni della vostra distribuzione; solitamente vi verrà presentato un lungo elenco di programmi, e potrete scegliere quali installare. Se siete l'unico utente del PC, non avrete invece bisogno di creare e gestire utenti (entrate con il login root).

Insieme a Linux, sarà normalmente installato anche X-Windows, ossia il sistema operativo grafico; normalmente la versione utilizzata è XFree86, che può essere configurato con il comando xf86setup e lanciato con il comando startx. Se avete una scheda grafica recente, può darsi che sul CD non troviate un X-server adatto; in questo caso, vi consiglio di collegarvi con http://www.xfree86.org/ e cercare una versione più recente.

Per orientarvi, oltre alle "indicazioni di sopravvivenza" date in questa guida, il consiglio è di usare spesso il comando man; inoltre nella directory /usr/doc/ sono solitamente disponibili raccolte di documentazione, tra cui le FAQ su Linux e soprattutto gli HOWTO, brevi documenti che insegnano come svolgere determinate operazioni e configurazioni del sistema.

Segnalibro La maggior parte delle distribuzioni dispone di una utility (ad esempio pkgtool per la Slackware) per cancellare o installare programmi disponibili sui CD. Tuttavia, spesso vorrete installare manualmente programmi prelevati dalla rete, ad esempio perchè più recenti. In questo caso, è consigliabile scaricare direttamente i "binari", ossia gli eseguibili. Se essi non sono disponibili, ma invece vi viene dato il codice C del programma - come accade per moltissimi programmi, specialmente quelli non specifici di Linux ma progettati per un qualsiasi Unix - solitamente dovrete seguire questa procedura:

  1. Prelevare l'archivio del programma, normalmente in formato .tar.gz;
  2. Scompattare l'archivio con GZip (tipicamente con il comando gunzip nomefile) e poi estrarlo con TAR (tipicamente con il comando tar xvf nomefile; solitamente viene creata una sottodirectory nella directory corrente in cui vengono estratti i file);
  3. Seguite le istruzioni accluse al programma; solitamente, però, dovrete dare il comando configure che controlla la configurazione del vostro sistema e prepara per l'installazione;
  4. Dovrete poi dare il comando make, che effettua la compilazione del codice C del programma;
  5. Infine, il comando make install (con molti pacchetti, non con tutti) installa i file nelle directory opportune.
Normalmente i file vengono installati nella directory /usr/local/ e nelle sue sottodirectory. Se, a metà della compilazione, ricevete un errore, leggete la documentazione del programma; solitamente è opportuno ricominciare dal punto 3 dopo aver dato il comando make clean per riportare tutto alla situazione iniziale.


Leggi il ventesimo capitolo

(C) 1996-1998 Vittorio Bertola - v.bertola@goemon.polito.it