1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel...

73
1 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 Visuallizzarlo da windows

Transcript of 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel...

Page 1: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

1

Amministrazione LinuxFasi 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

Visuallizzarlo da windows

Page 2: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

2

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.

Page 3: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

3

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.

Page 4: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

4

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

Page 5: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

5

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+ 80x25Calibrating 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 (Maiusc-Pag 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

Page 6: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

6

Seconda Parte di Messaggi Fase iniziale

• dmesg.doc

Page 7: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

7

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

• I processi avviati da init per ognuno di questi runlevel sono definiti nel file /etc/inittab. Init puo’ essere in uno degli otto runlevel, 0-6 e S o s. Il runlevel e’ cambiato da un utente privilegiato lanciando /sbin/telinit, il quale invia un segnale appropriato a init, indicandogli a quale runlevel passare.

Page 8: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

8

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 1Questo 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 2Livello 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 3Livello detto anche network mode, e’ identico al livello 2 con il supporto di rete abilitato.

• Runlevel 4Livello definito in modo variabile dai produttori di sistemi Linux. Spesso e’ inutilizzato.

• Runlevel 5Livello detto anche hardware state. E’ disponibile il prompt dei comandi e gli utenti sono abilitati a collegarsi e scollegarsi all’ambiente grafico X.

• Runlevel 6Questo 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 è un riavvio a freddo (cold boot) perché l’alimentazione elettrica viene tolta.

Page 9: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

9

i n i t

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

Page 10: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

10

Init stile BSD

lo stile BSD prevede un singolo script per ogni runlevel.

Page 11: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

11

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).

Page 12: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

12

BSDBSD 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.

Page 13: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

13

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.

Page 14: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

14

InittabOgni 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 configuratoboot: Esegue il process durante il boot ed ignora la entry relativa al runlevel

PROCESS - Il comando o script che effettivamente viene lanciato.

Page 15: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

15

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:

Page 16: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

16

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 desideratol0:0:wait:/etc/rc.d/rc 0l1:1:wait:/etc/rc.d/rc 1l2:2:wait:/etc/rc.d/rc 2l3:3:wait:/etc/rc.d/rc 3l4:4:wait:/etc/rc.d/rc 4l5:5:wait:/etc/rc.d/rc 5l6:6:wait:/etc/rc.d/rc 6

Page 17: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

17

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.

Page 18: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

18

/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!

Page 19: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

19

continuazione del file initabAd 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-DELETEca::ctrlaltdel:/sbin/shutdown -t3 -r now

Comandi abbinati ai messaggi mandati dall'UPSpf::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 runlevels1:2345:respawn:/sbin/mingetty tty12:2345:respawn:/sbin/mingetty tty2……..

Al runlevel 5 esegue il comando prefdmx:5:respawn:/etc/X11/prefdm -nodaemon

Page 20: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

20

System V

A ogni runlevel e' assegnata una dir contenente una serie di script di init,

Page 21: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

21

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.

Page 22: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

22

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.

Page 23: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

23

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

Page 24: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

24

Comandi di sistema at : schedula l'esecuzione di un processo a tempo determinato

bg : esegue un processo in backgroundfg : esegue un processo in foregroundjobs : mostra i processi in backgroundps : 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 pidnice : cambia la priorita' ad un processotop : mostra i primi n processi che utilizzano le risorsetree : mostra i processi ad albero (i padri, i figli, i figli dei figli etc.)

Page 25: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

25

Comandi di sistema

• df : Calcola lo spazio disponibile di tutte le periferiche di memorizzazione montate sul file systemdu : Visualizza informazioni sull'utilizzo del discofdformat : Formatta un floppyfdisk : Partiziona un disco fissofsck : Controlla e ripara un file system danneggiatomkfs : Crea un nuovo file systemmknod : Crea un file di dispositivomkswap : Crea lo spazio di swap per Linux in un file o in una partizione del disco fissomount : Monta una periferica nel file system (esempio floppy, CD rom ecc)swapoff : Disattiva lo spazio di swap precedentemente creatoswapon : Attiva lo spazio di swapsync : Scrive effettivamente nei file i dati contenuti nei buffer in ramtty : Visualizza il nome del dispositivo per il terminale in usoumount : Smonta una periferica precedentemente montata nel file system

Page 26: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

26

/etc/rc.d/rc.sysinitQuesto è 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.

Page 27: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

27

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.

Page 28: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

28

