AngoLinux

Piccola introduzione a Linux

- A cura del Prof. Stefano Salvi -


Sommario:

  1. Premessa
  2. L'autenticazione
  3. Il file system
  4. I dispositivi ed i file speciali
  5. Il sistema di protezione
  6. I comandi fondamentali

Premessa

Prima di far lavorare i ragazzi con Linux è stato necessario fare una piccola introduzione alle differenze tra Linux ed il sistema DOS cui gli studenti erano abituati.

L'introduzione è stata volutamente molto sintetica e limitata, per far sì che gli studenti sperimentassero da soli le varie possibilità di Linux e si ponessero in un atteggiamento di sperimentazione attiva, piuttosto che di ascolto ottuso.

Gli argomenti trattati sono i seguenti:

L'autenticazione

La prima cosa che si nota quando si avvia un sistema Linux, se si è abituati ad un sistema DOS o Windows (o anche ad un Macintosh o altri sistemi personali), è il fatto che il sistema non è immediatamente disponibile, ma si presenta con una richiesta:

<stazione> login:

Con questa richiesta il sistema ci chiede di "presentarci" (il termine esatto è autenticarci). Alla richiesta login noi dovremo rispondere con un nome di utente noto al sistema. Una volta introdotto il nome, il sistema ci chiederà:

password:

per essere sicuro che l'utente che si è presentato con quel nome di utente, sia proprio lui. Naturalmente la password ce la chiederà solo se l'utente ne ha selezionata una, altrimenti, una volta scritto il nome, il sistema sarà immediatamente disponibile.

Questo meccanismo di autenticazione è identico a quello utilizzato per i sistemi di rete (come il sistema netware utilizzato normalmente nel laboratorio). Il suo scopo è quello di conoscere l'utente che opera al terminale, per potergli mettere a disposizione le risorse a lui destinate.

In questo modo, una volta conosciuto il nome dell'utente, il sistema può posizionarlo sulla sua area privata.

Una seconda differenza fondamentale tra un sistema DOS e il nostro Linux è che il nostro video e tastiera non sono il sistema, cioè l'unica interfaccia verso il sistema. Il nostro video e la nostra tastiera sono un terminale, uno dei tanti terminali che potrebbero essere connessi al sistema.

Noi sappiamo che il sistema Linux, a differenza del DOS, è multiutente, vale a dire, può servire contemporaneamente più utenti, connessi a terminali diversi.

Una interessante caratteristica di Linux è quella di mettere a disposizione dell'utente un certo numero (definito da alcuni parametri di sistema, configurabili) di terminali virtuali diversi. Noi possiamo connettere il nostro video e la nostra tastiera a ciascuno dei terminali, utilizzando la combinazione di tasti Alt+<Tasto Funzione> oppure Alt+Ctrl+<Tasto Funzione>.

Questo ci dà accesso in maniera immediata fino a 12 diversi terminali indipendenti (da F1 a F12), ciascuno dei quali potrà svolgere compiti diversi indipendentemente l'uno dell'altro.

Naturalmente, in base alla configurazione del sistema, non necessariamente tutti i terminali virtuali saranno abilitati e non su tutti sarà possibile fare login.

Il file system

Nei sitemi DOS siamo abituati a riferirci alle varie unità disponibili utilizzando le lettere dell'alfabeto, quindi A: sarà il primo dischetto, C: il primo disco fisso, G: l'area locale della rete.
Inoltre, quando noi inseriamo un dischetto o un CD-ROM nel rispettivo lettore, il dispositivo è immediatamente disponibile.

Questo modo di gestione dei dispositivi richiede che l'utente abbia una conoscenza dei dispositivi connessi al computer ed inoltre non consente una ottimizzazione adeguata delle letture/scritture.

In un sistema Linux o più in generale Unix l'utente non deve avere conoscenza delle caratteristiche della macchina, in quanto la gestione della macchina è riservata all'amministratore del sistema.

In questo tipo di sistemi all'utente viene presentato un unico "dispositivo", come fosse un unico disco. In realtà alcune sottodirectory di questo "dispositivo" sono gli altri dispositivi fisici.

