Introduzione a Linux
Prof. L. Ilardi
Sistema di Elaborazione
Un sistema di elaborazione è composto da un insieme
di componenti fisici (hardware) tra cui la CPU, la
memoria centrale, le unità di memoria di massa, e un
insieme di programmi (software) che usano
l’hardware per svolgere dei compiti di interesse per
gli utenti del sistema.
Nella maggior parte dei computer moderni, i
programmi attivati dagli utenti (applicazioni) non
accedono all’hardware direttamente, ma attraverso la
mediazione di uno strato di software detto Sistema
Operativo.
Cos’è un sistema operativo?
Un Sistema Operativo (S.O.) è un insieme di
programmi che operano sull’hardware di un
calcolatore con l’obiettivo di:
semplificare lo sviluppo di programmi
realizzare politiche di gestione delle risorse hardware
Il Sistema Operativo si pone come interfaccia tra
l’utente (o il software) e l’hardware, fornendone
un’astrazione
Introduzione
Linux è un sistema
operativo il cui Kernel è
stato sviluppato da Linus
Torvald nel 1991.
Esso si è sviluppato poi
rapidamente perché il suo
codice sorgente è stato
immediatamente
reso
disponibile in rete
GNU/LINUX
In realtà si deve parlare di
sistema GNU/LINUX.
GNU è il nome di un
software completo UNIXCompatibile, che rientra
nella
definizione
di
“Software libero”.
Il progetto GNU,
completo,
tranne
componente: il Kernel
era
un
Software Libero
Il nucleo di LINUX è
distribuito in accordo con
la GNU General Public
License (GPL), i cui
termini sono stabiliti dalla
Free Software Fondation
Il sistema LINUX non è di
pubblico
dominio,
tuttavia è LIBERO
Componenti del Sistema 1/2
Componenti del Sistema 2/2
Kernel è il responsabile del mantenimento di tutte le
più importanti astrazioni del sistema operativo
System Libraries definisce un set standard di funzioni,
attraverso cui le applicazioni possono interagire con il
kernel.
System Utilities sono programmi che compiono
compiti specializzati di gestione, come quelli di
configurazione.
Autenticazione
Sistema multi-utente, multi-processo
In ingresso al sistema forniamo username e password
Il file etc/passwd contiene tutte le informazioni
relativa all’utente:
account : password : numero_utente: numero_di_gruppo :
commenti : cartella : programma_di_avvio
Esempio: root:x:0:0:root:/root:/bin/bash
La password non è però memorizzata in tale file
Verificate la corrispondenza delle informazioni,
Esempio passwd
La Shell Bash
La Shell è un’interfaccia tra l’utente ed il sistema
operativo. Il suo compito è leggere i comandi
impostati dall’utente, interpretarli e richiedere al
sistema l’esecuzione delle operazioni corrispondenti.
BASH è il nome della shell di Linux più diffusa.
nei primi sistemi, l’utilizzo della shell avveniva
attraverso terminali alfanumerici (tipicamente
connessi al computer tramite linee seriali o modem)
detti TTY (da TeleTYpe)
attualmente si accede alla shell attraverso programmi
Come si presenta il prompt
il prompt di bash (personalizzabile dall’utente)
contiene informazioni come il nome della macchina, la
directory corrente e il nome dell’utente, seguite dal
carattere “$”
quando viene visualizzato il prompt, l’utente può
digitare un comando per la shell; il comando viene
terminato dal tasto di fine linea
la shell interpreta ed esegue il comando (che può
produrre la stampa di informazioni di output),
dopodiché presenta di nuovo il prompt e si rimette in
Bash
Sintassi comandi
La sintassi dei comandi di base è semplice:
comando [argomento...] [modificatore...]
il nome del comando indica l’operazione da effettuare
gli argomenti (separati da spazi) specificano opzioni
del comando o i dati su cui il comando deve agire
(tipicamente, nomi dei file)
i modificatori (introdotti da caratteri speciali) sono
interpretati dalla shell e cambiano il modo in cui la
Per incominciare…
man [sezione] comando
visualizza la documentazione del comando passato
come argomento (se disponibile)
durante la visualizzazione, si usa il tasto “spazio” per
andare avanti, il tasto “b” per tornare indietro e il
tasto “q” per uscire dal manuale
il manuale è diviso in diverse sezioni, che contengono
oltre ai comandi della shell, le API del sistema
operativo, la libreria standard del C e altre
informazioni; è possibile specificare una particolare
man
Comandi Shell
Muoversi nel File System
Agire sui file e sulle directory
Verificare e modificare permessi e protezioni sui file
Ottenere informazioni sui processi
File System 1/2
Il file system, è il sistema di gestione delle
informazioni memorizzate sulla memoria di massa
Un file è essenzialmente un contenitore di dati
omogenei.
In Linux il nome di un file non può iniziare con un
numero e non può contenere caratteri particolari
come punti interrogativi o asterischi
Linux è un sistema case sensitive
Esistono diversi tipi di file: i file comuni, le directory, i
File System 2/2
Un filesystem composto
da directory può anche
essere paragonato ad un
albero, dove la directory
principale o root o radice
o /, rappresenta il tronco,
mentre le sottodirectory
rappresentano i rami
dell'albero.
Partendo
dalla directory radice si
può arrivare ad un file
qualsiasi all'interno di una
Porzione File System Linux
home
etc
corso.txt
lettere
nora
Andrea
marco
passwd
/
bin
vmlinuz
bash
ls
Comandi per muoversi nel file
system
se un pathname comincia con ‘/’, il punto di partenza
del percorso è la root directory, e il pathname si dice
assoluto, altrimenti il percorso comincia dalla
directory corrente, e il pathname si dice relativo;
il comando che consente di cambiare directory
corrente è:
cd [pathname]
se il pathname non è indicato, ritorna alla home
il comando pwd stampa il pathname della directory
Comandi per muoversi nel File
System
Quando viene creata una nuova directory, vengono
create in automatico due “sottodirectory speciali”
chiamate . (punto) e .. (punto punto).
La prima fa riferimento alla directory corrente, la
seconda alla directory padre.
mkdir e rmdir invece creano e distruggono una
Crea una nuova
directory specificata con pathname
$ mkdir ./prova
sottodirectory della
directory corrente
Comando ls
mostra il contenuto di una directory.
La sintassi è: ls [opzioni...] [pathname...]
se non viene specificato un pathname, mostra il
contenuto della directory corrente se il pathname
indica una directory, mostra il contenuto della
directory specificata altrimenti mostra le informazioni
relative al file indicato dal pathname
normalmente viene mostrato solo il nome dei file;
l’opzione -l visualizza informazioni più ́ dettagliate
Comandi sui file
Le operazioni di base sui file:
cp copia uno o più file
mv rinomina o sposta uno o più file
rm cancella uno o più file;
Nota bene: non è possibile annullare la cancellazione!
Le opzioni di questi comandi consentono (tra le altre
cose) di effettuare le operazioni ricorsivamente su un
intero albero di directory.
Il comando mv funziona anche con le directory; i
sintassi comandi
Comando
effetto
cp nome_file1 nome_file2
Copia il contenuto del file1, nel file2,
sovrascrivendo il secondo
cp
nome_file1
directory
[file2
file3…] Copia i file nella directory specificata dal
pathname
cp –r directory_s directory_d
Copia la directory sorgente
directory destinazione
cp –i nome_file1 nome_file2
Copia avvertendo che si sovrappone il
contenuto
mv … …
Ammette le stesse opzioni di copy. La
differenza è che elimina la sorgente
dopo la copia
rm nome_file
Rimuove il file
rm –r directory
Rimuove
in
(Attenzione!!)
forma
nella
ricorsiva
Esempio Comandi
Caratteri Speciali 1/2
Se l’argomento di un comando contiene il carattere ?
o il carattere *, la shell espande l’argomento
sostituendolo con la lista dei nomi dei file che
“combaciano” con l’argomento, dove un nome di file
viene considerato combaciante se:
i caratteri non speciali dell’argomento corrispondono a
caratteri identici del nome del file
le occorrenze del carattere ? nell’argomento
corrispondono a un singolo carattere qualsiasi del nome
del file
Caratteri Speciali 2/2
Anche i caratteri [ e ] (parentesi quadre) e { e }
(parentesi graffe) sono espansi facendo riferimento ai
nomi dei file; in particolare:
la sequenza [abc...] nell’argomento può combaciare con
uno qualsiasi dei caratteri ‘abc...’ nel nome del file; è
possibile indicare anche intervalli di caratteri con una
notazione del tipo: [a-z] (tutti i caratteri da ‘a’ fino a ‘z’
inclusi)
la sequenza [ˆabc...] nell’argomento può combaciare
con un singolo carattere che non sia uguale a nessuno
Esempi caratteri speciali
esempi ? e *
Esempi [ e ] e { e }
* tutti i file della directory
corrente
[aeiou]* tutti i file (della
directory corrente) il cui
nome comincia per vocale
??? tutti i file della
directory corrente con un
nome di tre caratteri
*.txt tutti i file il cui nome
finisce in .txt nella
directory corrente
[ˆaeiou]* tutti i file il cui
nome non comincia per
vocale
*[0-9][0-9]* tutti i file il
cui nome contiene due
cifre decimali consecutive
Esercizio
Data la porzione di file
system a lato, utilizzando
solo pathname assoluti,
indicare
i
comandi
necessari per visualizzare:
home
…
bin
melodia
giallo
bianco
altro
gioielli
collane
oro
nora
gabriele
I nomi dei file sotto la
directory oro
I nomi dei file presenti
sotto la directory gabriele
I nomi dei file presenti
sotto la directory bin
/
Esercizio
Data la stessa porzione di file system, supponendo di
essere posizionati nella directory nora, scrivere i
comandi necessari per:
Copiare il file collane su un file novecento sotto la stessa
directory oro, usando pathname assoluti
Copiare il file bianco in biancoAntico, sotto la stessa
directory gioielli, usando pathname relativi
Copiare tutti i file presenti nella directory gioielli sotto la
directory altro
find
Il comando find consente di effettuare in modo
semplice la visita di un albero di directory, selezionando
i file che soddisfano alcune condizioni e applicando ad
essi delle operazioni.
Sintassi:
find pathname... [operazioni...]
i pathname specificati indicano i punti di partenza della
visita ricorsiva delle directory
Alcuni criteri di selezione per find
Nome criterio
significato
-name nome
seleziona i file con nome che
corrisponde all’argomento
-iname nome
Come –nome, e non considera
minuscolo o maiuscolo
-ctime n
Seleziona i file creati n giorni fa
-mtime n
Seleziona i file modificati n giorni fa
-atime n
Seleziona i file acceduti n giorni fa
-empty
Seleziona i file vuoti
-size n
Seleziona i
dimensione
-type c
seleziona i file e le directory il cui
tipo è specificato dal carattere c (es:
f indica un file normale, d una
directory)
file
di
una
data
Alcune Azioni
Azione
significato
-print
stampa su standard output il
pathname del file selezionato
(azione di default)
-fprint file
la scrittura viene effettuata sul file
specificato
-exec comando argomenti... ‘;’
esegue per ciascun file selezionato il
comando indicato; all’interno degli
argomenti la stringa ’{}’ è sostituita
dal pathname del file selezionato
-ok comando argomenti... ’;’
simile a -exec, ma chiede conferma
all’utente prima di eseguire il
comando
Alcuni esempi
Comando
Significato
find . –iname ’*.pdf’
Stampa tutti i file pdf
find . -atime +100
Stampa i file non usati da almeno
100 giorni
find . -iname ’*.avi’ -size -1024k
Stampa i file di estensione avi, di
dimensione inferiore ad 1 MB
find new -type f -atime +365 -exec
mv ’{}’ old ’;’
Sposta nella cartella old, tutti i file in
new a cui non si accede da più di un
anno
find . -iname ’*.bak’ -ctime +9 -ok rm
’{}’ ’;’
rimuove tutti i file di estensione bak,
creati più di 9 giorni fa chiedendo
conferma
Esercizi
Scrivere nel file large.txt l’elenco dei file di piu di un
megabyte.
Scrivere nel file modificati.txt, l’alenco dei file
modificati da meno di 10 giorni
Copiare tutti i file con estensione pdf e txt in una
cartella mydocuments.
Protezione dei File 1/2
Ad ogni file e directory, il
sistema associa una serie
di informazioni tra cui:
Nome del proprietario
Nome del gruppo
appartenenza
Tipo di file
Dimensione
di
I permessi di accesso al file
sono descritti da tre triple
di attributi di protezione.
Ogni tripla consiste di tre
flag
Accesso in lettura, flag “r”
Accesso in scrittura, flag
“w”
Accesso in esecuzione, flag
Protezione dei File 2/2
Mediante il comando “ls –l” si possono ottenere diverse
informazioni sui file, tra cui le informazioni sul tipo di file
e le protezioni in corrispondenza della prima colonna.
-rw-r--r-drwxrwx--x
Il primo elemento indica il tipo di file:
-: file normale
d: directory
c: file speciale a caratteri
esempio
Tipo file
Proprietario
Gruppo
altri
-
rw-
r--
r--
File normale
Permesso di
lettura e
scrittura
Permesso di sola
lettura
Permesso di sola
lettura
d
rwx
rwx
--x
Directory
Permesso di lettura Permesso di lettura
del contenuto della del contenuto della
directory e
directory e
modifica. E di
modifica. E di
“attraversamento” “attraversamento”
Permesso di
attraversamento
della directory
Esempio permessi
root
Il termine root (o super utente o superuser) viene
utilizzato nei sistemi Linux, per indicare il nome
utente predefinito dell’amministratore di sistema.
L’utente root è colui in grado di compiere operazioni
non consentite ad utenti standard
Esso può lavorare su ogni risorsa senza essere limitato
dai permessi
Il super user ha poteri assoluti sul sistema. Il suo
prompt standard è il carattere “#”.
Cambiare i permessi
I comandi per la modifica dei permessi, tipicamente in
modalità super user, sono i seguenti:
chown [-opzioni] nuovo_utente file
chgrp [-opzioni] nuovo_gruppo file
Ad un utente è permesso modificare il permesso dei
file che gli appartengono tramite il comando:
chmod [-opzioni] modifica_permessi file
Forma simbolica
Codici utente
Descrizione
U
proprietario
G
Gruppo
O
Altri
Operatori
Descrizione
+
Aggiunge permessi
-
Rimuove permessi
Codici Permesso
Descrizione
R
Lettura
W
Scrittura
X
esecuzione
Forma ottale
La forma ottale è costituita da 3-4 cifre che possono
assumere valore da 0 a 7. La prima è opzionale e non
la trattiamo. Ogni cifra è interpretata come somma
delle prime 3 potenze del 2( 20,21, 22):
0400 lettura consentita al proprietario
0200 scrittura consentita al proprietario
0100 esecuzione consentita al proprietario
0040 lettura consentita al gruppo
Esempi comandi
comando
esito
chmod o-rw nome_file
Elimina i permessi di lettura e scrittura
per gli utenti non appartenenti al gruppo
dell’utente proprietario
chmod a+rw nome_file
Aggiunge il permesso di lettura e
scrittura a tutti
chmod g+w nome_file
Aggiunge il permesso di scrittura al
gruppo
chmod 0700 nome_file
Permesso di scrittura, lettura ed
esecuzione per il proprietario e alcun
permesso per il gruppo e gli altri
chmod 0764 nome_file
Permesso di esecuzione, lettura e
scrittura al proprietario, lettura e
scrittura al gruppo, sola lettura ai
rimanenti
Esercizi per cambio dei permessi
Dare al file risultati di nostra proprietà, presente sotto la
directory corrente, i permessi di:
1.
Solo lettura da parte di qualunque utente;
2. Lettura, scrittura, esecuzione per noi e nulla per gli altri
3. Scrittura ed esecuzione per noi e solo esecuzione per
gli atri
4. Lettura, scrittura ed esecuzione per noi e per il nostro
gruppo e solo lettura per gli altri
Standard input, standard output,
standard error
I processi lanciati dalla shell hanno sempre almeno tre
stream aperti:
lo standard input, normalmente collegato alla tastiera,
da cui vengono effettuate operazioni come la scanf del C
lo standard output, normalmente collegato al terminale,
su cui vengono effettuate operazioni come la printf del
C
lo standard error, anch’esso associato al terminale, su
cui di solito i comandi effettuano la scrittura dei
messaggi di errore
Per ridirigere lo standard input e
standard output
Sintassi
comando < pathname
quando il processo effettua un’operazione di input, il
dato viene letto dal file specificato in luogo della
tastiera
il file deve essere un file di testo contenente la
sequenza di caratteri che l’utente avrebbe digitato da
tastiera
Sintassi
Thread e Processi
Un processo è un programma in esecuzione che
utilizza le risorse ad esso allocate.
Un thread (detto processo leggero) è un flusso di
esecuzione che condivide delle risorse con altri
thread.
I processi rappresentano l’esecuzione di un unico
programma, mentre i thread rappresentano contesti
di esecuzione distinti e concorrenti all’interno di un
singolo processo che esegue un singolo programma
Il kernel di Linux non distingue tra thread e processi.
Gestione dei processi in Linux
Identità dei processi:
Identificatore del processo (PID): identificatore univoco
del processo per segnalarlo al SO
Credenziali: Identificatore di utente o di gruppo, che ne
determinano i diritti di accesso al sistema ed ai file
Personalità: può modificare la semantica di alcune
chiamate di sistema
Ambiente di un processo: è ereditato dal padre e
consiste di 2 vettori, il primo degli argomenti, il
Comandi per informazioni sui
processi
Acuni comandi per il processo sono:
ps: elenca i processi in esecuzione
pstree: Elenca i processi in esecuzione in modo
strutturato
top: Mostra l’utilizzo delle risorse da parte dei processi
ad intervalli regolari
id: da informazioni su UID e GID
Comando ps
Il comando ps stampa l’elenco dei processi attivi.
Sintassi
ps [opzioni...]
Per default, il comando visualizza solo i processi
dell’utente corrente che sono stati creati da un
terminale. Le seguenti opzioni cambiano la
visualizzazione:
l elenco composto da più elementi informativi
u viene indicato il particolare utente a cui appartiene il
Esempi ps
Comando
Effetto
ps
Elenca i processi appartenenti
all’utente che da il comando
ps a l
Elenca tutti i processi fornendo un
dettaglio più ampio
ps a r
Elenca tutti i processi in funzione
esclusi quelli in pausa
Processo in background
Se un comando è seguito dal carattere speciale &, il
processo che viene creato diventa un processo in
background (lett. “sullo sfondo”). La shell non
attende la terminazione del processo prima di passare
al comando successivo, e i caratteri che l’utente digita
non vengono passati come standard input al
processo.
I processi in background sono normalmente utilizzati
per operazioni lunghe, di cui l’utente non vuole
aspettare la terminazione. Inoltre, mentre i processi in
foreground sono normalmente terminati quando
l’utente chiude la shell, i processi in background
Il comando kill
Il comando kill consente l’invio di un segnale a un processo. Il
segnale può essere usato, tra le altre cose, per forzare la
terminazione del processo.
Sintassi
kill [segnale]
pid...
Segnale
significato
-TERM
Terminazione del processo
-KILL
Terminazione forzata del
processo
-STOP
Sospensione del processo
I comandi fg e gb
Un processo può essere sospeso inviandogli il segnale STOP, oppure (se è in foreground) digitando CTRL-Z.
Un processo sospeso può essere ripreso in background
usando il comando:
bg [pid]
oppure può essere ripreso in foreground usando il
comando:
fg [pid]
Esempio
Provare i comandi alla slide precedente per poi
discuterne in classe. Ad esempio si consideri il seguente
comando, si spieghi cosa compie e quindi si uccida il
processo associato:
find / > elenco.txt &