730 likes | 857 Views
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.
E N D
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
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.
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.
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
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
Seconda Parte di Messaggi Fase iniziale • dmesg.doc
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.
Run level • Runlevel 0Il 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.
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
Init stile BSD lo stile BSD prevede un singolo script per ogni runlevel.
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).
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.
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.
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 configuratoboot: Esegue il process durante il boot ed ignora la entry relativa al runlevel PROCESS - Il comando o script che effettivamente viene lanciato.
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:
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.sysinitQui 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
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.
/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!
continuazione del file initab Ad ogni boot viene eseguito il comando updateud::once:/sbin/updateComando 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 nowComandi 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
System V A ogni runlevel e' assegnata una dir contenente una serie di script di init,
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.
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.
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
Comandi di sistema at : schedula l'esecuzione di un processo a tempo determinatobg : 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.)
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
/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.
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.
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. 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.
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.
demoni o servizi I programmi avviati automaticamente all’avvio del sistema, sono detti demoni o servizi: caratteristica fondamentale, a differenza dei normali programmi, è che i demoni sono normalmente in esecuzione per tutta una sessione di lavoro dall’avvio allo shutdown. Il motivo è semplice: questi programmi, infatti, devono sempre essere in ascoltoper soddisfare eventuali richieste provenienti dall’utente o dall’esterno, nel caso la macchina sia in rete
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"!
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.
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
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.
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.
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.
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.
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.
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
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/FILEo, 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à!
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.
free Il 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.
top Mentre free visualizza solo le informazioni relative alla memoria, il comando top fà un pò di tutto. Uso della CPU, statistiche sul processo, utilizzo della memoria . Diversamente dal comando free, il comportamento di default di top è quello di esecuzione continua; non vi è il bisogno di usare il comando watch. Eccone un esempio: 14:06:32 up 4 days, 21:20, 4 users, load average: 0.00, 0.00, 0.00 77 processes: 76 sleeping, 1 running, 0 zombie, 0 stopped CPU states: cpu user nice system irq softirq iowait idle total 19.6% 0.0% 0.0% 0.0% 0.0% 0.0% 180.2% cpu00 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 100.0% cpu01 19.6% 0.0% 0.0% 0.0% 0.0% 0.0% 80.3% Mem: 1028548k av, 716604k used, 311944k free, 0k shrd, 131056k buff 324996k actv, 108692k in_d, 13988k in_c Swap: 1020116k av, 5276k used, 1014840k free 382228k cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND 17578 root 15 0 13456 13M 9020 S 18.5 1.3 26:35 1 rhn-applet-gu 19154 root 20 0 1176 1176 892 R 0.9 0.1 0:00 1 top 1 root 15 0 168 160 108 S 0.0 0.0 0:09 0 init 2 root RT 0 0 0 0 SW 0.0 0.0 0:00 0 migration/0 3 root RT 0 0 0 0 SW 0.0 0.0 0:00 1 migration/1 4 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 keventd 5 root 34 19 0 0 0 SWN 0.0 0.0 0:00 0 ksoftirqd/0 6 root 35 19 0 0 0 SWN 0.0 0.0 0:00 1 ksoftirqd/1 9 root 15 0 0 0 0 SW 0.0 0.0 0:07 1 bdflush 7 root 15 0 0 0 0 SW 0.0 0.0 1:19 0 kswapd 8 root 15 0 0 0 0 SW 0.0 0.0 0:14 1 kscand 10 root 15 0 0 0 0 SW 0.0 0.0 0:03 1 kupdated 11 root 25 0 0 0 0 SW 0.0 0.0 0:00 0 mdrecoveryd L’output del comando contiene le informazioni relative allo stato generale del sistema — l'uptime, il carico medio, i conteggi del processo, lo stato della CPU, e le statistiche sull'utilizzo sia per la memoria che per lo spazio di swap. Anche se top appare come un programma di sola visualizzazione, in realtà non lo è.
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.
su e sudo • suEsegue 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. sudoEsegue 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.
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]
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.
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
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.
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