La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema."— Transcript della presentazione:

1 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

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

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

4 4 vmlinuz e initrd Il kernel e' un file presente nella directory /boot che si chiamaa vmlinuz- (per esempio: vmlinuz 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 lhardware presente perché tra un avvio e l'altro la configurazione potrebbe anche cambiare, percio' scandaglia il PC alla ricerca delle varie periferiche presenti

5 5 Messaggi Fase iniziale [ 1] Linux version (gcc version (Debian GNU/Linux)) #11 Sun Mar 4 19:54:27 CET 2001 Detected kHz processor. [2] Console: colour VGA+ 80x25 Calibrating delay loop 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: (order 6, 256k) Page cache hash table entries: (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

6 6 Seconda Parte di Messaggi Fase iniziale dmesg.doc

7 7 Runlevels Prima di affrontare lavvio 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 lesistenza 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.

8 8 Run level Runlevel 0 Il sistema e in stato shutdown e richiede il riavvio manuale da parte dellutente. 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 allutente root, di accedere al sistema e impedisce a chiunque altro di accedervi. A questo livello si ha laccesso 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 allambiente 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 lhardware. Al contrario del runlevel 0 che è un riavvio a freddo (cold boot) perché lalimentazione elettrica viene tolta.

9 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

10 10 Init stile BSD lo stile BSD prevede un singolo script per ogni runlevel.

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

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

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

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

15 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:

16 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 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

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

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

19 19 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

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

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

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

23 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

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

25 25 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

26 26 /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.

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

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

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

30 30 demoni o servizi I programmi avviati automaticamente allavvio 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 dallavvio allo shutdown. Il motivo è semplice: questi programmi, infatti, devono sempre essere in ascoltoper soddisfare eventuali richieste provenienti dallutente o dallesterno, nel caso la macchina sia in rete

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

32 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 lavvio 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 nessunaltra 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.

33 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

34 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 è lultimo processo ad essere stato sospeso (fg senza parametri fa ripartire lultimo processo sospeso), laltro 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.

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

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

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

38 38 versioni del kernel Le versioni del kernel Linux sono identificate con numeri a tre cifre separate da un punto (ed: ) con una convenzione ben precisa. Per esempio il kernel 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.sito ufficiale del kernel Linux

39 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

40 40 directory /proc Essa contiene lo "stato in un dato momento del sistema" relativamente alle informazioni in continuo mutamento (ad esempio lapm, 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à!

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

42 42 free Il comando free mostra l'utilizzo della memoria del sistema. Ecco un esempio del suo output: total used free shared buffers cached Mem: /+ buffers/cache: Swap: 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.

43 43 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, 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% cpu % 0.0% 0.0% 0.0% 0.0% 0.0% 80.3% Mem: k av, k used, k free, 0k shrd, k buff k actv, k in_d, 13988k in_c Swap: k av, 5276k used, k free k cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND root M 9020 S :35 1 rhn-applet-gu root R :00 1 top 1 root S :09 0 init 2 root RT SW :00 0 migration/0 3 root RT SW :00 1 migration/1 4 root SW :00 0 keventd 5 root SWN :00 0 ksoftirqd/0 6 root SWN :00 1 ksoftirqd/1 9 root SW :07 1 bdflush 7 root SW :19 0 kswapd 8 root SW :14 1 kscand 10 root SW :03 1 kupdated 11 root SW :00 0 mdrecoveryd Loutput 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 è.

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

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

46 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][1]

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

48 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: s 0.45s startx

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

50 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: /+ buffers/cache: Swap: Per visualizzare la memoria RAM inutilizzata: bash$ free | grep Mem | awk '{ print $4 }' 1880

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

52 52 Conoscenza dellambiente di lavoro Conoscere le risorse tecnologiche a disposizione lspci lssub (hardware) Conoscere il profilo di tutti gli utenti

53 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

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

55 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

56 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

57 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.genitore 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 ]

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

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

60 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_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.

61 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 ? S 15:18 0:05 init [2] –root ? SW 15:18 0:00 [keventd] –root ? SW 15:18 0:00 [kswapd] –root ? SW 15:18 0:00 [bdflush] –root ? SW 15:18 0:00 [kupdated] –root ? SW 15:18 0:00 [knodemgrd_0] –root ? SW 15:18 0:00 [kjournald] –root ? SW 15:19 0:00 [kjournald] –root ? SW 15:19 0:00 [khubd] –mario pts/1 S 15:20 0:00 /bin/bash –mario 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 equivalente a: # kill -kill La sintassi generale del comando è del tipo: # kill 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:

62 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

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

64 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 – * * 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.

65 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

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

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

68 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.scriptdiAvvio\VI.doc

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

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

71 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, dove è, 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.

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

73 73 grub.conf chainloader 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 (, ) Configura la partizione root per GRUB, ed esegue il montaggio della partizione. rootnoverify (, ) 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 ( ) root (hd0,0) kernel /vmlinuz ro root=/dev/VolGroup00/LogVol00 rhgb quiet initrd /initrd img # section to load Windows title Windows rootnoverify (hd0,0) chainloader +1


Scaricare ppt "1 Amministrazione Linux Fasi iniziali Processo di avvio del sistema Processo di Init RunLevel Generalità sui processi Comandi di amministrazione del sistema."

Presentazioni simili


Annunci Google