La connessione e disconnessione dei dispositivi dalle directory viene fatta dall'amministratore di sistema con dei comandi che vedremo poi.

Un'altra grossa differenza tra i sistemi DOS e i sistemi Unix è che il nome di file e directory non è limitato a 8+3 lettere, ma può essere molto più lungo, di 32 o più caratteri, a seconda del sistema.

Inoltre, i caratteri maiuscoli e minuscoli sono entrambi leciti e considerati diversi. Anche il carattere "." non ha un significato particolare, visto che il tipo del file non è indicato dai tre caratteri dopo il punto, e addirittura un nome può contenere più punti o nessuno.

Ogni sistema Linux ha una serie di directory che vengono usate in maniera standard. In genere in ogni sistema troveremo queste directory, indipendentemente dalla distribuzione, ed avranno lo stesso scopo.

Il sistema di directory di Linux è una estensione del sistema di directory di Unix, quindi, trovandoci in un sistema Unix, in genere, troveremo diverse delle directory di Linux, con lo stesso uso.

Vediamo quindi le directory che troviamo nella directory principale, detta root ed indicata con il simbolo / (attenzione, per gli utenti di sistemi Microsoft, che la barra che separa le directory non è la barra rovesciata \ ma la barra normale /, quella che si trova sopra il 7).

bin
È la directory che contiene i programmi principali del sistema, quelli che devono essere disponibili subito all'accensione, per poter avviare i sistema.
cdrom
È una directory vuota, alla quale l'amministratore di sistema potrà collegare (si dice montare) un disco inserito nel lettore CD-Rom.
dev
In questa directory non ci sono dei file veri e propri. Questa directory contiene dei file speciali che non si riferiscono a dati sul disco ma che vengono usati per indicare al sistema i dispositivi. più oltre parleremo di questi file.
etc
La directory etc è una delle più importanti del sistema perché contiene la quasi totalità dei file di configurazione del sistema, compresi quelli che servono per la fase di accensione.
floppy
Come la directory cdrom questa è una directory vuota, predisposta perché l'amministratore di sistema vi "monti" un floppy disk.
home
Questa directory contiene le 'aree locali' dei singoli utenti. Quando un utente si collega facendo login, egli non si trova nella directory principale del sistema (la root /) ma viene posizionato in genere in una directory "privata", diversa per ogni utente. Questa directory, detta home, cioè "casa", in genere ha il nome dell'utente ed è una sottodirectory della directory home.
lib
Questa directory coniene le librerie di sistema, cioè quegli archivi di funzioni utilizzati da tutti. Troveremo in questa directory le librerie di funzioni utilizzate dal linguaggio C, richiamate da tutti i programmi compilati in questo linguaggio, ma anche varie librerie utilizzate da altri linguaggi o sistemi.
lost+found
È una directory di sistema, utilizzato dal programma fsck (file system check) che controlla la coerenza del file system. In questa directory vengono poste come file le sequenze di settori che, a causa di problemi vari, non sono collegate ad alcun nome (i cosiddetti file persi).
mnt
È un'altra directory vuota, come la cdrom o la floppy, predisposta per poterci montare un qualunque dispositivo.
proc
Anche questa directory è una directory usata per montare un filesystem. Questo filesystem è però un filesystem virtuale, che non corrisponde a spazio su nessun dispositivo, ma consente di accedere, come fossero registrate su file, alle informazioni su tutto il sistema, come tipo di CPU, quantità di memoria, dispositivi disponibili e altro.
root
Questa è la directory "privata" dell'amministratore di sistema (che, come la directory principale, si chiama root). Questa directory non si trova, come le altre directory "private", nella home in quanto non è detto che la directory home risieda nel disco di avvio (come invece certamente risiederà la directory root). Se ci fossero dei problemi all'avvio, chi dovrebbe risolverli sarebbe sicuramente l'amministratore di sistema root, che quindi dovrebbe poter accedere alla sua directory personale per operare.
sbin
In questa directory compaiono altri programmi indispensabili per l'accensione del sistema, come nella directory bin. In linea di massima i programmi in sbin sono relativi alla rete.
tmp
In questa directory vengono immagazzinati i file temporanei durante le elaborazioni. Il contenuto di questa directory viene cancellato ad ogni accensione.
usr
In questa directory risiede la maggior parte del sistema. In usr e nelle sue sottodirectory risiedono tutti i programmi installati, i file del manuale, la documentazione ed altro ancora. Praticamente tutto il sistema risiede in questa directory. Una caratteristica di usr è che i suoi file in genere devono essere solo letti.
var
La directory var contiene, nelle sue sottodirectory, i file che registrano gli eventi del sistema (i cosiddetti log). Oltre ai log in questa directory troviamo le code di stampa ed in genere tutti i file di sistema che vengono modificati. Nella directory var per esempio troviamo le caselle postali ed il contenuto del sito web della macchina.