ProcessiIn 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 definiscePPID (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.

JOBLa 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.

Page 29: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

29

La Schedulazione dei processi del kernelNel 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 diprocesso:

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.

Page 30: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

30

demoni o servizi

I programmi avviati automaticamente all’avvio del sistema, sono detti demoni o servizi: caratteristica fondamentale, a differenza dei normaliprogrammi, è che i demoni sono normalmente in esecuzione per tutta unasessione di lavoro dall’avvio allo shutdown. Il motivo è semplice: questi programmi, infatti, devono sempre essere inascoltoper soddisfare eventuali richieste provenienti dall’utente o dall’esterno, nel caso la macchina sia in rete

Page 31: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

31

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"!

Page 32: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

32

• 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.

Page 33: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

33

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

Page 34: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

34

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.

Esistono inoltre vari comandi (file autonomi, non incorportati nella shell) utili per gestire i processi:kill: Invia un segnale ad un processo attivo (normalmente utilizzato per fermare un processo). nice [priority] [command]: E' un prefisso utilizzato per assegnare un certo livello di priorità al comando che si sta per eseguire. -20 vuol dire massima priorità, 19 è minima priorità.nohup : Si può utilizzare prima di qualsiasi per evitare che il processo determinato dal comando non cada al segnale SIGHUP. E' utile quando si lavora su macchine remote e si devono eseguire comandi che possono durare a lungo. Evita l'interruzione del processo quando per problemi di rete o normale operatività ci si sconnette dalla sessione remota (via telnet o ssh). Lo standard error e tutti gli output che verrebbero stampati a schermo vengono scritti sul file nohup.out.  ps: Visualizza un elenco dei processi in fase di esecuzione pstree: Simile a ps ma mostra chiaramente le relazioni tra processi padre e processi figli.top: Visualizza un elenco dei processi che sfruttano intensamente il processore e consumano molta memoria.

Page 35: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

35

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 COMMAND

1 ? S 0:05 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.

Page 36: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

36

Contenuto di /etc/sysconfigfile di configurazione contenenti funzione e informazioni non complete, poichè molti dei file hanno numerose opzioni utilizzate solo in casi specificio rari.

Page 37: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

37

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.

Page 38: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

38

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.

Page 39: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

39

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

Page 40: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

40

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à!

Page 41: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

41

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.

Page 42: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

42

freeIl comando free mostra l'utilizzo della memoria del sistema. Ecco un esempio del suo

output:

total used free shared buffers cached

Mem: 255508 240268 15240 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.

Page 43: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

43

topMentre 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 è.

Page 44: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

44

vmstatPer 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.

Page 45: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

45

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.

Page 46: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

46

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]

Page 47: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

47

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 rootbash# 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.

Page 48: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

48

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.

bash$ whoami bozo

w

Visualizza tutti gli utenti connessi ed i processi di loro appartenenza. È la versione estesa di who. L'output di w

può essere collegato con una pipe a grep per la ricerca di un utente e/o processo specifico.

bash$ w | grep startx bozo tty1 - 4:22pm 6:41 4.47s 0.45s startx

Page 49: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

49

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.

Page 50: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

50

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

Page 51: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

51

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.

Page 52: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

52

Conoscenza dell’ambiente di lavoro

• Conoscere le risorse tecnologiche a disposizione

• lspci lssub (hardware)

• Conoscere il profilo di tutti gli utenti

Page 53: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

53

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

Page 54: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

54

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.

Page 55: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

55

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)

– v

Page 56: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

56

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

Page 57: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

57

• 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

– Serie di comandi per arrestare il sistema, solitamente prima dello spegnimento della macchina.

• service

– Avvia o arresta un servizio di sistema. Gli script di avvio (startup) presenti in /etc/init.d e in /etc/rc.d usano questo comando per

attivare i servizi nella fase di boot.

– root# /sbin/service iptables stop Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: filter [ OK ] Unloading iptables

modules: [ OK ]

Page 58: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

58

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], per

scorrere a ritroso premete il tasto [b] e per uscire premete [q].

• Tuttavia, sfogliare tutte le pagine di .bash_history per ricercare un comando può

essere noioso. In alternativa, si possono ricercare delle parole chiave attraverso il

comando grep, un'utility di ricerca davvero potente.

Page 59: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

59

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

semplicemente i tasti freccia per muovervi avanti e indietro nell'elenco dei

comandi,fino a quando non trovate il comando desiderato. Premete [Invio] per

eseguire il comando, come se lo aveste digitato sulla linea di comando.

Page 60: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

60

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_profileComparirà 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_profileAggiungendo 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.

Page 61: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

61

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    PID % CPU % MEM   VSZ   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:

–  1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL –  5) SIGTRAP      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:

Page 62: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

62

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

Page 63: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

63

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''.

Page 64: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

64

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.

Page 65: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

65

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

Page 66: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

66

Scorciatoiehistory 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) CTRL-T inverte gli ultimi due caratteri a sinistra del cursore, cioe' ab diventa ba

(T sta per transpose) ALT-T inverte le ultime due parole a sinistra del cursore, cioe' cp pippo pluto

diventa cp pluto pippo ALT-U trasforma in maiuscolo la parola su cui si trova il cursore (U sta per

uppercase, cioe' maiuscolo) ALT-L trasforma in minuscolo la parola su cui si trova il cursore (L sta per

lowercase, cioe' minuscolo) tasto TAB espande il nome di un file o di un comando

Page 67: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

67

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.

Page 68: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

68

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.

Page 69: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

69

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.

Page 70: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

70

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.

Page 71: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

71

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.

Page 72: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

72

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.

Page 73: 1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema.

73

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>< device-number>,<partition>) — Configura la partizione root per GRUB, ed esegue il montaggio della partizione.

• rootnoverify (<device-type><device-number>,<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 initrd /initrd-2.6.8-1.523.img # section to load Windows title Windows rootnoverify (hd0,0) chainloader +1