Introduzione a Linux
Utilizzo generale dall'interfaccia grafica
L'utilizzo generale di Linux non è dissimile da quello di
Windows, soprattutto nelle ultime versioni. Ovviamente non ci si
può aspettare di trovare gli stessi programmi che si hanno su
Windows, ma quasi sempre ce n'è di equivalenti. Non ci
dilunghiamo quindi sul funzionamento generale ed andiamo ad analizzare
le differenze maggiori tra i due sistemi.
L'albero delle directory
Diamo una occhiata rapida all'albero delle directory di un sistema
Linux. A differenza di Windows, che è strutturato in modo da
avere (più o meno) una directory per ogni programma, in Linux la
struttura è molto più articolata. Lo strumento più
conveniente per analizzarne la struttura è il browser del
file-system, accessibile dal menù Applicazioni -> Strumenti di Sistema -> Esplorazione File.
/
+--- bin
+--- boot
+--- etc
+--- home
+--- luigino
+--- studente
+--- Desktop
+--- lib
+--- media
+--- cdrom
+--- floppy
+--- proc
+--- root
+--- sbin
+--- sys
+--- tmp
+--- usr
+--- bin
+--- lib
+--- var
Abbiamo qui indicato solo le directory più importanti.
Spieghiamole brevemente:
- / è la directory
principale, o directory radice. Notare
che, a differenza di Windows, il
simbolo per la radice è lo stesso simbolo usato per la divisione
e non la barra retroversa \
- /bin contiene i programmi
basilari per l'interazione con il sistema operativo. I vari comandi ls, ps, mkdir (che vedremo in seguito)
si trovano tutti in /bin
- /boot contiene il kernel
del sistema operativo, e serve soltanto durante la partenza del sistema
- /etc contiene i file di
configurazione globali del sistema (ogni utente poi ha dei file di
configurazione propri che stanno nella propria home directory). Di
solito ogni programma ha uno o più file di configurazione in
/etc che possono essere manipolati semplicemente come file di testo (a
differenza di Windows, dove spesso la configurazione dei programmi
è nascosta nel "registro di
configurazione", che può essere visualizzato e manipolato
solo col programma "regedit")
- /home contiene le home
directory dei vari utenti.
- /home/<nomeutente>è
la home directory dell'utente,
dove egli potrà memorizzare tutti i dati che vuole. In
particolare /home/studente è la directory dell'unico utente
disponibile in aula informatizzata. È questa directory che viene
aperta
quando, nel Desktop, si fa un doppio click sull'icona con la casa.
- /home/<nomeutente>/Desktop
corrisponde al Desktop dell'utente <nomeutente>. In
generale ogni utente si gestisce la proprio home directory come vuole,
ma la sottodirectory Desktop ha questo utilizzo particolare.
- /lib contiene le librerie
più importanti per il sistema. Una libreria è un insieme
di funzioni (nel senso di funzioni in C/C++) che possono essere usate
da tutti i programmi. Così, se una applicazione ha bisogno di
utilizzare delle funzioni di crittografia, può utilizzare la
libreria libcrypt.
Corrispondono alle DLL in Windows.
- /proc e /sys contengono dei file
speciali di interesse al sistema operativo. Ad esempio /proc/cpuinfo contiene informazioni
sulla/e cpu presente/i nel sistema.
- /root è la home
directory dell'utente root. L'utente root, presente in ogni sistema
Unix, è il super-utente. Ha dei diritti speciali, in quanto
può accedere a qualunque file e dispositivo presente nel
computer.
- /sbin contiene come /bin dei programmi fondamentali per
il sistema, ma tipicamente pensati per essere usati dal super-utente
(anche se spesso sono utilizzabili anche da un utente comune). Ad
esempio /sbin/lspci vi fa
vedere l'elenco delle periferiche PCI presenti nel sistema.
- /usr contiene molte
directory simili a quelle presente nella radice. Abbiamo così /usr/bin, /usr/sbin, /usr/lib. La differenza è che
i programmi e le librerie presenti in /usr non sono così
fondamentali come quelle presenti direttamente in /bin, /sbin o /lib. Ad esempio, GIMP si trova in /usr/bin.
- /tmp contiene dei file
temporanei usati da vari programmi
- /var contiene i dati dei
vari programmi presenti nel sistema. Vedremo ad esempio che MySQL mette
i propri database in /var.
Normalmente un utente (che non sia root) può leggere quasi tutti
i file presenti nel computer, ma può scrivere soltanto nella sua
home directory e nella directory /tmp.
La shell
Nei sistemi Unix, la shell è il programma più importante,
dopo il kernel.
È il mezzo con cui si comunica con il sistema e
attraverso
il quale si avvia e si controlla l'esecuzione degli altri programmi.
Shell vuol dire "conchiglia" e il nome deriva dal fatto che è la
superficie con cui l'utente entra in contatto quando vuole interagire
con il sistema: la shell che racchiude il kernel.
Una volta, prima dell'avvento delle interfacce grafiche, la shell era
l'unico sistema per comunicare con il sistema operativo. Oggi non
è più così, ma la shell, per chi la sa usare,
conserva ancora dei vantaggi rispetto all'interfaccia grafica:
- per la maggior parte dei compiti, è più veloce dare
un comando con la shell che aprire finestre e finestrelle, anche
perchè non bisogna mai spostare le mani dalla tastiera per
raggiungere il mouse;
- è programmabile: la shell è un vero e proprio
linguaggio di programmazione con il quale è possibile
automatizzare l'esecuzione di vari compiti;
- alcune attività di basso livello richiedono l'uso della
shell, persino in ambiente Windows;
- è utilizzabile da un computer remoto, e in questo modo si
ha l'accesso totale alla macchina, che può essere amministrata
senza bisogno di essere presenti fisicamente nello stesso luogo.
La shell è disponibile anche per sistemi Windows, anche se
lì si chiama, per motivi storici "prompt dell'MS-DOS" o "prompt dei comandi". Tuttavia,
essa è molto meno potente che nei sistemi Unix, per cui è
di solito meno utilizzata.
Il prompt dei comandi
Per attivare la shell, il modo più comodo è,
dall'ambiente grafico, attivare il programma Terminale (dal
menù Applicazioni
-> Strumenti di Sistema ->
Terminale).
Alcuni comandi
Dalla shell è possibile inviare dei comandi al sistema
operativo.
Ecco alcuni esempi:
- ls: visualizza il
contenuto della directory corrente. Colori diversi indicano tipi di
file diversi. Ad esempio le directory sono in blu.
- cat <nomefile>:
visualizza il contenuto del file <nomefile>
- less <nomefile>:
visualizza il contenuto del file <nomefile>, una pagina alla volta
- cd <nuovadirectory>:
cambia directory corrente
- pwd : visualizza il percorso della
directory corrente
- mkdir <nuovadirectory>:
crea una nuova directory
- rmdir <directory>:
cancella la directory specificata (se è vuota)
- cp <fileorigine>
<filedestinazione>: copia un file dall'origine alla
destinazione
- mv <fileorigine>
<filedestinazione>: sposta un file dall'origine alla
destinazione (come cp ma cancella l'originale)
- rm <file>:
cancella il file specificato
Completamento automatico
Una caratteristica utile della shell di Linux è il completamente
automatico. In varie circostante potete premere il tasto <TAB> e
la shell completa quello che state scrivendo nella maniera più
ovvia. Se ad esempio siete nella situazione
amato@sci138$ pass
e premete <TAB>, la stringa pass
viene completata in passwd
(il comando per cambiare la propria password). Questo perchè passwd è l'unico comando
che inizia con pass.
Analogamente, se nella directory corrente c'è il file "prova" e
voi premete <TAB> quando avete digitato
amato@sci138$ cat pr
allora pr viene
completato in prova.
In generale, quasi su ogni sistema è vero quanto segue:
- se premete <TAB> sulla prima parola di una riga di comando,
la shell tenta di completare la stringa immessa con un comando valido;
- se premete <TAB> sulle parole successive alla prima in una
riga di comando, la
shell tenta di completare la stringa con un nome di file valido.
Talvolta premendo <TAB> non succede niente: vuol dire che
c'è ambiguità nel modo in cui si può completare la
stringa. Ad esempio, se abbiamo anche il file prato oltre a prova, premere <TAB> dopo
pr è ambiguo perchè pr
potrebbe essere completato con prato o con prova.
In questo caso, si può premmere <TAB> due volte di seguito
per avere l'elenco dei possibili completamenti. Ad esempio, con
amato@sci138$ rm
premendo <TAB><TAB> si ha l'elenco dei comandi che iniziano
con rm:
rm
rmail.sendmail
rmic
rmiregistry
rmail
rmdir rmid
Il <TAB> può essere usato per spostarsi velocemente
nell'albero delle directory. Se si vuole visualizzare il file /var/spool/mail/studente (che
contiene la posta in arrivo per l'utente studente) il comando da dare
è cat
/var/spool/mail/studente. Si può scrivere questo comando
molto più velocemente digitando: cat
/v<TAB>/sp<TAB>/ma<TAB>/s<TAB>. Se
invece volete visualizzare un file in /var/spool/mail ma non vi
ricordate quale, potete provare con cat
/var/spool/mail/<TAB><TAB> che visualizza l'elenco
dei file in /var/spool/mail.
La funzione di completamento automatico è veramente comoda. Una
volta che ci si è famirializzato, è difficile
farne a meno.
Immissione caratteri speciali
Spesso è necessario inserire dei caratteri che non sono presenti
nella tastiera. Come si fa in questo caso? Il trucco tipico di Windows
(ALT+il codice ascii sul tastierino numerico) su Linux non funziona. In
realtà, i caratteri più comuni possono essere digitati
con alcune combinazioni di tasti standard:
- Alt-Gr + apostrofo = apice
- Alt-Gr + ì = ~
- Alt-Gr + e = €
- Alt-Gr + é = Alt-Gr + Shift + è = {
- Alt-Gr + * = Alt-Gr + Shift + più = }
Altri caratteri possono essere digitati utilizzando la funzione
Multi_key. Premendo Shift + AltGr (nell'ordine prima shift, poi
Alt-Gr) viene attivata la funzione Multi_key: a quel punto Linux si
aspetta due caratteri in sequenza, che vegono combinati per formare un
unico carattere. Ad esempio
- Multi_key s s = ß
- Multi_key ` E = È
- Multi_key A E = Æ
e così via..
Aiuto, non mi ricordo cosa
fa un comando
Nessuno è ingrado di ricordarsi tutti i possibili comandi e le
differenti opzioni disponibili in ambiente Unix. Per questo la
documentazione in materia è estensiva. Abbiamo già visto
l'opzione --help che
è possibile fornire a molti comandi per farci restituire la
spiegazione del suo funzionamento e delle opzioni che supporta. La
spiegazione che si ottiene è però spesso troppo
stringata, utile quando il comando lo si conosce già e
semplicemente non ci si ricorda il formato di qualche opzione, ma non
quando si vuole imparare come utilizzarlo.
Per quest'ultimo scopo è molto più utile il comando man. Si usa generalmente in
questo modo:
- man <comando>:
visualizza il manuale utente per il comando.
Ad esempio man rmdir
visualizza il manuale del comando rmdir.
La lettura del manuale non è sempre agevole e bisogna abituarsi
un po', anche perchè spesso le spiegazioni sono molto tecniche.
Le due parti più importanti sono tipicamente SYNOPSIS che dà la sintassi
del comando e DESCRIPTION che
spiega cosa fa il comando e il significato di tutte le opzioni
disponibili.
NOTA. Un'altra fonte di
informazione sono i file presenti in
/usr/share/doc/<nomepacchetto>.
E poi ovviamente Internet, che è la più grossa fonte di
informazione in materia.
Accesso ai dischi e operazioni di montaggio
Nei sistemi Unix non esiste il concetto di "lettera
del dispositivo" per accedere ai floppy, CD-ROM o semplicemente a
partizioni differenti dell'hard-disk. I file contenuti in questi
dispositivi vengono semplicemente inseriti all'interno dell'albero
principale delle directory. In particolare, /media/cdrom e /media/floppy
corrispondono al contenuto del CDRom e del floppy rispettivamente.
Normalmente, se si tenta di visualizzare una di queste directory, essa
appare vuota. Perchè si verifichi il collegamento tra
/media/floppy (e simili) e il corrispondente dispositivo, occurre
effetturare una operazione speciale detta "montaggio".
Dall'interfaccia grafica, è possibile "montare" i floppy o i cdrom aprendo la cartella
"Computer" presente sul Desktop e da lì con un doppio click su
"Floppy Drive" o "CD-R Drive". In realtà, spesso, il montaggio
dei CD-ROM è automatico, basta inserire il disco nel lettore. A
seguito
di questa operazione accadono due cose (supponendo che tutto vada bene):
- una icona appare nel Desktop dalla quale è possibile
accedere ai file del dispositivo;
- il filesystem presente nel dispositivo viene montato nell'albero
principale delle directory.
Dopo il montaggio di un floppy, ad esempio, si può andare in /media/floppy e operare
normalmente dentro quella directory, senza preoccuparsi del fatto che i
file risiedono sul floppy piuttsto che sull'hard disk.
Analoga alla operazione di montaggio c'è l'operazione di
"smontaggio". Dall'interfaccia grafica basta cliccare sull'icona del
dispositivo e seleziona "Espelli". Questo causa lo smontaggio del
dispotivo (che non è più visibile all'interno della
directory /media/.....)
e,
nel caso del CDRom, l'espulsione del CD.
Attenzione, l'operazione di smontaggio è importantissima,
in particolare per
i floppy. Quando scriviamo su un floppy, infatti, non è detto
che il sistema operativo faccia subito le scritture. Può darsi
che si tenga i dati nella cache. Quando si esegue lo smontaggio, tutte
le operazioni pendenti di scrittura vengono portate a termine. Se si
estrae il floppy prima di smontarlo, c'è il rischio di trovarsi
con modifiche non effettuate o peggio con il file-system corrotto. Per
i CD la questione è meno delicata perchè tanto sono
dispositivi di sola lettura. Tuttavia, è probabile che,
finchè il CD è montato, il tasto di espulsione manuale
non funzioni.
Processi
Un sistema Unix, in ogni momento, ha un certo numero di processi in
esecuzione. Un processo viene creato quando si esegue un comando o un
programma più complesso. Si possono esaminare i processi
attualmamente in corso, al solito, o con una interfaccia grafica o con
la shell.
Dall'interfaccia grafica, il programma da utilizzare è Applicazioni -> Strumenti di Sistema
-> Monitor di Sistema.

Si vede un elenco di processi e, per ognuno di essi, alcune sue
caratteristiche. Le cose più importanti sono le prime due
colonne, il nome del processo e l'utente che lo controlla. Ogni
processo ha gli stessi diritti di accesso ai file dell'utente che lo
controlla. Normalmente il Monitor fa vedere solo i processi sotto
controllo dell'utente che lo ha invocato, ma è possibile
selezionare "Tutti i Processi" in alto a destra e ottenere la
visualizzazione completa.
E` anche possibile "uccidere" un processo che non risponde più
ai comandi utente, cliccando col tasto destro sul processo e scegliendo
Termina Processo dal
menù contestuale che appare. Qualora neanche questo modo
consente di interrompere il processo, si può scegliere Uccidi Processo invece di Termina Processo dallo stesso
menù. E` però una cosa da fare come ultima risorsa
perchè è un metodo molto brutale che non da il tempo al
processo ucciso di salvare i dati eventualmente modificati.