Il contenuto della directory etc è molto vario e la struttura delle sue sottodirectory dipende anche dalla distribuzione installata.

I dispositivi ed i file speciali

Come è possibile in Linux indicare un dispositivo?

Come già si può vedere in DOS, dove per inviare un file alla stampante si fa una copia sul "file" PRN: oppure LPT1:, anche in Linux si fa uso di file speciali per riferirsi ai dispositivi.

In DOS i file speciali sono nascosti all'interno del sistema e non possono essere visti. Al contrario in Linux questi file sono visibili e sono in genere raggruppati nella directory /dev.

I principali dispositivi sono:

fd0
corrisponde al floppy A:
fd1
corrisponde al floppy B:
hda, hdb, hdc, hdd
Sono i quattro possibile dischi fissi IDE.
hda1, hda2, hda3, hda4
Sono le quattro partizioni primarie del primo disco fisso IDE.
hda5, ...
Sono le partizioni secondarie (unità logiche) del primo disco fisso IDE.
hb1, ...
Sono le partizioni di tutti gli altri dischi fissi IDE.
ttyS0, ttyS1
Sono le porte seriali rispettivamente COM1 e COM2.
tty0, ...
Sono i terminali che corrispondono agli utenti. In realtà questi dispositivi corrispondono ai terminali virtuali associati, come visto prima, ai tasti funzione.
lp0, lp1, lp2
Sono le porte parallele LPT1 e LPT2. Occorre stare attenti che lp0 si riferisce alla porta associata alla scheda video (sulle vecchie schede video) mentre lp1 si riferisce alla prima parallela separata dalla scheda video. In genere, la parallela cui è connessa la stampante è lp1.

Va subito notato che nella directory /dev vengono in genere messi file per ogni possibile dispositivo. Non è assolutamente detto che se esiste un dispositivo nella directory /dev il sistema possieda tale dispositivo e quindi noi lo possiamo usare.

Ad esempio, in /dev compare quasi sempre il dispositivo cdrom, ma se il nostro sistema non è dotato di CD-Rom noi non potremo utilizzare il dispositivo.

Il sistema di protezione

Come abbiamo visto più sopra, prima di accedere al sistema occorre autenticarsi indicando un nome di utente conosciuto dal sistema.

Gli utenti, a loro volta, appartengono a gruppi. Ogni utente deve appartenere almeno ad un gruppo, ma può appartenere a più gruppi.

Il nome dell'utente ed il nome del gruppo di appartenenza (o meglio, l'identificativo dell'utente e l'identificativo del gruppo o user id e group id) sono alla base dello schema di protezione dei file di Linux.

Per ogni file ed ogni directory abbiamo tre possibili diritti indipendenti:

Se su un file ho diritto di lettura, ovviamente lo posso leggere. Se ho diritto di lettura su di una directory posso listarne i file.

Se ho diritto di scrittura su di un file posso modificarne il contenuto o cancellarlo. Se ho diritto di scrittura su di una directory posso creare e cancellare file in quella directory.

Se ho diritto di esecuzione su di un file, posso eseguirlo. Naturalmente per eseguire un file esso deve essere un programma o uno script. Per programma si intende un file contenete istruzioni eseguibili dal processore, mentre per script si intende un file di testo che può essere eseguito da qualche interprete, come ad esempio l'interprete di comandi o shell.

