Amministrazione Linux
Fasi iniziali
Processo di avvio del sistema
Processo di Init
RunLevel
Generalità sui processi
Comandi di amministrazione del sistema
File di configurazione /etc
Esercitazioni Estrarre il bootsector su di un floppy e su una
partizione Fat
1
Avvio del sistema
Uno degli aspetti più importanti e potenti di Linux è il metodo utilizzato
per avviare e arrestare il sistema operativo.
Al momento dell'avvio Linux carica i programmi in ordine specifico e
configurabile e, successivamente, potete liberamente cambiare i file di
configurazione che controllano il processo di avvio oltre ai file di configurazione
per i programmi eseguiti in fase di avvio.
In modo simile, l'arresto del sistema interrompe i processi in modo organizzato
e configurabile, anche se la personalizzazione di questo processo è raramente
necessaria.
La comprensione del funzionamento dei processi di avvio e di arresto non solo
vi consente di personalizzare in modo semplice Linux, ma vi aiuta a determinare
la fonte esatta della maggior parte dei problemi legati all'avvio o allo
spegnimento del sistema.
2
Il processo di avvio
•
Di seguito sono riportate le fasi principali del processo di avvio per un
sistema x86:
•
Il sistema BIOS (Basic Input/Output System) controlla il sistema e avvia il
boot loader della prima fase nel file MBR del disco fisso primario.
•
Il boot loader della prima fase viene caricato in memoria e consente di
avviare il boot loader della seconda fase dalla partizione /boot/.
•
Il boot loader di seconda fase carica il kernel in memoria, che a suo turno
carica tutti i moduli e monta la partizione root di sola lettura.
•
Il kernel trasferisce il controllo del processo di avvio al programma
/sbin/init.
•
Il programma /sbin/init carica tutti i servizi e gli strumenti user-space e
monta tutte le partizioni in /etc/fstab. Controllare i file mstab e stab
•
L'utente viene presentato con un prompt di login per il sistema di Linux
appena installato.
3
vmlinuz e initrd
•
Il kernel e' un file presente nella directory /boot che si chiamaa vmlinuz- (per
esempio: vmlinuz-2.6.0-xx).
•
Di solito per evitare di riscrivere lilo.conf viene creato un link simbolico vmlinuz
•
Oltre al kernel, viene caricata in memoria anche l'immagine RAM disk iniziale. Tale
immagine si chiama initrd ed e' utilizzata dal kernel per caricare in memoria tutti i
driver non compilati all'interno del kernel stesso che sono necessari per avviare il
sistema.
•
Una delle prime cose che fa il kernel di Linux e' quella di commutare il processore da
modalita' reale a modalita' protetta
•
In questa modalita' non e' possibile accedere direttamente alla memoria e
all'hardware del PC ma occorre passare attraverso delle chiamate al sistema
operativo
•
Una volta configurati tutti i dispositivi, il kernel smonta l'immagine del disco initrd, crea
il dispositivo root, monta la partizione di root in sola lettura e libera la memoria.
•
Il kernel controlla l’hardware presente perché tra un avvio e l'altro la configurazione
potrebbe anche cambiare, percio' scandaglia il PC alla ricerca delle varie periferiche
presenti
4
Messaggi Fase iniziale
[ 1] Linux version 2.2.18 (root@khufu) (gcc version 2.95.2 20000220 (Debian GNU/Linux)) #11 Sun
Mar 4 19:54:27 CET 2001 Detected 497435 kHz processor.
[2] Console: colour VGA+ 80x25
Calibrating delay loop... 992.87 BogoMIPS
[3] Memory: 63120k/65472k available (1040k kernel code, 416k reserved, 852k data, 44k init)
Dentry hash table entries: 8192 (order 4, 64k)
Buffer cache hash table entries: 65536 (order 6, 256k)
Page cache hash table entries: 16384 (order 4, 64k)
[4] CPU serial number disabled.
[5] Intel machine check architecture supported.
[6] Intel machine check reporting enabled on CPU#0
Questa prima parte è la fase di probing hardware
La visualizzazione di questi messaggi puo' essere messa in pausa temporaneamente per
leggere piu' facilmente cio' che viene scritto a video premendo i tasti CTRL-S.
Per scorrere la pagine in alto ed in basso si possono premere i tasti Shift-PageUp (MaiuscPag Su) e Shift-PageDown (Maiusc-Pag giu). Per uscire dalla pausa occorre premere i
tasti CTRL-Q.
I messagi che appaiano si possono rivedere con il commando dmesg
5
Seconda Parte di Messaggi Fase iniziale
• dmesg.doc
6
Runlevels
•
•
•
Prima di affrontare l’avvio del sistema, e’ necessario comprendere il concetto
di runlevel o livello di funzionamento.
Altri sistemi operativi hanno solo due runlevels: sistema funzionante e sistema
spento. Linux, invece, ha normalmente 7 diversi livelli di funzionamento,
Un runlevel e’ una configurazione software del sistema che permette
l’esistenza solo di un gruppo selezionato di processi.
0 Il sistema e’ spento
1 Modalita’ mono- utente (solitamente root)
2 Modalita’ multi-utente, senza supporto di rete
3 Modalita’ multi-utente, con supporto di rete
4 Non impiegato o variabile a seconda delle distro Linux
5 Modalita’ multi-utente, con supporto di rete e ambiente X
6 Shutdown e riavvio
7
Run level
•
Runlevel 0
Il sistema e’ in stato shutdown e richiede il riavvio manuale da parte dell’utente. Questo stato del
sistema può anche essere chiamato usando i comandi halt o powerdown.
•
Runlevel 1
Questo livello di funzionamento, anche noto come modalità amministrativa, pone il sistema in modalità
single-user. Ciò consente all’utente root, di accedere al sistema e impedisce a chiunque altro di
accedervi. A questo livello si ha l’accesso tramite un solo terminale, comunemente impiegato per
ricompilare il kernel e svolgere analoghi compiti amministrativi.
•
Runlevel 2
Livello in modalità multi-utente, permette a più utenti di accedere al sistema contemporaneamente.
Sono lanciati i processi in background (demoni) e sono montati gli eventuali filesystem addizionali (il
filesystem root, comunque, e’ sempre montato). Non è in esecuzione NFS (Network File System).
•
Runlevel 3
Livello detto anche network mode, e’ identico al livello 2 con il supporto di rete abilitato.
•
Runlevel 4
Livello definito in modo variabile dai produttori di sistemi Linux. Spesso e’ inutilizzato.
•
Runlevel 5
Livello detto anche hardware state. E’ disponibile il prompt dei comandi e gli utenti sono abilitati a
collegarsi e scollegarsi all’ambiente grafico X.
•
Runlevel 6
Questo livello esegue lo shutdown e il reboot automatico, cioè lo stesso effetto che si otterrebbe
passando al runlevel 0 e poi riavviando la macchina manualmente. E’ chiamato riavvio a caldo (warm
boot) perché la corrente elettrica continua ad alimentare l’hardware. Al contrario del runlevel 0 che è8 un
riavvio a freddo (cold boot) perché l’alimentazione elettrica viene tolta.
init
Init è il padre di tutti i processi,
il suo ruolo principale consiste nel gestire il lancio di tutti i programmi
necessari per rendere il sistema attivo
creare i processi a partire dal suo file di configurazione: /etc/inittab.
Nell'inittab vengono definite le directory con gli script di avvio
per i diversi runlevel (stati del sistema, in cui possono girare determinati
programmi), il runlevel di default, altri script e comandi che vengono
eseguiti al boot o in condizioni particolari.
Analizzare e comprendere la logica di questo file è molto utile per conoscere un
sistema Unix con cui si ha poca familiarità: di fatto, analizzando i comandi e gli
script che vengono eseguiti è possibile ricostruire tutto il processo di start-up del
sistema
9
Init stile BSD
lo stile BSD prevede un singolo script per ogni runlevel.
10
Inizializzazione nei sistemi BSD
Il primo programma lanciato assieme al kernel Linux e‘ sempre il processo init
Questo programma legge il file /etc/inittab (per stabilire come inizializzare il sistema), che a
sua volta esegue lo script /etc/rc.d/rc.S che prepara il sistema al fine di entrare nel runlevel
prescelto.
Il file rc.S abilita la memoria virtuale, monta i filesystem, ripulisce alcune directory di log,
inizializza i dispositivi Plug & Play, carica i moduli del kernel, configura i dispositivi
PCMCIA, attiva le porte seriali e lancia gli script di inizializzazione System V (se presenti).
11
BSD
BSD per i file di inizializzazione. Ad ogni processo o runlevel viene
asseganto un proprio file rc.
Tutto cio' permette di avere una struttura organizzata e di facile
manutenzione.
Ci sono diverse categorie di file di inizializzazione, quelli per
l'avviamento del sistema, per i runlevel, per l'inizializzazione della
rete e per la compatibilita' System V.
12
rc.s
in BSD
Ovviamente rc.S ha un numero elevato di compiti, ma di seguito viene riportato un elenco
degli script in /etc/rc.d che rc.S utilizzara' per completare il suo lavoro:
•
rc.S Questo e' lo script di inizializzazione principale
•
rc.modules Carica i moduli del kernel. La scheda di rete, il supporto per il PPP (Point
to Point Protocol) e altre funzionalita'. Se lo script individua la presenza di rc.netdevice
verra' lanciato anche quest'ultimo.
•
rc.pcmcia Verifica e configura ogni dispositivo PCMCIA presente sul sistema. Questo
script e' di maggior utilita' per gli utenti di computer portatili, probabilmente in
possesso di un modem o una scheda di rete PCMCIA.
•
rc.serial Configura le porte seriali lanciando gli opportuni comandi setserial.
•
rc.sysvinit Cerca gli script System V per il runlevel prescelto e li lancia. Vedere oltre
per maggiori dettagli.
13
Inittab
Ogni entry del file segue la seguente sintassi:
id:runlevels: action:
process
ESEMPIO 1: 2345:
respawn:
/sbin/mingetty tty1
ID - Sequenza di 4 caratteri o meno che identifica in modo univoco la entry. Per quanto
riguarda le entry relative alle getty, l'id deve corrispondere al suffisso della getty
stessa.
RUNLEVELS - La lista dei run level per cui questa entry e' valida.
ACTIONS - La modalita' con cui viene eseguito il comando vero e proprio.
Le action principali:
respawn: Ri-esegue il comando se termina. Tipicamente usato per i getty sulla console.
wait: Esegue lo script o il comando ed aspetta la sua conclusione prima di procedere.
once: Esegue il comando una sola volta quando il sistema entra nel runlevel configurato
boot: Esegue il process durante il boot ed ignora la entry relativa al runlevel
PROCESS - Il comando o script che effettivamente viene lanciato.
14
Esempio initab di Fedora
Esempio tipico di una distribuzione RedHat Linux. Su altri sistemi Unix questo file può
cambiare nella forma (ma non nella sintassi).
# inittab
This file describes how the INIT process should set up
the system in a certain run-level.
#
#[...]
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
Run level di default. Se è 5 il sistema parte in modalità grafica. Se è 3 in modalità
testuale. Non usare 6 o 0 per evitare che il sistema non parte del tutto!
id:5:initdefault:
15
Lancio di etc/rc.d/rc.sysinit
Lancio dello script /etc/rc.d/rc.sysinit, che imposta vari settaggi d'ambiente
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
Qui si gestisce effettivamente quali servizi e programmi lanciare ai diversi
runlevel. La chiave è il programma rc che viene invocato con il numero di
runlevel desiderato
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
16
Richiamo dei processi dagli script rc
•
al runlevel che ci interessa esaminare, il secondo, viene invocata l'azione
"wait", che indica ad init di avviare il processo ed attenderne la
terminazione;
•
il processo che viene avviato è /etc/init.d/rc con un "2" come argomento.
•
rc è altro che uno script di shell, che, dopo opportuni controlli ed
accorgimenti, si porta nella directory /etc/rcX.d e ne esegue gli script
contenuti.
•
Alla "X" che abbiamo utilizzato va comuque sostituito l'argomento passato
come opzione al comando rc: quindi, nel caso del runlevel 2, rc si porterà
nella directory /etc/rc2.d.
17
/etc/rcX.d
•
•
•
•
contenuto della dir /etc/rc2.d e, in generale, di tutte le altre /etc/rcX.d. è:
S10sysklogd S20anacron S20gpm S20makedev S50proftpd S99rmnologin
S12kerneld S20apmd S20inetd S20postgresql S89cron S14ppp S20exim
S20logoutd S20xfs S91apache
Come vedete, ogni file ha il nome composto da tre parti: una S o una K
(in questo caso solo una S!) che indicano se il processo deve essere avviato
(S = start) o interrotto (K = kill), un numero, che indica la priorità con cui
questi devono essere avviati ed il nome del processo.
Vediamo un esempio: l'avvio di gpm (il demone che gestisce il mouse) è
precedente all'avvio di apache, visto che gpm ha un id numerico 20 contro il
91 di apache.
L'id numerico qui riportato non ha comunque nulla a che fare con il PID che il
programma si vedrà assegnato dal sistema: il numero che qui precede il
nome del programma è utilizzato per definire al priorità con la quale vengono
avviati i processi!
18
continuazione del file initab
Ad ogni boot viene eseguito il comando update
ud::once:/sbin/update
Comando abbinato alla sequenza di tasti CTRL-ALT-DELETE
per riavviare il sistema con i 3 tasti magici. Da disattivare su macchine con la tastiera fisicamente
accessibile in luoghi non controllati
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
Comandi abbinati ai messaggi mandati dall'UPS
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
Inizializzazione dei terminali. Basta aggiungere qui nuove righe
(mingetty tty7, tty8 ...) per aumentare il numero di console usabili da tastiera
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
……..
Al runlevel 5 esegue il comando prefdm
x:5:respawn:/etc/X11/prefdm -nodaemon
19
System V
A ogni runlevel e' assegnata una dir contenente una serie di script di init,
20
System V
Si può forzare un cambiamento di runlevel con il comando telinit
Utilizzando il comando "diff" si possono vedere le differenze fra le directory
diff /etc/rc2.d /etc/rc1.d
Nessuno degli script che avvia e arresta realmente i servizi si trova nella
directory /etc/rc.d/rc5.d/. Tutti i file in /etc/rc.d/rc5.d/ sono link simbolici diretti
a script che si trovano nella directory /etc/rc.d/init.d/. I link simbolici sono
utilizzati in ciascuna delle directory rc per fare in modo che i runlevel possano
essere riconfigurati creando, modificando ed eliminando i link simbolici senza
influire sugli script a cui fanno riferimento.
Al termine dell'avvio del sistema, è possibile accedere come root ed eseguire gli
stessi script per avviare e interrompere i servizi.
Per esempio il comando/etc/rc.d/init.d/httpd stop interrompe Server Apache.
21
File di sistema sotto SytemV
Il sistema di runlevel SysV init fornisce un processo standard per controllare quale
software viene avviato o interrotto dal comando init per un runlevel particolare.
SysV è stato scelto perché è più semplice da utilizzare e più flessibile del
processo tradizionale a stile BSD.
I file di configurazione di SysV init si trovano in /etc/rc.d. In questa directory
troverete gli script rc, rc.local, rc.sysinit , e facoltativamente gli script rc.serial e
le seguenti directory:
init.d/… rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/
La directory init.d contiene gli script utilizzati dal comando /sbin/init per il
controllo dei servizi. Ciascuna delle directory numerate rappresenta i sei
runlevel di default configurati per default in Fedora Linux.
22
init.d -> rc.d/init.d/
La directory init.d contiene gli script utilizzati dal comando /sbin/init per il
controllo dei servizi. Ciascuna delle directory numerate rappresenta i sei
runlevel predefiniti configurati per default in Red Hat Linux. Init è il padre di
tutti i processi. Il suo compito principale è di creare processi da uno script
immagazzinato nel file /etc/inittab (si veda inittab (5) ). Questo file ha, di
solito, delle voci che fanno sì che init avvii getty su ogni riga nella quale
possono loggarsi gli utenti. Controlla anche processi autonomi richiesti da
qualsiasi sistema
23
Comandi di sistema
at : schedula l'esecuzione di un processo a tempo determinato
bg : esegue un processo in background
fg : esegue un processo in foreground
jobs : mostra i processi in background
ps : visualizza un elenco dei processi correnti.
kill : invia un messaggio (TERM di default) ad un processo.
killall : come kill ma si puo' specificare un nome al posto del pid
nice : cambia la priorita' ad un processo
top : mostra i primi n processi che utilizzano le risorse
tree : mostra i processi ad albero (i padri, i figli, i figli dei figli etc.)
24
Comandi di sistema
•
df : Calcola lo spazio disponibile di tutte le periferiche di memorizzazione
montate sul file system
du : Visualizza informazioni sull'utilizzo del disco
fdformat : Formatta un floppy
fdisk : Partiziona un disco fisso
fsck : Controlla e ripara un file system danneggiato
mkfs : Crea un nuovo file system
mknod : Crea un file di dispositivo
mkswap : Crea lo spazio di swap per Linux in un file o in una partizione del
disco fisso
mount : Monta una periferica nel file system (esempio floppy, CD rom ecc)
swapoff : Disattiva lo spazio di swap precedentemente creato
swapon : Attiva lo spazio di swap
sync : Scrive effettivamente nei file i dati contenuti nei buffer in ram
tty : Visualizza il nome del dispositivo per il terminale in uso
umount : Smonta una periferica precedentemente montata nel file system
25
/etc/rc.d/rc.sysinit
Questo è il primo script lanciato esegue varie operazioni tra cui:
Impostazioni di alcuni path generali nella variabile $PATH;
configurazione dell'ambiente di rete;
Avvio swap per la memoria virtuale;
Impostazione del nome dell'host;
Check del filesystem root;
Check delle quote di spazio assegnate agli utenti, se previste;
Mount del filesystem root in modalità scrittura/lettura;
Preparazione del sistema per caricamento dei moduli;
Check delle dipendenze dei moduli;
Check di tutti i filesystem ed eventuali riparazioni;
Mount di tutti i filesystem;
Pulizia di file di supporto al boot e di processi non più attivi;
Umount dell'initrd;
Impostazione dell'orologio;
Attivazione dello swapping;
Inizializzazione delle porte seriali;
Caricamento Moduli;
Attivazione dei servizi del runlevel.
26
Riparazione di errori sul FS
Durante la fase di file system check, se si trovano errori che non possono
essere riparati automaticamente è possibile che il processo di boot si
blocchi. In questo caso viene richiesta la password di root e si può da shell
fare un file system check manuale. Verificare su quale partizione il kernel si
è fermato e scrivere (si considera che la partizione sia /dev/hda5 e abbia
ext2 come file system): fsck.ext2 /dev/hda5.
Rispondere SI a tutte le domande sulla correzione di file danneggiati.
Ogni sistema Unix gestisce con file e procedure diverse il processo di boot,
ma tutti si basano su Init e il suo file di configurazione inittab. Per cui basta
analizzare questo file e capirne la logica per poter capire come viene
caricato il sistema ed intervenire dove necessario in caso di problemi.
27
Processi
In un sistema multitasking ogni programma, ogni comando che si lancia,
ogni servizio attivo sul sistema da origine a uno o più processi.
Ad ogni processo viene assegnato un numero che lo identifica univocamente,
chiamato PID (Process IDentificator). Ogni processo, tranne init
(a cui corrisponde il PID 1), è generato da un'altro processo di cui si definisce
PPID (Parent PID). Si parla quindi di processo padre (parent) e processo figlio
(child). Un processo può generare una copia di se stesso (fork), cha ha Pid
diverso e PPID uguale al proprio PID.
JOB
La shell Unix è il tipico mezzo con cui vengono lanciati processi sul sistema
(oltre ad essere essa stessa un normale processo), la shell assegna ad ogni
processo lanciato da un utente un numero di job, e permette di mandare in
foreground o background al sua esecuzione.
28
La Schedulazione dei processi del kernel
Nel kernel di un sistema operativo lo schedulatore (dispatcher) è responsabile della
coordinazione dei processi in esecuzione per gestire i loro accessi alle risorse e
assicurare che abbiano accesso alla CPU per un tempo relativo alla loro priorità
assegnata, senza rischiare che alcuni processi intasino completamente il CPU time ed
altri non riescano ad utilizzarla minimamente.
La schedulazione è un'operazione del kernel che definisce i seguenti stati di
processo:
R - running, il processo è in esecuzione;
S - sleeping, il processo è in attesa (input dell'utente, conclusione di altri processi ecc..);
Z - zombie, il processo è morto ed aspetta che il parent chieda un codice d'uscita.
Ad ogni processo è associata una priorità, un valore che varia fra -20 e 19, che
determina quanta CPU time rispetto agli altri il sistema gli deve dedicare.
La priorità pre-impostata di un task è 0 (-20 è considerata la priorità più alta). Solo
l'amministratore puo resettare la priorità di un processo per portarla al di sotto di 0, ma i
normali utenti possono variare la priorità per i valori positivi (usando il comando 'renice').
I nuovi processi ereditano la priorità dei loro padri.
29
demoni o servizi
I programmi avviati automaticamente all’avvio del sistema, sono detti
demoni o servizi: caratteristica fondamentale, a differenza dei normali
programmi, è che i demoni sono normalmente in esecuzione per tutta una
sessione di lavoro dall’avvio allo shutdown.
Il motivo è semplice: questi programmi, infatti, devono sempre essere in
ascoltoper soddisfare eventuali richieste provenienti dall’utente o dall’esterno,
nel caso la macchina sia in rete
30
demone
Un demone, normalmente, è un programma che resta
in attesa su una porta del sistema in attesa che qualcuno o qualcosa
richieda una connessione.
Lo stato in cui normalmente questo programma si trova è detto
"sleep",le risorse occupate dal demone, quindi, risultano minime,
poichè di fatto il programma sta solamente "sopravvivendo"!
31
•
In questo primo caso, Apache è in Sleep (dimostrato dalla "S" nella colonna "STAT"),
non occupa per nulla la CPU (visto che nella colonna CPU c’è un chiaro 0.0%) ed
utilizza una piccola parte di memoria, che probabilmente avrà utilizzato per l’avvio e
per restare in vita. Come vedete, quindi, un programma in sleep occupa solamente
una parte della memoria (che comunque occuperebbe anche se fosse avviato su
richiesta) e nessun’altra risorsa di sistema! E, soprattutto, non ci forza ad avviare un
servizio quando ce ne sia il reale bisogno, visto che questo saprà rispondere
automaticamente una volta interrogato.
32
Alla fine del processo di init
•
Dopo che il comando init è andato avanti attraverso la directory appropriata rc per la
ricerca del runlevel,
•
lo script /etc/inittab crea un processo /sbin/mingetty per ciascuna console virtuale
(prompt di login) di ogni runlevel.
•
I runlevel da 2 a 5 hanno le sei console virtuali, mentre il runlevel 1, (in modalità
utente singolo), dispone di una sola console virtuale,
•
i runlevel 0 e 6 non ne hanno alcuna.
•
Il processo /sbin/mingetty apre delle linee di comunicazione per i dispositivi tty , ne
imposta la modalità, visualizza il prompt di login, riceve il nome dell'utente e inizializza
il processo di login per quell'utente.
•
Nel runlevel 5 /etc/inittab esegue uno script chiamato /etc/X11/prefdm. Lo script
prefdm esegue il display manager X preferito — gdm, kdm,o xdm, in base al
contenuto del file /etc/sysconfig/desktop/.
•
Una volta terminato, il sistema è operativo sul runlevel 5, mostrando anche una
schermata di login
33
Programma - Processo - job
•
Un programma eseguito su un sistema è un processo, identificato con un suo PID.
Quando un programma viene eseguito da una shell, assume anche un numero di job e
può essere gestito all'interno della shell.
•
Le modalità fondamentali con cui si possono lanciare i job sono due:
in foreground:l'utente attende che l'esecuzione del suo processo termini prima di
riottenere il prompt della shell.
in background invece il prompt viene restituito subito e il processo continua
l'esecuzione. In questo modo l'utente può continuare a lavorare e quindi, volendo,
potrebbe lanciare altri programmi in background.
Il segno & scritto alla fine del comando dice alla shell di eseguirlo in background e
ridare subito il prompt.
Con CTRL-C si interrompe un processo.
Con CRTL-Z si mette in “pausa” un processo e si ritorna al prompt della shell.
La shell prevede una serie di comandi interni per gestire i job:
jobs: mostra i processi attivi in background lanciati da un certo utente. Il numero tra
parentesi che viene restituito a video è il numero di, il “+” significa che è l’ultimo
processo ad essere stato sospeso (fg senza parametri fa ripartire l’ultimo processo
sospeso), l’altro numero è il PID.
bg: Esegue in background un processo precedentemente interrotto.
fg: Esegue un processo in primo piano.
34
Analisi del Pid di un processo
Come processo principale, init ha PID uguale ad uno; il PID (Process ID) è un
numero, assegnato automaticamente secondo sequenza dal sistema, che
identifica univocamente un processo, sia esso automatico
(cioè avviato in automatico dal sistema operativo) oppure lanciato da un utente.
Come possiamo dimostrare che init ha PID uguale ad uno? Utilizzando il
comando "ps", che visualizza i processi attivi, con l'opzione "x", che riporta i
processi avviati senza terminale di controllo: nel risultato leggerete:
PID TTY STAT TIME
1
?
S
0:05
COMMAND
init [2]
Le colonne che ci interessano sono PID, TTY (terminale su cui è in esecuzione
il programma), STAT (lo stato del programma stesso; S è sinonimo di sleeping)
e COMMAND, che ovviamente mostra il nome del programma.
35
Contenuto di /etc/sysconfig
file di configurazione contenenti funzione e informazioni non complete, poichè molti dei
file hanno numerose opzioni utilizzate solo in casi specificio rari.
36
Introduzione al Kernel
•
Il kernel è il codice che gestisce le risorse presenti in un computer e le rende
disponibili alle applicazioni con cui l'utente comunemente interagisce. In un sistema
operativo, inteso in senso esteso, come può esserlo Windows completo di
programmi accessori (Explorer, Internet Explorer, notepad e via dicendo), il kernel
costituisce solo lo strato più profondo, quello che si occupa del "lavoro sporco" di
interagire direttamente con l'hardware.
Il kernel si occupa principalmente di gestire:
- le comunicazioni con le memorie di massa (hard disk, floppy cdrom, dispositivi usb
rimuovibili... ),
- i file system, cioè il modo con cui sono organizzate le informazioni sulle memorie
di massa (fat, fat32, ntfs, ext3, reiserfs...),
- la memoria RAM, l'accesso dei singoli programmi alla stessa e il paging della
memoria su hard disk,
- l'utilizzo della CPU e la condivisione della stessa fra i vari programmi,
- l'interfacciamento e la comunicazione con hardware vario (schede di rete, porte
seriali, USB, parallele, schede audio, schede video ecc.
37
versioni del kernel
•
Le versioni del kernel Linux sono identificate con numeri a tre cifre separate da un
punto (ed: 2.1.45) con una convenzione ben precisa.
Per esempio il kernel 2.4.15 ha:
2- Il major number, la serie principale. I kernel della serie 1.x sono ormai piuttosto
vecchi e poco usati, quelli della serie 0.x sono ancora più vecchi e ormai rarità da
collezionista (si fa per dire, dal sito ufficiale del kernel Linux sono ancora scaricabili.
4- Il minor number, il numero di versione principale. Se è pari il kernel viene
considerato stable e pronto per sistemi in produzione, se è dispari lo si considera in
development e da usare con cautela o per sperimentazione. Le release stable sono
sempre figlie delle devel precedenti. Ad esempio il kernel attualmente considerato
stabile, il 2.6, deriva dal 2.5 che era la versione in sviluppo mentre la 2.4 era quella
considerata stabile. Solitamente nei kernel stable si tende a fare maintenance ed a
implementare solo le feature strettamente necessarie, lasciando a quello in
development lo sviluppo di nuove funzionalità.
15- E' la revisione (patch) corrente. Questo è un numero progressivo che parte da
0. Da una revisione alla successiva possono passare da pochi giorni a varie
settimane.
38
Directory all'interno di /proc
Gruppi comuni di informazioni relative al kernel vengono raccolti in directory
e sottodirectory all'interno di /proc.
Ciascuna directory di /proc contiene un numero di directory identificate con
un numero.
Queste directory vengono chiamate directory del processo, poiché si
riferiscono all'ID di un processo e contengono informazioni specifiche
relative a quel processo. Il proprietario e il gruppo di ciascuna di queste
directory è impostato per l'utente che sta eseguendo quel dato processo.
Una volta terminato, la sua directory /proc scompare.
Ciascuna directory del processo contiene i file seguenti:
cmdline — contiene gli argomenti della linea di comando che hanno dato inizio al
processo.
cwd — collegamento simbolico con la directory attualmente in funzione per il
processo.
environ — Fornisce un elenco delle variabili di ambiente per il processo. La variabile
di ambiente viene data in caratteri maiuscoli e il valore in caratteri minuscoli.
exe — collegamento simbolico all'eseguibile di questo processo.
fd — directory contenente tutti i descrittori dei file per un particolare processo.
Vengono forniti sotto forma di collegamenti numerati
39
directory /proc
•
Essa contiene lo "stato in un dato momento del sistema" relativamente alle
informazioni in continuo mutamento (ad esempio l’apm, il numero di utenti
collegati ecc.) e lo "stato del sistema" relativamente a quelle in qualche
modo statiche, come possono essere le caratteristiche del processore
montato. Tutte le informazioni in /proc sono leggibili tramite il comando:
less /proc/FILE
o, al limite, less -f /proc/FILE
•
Se il monitor sarà pieno di caratteri strani basterà digitare "reset" (anche se
probabilmente non vedrete i caratteri a monitor), premere invio ed il tutto
ritornerà alla normalità!
40
Automazione di task
L'automazione di compiti ripetuti regolarmente richiede la conoscenza di diverse
tecnologie. Le prime sono rappresentate da quelle tecnologie che controllano il tempo
di esecuzione dei comandi o dello script.
I comandi cron e at sono i più utilizzati in questi ruoli.
Il comando cron è in grado di programmare l'esecuzione di comandi e script per intervalli
regolari che vanno da qualche minuto a qualche mese. Il comando crontab viene
usato per manipolare i file che controllano il demone cron che programma
l'esecuzione di ogni compito cron.
Il comando at (ed il comando relativo batch) sono più idonei per programmare
l'esecuzione di script o comandi che possono essere utilizzati solo una volta. Questi
comandi implementano un sottosistema di batch rudimentale che consiste in code
multiple con diverse priorità di programmazione. Queste priorità sono conosciute
come livelli niceness (a causa del nome del comando — nice). Entrambi at e batch
sono perfetti per compiti che devono iniziare in un determinato momento ma che non
hanno un tempo limite determinato.
41
free
Il comando free mostra l'utilizzo della memoria del sistema. Ecco un esempio del suo
output:
total
used
Mem: 255508 240268
free
15240
shared buffers cached
0
7592
86188
-/+ buffers/cache: 146488 109020
Swap: 530136 26268 503868
Mem: mostra l'utilizzo della memoria fisica, mentre Swap: mostra l'utilizzo dello spazio swap -/+ buffers/cache: mostra la
quantità di memoria fisica riservata ai buffer del sistema.
Poichè free per default mostra le informazioni sull'utilizzo della memoria
solo una volta, esso è utile solo per un controllo breve, oppure per determinare velocemente se esiste ancora il problema
relativo alla memoria stessa.
Anche se free possiede l'abilità di visualizzare ripetutamente le informazioni relative all'uso della memoria tramite la sua
opzione -s, l'output continua a scorrere rendendo difficile il rilevamento di modifiche nell'utilizzo della stessa memoria.
Una soluzione migliore nell'uso di free -s sarebbe quella di eseguire free usando il comando watch. Quindi usare questo
comando:watch free
Il comando watch viene eseguito fino a quando non viene interrotto con [Ctrl]-[C]. Il comando watch è da ricordare in
quanto potrà esservi molto utile in diverse situazioni.
42
top
Mentre free visualizza solo le informazioni relative alla memoria, il comando top fà un pò di
tutto.
Uso della CPU, statistiche sul processo, utilizzo della memoria .
Diversamente dal comando free, il comportamento di default di top è quello di esecuzione
continua; non vi è il bisogno di usare il comando watch.
Eccone un esempio:
14:06:32 up 4 days, 21:20, 4 users, load average: 0.00, 0.00, 0.00 77 processes: 76 sleeping, 1 running, 0 zombie, 0 stopped CPU states: cpu
user nice system irq softirq iowait idle total 19.6% 0.0% 0.0% 0.0% 0.0% 0.0% 180.2% cpu00 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 100.0%
cpu01 19.6% 0.0% 0.0% 0.0% 0.0% 0.0% 80.3% Mem: 1028548k av, 716604k used, 311944k free, 0k shrd, 131056k buff 324996k actv,
108692k in_d, 13988k in_c Swap: 1020116k av, 5276k used, 1014840k free 382228k cached PID USER PRI NI SIZE RSS SHARE STAT
%CPU %MEM TIME CPU COMMAND 17578 root 15 0 13456 13M 9020 S 18.5 1.3 26:35 1 rhn-applet-gu 19154 root 20 0 1176 1176 892 R
0.9 0.1 0:00 1 top 1 root 15 0 168 160 108 S 0.0 0.0 0:09 0 init 2 root RT 0 0 0 0 SW 0.0 0.0 0:00 0 migration/0 3 root RT 0 0 0 0 SW 0.0 0.0
0:00 1 migration/1 4 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 keventd 5 root 34 19 0 0 0 SWN 0.0 0.0 0:00 0 ksoftirqd/0 6 root 35 19 0 0 0 SWN 0.0
0.0 0:00 1 ksoftirqd/1 9 root 15 0 0 0 0 SW 0.0 0.0 0:07 1 bdflush 7 root 15 0 0 0 0 SW 0.0 0.0 1:19 0 kswapd 8 root 15 0 0 0 0 SW 0.0 0.0
0:14 1 kscand 10 root 15 0 0 0 0 SW 0.0 0.0 0:03 1 kupdated 11 root 25 0 0 0 0 SW 0.0 0.0 0:00 0 mdrecoveryd
L’output del comando contiene le informazioni relative allo stato generale del sistema
— l'uptime, il carico medio, i conteggi del processo, lo stato della CPU,
e le statistiche sull'utilizzo sia per la memoria che per lo spazio di swap.
Anche se top appare come un programma di sola visualizzazione, in realtà non lo è.
43
vmstat
Per una conoscenza più approfondita sulle prestazioni del sistema, provate
vmstat.
Con vmstat è possibile ottenere una panoramica del processo, della memoria, di
swap, I/Odel sistema, e sull'attività della CPU attraverso una riga composta da
numeri:
Quando si esegue vmstat senza opzioni viene visualizzata solo una riga.
Questa riga contiene informazioni calcolate dall'ultimo avvio del sistema.
Tuttavia molti amministratori di sistema non fanno affidamento ai dati contenuti in
questa riga, in quanto i dati vengono raccolti in momenti diversi.
Molti amministratori invece usano l'abilità di vmstat di visualizzare ripetutamente i
dati sull'utilizzo delle risorse a determinati intervalli.
Per esempio, il comando vmstat 1 visualizza una nuova riga ogni secondo,
mentre il comando vmstat 1 10 visualizza una nuova riga al secondo per dieci
secondi.
Se usato da un amministratore esperto, vmstat può essere utilizzato per
determinare velocemente l'uso delle risorse e le problematiche inerenti le
prestazioni.
44
su e sudo
•
su
Esegue un programma o uno script come utente diverso. su rjones esegue una
shell come utente rjones. Il semplice su fa riferimento, in modo predefinito, all'utente
root. sudo
Esegue un comando come root (o altro utente). Può essere utilizzato in uno script,
consentendone così l'esecuzione ad un utente ordinario.
Il file /etc/sudoers contiene i nomi degli utenti autorizzati ad invocare sudo.
45
Amministrare gli utenti
Conoscere Utenti e gruppi
users Visualizza tutti gli utenti presenti sul sistema. Equivale approssimativamente a who -q.
groups Elenca l'utente corrente ed i gruppi a cui appartiene. Corrisponde alla variabile interna
GROUPS, ma, anziché indicare i gruppi con i numeri corrispondenti, li elenca con i loro nomi.
bash$ groups bozita cdrom cdwriter audio xgrp bash$ echo $GROUPS 501
chown, chgrp
–
Il comando chown modifica la proprietà di uno o più file. Questo comando rappresenta un metodo utile che
root può usare per spostare la proprietà di un file da un utente all'altro. Un utente ordinario non può modificare
la proprietà dei file, neanche dei propri. [1]
46
Logname e whoami
•
Logname visualizza il nome di login dell'utente corrente
(così come si trova in /var/run/utmp); sembra simile a whoami
bash$ logname mario
bash$ whoami mario
Pero se mi ricolleggo come root..
bash$ su Password: ......
bash# whoami root
bash# logname mario
Quindi logname visualizza il nome dell'utente connesso, whoami fornisce il nome dell'utente
collegato al processo corrente. Come si è appena visto, talvolta questi non coincidono.
47
Utenti connessi
who Visualizza tutti gli utenti connessi al sistema.
bash$ who
bozo tty1 Apr 27 17:45
bozo pts/0 Apr 27 17:46
bozo pts/1 Apr 27 17:47
bozo pts/2 Apr 27 17:49
L'opzione -m fornisce informazioni solo sull'utente corrente. Passare a who due argomenti, come nel caso di who
am i o who The Man equivale a who -m.
bash$ who -m localhost.localdomain!bozo pts/2 Apr 27 17:49
whoami è simile a who -m, ma elenca semplicemente il nome dell'utente.
48
Comando id
Elenca i reali ID utente e di gruppo dell'utente associato al processo corrente.
È il corrispettivo delle variabili interne $UID
id mostra gli ID effettivi solo quando questi sono diversi da quelli reali.
49
Gestione della memoria RAM
•
free
Mostra, in forma tabellare, l'utilizzo della memoria e della cache. Il suo output si
presta molto bene alle verifiche per mezzo di grep,awk o Perl.
Il comando procinfo visualizza tutte quelle informazioni che non sono fornite da
freebash$ free total used free shared buffers cached Mem: 30504 28624 1880
15820 1608 16376 -/+ buffers/cache: 10640 19864 Swap: 68540 3128 65412
Per visualizzare la memoria RAM inutilizzata:
bash$ free | grep Mem | awk '{ print $4 }' 1880
50
Controllo dei job
•
I job sono ad un livello più alto del SO rispetto ai processi di sistema
•
I job appartengono alla shell
•
ps Statistiche di processo (Process Statistics): elenca i processi attualmente
in esecuzione per proprietario e PID (ID di processo).
Viene solitamente invocato con le opzioni ax e può essere collegato tramite una
pipe a grep o sed per la ricerca di un processo specifico
•
pstree
– Elenca i processi attualmente in esecuzione in forma di struttura ad "albero" .
L'opzione -p mostra i PID e i nomi dei processi.
•
top
– Visualizza, in aggiornamento continuo, i processi maggiormente intensivi in termini
di cpu. L'opzione -b esegue la visualizzazione in modalità testo, di modo che
l'output possa essere verificato o vi si possa accedere da uno script.
51
Conoscenza dell’ambiente di lavoro
• Conoscere le risorse tecnologiche a disposizione
• lspci lssub (hardware)
• Conoscere il profilo di tutti gli utenti
52
Strumento di configurazione grafico
•
Lanciare semplicemente il comando setup
•
Strumento di configurazione dei servizi — Il programma grafico Strumento
di configurazione dei servizi (system-config-services) è una utility
flessibile per configurare i runlevel
53
fuser
•
fuser si rivela un'applicazione importante nel momento in cui si devono inserire o
rimuovere fisicamente dispositivi di memorizzazione, come i CD ROM o le memorie
flash USB. Talvolta umount fallisce con il messaggio d'errore device is busy. Questo
sta ad indicare che qualche utente e/o processo(i) hanno accesso a quel dispositivo.
Un fuser -um /dev/nome_dispositivo vi rivelerà il mistero, così che possiate
terminare tutti i processi coinvolti.
54
fuser
Identifica i processi (tramite il PID) che hanno accesso ad un dato file, serie di file o
directory. Può anche essere invocato con l'opzione -k che serve a terminare quei
determinati processi. Questo ha interessanti implicazioni per la sicurezza,
specialmente negli script che hanno come scopo quello di evitare, agli utenti non
autorizzati, l'accesso ai servizi di sistema.
–
bash$ fuser -u /usr/bin/vim /usr/bin/vim:
–
3207e(bozo) bash$ fuser -u /dev/null /dev/null:
–
3009(bozo) 3010(bozo) 3197(bozo) 3199(bozo)
55
cron
•
Programma schedulatore d'amministrazione che esegue determinati compiti, quali pulire e
cancellare i file di log di sistema ed aggiornare il database slocate.
•
È la versione superutente di at (sebbene ogni utente possa avere il proprio file crontab che può
essere modificato con il comando crontab).
•
Viene posto in esecuzione come demone ed esegue quanto specificato in /etc/crontab
56
•
Controllo di processo e boot
•
init
–
Il comando init è il genitore di tutti i processi. Richiamato nella parte finale della fase di boot, init determina il runlevel del sistema
com'è specificato nel file /etc/inittab. Viene invocato per mezzo del suo alias telinit e solo da root.
•
telinit
–
Link simbolico a init, rappresenta il mezzo per modificare il runlevel del sistema che, di solito, si rende necessario per ragioni di
manutenzione dello stesso o per riparazioni d'emergenza del filesystem. Può essere invocato solo da root. Questo comando è
potenzialmente pericoloso - bisogna essere certi di averlo ben compreso prima di usarlo!
•
runlevel
–
Mostra il corrente e ultimo runlevel, ovvero se il sistema è stato fermato (runlevel 0), se si trova in modalità utente singolo (1), in
modalità multi-utente (2 o 3), in X Windows (5) o di riavvio (6). Questo comando ha accesso al file /var/run/utmp.
•
halt, shutdown, reboot
57
history
•
Molto probabilmente, il comando che avete utilizzato è memorizzato in un file
chiamato .bash_history. Per default, questo file registra gli ultimi 500 comandi digitati
al prompt della shell.
•
Potete visualizzare in modo rapido la cronologia di tutti i comandi digitando history al
prompt della shell, ma i comandi scorreranno troppo rapidamente perché possiate
essere in grado di leggerli.
•
Un altro modo per visualizzare il file .bash_history è quello di servirsi di un utility
come less. Digitate less .bash_history al prompt della shell e i risultati saranno
visualizzati in singole pagine. Per scorrere in avanti premete [Barra spaziatrice], per58
Altre scorciatoie
•
Ecco un elenco di altre scorciatoie per accedere alla cronologia dei comandi:
•
"Bang, bang": digitando !! (chiamato "bang bang") viene eseguito l'ultimo comando
nella cronologia.
•
"Bang numero": digitando !numero (come in !302) viene eseguito il comando numero
302 nel file della cronologia.
•
"Bang stringa": digitando !stringa (come in !rpm) viene eseguito il comando più
recente della cronologia, la cui stringa coincida con il file della cronologia.
•
[Freccia su] e [Freccia giù]. Al prompt della shello del terminale GUI, premete
59
semplicemente i tasti freccia per muovervi avanti e indietro nell'elenco dei
Modifica della variabile PATH
Se avviate frequentemente programmi che non sono contenuti in una directory configurata dalla shell
utente per la ricerca, dovete modificare il file di configurazione di quest'ultima per aggiungere la
directory contenente l'eseguibile che volete aprire. Per farlo, potete aggiungere la directory alla
vostra variabile di ambiente PATH.
Attenzione
Queste indicazioni si riferiscono solo agli account utente. Evitate di modificare file di root come
.bash_profile, poiché potrebbe comportare un rischio per la sicurezza del sistema.
Avviate un editor di testo, per esempio gedit o vi, al prompt della shell. Potete aprire il file .bash_profile
digitando:
gedit .bash_profile
Comparirà una sezione PATH, simile a quella riportata di seguito:
PATH=$PATH:$HOME/bin:/usr/local/bin:
Alla fine di questa stringa aggiungete $HOME/seti come di mostrato seguito:
PATH=$PATH:$HOME/bin:/usr/local/bin/:$HOME/seti:
Salvate il file e uscite dall'editor di testo.
Per fare in modo che le modifiche effettuate a .bash_profile abbiano effetto immediato digitate il
comando seguente:
source .bash_profile
Aggiungendo i percorsi al vostro .bash_profile, sarete in grado di posizionare le utility e i programmi nel
vostro percorso e di eseguirli senza digitare ./ avanti al comando.
60
Gestione dei processi
•
Si definisce processo un qualsiasi programma in esecuzione. Ad ogni processo il
sistema associa un numero univoco, chiamato pid (process identification). Per
visualizzare l'elenco dei processi attivi nel sistema digitare: $ ps -aux
USER
–
–
–
–
–
–
–
–
–
–
–
•
•
•
•
RSS TTY STAT START TIME COMMAND
root 1 0.1 0.0
1272 484 ? S 15:18 0:05 init [2]
root 2 0.0 0.0 0 0 ? SW 15:18 0:00 [keventd]
root 4 0.0 0.0 0 0 ? SW 15:18 0:00 [kswapd]
root 5 0.0 0.0 0 0 ? SW 15:18 0:00 [bdflush]
root 6 0.0 0.0 0 0 ? SW 15:18 0:00 [kupdated]
root 10 0.0 0.0 0 0 ? SW 15:18 0:00 [knodemgrd_0]
root 11 0.0 0.0 0 0 ? SW 15:18 0:00 [kjournald]
root 72 0.0 0.0 0 0 ? SW 15:19 0:00 [kjournald]
root 83 0.0 0.0 0 0 ? SW 15:19 0:00 [khubd]
mario 735 0.0 0.3 2752 1652 pts/1 S 15:20 0:00 /bin/bash
mario 1972 0.0 0.3 3740 1756 pts/1 R 16:29 0:00 ps aux
L'elenco evidenzia nell'ordine l'utente proprietario del processo, il numero di
identificazione del processo (il suo pid), la percentuale di potenza del processore
utilizzata, la percentuale di memoria usata, altre informazioni meno importanti fino
all'ultima colonna che elenca il comando che ha avviato il processo. Tutto ciò è molto
utile se un programma si blocca e non si riesce a farlo sparire con i soliti metodi. In
questa eventualità il comando precedente consente di conoscere il pid ad esso
associato per poi inserire:
– # kill -9 <pid> equivalente a: # kill -kill <pid>
La sintassi generale del comando è del tipo: # kill <segnale> <pid>
L'equivalenza tra segnale e numero intero è mostrata digitando: $ kill -l
che visualizza l'elenco dei segnali che possiamo inviare:
–
–
•
PID % CPU % MEM VSZ
1) SIGHUP
5) SIGTRAP
2) SIGINT
3) SIGQUIT
4) SIGILL
6) SIGABRT
7) SIGBUS
8) SIGFPE
ove si vede che il segnale kill (SIGKILL) corrisponde al numero nove. Se non riuscite
neanche così ad arrestare il programma impazzito allora riavviate la macchina con:
61
Processi in back-ground
Per esempio lanciando xman in background si può notare la situazione
seguente.
$ xman &
[1] 545
Queste righe mostrano come la shell sia essenziale al punto da non
fornire informazioni inutili (anche in questo caso è bene ricordare che i
terminali sui quali sono state sviluppate le prime shell erano piuttosto
lenti). Ovviamente la prima è quella corrispondente al lancio in
background di xman; sulla seconda la shell scrive due numeri
progressivi per fornirci delle informazioni relative al processo appena
lanciato; la terza riga corrisponde di nuovo al prompt. L'unica cosa
nuova è nella seconda riga; perchè la shell ci comunica questi due
numeri? Semplice: poiché il processo in questione viene lanciato in
background, si ha una biforcazione dell'esecuzione (fork) e la shell
non controlla direttamente l'evoluzione di tale processo, che in questo
caso verrà controllato dagli eventi generati dal mouse
62
Pid e job
•
Tra parentesi quadre si trova un numero proprio della shell in
esecuzione, nel caso in questione il numero 1 indica che si tratta
del primo ``job'' che la shell utilizzata ha lanciato in background da
quando è stata avviata. Il numero presentato accanto è il cosiddetto
PID, identificatore di processo; anch'esso è un numero progressivo,
anche se non è specifico della shell in esecuzione: a partire da
quando viene avviato il Sistema Operativo, ad ogni processo, per
qualunque utente venga lanciato, viene assegnato un numero
progressivo di PID, che ovviamente, non può che essere maggiore
del numero di ``job''.
63
etc/crontab
Il file di controllo di cron si chiama /etc/crontab; qui sono elencate le operazioni da
eseguire e a quali giorni e orari:
– 25 6 * * * root run-parts -report /etc/cron.daily 47 6 * * 7 root run-parts report /etc/cron.weekly
– 52 6 1 * * root run-parts -report /etc/cron.monthly
•
Pertanto, come si vede, le operazioni da eseguire sono degli script concentrati
nelle cartelle /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly. Quello che
interessa sono le prime cinque colonne che individuano il giorno e l'ora di
esecuzione; da sinistra a destra abbiamo rispettivamente:
•
minuti da 0 a 59 ore da 0 a 23 giorno (del mese) da 1 a 31 mese da 1 a 12
giorno (della sett.) da 0 a 7 ove il sette corrisponde a domenica
•
Adesso pertanto risulta chiaro che cron è impostato ad eseguire le operazioni
giornaliere alle 6:25 del mattino, quelle settimanali alle 6:47 del mattino della
domenica, quelle mensili alle 6:52 del primo giorno di ogni mese.
64
Sommario delle scorciatoie della shell
!! riesegue l'ultimo comando appena eseguito
!n riesegue l'ennesimo comando presente nella storia, dove 'n' e' il numero del comando
da rieseguire
!stringa riesegue l'ultimo comando che inizia con i caratteri specificati in 'stringa'
!stringa:p visualizza l'ultimo comando che inizia con i caratteri specificati in 'stringa'
!?comando? ricerca il comando specificato tra punti interrogativi
fc 4 permette di modificare in comando numero 4 con l'editor predefinito (solitamente vi)
fc -e 'nome' 4 permette di modificare in comando numero 4 con l'editor 'nome'
specificato
^comando1^comando2 riesegue l'ultimo comando eseguito che contiene la parola
'comando1' sostituendola con 'comando2'.
•
etc/motd Contiene il mesaggio del giorno
65
Scorciatoie
history visualizza l'elenco di tutti i comandi eseguiti
CTRL-U cancella tutta la riga dalla posizione del cursore all'inizio della riga
CTRL-K cancella tutta la riga dalla posizione del cursore alla fine della riga
CTRL-W cancella una parola dalla posizione del cursore all'inizio della riga
ALT-D cancella una parola dalla posizione del cursore alla fine della riga
freccia sinistra sposta il cursore di un carattere a sinistra
freccia destra sposta il cursore di un carattere a destra
freccia su scorre la storia dei comandi a ritroso
freccia giu' scorre la storia dei comandi in avanti
tasto home sposta il cursore all'inizio della riga
CTRL-A sposta il cursore all'inizio della riga
tasto fine sposta il cursore alla fine della riga
CTRL-E sposta il cursore alla fine della riga
ALT-F sposta il cursore alla fine della parola successiva (F sta per forward,
successivo)
CTRL-B sposta il cursore all'inizio della parola precedente (B sta per
backward, precedente)
66
CTRL-T inverte gli ultimi due caratteri a sinistra del cursore, cioe' ab diventa ba
(T sta per transpose)
La directory /etc/
•
La directory /etc/ contiene file di configurazione locali presenti sulla
vostra macchina. Nessun file binario deve essere inserito in /etc/.
Tutti i file binari che per qualche motivo sono inseriti in /etc/, devono essere
trasferiti in /sbin/ oppure in /bin/.
•
La subdirectory /etc/X11/ viene designata per i file di configurazione del
sistema X Window, come ad esempio XF86Config.
•
La directory /etc/skel/ viene designata per i file dell'utente "skeleton", cioè i
file che servono per popolare una home directory quando viene creato un
nuovo utente.
67
L'editor VI
L'editor VI (visual editor) è il più diffuso nell'ambiente UNIX e Linux.
La versione GNU di VI si chiama VIM, (Vi IMproved) ed è quella comunemente
usata nelle distribuzioni Linux.
Per aprire vi ed editare un nuovo file basta digitare vi oppure vi nomefile nel
secondo caso, se il file esiste viene aperto, se non esiste viene creato nuovo.
VI ha due modalità di funzionamento: il modo comando (command) e il modo
inserimento (input).
in modalità inserimento ogni parola verrà inserita direttamente nel file.
E' possibile usare molti comandi per entrare in questa modalità il più comune è
i (insert).
Entrare in modalità comando è possibile in qualsiasi momento premendo il
tasto ESC, ogni lettera verrà interpretata come un comando
•
Comandi di vI
•
scriptdiAvvio\VI.doc.
68
La directory /lib/
•
La directory /lib/ dovrebbe contenere solo le librerie necessarie
all'esecuzione dei file binari presenti in /bin/ e /sbin/. Queste immagini di
librerie condivise sono particolarmente importanti per l'avvio del sistema e
l'esecuzione di comandi all'interno del filesystem di root.
69
Fasi di caricamento di GRUB
Caricamento del boot loader primario dal BIOS nell'MBR –
Fase 1 .Il boot loader è posizionato nel piccolissimo spazio assegnato all'MBR,
inferiore a 512byte ed è capace di caricare la fase 1.5 o 2 del boot loader.
•
Il boot loader della fase 1.5 è caricato in memoria da quello della fase 1, se
necessario. Alcuni elementi hardware richiedono una fase intermedia per
giungere al boot loader della fase 2. Questo avviene quando la partizione
/boot/ è superiore ai 1024 cilindri della testina del disco fisso o quando si
utilizza la modalità LBA. Il boot loader della fase intermedia è disponibile nella
partizione /boot/ o in una piccola sezione dell'MBR e della partizione /boot/.
•
La fase 2 o boot loader secondario, viene caricata nella memoria. Il boot loader
secondario visualizza il menu di GRUB e l'ambiente dei comandi. Questa
interfaccia vi consente di selezionare il sistema operativo o il kernel da avviare,
il passaggio degli argomenti al kernel o di osservare i parametri del sistema.
•
Il boot loader secondario oltre a leggere il sistema operativo o il kernel, è in
grado di leggere i contenuti di /boot/sysroot/ all'interno della memoria. Dopo
che GRUB ha determinato il sistema operativo o kernel da avviare, lo carica in
memoria e cede il controllo della macchina al sistema operativo.
70
Installazione di GRUB
•
Se non avete installato GRUB durante il processo di installazione, ecco il modo di
farlo in seguito, e di renderlo così il vostro boot loader di default.
•
Prima di installare GRUB, dovete accertarvi di avere l'ultima versione disponibile di
GRUB oppure potete utilizzare il pacchetto GRUB contenuto nel CDROM di
installazione.
•
Dopo avere installato il pacchetto GRUB, aprire un prompt della shell root ed eseguite
il comando /sbin/grub-install <posizione>, dove <posizione> è, la posizione in cui deve
essere installato il boot loader GRUB della fase 1. Per esempio, il seguente comando
installa GRUB sull'MBR del dispositivo IDE master sul bus IDE primario:
•
/sbin/grub-install /dev/hda
•
Al successivo avvio del sistema dovreste visualizzare il menu del boot loader grafico
GRUB prima del caricamento del kernel nella memoria.
71
Caratteristiche di GRUB
•
GRUB supporta la modalità Logical Block Addressing (LBA ).
•
GRUB può accedere al relativo file di configurazione /boot/grub/grub.conf a
ogni avvio del sistema, evitandovi dunque di dover scrivere una nuova
versione del boot loader primario nell'MBR tutte le volte che modificate le
opzioni.
72
grub.conf
chainloader </path/to/file> —
Permette di caricare il file
specificato come un loader a
catena. Se il file è posizionato
sul primo settore della
partizione specificata, usare
l'elenco a blocco, +1.
• root (<device-type>< devicenumber>,<partition>) —
Configura la partizione root
per GRUB, ed esegue il
montaggio della partizione.
• rootnoverify (<devicetype><devicenumber>,<partition>) —
Configura la partizione root
per GRUB, proprio come il
comando root, ma non esegue
il montaggio della parti
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux AS (2.6.8-1.523)
root (hd0,0)
kernel /vmlinuz-2.6.8-1.523 ro
root=/dev/VolGroup00/LogVol00 rhgb quiet
73
initrd /initrd-2.6.8-1.523.img