Nel caso delle directory, il diritto di esecuzione consente di rendere la directory stessa directory corrente o di vedere il contenuto delle sue sottodirectory.

I tre tipi di diritti descritti (r, w e x) sono associati al file, ma dipendono anche dall'utente che sta cercando di eseguire l'operazione.

Ad ogni file sono associati un utente, detto creatore o proprietario del file, che è l'utente che ha creato il file, ed un gruppo, che in genere è il gruppo a cui appartiene il creatore.

Ogni file possiede tre gruppi di diritti. Il primo gruppo comprende i diritti (r, w e x) di cui gode il proprietario del file. Il secondo gruppo comprende i diritti degli utenti appartenenti al gruppo cui è associato il file, mentre il terzo gruppo indica i diritti di ogni altro utente che non sia né il proprietario né appartenga al gruppo del file, indicati in genere come resto del mondo.

A questa regola esiste una sola eccezione. L'amministratore di sistema (l'utente root) ha i diritti del proprietario per qualunque file presente nel sistema, qualunque sia il proprietario reale del file.

I comandi fondamentali

Una volta capita la struttura del sistema ed il sistema di protezione, è opportuno ora elencare in estrema sintesi alcuni comandi fondamentali per poter operare con il sistema.

ls
consente di elencare i file in una directory. Se non si indica nessun parametro, elenca i soli nomi di tutti i file della directory corrente.
Il parametro -l consente di vedere l'elenco in modo esteso. Oltre al nome vengono indicati i diritti, il proprietario, il gruppo la lunghezza e la data. Ad esempio, nella seguente riga di ls -l:
drwxrw-r--   1 nobody   nogroup       625 Jan 12  1998 source
La d indica che source è una direttori.
Le lettere rwx indicano i diritti del proprietario (lettura, scrittura ed esecuzione).
Le lettere rw- indicano i diritti del gruppo del file (lettura e scrittura).
Le lettere r-- indicano i diritti del resto del mondo (sola lettura).
Il numero 1 indica il numero di link associati al file (per ora non ci interessa).
nobody è il proprietario del file.
nogroup è il gruppo del file.
625 è la dimensione del file.
Jan 12 1998 è la data di creazione del file.
e per finire source è il nome del file, o della directory, in questo caso.
man
consente di consultare il manuale in linea. Per poter leggere la pagina del manuale che parla di ls, ad esempio, si può usare il comando:
man ls
La versione di base del manuale è ovviamente in inglese. È anche disponibile, per alcune pagine, la versione italiana. Se questa versione è disponibile, ma non viene visualizzata, provate con il comando:
man -L it_IT ls
stando attenti alle maiuscole ed alle minuscole.
Se poi volete vedere sempre le pagine in italiano, se disponibili, date i seguenti due comandi:
LANG=it_IT
export LANG
sempre stando attenti alle maiuscole ed alle minuscole.
more
è un cosiddetto paginatore. Serve quando un comando invia a video parecchie pagine di risultati, che ci scorrono davanti agli occhi senza che noi possiamo leggerle.
Si usa tramite la pipe messa a disposizione dal sistema, che convoglia l'uscita di un programma nell'ingresso di un altro. Proviamo ad esempio a dare il comando:
ls /dev | more
dove | è il comando pipe che convoglia l'uscita di ls /dev nell'ingresso di more.
Il risultato sarà che dopo ogni pagina (24 righe) dell'uscita di ls il programma more che chiederà:
--more--
ed attenderà che noi premiamo lo spazio o l'invio prima di proseguire, consentendoci di leggere quanto stampato da ls.
less
è un paginatore migliorato rispetto a more. Con less noi possiamo scorrere l'uscita del programma sia in avanti che indietro, usando i tasti freccia della tastiera.
pwd
sta per print working directory, vale a dire, "stampa la directory di lavoro".
cd
change directory serve per cambiare la directory di lavoro corrente. Ricordo che, visto che le varie unità del DOS in Linux sono sostituite da sottodirectory, cd ci consente anche di cambiare unità.
mkdir
make directory serve per creare una nuova directory.
rmdir
remove directory serve per cancellare una directory. Funziona solo con le directory vuote.
cp
copy serve per copiare file o gruppi di file. Richiede sempre una sorgente e una destinazione. Se non si indica la destinazione, viene dato un messaggio di errore, non viene usata la directory corrente come destinazione. La sorgente può essere un unico nome di file o una lista. La destinazione può essere un nome di file (solo nel caso la sorgente indichi un unico file) oppure un nome di directory.
mv
move serve per spostare o cambiare nome ad uno o più file. La sintassi è identica a quella del comando cp.
rm
remove serve per cancellare uno o più file. Con l'opzione -r (ricorsivo) consente di cancellare anche le sottodirectory, compreso il loro contenuto.
who
stampa il nome di tutti gli utenti attualmente connessi al sistema. Oltre al nome degli utenti ci indica su che terminale sono connessi e quando si sono collegati.
whoami
stampa il nome con il quale ci siamo connessi al sistema. È utile se abbiamo la possibilità di connetterci al sistema con nomi diversi.
ps
consente di visualizzare lo stato dei programmi presenti nel sistema. Lanciato senza parametri, visualizza i dati dei programmi associati con l'utente che ha lanciato ps. Se invece usiamo il parametro -a, il comando visualizza tutti i processi del sistema, anche quelli associati ad altri terminali o non associati a nessun terminale (i cosiddetti daemon).
Un dato fondamentale relativo ai processi è il process identifier o pid che consente di individuare univocamente il processo.
kill
serve per inviare messaggi ai processi. Il primo parametro di kill è il messaggio da inviare, i parametri seguenti sono i pid dei processi che devono ricevere il messaggio, come possono essere ottenuti da ps.
I messaggi che possono essere inviati sono vari. I più importanti sono SIGTERM e SIGKILL (vanno scritti in maiuscolo) che servono (in maniera più gentile o può brusca) per far terminare un programma che non risponde più correttamente (o nel quale non ci siamo ricordati di introdurre un comando per farlo terminare).
mount
è un comando che può essere usato solo dall'amministratore di sistema (l'utente root). Questo comando serve per rendere disponibile il disco inserito in un dispositivo. Ad esempio, per utilizzare un dischetto inserito nel floppy A: (che in Linux si chiama /dev/fd0) e vederne il contenuto sotto la directory /floppy dovremo inviare il comando:
mount /dev/fd0 /floppy
Questo comando va bene se il floppy è formattato con un filesystem di Linux (ext2 o minix). Se invece il disco è un disco formattato in DOS o con Windows 95 potremo ancora usarlo sia per leggere che per scrivere, ma dovremo indicare al sistema di usarlo come un disco di Windows 95, usando un ulteriore parametro nella mount, come segue:
mount /dev/fd0 /floppy -t vfat
Se si usa il parametro -r, il disco viene montato in sola lettura, indipendentemente dal supporto e dallo stato dell'etichetta di sola lettura.
umount
può sempre essere usato solo dall'amministratore di sistema. Serve per sconnettere un dispositivo. Prima di estrarre un dischetto o un CD-Rom dal rispettivo lettore è indispensabile smontarlo, per evitare guai al sistema o gravi problemi al dispositivo, nel caso sia scrivibile come un floppy.
Umount richiede un unico parametro, che può essere il nome del dispositivo (ad esempio /dev/fd0) o il nome della directory in cui è montato (ad esempio /floppy). Il comando non riesce se nel dispositivo ci sono file aperti oppure la directory di lavoro di qualche utente. In questo caso occorre chiudere i file e cambiare la directory di lavoro dell'utente.

Naturalmente Linux possiede moltissimi altri comandi. Alcuni di questi vengono indicati nel manuale dei comandi indicati. Inoltre gli stessi comandi descritti hanno molti più parametri ed opzioni di quelli indicati.

Consiglio quindi di leggere il manuale dei comandi e di sperimentare quello che si legge.


[Home Page dell'ITIS "Fermi"] [Indice Angolinux] [Precedente] [Successivo]