Amministrare GNU/Linux

Simone Piccardi
piccardi@truelite.it

Truelite Srl

http://www.truelite.it

info@truelite.it

ii Copyright c 2003-2004 Simone Piccardi & Truelite S.r.l. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with Front-Cover Texts: “Truelite Srl http://www.truelite.it info@truelite.it”, and with no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”.

Questa documentazione libera ` stata sviluppata all’interno delle attivit` formative e a effettuate da Truelite S.r.l. Il materiale ` stato finanziato nel corso della realizzazione e dei corsi erogati dall’azienda, e viene messo a disposizione di tutti sotto licenza GNU FDL. Questo testo, insieme al resto della documentazione libera realizzata da Truelite S.r.l., viene distribuito su internet all’indirizzo: http://sources.truelite.it/index.php?page=documentazione dove saranno pubblicate nuove versioni ed aggiornamenti.

Societ` italiana specializzata nella fornitura di servizi, consulenza e formazione esclua sivamente su GNU/Linux e software libero. Per informazioni: Truelite S.r.l Via Monferrato 6, 50142 Firenze. Tel: 055-7879597 Fax: 055-7333336 e-mail: info@truelite.it web: http://www.truelite.it

Indice
1 L’architettura di un sistema GNU/Linux 1.1 L’architettura del sistema. . . . . . . . . . . . . . . . . . . . . . . 1.1.1 L’architettura di base. . . . . . . . . . . . . . . . . . . . . 1.1.2 Il funzionamento del sistema . . . . . . . . . . . . . . . . 1.1.3 Alcune caratteristiche specifiche di Linux . . . . . . . . . 1.2 L’architettura dei file . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Il Virtual File System e le caratteristiche dei file. . . . . . 1.2.2 L’architettura di un filesystem e le propriet` dei file . . . a 1.2.3 L’organizzazione delle directory ed il Filesystem Hierarchy 1.2.4 La gestione dell’uso di dischi e volumi . . . . . . . . . . . 1.3 L’architettura dei processi . . . . . . . . . . . . . . . . . . . . . . 1.3.1 Le propriet` dei processi . . . . . . . . . . . . . . . . . . . a 1.3.2 I segnali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.3 Priorit` . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 1.3.4 Sessioni di lavoro e job control . . . . . . . . . . . . . . . 1.4 Il controllo degli accessi . . . . . . . . . . . . . . . . . . . . . . . 1.4.1 Utenti e gruppi . . . . . . . . . . . . . . . . . . . . . . . . 1.4.2 I permessi dei file . . . . . . . . . . . . . . . . . . . . . . . 1.4.3 I permessi speciali . . . . . . . . . . . . . . . . . . . . . . 1.4.4 La gestione dei permessi dei file . . . . . . . . . . . . . . . 1.4.5 Altre operazioni privilegiate . . . . . . . . . . . . . . . . . 2 La shell e i comandi 2.1 L’interfaccia a linea di comando. . . . . . . . . . . . . 2.1.1 La filosofia progettuale . . . . . . . . . . . . . . 2.1.2 Le principali shell . . . . . . . . . . . . . . . . 2.1.3 Introduzione alla sintassi della riga di comando 2.1.4 Funzionalit` interne della shell . . . . . . . . . a 2.1.5 La redirezione dell’I/O . . . . . . . . . . . . . . 2.1.6 Scripting elementare . . . . . . . . . . . . . . . 2.2 I comandi dei file . . . . . . . . . . . . . . . . . . . . . 2.2.1 Caratteristiche comuni . . . . . . . . . . . . . . 2.2.2 I comandi per le ricerche sui file . . . . . . . . 2.2.3 I comandi visualizzare il contenuto dei file . . . 2.2.4 I comandi per suddividere il contenuto dei file . 2.2.5 I comandi per filtrare il contenuto dei file . . . 2.2.6 Altri comandi dei file . . . . . . . . . . . . . . . 2.3 Altri comandi . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 I comandi per la documentazione . . . . . . . . 2.3.2 I comandi per la gestione dei tempi . . . . . . . iii 1 1 1 3 4 5 6 9 14 19 24 25 34 36 38 40 40 42 43 45 46 51 51 51 52 53 55 63 67 74 75 75 82 83 85 88 89 89 92

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

iv 2.3.3 I comandi di ausilio per la redirezione Gli editor di testo . . . . . . . . . . . . . . . . 2.4.1 Introduzione . . . . . . . . . . . . . . 2.4.2 Un editor evoluto: emacs o xemacs . . 2.4.3 Un editor di base, vi . . . . . . . . . . 2.4.4 Gli altri editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

INDICE . . . . . . . 94 . 95 . 95 . 96 . 99 . 101 105 105 105 106 108 110 111 113 113 113 114 114 115 116 117 120 122 122 123 129 130 132 132 133 135 139 147 147 147 149 152 153 155 155 157 158 159 160 161 163 167

2.4

3 La configurazione dei servizi di base 3.1 I file di configurazione . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Una panoramica generale . . . . . . . . . . . . . . . . 3.1.2 La gestione delle librerie condivise . . . . . . . . . . . 3.1.3 Il Name Service Switch . . . . . . . . . . . . . . . . . 3.1.4 I file usati dalla procedura di login . . . . . . . . . . . 3.1.5 La configurazione del sistema delle pagine di manuale 3.2 Altri file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Il file rc.local e la directory rc.boot . . . . . . . . . 3.2.2 La directory /etc/skel ed il file /etc/shells . . . . 3.2.3 Il file /etc/updatedb.conf . . . . . . . . . . . . . . . 3.3 I servizi di base . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 Il servizio cron . . . . . . . . . . . . . . . . . . . . . . 3.3.2 Il servizio at . . . . . . . . . . . . . . . . . . . . . . . 3.3.3 Il servizio syslog . . . . . . . . . . . . . . . . . . . . . 3.3.4 Il sistema di rotazione dei file di log . . . . . . . . . . 3.4 L’X Window System . . . . . . . . . . . . . . . . . . . . . . . 3.4.1 Introduzione a X Window System . . . . . . . . . . . 3.4.2 La configurazione del server X . . . . . . . . . . . . . 3.4.3 L’avvio del server . . . . . . . . . . . . . . . . . . . . . 3.4.4 L’uso di X Window dal lato client . . . . . . . . . . . 3.5 Il sistema di stampa . . . . . . . . . . . . . . . . . . . . . . . 3.5.1 Introduzione generale . . . . . . . . . . . . . . . . . . 3.5.2 Il sistema di stampa in stile BSD . . . . . . . . . . . . 3.5.3 La configurazione della stampa con LPRng . . . . . . 3.5.4 Il Common Unix Printing System . . . . . . . . . . . 4 Amministrazione ordinaria del sistema 4.1 Archiviazione e backup . . . . . . . . . . . . . . . . 4.1.1 Criteri generali per il backup . . . . . . . . 4.1.2 Il comando tar . . . . . . . . . . . . . . . . 4.1.3 Il comando cpio . . . . . . . . . . . . . . . 4.1.4 I comandi dump e restore . . . . . . . . . . 4.2 La gestione dei pacchetti software . . . . . . . . . . 4.2.1 L’installazione diretta . . . . . . . . . . . . 4.2.2 La gestione dei pacchetti con rpm . . . . . . 4.2.3 La gestione dei pacchetti di Debian . . . . . 4.3 La gestione di utenti e gruppi . . . . . . . . . . . . 4.3.1 Una visione generale . . . . . . . . . . . . . 4.3.2 I comandi per la gestione di utenti e gruppi 4.3.3 Il database di utenti e gruppi . . . . . . . . 4.3.4 Il Pluggable Authentication Method . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

INDICE 5 Amministrazione straordinaria del sistema 5.1 La gestione di kernel e moduli . . . . . . . . . . 5.1.1 Le versioni del kernel . . . . . . . . . . . 5.1.2 Sorgenti e patch . . . . . . . . . . . . . 5.1.3 La ricompilazione del kernel . . . . . . . 5.1.4 La gestione dei moduli . . . . . . . . . . 5.2 La gestione dei dischi e dei filesystem . . . . . . 5.2.1 Alcune nozioni generali . . . . . . . . . 5.2.2 Il partizionamento . . . . . . . . . . . . 5.2.3 La creazione di un filesystem . . . . . . 5.2.4 Controllo e riparazione di un filesystem 5.2.5 La gestione della swap . . . . . . . . . . 5.3 La gestione dell’avvio del sistema . . . . . . . . 5.3.1 L’avvio del kernel . . . . . . . . . . . . . 5.3.2 L’uso di LILO . . . . . . . . . . . . . . 5.3.3 L’uso di GRUB . . . . . . . . . . . . . . 5.3.4 Il sistema di inizializzazione alla SysV . 5.4 La gestione di interfacce e periferiche . . . . . . 5.4.1 Gestione delle interfacce di espansione . 5.4.2 Gestione delle interfacce SCSI . . . . . . 5.4.3 Gestione delle interfacce seriali . . . . . 5.4.4 Gestione delle interfacce USB . . . . . . 6 Amministrazione avanzata del sistema 6.1 L’utilizzo del RAID . . . . . . . . . . . . . . . 6.1.1 Introduzione . . . . . . . . . . . . . . 6.1.2 Il RAID su Linux . . . . . . . . . . . . 6.1.3 Il RAID software . . . . . . . . . . . . 6.2 Il sistema del Logical Volume Manager . . . . 6.2.1 Introduzione . . . . . . . . . . . . . . 6.2.2 La gestione dei volumi fisici . . . . . . 6.2.3 La gestione dei gruppi di volumi . . . 6.2.4 La gestione dei volumi logici . . . . . 6.2.5 Il ridimensionamento dei filesystem . . 6.3 Le quote disco . . . . . . . . . . . . . . . . . 6.3.1 Visione generale . . . . . . . . . . . . 6.3.2 Configurazione del sistema delle quote 6.3.3 Gestione delle quote di utenti e gruppi 7 L’amministrazione di base delle reti 7.1 Un’introduzione ai concetti fondamentali 7.1.1 L’estensione . . . . . . . . . . . . 7.1.2 La topologia . . . . . . . . . . . 7.1.3 I protocolli . . . . . . . . . . . . 7.2 Il TCP/IP. . . . . . . . . . . . . . . . . 7.2.1 Introduzione. . . . . . . . . . . . 7.2.2 Gli indirizzi IP . . . . . . . . . . 7.2.3 Il routing . . . . . . . . . . . . . 7.2.4 I servizi e le porte. . . . . . . . . 7.3 La configurazione di base . . . . . . . . 7.3.1 Il supporto nel kernel . . . . . .

v 169 169 169 170 173 183 189 189 190 194 198 202 204 204 207 210 212 216 216 223 228 229 235 235 235 238 238 242 242 244 245 247 249 250 250 250 252 255 255 255 256 257 260 261 263 266 267 269 269

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

delle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

reti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

vi 7.3.2 Il comando ifconfig . . . . . . . . . . . . . . 7.3.3 Il comando route . . . . . . . . . . . . . . . . 7.3.4 La configurazione automatica. . . . . . . . . . . 7.3.5 I file di configurazione delle interfacce statiche. I comandi diagnostici . . . . . . . . . . . . . . . . . . . 7.4.1 Il comando ping . . . . . . . . . . . . . . . . . 7.4.2 Il comando traceroute . . . . . . . . . . . . . 7.4.3 Il comando netstat . . . . . . . . . . . . . . . 7.4.4 Il protocollo ARP ed il comando arp . . . . . . I client dei servizi di base . . . . . . . . . . . . . . . . 7.5.1 Il comando telnet . . . . . . . . . . . . . . . . 7.5.2 Il comando ftp . . . . . . . . . . . . . . . . . . 7.5.3 Il comando finger . . . . . . . . . . . . . . . . 7.5.4 Il comando whois . . . . . . . . . . . . . . . . La risoluzione dei nomi . . . . . . . . . . . . . . . . . . 7.6.1 Introduzione . . . . . . . . . . . . . . . . . . . 7.6.2 I file /etc/hosts e /etc/hostname . . . . . . . 7.6.3 Gli altri file per i nomi di rete . . . . . . . . . . 7.6.4 Il file /etc/nsswitch.conf . . . . . . . . . . . 7.6.5 Il file /etc/resolv.conf . . . . . . . . . . . . 7.6.6 Il file /etc/host.conf . . . . . . . . . . . . . . Il protocollo PPP . . . . . . . . . . . . . . . . . . . . . 7.7.1 Il demone pppd . . . . . . . . . . . . . . . . . . 7.7.2 I meccanismi di autenticazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

INDICE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 273 277 278 280 280 281 283 284 286 286 286 288 288 289 289 290 291 293 294 295 295 295 297 299 299 299 301 305 308 308 308 309 311 311 311 313 314 316 316 318 319 319 321 322

7.4

7.5

7.6

7.7

8 La gestione dei servizi di base 8.1 La gestione dei servizi generici . . . . . . . . . . . 8.1.1 Il superdemone inetd . . . . . . . . . . . . 8.1.2 Il superdemone xinetd . . . . . . . . . . . 8.1.3 I TCP wrappers . . . . . . . . . . . . . . . 8.2 I protocolli RARP, BOOTP e DHCP . . . . . . . . 8.2.1 Il protocollo RARP . . . . . . . . . . . . . 8.2.2 Il protocollo BOOTP . . . . . . . . . . . . 8.2.3 Il protocollo e la configurazione di un server 8.2.4 Uso del servizio DHCP dal lato client . . . 8.3 Il servizio SSH . . . . . . . . . . . . . . . . . . . . 8.3.1 Il server sshd . . . . . . . . . . . . . . . . . 8.3.2 I comandi ssh ed scp . . . . . . . . . . . . 8.3.3 Autenticazione a chiavi . . . . . . . . . . . 8.4 Il protocollo NFS . . . . . . . . . . . . . . . . . . . 8.4.1 Il server NFS . . . . . . . . . . . . . . . . . 8.4.2 NFS sul lato client . . . . . . . . . . . . . . 8.5 La condivisione dei file con Samba . . . . . . . . . 8.5.1 La configurazione di Samba come server . . 8.5.2 L’impostazione degli utenti . . . . . . . . . 8.5.3 L’uso di Samba dal lato client . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DHCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

INDICE 9 Il servizio DNS 9.1 Il funzionamento del servizio DNS . . . . . . . 9.1.1 Introduzione . . . . . . . . . . . . . . . 9.1.2 I comandi host e dig . . . . . . . . . . 9.2 La gestione di un server DNS . . . . . . . . . . 9.2.1 Il server named . . . . . . . . . . . . . . 9.2.2 Il file named.conf . . . . . . . . . . . . 9.2.3 La configurazione base . . . . . . . . . . 9.2.4 La configurazione di un dominio locale. 9.3 Configurazioni avanzate . . . . . . . . . . . . . 9.3.1 La delegazione di una zona . . . . . . . 9.3.2 La gestione di un secondario . . . . . . 9.3.3 La configurazione con bind4 . . . . . . . A Sinossi dei comandi principali A.1 Comandi per la gestione dei file . . . . . . A.2 Comandi per la gestione dei processi . . . A.3 I permessi dei file . . . . . . . . . . . . . . A.4 Comandi per la localizzazione dei file . . . A.5 Comandi per la documentazione . . . . . A.6 Comandi per la gestione dei tempi . . . . A.7 Comandi di archiviazione e compressione . A.8 Gestione dei pacchetti . . . . . . . . . . . A.9 I comandi diagnostici . . . . . . . . . . . . A.10 I client dei servizi base . . . . . . . . . . .

vii 325 325 325 326 328 328 329 330 332 337 337 337 337 339 339 340 340 340 341 341 341 342 342 342

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

B Indice degli argomenti per LPI 343 B.1 Argomenti LPI 101 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 B.2 Argomenti LPI 102 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 C GNU Free Documentation License C.1 Applicability and Definitions . . . . . C.2 Verbatim Copying . . . . . . . . . . . C.3 Copying in Quantity . . . . . . . . . . C.4 Modifications . . . . . . . . . . . . . . C.5 Combining Documents . . . . . . . . . C.6 Collections of Documents . . . . . . . C.7 Aggregation With Independent Works C.8 Translation . . . . . . . . . . . . . . . C.9 Termination . . . . . . . . . . . . . . . C.10 Future Revisions of This License . . . 345 345 346 346 347 348 349 349 349 349 349

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

.

ma non per questo non esiste innovazione. come sistema multitasking e multiutente. dei sistemi di tipo Unix. GNU/Linux nasce. (le unit` di esecuzione dei programmi). dall’autenticazione all’interfaccia utente. secondo una struttura come quella mostrata in fig. Il concetto base dell’architettura di ogni sistema Unix come GNU/Linux ` quello di una rigida e separazione fra il kernel (il nucleo del sistema).1 L’architettura di base. conviene fornire un quadro generale per introdurre i vari concetti su cui si basa l’architettura di questo sistema. agli applicativi. come oggi sempre pi` spesso accade. Questo significa che GNU/Linux ha una architettura di sistema che ` stata pensata fin dall’inizio per l’uso contemporaneo da parte di pi` utenti. e 1. e il kernel space.Capitolo 1 L’architettura di un sistema GNU/Linux 1. che a nel caso vanno dai comandi base di sistema. Tutto il resto. e I due ambienti comunicano attraverso un insieme di interfacce ben definite e standardizzate. 1. che ` l’ambiente a disposizione degli utenti. alle interfacce per l’interazione con gli utenti. le periferiche e i processi. che ` l’ambiente in cui viene eseguito il kernel. viene realizzato usando processi che eseguono gli opportuni programmi. ma anche le case hanno da secoli le stesse a basi architetturali (porte.1. Contrariamente ad altri sistemi operativi. Questo comporta e u conseguenze non del tutto intuitive nel caso in cui. come tutti gli Unix. garantendo una corretta distribuzione fra gli stessi della memoria e del tempo di CPU. come la CPU. in e cui vengono eseguiti i processi. e quello di provvedere le adeguate interfacce software per l’accesso alle periferiche della macchina e le infrastrutture di base necessarie per costruire i servizi. Lo scopo del kernel infatti ` solo quello di essere in grado di eseguire contemporaneamente e molti processi in maniera efficiente. 1 . muri e tetti). e Il fatto che questa architettura abbia una certa et` fa s` che spesso i detrattori di GNU/Linux a ı ne denuncino la presunta mancanza di innovativit`. tanto che ormai ` e divenuto comune il detto che chi non usa l’architettura Unix ` destinato a reinventarla.1 L’architettura del sistema. Il vantaggio della architettura di Unix infatti ` quello di aver fornito una solida base per la costruzione di e sistemi affidabili ed efficienti.1. cui si demanda la gestione delle risorse hardware. Prima di addentrarci nei dettagli dell’amministrazione di un sistema GNU/Linux. Questo si traduce in una delle caratteristiche essenziali su cui si basa l’architettura dei sistemi Unix: la distinzione fra il cosiddetto user space. che ` basata su quella. esso u venga usato come stazione di lavoro da un utente singolo. consolidatasi in 30 anni di impiego. consolidata e corretta in decenni di utilizzo. la memoria.

La memoria virtuale ` uno dei a e sottosistemi pi` importanti del kernel2 perch´ ` quella che fa in modo che ogni processo veda uno u ee spazio di indirizzi proprio che poi viene rimappato3 nella memoria fisica effettivamente presente. l’eventuale spostamento delle pagine di memoria meno usate su uno opportuno spazio disco (lo swap. specifiche a e 1 . una descrizione pi` dettagliata del funzionamento della memoria virtuale pu` essere trovata nella sezione 2. 3 questo viene in genere realizzato con l’ausilio delle MMU (Memory Management Unit) dei microprocessori. 1. l’user space. (sigla che sta per Virtual Memory) si occuper` invece di gestire l’uso della memoria disponibile. quella indicata in fig.5) evitando di fermare l’esecuzione di un processo per una temporanea mancanza di memoria.2 CAPITOLO 1. indicata in fig. ed a ` l’unico a poter accedere direttamente alle risorse dell’hardware. 1.1). che vengono utilizzate attraverso l’interfaccia fornita dalla libreria di sistema (la GNU C library di fig.1 le cosiddette system call. Infine c’` un’ultima parte del kernel. Questa architettura comporta che solo il kernel viene eseguito in modalit` privilegiata. I normali programmi invece e verranno eseguiti in modalit` protetta. 1. cos` che sia impossibile che un processo possa accedere alla memoria di un altro processo. in cui essi vedono a se stessi come se avessero piena disponibilit` della CPU e della memoria.1 come VM. si incaricher` a della gestione del tempo di processore e provveder` a decidere volta per volta qual’` il processo a e che deve essere eseguito in un determinato momento (realizzando cos` il multitasking). L’ARCHITETTURA DI UN SISTEMA GNU/LINUX Figura 1. in un ambiente virtuale. 2 e oggetto di continui rifacimenti. ma un insieme di varie parti diverse.1 come scheduler.1. 1. ı Una seconda parte. quella indicata in fig.2. ma in cui possono a accedere alle periferiche e alle altre funzionalit` messe a disposizione del kernel solo attraverso a una serie di funzioni di sistema standardizzate. in caso di esaurimento della RAM. ma oltre quelle dello standard Linux supporta alcune system call ulteriori relative a sue estensioni specifiche.3. u o 4 questa in realt` non ` un unico sottosistema come le precedenti. La ı memoria virtuale si incarica anche di gestire.2 di [1]. In sostanza quello che succede ` che da un certo punto di vista l’unico “vero” programma che e viene eseguito ` il kernel che si incarica di costruire questo ambiente virtuale in cui fare girare gli e altri programmi. in quanto critico per tutte le prestazioni del sistema. che tratteremo in sez. 1. 5.1: Schema della struttura del sistema operativo GNU/Linux. Una parte del kernel.4 che e lo standard in questo caso si chiama POSIX.1. Torneremo brevemente sull’argomento in sez.1 con l’indicazione generica driver.

Una volta che il controllo ` passato al kernel questo. Questa.2. e La conseguenza pi` importante di questa separazione fra user space e kernel space ` che in u e questo modo non ` possibile che un singolo programma possa disturbare l’azione di un altro e programma o del kernel stesso.1. Fra questi processi ci saranno ad esempio quelli che forniscono i vari servizi di rete. cos` come quelli che si occupano di chiedere nome e ı password dell’utente che si vuole collegare. 1. cui spesso si fa riferimento dicendo che in un sistema unix-like tutto ` un file. 6 in realt` se la cosa ` fatta da console i programmi sono due. e far` partire il primo processo. ed ` il programma di inizializzazione che a sua volta si cura di far e partire tutti gli altri processi che permettono di usare il sistema. o dal lanciare un server web che viene eseguito anche quando nessuno ` collegato e al sistema. come la copia di un file. All’accensione del computer viene eseguito il programma che sta nel BIOS. 1. quelli che eseguono vari compiti di amministrazione. 3. Da questo punto di vista eseguire sulla shell un programma per vedere la lista dei file non ha niente di diverso dall’eseguire in ambiente grafico un programma di scrittura o un programma di fotoritocco. Nei PC tutto ci` viene effettuato caricando dal o dispositivo indicato nelle impostazioni del BIOS un apposito programma. il primo chiede l’utente e poi chiama il secondo a e che chiede la password.4.1. e si leggono le tabelle delle partizioni dei vari dischi) si incaricher` di montare (vedi sez. il bootloader. . come vedremo meglio a in sez. ` E da rimarcare poi come anche tutti i programmi che un utente di un sistema GNU/Linux pu` utilizzare una volta che si ` collegato non hanno niente di diverso da quelli appena citati.3. Per convenzione questo a processo si chiama init. che vedremo in sez. 3.2.4).4 e sez.1. 1. 5.6 e che una volta completato il collegamento (procedura che viene chiamata login) lanciano altri programmi per mettere a disposizione dell’utente l’interfaccia da cui inviare i comandi.3). in genere e e ogni sistema ha il suo. e questo ` il principale motivo della stabilit` di un sistema Unix e a nei confronti di altri sistemi in cui i processi non hanno di questi limiti. per vari motivi. L’ARCHITETTURA DEL SISTEMA. 3 si incaricher` di accedere alle periferiche per conto dei programmi.3. eseguiti all’interno del kernel.4. 2) che una delle tante interfacce grafiche disponibili (argomento che riprenderemo in sez. o vengono. 1. per il tipo di periferica in questione.7 che altri sistemi operativi (come Windows) hanno al loro interno: tutte le operazioni di normale amministrazione di un sistema GNU/Linux sono sempre realizzate tramite degli opportuni programmi.1. 5. o e Tutti i programmi funzionano allo stesso modo: vengono eseguiti dal kernel come processi ed eseguono le loro operazioni attraverso le opportune system call che esso mette a disposizione. nel caso di Linux per l’architettura PC i due principali sono LILO e GRUB. terminata la fase di inizializzazione (in e cui ad esempio si esegue una scansione delle periferiche disponibili. su cui torneremo in dettaglio in sez. 7 questa infatti viene eseguita usando semplicemente le funzioni che permettono di leggere e scrivere il contenuto di un file.2.3. che potrebbe essere sia una shell a riga di comando (argomento che tratteremo in dettaglio in cap.2) il filesystem su cui ` situata a e la directory radice (vedi sez. torneremo su questo in sez.5 che a sua volta recupera (in genere dal disco) una immagine del kernel che viene caricata in memoria ed eseguita. il cui solo compito ` quello di far partire un sistema operativo. Questo significa ad esempio che il kernel di per s´ non dispone di primitive per tutta una e serie di operazioni.2 Il funzionamento del sistema Per illustrare meglio la distinzione fra kernel space e user space prendiamo in esame brevemente in esame la procedura di avvio del sistema. leggendo l’originale e scrivendo sulla copia. questo dopo aver fatto i suoi controlli interni esegue la procedura di avvio del sistema. permette di definire una interfaccia di accesso generica per qualunque dispositivo. 5 questo ` un programma speciale. 5.

che a loro a volta ne potranno lanciare degli altri ancora. Nell’esempio appena fatto abbiamo accennato ad un programma particolare. ecc.1. un a server di posta.4 CAPITOLO 1. come nel caso di Debian. viene chiamato solo “Linux”.3 Alcune caratteristiche specifiche di Linux Bench´ Linux stia diventando il pi` diffuso. ecc. Bench´ sia possibile per usi particolari (ad esempio in sistemi embedded 10 che devono svolgere e un solo compito) far partire un qualunque altro programma al posto di init. anche tutti i programmi che gli permettano di eseguire le varie operazioni con i dischi. detto SysV (da System V. Solaris. 1. lo sterzo. Si tenga presente infine che anche se il kernel tratta tutti i programmi allo modo. init. che ha un ruolo privilegiato in quanto ` quello che si occupa dell’inizializzazione e del sistema quando questo viene fatto partire. La prima caratteristica distintiva di Linux ` che esso ` stato riscritto da zero. e 10 si chiamano cos` i sistemi destinati all’esecuzione di compiti specifici. i file.3) che ` quella per cui qualunque processo pu` a sua volta e o ` avviarne di nuovi. esistono parecchi altri kernel unix-like. a seconda di quanto deciso (ed installato) dall’amministratore.11 in pratica tutti i sistemi Unix usano questo specifico programma per gestire l’avvio del sistema. ed ` per questo che ` pi` corretto riferirsi all’intero sistema come e e e u a GNU/Linux. RedHat. per andare a costruire quella che viene chiamata una distribuzione. 5.4 come in casi di emergenza si pu` lanciare al suo posto una shell. solo per citare i pi` noti) che si innestano tutti in due rami principali. Sono in genere queste distribuzioni (come Debian. derivano dal progetto GNU della Free Software Foundation: ` su di essi che ogni e altro programma ` basato. Per avere un sistema funzionante dal punto di vista di un utente normale infatti occorre avere. Di solito i rivenditori. quelle che si trovano sui CD con i quali si installa quello che. Slackware8 ). senza avere ı le ruote. 1. detto BSD (da Berkley Software a Distribution). il kernel. o 9 8 . Il gruppo principale di questi programmi.3. 5. le periferiche. con una semplificazione molto brutale.9 E questo che permette l’avvio del sistema eseguendo un unico programma di inizializzazione come init. dato che Linux indica solo una parte. la sua unica peculiarit` infatti ` quella di essere lanciato per primo direttamente dal kernel. e tutto il resto. e si avr`. a e Questo ci porta ad un’altra caratteristica fondamentale dell’architettura dei sistemi unix-like (ci torneremo in dettaglio in sez. il kernel da solo sarebbe o e assolutamente inutile. e e in rigoroso ordine alfabetico! nel qual caso si dice che il primo processo ` il padre degli altri. come quelli dei telefonini. fino a fornire tutte le funzionalit` richieste per il a funzionamento del sistema. HP-UX. oltre al kernel. non tutti hanno la stessa importanza. Digital Unix. Per questo al kernel vengono sempre uniti degli opportuni programmi di gestione per il sistema e tutta una serie di programmi applicativi. la carrozzeria. sia liberi e u che proprietari. che a loro volta sono chiamati figli. dato che questo potr` poi lanciare altri programmi. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX Tutto ci` ci dice anche che bench´ costituisca il cuore del sistema. ed ` l’insieme di questi e del kernel che e costituisce un sistema funzionante. cos` come sarebbe inutile da solo il motore di una automobile. ed ` a seconda e degli ulteriori programmi che init mette in esecuzione (tratteremo l’argomento in sez. si preoccupano di raccogliere in forma coerente i programmi necessari. o anche gruppi di volontari. dei ı videoregistratori. e le librerie di base che essi e tutti gli altri programmi usano. IRIX. una workstation. 11 vedremo in sez. che bench´ fondamentale non e costituisce da sola un sistema operativo. AIX. Anche init per` alla fine non ` che un programma o e che usa le system call e viene eseguito dal kernel come un qualunque altro processo. quelli u derivati dal sistema sviluppato dalla AT/T. l’ultima versione ufficiale) e quelli derivati dal codice sviluppato all’universit` di Berkley. nati nella tumultuosa e complessa evoluzione che dallo Unix originario della AT/T ha portato alla nascita di una miriade di sistemi derivati (BSD.4) che alla fine della procedura di avvio ci si trover` davanti ad un terminale a caratteri o ad una a interfaccia grafica. un server web.3. Mandrake.

Una seconda peculiarit` di Linux ` quella del Virtual File System (o VFS). u In realt` ` sempre possibile costruire un kernel Linux comprensivo di tutti i moduli che a e servono. salvo limitazioni della realizzazione. in maniera completamente trasparente all’utente) ai pi` svariati tipi di filesystem. e da tutte le altre versioni di Unix.1. ottenendo quello che viene chiamato un kernel monolitico (come sono i kernel degli altri Unix). ed in maniera nativa.2 L’architettura dei file Un aspetto fondamentale della architettura di GNU/Linux ` quello della gestione dei file. e Inoltre. L’ARCHITETTURA DEI FILE 5 per cui non ` classificabile in nessuno di questi due rami e prende invece. una variet` di filesystem superiore a quella di qualunque a a altro sistema operativo. torneremo in dettaglio sull’interfaccia dei file (e di come possa essere usata anche per altro che i file di dati) in sez. i moduli. costringendo al riavvio in caso di necessit` di cambiamenti. a partire da u quelli usati da Windows e dal DOS. a Per contro in certi casi l’uso dei moduli pu` degradare leggermente le prestazioni (quasi o sempre in maniera non avvertibile) e pu` dar luogo a conflitti inaspettati (che con un kernel o monolitico avrebbero bloccato il sistema all’avvio).2. Questi possono poi essere tolti dal sistema in maniera automatica quando non sono pi` necessari: un caso tipico ` quello del modulo u e che permette di vedere il floppy. 1. essendo in presenza di un sistema multiutente e multitasking.2). le e migliori caratteristiche di ciascuno di essi. Dato che essa gioca un ruolo centrale nel sistema. Lo spazio disco grezzo ` normalmente12 suddiviso in settori contigui e di dimensione fissa. caricato solo quando c’` necessit` di leggere un dischetto ed e a automaticamente rimosso una volta che non sia pi` in uso per un certo tempo. questo permette di evitare il ritardo nel caricamento dei moduli al momento della richiesta. si ha cos` quello che l’utente vede come un singolo a ı file.4) inserendo e o a sistema attivo degli ulteriori “pezzi”. Linux cio` pu` essere esteso (torneremo su questo in sez. quello espresso dalla frase “everything is a file” (cio` tutto ` un file). dato che attraverso di essa ` in grado di supportare con e relativa facilit`. e u 12 nel senso che le interfacce hardware per i dischi consentono l’accesso diretto al contenuto di questi settori. . 5. Questi problemi oggi sono sempre pi` rari. 5. ma all’interno del sistema questo viene organizzato in maniera tale da permettere il rapido reperimento delle informazioni memorizzate su questi settori. ma comporta un maggiore consumo di memoria (dovendo tenere dentro il kernel anche codice non utilizzato). per cui l’accesso ai file e alle e e periferiche ` gestito attraverso una interfaccia identica. il kernel deve anche essere in grado di gestire l’accesso contemporaneo allo stesso file da parte di pi` processi. quello che ` e importante tenere presente da subito ` che la disponibilit` di una astrazione delle operazioni sui e a file rende Linux estremamente flessibile. per cui inserendo gli opportuni moduli nel sistema e diventa possibile accedere con la stessa interfaccia (e. u in ogni caso non ` possibile utilizzare i moduli nel caso in cui la funzionalit` da essi fornite siano e a necessarie ad avviare il sistema. a seconda dei casi.1.2. ed una flessibilit` nettamente inferiore in quanto si perde la capacit` di a a poter specificare eventuali opzioni al momento del caricamento. dal MacOS. Quello che contraddistingue Linux ` che l’interfaccia per la lettura del contenuto del filesye stem ` stata completamente virtualizzata. Un concetto a e generale presente in tutti i sistemi Unix (e non solo) ` che lo spazio su disco su cui vengono tenuti i e file di dati ` organizzato in quello che viene chiamato un filesystem (tratteremo l’amministrazione e dei filesystem in sez. Un’altra delle caratteristiche peculiari di Linux rispetto agli altri kernel unix-like ` quella e di essere modulare. che permettono di ampliare le capacit` del a sistema (ad esempio fargli riconoscere una nuova periferica). 1. esso e deriva direttamente da uno dei criteri base della progettazione di tutti i sistemi Unix. anche quando queste sono essere sparse qua e l` sul disco.

2.6 CAPITOLO 1. che legge tutti i file di dati alla stessa maniera. ` questo che implementa la filosofia del tutto ` un file. che di quelle per la lettura dal dispositivo specifico (il e modulo che si interfaccia ai CDROM. Questo comporta una serie di differenze nella gestione dei file rispetto ad altri sistemi. che altro non sono che dei canali di comunicazione messi a disposizione dei processi perch´ questi possano parlare fra loro. il Virtual File System. IDE o USB). Allo stesso modo se si volessero leggere i dati su un dischetto occorrerebbe sia il supporto per l’accesso al floppy. 1. che ` e uno dei punti di maggior forza della architettura di un sistema Unix.1. ognuno di questi fornisce e una funzionalit` specifica. 1. sempre descritta in tabella. Come accennato in sez. e La possibilit` di avere tutti questi tipi di file speciali ` dovuta al fatto che. che definisce una serie di operazioni generiche che sono le stesse per tutti gli oggetti gestiti tramite essa. in Linux l’accesso ai file viene eseguito attraverso una interfaccia unificata. e e Inoltre le estensioni sono solo convenzioni. Come accennato nell’introduzione a questa sezione. a aprendo una fifo un processo pu` scrivervi sopra ed un altro processo legger` dall’altro capo o a quanto il primo ha scritto. Questa ` una operazione privilegiata (che normalmente pu` fare solo l’amminie o stratore) che provvede ad installare nel kernel le opportune interfacce (in genere attraverso il caricamento dei relativi moduli) che permettono l’accesso ai file contenuti nel filesystem.1 Il Virtual File System e le caratteristiche dei file. come accennavamo a e in sez. 1. e non significano nulla per il kernel. attraverso dei file speciali detti device file o file di dispositivo. niente verr` salvato su disco.2. a Altri tipi di file speciali sono le fifo ed i socket. ma passer` tutto attraverso il kernel a a che consente questa comunicazione come attraverso un tubo. sia e di quelle che permettono di interpretare il filesystem ISO9660 (che ` quello che di solito viene e usato per i dati registrati su un CDROM) per estrarne il contenuto dei file.1. 13 . che ` lo stesso che questi siano su SCSI. ed o il primo leggere.3 i file sono organizzati sui dischi all’interno di filesystem. Perch´ e i file diventino accessibili al sistema un filesystem deve essere montato (torneremo su questo in sez. Il kernel dovr` poter disporre sia delle interfacce per poter parlare al dispositivo fisico (ad esempio il a supporto SCSI. uno dei criteri fondamentali dell’architettura di un sistema Unix ` quello per cui tutto ` un file e che altro non significa che si pu` e e o 13 con una interfaccia identica a quella con cui si accede al conaccedere a tutte le periferiche tenuto dei file. 1. 1.4). Come esempio consideriamo il caso in cui si voglia leggere il contenuto di un CD. Anzitutto in un sistema Unix tutti i file di dati sono uguali (non esiste la differenza fra file di testo o binari che c’` in Windows. in cui il secondo processo pu` scrivere indietro. ad esempio il sistema a pu` accedere alle periferiche. indipendentemente dal nome e dal contenuto. In realt` il sistema prevede tipi diversi di file. e e con la sola eccezione delle interfacce ai dispositivi di rete.3. I socket fanno la stessa cosa ma consentono una comunicazione bidirezionale. Dato che i e processi sono completamente separati deve essere il kernel a fornire le funzionalit` che permettaa no la comunicazione. che quello per poter leggere il filesystem che c’` sopra (ad esempio vfat e per un dischetto Windows e hfs per un dischetto MacOS). o fare animazioni scrivendo su /dev/fb0 (questo ` molto pi` difficile da fare a mano).1. n´ fra file sequenziali e ad accesso diretto che c’era nel VMS). L’ARCHITETTURA DI UN SISTEMA GNU/LINUX questo viene fatto usando un disegno specifico nella struttura delle interfacce di accesso. ma in un altro senso. leggere direttamente dai settori fisici del disco rigido accedendo a /dev/hda. Questi file speciali sono due modalit` per realizzare questa comunicazione. quando invece per le fifo il flusso dei dati ` unidirezionale. Un elenco e u dei vari tipi oggetti visti come file dal kernel ` riportato in tab. leggere l’output di una seriale direttamente o da /dev/ttyS0. Cos` o ı si pu` suonare una canzone scrivendo su /dev/dsp. se il CDROM ` SCSI). che non rientrano bene nell’astrazione e sono gestiti in maniera diversa.

che pi` specialistiche come lo u spostamento all’interno di un file.2: Principali operazioni sui file definite nel VFS. e a u basta definire queste operazioni per un filesystem per poterne permettere l’accesso da parte delle varie system call secondo la stessa interfaccia. Tabella 1. un file speciale che identifica una linea di comunicazione unidirezionale. 1.2. Come si pu` notare sono o definite sia operazioni generiche come la lettura e la scrittura. 1.1. un file che contiene una lista di nomi associati a degli inode. Il Virtual File System ` anche il meccanismo che permette al kernel di gestire tanti filesystem e diversi. o riportare un errore quando quest’ultima non sia definita (ad esempio sul file di dispositivo associato alla seriale non si potr` mai utilizzare l’operazione a di spostamento llseek ). accede alle operazioni di controllo. legge il contenuto di una directory. Usando l’opzione -l ` possibile e ottenere una lista estesa. Funzione open read write llseek ioctl readdir Operazione apre il file.2. ad esempio: a piccardi@oppish:~/filetypes$ ls -l total 1 brw-r--r-1 root root crw-r--r-1 root root drwxr-xr-x 2 piccardi piccardi prw-r--r-1 piccardi piccardi -rw-r--r-1 piccardi piccardi lrwxrwxrwx 1 piccardi piccardi 14 1. quando uno di questi viene montato ` compito il kernel utilizzare per le varie system call e le opportune operazioni in grado di accedere al contenuto di quel particolare filesystem. un file che identifica una periferica ad accesso a blocchi. ogni oggetto del sistema visto attraverso il Virtual File System definisce la sua versione di queste operazioni.1: I vari tipi di file riconosciuti da Linux Le principali operazioni sono riportate in tab. un file speciale che identifica una linea di comunicazione bidirezionale. si sposta all’interno del file. un file che identifica una periferica ad accesso a caratteri. 7 d l c b p s Tabella 1. 2 2 48 0 0 4 Jul Jul Jul Jul Jul Jul 8 8 8 8 8 8 14:48 14:48 14:24 14:24 14:24 14:25 block char dir fifo file link -> file ed altre ancora pi` complesse che non sono state riportate. Uno dei comandi fondamentali per la gestione dei file ` ls (il cui nome deriva da LiSt file). legge dal file. L’ARCHITETTURA DEI FILE Tipo di file regular file file regolare directory symbolic link char device block device fifo socket cartella o direttorio collegamento simbolico dispositivo a caratteri dispositivo a blocchi “coda” “presa” Descrizione un file che contiene dei dati (l’accezione normale di file). u . in cui compaiono varie propriet` del file.14 Quando si utilizzano le system call per accedere ad un file sar` compito del kernel chiamare l’operazione relativa ad esso associata (che sar` ovviamente a a diversa a seconda del tipo di file). un file che contiene un riferimento ad un altro file o directory. e il comando mostra l’elenco dei file nella directory corrente. questa ` la ragione principale della grande flessibilit` di Linux nel supportare i filesystem pi` diversi. scrive sul file.

2). Una convenzione vuole che i file il cui nome inizia per un punto (“. mentre il terzo ed il quarto campo indicano rispettivamente utente e gruppo proprietari del file (anche questo sar` trattato a in sez.1. 1. le informazioni relative a permessi di accesso e proprietari del file (che vedremo in dettaglio in sez. 1. questi ultimi infatti non sono di norma utilizzati dai comandi di shell. e come il primo carattere della prima colonna indichi tipo di file. l’elenco completo ` riportato nella pagina di e manuale accessibile con il comando man ls. usa il tempo di ultimo cambiamento del file. Altre caratteristiche sono i tempi di ultimo e accesso. anche questo secondo la notazione riportata nella terza colonna della stessa tabella.2). con l’eccezione dei socket.4. Il secondo campo indica il numero di hard link al file (su questo torneremo in sez. Il comando ls ` dotato di innumerevoli opzioni.2). Si badi bene che questo e tempo riguarda solo il contenuto del file. 1. 1. Si noti infine come in un sistema unix-like non esista un tempo di creazione del file. Le opzioni sono moltissime.8 CAPITOLO 1. Tabella 1.2.4. usualmente riportata in byte. a ma solo una convenzione usata e rispettata dai vari programmi in user space.3: Principali opzioni del comando ls.3. il numero di hard link (che vedremo in sez. Infine tutte le volte che si accede al contenuto del file viene cambiato il tempo di ultimo accesso (o access time) che pu` o essere visualizzato con l’opzione -u.2).”) non vengano riportati nell’output di ls.2. a meno di non richiederlo esplicitamente con l’uso dell’opzione -a.4. per questo tali file sono detti invisibili. e le principali sono riportate in tab. si noti come la prima lettera in ciascuna riga indichi il tipo di file. Il quinto campo indica la dimensione. L’opzione -l permette di mostrare una lista in formato esteso in cui vengono riportate molte informazioni concernenti il file. modifica e cambiamento (su cui torneremo fra poco). 1. delle quali il tipo ` solo una. e In un sistema unix-like i tempi dei file (mantenuti automaticamente dal kernel quando opera si essi) sono tre ed hanno un significato diverso rispetto a quanto si trova in altri sistemi operativi. e non segue i link simbolici. mentre il resto della colonna indica i permessi del file. Il comando prende come parametro una lista di file o directory. esegue la lista ricorsivamente per tutte le sottodirectory.2). non esiste pertanto un comando u e che permetta di crearne uno in maniera esplicita. 1. usa il tempo di ultimo accesso al file. 15 . se invece si operano delle modifiche sulle propriet` a del file (ad esempio si cambiano i permessi) varia quello che viene chiamato tempo di ultimo cambiamento (il change time) che viene visualizzato con l’opzione -c. secondo una notazione su cui torneremo in sez. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX ci mostra il contenuto di una directory dove si sono creati i vari tipi di file15 elencati in tab. mostra i file invisibili. Si tenga presente comunque che questa non ` una propriet` dei file e a e non ha nulla a che fare con le modalit` con cui il kernel li tratta (che sono sempre le stesse). scrive il numero di inode (vedi sez. ma vengono creati direttamente dai programmi che li usano (il caso pi` comune ` X window). 1. 1. Opzione -l -a -i -R -c -u -d Significato scrive la lista in formato esteso. mostra solo il nome e non il contenuto quando riferito ad una directory. senza opzioni viene mostrato solo il nome del file (se esiste) o il contenuto della directory specificata. che gli consentono di visualizzare le varie e caratteristiche dei file. la dimensione. Abbiamo visto in precedenza un esempio di questa lista.2.2. Il sesto campo ` il tempo di ultima modifica del file e l’ultimo campo il nome del file. Il tempo mostrato di default da ls ` il tempo di ultima modifica (o modification time) che e corrisponde all’ultima volta che ` stato modificato il contenuto di un file.

i tempi.1). ma semplicemente una etichetta associata ad un inode. L’unica informazione relativa al file non contenuta nell’inode ` il suo nome. La struttura che identifica univocamente un singolo file all’interno di un filesystem ` il coe siddetto inode: ciascun file ` associato ad un inode in cui sono mantenute tutte le informazioni e che lo riguardano.2 si possono avere pi` voci in directory diverse che puntano allo u . grazie al VFS. ma sono dei file speciali (di tipo directory. una enorme quantit` di filesystem diversi. 1. i permessi di accesso.2. Come mostrato in fig. ma daremo una descrizione a grandi linee che si adatta alle caratteristiche comuni di qualunque filesystem usato su sistema unix-like.2 L’architettura di un filesystem e le propriet` dei file a Come gi` accennato Linux (ed ogni sistema unix-like) organizza i dati che tiene su disco attraa verso l’uso di un filesystem. 1.2. Una delle caratteristiche di Linux rispetto agli altri Unix ` quella di e poter supportare. Per questo non entreremo nei dettagli di un a filesystem specifico. L’ARCHITETTURA DEI FILE 9 1. cos` che il kernel ı pu` trattarle in maniera diversa) il cui contenuto ` semplicemente una lista di nomi a ciascuno o e dei quali viene associato un numero di inode che identifica il file cui il nome fa riferimento. Se si va ad esaminare con maggiore dettaglio come ` strutturate l’informazione all’interno di e un singolo filesystem. Le e a directory infatti non contengono i file.2: Strutturazione dei dati all’interno di un filesystem. possiamo esemplificare la situazione con uno schema come quello esposto in fig.1.2. Figura 1. le informazioni che il comando ls fornisce provengono dall’inode. sulle quali ` e bene porre attenzione visto che sono fondamentali per capire il funzionamento dei comandi che manipolano i file e le directory. utente e gruppo proprietario. ognuno dei quali ha a una sua particolare struttura e funzionalit` proprie. ed anche tutti i riferimenti ai settori del disco (i blocchi fisici) che contengono i dati. le dimensioni. 1. da cui si evidenziano alcune delle caratteristiche di base di un filesystem. come il tipo (fra quelli di tab. infatti il nome di e un file non ` una propriet` del file.

L’ARCHITETTURA DI UN SISTEMA GNU/LINUX stesso inode. ad esempio si ` creato il link simbolico link dell’esempio e precedente con il comando: . Usando l’opzione -i di ls possiamo anche stampare per ciascun file il numero di inode ottenendo: piccardi@oppish:~/filetypes$ ls -li total 1 2118 brw-r--r-1 root root 2120 crw-r--r-1 root root 15 drwxr-xr-x 2 piccardi piccardi 2115 prw-r--r-1 piccardi piccardi 2117 -rw-r--r-2 piccardi piccardi 2117 -rw-r--r-2 piccardi piccardi 2116 lrwxrwxrwx 1 piccardi piccardi 1. Siccome uno stesso inode pu` essere referenziato in pi` directory. o symbolic link (quelli pi` simili ai collegamenti di Windows o u agli alias del MacOS). come il file link mostrato in precedenza. 2 2 48 0 0 0 4 Jul Jul Jul Jul Jul Jul Jul 8 8 8 8 8 8 8 14:48 14:48 14:24 14:24 14:24 14:24 14:25 block char dir fifo file hardlink link -> file e come si pu` notare file e hardlink hanno lo stesso numero di inode. ed il comando ln dar` un errore se si cerca a di creare un hard link ad un file posto in un altro filesystem. Per creare un hard link basta usare direttamente il comando ln (da LiNk file). nell’esempio del precedente risultato di ls. oltre agli hard link appena illustrati infatti esistono anche i cosiddetti collegamenti simbolici. 1. nessuna propriet` specifica. Per questo ogni inode mantiene un contatore che indica il numero di riferimenti (detto link count) che gli sono stati fatti. Questo limita l’uso degli a hard link solo a file residenti sul filesystem corrente. che vengono creati usando l’opzione -s del comando ln. che di default crea questo tipo di link. 2 2 48 0 0 0 4 Jul Jul Jul Jul Jul Jul Jul 8 8 8 8 8 8 8 14:48 14:48 14:24 14:24 14:24 14:24 14:25 block char dir fifo file hardlink link -> file e si noti come adesso il secondo campo mostri per file e hardlink un valore pari a due. o Il problema con gli hard link ` che le directory contengono semplicemente il numero di inode. anche completamente scorrelati fra loro. in quanto l’accesso avviene per entrambi attraverso lo stesso inode. La differenza rispetto a Windows o MacOs ` che in un sistema e unix-like i link sono di due tipi.10 CAPITOLO 1. 1. questo viene mostrato. dato che o su un altro filesystem lo stesso numero identificher` un inode diverso. Cos` potremo creare il file hardlink come hard link al file file visto ı in precedenza con il comando: piccardi@oppish:~/filetypes$ ln file hardlink e adesso potremo verificare che: piccardi@oppish:~/filetypes$ ls -l total 1 brw-r--r-1 root root crw-r--r-1 root root drwxr-xr-x 2 piccardi piccardi prw-r--r-1 piccardi piccardi -rw-r--r-2 piccardi piccardi -rw-r--r-2 piccardi piccardi lrwxrwxrwx 1 piccardi piccardi 1. un file pu` avere pi` o u o u nomi. dal valore numerico riportato nel secondo campo. Per superare questa limitazione sono stati introdotti i link simbolici. tempi di accesso o a contenuto permette di distinguerli. Il comando generico che permette di creare dei link ` ln che prende come argomenti il file e originale ed il nome del link. pari a 2117. come permessi. e ci permette di dire se un file ha degli hard link (anche se non indica dove sono). Questo introduce il concetto di hard link : due file che puntano allo stesso inode sono fisicamente lo stesso file. e per cui si pu` fare riferimento solo ad un inode nello stesso filesystem della directory.

Una seconda caratteristica dei link simbolici ` la possibilit` di creare dei link anche per e a delle directory. come mostrato nell’esempio precedente. ` possibile infatti creare dei link loop se e a e si commette l’errore di creare un link alla directory che contiene il link stesso. ad esempio a causa di un programma che cerca dei file di configurazione in una locazione diversa da quella usuale. piuttosto che dover spostare tutti i file baster` creare un link simbolico e si sar` risolto il problema. infatti qualora si a e voglia accedere ai file in una directory attraverso un percorso diverso. per cui anche se si cancella un file da una directory.2. La lista completa ` riportata nella pagina di manuale accessibile attraverso e il comando man ln. ma con un hard link non ` pi` possibile fare questa e u distinzione e la rimozione diventa impossibile. ma resta attivo un processo che lo utilizza. crea un hard link ad una directory (in Linux questa non ` usabile). a richiede conferma in caso di sovrascrittura. Il comando per la cancellazione di un file ` rm (da ReMove file). se si usa l’opzione -i il comando chiede di confermare la cancellazione. disponibili. ma la funzione usata dal e sistema per effettuare questo compito si chiama in realt` unlink ed essa. di tipo symbolic link. E compito del kernel far s` che quando si o ı usa un link simbolico si vada poi ad usare il file che questo ci indica. Oltre a -s il comando ln prende una serie di altre opzioni le principali delle quali sono riportate in tab. anche se solo per a lui. forza la sovrascrittura del nuovo file se esso esiste gi`. Opzione -s -f -i -d -b Significato crea un link simbolico. Il comando rm prende come argomenti una lista di file da cancellare. L’ARCHITETTURA DEI FILE 11 piccardi@oppish:~/filetypes$ ln -s file link In questo caso viene creato un nuovo file. con un link simbolico questo errore pu` essere corretto in quanto la cancellazione del link simbolico rimuove o quest’ultimo. Solo quando il numero di riferimenti ad un inode si annulla.1. La possibilit` di creare dei link alle directory tuttavia ` estremamente utile. lo spazio disco non viene rilasciato.4.4: Principali opzioni del comando ln. che avr` un suo diverso a inode. Infine l’opzione -R (o -r) permette la cancellazione ricorsiva di una directory e di tutto il suo contenuto. a Tabella 1. e fintanto che il processo non avr` finito i dati resteranno. i dati del file vengono effettivamente rimossi dal disco dal kernel. a a Oltre agli hard link la struttura di un filesystem unix-like ha ulteriori conseguenze non immediate da capire per chi proviene da sistemi operativi diversi. ma si limita ad eliminare la relativa voce da una directory e decrementare il numero di riferimenti presenti nell’inode. mentre con l’opzione -f si annulla ogni precedente -i ed inoltre non vengono stampati errori per file non esistenti. e non il file referenziato. Questa capacit` infatti. La presenza degli hard link e l’uso degli inode nelle directory infatti comporta anche una modalit` diversa nella cancellazione a dei file e nello spostamento degli stessi. ed ` pertanto e . e esegue un backup della destinazione se questa esiste gi`. come ci dice il nome. In realt` oltre ai riferimenti mostrati da ls il kernel mantiene a anche un’altra lista di riferimenti per ciascun processo che sta accedendo al file. a in Linux non ` supportata per la sua pericolosit`. che a ` questo punto pu` essere in qualsiasi altro filesystem. ed il cui contenuto ` il percorso (torneremo sulla e notazione che esprime i pathname dei file fra poco) per il file a cui esso fa riferimento. a non cancella affatto i dati del file. 1. sebbene teoricamente possibile anche per gli hard link.

ma non pu` fare nulla per ripristinare il tempo di ultimo cambiamento. 17 il kernel fornisce delle system call che permettono di cambiare i tempi di ultimo accesso e modifica di un file. nel secondo copia tutti file della lista nella directory specificata. Quando per` lo spostamento avviene o fra filesystem diversi viene copiato il contenuto e cancellato il file originario. non c’` nessuna necessit` di spostare il contenuto del file e basta semplicemente che sia creata e a una nuova voce per l’inode in questione rimuovendo al contempo la vecchia: esattamente la stessa cosa che avviene quando gli si cambia nome (nel qual caso l’operazione viene effettuata all’interno della stessa directory). fintanto che lo spostamento avviene all’interno dello stesso filesystem. esegue un backup della destinazione se questa esiste gi`. che questo ` cambiato e corrisponde al momento dello a e spostamento. Qualora invece si voglia duplicare un file il comando da usare ` cp (da CoPy file). Il comando per compiere questa operazione infatti ` unico e si chiama mv. . accesso e cambiamento di quest’ultimo corrisponderanno al momento in cui si ` eseguita l’operazione. i tempi dei file non vengono modificati dall’uso di mv. che nel caso ` identica a quella di cambiamento del e nome. che corrisponder` pertanto al momento in cui il nuovo file ` stato creato. Dato che il comando si limita a cambiare di una voce associata ad un numero di inode all’interno di una directory. Dato che il comando funziona copiando il contenuto di un file su un nuovo file creato per l’occasione. Come per e mv il comando pu` prendere come argomenti o due nomi di file o una lista di file seguita da una o directory. Le principali opzioni sono riportate in tab. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX da usare con estrema attenzione. l’elenco completo ` riportato nella pagina di manuale.5: Principali opzioni del comando mv. Il comando mv ha due forme. Qualora invece si debba effettuare lo spostamento ad un filesystem diverso diventa necessario prima copiare il contenuto e poi cancellare l’originale. nel secondo caso sposta tutti i file della lista nella directory. i tempi di ultima modifica. Inoltre il file sar` creato con i permessi standard e a 16 uno dei sistemi pi` efficaci per distruggere una installazione ` un rm -fR eseguito come amministratore nel u e posto sbagliato.16 La lista completa delle opzioni ` e riportata nella pagina di manuale. ma non ne esistono per cambiare il tempo o di ultimo cambiamento. In realt` il comando a provvede ripristinare questi tempi (come le altre caratteristiche del file) al valore del file originario. Nel primo caso rinomina il primo file nel secondo. Come accennato la struttura di un filesystem unix-like comporta anche una diversa concezione dell’operazione di spostamento dei file.17 Pertanto in o quel caso si potr` notare. accessibile con il comando man rm. esegue lo spostamento solo se la destinazione ` pi` vecchia e u della sorgente (o non esiste). pertanto in teoria dovrebbero risultare modificati anche i tempi di ultimo accesso e modifica. nel primo caso effettua una copia del primo file sul secondo. da MoVe file.5. a Tabella 1. e Infatti fintanto che si “sposta” un file da una directory ad un altra senza cambiare filesystem. 1. che il comando mv pu` usare per ripristinare i tempi precedenti. questa ` una a e e misura di sicurezza che permette sempre di verificare se un file ` stato modificato. accessibile con il e comando man mv. e anche se come utente non si pu` danneggiare il sistema. a sempre cancellando eventuali file con lo stesso nome presenti in essa. anche se si cerca di nascondere e le modifiche. usando ls -lc. ` comunque molto semplice spazzare o e via tutti i propri dati. specie se abbinata con -f. Opzione -f -i -u -b Significato forza la sovrascrittura del nuovo file se esso esiste gi`. e pu` prendere come argomenti o due nomi di file o una lista o di file seguita da una directory. cancellando quest’ultimo qualora esista gi`. a richiede conferma in caso di sovrascrittura.12 CAPITOLO 1.

Quando si entra nel sistema la directory di lavoro corrisponde alla home 20 dell’utente.18 a Opzione -f -i -p -l -s -d -r -R -a -L -b -u Significato forza la sovrascrittura della destinazione se essa esiste gi`. se invece si vuole copiare il link stesso occorrer` usare l’opzione -d. combina le opzioni -dpR. i pathname relativi. specificando solo dei nomi semplici. Finora. partendo dalla cosiddetta directory di lavoro corrente.19 o ed indicando tutte le directory che si devono attraversare. si ` parlato dei nomi dei file o delle directory senza entrare troppo nei dettagli su quale fosse il e formato in cui questi vengono espressi. Se si vogliono a preservare invece le caratteristiche del file originale occorrer` usare l’opzione -p. o torneremo sulla struttura dell’albero e sul concetto di radice in sez. a esegue la copia solo se la destinazione ` pi` vecchia della e u sorgente (o non esiste).2. crea dei link simbolici al posto delle copie. abbiamo sempre fatto l’assunto di operare appunto nella directory di lavoro corrente. Tabella 1. 1.3. identico a -r. segue sempre i link simbolici. 1. che viene chiamata cos` tratteremo o ı. la questione pi` avanti in sez. i nomi delle directory sono separati da delle “/”.tex Formato assoluto relativo Tabella 1. u 19 18 . a La convenzione usata in tutti i sistemi unix-like ` che nomi dei file sono indicati con un e pathname o percorso. per quel processo. e Fino ad ora nel descrivere gli argomenti da dare ai vari comandi che abbiamo trattato. Nel primo caso il pathname inizier` con “/”. Negli esempi infatti si sono specificati dei semplici nomi. Una lista delle principali opzioni ` riportata in tab.1 20 ogni utente ha una sua directory personale nella quale pu` tenere i suoi file. e a che viene ereditata dal padre alla sua creazione (questo argomento ` trattato in sez. permessi e proprietari del file.3. che risulter` anche il suo proprietario.1) ed e indica appunto la directory a partire dalla quale vengono risolti.7) in maniera assoluta.7: Formato dei pathname assoluti e relativi. copia ricorsivamente tutto il contenuto di una directory. ma questo dava per scontati alcuni concetti che in realt` non lo sono affatto. mentre nel a secondo no. 1. preserva tempi. Il percorso pu` essere indicato (vedi tab. o in maniera relativa. essa pu` essere cambiata con il comando cd (da Change Directory) seguito dal pathname della dio per poterlo fare per` occorre eseguire il comando come amministratore. a richiede conferma in caso di sovrascrittura. copia il link simbolico invece del file da esso indicato. esegue un backup della destinazione se questa esiste gi`. senza doverne specificare il pathname completo a partire dalla radice. che descrive il cammino che occorre fare nell’albero dei file per raggiungere il file passando attraverso le varie directory.2. Questo vuol dire che si possono indicare i file presenti in quella directory direttamente. l’elenco completo e ` riportato nella pagina di manuale. 1. 1.1.6.tex gapil/gapil.2. partendo dalla directory radice.6: Principali opzioni del comando cp. Si tenga presente poi che nel caso di link simbolici il comando copia il file indicato tramite il link. accessibile attraverso il comando man cp. crea degli hard link al posto delle copie. Il comando permette a inoltre di creare degli hard link invece che delle copie usando l’opzione -l e dei link simbolici usando l’opzione -s. Esempio /home/piccardi/gapil/gapil. L’ARCHITETTURA DEI FILE 13 dell’utente che ha lanciato il comando. Questa directory ` una propriet` specifica di ogni processo.

che non ` figlio di nessun altro processo e viene lanciato direte tamente dal kernel. 23 nel suo caso infatti la directory . mentre con ~username si indica la home dell’utente username.1. come su Windows. risalendo lo stesso con l’uso della directory “.”). u Come accennato nella sezione precedente le directory sono dei file. Come per il processo init. viene montata direttamente dal kernel in fase di avvio. e 22 21 .. Per questo motivo la directory radice viene ad assumere un ruolo particolare. il CDROM. cp.” che fa riferimento a se stessa. torneremo su questo con qualche dettaglio in pi` in sez. a meno di non usare l’opzione -R che per` cancella tutto anche il contenuto. e come accennato in sez. 2..4. In questo modo anche con dei pathname relativi si possono fare riferimenti a directory poste in sezioni diverse dell’albero dei file. Si tenga presente poi che ciascuna directory contiene sempre21 almeno due voci: la directory “.3 L’organizzazione delle directory ed il Filesystem Hierarchy Standard Una delle caratteristiche peculiari di un sistema unix-like ` che l’albero delle directory ` unico.. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX rectory in cui ci si vuole spostare. che al contempo ci mostra anche i contenuti delle directory principali. anche se sono dei file speciali il cui compito ` solo contenere elenchi di nomi di altri file. per cui andando su / avremo qualcosa del tipo: ` compito del comando di creazione di una nuova directory far si che esse siano sempre presenti.1. tutti i restanti dischi.1. Un esempio di questa struttura ad albero. ed indica sempre la radice stessa dato che al di sopra non e c’` niente. Di nuovo il comando prende il nome di una o pi` directory vuote da u cancellare. ` identica a . che crea la (o le) directory passate come e argomento. pu` essere ottenuto con il comando tree.14 CAPITOLO 1. Queste saranno specificate con quello che sar` il loro pathname. usando l’opzione -L si pu` specificare il numero massimo di livelli a cui o scendere. in forma assoluta o a relativa. Inoltre. scendendo in tutte le directory sottostanti. verranno poi montati (vedi sez. 2. e l’operazione di rendere visibili ai processi i file contenuti all’interno di un filesystem facendoli compariere all’interno nell’albero delle directory viene detta appunto montare il filesystem.3.) riconosce alcuni caratteri speciali. Perch´ il comando abbia successo ovviamente la parte di percorso che deve contenere e la directory che si vuole creare deve esistere. e che usata all’inizio di un pathname indica con la directory di lavoro corrente. Come per la creazione ` necessario un comando apposito. anche la directory radice non ` contenuta in nessuna altra directory23 e.”.2. All’avvio il kernel monta22 quella che si chiama la directory radice (o root directory) dell’albero. e e che all’inizio di un pathname indica la directory sovrastante quella corrente. cd poi riconosce il carattere “-” che indica il ritorna alla precedente directory di lavoro. ed il filesystem che la supporta deve contenere tutti i programmi di sistema necessari all’avvio (compreso init).”) siano invisibili. come vedremo in sez.” e “. ecc. mkdir. che fa riferimento alla directory in cui l’attuale ` contenuta.4) successivamente in opportune sotto-directory della radice. Se chiamato senza parametri o questo comando mostra l’albero completo a partire dalla directory corrente. e sul MacOS o sul VMS. anche per la rimozione di e una directory (rm. e e non esistono cio` i vari dischi (o volumi) che si possono trovare in altri sistemi. o rimuove solo i file).. se non ` cos` si pu` forzare la creazione di tutte le e ı o directory indicate nel percorso con l’opzione -p. Si noti come entrambe queste due voci (dato che iniziano per “. il floppy ed qualunque altro dispositivo contenente file.1. Anche in questo caso si pu` usare l’opzione o -p che cancella tutto un percorso di directory (che comunque devono essere tutte vuote). mentre la si pu` stampare a video con il comando pwd (da o Print Work Directory. Per questo per la creazione di e una directory ` previsto un comando apposito. Se le directory non sono vuote il comando fallisce (vuote significa che non ci deve essere niente a parte le due directory “. la shell quando deve passare dei pathname ai comandi che operano su file e directory (come cd.”. 1. rmdir. ad esempio il carattere “~” viene usato per indicare la home dell’utente corrente. 1. 1. che viene indicata con /.2. e la directory “.

2. |-.opt | |-.. L’ARCHITETTURA DEI FILE 15 piccardi@oppish:~$ cd / piccardi@oppish:/$ tree -L 2 .share | ‘-..2.X11R6 | |-.GNUstep .arch .local | |-.usb |-. |-.cpp -> /usr/bin/cpp-2.mail | |-.opt |-.info | |-.etc | |-.piccardi |-.20-idepci .20 .boot | |-.vmlinuz -> boot/vmlinuz-2. |-.sbin | |-.dev | |-.bin | |-.MAKEDEV .1 .mnt | ‘-.backups | |-.System..src |-.log | |-.bin | |-.usr | |-. |-....root |-..home | ‘-.tmp ‘-.tmp | ‘-.include | |-.cache | |-.var | |-.lib | |-.local | |-.lock | |-.run | |-.MAKEDEV -> /sbin/MAKEDEV .games | |-. |-.lib | |-.lost+found |-.sbin | |-.4.proc | |-.spool | ‘-.. |-.ssh-XXBiWARl |-.95 .1. |-.lib | |-.map-2.floppy |-.initrd |-.. |-...doc | |-....cdrom |-.

16 CAPITOLO 1.8: Sottodirectory di / obbligatorie per qualunque sistema. ecc. diversi formati binari). dato che essi non sarebbero disponibili se posti in filesystem diversi che possono essere montati solo dopo che il sistema ` partito. per alcune di esse. Directory /bin /boot /dev /etc /lib /mnt /opt /sbin /tmp /usr /var Contenuto comandi essenziali file statici necessari al bootloader file di dispositivo file di configurazione della macchina librerie essenziali e moduli del kernel mount point per filesystem temporanei pacchetti software addizionali comandi di sistema essenziali file temporanei gerarchia secondaria dati variabili Tabella 1. /proc filesystem. file di configurazione. L’organizzazione dell’albero delle directory ` standardizzata in maniera molto accurata da e un documento che si chiama Filesystem Hierarchy Standard (abbreviato in FHS). Un elenco delle specifiche delle caratteristiche e del contenuto di ciascuna delle sottodirectory di / ` riportato di seguito. 24 . con un esempio dei file e delle sottodirectory presenti in una distribuzione Debian. il primo ` quello della possibilit` di contenere file il cui contenuto pu` essere modificato (nel qual caso e a o il filesystem che le contiene deve essere montato in lettura/scrittura) o meno (nel qual caso il filesystem pu` essere montato in sola lettura). 1.0 che sono in corso di rilascio. oggi sono usate principalmente per quei sistemi (come gli AMD-64) che supportano diversi formati binari (32 o 64 bit). u il terzo criterio ` quello di contenere o meno comandi o file (configurazioni e file di dispositivo) e che sono necessari all’avvio del sistema. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX e questo ci mostra il contenuto sommario primi due livelli dell’albero. programmi. al momento della stesura di questo testo la versione corrente ` la 2. a cui tutte le distribuzioni si stanno adeguando. file degli utenti. mentre quelle di tab. si organizzano cos` in maniera meticolosa ed a ı ordinata dati. sono previste delle ulteriori e sottogerarchie che definiscono ulteriori dettagli dell’organizzazione dei file.3. il secondo ` quello della possibilit` di contenere file o e a (come i programmi di sistema) che possono essere condivisi (ad esempio utilizzando un filesystem di rete) fra pi` stazioni di lavoro o file che invece sono locali e specifici alla macchina in questione. e Lo standard prevede che debbano essere necessariamente presenti le sottodirectory di / specificate in tab. prevedendo una divisione molto rigorosa che permette una notevole uniformit` anche fra distribuzioni diverse. 1. come /usr e /var. e che pertanto devono essere situati sul filesystem usato per la directory radice. nella attuale versione 1. documentazione.9 sono obbligatorie soltanto qualora si siano installati i sottosistemi a cui essi fanno riferimento (utenti.3 delle LSB ` utilizzata la e versione 2. rilasciato come parte delle specifiche e LSB (Linux Standard Base) 2. le /lib alternative sono state usate al tempo della transizione dei programmi dal formato a.24 Lo standard descrive in dettaglio la struttura dell’albero delle directory e il relativo contenuto.8.25 Directory /lib<qual> /home /root /proc Contenuto librerie in formati alternativi home directory degli utenti home directory di root filesystem virtuale con le informazioni sul sistema Tabella 1.out ad ELF. In particolare le directory vengono suddivise sulla base di alcuni criteri fondamentali.9: Sottodirectory di / obbligatorie solo in presenza dei relativi sottosistemi. 25 le eventuali /lib<qual> contengono le versioni delle librerie di sistema in formati binari diversi.2.

1) utilizzati dal sistema si potranno leggere i file /proc/interrupts e /proc/dma.4. vedi sez. Pu` essere montata su qualunque filesystem. come ls). L’ARCHITETTURA DEI FILE /bin 17 Contiene i comandi essenziali del sistema (usati sia dall’amministratore che dagli utenti. Contiene i mount point (vedi sez. Di norma la si mantiene nello stesso filesystem della radice. /opt/lib e /opt/man. 5. ` /root E la home directory dell’amministratore. a meno che non si sia installato nel kernel il supporto per il devfs.1. sono un po’ gli equivalenti (come potrebbe esserlo una Ferrari in confronto ad una 500) in ambito Unix dei file . e deve essere sullo stesso filesystem della radice. Non deve avere e sottodirectory e non pu` stare su un filesystem diverso da quello della radice. I file o possono essere raggruppati a loro volta in directory.1. Normalmente ` e vuota e deve essere creata direttamente sotto la radice. che permette di trasferire il contenuto di questa directory su un apposito filesystem virtuale. ad esempio all’avvio o quando si ` in single user mode (vedi sez. qualora siano installati. 2.4) e /etc/sgml (per la configurazione di SGML e XML). 3. o /boot Contiene tutti i file necessari al procedimento di boot (immagini del kernel. o Un pacchetto deve installarsi nella directory /opt/package dove package ` il nome del e pacchetto. lo standard prevede solo che. che devono essere disponibili anche quando non ci sono altri filesystem montati. 26 . 5.4) i moduli devono essere installati in /lib/modules. mentre si potranno impostare varie caratteristiche del sistema scrivendo nei file sotto /proc/sys.3. Qualora sia stato installato un kernel modulare (vedi sez.) eccetto i file di configurazione ed i programmi per l’impostazione del procedimento stesso (che vanno in /sbin).bat del DOS. /dev Contiene i file di dispositivo. 5. Non deve contenere programmi binari e non pu` stare su un filesystem diverso da quello della radice. Pu` stare su qualunque filesystem purch´ visibile dal bootloader o e (vedi sez. /opt/include. Cos` se si vogliono ı informazioni sugli interrupt ed i canali di DMA (vedi sez. ramdisk. /etc/X11 (per la configurazione di X Window. /mnt /opt ` /proc E il mount point standard del filesystem virtuale proc.1. /opt/info. nessun file attinente ai pacchetti deve essere installato al di fuori di queste directory. Pu` essere su qualunque filesystem.2). o /lib Contiene le librerie condivise essenziali. Questo ` un filesystem spee ciale che permette di accedere a tutta una serie di variabili interne al kernel (relative a parametri e impostazioni di tutti tipi) con l’interfaccia dei file.6. Contiene i file di configurazione del sistema e gli script26 di avvio. 5. Deve stare sullo stesso filesystem della radice. File variabili attinenti ai suddetti pacchetti devono essere installati in /var/opt ed i file di configurazione in /etc/opt.4). siano presenti le directory /etc/opt (per i pacchetti opzionali). ecc.3. e /opt/doc. su cui torneremo in sez. la sola parte del filesystem (eccetto /tmp) su cui gli utenti hanno diritto di scrittura. che permettono l’accesso alle periferiche. usate dai programmi di /bin e /sbin.2.4) per i filesystem temporanei ad uso dell’amministratore di sistema (i filesystem di periferiche permanenti come i floppy o il CDROM possono essere tenuti sia in questa directory che direttamente sotto /). una lista di comandi messi in un file (in realt` i a tratta di un vero di un linguaggio di programmazione) e fatti eseguire automaticamente. /etc /home Contiene le home directory degli utenti.2. Contiene eventuali pacchetti software aggiuntivi. All’amministratore ` riservato l’uso di alcune directory opzionali: /opt/bin. 1. gli script.

). 3. terminfo per il database con le informazioni sui terminali. Contiene una replica della gerarchia di /usr dedicata ai file installati localmente dall’amministratore. ad uso dell’amminia stratore. Contiene una gerarchia in cui sono organizzati tutti i dati che non dipendono dalla architettura hardware: man per le pagine di manuale. doc per la documentazione. posta elettronica. le seguenti directory: X11R6 games src /var Contiene la gerarchia dei file relativi ad X Window (vedi sez. ecc. ed i programmi non devono assumere che i file siano mantenuti fra due esecuzioni successive. File temporanei non cancellati al riavvio del sistema.18 CAPITOLO 1. Dati variabili relativi ai pacchetti di /usr/local. info per i file del relativo sistema di help. File variabili per i pacchetti di /opt. il recupero e la manutenzione dei filesystem. Contiene le utilit` di sistema non essenziali per l’avvio. o Contiene le librerie relative ai programmi di bin e sbin. lib local sbin share mentre sono obbligatorie solo se i relativi pacchetti sono installati. misc per tutto quello che non viene classificato nelle altre. Prevede una ulteriore gerarchia di directory in cui o i vari file vengono organizzati. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX /sbin Contiene i programmi essenziali per l’amministrazione del sistema (come init). In genere qui vengono installati i programmi compilati dai sorgenti e tutto quello che non fa parte della distribuzione ufficiale. news. i file di log. File di lock. Dati relativi ai processi in esecuzione. ` in modo che /usr possa essere montata in sola lettura. Contiene i file variabili: le directory di spool. /tmp La directory viene usata per mantenere file temporanei. alcune directory non possono essere condivise. Vanno messi in questa directory solo i programmi essenziali per l’avvio del sistema. i dati transienti e temporanei. dict per i dizionari. Directory per i dati di spool di varie applicazioni (stampanti. lo standard richiede obbligatoriamente le seguenti: bin Contiene i programmi usati dall’utente installati direttamente dal sistema (o dalla distribuzione originale). ` E la directory principale che contiene tutti i file ed i dati non variabili che possono essere condivisi fra pi` stazioni. Informazioni variabili sullo stato del sistema. Contiene i binari dei giochi.4). /usr include Contiene tutti gli header file usati dal compilatore e dai programmi C e C++. Di solito viene montata su un filesystem separato rispetto a / u e pu` essere montata in sola lettura. Contiene i sorgenti dei pacchetti. Non pu` essere ulteriormente suddivisa. Deve stare sullo stesso filesystem della radice. Viene cancellata ad ogni riavvio. games per i dati statici dei giochi. E preferibile montarla in un filesystem separato. . Anche in questo caso i file sono organizzati in una ulteriore gerarchia standardizzata che prevede le seguenti sottodirectory: cache lib local lock opt run spool tmp Dati di appoggio per le applicazioni.

pathname.3 ` riportata una rappresentazione grafica della struttura generale delle directoe ry prevista dal FHS. 1. disponibile all’indirizzo: http://www. che siano filesystem contenuti in partizioni diverse dello stesso disco o in altri dischi.27 tutti gli altri volumi. posı sono essere reperiti sul documento ufficiale di definizione del FHS.2.3.3) che i nuovi dischi devono essere inseriti in maniera opportuna all’interno dell’albero.com/fhs/. questo significa (come aca cennato in sez. come illustrato in sez. e come vedremo in sez.3 la definizione di quale sia il dispositivo su cui si trova il filesystem che contiene la radice ` una delle impostazioni fondamentali relative all’avvio del sistema. o addirittura montate via rete e condivise fra pi` macchine. in modo che il loro contenuto possa essere visto all’interno delle opportune directory.3: Struttura tipica delle directory. In tal caso infatti occorrer` stabilire quali directory a dovranno andare sul filesystem usato come radice. 1.2. ` E evidente infatti che alcune directory (come /usr ed /opt) possono essere mantenute su ` partizioni e filesystem diversi rispetto alla directory radice. L’importanza del Filesystem Hierarchy Standard diventa evidente quando si vanno ad esaminare le strategie partizionamento dei dischi. 1. I dettagli come pleti sulla struttura (cos` come le specifiche relative ad i contenuti delle varie directory. 5.1. contenendo file comuni di norma identici per le diverse installazioni. Si tenga inoltre presente che alcune di queste directory (ad esempio /proc) devono essere lasciate vuote sul disco. 1. e quali altre directory porre su altre partizioni.2. Inoltre essendo qui contenuti la gran parte dei dati del sistema (le altre directory sono solo /root per i file personali dell’amministratore e /etc per le configurazioni) queste dovranno essere sottoposte a regolare backup. (si ` mostrata solo una parte delle directory previste). L’ARCHITETTURA DEI FILE 19 In fig.4 La gestione dell’uso di dischi e volumi Una delle caratteristiche di GNU/Linux che disorientano maggiormente chi proviene da altri sistemi operativi ` la presenza di un unico albero delle directory. con quell’operazione che si chiama montaggio del disco. E pertanto utile separare queste due directory che.2. secondo il Filesystem Hierarchy Standard. esse infatti servono solo come riferimento per montare i relativi filesystem virtuali. possono essere montate in sola lettura e non inserite nei backup (in quanto ` possibile sempre ripristinarle e dall’installazione). Figura 1. e 27 . Anche in questo e caso ` opportuno separarle dalle altre directory. e Non esistendo il concetto di volume o disco come entit` separata. Non ha quindi alcun senso effettuare backup del contenuto di queste directory in quanto esse presentano solo una interfaccia di accesso (che permette per` l’uso dei normali comandi per o i file) a variabili interne del kernel create dinamicamente. ma in questo caso ` necessario l’accesso in e e scrittura e le informazioni variabili non saranno necessariamente condivisibili (ad esempio non lo sono /var/run e /var/lock che contengono informazioni sui processi locali). a parte la directory radice che viene montata dal kernel all’avvio. u La situazione ` invece del tutto diversa per directory come /home e /var. Allora.

questi vengono lanciati con l’invocazione automatica di un corrispondente programma /sbin/mount. si tenga infine presente che per alcuni filesystem (in particolare per quelli di rete come nfs e smbfs) per l’esecuzione del comando non ` sufficiente la chiamata alla omonima system call. ed in generale ` possibile gestirle ate e traverso l’opzione -o di mount. user. e ci torneremo pi` avanti.29 si pu` poi indicare l’uso ulteriore di /proc/filesystem terminando o /etc/filesystem con un asterisco (*). 1.TYPE. che viene attivato usando auto come tipo di filesystem. ` il seguente: e nodev nodev nodev nodev nodev nodev nodev nodev nodev nodev nodev rootfs bdev proc sockfs tmpfs shm pipefs ext2 ramfs devpts usbdevfs usbfs iso9660 in cui i filesystem virtuali sono marcati dalla parola chiave nodev. ma devono essere usati dei e programmi ausiliari. Infine alcune delle opzioni. Il comando richiede la conoscenza del tipo di filesystem presente nel dispositivo che si vuole montare. 1. detta mount point. 1. Alcune di queste opzioni. 29 questo resta utile per provare prima vfat di msdos. In genere si usa /etc/filesystem se si vuole cambiare l’ordine in cui il controllo viene effettuato. perdendo la relativa informazione. cio` all’interno della quale verr` reso accessibile il contenuto a e a del filesystem.10. Il comando che permette di montare un disco ` mount. a riportate in tab. floppy o qualunque altra forma di supporto che contiene un filesystem. u users e defaults e relative negazioni. hanno significato solo quando usate nel quarto campo di /etc/fstab (su cui torneremo fra breve). ` possibile comune e que usare anche un meccanismo di ricerca automatico.28 nella modalit` standard esso viene sempre invocato nella a forma: mount -t filesystem_type /dev/device /path/to/dir dove l’opzione -t serve ad indicare il tipo di filesystem contenuto nel device /dev/device (indicato tramite il suo file di dispositivo in /dev) e /path/to/dir indica la directory. In questo caso viene effettuato automaticamente un controllo se nel dispositivo ` e presente uno dei filesystem riportati nella prima parte (fino alla riga orizzontale) di tab. Se il riconoscimento non riesce viene effettuato un ulteriore controllo: prima viene letto /etc/filesystem e.11. Ciascun filesystem ` dotato di caratteristiche proprie.3) sia stato preventivamente montato. devono essere montati successivamente.10. in particolare auto. che di norma si limita ad invocare e la omonima system call del kernel. evitando che venga usato quest’ultimo quando ` disponibile e il primo. altre sono invece specifiche per ciascun tipo di filesystem. in cui esso verr` montato. e non vengono usati nel procedimento di ricerca automatica appena illustrato.20 CAPITOLO 1. che permette di specificare dei valori delle opzioni che controllano alcune modalit` di funzionamento del filesystem che si va a montare.2. Un esempio a del formato del file. l’elenco dei principali filesystem supportati ` riportato in tab. Pi` opzioni possono essere specificate simultaneamente u scrivendole tutte di seguito separate da virgole (senza spazi in mezzo). /proc/filesystem per eseguire una prova con tutti quelli ivi elencati. sono disponibili in generale. 28 . L’ARCHITETTURA DI UN SISTEMA GNU/LINUX CDROM. 1. se questo non esiste. Si tenga presente che per poter usare /proc/filesystem occorre che il filesystem virtuale /proc (che abbiamo gi` incontrato in sez.

un filesystem su ROM per sistemi embedded. la password di accesso verr` chiesta sul terminale. se geomorphix. Hyerarchy File System. filesystem per la condivisione di file attraverso la rete attraverso il protocollo NFS creato da Sun. Cos` ad ı esempio. QNX4 File System. Uno degli usi pi` comuni per questa opzione ` quello di rimontare u e in lettura/scrittura un filesystem che si ` montato in sola lettura per poterci effettuare un e controllo. il filesystem usato da QNX4 e QNX6. il filesystem di IRIX. portato dalla SGI su Linux. OpenBSD e MacOS X). Oltre a specificare delle modalit` di funzionamento coi valori riportati in tab. secondo lo standard ISO 9660. Second Extended File System (filesystem standard di Linux) in versione journalled. L’ARCHITETTURA DEI FILE Tipo adfs cramfs ext2 ext3 hfs hpfs iso9660 jfs minix ntfs qnx4 reiserfs romfs ufs vxfs xfs befs msdos vfat proc shm devpts usbdevfs nfs coda Descrizione Acorn Disc Filing System. Network File System. Filesystem virtuale che fornisce l’accesso ai segmenti di memoria condivisa. Compressed ROM File System. SMB File System. nel qual caso si dovr` specificare l’opzione encryption per indicare l’algoritmo di cifraa tura usato e l’opzione keybits per specificare la lunghezza (in bit) della chiave. Filesystem virtuale per consentire un accesso efficiente ai terminali virtuali.iso ` l’immagine di un CD si potr` accedere al contenuto in maniera e a trasparente montandolo come se fosse su un CD con il comando: mount -t iso9660 -o loop geomorphix.10: Principali filesystem disponibili su Linux e relativi nomi per l’opzione -t di mount. il filesystem del sistema operativo BeOS. a .11 l’opzione a -o consente anche di effettuare alcune operazioni speciali. il filesystem del MacOS (non MacOS X). filesystem usato per montare le directory condivise di Windows. replicazione e operazioni a disconesse. FreeBSD. il filesystem di Windows NT. il filesystem del sistema operativo Minix. 1. ? File System. ad esempio usando l’opzione remount diventa possibile rimontare al volo un filesystem gi` montato senza smontarlo. Second Extended File System. il filesystem standard di Linux.2. NT File System. 21 smbfs Tabella 1. filesystem standard di UnixWare disponibile anche su HP-UX e Solaris. che consente di montare il filesystem dal contenuto di e un file (ovviamente il file deve contenere un filesystem completo di un qualche tipo). Reiser File System un filesystem journalled per Linux. per cambiare a alcune delle opzioni precedenti.iso /cdrom l’interfaccia (detta loopback ) inoltre consente anche di montare un filesystem opportunamente cifrato. Veritas VxFS File System. il filesystem usato da vari Unix derivati da BSD (SunOS. Journalling File System. Filesystem virtuale che fornisce informazioni sul sistema. NetBSD. Minix File System. Il filesystem FAT usato da Windows 95/98. ? File System. Filesystem virtuale contente le informazioni relative al bus USB. Coda? File System. il filesystem del sistema operativo RiscOS.1. Il filesystem elementare usato dall’MSDOS. Un’altra opzione molto utile ` loop. BeOS File System. Il filesystem Unix File System. il filesystem journalled della IBM portato su Linux. il filesystem di OS/2. filesystem distribuito su rete che supporta funzionalit` evolute come autenticazione. Il filesystem dei CD-ROM.

-v che aumenta la prolissit` dei messaggi.user. 1. nouser. e dev. 5.noauto rw dump 0 0 0 0 0 0 0 pass 1 0 0 0 0 0 2 .errors=remount-ro sw defaults defaults.2). il cui nome e sta per file system table. il filesystem deve essere montato esplicitamente (viene ignorato dall’opzione -a).noauto defaults.11: Valori per l’opzione -o di mount disponibili per qualunque tipo di filesystem. con le stesse restrizioni di user. non aggiorna il valore del tempo di ultimo accesso al file (utile quando si vogliono evitare ulteriori accessi al disco). i campi di ogni e linea sono separati da spazi o tabulatori. u e Aggiorna il valore del tempo di ultimo accesso ai file presenti sul filesystem (` e il valore di default).4. vedi sez. comporta come restria zioni le opzioni noexec. Questo pu` essere visto come una specie di file di configurazione del o comando. monta il filesystem in lettura e scrittura (` il valore di default). exec. e consente che i bit suid e sgid abbiano effetto (` il valore di default). non consente l’uso di file di dispositivo presenti sul filesystem. creazione e cancellazione di directory e file di dispositivo).2.ro. Linee vuote o che iniziano per # vengono ignorate. che permette di specificare una partizione invece che attraverso il corrispondente file di dispositivo attraverso una etichetta (che deve essere stata impostata in fase di partizionamento. monta il filesystem in sola lettura. a -w e -r che sono abbreviazioni per -o rw e -o ro. se non soprassedute esplicitamente con exec. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX Significato tutto l’I/O sul filesystem viene eseguito in maniera asincrona. suid. L’elenco completo ` riportato nella pagina e di manuale accessibile con man mount. creazione.3) abbiano effetto. e nodev. spostamento e cancellazione di file. atime auto default dev exec noatime noauto nodev noexec nosuid ro rw suid sync dirsync user nouser users Tabella 1. o e consente a qualunque utente di montare o smontare il filesystem.user.noauto defaults. esegue in maniera sincrona le operazioni che comportano una scrittura sulle directory (creazione di link. suid.user. dev. consente anche ad un utente normale di montare il filesystem. Come accennato nel funzionamento di mount ` fondamentale il file /etc/fstab. La pagina di manuale man fstab ne spiega i dettagli. consente l’uso di file di dispositivo presenti nel filesystem (` il valore di default). tutti i filesystem con questa opzione citati in fstab vengono montati dal comando mount -a (che in genere ` quello che viene eseguito all’avvio del e sistema). non consente che i bit suid e sgid (vedi sez. solo l’amministratore pu` montare il filesystem (` il valore di default). mount point / none /proc /floppy /cdrom /mnt/cdrom /boot type ext2 swap proc auto iso9660 iso9660 ext2 options defaults. il nome utente viene scritto su /etc/mtab e solo lui potr` smontarlo. cio` le funzioni di e scrittura ritornano ed ` il kernel che si incarica di eseguire la effettiva scrittura e dei dati nel momento pi` opportuno (` il valore di default). usa le opzioni di default: rw. ed e ` composta da sei campi. non consente l’esecuzione di programmi presenti sul filesystem. e consente l’esecuzione di programmi presenti sul filesystem (` il valore di e default). Il formato del file ` molto semplice: ogni linea definisce un filesystem da montare. nosuid. auto.ro. Altre opzioni possibili per mount sono -L. un esempio del suo contenuto `: e # /etc/fstab: # # file system /dev/hdb5 /dev/hdb6 proc /dev/fd0 /dev/cdrom /dev/sr0 /dev/hdb1 static file system information. e async. e tutto l’I/O sul filesystem deve essere sincrono (vale a dire che le funzioni di scrittura prima di proseguire aspettano che i dati vengano scritti su disco).22 Valore async CAPITOLO 1.

31 l’operazione ` privilegiata e pu` essere effettuata in modo generico solo dall’amministratore. uno zero indica che il controllo non deve essere eseguito.2. senza per` consentirgli di modificare il o mount point o le opzioni di montaggio. 30 ` un valore utilizzabile solo per i filesystem (attualmente ext2 e ext3) che supportano il comando di backup e dump (vedi sez. Se il filesystem non deve essere montato. u Gli ultimi due campi sono relativi alla manutenzione del filesystem.11. separate da virgole e senza spazi interposti. Pi` opzioni vanno specificate in fila. un floppy (/dev/fd0). 4. e o . In questo modo si pu` o permettere agli utenti di montare i propri CD e floppy. Il secondo campo del file indica il mount point cio` la directory dove i file del nuovo dispositivo e saranno resi disponibili. Si noti poi come per /dev/hdb6 sia presente la parola a chiave swap ad indicare che in quel caso il dispositivo non contiene un filesystem. e non avendo questo nessun dispositivo (` completamente virtuale) viene montato usando come e dispositivo la parola chiave proc. /usr e /home) che sono state installate su filesystem separati rispetto alla radice. e che viene utilizzato nella procedura di avvio del sistema per montare automaticamente tutte le directory del sistema (ad esempio /var. nel caso del CDROM si ` usato un link simbolico). ma viene usato per la swap (vedi sez. Infine se si sono usate le etichette per le partizioni si possono usare queste ultime al posto dei nomi di dispositivo. se attivato con un valore non nullo verranno salvate le informazioni che consentono a dump di eseguire i backup incrementali. riportate in tab. Il file permette inoltre di semplificare l’uso di mount poich´ per i filesystem in esso elencati e il comando pu` essere invocato specificando solo il mount point.user. per i filesystem che non devono essere montati invece (ad esempio CD-ROM e floppy) si deve specificare l’opzione noauto. Deve poi essere specificato il filesystem da usare (o auto se si vuole tentare il riconoscimento automatico).user. L’uso principale di /etc/fstab ` il controllo del comportamento del comando mount -a.user. uno ZIP (/dev/hdc4). Il terzo campo indica il tipo di filesystem che sta sul dispositivo che si vuole montare.noauto 0 0 in cui si indica come dispositivo la directory remota da montare. 5. per maggiori dettagli si faccia riferimento alla pagina di manuale del comando. o Nel caso si usi l’opzione defaults la successiva specificazione di un’altra opzione soprassiede il valore di default. un CDROM ed un masterizzatore SCSI (/dev/cdrom e /dev/sr0. In questo caso occorre identificare qual’` il file di dispositivo da usare e scegliere nel filesystem una directory e su cui montarlo. 1. Dal punto di vista dell’amministrazione base si ha a che fare con /etc/fstab tutte le volte che si aggiunge un disco.1. come nel caso della partizione di swap (vedi sez.noauto 0 0 0 0 23 Il primo campo descrive il dispositivo su cui sta il filesystem da montare: nel caso in questione si hanno due hard disk (/dev/hda e /dev/hdb con varie partizioni). i vari tipi si sono gi` riportati in tab. il quinto campo indica se effettuare il dump 30 del filesystem ed in genere viene lasciato a 0 (per attivarlo occorre usare invece 1) mentre il sesto campo indica la sequenza con cui all’avvio viene lanciato il comando fsck per controllare lo stato dei dischi.noauto defaults. o si cambiano le partizioni. o un nuovo dispositivo. e Avendo abilitato il supporto nel kernel ` stato possibile montare anche il filesystem /proc. Inoltre con questa sintassi o consente l’uso di mount anche agli utenti normali. Se ci fossero stati dei file montati via NFS (cio` file condivisi e sulla rete) si sarebbero avuti anche righe del tipo: firenze.1. 1. L’ARCHITETTURA DEI FILE /dev/hda1 /dev/hdc4 /mnt/win /mnt/zip vfat auto defaults.4).it:/ /mnt/nfs nfs defaults. Il quarto campo indica le opzioni con cui si pu` montare il filesystem. si usa la parola chiave none.2.10.linux.5).31 i quali potranno montare un dispositivo qualora si siano specificate le opzioni user o users nella riga relativa.5).2. 5. In questo caso ` necessario marcare la riga relativa con l’opzione e auto.

questo significa e che se si hanno processi che hanno aperto dei file contenuti nel filesystem. accessibile con man umount. in questo caso ovviamente non ` necessario indicare quale dispositivo smontare. in quanto si possono impilare pi` a e u u montaggi sulla stessa directory. e 1. L’elenco completo delle opzioni del comando ` disponibile nella pagina di manuale. Dal kernel 2. 1. dato che non ` detto che il floppy o lo ZIP siamo sempre nel driver. e come vengono gestiti all’interno del sistema. Si tenga presente che quando si monta un filesystem su una directory un eventuale contenuto di quest’ultima viene oscurato dal contenuto del nuovo filesystem. Una sintassi alternativa per il comando ` l’uso dell’opzione -a. per i quali si ` pure aggiunto l’opzione di montaggio in read-only. nelle condizioni in cui ` comunque indispensabile smontare filesystem. si pu` e o usare l’opzione -f che forza l’operazione. che presenter` il contenuto dell’ultimo filesystem u a montato (valendo quanto detto prima per il contenuto dei precedenti). In questo modo diventa possibile rimuovere (nel a caso di kernel modulare) le eventuali risorse aggiuntive. questo potr` essere smontato. e 32 con le ultime versioni di kernel in realt` questo non ` pi` necessario. lo si pu` sostituire con un link a /proc/mounts o che mantiene le stesse informazioni. 33 si dice che la n si sia persa nei meandri delle prime implementazioni di Unix. 1. specificando quest’ultimo con l’opzione -t. quando non si ha pi` la necessit` di accedere ad e u a un filesystem.2). Per ovviare a e a questo problema. Il comando in questo caso ` umount33 che prende come parametro sia il mount point che e il file di dispositivo e distacca il relativo filesystem dall’albero dei file. e prima di poterlo estrarre e sostituire.1) ` ivi contenuta non si potr` smontare il filesystem.4. o la cui directory di lavoro (vedi sez.3 L’architettura dei processi In questa sezione prenderemo in esame l’architettura della gestione dei processi. /proc). Lo stesso vale per il CDROM e il e masterizzatore. . e pure il controllo dello stato del filesystem. Si noti inoltre e l’opzione speciale per il filesystem di root. Vedremo come i a processi sono organizzati in forma gerarchica.4 diventa possibile impilare pi` operazioni di mount sulla stessa directory.2. Si tenga presente che fintanto che il filesystem ` utilizzato questa operazione non viene permessa. Nel caso di disco fisso andr` poi scelto se montarlo all’avvio o a meno. che costituiscono l’entit` fondamentale con cui il kernel permette l’esecuzione dei vari programmi. In maniera analoga a come lo si ` montato. e liberare la directory utilizzata per il montaggio per il riutilizzo32 . Se per` si sono aperti dei file in essa presenti o questi continueranno a funzionare regolarmente (in quanto sono visti attraverso il loro inode. Viene usato da alcuni programmi per leggere questa informazione. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX Nell’esempio si noti come per ZIP e floppy si sia consentito agli utenti di montare il filesystem. che smonta tutti i filesystem e elencati in /etc/mtab (tranne. ma si pu` restringere le operazioni a tutti i e o filesystem di un determinato tipo. Inoltre a partire dal kernel 2. e non sar` pi` possibile a u accedervi fintanto che questo non viene smontato. e in questo caso usare il sesto campo per indicare in quale ordine rispetto agli altri dovr` a essere effettuato il controllo del filesystem (il primo deve essere il filesystem usato come radice). a partire dalla versione 2.24 CAPITOLO 1. e attivabile con l’opzione -l. si ricordi quanto detto in sez. ` comunque necessario smontare un device rimovibile come il floppy o il CD.11 ` inoltre disponibile un lazy umount. Un altro file collegato all’uso di mount ` /etc/mtab. ma si sia disabilitato il montaggio all’avvio. ma viene generato automaticamente e non deve essere modificato.3. che distacca immediatamente il filesystem (impedendo ogni ulteriore accesso allo stesso) ma esegue le successive operazioni di pulizia solo quando tutte le risorse occupate vengono liberate. quali sono caratteristiche e propriet` che ciascuno a di essi porta con s´. che contiene l’elenco dei filesystem e montati. per il quale si ` indicato di rimontare il filesystem in e sola lettura nel caso di errori.7.

3.1.bin | |-kdeinit---bash---pstree | ‘-kdeinit---bash---ssh |-8*[kdeinit] |-kdeinit---mozilla-bin---mozilla-bin---4*[mozilla-bin] |-kdm-+-XFree86 | ‘-kdm---kde3-+-kwrapper | ‘-ssh-agent |-keventd |-khubd |-klogd |-korgac |-kreiserfsd |-ksensors |-ksoftirqd_CPU0 |-kswapd |-kupdated |-lockd---rpciod |-master-+-cleanup | |-pickup | |-proxymap | |-qmgr | |-smtp . con un risultato del tipo: init-+-atd |-bdflush |-bonobo-moniker|-cron |-evolution-addre |-evolution-alarm |-evolution-calen |-evolution-execu |-evolution-mail---evolution-mail---4*[evolution-mail] |-gconfd-2 |-6*[getty] |-inetd---famd |-junkbuster |-kalarmd |-kapmd |-kdeinit-+-artsd | |-evolution | |-gabber | |-kdeinit---xvncviewer | |-kdeinit | |-kdeinit---bash---bash | |-kdeinit---bash-+-emacs | | ‘-xpdf---xpdf. mentre i processi da lui creati vengono detti figli.1. L’ARCHITETTURA DEI PROCESSI 25 1. non ` figlio di e nessun altro processo. 1. il processo iniziale che.2 una delle caratteristiche principali dell’architettura dei processi in un sistema unix-like ` che qualunque processo questo pu` creare nuovi processi.1 Le propriet` dei processi a Come accennato in sez. venendo lanciato direttamente dal kernel all’avvio. come radice dell’albero.3. e pertanto tutti i processi avranno un padre. in questo e o contesto il processo originale viene chiamato padre. La caratteristica distintiva ` che tutti i processi presenti nel sistema possono essere creati e solo in questo modo. l’unica eccezione ` quella di e init. Questa classificazione pu` essere stampata con il comando pstree o che evidenzia in maniera grafica l’albero genealogico dei processi presenti nel sistema. in questa gerarchia init viene a ricoprire nel sistema un ruolo speciale. Questa caratteristica permette di classificare i processi in una gerarchia ad albero basata sulla relazione padre-figlio.

36 mentre con l’opzione x si visualizzano tutti i processi non per i dettagli del meccanismo si pu` consultare la sezione 3. il comando stesso. nel caso si vogliano combinare le due opzioni di questi formati alternativi allora non vale la sintassi usuale (che tratteremo in dettaglio in sez. ` che in e Linux la creazione di un processo e l’esecuzione di un programma sono due operazioni separate. con una modalit` di funziozamento comune con i server o a di rete. nell’ultima colonna marcata CMD. e per ciascuna di esse fa eseguire35 ad un figlio creato appositamente le operazioni necessarie a fornire le relative risposte. mentre le estensioni GNU usano un -. e ciascuna andr` ripetuta a parte. ` molto diversa da quella di altri sistemi operativi in cui spesso l’operazione di lanciare e un nuovo processo ` privilegiata e non pu` essere eseguita da un programma qualsiasi.26 CAPITOLO 1. Il comando che permette di ottenere la lista dei processi attivi nel sistema ` ps. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX | |-smtpd | ‘-trivial-rewrite |-oafd |-sshd |-syslogd |-wombat |-wwwoffled ‘-xfs dove si pu` notare che. di scrivere un programma unico che esegue pi` processi. purch´ e facenti riferimento ad un terminale. ci torneremo fra poco. derivate dalle varie versioni che del comando sono state realizzate nel tempo. in genere indicate da lettere singole: quelle derivata da SysV devono essere precedute da un -. essendovi la possibilit` di riconescere se si sta eseguendo il a padre o il figlio. In Linux il comando supporta la maggior parte delle opzioni esistenti. 2. e o Una seconda differenza rispetto ad altri sistemi multiutente come il VMS o NT. gestite da due system call diverse. il quale va ad usare la seconda per eseguire un altro programma. e se eseguito su un terminale senza specificare nessuna opzione ps mostra l’elenco dei processi appartenenti all’utente che ha eseguito il comando attivi su quel terminale. Si tenga presente che in molti casi viene usata la stessa lettera. quelle derivate da BSD non devono essere precedute da un -.34 Il meccanismo per` permette anche. in quanto questi potevano essere solo lanciati da un terminale.bin 22913 pts/0 00:00:00 ps che mostra. Specificando l’opzione a verranno visualizzati anche i processi lanciati da altri utenti. sia nel formato BSD che in quello SysV. u a Il comando non richiede nessun argomento. come dicevamo all’inizio. o ovviamente usando una istruzione condizionale. alla radice dell’albero c’` init. come sul terminale siano presenti la shell. in cui qualunque processo pu` creare degli altri o processi. avremo cio` qualcosa del tipo: e piccardi@monk:~/truedoc/corso$ ps PID TTY TIME CMD 31203 pts/0 00:00:00 bash 18957 pts/0 00:00:43 emacs 21348 pts/0 00:00:09 xpdf.3) di specificare pi` opzioni con lettere consecutive dopo il -. per questo si sono accavallate anche diverse sintassi per le opzioni. in cui il padre esegue la parte u che si occupa di ricevere le richieste. Tralasciamo per ora il significato delle altre colonne. pi` l’editor ed il visualizzatore di PDF utilizzati per la realizzazione di queste u dispense. la prima delle quali crea un nuovo processo.1. questo ` uno e e dei comandi fondamentali presenti fin dalle prime versioni di Unix. o e Si tenga presenta che questa architettura. identico al padre.ed una forma estesa. 36 prima dell’introduzione delle interfacce grafiche questa era la modalit` per vedere i processi interattivi lanciati a dagli utenti. 35 34 .2 di [1]. con significati diversi.

Per ogni processo attivo infatti il kernel mantiene tutta una serie di caratteristiche ed identificatori usati per il controllo delle varie operazioni che esso pu` compiere. che spiegheremo fra poco). infine l’opzione f permette di mostrare la gerarchia dei processi. La prima colonna dei precedenti esempi. L’uso dell’opzione r permette invece di restringere la selezione ai soli processi in esecuzione effettiva (cio` nello stato R. la descrizione del significato di quest’ultime andar` allora di pari passo con la spiegazione a dell’output del comando. insieme ad una serie o di informazioni relative alle risorse da esso utilizzate.1. Ogni processo interattivo ` sempre associato ad un terminale di controllo. Gi` in questi due primi esempi il comando a ci mostra alcune informazioni di base sufficienti ad introdurre alcune delle propriet` essenziali a dei processi. mostra il cosiddetto process id del processo. marcata TTY. e questo numero viene assegnato alla creazione del processo. marcata PID. in realt` lo scopo di ps non ` semplicemente a a e quello di fornire la lista dei processi in esecuzione. essendo queste complementari. Questo ` il numero che il kernel utilizza per identificare univocamente ciascun processo.conf /sbin/getty 38400 tty1 dato che la combinazione delle opzioni a e x. La seconda colonna. e Come gi` questi primi esempi ci mostrano. Cos` ı si pu` ottenere un elenco completo dei processi con un comando del tipo: o [piccardi@hogen piccardi]$ PID TTY STAT TIME 6 ? SW 0:00 5 ? SW 0:00 4 ? SW 0:00 3 ? SWN 0:00 1 ? S 0:03 2 ? SW 0:00 7 ? SW 0:00 76 ? SW 0:00 106 ? S 0:00 168 ? S 0:00 171 ? S 0:00 176 ? S 0:00 180 ? S 0:00 327 ? S 0:00 332 ? S 0:00 344 ? S 0:00 435 ? S 0:00 437 ? S 0:00 438 ? S 0:00 448 ? S 0:00 908 ? S 0:00 909 pts/0 S 0:00 919 pts/0 R 0:00 474 ? S 0:00 477 ? S 0:00 484 tty2 S 0:00 485 tty3 S 0:00 486 tty4 S 0:00 487 tty5 S 0:00 488 tty6 S 0:00 635 ? SN 0:00 672 ? SN 0:00 907 tty1 S 0:00 ps axf COMMAND [kupdated] [bdflush] [kswapd] [ksoftirqd_CPU0] init [2] [keventd] [kjournald] [kjournald] /sbin/portmap /sbin/syslogd /sbin/klogd /usr/sbin/named /sbin/rpc. seleziona tutti i processi attivi nel sistema. che corrisponde ape . quanto quello di mostrare le loro caratteristiche.statd /usr/sbin/gpm -m /dev/psaux -t ps2 /usr/sbin/inetd lpd Waiting /usr/lib/postfix/master \_ pickup -l -t fifo -c \_ qmgr -l -t fifo -u -c /usr/sbin/sshd \_ /usr/sbin/sshd \_ -bash \_ ps axf /usr/sbin/atd /usr/sbin/cron /sbin/getty 38400 tty2 /sbin/getty 38400 tty3 /sbin/getty 38400 tty4 /sbin/getty 38400 tty5 /sbin/getty 38400 tty6 /usr/sbin/junkbuster /etc/junkbuster/config /usr/sbin/wwwoffled -c /etc/wwwoffle/wwwoffle.3. mostra il nome del terminale di controllo del processo. L’ARCHITETTURA DEI PROCESSI 27 associati ad un terminale. ed ` unico fintanto che il processo e ` questo il numero che si deve usare tutte le volte che si vuole fare riferimento ad resta attivo. E uno specifico processo.

fossero in stato di sleep. Il processo ` in attesa di un risposta dal sistema (in genere per I/O). Un o u processo in stato D comunque non avr` nessun effetto n´ sugli altri processi n´ sul sistema. torneremo su questo a breve.12 gli stati di sleep sono due. riporta un’altra informazione fondamentale: lo stato del processo. che a e e continuer` a funzionare senza problemi. non ` assolutamente detto o e che sia anche in esecuzione. in tal caso il kernel pone il programma in stato di sleep e lo toglie dalla lista di quelli che hanno bisogno del processore (che sono identificati invece dallo stato runnable). Come sistema multitasking Linux ` in grado di eseguire pi` processi e u contemporaneamente. ad esempio se si monta un disco USB e poi si lo si estrae dal bus senza smontarlo e si ha la sventura di farlo in un momento poco opportuno. e e Il processo ` terminato ma il suo stato di terminazione non ` ancora e e stato letto dal padre.12. Il caso pi` comune infatti ` quello in cui il programma ` in attesa u e e di ricevere dati da una periferica.3.2. Lo stato di stopped ` relativo ai processi la cui esecuzione ` stata fermata per una richiesta e e dell’utente (per fare questo. Il pi` comune ` il primo. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX punto al terminale da cui il processo riceve i dati in ingresso (in genere dalla tastiera) e sul quale scrive il suo output (in genere lo schermo). 1. 1. a parte quello di non poter liberare le risorse occupate a dal processo. i cui valori sono riportati in tab. come vedremo in sez. Si noti allora come nell’elenco precedente tutti i processi. contraddistinti dalle lettere S e D. 37 . 1. In genere un processo entra in stato di sleep tutte le volte che si blocca nell’esecuzione di una system call che richiede una qualche forma di accesso non immediato a dei dati (caso classico ` la lettura dell’input da tastiera). in questo caso se il processo resta e bloccato37 nello stato D non pu` pi` essere terminato se non con il riavvio della macchina. nella colonna STAT si ` riportata la corrispondente e lettera usata dal comando ps nell’omonimo campo. per cui se un processo si blocca nell’esecuzione di una di queste esso pu` essere comunque terminato. e Come dettagliato in tab. in quanto ci permette di spiegare varie caratteristiche dell’architettura dei processi. si ha a disposizione un segnale apposito). in genere per` un processo. Il processo ` in attesa di un risposta dal sistema.3. l’esecuzione della maggior parte delle system call infatti pu` essere u e o interrotta da un segnale (i segnali saranno trattati in sez. in alcuni casi (in genere o questo avviene quando la system call sta gestendo la risposta ad un interrupt hardware) questo non ` possibile ed allora si ha uno stato di ininterrutible sleep.12: Elenco dei possibili stati di un processo in Linux. eccetto lo stesso comando ps axf. o non lo ` attraverso e e l’interfaccia a riga di terminale (come un programma che usa l’interfaccia grafica) non esiste un terminale di controllo e la colonna riporta come valore “?”. Il sistema infatti prevede cinque possibili stati diversi per i processi. Se il processo non ` interattivo. pur essendo attivo. Seguono infine la colonna TIME che indica il tempo di CPU usato finora dal processo e la colonna COMMAND che riporta la riga di comando usata per lanciare il programma.2). nel qual caso semplicemente il processo non viene eseguito (ma resta in memoria e pu` riprendere o in genere questo avviene per un qualche errore nella gestione della periferica nel kernel. Tabella 1. ma pu` essere e o interrotto da un segnale. o ` tracciato. e e non pu` essere interrotto in nessuna circostanza. Stato runnable sleep uninterrutible sleep stopped zombie STAT R S D T Z Descrizione Il processo ` in esecuzione o ` pronto ad essere eseguito (cio` ` in attesa e e ee che gli venga assegnata la CPU).28 CAPITOLO 1. o Il processo ` stato fermato con un SIGSTOP. Per capire il significato del campo STAT occorrono alcune spiegazioni generali sull’architettura della gestione dei processi. marcata STAT. 1. La terza colonna.

e nel caso assegna a questi ultimi init come nuovo padre. tranne la voce mantenuta nell’output di ps. Perci`. e a . cio` un processo che non esiste pi`. ma se uno dei due termina e e cosa accade? Alla terminazione di un processo il kernel provvede ad una serie di compiti di pulizia. e 39 per poterlo fare per` occorre avere un processo in grado di eseguire il comando. Si noti nella lista precedente la presenza di alcuni processi con una lettera aggiuntiva W nella colonna STAT. dato che init ` scritto bene e sa gestire la ricezione dello stato di uscita. la ricezione del loro stato di uscita. e si dice che il figlio diventa e orfano. perch´ ` terminato. a riceverne lo stato di uscita liberando la voce che occupavano nella tabella dei processi. La relazione padre/figlio infatti ` ben definita finch´ entrambi i processi sono attivi nel sistema. e u e e ma che mostra una voce con lo stato Z nella lista fornita da ps e che di nuovo non pu` essere o terminato. Resta il problema di come notificare l’avvenuta conclusione del processo. in quanto esso non occupa e e (a differenza di un processo bloccato in stato D) nessuna risorsa nel sistema.38 Si dice allora che init adotta i figli dei processi che terminano. Vedremo fra poco per` che. la memoria utilizzata viene liberata e con essa tutte le risorse occupate dal processo.1. per gli zombie ` possibile risolvere il problema e far si che essi siano terminati regolarmente e senza dover riavviare il sistema. la scelta ` stata quella per cui ` e e compito del padre ricevere lo stato di uscita del figlio e controllare se tutto ` andato bene o c’` e e stato qualche errore. Questo ad esempio ` il meccanismo con cui la shell riceve lo stato di uscita dei comandi che si e sono eseguiti. e sar` lui che gestir`. cosa non facile da ottenere o se si ` gi` esaurita la tabella dei processi.3. quando un processo termina al padre viene inviato uno speciale segnale che lo avvisa del fatto. resta allocata soltanto una voce nella tabella dei processi che contiene le informazioni per riportare lo stato di uscita. Se accade questo e chi ` che ricever` lo stato di terminazione dei figli? Dato che i processi sono eseguiti in maniera e a del tutto indipendente un caso come questo ` assolutamente naturale. ad una successiva esecuzione di ps con opzioni che permettano di visualizzare il PID del padre. Per` uno zombie occupa comunque una voce nella tabella dei o processi e pertanto se il numero degli zombie cresce si pu` rischiare di saturare quest’ultima. e Dato che in un sistema Unix tutto viene fatto con i processi. con un nome del comando fra parentesi quadre e con un PID molto basso. il cui significato pu` essere compreso solo ritornando con maggiori e o dettagli sulla relazione fra processo padre e gli eventuali figli. a e che questo ` diventato 1. L’ARCHITETTURA DEI PROCESSI 29 l’esecuzione in qualunque momento) fintanto che non lo si fa ripartire (anche per questo ` previsto e un altro segnale). per il semplice fatto che lo ` gi`. Questo ` quello che e in gergo viene chiamato uno zombie. questi non sono processi effettivamente lanciati da init quanto dei processi interni al kernel (e da 38 si vedr` cio`. E pertanto compito di chi scrive programmi che e a ` creano processi figli curarsi della ricezione del loro stato di uscita. Infine c’` lo stato di zombie. se questo ha dei figli. e lui deve invocare una apposita system call per ricevere lo stato di uscita. tutto quello o e che serve fare per eliminare gli zombie dal sistema ` renderli orfani terminando il processo che e 39 In questo modo essi saranno adottati da init che si curer` immediatamente di li ha generati. Di per s´ la presenza di uno zombie non ` un grave problema. durante le operazioni di terminazione di un processo. ed infatti i programmi ben scritti non presentano mai questo problema. a differenza dei processi in stato o D. Per capire come comportarsi con gli zombie si deve considerare un altro caso della gestione del funzionamento dei processi: quello in cui ` il padre che termina per primo. tutti i file aperti dal processo vengono chiusi. ma soprattutto il problema ` a chi fare questa notifica. o rendendo inutilizzabile il sistema. Per questo il sistema controlla. alla terminazione di questi a a ultimi. Se questo non viene fatto comunque il processo figlio si conclude regolarmente e tutte le risorse che occupava nel sistema vengono rilasciate. ad esempio se questa ` stata regolare o ` stata dovuta ad un qualche e e errore.

2.statd /usr/sbin/inetd lpd Waiting /usr/lib/postfix/master qmgr -l -t fifo -u -c /usr/sbin/sshd /usr/sbin/cron /sbin/getty 38400 tty1 /sbin/getty 38400 tty2 /sbin/getty 38400 tty3 /sbin/getty 38400 tty4 /sbin/getty 38400 tty5 /sbin/getty 38400 tty6 pickup -l -t fifo -u -c /usr/sbin/sshd /usr/sbin/sshd -bash bash ps -ef E come si vede questa versione riporta una serie di dati in pi`. dove X indica quale propriet` del processo si vuole far comparire nella lista (secondo una tabella di a valori riportata nella pagina di manuale). Anzitutto notiamo che la u prima colonna. e -f che permette di avere una lista con pi` informazioni. che permette di selezionare u tutti processi. per una e a trattazione si pu` fare riferimento alla sezione 2. la generazione di eventi dovuti all’inserimento di periferiche (usato da USB e PCMCIA). Infine l’opzione o permette all’utente di specificare un suo formato.40 Le opzioni di visualizzazione di ps sono moltissime. e qui potremo prendere in esame solo le principali. 1. riporta un nome utente. Restando nell’ambito della sintassi BSD una delle pi` usate ` u che stampa una lista u e con le informazioni pi` rilevanti riguardo l’utente. e s che stampa informazioni sui segnali. anche queste quest’ultima ` una caratteristica avanzata che va al di l` di quanto affrontabile in questa sede.3) e la presenza di pagine di memoria bloccate. Ciascun processo infatti mantiene le informazioni riguardanti l’utente che ha lanciato il processo ed il gruppo cui questo appartiene. il che permette di identificarli. Nel caso si usa la lettera W per indicare che i processi non usano memoria in user space. in tal caso infatti si u avr` come uscita del comando: a parker:/home/piccardi# ps -ef UID PID PPID C STIME root 1 0 0 Aug12 root 2 1 0 Aug12 root 3 1 0 Aug12 root 4 1 0 Aug12 root 5 1 0 Aug12 root 6 1 0 Aug12 root 7 1 0 Aug12 root 43 1 0 Aug12 root 101 1 0 Aug12 daemon 106 1 0 Aug12 root 168 1 0 Aug12 root 171 1 0 Aug12 root 175 1 0 Aug12 root 179 1 0 Aug12 root 203 1 0 Aug12 daemon 214 1 0 Aug12 root 310 1 0 Aug12 postfix 314 310 0 Aug12 root 319 1 0 Aug12 root 322 1 0 Aug12 root 325 1 0 Aug12 root 326 1 0 Aug12 root 327 1 0 Aug12 root 328 1 0 Aug12 root 329 1 0 Aug12 root 330 1 0 Aug12 postfix 2046 310 0 11:13 root 2047 319 0 12:24 piccardi 2049 2047 0 12:24 piccardi 2050 2049 0 12:24 root 2054 2050 0 12:24 root 2087 2054 0 12:34 TTY ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tty1 tty2 tty3 tty4 tty5 tty6 ? ? ? pts/0 pts/0 pts/0 TIME 00:00:03 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:01 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:40 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 CMD init [keventd] [ksoftirqd_CPU0] [kswapd] [bdflush] [kupdated] [kjournald] [kapmd] [eth0] /sbin/portmap /sbin/syslogd /sbin/klogd /usr/sbin/named /sbin/rpc.30 CAPITOLO 1.7 del secondo capitolo di GaPiL [1]. come lo scarico su disco dei buffer. Se invece si usa la sintassi SysV le opzioni pi` usate sono -e. ecc. UID. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX esso utilizzati) per la gestione di alcuni compiti interni.3. Le altre lettere associate al campo STAT sono “>”. altre opzioni sono v che stampa informazioni u relative all’uso della memoria virtuale. o 40 . “N” e “L” e indicano rispettivamente una priorit` maggiore o minore di quella standard (torneremo sulla priorit` in a a sez. con l’uso di una serie di direttive %X.

Le altre e colonne sono analoghe a quelle gi` viste in precedenza per la sintassi BSD. SID o session id (vedi sez. process group id (vedi sez. informazioni e dati visualizzabili con ps si pu` fare riferimento o alla pagina di manuale del comando. La seconda colonna del nostro esempio riporta di nuovo il PID di ciascun processo. terminale di riferimento del processo. che identificano l’utente che ha lanciato il processo. STIME. effective user id del processo. detti appunto user id e group id.1.3 di [1].3 che esistono casi in cui questo non avviene. indica il parent process id. indicate sempre in base al nome usato come intestazione della colonna che ne visualizza il valore. real group id del processo. in modo da poter ricostruire agevolmente la genealogia dei processi. riga di comando con la quale si ` avviato il processo. PID (process ID) del padre del processo. indica invece il momento in cui il comando ` stato lanciato. 1. Un elenco delle a principali informazioni relative ai processi che vengono riportate da ps sono elencate in tab. 43 di norma questi coincidono con gli identificatori del gruppo effective.42 ma quelle che poi sono significative a sono l’effective user id e l’effective group id. 1. 1. 1.4. in un sistema multiprocessore. ogni processo ha una directory di lavoro rispetto alla quale risolve i pathname relativi.13: Le principali propriet` dei processi e ed il nome della relativa colonna nella visualizzazione a effettuata da ps. l’ultima CPU usata dal processo. mentre la terza colonna. e Tabella 1. Propriet` a PID PPID UID GID CMD STAT NI TTY SID PGID %CPU %MEM C START TIME USER RUSER GROUP RGROUP COMMAND Descrizione PID (process ID) del processo. che coa munque sono importanti e vanno menzionate. ultima CPU utilizzata dal processo (ha senso solo in un sistema multiprocessore).2. orario dell’avvio del processo. percentuale della memoria fisica utilizzata dal processo. Come accennato in sez.4. La quarta colonna. real user id del processo. 41 . utilizzati per il controllo di accesso (che vedremo in sez. che sono appunto quelli che corrispondono alla colonna UID (e ad una eventuale colonna GID) ed il real user id e l’real group id. tempo totale di CPU utilizzato dall’avvio del processo.3) del processo.13. Infine ci sono alcune propriet` dei processi. 42 Linux usa ben quattro gruppi di identificatori diversi per gestire il controllo di accesso. accessibile con man ps. 1. C. La quinta colonna. ogni processo infatti mantiene il PID del padre.41 Ogni processo in realt` mantiene diverse versioni di questi identificatori. linea di comando con cui ` stato lanciato il processo. se indicati con il nome o con RUID e RGID se numerici.1 il sistema identifica ogni utente e gruppo nel sistema con un numero.43 che invece vengono identificati da sigle come RUSER e RGROUP.3. indica. in caso di zombie.4) del processo.3. effective group id del processo. non direttamente visualizzabili con ps. gli interessati possono trovare una trattazione dell’argomento a e nella sezione 3. ma vedremo in sez. 1. effective group id del processo.2.4) del processo. secondo uno schema che va al di l` di quanto ` possibile spiegare qui. 1. anche questa ` una cae come vedremo in sez. valore di nice (vedi sez.3. Per l’elenco completo delle opzioni. percentuale del tempo di CPU usato rispetto al tempo reale di esecuzione. L’ARCHITETTURA DEI PROCESSI 31 sono mantenute nella forma dei relativi UID (user id ) e GID (group id ). PPID. e stato del processo. Questa ci permette anche. 1. di identificare il processo responsabile della produzione degli stessi. effective user id del processo.4).3.

0 0.0 0.3 0 1196 528 504 S 0. e q che termina u il programma. 85472k used. che lo esegue in modalit` batch.3% system.02 0:00. essa e pu` essere cambiata con il comando chroot.dd dove ss sono i secondi e dd i decimi di secondo. 0 zombie Cpu(s): 1. evidenziando (con la stampa un grassetto) quelli trovati in stato e u runnable. Quando opera in modalit` interattiva il comando permette di inviare dei comandi da tastiera. a meno di non averlo lanciato con l’opzione -b.2 0 912 852 836 S 0. anche l’indicazione della directory che considera come radice.00 0:00. a meno di non aver impostato un intervallo diverso con l’opzione -d. che viene ereditata nella creazione di un processo figlio. 81 sleeping.3% user. 252828k used. 44 cio` il tempo trascorso da quando il sistema ` stato avviato. Lo stesso vale per la directory radice.44 numero di utenti e carico medio della macchina. 0. a I pi` rilevanti sono h e ? che mostrano un help in linea dei comandi disponibili.0 19 0 0 0 S 0.2 0 0 0 0 S 0. Per questo ci viene in aiuto il comando top.0 0.00 Tasks: 82 total. 1 running.32 CAPITOLO 1. 0. Per questo motivo ogni processo porta con s´. ordinati per uso decrescente della CPU (vengono cio` mostrati i pi` attivi). Le informazioni riportate di default sono il PID del processo (colonna omonima). 3352k free.3 0 724 684 636 S 0. Il comando ristampa la lista ogni secondo.00 COMMAND emacs top init keventd ksoftirqd_CPU0 kswapd bdflush kupdated khubd dhclient portmap syslogd klogd inetd lpd pbbuttonsd In testa vengono sempre stampate cinque righe di informazioni riassuntive sul sistema: nella prima riga viene riportato ora. nella seconda riga le statistiche sul totale dei processi. accessibile con man top. e e . infatti bench´ di norma questa coincida con la radice del sistema.00 0:49.00 0:02.0 0 0 0 0 S 0.4 0 548 516 516 S 0.9 0 1124 1124 896 R 1.06 0:00. in modo da restringere un processo in una sezione o dell’albero dei file. aggiornandola automaticamente in maniera periodica. 8288k buffers Swap: 524280k total. uptime.04 0:00.01 0:01. oltre alla directory di lavoe ro corrente.0% nice.66 0:00.0 0.3 0 864 784 756 S 0.04.0 0. load average: 0.2 0 824 768 740 S 0.0 0.0 0.01 0:00. 1.0 0 968 932 836 S 0. che deve specificarli tramite una lista di PID.0 0. e rispetto alla quale risolve i pathname assoluti.57 0:00. in tal caso di a solito si usa anche l’opzione -n per specificare il numero di iterazioni volute. Come si pu` notare ps si limita a stampare la lista dei processi attivi al momento della sua o esecuzione.0 0.0 0.6 3.14 0:00. che richiede un parametro nella forma ss. Per la lista completa delle opzioni si faccia riferimento al solito alla pagina di manuale. 97. A queste informazioni generiche seguono.4 0 500 452 436 S 0.0 0. Il comando opera normalmente in maniera interattiva.98.3 0. dopo una riga lasciata vuota che serve per gestire l’input in interattivo. nelle ultime due le statistiche di uso della memoria fisica e della swap.73 0:00.0 0. che stampa una lista di processi.0 0 0 0 0 S 0.13:06:35 up 6:04. consentendo la redirezione dell’output. 6 users.0 0. Un esempio di output del comando ` il seguente: e top . 110844k cached PID 3605 3729 1 2 3 4 5 6 83 186 190 289 295 320 324 330 USER piccardi piccardi root root root root root root root root daemon root root root root root PR 17 16 8 8 19 9 9 9 9 9 9 9 9 9 9 9 NI VIRT RES SHR S %CPU %MEM 0 10052 9.0 0 0 0 0 S 0.63 0:00.01 0:00. Infine l’opzione -p permette di osservare una lista di processi scelta dall’utente.0 0. 0 stopped.4% idle Mem: 256180k total. le informazioni sui processi. 1. 438808k free. nella terza le statistiche di utilizzo della CPU. Se si vuole tenere sotto controllo l’attivit` del sistema non ` pratico ripetere in a e continuazione l’esecuzione di ps.8m 4512 S 1.3 TIME+ 1:03.00 0:00.0 0 0 0 0 S 0. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX ratteristica del processo.

La memoria usata da un processo ` sostanzialmente suddivisa in due parti.3) di un processo. ammontare totale della memoria virtuale usata dal processo include tutto il codice. ` quello espresso e dalla colonna VIRT. per quelle comuni non presenti in detta tabella si faccia riferimento alle omonime di ps riportate in tab. le percentuali di utilizzo di CPU e memoria (colonne %CPU e %MEM). 45 . ` stata temporaneamente e parcheggiata su una area di disco a questo dedicata (detta swap) da cui pu` essere ripresa in o caso di necessit`. ammontare della memoria fisica utilizzata dal processo per il suo codice eseguibile. a Ci sar` per` anche una parte di memoria che al momento non ` in uso. Seguono i dati dell’uso della memoria nelle colonne VIRT. il tempo trascorso dall’avvio del programma (colonna TIME+) ed il comando usato per lanciarlo (colonna COMMAND).3) rispettivamente nelle colonne PR e NI. e Come altre informazioni presenti nella stampa di default il comando riporta lo stato del processo (colonna S).45 il e codice del programma e i dati usati dallo stesso. 1. e a In generale le informazioni riportate nelle colonne stampate da top sono simili a quelle di ps. che a questo punto ` a e virtuale.14. che sar` la somma sia della parte residente (quella di RES) che di quella che a ` stata parcheggiata nell’area di swap. con c. o a Con il comando u si possono selezionare i processi di un utente. il cui significato ` analogo a quello gi` visto per ps.3. la priorit` ed il valore di nice (torneremo su questi a in sez. in quella occasione abbiamo detto come sia compito del kernel mappare lo spazio (virtuale) degli indirizzi di memoria di un processo nella memoria fisica effettivamente disponibile.13.3. a S TIME+ Tabella 1. Le principali propriet` mostrate di top a sono riportate in tab. si pu` alternare fra la o stampa del nome comando e della riga completa. e a la quantit` di memoria attualmente usata a questo scopo ` quella che ` indicata dalla colonna a e e RES e viene detta residente. per capire queste quantit` occorre dare qualche dettaglio in pi` sul sistema della memoria virtuale cui abbiamo gi` a u a accennato in sez.1. e che. Una parte di quest’ultima (ad esempio il codice delle librerie) sar` condivisa con altri processi. con d cambiare il periodo di aggiornamento si sta usando una descrizione brutalmente semplificata. per una trattazione dettagliata dell’argomento si pu` o fare riferimento alla sezione 2. tempo di CPU utilizzato dall’avvio (analogo al TIME di ps. a Una delle caratteristiche di top ` che se viene usato in modalit` interattiva diventa possibile e a dare una serie di comandi da tastiera.3.1.2 di [1]. i dati e le librerie condivise pi` le pagine che sono state u messe su swap (uguale a SWAP + RES). ammontare della memoria fisica utilizzata dal processo per i suoi dati. ammontare della memoria fisica usata dal processo (uguale a CODE + DATA). stato del processo (analogo allo STAT di ps). per liberare della a o e memoria fisica a favore di altri programmi che devono essere eseguiti. ad esempio con k si pu` inviare un segnale (di default ` o e SIGTERM. anche in alcuni casi esse vengono indicate diversamente.14: Propriet` dei processi e nome della relativa colonna nella visualizzazione effettuata da top. Allora il totale della memoria vista dal programma. L’ARCHITETTURA DEI PROCESSI 33 l’utente cui esso appartiene (colonna USER). RES e SHR. ma con granularit` fino al centesimo di secondo). vedi sez.3. 1. ammontare delle pagine della memoria virtuale di un processo. 1. in quanto non corrisponde a della RAM direttamente accessibile.2) mentre con r si pu` cambiare la priorit` (vedi sez. che sar` la somma della parte usata per i dati (indicata da DATA) a e della parte usata per il codice (indicata da CODE). e questa viene indicata dalla colonna SHR. 1. rappresenta la memoria potenzialmente condivisibile con altri processi.1. Il programma per essere eseguito dovr` avere il codice ed i relativi nella memoria fisica. 1. Propriet` a SHR SWAP CODE DATA RES VIRT Descrizione ammontare della memoria condivisa. 1.

Si noti che in genere la RAM libera ` sempre molto poca. I dettagli sono al solito nella pagina di manuale accessibile con man free. In genere i segnali vengono utilizzati per notificare ai processi una serie di eventi (abbiamo accennato in sez. queste possono essere ottenute separatamente tramite il comando free. kilobyte (il default) e megabyte. e non e contiene nessuna informazione oltre al fatto di essere stato inviato.46 Il comando non ha argomenti e prende come opzioni -b.1 che uno di essi viene utilizzato per notificare la terminazione di un processo figlio).3. questo e ` corretto.34 CAPITOLO 1. . 1. Come dice la parola un segnale ` una specie di avviso che viene inviato ad un processo. che sono usati anche direttamente dal kernel e per comunicare ai processi una serie di eventi o errori (come l’uso inappropriato della memoria o una eccezione aritmetica). e possono essere anche inviati a mano attraverso l’uso del comando kill.5). 5. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX dei risultati. Ciascun segnale ` identificato da un numero e ed un nome simbolico. la riga centrale ci dice quanto della memoria e viene utilizzata per i buffer. oltre che nella pagina di manuale. 1.3. che mostra un riassunto generale del tipo: piccardi@monk:~/truedoc/corso$ free total used free Mem: 775444 759364 16080 -/+ buffers/cache: 229180 546264 Swap: 498004 34708 463296 shared 0 buffers 213276 cached 316908 La prima riga riporta l’uso della memoria fisica.2. esistoe a no molti casi in cui ` necessaria una qualche forma di comunicazione. come riportato nelle colonne buffer e cache. la lista dei segnali disponibili pu` essere ottenuta semplicemente con: o piccardi@oppish:~$ kill -l 1) SIGHUP 2) SIGINT 5) SIGTRAP 6) SIGABRT 9) SIGKILL 10) SIGUSR1 13) SIGPIPE 14) SIGALRM 18) SIGCONT 19) SIGSTOP 22) SIGTTOU 23) SIGURG 26) SIGVTALRM 27) SIGPROF 30) SIGPWR 31) SIGSYS 34) SIGRTMIN+2 35) SIGRTMIN+3 38) SIGRTMIN+6 39) SIGRTMIN+7 42) SIGRTMIN+10 43) SIGRTMIN+11 46) SIGRTMIN+14 47) SIGRTMIN+15 50) SIGRTMAX-13 51) SIGRTMAX-12 54) SIGRTMAX-9 55) SIGRTMAX-8 58) SIGRTMAX-5 59) SIGRTMAX-4 62) SIGRTMAX-1 63) SIGRTMAX 46 3) 7) 11) 15) 20) 24) 28) 32) 36) 40) 44) 48) 52) 56) 60) SIGQUIT SIGBUS SIGSEGV SIGTERM SIGTSTP SIGXCPU SIGWINCH SIGRTMIN SIGRTMIN+4 SIGRTMIN+8 SIGRTMIN+12 SIGRTMAX-15 SIGRTMAX-11 SIGRTMAX-7 SIGRTMAX-3 4) 8) 12) 17) 21) 25) 29) 33) 37) 41) 45) 49) 53) 57) 61) SIGILL SIGFPE SIGUSR2 SIGCHLD SIGTTIN SIGXFSZ SIGIO SIGRTMIN+1 SIGRTMIN+5 SIGRTMIN+9 SIGRTMIN+13 SIGRTMAX-14 SIGRTMAX-10 SIGRTMAX-6 SIGRTMAX-2 la colonna shared veniva usata per indicare la memoria condivisa fra pi` processi. ed allora viene impiegata dai e buffer del kernel (per gestire pi` efficacemente il trasferimento dei dati verso i dispositivi) e per u mantenere dati temporanei. Si noti che nelle righe iniziali top riporta anche delle statistiche complessive sull’uso della memoria. pu` essere stampato a video o con h. -k e -m per stampare i dati di utilizzo rispettivamente in byte.2 I segnali Bench´ i processi siano di norma entit` separate e completamente indipendenti fra di loro. La forma pi` elementare di e u comunicazione fra processi ` costituita dai segnali. adesso ` obsoleta e deve u e essere ignorata. mentre l’ultimo quello della swap (se questa ` attiva. L’elenco completo. torneremo sull’argomento in sez. in quanto non ha senso lasciare inutilizzata la RAM.

cos` come tutti i segnali relativi ad errori e ı di programmazione come SIGSEGV. altrimenti. Tipici segnali che causano una semplice uscita sono SIGTERM. ad esempio il segnale SIGSEGV viene inviato dal kernel per segnalare ad un processo una Segment Violation. ma il segnale pu` essere intercettato o per eseguire delle operazioni di pulizia come ad esempio cancellare dei file temporanei prima dell’uscita. ma si pu` inviare qualunque altro segnale specificandone numero o nome preceduto e o da un .1. il default del comando kill. che hanno un comportamento speciale) possono essere intercettati dal processo. come spiegato in sez. che pu` eseguire una opportuna funzione al loro o arrivo.6 del nono capitolo di u o GaPiL. del loro significato e delle azioni di default si pu` trovare nella sezione 9. . SIGFPE. 1. o In generale il comando kill permette di inviare un segnale ad un processo qualunque. e SIGINT che ` associato al carattere di interruzione dato dalla tastiera (vedi sez. si impedisce cos` ı che un accesso sbagliato possa andare a sovrascrivere la memoria di altri processi. Se infatti SIGTERM viene intercettato pu` risultare inefficace qualora il o 47 per una spiegazione pi` dettagliata al riguardo si pu` fare riferimento alla sezione 9. nella directory di lavoro corrente del processo.2 di [1]. ecc. Come accennato il segnale inviato di default ` SIGTERM. cio` un accesso illegale alla e memoria. che ` quello che viene usato per notificare al padre la terminazione e di un figlio) di default vengono ignorati. Infine e alcuni segnali (come SIGCHLD. Se un segnale non viene intercettato viene eseguita una azione di default che ` specifica di e ciascuno di essi. Gran parte dei segnali (tutti eccetto SIGKILL e SIGSTOP. dato che SIGKILL non ` intercettabile e la sua azione di default ` la tere e minazione del processo. come SIGKILL che causa l’immediata terminazione di un processo.3. o con una semplice uscita o con l’uscita eseuita o o insieme alla creazione.1. l’effetto di questo comando ` di terminare senza possibilit` di scampo e a il processo in questione. un e segnale che invece produce un core dump ` SIGQUIT.come opzione. ci si ritrover` con e a degli zombie. di un file core che contiene una copia dello spazio della memoria del processo (viene per questo detto un core dump) che pu` o essere usato con un programma di debug per vedere in che punto c’` stata l’interruzione. Nella maggior parte dei casi l’azione consiste nella terminazione immediata del processo. il sistema se ne accorge ed invia questo segnale che ne causa la terminazione.3.48 altri vengono inviati direttamente dall’utente. Ad esempio il segnale SIGTERM (che ` quello che il comando kill invia di default) serve e per richiedere la terminazione immediata di un processo. se per un errore di programmazione un processo cerca e di scrivere su una parte dello spazio degli indirizzi che non corrisponde a nessuna locazione di memoria associata al processo stesso. questa pu` per` avvenire in due modi. Nel caso specifico.4. Un elenco dettagliato dei segnali. 48 questo ` un’altro dei vantaggi della memoria virtuale. L’ARCHITETTURA DEI PROCESSI 35 I segnali effettivamente usati dal sistema sono i primi 31. 1. Oltre a -s a e -l il comando kill accetta le opzioni -L (sinonimo di -l) e -V che ne stampa la versione. gli altri sono chiamati real time signal ed hanno un uso specialistico che va al di l` di quello che possiamo affrontare qui.47 In a generale ciascuno di essi ha un compito o un significato specifico. 49 nel caso di SIGCHLD non ` proprio il caso di farlo.49 il programma cio` continua ad essere eseguito senza e nessuna conseguenza. alcuni di essi vengono generati automaticamente in caso di errori del programma. specificando come parametro il PID di quest’ultimo.4).3. ad esempio: kill kill kill kill -9 1029 -SIGKILL 1029 -KILL 1029 -s SIGKILL 1029 sono modalit` equivalenti di inviare il segnale SIGKILL al processo con PID 1029. Per una descrizione accurata delle opzioni si faccia al solito riferimento alla pagina di manuale accessibile con man kill.

e accessibile con man killall. il sistema per il log e le esecuzioni periodiche dei comandi. ed ` inutile inviarli ad un processo in stato Z perch´ in realt` esso non esiste pi`.3. e pi` facile da usare. Se si ha necessit` di usare un sistema effettivamente real-time occorre usare una versione del kernel a opportunamente modificata come RTAI o RT-Linux.3 Priorit` a Abbiamo visto in sez.3. attende la terminazione di tutti i processi cui ha inviato il segnale. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX processo venga bloccato anche nell’esecuzione della funzione di gestione.4 quando affronteremo le questioni relative al controllo di sessione. a Una priorit` statica pi` alta comporta che un processo verr` sempre eseguito prima di ogni a u a altro processo a priorit` pi` bassa. In realt`. come accennato in tale occasione. richiede una corrispondenza esatta anche per nomi molto lunghi (il comando controlla solo i primi 15 caratteri). e o e e a u 51 sono chiamati cos` i programmi che girano in background senza essere associati ad un terminale. torneremo su questo in sez. Al solito la documentazione completa ` nella pagina di manuale.3.1 che una delle propriet` dei processi che si pu` modificare con top ` a o e la priorit`. Di norma le priorit` statiche vengono utilizzate a a solo per i cosiddetti processi real-time. e questo senza alcuna conseguenza per gli altri processi o per il sistema.36 CAPITOLO 1. 52 questo nome ` in realt` fuorviante. Infine invece del PID si pu` inviare un segnale ad un intero process group (sui process group o torneremo pi` avanti in sez. 1. non ` un sistema operativo e a e real-time. dato che non ` possie bile intercettare SIGKILL si ha a disposizione un mezzo infallibile50 per terminare un processo impazzito. Opzione -g -e -i -l -w Significato invia il segnale al process group del processo.3. Le opzioni principali disponibili sono riportate in tab. ` killall che invece di richiedere un u e numero di PID funziona indicando il nome del programma. 1. 1. l’uso di processi real-time ` e riservato a pochi usi specialistici) hanno priorit` statica nulla e il loro ordine di esecuzione viene a stabilito solo in base alle priorit` dinamiche. Il che vuol dire che se si lancia un processo a priorit` a u a statica alta che non fa I/O non si potr` fare pi` nulla nel sistema fintanto che questo non si a u 50 quasi infallibile. chiede una conferma interattiva prima di inviare il segnale. che viene utilizzato per dire ai demoni 51 u e di sistema di rileggere il proprio file di configurazione. ` cio` possibile utie e lizzarli per dare delle istruzioni (molto semplici. quanto il suo valore di nice.1 non ` possibile inviare segnali ad un processo in stato D e perch´ non pu` riceverli. e a La gestione delle priorit` in un sistema unix-like infatti ` abbastanza complessa dato che esia e stono due tipi di priorit`: statiche e dinamiche.15. come ad esempio i server di rete. 1. Linux. 1.15: Principali opzioni del comando killall. il valore -1 inoltre u ha il significato speciale di indicare tutti i processi correnti eccetto init ed il processo che esegue il comando. almeno nella sua versione standard. ed invia il segnale (specificato con la stessa sintassi di kill) a tutti i processi attivi con quel nome.3. stampa la lista dei nomi dei segnali . quello che di norma si pu` modificare a a o non ` tanto la priorit` di un processo.4) usando un valore negativo come parametro. Tabella 1. e molti altri.52 i processi ordinari (tutti. Uno dei segnali pi` usati ` ad esempio SIGHUP. . come quella di terminare l’esecuzione) ad un processo. infatti come accennato in sez. Un comando alternativo a kill. I segnali sono un meccanismo di comunicazione elementari fra processi. 1. che servono ı a fornire vari servizi. Alcuni segnali (come SIGSTOP e SIGTERM) sono associati al controllo del terminale e vengono inviati attraverso opportune combinazioni di tasti.

a u Questo fa s` che anche i processi che partono da un valore di nice pi` alto (che viene chiamato ı u cos` appunto perch´ i processi che lo usano sono pi` “gentili” nei confronti degli altri) ottengano ı e u alla fine una possibilit` di essere eseguiti. La cosa non vale quando il processo deve fare I/O perch´ in tal caso anche il processo real-time viene messo in stato di e sleep. che di default ` nullo. Tralasciando i dettagli possiamo dire che le priorit` dinamiche sono caratterizzate da un valore a iniziale. e ci si affida al normale procedimento di scheduling. Al solito si applica la restrizione che solo l’amministratore pu` applicare valori negativi. che ` quello che poi si chiama nice... che pu` essere di tipo Round Robin..3.. Se pi` processi hanno la stessa priorit` statica l’ordine di esecuzione dipende u a dalla politica di scheduling scelta.1. L’opzione a principale ` -n che permette di specificare un valore di nice da applicare al programma. e First In First Out. pi` un processo viene eseguito.] In questo caso la priorit` si indica immediatamente come valore numerico e si pu` specificare a o il processo (o i processi) a cui applicare il cambiamento in tre modi diversi. Se non e si specifica nulla viene applicato un valore di 10. se si vuole cambiare o la priorit` di un programma gi` in esecuzione si pu` usare il comando renice. Il comando che permette di modificare il valore di nice di un processo ` appunto nice. aumentando a o cos` la priorit`. che e deve essere usato quando si lancia un programma. infine con -g si possono indicare tutti i processi di uno stesso gruppo (che come vedremo in sez. 1.. in cui vengono eseguiti nella sequenza in cui sono stati lanciati. fra tutti u a quelli in stato runnable.1) che lo scheduler ` la parte di kernel che decide quale processo deve essere posto in e esecuzione. Si ricordi che valori positivi corrispondono ad una diminuzione della priorit`. 1. L’ARCHITETTURA DEI PROCESSI 37 sar` concluso (e se c’` un errore e il programma si blocca in un ciclo si dovr` necessariamente a e a riavviare la macchina. Si tenga conto inoltre che. e e u pi` il valore di priorit` dinamica aumenta.] [[-u] user . indicandone il PID. nella forma: nice [OPTION] [COMMAND [ARG]. si ricordi (vedi sez.3. lasciando cos` la possibilit` di ı a interromperlo. del tipo: renice priority [[-p] pid . Pertanto una volta che si ` diminuita e la priorit` di un processo aumentandone il valore di nice un utente normale non potr` tornare a a indietro. in cui i processi girano o a turno per un tempo fisso. il processo che ha una priorit` dinamica pi` bassa.4 corrispondono ai comandi eseguiti su una stessa riga di shell) specificandone il process group. Con l’opzione -p si pu` specificare un processo singolo. ed o aumentare cos` la priorit` di un processo.] in cui si fa seguire a nice la linea di comando di cui su vuole cambiare la priorit`. ed in quel momento altri processi possono essere eseguiti.] [[-g] pgrp . secondo quello che appunto ` il meccanismo chiamato a e fairness. a differenza di nice. con l’opzione -u si possono selezionare o tutti i processi di un singolo utente. L’amministratore pu` anche usare valori negativi.. ı a Il comando nice pu` essere usato solo quando si avvia un programma. e lo scheduler 53 mette sempre in esecuzione. Nell’uso normale comunque non si ha bisogno di usare le priorit` statiche (che come accena nato sono anche molto rischiose in caso di errori di programmazione).. i ı a valori di renice sono relativi al valore di nice attuale. non avendo modo di eseguire nient’altro). questo ha una a a o sintassi diversa..1. basato su un sistema di priorit` dinamiche che permette di ottea nere quella che usualmente viene chiamata la “fairness” nella distribuzione del tempo di CPU. I valori possibili sono fra 19 e -20. 53 .

ciascun processo a sua volta ha una lista dei file che ha aperto. nel momento in cui lancia un programma.55 Convenzionalmente56 un programma legge il suo input dal primo file descriptor. Si tenga comunque presente che dal punto di vista del kernel non esiste nessuna differenza fra processi interattivi e non. e per maggiori dettagli riguardo a questa problematica si pu` consultare la sezione 6. in quanto discenderanno dal processo e che gestisce l’accesso attraverso l’interfaccia grafica. ad esempio e u e a in presenza di una connessione diretta via modem in cui si ha a disposizione un solo terminale. che poi viene realizzato completamente in user space. e con l’interfaccia grafica che non fa riferimento ad un terminale. Avendo a disposizione un solo terminale. Per questo lavorano come suol dirsi “in background ” e non hanno nessun terminale di riferimento. e sono programmi utilizzati dal sistema per compiere una serie di compiti di utilit`. quella delle sessioni di lavoro e del job control.38 CAPITOLO 1. scrivendo e leggendo da un file qualunque.1 di [1]. scrive l’output sul secondo. si possono eseguire anche programmi con cui e ` possibile interagire. (in sostanza degli identificatori aggiuntivi come il session id ed il process group id e le funzioni per impostarne il valore. La shell infatti. 1 e 2.3. per questo a venne introdotta un’interfaccia. La gestione delle sessioni di lavoro deriva direttamente dalla procedura di login su terminale. e l’invio dei segnali relativi alla gestione). Essa origina dagli albori del sistema. Per capire meglio il significato di tutto questo. o 56 si tenga presente che ` solo una convenzione. che era l’unica modalit` di interazione con il sistema. nella colonna TTY). Oggi. e si devono eseguire compiti diversi. eseguire lavori periodici. (come spedire a la posta. con l’introduzione delle interfacce grafiche. ad essi vengono assegnati rispettivamente i file descriptor 0. Questo per` ha comportato che la distinzione fra processi interattivi e non non sia pi` cos` o u ı semplice. Questo allora ha a portato a tracciare una distinzione fra i processi interattivi (che quindi erano associati ad un terminale) e quelli non interattivi slegati da un terminale (che abbiamo gi` trovato nell’output a di ps. Dato che questi sono i primi tre file aperti e lo sono in questa sequenza. che permettesse di lanciare ed usare pi` processi attraverso un solo terminale. lo standard output e lo standard error. Quando un processo ` interattivo (cio` ` stato e ee lanciato direttamente da una shell interattivamente) tutti e tre questi file sono associati al terminale su cui si stava operando. con la possibilit` di avere u a pi` console virtuali. ma l’interfaccia ` rimasta e mantiene comunque una sua utilit`. quando ci si poteva collegare solo attraverso un terminale. In genere questi ultimi sono tradizionalmente chiamati demoni. (attraverso di esse). 2. che sono immediatamente disponibili. si pu` tranquillamente scrivere un programma che si comporta e o in modo diverso. il cui indice ` appunto un numero chiamato file descriptor. secondo la modalit` a classica ereditata dai primi Unix.54 Essi sono rispettivamente lo standard input. ecc. senza che questi siano associati a nessun terminale.4 Sessioni di lavoro e job control La gestione delle sessioni di lavoro ` uno dei punti pi` oscuri della interfaccia a linea di comando e u di un sistema unix-like.5.2. si cura sempre di automaticamente tre file. non potendosi pi` basare sulla semplice presenza o meno di un terminale di controllo u perch´. e gli eventuali errori sul terzo.) anche quando nessun utente ` e collegato ad un terminale.2 il sistema mantiene anche una lista dei file aperti dai vari processi. se questo fosse stato occupato da un solo processo alla volta. come accennato in sez. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX 1. occorre illustrare una caratteristica fondamentale dell’interfaccia a riga di comando. servire pagine web. 55 54 . e Comunque ` sempre possibile identificare questi ultimi. esso si limita a mettere a disposizione alcune risorse che possono essere utilizzate per realizzare il controllo di sessione. non si sarebbero potute sfruttare le capacit` di multitasking del sistema.1. e della differenziazione fra processi interattivi e non. questo u problema non c’` pi`. torneremo su questo in sez. 1. e l’interfaccia dei terminali (cio` quella dei dispositivi di questo e tipo) fa s` che in lettura il terminale fornisca quanto scritto sulla tastiera e che quanto scritto ı sul terminale venga stampato sullo schermo.

Tutti i programmi che si sono lanciati dalla nostra shell (xmms. essi infatti sono stati lanciati in background. Questo ` il processo e che cura in generale la procedura di login. il comando viene lanciato con le opportune opzioni. e per distinguere questo tipo di situazioni. che richiedono comportamenti diversi. 57 . che viene passato al programma login che si cura di chiedere la password ed effettuare l’autenticazione.bin -name xdvi s 0:02 | \_ gs -sDEVICE=x11 1:07 \_ emacs struttura. Poi stampa la linea “login: ” ed attende l’immissione sul terminale di un nome di login. di nuovo il programma ` sempre lo stesso. La seconda caratteristica della gestione del job control ` che quando si lancia una linea di e comando inoltre tutti i processi avviati all’interno della stessa riga (nel caso le varie istanze di xmms.. f STAT S S S S S S S S S S S S S S S S S S R TIME COMMAND 0:02 init [2] 0:00 gnome-terminal 0:00 \_ gnome-pty-helper 0:00 \_ bash 0:00 /usr/sbin/sshd 0:00 \_ sshd: piccardi [priv] 0:35 \_ sshd: piccardi@pts/2 0:00 \_ -bash 0:01 \_ xmms 0:00 | \_ xmms 0:00 | \_ xmms 0:00 | \_ xmms 0:00 | \_ xmms 0:00 | \_ xmms 0:00 \_ /usr/bin/perl -w /usr/bin 0:03 | \_ xdvi. 3. e lanciare una shell di e login. Questa ` un’altra funzionalit` e a della shell.3.. xdvi. cambiare il proprietario dello stesso all’utente che si ` collegato.tex 0:00 \_ ps -je f In questo caso si pu` notare come la shell sia stata ottenuta non da getty ma tramite una o ` sessione di rete fatta partire da sshd. emacs e lo stesso ps) hanno lo stesso SID. o lanciata come sub-shell all’interno o di una sessione. che i processi ı. 1.3.1) e tutti processi lanciati tramite la shell saranno identificati dallo stesso session id .1. Se questa ha successo ` login che si incarica di impostare il valore del session id per il processo e in corso. ma e una shell pu` essere eseguita anche all’interno di uno script non interattivo.. sul terminale virtuale pts/2. o i vari programmi avviati nell’esecuzione di xdvi) vengono assegnati allo process group. dando l’avvio ad una sessione di lavoro. Esso stampa un messaggio di benvenuto preso dal file /etc/issue (vedi sez. 4857 4527 4527 ? 4858 4527 4527 ? 4859 4859 4859 pts/1 . che contraddistinguono poi quella che viene appunto chiamata una shell di login e una shell interattiva. E inoltre presente un’altra sessione. 2.4). le informazioni relative alla sessione possono essere visualizzate con l’opzione -j di ps. L’ARCHITETTURA DEI PROCESSI 39 Negli output di ps mostrati in sez.. 5936 5936 5936 ? 8005 8005 8005 ? 8007 8005 8005 ? 8009 8009 8009 pts/2 8013 8013 8009 pts/2 8014 8013 8009 pts/2 8015 8013 8009 pts/2 8016 8013 8009 pts/2 8504 8013 8009 pts/2 8505 8013 8009 pts/2 8037 8037 8009 pts/2 8039 8037 8009 pts/2 8040 8037 8009 pts/2 8382 8382 8009 pts/2 8506 8506 8009 pts/2 . e gran parte delle distribuzioni usa come shell di default la bash. e identificati pertanto dallo stesso valore della colonna PGID. associata al terminale virtuale pts/1.57 A questo punto si ha a disposizione una riga di comando (torneremo in dettaglio sull’interfaccia a riga di comando in sez. lanciando il comando dal terminale in cui si sta scrivendo queste dispense otteniamo: piccardi@anarres:~$ ps -je PID PGID SID TTY 1 0 0 ? . creata da gnome-terminal all’interno di una sessione X...1 si pu` notare come sia presente il processo getty o associato ai sei terminali virtuali (da tty1 a tty6) presenti sullo schermo.1. che fa s` quando si termina una linea di comando con il carattere &. e vengono o eseguiti insieme. Come si pu` notare tutti questi comandi fanno riferimento allo stesso terminale.

e alla successiva operazione sulla shell. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX vengano mandati in esecuzione sospendendo momentaneamente l’accesso al terminale. quando un processo ` associato ripartire in background con il comando bg. si possono mandare altri segnali con delle opportune combinazioni di tasti: C-c invia un SIGINT e C-\ invia un SIGQUIT. che mostra o la lista ed il relativo stato di ciascuno di essi. e che ` associato alla combinazione di tasti C-z. la cui azione di default ` quella di fermare i processi. con un qualcosa del tipo: piccardi@anarres:~/gapil$ jed prova & [3] 8657 piccardi@anarres:~/gapil$ [3]+ Stopped jed prova Un altro modo di mandare un processo in background ` attraverso l’uso del segnale SIGSTOP. La struttura di sicurezza tradizionale di un sistema unix-like ` estremamente semplice. 60 sono previste estensioni specifiche. come quelle di SELinux. e non corrisponde a nessun e eseguibile su disco. questo.4.3.2. ` un comando interno della shell. che permetta di rea stringere le capacit` dei singoli in maniera che questi non possano recare danni (volontariamente a o involontariamente che sia) agli altri o al sistema. verrebbe automaticamente inviato un segnale (rispettivamente SIGTTIN e SIGTTOU) a tutti i processi nello stesso process group.40 CAPITOLO 1.58 questo ferma il processo. vedremo la differenza in sez. Linux ` nato come sistema multiutente e nella sua archia u e tettura ` nativa la possibilit` di avere utenti diversi che lavorano sulla stessa macchina.4 Il controllo degli accessi Come gi` detto e ripetuto pi` volte. sottoponendo anche l’amministratore ad ulteriori restrizioni. e e attenzione. 1. sintassi che pu` essere usata anche per il comando kill. come i seguenti fg e jobs. 1. per cui l’interazione avviene attraverso l’interfaccia grafica) questi continuano ad essere eseguiti senza accedere pi` al terminale. Se. questo necessita ovviamente di un bel po’ di lavoro amministrativo in pi` per cui non ` detto che sia sempre utilizzata. xdvi e emacs il processo non ha bisogno del terminale (nel caso perch´ sshd e esegue il forwarding la sessione X. e ad un terminale di controllo. incorporate nel kernel a partire dalle versioni di sviluppo 2. quando o questo ` realizzato anch’esso come comando interno della shell (come avviene nel caso della e bash). questo pu` prendere come parametro sia il PID e o del processo (indicato direttamente) che il numero di job stampato da jobs. Un processo pu` essere riassociato al terminale o (cio` messo in foreground ) con il comando fg. 2. avremmo avuto un avviso. ogni kernel di tipo unix-like come Linux deve fornire dei meccanismi di identificazione dei vari utenti sulla base dei quali poi possa venire imposto un adeguato controllo degli accessi e delle operazioni che questi possono fare. Quando per` un processo u o in background dovesse tentare di effettuare una lettura o una scrittura sul terminale.1 Utenti e gruppi Essendo nato come sistema multiutente.5. L’elenco dei processi in background pu` essere stampato con il comando jobs.1. che implementano il Mandatory Access Control e la capacit` di definire in maniera molto pi` a u dettagliata i privilegi di accesso. Questo e a ovviamente comporta la necessit` di un meccanismo di controllo degli accessi. la notazione ` formalizzata in sez. che deve essere preceduto da un carattere “%”.x. u e 59 58 .4. 2. Cos` se ad esempio e ı si fosse lanciato in background l’editor jed (che opera solo tramite terminale) questo si sarebbe immediatamente fermato. come accade per xmms. che pu` essere fatto e o 59 Oltre a SIGSTOP. tanto e da essere in certi casi considerata troppo primitiva60 e prevede una distinzione fondamentale fra cio` l’uso del tasto control insieme alla lettera z.

Ogni processo. non vuole parametri e stampa i gruppi cui questo appartiene. o nel qual caso stampa i gruppi cui appartiene detto utente. se ` diverso da zero si verifica se corrisponde a quello per cui la richiesta e ` consentita. impedendo l’esecuzione di tutte le operazioni non consentite.4. Il sistema pu` cos` provvedere al controllo degli accessi. Questa nella sua forma pi` elementare u ` fatta dal programma login. o invocato da un utente normale. che richiede all’utente il nome che lo identifica di fronte al sistema e (detto username) ed una password che ne permette di verificare l’identit` (torneremo sulla a gestione di questi aspetti in sez. 4.61 Per questo motivo tutti i sistemi unix-like prevedono una procedura di autenticazione che permette di riconoscere l’utente che si collega al sistema.2. In questo modo una volta entrati nel sistema tutti i programmi verranno eseguiti per conto dell’utente che ha effettuato il login. detto gruppo di default.1.1. e tutti gli altri utenti per i quali invece vengono effettuati vari controlli previsti per le operazioni che li richiedono. eredita dal padre l’informazione relativa all’utente che lo ha creato (e a tutti i gruppi cui questo appartiene). che stampa il nome di login (comunemente detto username) e con qualcosa del tipo: piccardi@monk:~/truedoc/corso$ whoami piccardi Per verificare invece di quali gruppi si fa parte si pu` usare il comando groups. IL CONTROLLO DEGLI ACCESSI 41 l’amministratore del sistema. I controlli vengono effettuati sulla base di questo numero. quando viene lanciato. di norma si fa si che questo contenga solo l’utente in questione e abbia nome uguale all’username. In genere ogni utente ` identificato con un numero. lo user-ID o uid. sia di gruppi che degli utenti. per il quale non viene effettuato nessun controllo. sia reali che effettivi ed in forma sia letterale che numerica. Entrambi i comandi non hanno opzioni se non quelle standard GNU che vedremo in sez. Si noti il se. si evita cos` o ı che utenti diversi possano danneggiarsi fra loro o danneggiare il sistema. Il comando prende molte opzioni che permettono di specificare nei dettagli quali informazioni stampare. Infine il comando id permette di stampare in generale tutti i vari identificatori associati ad un processo. e nel caso si nega o concede l’accesso. il group-ID o gid. Questo ` nullo per e e l’amministratore e diverso da zero per tutti gli altri utenti. 2. Il comando che permette di verificare chi ` l’utente che lo sta eseguendo (identificando cos` e ı le proprie credenziali) ` whoami. ad esempio: piccardi@anarres:~/gapil$ groups piccardi cdrom audio se invece il comando viene usato dall’amministratore pu` prendere come parametro un username. che possono cos` venire usati per permettere l’accesso ad una serie di risorse comuni u ı agli utenti dello stesso gruppo. per la documentazione completa. questo. al solito si pu` fare riferimento alla pagina di manuale. Inoltre ogni utente ` sempre e associato almeno un gruppo. e per questo ` da evitare assolutamente l’uso di root per qualunque compito che non sia strettamente connesso e all’amministrazione del sistema. Gli utenti poi possono venire raggruppati in gruppi. ogni gruppo ha un nome (detto group name) ed un relativo identificatore numerico. qualora l’uid sia nullo il controllo e non viene neanche effettuato: ` per questo che root ` sempre in grado di compiere qualunque e e operazione.3). e porre una serie di limitazioni a quello o ı che l’utente pu` fare. Un utente pu` comunque appartenere a o pi` gruppi. 61 . tradizionalmente identificato dall’username root. accessibile con o man id.

• permesso di esecuzione (indicato con la lettera x.c ElemDaytimeTCPCuncServ. introdotte ufficialmente a partire dai kernel 2.c SockWrite.4. dall’inglese other ). dall’inglese read ).c ElemEchoTCPClient. dall’inglese user ).c wrappers. quello di lettura per tutti quanti (proprietario. gruppo e altri) ` possibile specificare uno dei tre e permessi.c Makefile ProcInfo.5.c getparam getparam.x. ed il permesso di esecuzione ` abilitato per tutti. ma nella maggior parte dei casi il controllo di u accesso standard ` pi` che sufficiente. Nel caso di un programma invece (come il getparam nell’esempio) i permessi di default sono diversi.c TestRen. In generale un utente pu` effettuare su un file solo le azioni per le quali ha i permessi. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX 1. lo stesso vale per le directory. • permesso di scrittura (indicato con la lettera w. il proprietario di un file pu` sempre modificarne i permessi (con il comando chmod. il cui significato ` abbastanza ovvio. 1. dato che e in questo caso il permesso di esecuzione ha il significato che ` possibile attraversare la directory e quando si scrive un pathname. gruppo e altri) e l’assenza del permesso di esecuzione. dall’inglese group).c SimpleEchoTCPClient. per e e ciascuno dei tre livelli di privilegio (utente.c ForkTest.c test_fopen.c SockRead. • i privilegi di tutti gli altri (indicati con la lettera o.c ErrCode. La lettura dell’output di questo comando ci permette di vedere che i sorgenti dei programmi contenuti nella directory in oggetto hanno quelli che sono in genere i permessi di default per i file di dati. e Ogni file ` associato ad un utente. questi vengono riportati nella versione estesa dell’output del comando ls: [piccardi@gont gapil]$ ls -l sources/ drwxr-sr-x 2 piccardi piccardi 128 -rw-r--r-1 piccardi piccardi 3810 -rw-r--r-1 piccardi piccardi 4553 -rw-r--r-1 piccardi piccardi 3848 -rw-r--r-1 piccardi piccardi 3913 -rw-r--r-1 piccardi piccardi 4419 -rw-r--r-1 piccardi piccardi 9534 -rw-r--r-1 piccardi piccardi 4103 -rw-r--r-1 piccardi piccardi 1052 -rw-r--r-1 piccardi piccardi 3013 -rw-r--r-1 piccardi piccardi 3904 -rw-r--r-1 piccardi piccardi 4409 -rw-r--r-1 piccardi piccardi 1748 -rw-r--r-1 piccardi piccardi 1678 -rw-r--r-1 piccardi piccardi 2821 -rwxr-xr-x 1 piccardi piccardi 28944 -rw-r--r-1 piccardi piccardi 4416 -rw-r--r-1 piccardi piccardi 3018 -rw-r--r-1 piccardi piccardi 7404 Jan Sep Sep Sep Sep Sep Oct Oct Jan Jan Sep Sep Sep Sep Jan Jan Jan Jan Jun 4 10 9 10 10 9 14 26 1 4 10 10 10 10 4 1 4 4 10 00:46 00:45 19:39 00:45 00:45 19:39 17:05 23:40 12:53 00:44 00:45 00:45 00:45 00:45 00:44 13:11 00:44 00:44 2001 CVS ElemDaytimeTCPClient.c ElemDaytimeTCPServer.h che ci mostra nella prima colonna i permessi secondo lo schema riportato in fig. o 62 come le ACL (Access Control List).42 CAPITOLO 1. dall’inglese execute). dall’inglese write). esistono estensioni62 e che permettono di renderla pi` sottile e flessibile.c ElemEchoTCPServer. e tre permessi base: • permesso di lettura (indicato con la lettera r. che ` detto proprietario del file e ad un gruppo.2 I permessi dei file Anche la gestione dei permessi dei file ` tutto sommato piuttosto semplice.c SimpleEchoTCPServer. • i privilegi del gruppo (indicati con la lettera g. .4. e cio` e il permesso di scrittura solo per il proprietario. questo o comporta ad esempio che di default un utente pu` leggere i file di un altro ma non pu` modificarli o o o cancellarli. In sostanza per il sistema esistono tre livelli di privilegi: e u • i privilegi dell’utente (indicati con la lettera u.

come misura di sicurezza. Figura 1. In questo modo si pu` far eseguire anche ad un utente normale dei compiti che nel caso o generico sono riservati al solo amministratore. una estensione ripresa da SysV. In genere poi ogni distribuzione o fa s` che tutti i file di configurazione ed i programmi installati nel sistema appartengano a root. ı cosicch´ diventa impossibile per un utente normale poter danneggiare (accidentalmente o meno) e gli stessi63 .4. dal loro a nome suid bit. Al solito tutto questo vale per tutti gli utenti eccetto l’amministratore che non ` soggetto a e nessun tipo di restrizione e pu` eseguire qualunque operazione. 1. I bit usati per i permessi sono in realt` 12.4.4.2) del file. Per consentire l’uso di privilegi maggiori impostando il suid bit o lo sgid bit si consente al programma di essere eseguito rispettivamente con i privilegi dell’utente e del gruppo cui questo appartiene.4. che se usato da root non ha restrizioni.65 I primi due servono per modificare il comportamento standard del sistema. cosa che rende a u molto pi` difficile la sua diffusione. che viene attivato impostando lo sgid bit su un file non eseguibile. i primi a nove sono quelli gi` illustrati in fig. 1. 1. un virus potr` al pi` infettare i file di quell’utente.3 I permessi speciali Quelli illustrati in sez. esistono per` altri tre o permessi speciali. u 64 con l’eccezione del cosiddetto mandatory locking. ma solo la propria e fornendo prima quella corrente. questa ` una delle ragioni per cui i virus sono molto pi` difficili da fare con Linux: non essendo possibile ad e u un utente normale modificare i file di sistema.5: Schema dei bit dei permessi mantenuti nell’inode.4.4: Legenda dei permessi dell’output di ls. che quando esegue un programma lo fa con i permessi dell’utente che lo ha lanciato. 1. 63 .2 sono i permessi standard applicati ai file. Ciascun permesso in realt` corrisponde ad un bit in una apposita parola a mantenuta nell’inode (vedi sez. 1. vedi sez. gli altri tre vengono rispettivamente chiamati. disattivati. IL CONTROLLO DEGLI ACCESSI 43 Figura 1. 65 nel caso si cerchi di attivarli per uno script essi vengono comunque. Per i file normali tutti questi permessi hanno significato64 solo al caso di programmi eseguibili. Questo ad esempio ` il modo in cui funziona il e comando passwd.2.1.4) per allargarli o restringerli (ad esempio i file della posta elettronica normalmente non hanno il permesso di lettura). Per poter fare questo occorre comunque l’accesso in scrittura al file della password (propriet` di a root) che viene garantito con l’uso del suid bit. sgid bit e sticky bit. ma se usato da un utente normale consente si di modificare la password.

si e potr` leggere il contenuto di una directory.2. pur non potendone mostrare il contenuto. in cui tutti possono scrivere ma in cui. Ha assunto per`.5. serviva nelle prime versioni di e Unix. ma gli stessi permessi possono essere anche applicati ad una directory68 nel qual caso essi vengono ad assumere un significato diverso. Il che comporta che per cancellare un file tutto quello che serve ` il permesso di scrittura sulla directory che lo contiene. Questo permette al gruppo proprietario della directory e di mantenere automaticamente la propriet` dei file in essa creati. Questa ` un’altra caratteristica. a partire dalla meno significativa.67 Finora abbiamo parlato di permessi applicati ai file normali. ed indica che la directory pu` essere o attraversata nella risoluzione del nome di un file. che come per i precedenti diventa una T qualora il corrispondente permesso di esecuzione non sia attivo. una notazione comune ` quella di indicarli direte tamente con il valore numerico di questa parola espressa in notazione ottale. corrispondenti ai valori gi` mostrati in fig. non ` immediato capire e cosa possa significare il permesso di esecuzione. a Si noti come a differenza di altri sistemi operativi (ad esempio il VMS) non esista un permesso specifico per cancellare un file. u o La situazione completa dei bit associati ai permessi ` illustrata in fig. Se cio` manca il permesso di esecuzione. In particolare se il suid bit o lo sgid bit sono attivi verr` rispettivamente mostrata una s66 nel permesso di esecuzione per utente e gruppo. Questo infatti viene ad assumere un ruolo particolare.5. 68 ed in generale a tutti gli altri file speciali presenti sul filesystem: hanno un significato speciale per` solo per o le directory.44 CAPITOLO 1. derivata dall’architettura dei e file illustrata in sez.5. come accennato in precedenza. e per il proprietario. per fifo e file di dispositivo contano solo i permessi di lettura e scrittura. ma non si potr` pi` accedere a quello delle eventuali a a u sottodirectory. Se infatti ` immediato dare un senso al leggere una directory (per mostrare i file che e vi sono elencati).2. come vedremo a breve. 67 66 . un significato speciale per le directory. a privilegiare l’uso della swap mantenendovi permanentemente i programmi usati pi` di frequente. 1. Infine per le directory l’uso dello sgid bit viene utilizzato per far s` che i nuovi file creati in ı una di esse abbiano come gruppo proprietario non quello del processo che li ha creati. e Inoltre. 1. Lo a sticky bit invece modifica la lettera che indica il permesso di esecuzione per tutti in una t.4. ma quello che ` proprietario della directory stessa. Per cui i permessi di fig. Data corrispone denza diretta con il contenuto dell’inode. dato che sarebbe intuitivo associare la cancellazione di un file al suo permesso di scrittura. solo gli utenti proprietari di un file potranno cancellarlo. i permessi speciali non hanno a disposizione una posizione a parte nell’output di ls. quando memoria e disco erano risorse molto scarse e gli algoritmi per la memoria virtuale poco raffinati. Volendo specificare uno dei permessi speciali occorrer` ovviamente usare anche una quarta cifra. mentre per i link simbolici essi vengono ignorati. ma quando attivati cambiano il valore della lettera associata al permesso di esecuzione. 1. si potr` a accedere ai file che essa contiene (purch´ se ne conosca il nome. lo sticky bit assume per le directory un significato particolare: se esso viene attivato pur in presenza di un permesso di scrittura per tutti. e e i permessi del file sono completamente ignorati. mentre nel caso opposto. gli utenti non possono cancellare i file creati dagli altri. ed considerato il fatto che i gruppi di permessi sono raggruppati naturalmente a gruppi di tre bit. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX Lo sticky bit ` al giorno d’oggi sostanzialmente inutilizzato. che spesso lascia perplesso chi si accosta le prime volte ad in sistema unix-like. dato che questa consiste solo nella rimozione di un riferimento dalla directory. cos` che ogni cifra ı corrisponde. 1. per il gruppo. ovviamente). per la presenza dello sticky bit. ai permessi per tutti gli altri. si a possono specificare direttamente con la cifra 640. 1. questo ` ad esempio la modalit` in cui viene e a protetta la directory /tmp. secondo lo specchietto di fig. Se per` ci si ricorda cosa significa in realt` la cancellazione di un file si capisce subito che in o a effetti i permessi di un file non contano niente. o una S qualora il corrispondente permesso di esecuzione non sia attivo. dato che ` questa che viene modificata. a Al contrario di quanto avviene con i permessi normali. o allo scriverla (per aggiungere nuovi file e directory).

mentre le nuove directory saranno create con permessi 755 (di nuovo tutti i permessi per il proprietario ma solo lettura e attraversamento per il gruppo e gli altri). Il comportamento u a di default dei programmi infatti sarebbe quello di creare i nuovi file con i permessi di lettura e scrittura attivati per tutti dove con tutti qui si vuole intende sia il proprietario. Se invocato senza parametri il comando permette di visualizzare il valore corrente. Dato che il valore viene ereditato nella creazione dei processi figli ` sufficiente farlo all’inizio e perch´ quanto scelto sia mantenuto anche in seguito. una propriet` specifica. o si tenga presente che questo ` un comando interno della shell (vedremo il significato di ci` in sez.5. esaminando con qualche dettaglio in pi` sulle modalit` con cui nuovi file e directory vengono creati.3). Per questo motivo il kernel mantiene anche. come nel caso o precedente. Il comando che permette di modificare direttamente i permessi di file e directory ` chmod. Di norma un utente personalizza e questo valore negli script di avvio della shell (vedi sez. Inoltre per gruppo e proprietario si pu` usare s per impostare i corrispondenti sgid e suid. Un utente pu` comunque modificare il e o valore di questo parametro invocando il comando umask specificando come argomento un nuovo valore69 con qualcosa del tipo: umask 027 Il valore dell’argomento di umask pu` essere specificato sia in forma numerica.1. 2. si sarebbe dovuta usare una umask di 027. esso pu` essere u per indicare o il proprietario (user ). g per indicare il gruppo (group) e o per indicare gli altri (others).4 La gestione dei permessi dei file Inizieremo a trattare il problema della gestione dei permessi dei file. Se ad esempio si fosse voluto cancellare tutti i permessi per gli altri. in tal caso essi possono essere espressi nella forma: [gruppo][operatore][permesso] Il gruppo specifica a quale gruppo di permessi si fa riferimento. r per la lettura read e x per l’esecuzione execute. che il gruppo. nella creazione di un nuovo file o directory. pi` il u valore a che indica tutti quanti (da all ). Per le directory invece e viene attivato anche il permesso di esecuzione.4. a cancellare dai permessi ad esso assegnati tutti i bit in essa specificati.4. Quest’ultimo pu` o essere w per la scrittura (write). 1.1. dato e o che l’invocazione di un altro programma non servirebbe a nulla.2. chiamata umask. 1. in quanto la system call che esegue l’operazione opera solo sul processo corrente. che viene ereditata nella creazione di un processo figlio.6). u u L’operatore indica il tipo di modifica che si vuole effettuare.1. mentre con t si o pu` impostare lo sticky.per toglierlo. 69 . e con l’opzione -S si stampa il valore in forma simbolica anzich´ numerica. nella stessa forma mostrata in fig. che tutti gli altri. che in forma simbolica. si possono specificare pi` gruppi usando pi` lettere. per ogni processo. I permessi possono anche essere espressi in forma simbolica. . usando le lettere elencate in sez. nel qual caso si deve specificare quali permessi conservare. che serve. e pu` essere + per aggiungere o un permesso. 2. per cui il valore corrispondente sarebbe 777. IL CONTROLLO DEGLI ACCESSI 45 1. Allora se un processo ha una umask di 022 (il valore di default) significa che il permesso di scrittura per il gruppo e tutti gli altri saranno automaticamente cancellati alla creazione di un nuovo file o directory. e = per impostarlo esattamente al valore fornito. Questo vuol dire che i nuovi file saranno creati con permessi 644 (tutti i permessi per il proprietario e sola lettura per il gruppo e gli altri).4. Ovviamente lasciare aperti i permessi di scrittura a chiunque non ` cosa molto saggia dal e punto di vista della sicurezza. a La umask specifica una maschera di bit. In genere la umask viene impostata negli script eseguiti al login grazie al comando umask. cio` un permesso numerico in forma ottale di 666. e Nella sua forma pi` elementare esso prende come parametri il valore (espresso in forma numerica u ottale) dei permessi seguito dal nome (o dalla lista) del file.

e pu` essere “p” o per indicare una fifo. Si possono anche combinare pi` u espressioni scrivendole di fila separate da virgole. g+w aggiunge il permesso di scrittura al gruppo e u+s attiva il suid bit. 1. cosa che un utente pu` fare e a o solo con i processi che appartengono a lui. Le opzioni sono simili a quelle di chmod.group che permette di cambiare anche il gruppo. Solo l’amministratore pu` attivare e disattivare interfacce. ed assegnarli soltanto ad o altri gruppi cui egli stesso appartiene. esegue la modifica dei permessi ricorsivamente per tutto il tratto di albero dei file contenuto nella stessa. il primo cambia il proprietario ed il secondo il gruppo. di posta o un DNS. come gi` visto in sez. Si tenga presente che un utente pu` cambiare i permessi solo dei file che gli appartengono. “b” per indicare un dispositivo a blocchi e “c” per indicare un dispositivo 70 questa ` una caratteristica di sicurezza usata anche da BSD.2. Solo l’amministratore ha la capacit` piena di cambiare a proprietario e gruppo di un file qualunque. restrizione che non vale (come tutte le altre) per l’amministratore che pu` inviare segnali a qualunque processo. il permesso di scrittura non basta. ed in particolare -R esegue dei cambiamenti ricorsivamente su tutto il contenuto di una directory e --reference usa i valori di un altro file. e e . Entrambi prendono come primo argomento l’utente (o il gruppo per chgrp) da assegnare. Per la descrizione completa del comando e di tutte le opzioni al solito si faccia riferimento alla pagina di manuale accessibile con man chmod. Inoltre quando si usa il e programma con un link simbolico verranno cambiati i permessi del programma referenziato dal link e varranno le credenziali (utente e gruppo) di quest’ultimo. o Altre operazioni privilegiate sono quelle che riguardano la rete (che tratteremo a partire da cap. e si disabilita la lettura per tutti gli altri.5 Altre operazioni privilegiate Oltre all’accesso ai file esistono altre operazioni che devono sottostare al controllo di accesso. o deve cio` esserne proprietario. presente che su Linux o e pu` soltanto cambiare solo il gruppo dei file che gli appartengono. a e anche se ` possibile delegare in parte la possibilit` di eseguire questa operazione agli utenti. si tenga e 70 un utente normale non pu` assegnare ad un altro utente i suoi file. che indica il tipo di file speciale. Inoltre chown supporta per il nome utente anche la sintassi username. e cio` solo root pu` usare il comando mknod per creare un file di dispositivo.46 CAPITOLO 1.4. All’amministratore inoltre ` riservato l’allocazione delle prime 1024 porte usate dai protocolli UDP e TCP. per e cui di norma soltanto lui ` in grado di lanciare demoni che usano una di queste porte (dette per e questo riservate) come un server web. La versione GNU/Linux del comando supporta anche l’opzione --reference=FILE che permette di prendere i permessi di un altro file. quando lo si applica ad una directory. cos` ad esempio con g+w. Per questo si usano rispettivamente i due comandi chown e chgrp. Il comando supporta anche l’uso dell’opzione -R che. modificare la tabella di o instradamento dei pacchetti. applicare o rimuovere regole al sistema di firewall. ma che non ` detto sia presente su tutti gli Unix. 7). Un’altra operazione riservata. Questo prende come e o parametri il nome del file seguito da una lettera. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX Cos` ad esempio a+x aggiunge il permesso di esecuzione per tutti (cosa di solito necessaria ı quando si scrive uno script). Ma e a l’esecuzione generica del comando mount con parametri qualunque pu` essere effettuata soltanto o dall’amministratore. Oltre ai permessi pu` essere necessario anche cambiare proprietario e gruppo di un file (o o di una directory). mentre o-r toglie il permesso di lettura per gli altri.4.o-r si abilita la ı scrittura per il gruppo. Ovviamente assegnare utente e gruppo ad un file ` una operazione privilegiata. Infine soltanto l’amministratore ` in grado di creare i file speciali relativi ai dispositivi. ` il montaggio dei filesystem. 1. seguito dalla lista dei file su cui operare. Una di queste ` la possibilit` di inviare segnali ad un processo.

3.appendici. 73 come per tutte le altre propriet` di un file. Si tenga presente per` che per un utente ` comunque possibile creare una fifo usando il o e comando dedicato mkfifo. 71 questi due numeri sono il meccanismo con cui storicamente vengono identificati i dispositivi all’interno del kernel (cosi come gli inode identificano un file). Pertanto se si ` e e stati poco accorti e si ` permesso agli utenti l’accesso in scrittura a /dev/hda. . -a e e -d che hanno lo stesso significato visto in tab.tex ----------------.advadmin. che prende come argomento il nome della stessa. Qualora si crei un file di dispositivo (che sia a blocchi o a caratteri ` lo stesso) e devono poi essere specificati di seguito il major number ed il minor number 71 che lo identificano univocamente.struttura. come ext3 e reiserfs.tex ----------------. Infine alcuni filesystem supportano delle operazioni speciali. Il comando stampa a video l’elenco dei file.txt distribuito con i sorgenti del kernel nella directory Documentation. potrebbe essere qualunque e (anche se poi molti script non funzionerebbero).config. che possono essere attivata o meno a per ciascun file.netbase.tex ----------------.tex ----------------. pertanto se lo eseguiamo sui file di queste dispense otterremo qualcosa del tipo: [piccardi@gont corso]$ lsattr *. anche la lista degli attributi attivi viene mantenuta all’interno a dell’inode. potranno comunque scriverci sopra ed ad esempio saranno tranquillamente in grado di ripartizionare il disco.shell. per visualizzarli esiste un comando apposito. il nome sotto /dev ` solo una etichetta. preceduto dal relativo valore degli attributi speciali. attraverso quelli che vengono chiamati gli attributi.ordadmin.netadmin.tex ----------------.tex ----------------. IL CONTROLLO DEGLI ACCESSI 47 a caratteri.73 Alcuni di questi attributi (in particolare quelli che permettono di imporre delle speciali restrizioni all’accesso) possono essere impostati soltanto dall’amministratore. ma sono supportate anche dagli altri i filesystem pi` comuni u usati con Linux. che non rientrano nella normale gestione dei file.1.16) al posto del carattere “-”.tex che ci mostra come nessun attributo speciale sia stato impostato.tex ----------------.tex ----------------. Questi sono una serie di capacit` aggiuntive. 75 questo ` il caso normale. 74 queste estensioni sono state introdotte con ext2. che per l’uso delle opzioni -R. quello che indica al kernel quale dispositivo usare quando si accede a quel file sono questi due numeri.tex ----------------. gli attributi speciali infatti vannno impostati esplicitamente.tex ----------------. 1.tex ----------------.tex ----------------.75 Quando uno di essi ` attivo e questo viene indicato nell’elenco dalla presenza della lettera che lo identifica (vedi tab. questo ` il e motivo per cui si ` scelto di trattare questo argomento in questa sezione.corso.ringraziamenti. 72 per una lista completa delle corrispondenze di questi numeri con i vari dispositivi si pu` fare riferimento al o file devices. fornite dai filesystem che le supportano. e Facendo riferimento ad estensioni che non ` detto siano presenti su tutti i filesystem74 gli e attributi dei file non possono essere visualizzati con il comando ls. lsaddr. Il comando ` analogo a ls sia per l’uso degli argomenti. Il comando supporta anche l’opzione -m che permette di specificare la maschera dei permessi (con la stessa sintassi di chmod) da applicare alla stessa. i file vengono sempre e creati senza che nessuno di essi sia presente. anche se questi non e possono creare un file di dispositivo.72 Si noti che creare un file di dispositivo ` una azione diversa dall’accedere al dispositivo e sottostante.4. cosa che invece ` regolata dai permessi di quest’ultimo (come file). 1.netinter.stradmin.

o richiede che quando un file viene cancellato tutti i blocchi che contenevano i suoi dati siano riscritti su disco azzerandone il contenuto. attiva il cosiddetto immutable flag. proprietario.3) da eventuali o modifiche accidentali o meno. o 78 in sostanza. segnala un errore nella compressione quando questa ` stata attivata. che potrebbe pertanto essere riletto. il file non pu` essere cancellao to o rinominato.3).48 CAPITOLO 1. 80 in genere i file di log sono la prima cosa che un intruso cerca di modificare. ecc. mentre se si a vuole cancellare un attributo gi` impostato si dovr` usare il carattere “-”. 4. Solo o l’amministratore pu` attivare o disattivare questo attributo.16: Gli attributi speciali dei file. ciascun attributo ` identificato da una lettera. e l’attributo pu` essere solo letto da lsattr. Solo l’amministratore pu` attivare o disattivare questo attributo.) non possono essere modificate. per i quali si rimanda alla lettura della pagina di manuale di chattr. per una trattazione di e e questo argomento si pu` consultare il cap. l’attributo pu` essere solo letto a o da lsattr. 78 di default infatti il kernel si limita a marcare i blocchi come liberi. o Tabella 1. 3. esclude il file dalla registrazione dei dati necessari ad eseguire il backup con dump (vedi sez. e Attributo A a Significato blocca l’aggiornamento del tempo di ultimo accesso.78 richiede che il contenuto del file sia salvato su disco in maniera sincrona.3).77 richiede che tutti i contenuti del file siano prima scritti sul giornale (tratteremo il journalling dei filesystem in sez. questo pu` essere utilizzato per salvaguardare i file di log (vedi sez. 1. ma non cancella il precedente contenuto. richiede che il contenuto della directory sia salvato su disco in maniera sincrona. 6 di [1]. Il comando supporta anche l’opzione -R per eseguire ricorsivamente le operazioni quando nella lista dei file si ` inclusa una directory. ad esempio con “a” si attiva l’append flag che consente soltanto di aggiungere dati ad un file mentre il contenuto corrente non pu` essere o modificato. questo prende come prie mo argomento una stringa che identifica quali attributi attivare o disattivare.3.76 che consente la scrittura solo in coda al file. non si possono creare hard link n´ modificarne il e contenuto.16. e l’attributo pu` essere solo letto da lsattr. attiva il cosiddetto append flag. o attiva la compressione trasparente del contenuto del file.2. o segnala che una directory viene indicizzata con gli hash tree (una funzionalit` avanzata trattata in sez. pertanto anche tutte le altre caratteristiche del file (permessi.4). c D d E I i j s S u X Z La stringa che permette di specificare quali attributi attivare o disattivare ` analoga a quella e usata con chmod per i permessi. oltre ad impedirne la rimozione dalla directory in cui di trova ` impossibile modificare sia il e contenuto del file che dell’inode.79 per attivare un attributo occorrer` farla precedere dal carattere “+”. permettono di o utilizzare delle speciali restrizioni di accesso. 79 non si sono menzionati nella tabella alcuni attributi sperimentali. il contenuto corrente non pu` essere modificato. e come argomenti successivi una lista di file. richiede che alla cancellazione il contenuto del file sia salvato in modo da poterne consentire il recupero.2. 5. come per chmod si a a possono specificare insieme anche pi` attributi. permette di accedere direttamente al contenuto di un file compresso disabilitando la decompressione trasparente. che solo l’amministratore pu` impostare. indica che un file compresso ` in uno stato inconsistente (dirty). L’ARCHITETTURA DI UN SISTEMA GNU/LINUX Il comando che permette di impostare gli attributi speciali ` chattr.80 ` cio` possibile aprire un file in scrittura soltato se lo si fa nel cosiddetto append mode. riportata in e tab. con la presenza di questo attributo 78 . 5. u Come accennato alcuni attributi.1.

Potremo allora attivare alcuni di questi attributi (ad esempio l’append flag per un file di log. E si noti questo vale anche ee per le operazioni richieste dall’amministratore stesso. bench´ nelle operazioni ordinarie questo sia e sempre possibile se si hanno i privilegi di amministratore. esistono delle modalit` operative (dette capabilities) in a cui ` possibile cedere questa capacit` e rendere pertanto impossibile una successiva rimozione dell’attributo./var/log/auth.log [root@gont corso]# chattr +i /etc/fstab e potremo controllare lo stato degli attributi ottenendo che: [root@gont corso]# lsattr /var/log/auth. e a .log /etc/fstab -----a----------. un file immutabile potr` essere cancellato o a modificato soltanto se prima ne viene rimosso il relativo attributo. o l’immutable flag per /etc/fstab). IL CONTROLLO DEGLI ACCESSI 49 Un altro attributo che permette di attivare una protezione speciale ` “i”che abilita l’immutable e flag che finch´ ` attivo impedisce qualunque tipo di modifica al file.1. Di nuovo questa funzionalit` a permette di proteggere file essenziali in modo da impedirne ogni forma di modifica. questo gli viene impedito fintanto che l’attributo non viene rimosso.4./etc/fstab a questo punto si potr` anche verificare che non ` pi` possibile modificare /etc/fstab: a e u [root@gont corso]# touch /etc/fstab touch: cannot touch ‘/etc/fstab’: Permission denied nonostante il comando sia stato eseguito con privilegi di amministratore. in questo caso baster` eseguire i comandi: a [root@gont corso]# chattr +a /var/log/auth.log ----i-----------.

50 CAPITOLO 1. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX .

2. ne a faremo una trattazione sistematica fra breve. con in testa un criterio fondamentale: che ciascun programma facesse una sola cosa. Arnold Robbins spiega molto chiaramente questa filosofia in un articolo riportato anche nella pagina info (vedi sez. Questa ` la caratteristica fondamentale dei programmi base di un sistema unix-like come e GNU/Linux. mantenere e soprattutto estendere. l’interfaccia a riga u di comando resta di fondamentale importanza. e un carpentiere non costruisce una casa con un coltellino svizzero.1) del pacchetto dei coreutils GNU.Capitolo 2 La shell e i comandi 2. Per` ` molto difficile vedere un professionista usare il coltellino svizzero per il suo lavoro. che riprenderemo da quell’articolo. man mostra le pagine di manuale. 1. Per cui anche se oggi sono disponibili delle interfacce grafiche del tutto analoghe a quelle presenti in altri sistemi operativi nati in tempi pi` recenti. cavatappi. cacciavite. ps la lista dei processi. 1 51 . Le persone che han progettato l’interfaccia a riga di comando erano appunto dei professionisti. Ogni comando1 ` progettato per eseguire un compito preciso: ls mostra la lista e dei file. ben prima della nascita delle interfacce grafiche. la hanno resa la pi` potente e flessibile interfaccia u utente disponibile. Per cui da professionisti pensarono ai programmi come a degli attrezzi. e piuttosto che il coltellino svizzero realizzarono l’equivalente della cassetta degli attrezzi (la “Unix toolbox ”). forbici. chmod cambia i permessi. quando l’unico modo di interagire con il computer era attraverso dei terminali. anche le caratteristiche dell’interfaccia a riga di comando derivano da alcune scelte progettuali precise. dato che 30 anni di storia e migliaia di persone che ci han lavorato sopra per migliorarla.1 L’interfaccia a linea di comando. ma con tanti attrezzi ciascuno dei quali ` specializzato nello svolgere un e compito specifico. in pratica questo sarebbe stato difficile da scrivere. I comandi hanno uno scopo preciso e precise funzionalit`. Molte persone utilizzano un coltellino svizzero. le opzioni sono limitate a ne abbiamo incontrati gi` diversi nel corso della trattazione delle caratteristiche del sistema in cap. seghetto. cp copia un file.1 La filosofia progettuale Come per il sistema. In sostanza la filosofia progettuale della shell e dei comandi a riga di comando si pu` capire o facendo ricorso ad una analogia. che deve conoscere solo quello. Un oe professionista ha bisogno di attrezzi professionali. I sistemi Unix nascono negli anni ’70. ecc. 2. dato che questo permette di avere in solo oggetto un discreto insieme di attrezzi diversi: coltello. se non addirittura delle semplici telescriventi. nel miglior modo possibile. che sapevano bene che anche se fare un programma unico per tutti i compiti poteva essere attraente per l’utente finale.1.3.

chiamata cos` dal ı nome del suo creatore. nomi di file e qualunque altra cosa. si pu` costruire l’equivalente di e o una catena di montaggio.2. u Ciascuno di questi due filoni ha dato vita a varie versioni con funzionalit` pi` o meno a u avanzate. 1.3.4. come accennato a e in sez. Questo aveva il grande vantaggio. 1. e chiamata per questo C shell. in ogni caso. una volta completata la procedura di autenticazione. Anche in questo caso ci sono stati due filoni di sviluppo.1. Oggi con le interfacce grafiche si hanno molte e altre modalit` di accesso ad un terminale (ad esempio attraverso una finestra che contiene un a terminale virtuale). una volta predisposta l’opportuna interfaccia di accesso.2 Le principali shell La modalit` tradizionale con cui si utilizza l’interfaccia a riga di comando `. come il controllo di sessione visto in sez. Il e suo nome ` un gioco di parole sul nome della Bourne shell. pi` simile a quella del linguaggio C. Sugli altri sistemi che rispettano lo standard POSIX.1. in cui il risultato di un comando viene inviato al successivo. La bash ` la shell di riferimento del progetto GNU. Questo significa semplicemente che il programma login conclude il suo compito lanciando la shell assegnata all’utente (che come vedremo in sez. La Bourne shell ` la shell pi` antica e le sue funzionalit` sono anche state e u a standardizzate dallo standard POSIX. e sono descritte dettagliatamente nella relativa pagina di manuale. con una opportuna combinazione. In GNU/Linux ` sostituita da bash2 u e o da ash.4 quando un utente. Incorpora molte funzionalit` avanzate. – La Bourne-Again SHell. Viene utilizzata con il comando bash. Inoltre ` sempre la e e shell che permette di usufruire di tutta una serie di ulteriori funzionalit` messe a disposizione a dal kernel. ` attraverso di essa che. date le opportune che quando viene invocata come sh fornisce esclusivamente le funzionalit` previste dallo standard POSIX. Si ricordi comunque che per il kernel. – La Bourne shell. Questo ` il ruolo della shell. 2. riuscendo a compiere compiti complessi con grande velocit` e flessibilit`. inizia una sessione di lavoro su un terminale. a come la storia dei comandi (detta history). La prima shell di Unix. e o ed in effetti nel tempo sono state realizzate diverse shell. un breve elenco delle varie shell disponibili anche su GNU/Linux ` il seguente: e • Bourne shell e derivate. in genere utilizzata semplicemente con il comando sh. Non viene praticamente pi` usata. concatenando vari comandi. o che ` quello di fornire l’interfaccia che permette di lanciare altri programmi. e spesso fare anche cose che gli a a autori dei singoli programmi neanche si sarebbero immaginati. Il passo successivo fu quello di costruire anche un meccanismo che permettesse di combinare insieme i vari programmi. essa pu` essere realizzata in diversi modi. secondo la filosofia fondamentale di Unix illustrata in sez. il primo deriva dalla prima shell creata. la shell resta un programma come tutti gli altri. di non dover attendere che l’autore dello stesso si decidesse a programmare la funzione in pi` che serviva e che non era stata prevista u all’inizio.52 CAPITOLO 2. cio` del programma che implementa l’interfaccia a riga di e e comando. l’auto-completamento dell’input sulla linea di comando (per comandi. la Bourne shell.3.3 ` specificata dall’ultimo campo di /etc/passwd). a disabilitando le varie estensioni di cui ` dotata. ` di norma sostituita e da ksh. 4.2. cosicch´ divenisse possibile eseguire. e anche dei compiti che nessuno di essi era in grado di fare da solo. realizzata con una sintassi alternativa. essa ha per` un compito fondamentale. rispetto all’approccio del programma universale. verr` a comunque lanciata una shell. in sostanza una shell e rinata. 1.1.3. LA SHELL E I COMANDI e comunque specifiche allo scopo del comando. e 2 . Il secondo filone deriva da un’altra shell. Dato che la shell ` un programma come gli altri.

– La ash. Qui parleremo per` solo di bash.3 Introduzione alla sintassi della riga di comando Come accennato lo scopo della shell ` quello di implementare l’interfaccia a riga di comando. e Viene usata spesso nei dischetti di installazione o recupero. e probabilmente e ` anche la pi` potente e flessibile fra quelle disponibili. L’unico motivo per volerne usare un e u altra infatti ` solo perch´ siete maggiormente pratici con quella. e cio` mettere a disposizione dell’utente un meccanismo con cui questi possa essere in grado di e mettere in esecuzione i vari programmi che vuole utilizzare. Viene utilizzata con il comando tcsh. La forma generica di un qualunque comando ` nella forma: e comando 3 -o ption argomento1 --altra-opzione argomento2 --riopzione=valore sul mio sistema conta la bellezza di 5266 righe. Ha il grosso difetto che gran parte delle funzionalit` avanzate non vengono attivate di a default. e – La Korn Shell La Korn shell (dal nome dell’autore) ` stata la prima ad introdurre e la history (l’accesso ai comandi precedenti) e l’editing della linea di comando. ed ha poche funzioni (ma ` conforme allo standard POSIX. ed in effetti pi` che una pagina ` un manuale! u e . nel qual caso probabilmente e e non avete bisogno di leggere questo capitolo. si vocifera sia anche in grado di fare il caff`). Offre praticamente le stesse funzioni della Korn shell. Si trova su vari a Unix proprietari. riconoscere qual ` il programma che e e volete mettere in esecuzione.3 Per questo in seguito faremo riferimento. Probabilmente questa ` la pi` lunga fra tutte le pagine di e u manuale.2. Utilizza una sintassi analoga a quella del linguaggio C. realizzata in poche decine di kilobye di codice sorgente. Per le funzionalit` pi` avanzate esiste anche un ottimo manuale libero [2]. la scelta e della shell ` spesso una questione strettamente personale. 53 estensioni). e Dato che ` il principale strumento di lavoro di un amministratore professionista. e o che ` la shell utilizzata in praticamente tutte le distribuzioni di GNU/Linux.1. ed altre funzionalit` avanzate.1.2). Un’altra shell avanzata. u e accessibile al solito con man bash. o • C shell e derivate. alle varie sezioni in cui essa ` divisa. Ha molti comandi integrati. Viene utilizzata con il comando ash. alla quale aggiunge history e editing di linea e varie funzionalit` avanzate. come a il completamento di comandi. occupa poca RAM e poco spazio disco. che per` trovate anche nella bash. Il riferimento pi` immediato per il funzionamento della bash ` la sua pagina di manuale. Pertanto il compito principale della shell ` quello di leggere una riga di comando dalla tastiera. Viene utilizzata con il comando zsh. L’INTERFACCIA A LINEA DI COMANDO. ` per` utile conoscerne l’esistenza dato che ` facile e o e trovarla su altri Unix. pu` essere utile per sistemi o dove si fa un grosso uso di script perch´ ` pi` veloce di bash. costrutti di programmazione complessi e molto altro (praticamente di tutto. editing di linea. e ` – La tcsh. per cui occorre un ulteriore lavoro di configurazione per utilizzarla al meglio. e poi eseguirlo. Viene utilizzata con il comando csh. – La C shell. ee u – La Z shell. pur essendo disponibile. 2. E una evoluzione della C shell. Viene utilizzata con il comando ksh. In GNU/Linux non ` disponibile essendo sostituita da tcsh. ricostruire i vari argomenti da passare al programma stesso. ma ` poco diffusa su GNU/Linux. Una shell minimale. quando necessario. Non viene usata su GNU/Linux dato che bash ne ha tutte le caratteristiche. tradotto e a u pure in italiano. file e argomenti.

e allora viene introdotta da un “--”.3. e di specificare questi in un ordine a qualunque. per alcune va specificata solo la lettera dell’opzione). o da un argomento/opzione al successivo. la capacit` di passare al programma.7 Questo comporta. mostrato appunto nell’esempio precedente. anche il carattere di a capo viene considerato come uno spazio vuoto. la scansione autoa matica delle stesse indipendentemente dall’ordine in cui le si specificano. 5 qualora si vada a capo su una nuova riga con l’uso della “\” illustrato nella nota precedente. la possibilit` di identificare opzioni con a parametri o senza. Per questo il nome di un comando non pu` contenere spazi. qualora essa necessiti di un 4 il terminale in genere va a capo da solo o fa scorrere la riga se lo spazio disponibile sullo schermo finisce. la GNU C library di fig. 1.3 di [1]. e le opzioni vanno specificate prima degli argomenti). Si tenga presente per` che questo non ` sempre vero. la presenza a di un formato della riga di comando abbastanza uniforme. Si pu` inoltre dire a o alla shell di utilizzare come separatore caratteri diversi dagli spazi vuoti. 6 per i curiosi questo argomento ` trattato nei dettagli nella sezione 2. e permette l’uso di una sintassi standard per le opzioni. per i programmi che usano queste funzionalit`. con la possibilit` di distinguere fra opzioni e argomenti. LA SHELL E I COMANDI da scrivere sulla stessa riga4 e terminare con la pressione del tasto di invio. seguito da opzioni ed argomenti. Si tenga presente che la shell. Questa scansione viene eseguita su tutta la riga. una volta terminata la scansione della lista di stringhe a ottenuta dalla shell. si pu` per` scrivere un comando su pi` righe utilizzando il carattere “\” per proteggere la pressione del tasto di o o u invio (che altrimenti passerebbe la linea di comando alla shell) e andare su una nuova riga senza che la linea di comando venga ad essere interrotta. i soli caratteri non alfabetici utilizzati (molto poco) sono il “-” o il “_” e ed eventualmente i numeri.1. vengono interpretati dalla shell assumendo significati speciali. utilizzando gli spazi vuoti come separatori e senza distinguere fra nome del comando. cui pu` seguire (seo parato o meno da uno spazio) un eventuale valore passato come parametro (non tutte le opzioni lo prevedono. indicando quelli da usare con la variabile (tratteremo le variabili di shell pi` avanti) IFS. gli altri infatti. e poi spezzare l’intera riga in una lista di stringhe che verranno passate al suddetto programma come argomenti iniziali. che poi programma dovr` utilizzare al suo interno. . In realt` il meccanismo ` un po’ pi` complesso. La differenza fra opzioni e argomenti ` che le prime attivano funzionalit` o modalit` di e a a operazione specifiche del comando.6 quello che in effetti fa la shell ` e identificare il programma da usare sulla base del nome del comando. in uso principalmente con i programmi del progetto GNU che utilizzano le funzionalit` citate e anch’essa mostrata nell’esempio precedente.54 CAPITOLO 2. Una forma alternativa per le opzioni. dato che non tutti i programmi o e fanno ricorso a queste funzionalit`.2 di [1]. ` quella in cui l’opzione ` scritta in a e e forma estesa. per identificare il comando e separarlo da opzioni e argomenti (e separare questi ultimi fra di loro) usa caratteri vuoti come lo spazio o il tabulatore. 2. opzioni e argomenti. per una trattazione pi` dettagliata si pu` fare u o riferimento alla sez. in questo caso. La sintassi prevede cio` che si scriva sempre all’inizio della riga (eventuali spazi antistanti e verranno comunque ignorati) il nome del comando da eseguire. come vedremo fra breve. inoltre ` la stragrande maggioo e ranza dei comandi usa nomi scritti esclusivamente in lettere minuscole (si ricordi che un sistema unix-like ` case-sensitive). u Gran parte dei programmi per gestire gli argomenti e le opzioni passate dalla linea di comando utilizzano una serie di funzioni fornite dalla libreria di fondamentale del sistema. tutto il contenuto sar` suddiviso a in una lista di stringhe. per cui troveremo anche in seguito svariate eccezioni (ad a esempio in cui l’ordine conta. mentre i secondi indicano gli oggetti (solitamente dei file) su cui questo opera. e pertanto di nuovo non possono essere inseriti nel nome del comando. solo quelle contenenti gli argomenti restanti. e 7 la funzionalit` si chiama getopt. Nel comportamento comune comunque le opzioni sono sempre costituite da un carattere “-” seguito da una lettera (in rari casi anche numeri o caratteri non alfabetici). La presenza cio` di uno (o pi`) spazi o tabulatori5 dice che si sta passando dal nome del comando ad un e u argomento o opzione. e pu` essere compreso a e u o nei dettagli solo con un po’ di nozioni di programmazione.

lampeggia il cursore e che serve ad avvisarvi che la shell ` in attesa di ricevere dei comandi da eseguire. cos` -f verr` identificata come opzione mentre.9 e (tratteremo delle variabili di shell poco pi` avanti) nel cui contenuto. oltre ai normali caratteri che u saranno stampati inalterati. ad esempio gzip. e che il caso pi` comune sia quello appena illustrato in u cui la shell interpreta la riga di comando per lanciare il programma che le avete chiesto. come in realt` sulla linea di comando si possano a a effettuare anche altre operazioni. esistono alcune funzionalit` che essa vi fornisce direttamente tramite alcuni comandi interni (detti anche a built-in). ed oltre PS1 ci sono anche PS2.8 le restanti invece verranno analizzate dal programma. gi` l’esempio precedente con rm ci mostra come a la shell esegua di per s´ anche molti altri compiti. 2. Si tenga conto poi che bench´ la filosofia di Unix sia quella di utilizzare un apposito comando e per effettuare ciascun compito specifico. che serve a modificare e la directory di lavoro corrente della shell. che nel caso indicano i file da cancellare.1) che verranno automaticamente espansi in un determinato valore alcuni programmi invece usano questa stringa per modificare il loro comportamento. o a impostare propriet` generali che essa deve trasmettere ai programmi che essa a lancia. a 9 in realt` in tutto le variabili che controllano l’aspetto del prompt sono 4. Un esempio classico di questi comandi interni ` cd. in questo caso la shell si accorger` che non ` necessario eseguire nessun programma a e a parte ed operer` direttamente sulla base di quanto dite sulla linea di comando. 2. ı a non necessitando questa di nessun parametro. quello in cui volete lanciare un comando scrivendo direttamente quest’ultimo con le relative opzioni ed argomenti. 2. Il primo che prenderemo in esame ` quello e e della visualizzazione del prompt.1).4. ad esempio quelli relativi e al controllo di sessione. li abbiamo gi` incontrati in sez. La prima stringa contiene il nome del programma e di norma viene ignorata. questo comando.1. pu` essere invocato anche come gunzip (in genere entrambi i comandi sono presenti come o hard link allo stesso file eseguibile) nel qual caso decomprimer` invece di comprimere. non pu` essere eseguito con un programma esterno.3. a u Infine occorre sottolineare che quanto appena detto illustra solo il caso pi` elementare della u sintassi usata dalla shell. 55 parametro. Alcuni di questi comandi interni.4 Funzionalit` interne della shell a Oltre a quello generico di lanciare programmi.2. 1.2. altri li vedremo pi` avanti. in cui introdurremo le altre funzionalit` della shell. pluto e paperino verranno considerati come argomenti. ma non quella della shell. a fianco della quale. Quello che viene stampato come prompt ` stabilito da una variabile di shell PS1. e come il suo utilizzo possa essere modificato attraverso l’uso di opportuni caratteri di controllo.1. o dato che nell’esecuzione quest’ultimo potrebbe solo cambiare la directory di lavoro corrente per s´ stesso. Di norma i a comandi interni sono quelli che servono a eseguire impostazioni relative al funzionamento stesso della shell. si possono inserire una serie di caratteri di controllo (i principali dei quali sono riportati in tab. dettagliare il loro scopo va oltre le possibilit` di questa introduzione. Cos` se per esempio scrivete sul vostro terminale una riga di comando contenente un qualcosa ı del tipo: piccardi@anarres:~$ rm -f pippo pluto paperino la shell capir` che volete invocare il comando rm ed individuer` il file che contiene il relativo proa a gramma su disco e lo lancer` passandogli l’intera riga. e pu` contenere diverse e o informazioni. il relativo valore deve essere assegnato con l’uso di un “=” (torneremo su questo in sez. pippo. 8 . Vedremo nel corso delle successive sezioni. ma la loro descrizione si trova nella a pagina di manuale. L’INTERFACCIA A LINEA DI COMANDO. spezzata nelle cinque stringhe delimitate a dagli spazi. quando non avete scritto nulla. nella sezione Shell Variables. cio` di quella scritta che compare sulla sinistra della linea di e comando. e Nel caso della bash il prompt ` completamente personalizzabile. PS3 a e PS4. un compressore di file.

mentre per cancellarne una definita in precedenza si pu` usare il comando11 unset seguito dal nome della variabile. ma in realt` ıe u a ` possibile usare qualunque tipo di lettera ed. per impostare una lunga serie di altre propriet` della shell. che usa un valore di [\u@\h \W]\$. ecc. e 10 .56 CAPITOLO 2. 11 anche questo. che prevede per PS1 un valore pari a \u@\h:\w\$. Per convenzione le variabili di shell si scrivono con lettere maiuscole. dovuta al fatto che cos` ` pi` difficile confonderle con i comandi. Opzione \d \H \u \w \W \$ \! \t \T Significato la data in formato tipo: Tue May 26. e e in questo caso la sintassi della riga di comando cambia e potrete utilizzare una assegnazione del tipo: VARIABILE=valore e si noti per` che in questo caso non ci sono pi` spazi a separare il nome della variabile dal o u suo valore. L’elenco delle variabili di shell gi` definite (vedremo in sez. ma ` appunto solo e una convenzione. utente. per l’elenco completo di quest’ultime si pu` a o fare riferimento alla sua descrizione nella sezione SHELL BUILTIN COMMANDS della pagina di manuale. La shell vi permette cio` di definire e modificare delle variabili. lo username dell’utente. LA SHELL E I COMANDI (come data. un # per l’amministratore. alla e sezione PROMPTING. stazione. e produce un prompt del tipo: [root@gont piccardi]# La scelta del prompt dipende dai gusti e dall’uso: se vi trovate a lavorare contemporaneamente con diversi utenti. come il precedente ` un comando interno interno alla shell. si tenga inoltre presente che questo comando viene anche usato. Come ripetuto pi` volte la vera funzione della shell ` quella di semplificarvi la vita. Una delle funzionalit` fondamentali u a ` quella delle variabili di shell. per u e questo al di l` dell’estetica del prompt. altrimenti potete farne a meno e risparmiare spazio sulla linea di comando con un valore di PS1 come “\$”. quando invocato con le opportune opzioni. in nome della stazione.1: Principali caratteri di controllo usati nella visualizzazione del prompt della shell. e che produce un prompt del tipo: piccardi@anarres:~/Truelite/documentazione/corso$ o quello di RedHat.1. anche e qualunque numero ed il carattere “_”. in realt` oltre alle variabili set stampa anche tutte le funzioni definite nella shell stessa. La modifica si effettua o semplicemente assegnando alla variabile il nuovo valore.6 come effettuarne l’impoa stazione al login o quando si lancia un terminale) si pu` ottenere con il comando set. e probabilmente riporterebbe un errore non trovando un programma corrispondente. il path completo della directory di lavoro. un $ per gli altri.). la posizione nella history del comando. L’elenco completo ` disponibile nella pagina di manuale. il tempo corrente in formato HH:MM:SS (12h). qualora infatti si mettessero degli spazi la shell interpreterebbe VARIABILE come il nome di un comando. allora vi sar` utile sapere con quale utente state a operando in un certo terminale. il tempo corrente in formato HH:MM:SS (24h). Due esempi possibili per il prompt sono quello usato da Debian. su computer diversi. eccezion fatta per l’iniziale del nome. essa fornisce una lunga serie di funzionalit` generiche a a che permettono di rendere pi` efficace l’uso dei comandi. il nome della directory di lavoro.10 che o ne stampa a video la lista coi relativi valori. Tabella 2. questo comporta che a in certi casi l’output pu` essere molto lungo ed essendo le variabili stampate per prime si rischia di non riuscire o a vederle. 2.

accessibile con man echo. potrete guardare il contenuto della directory con un comando del tipo: [piccardi@gont piccardi]$ ls -l $MAIL -rw-rw---1 piccardi mail 4136 Aug 25 17:30 /var/mail/piccardi in genere cio` potrete utilizzare qualunque variabile in una linea di comando referenziandola e anteponendo un “$” al suo nome. L’INTERFACCIA A LINEA DI COMANDO. che vengono presi direttamente da quanto scritto nella riga di comando con il meccanismo illustrato in sez. 2. cha abbiamo gi` incontrato). e Una delle altre funzionalit` che la shell fornisce con l’uso delle variabili. dato che sul terminale si avrebbe l’interferenza da parte del prompt. Questa ` utile e quando si vuole costruire una riga con pi` invocazioni e la si usa in genere all’interno di uno u script (accenneremo agli script in sez.13 Lo stesso risultato si pu` ottenere con l’uso del comando interno declare.1. e l’elenco completo ` descritto nella sezione Shell Variables della pagina di manuale. come avrebbe fatto per una qualunque altra stringa che potreste aver scritto direttamente sulla linea di comando. 13 la bash supporta anche la definizione della variabile nella stessa linea in cui viene esportata nell’ambiente. che evita e u e la stampa del carattere di a capo alla fine della stringa passata come argomento. la stamper` a video. dopo di che quest’ultima viene passata come argomento ad echo. altrettanto non accade per la visualizzazione della stessa. l’altra parte sono appunto le variabili di ambiente. La prima ` -n. a o 12 in sostanza quando un programma quando viene lanciato con la opportuna chiamata al sistema (l’argomento ` trattato nel capitolo due di [1]).12 Non tutte le variabili definite nella shell sono per` inserite nell’ambiente in quanto molte di esse (come PS1) sono o di interesse esclusivo della shell. e passer` questo come argomento (o a a come opzione. insieme a tutti gli altri dettagli relativi al comando. in tal caso infatti la shell nell’eseguire la scansione della linea sostituir` automaticamente alla variabile il suo contenuto. La seconda opzione ` -e che attiva l’interpretazione di una serie di caratteri e speciali.6). 2. che deve essere gi` definita. la cui espressione. a Il comando echo ` uno dei pi` elementari e prende due sole opzioni. che permettono sia di controllarne il funzionamento a che di accedere ad una serie di informazioni. si potr` usare echo per leggere il contenuto di una variabile con una riga del tipo: a piccardi@anarres:~/Truelite/documentazione/corso$ echo $USER piccardi dove la variabile USER viene prima espansa dalla shell nella stringa piccardi. si trova nella relativa pagina di manuale. ` quella dell’ambiente a e (in inglese environment).2. deve ricevere una serie di informazioni da chi lo lancia.1. a seconda del valore) al comando che viene eseguito. In particolare il comando da usare ` echo. una parte di queste e informazioni sono gli argomenti. Questo avviene perch´ questo compito pu` essere eseguito attraverso l’uso di uno dei tanti comandi e o specialistici della Unix toolbox. Un elenco delle principali ` riportato in tab.2. e a . esso viene utilizzato per poter utilizzare il valore di alcune variabili di shell anche all’interno dei programmi che questa mette in esecuzione. questa per` ` una estensione che non ` supportata da altre shell per oe e cui quando si scrivono script ` il caso di evitare questa sintassi per mantenere la compatibilit`. 57 La caratteristica delle variabili di shell ` che una volta definite ` possibile recuperarne il e e valore precedendone il nome con il carattere “$”.3. il cui solo compito ` e e stampare in uscita la stringa (o le stringhe) che gli vengono passate come argomento: siccome la shell esegue automaticamente l’espansione delle variabili prima di passare gli argomenti ad un comando. che vengono definite appunto nell’environment. con una sintassi del tipo export VAR=val.1. che. Se si vuole inserire una variabile nell’ambiente lo si deve fare esplicitamente usando il comando interno export seguito dal nome della variabile. 2. Si noti che mentre la shell provvede la sintassi e gli opportuni comandi interni per assegnare e cancellare la singola variabile. La bash definisce di suo (o utilizza qualora siano gi` definite) tutta una serie di variabili a (come IFS. cos` se nella variabile MAIL mettete la directory ı in cui si trova la vostra posta elettronica.

inserisce la variabile nell’ambiente. o 14 . dichiara una variabile intera. LA SHELL E I COMANDI Significato Il nome della macchina. rende variabile in sola lettura. o questo in generale permette di eseguire un altro comando. che serve in generale ad assegnare variabili e funzioni (tratteremo queste ultime in sez. onde evitare di a ottenere risposte non previste quando si esegue il comando in un ambiente che pu` essere stato “manomesso”. la lista viene cio` stampata in un formato pronto per essere salvato e su un file ed eseguito come script (tratteremo gli script in sez. Il comando prevede diverse opzioni. 2. Opzione -a -f -i -r -t -x -F -p Significato dichiara una variabile vettoriale.3. con l’opzione -i (o --ignore) infatti l’ambiente viene completamente svuotato. EDITOR che indica quale programma usare come editor predefinito. di nomi di file da ignorare nel filename globbing. La descrizione del sistema operativo corrente. dato che molti comandi rispondono ai valori delle variabili di ambiente. HOME che ne indica la home directory. PATH che specifica la lista delle directory dove cercare i comandi. 2. La lista delle directory in cui si trovano i comandi. Una lista.6) per ricreare l’ambiente.58 Variabile HOSTNAME OSTYPE PWD GLOBIGNORE HISTFILE HISTFILESIZE HISTSIZE HOME IFS PATH CAPITOLO 2. Tabella 2. ma con l’uso dell’opzione -x ` del tutto equivalente ad export.6) o impostarne gli attributi.14 mentre con una serie di opzioni -u (o --unset) si possono cancellare altrettante variabili di ambiente (da specificare come parametro per l’opzione). separata da “:”. attiva il tracing per la funzione. Il file in cui viene memorizzata la storia dei comandi. da passare come argomento. Per rimuovere una variabile di ambiente si e utilizza sempre unset. 2. Le variabili di ambiente sono di grande importanza perch´ sono usate in moltissimi casi per e controllare alcuni comportamenti predefiniti dei programmi. evita che sia stampata la definizione completa delle funzioni. Il massimo numero di linee da mantenere nel file della storia dei comandi. che indica il nome dell’utente corrente. Se si invoca env senza argomenti il comando si limita a stampare la lista delle variabili di ambiente. La directory di lavoro corrente.1.3: Opzioni del comando interno declare. La home directory dell’utente. TERM che specifica il tipo di terminale su cui si sta operando. Per visualizzare le variabili di shell presenti nell’ambiente si pu` usare lo stesso export o senza specificare nulla. Il numero di comandi da mantenere nella storia dei comandi. Il carattere che separa gli argomenti sulla linea di comando. nella classica forma VARIABILE=valore. Alcune impostazioni e valori di uso generale vengono allora memorizzati in una serie di variabili che di norma ogni shell deve definire. e si otterr` la lista delle variabili presenti nell’ambiente precedute dalla a dichiarazione declare -x. ecc.2: Principali variabili di shell. riportate in tab. con un ambiente modificato rispetto a quello della shell. stampa solo le funzioni. ` in genere una misura di sicurezza e provvedere un ambiente noto e ben definito cancellando preventivamente quanto gi` presente. Se si vuole solo una semplice lista di nomi con relativo valore si pu` usare il comando env. Tabella 2. stampa tutti gli attributi associati ad una variabile o una funzione.1. come USER.

19 questa scelta ha una ragione precisa: se tenete dentro PATH la directory corrente un altro utente potrebbe mettere nelle directory cui ha accesso una versione “opportunamente” modificata di un comando di sistema. che verrebbe eseguita al posto dell’originale.1. ed aggiungere un’altra directory. voi potete sempre scrivere solo il nome del file al posto del pathname completo: se cio` volete leggere una pagina di manuale. che potrebbero tuttavia essere eseguiti e ugualmente (con privilegi ridotti ovviamente) usando un pathname assoluto o inserendo le directory in cui si trovano all’interno di PATH. col rischio di guai seri qualora ci` avvenisse per l’amministratore. 1. sono pertanto assenti18 directory come /sbin. un e pathname per accedere al comando./ dove di nuovo si ` usato la capacit` della shell di espandere il valore delle variabili. che funziona e a anche all’interno della sintassi usata per assegnare le stesse. come ad esempio la directory corrente che di norma non vi ` mai inclusa. 2. contengono i programmi di uso per l’utente. o 16 la shell riconosce questo quando nel nome del comando compare il carattere “/” che indica una directory.2. come visto nell’esempio iniziale di sez. Se volete evitare questo comportamento.2. /usr/sbin. lo reincontreremo spesso. limitandosi ad utilizzare esclusivamente le funzionalit` interne a 15 vedremo a breve come si possono creare dei comandi personalizzati attraverso l’uso degli alias. 3. in realt` e a non ` che non funzionano. 59 La variabile PATH ` di importanza particolare perch´ ` direttamente connessa ad una delle e ee funzionalit` della shell su cui finora abbiamo sorvolato dandola per scontata: quella del cosida detto path search. cio` del fatto che essa vi permette di associare un nome scritto sulla linea di e comando ad un programma da lanciare./comando La variabile PATH ha la forma di una lista di pathname di directory.1.2 per le directory dove sono mantenute le librerie di sistema.17 . ` necessario specificare. separati fra loro da un carattere di due punti. per questo ci viene di nuovo in auto la sintassi della riga di comando per cui ` possibile ridefinire una qualunque variabile con una espressione del tipo: e piccardi@anarres:~/Truelite$ PATH=$PATH:.1.16 per questo in genere per lanciare un comando (o uno script) nella directory corrente si usa la sintassi: piccardi@monk:~/Truelite$ . In sostanza. L’INTERFACCIA A LINEA DI COMANDO. nel qual caso il nome pu` essere del tutto arbitrario. Si tenga conto che PATH ` comunque modificabile dall’utente. Un esempio del valore di questa variabile potrebbe essere il seguente: /usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games come ` presa dalla definizione standard per un utente comune su Debian. che pu` personalizzarla a e o piacere. ecc. Si noti come una riga del genere non esegua nessun programma.3. 17 ` un formato comune usato nelle variabili di ambiente tutte le volte che si deve specificare una lista di directory e in cui effettuare ricerche.19 Il dubbio casomai pu` essere sul come farlo senza doversi riscrivere tutto e o da capo il contenuto precedente. nella standardizzazione del filesystem illustrata in sez. In genere15 questo nome deve corrispondere al nome del file che contiene il programma che la shell deve eseguire.3.. . baster` scrivere man e non sar` necessario e a a specificare /usr/bin/man. che usualmente vengono inserite dentro PATH soltanto per l’amministratore. ` o e vero che si inserisce la directory corrente in coda a PATH i comandi standard hanno la precedenza. Si pu` fare cos` perch´ la shell esegue automaticamente una ricerca nel cosiddetto PATH dei o ı e comandi. ma qualcuno potrebbe sempre creare un programma la e aspettarvi al varco per un comune errore di battitura di ls . sia in forma assoluta che relativa. Si noti come in e questo caso siano indicate solo le directory che. ad esempio perch´ il programma che volete lanciare non ` in una di quelle e e directory e non sarebbe trovato.. cio` dato un nome sulla linea di comando la shell cerca un file da eseguire con quel e nome nella lista di directory contenute nella variabile d’ambiente PATH. solo non vengono trovati i relativi programmi. 18 questo ` il motivo per cui alcuni comandi “non funzionano” quando chiamati da utente normale. ad esempio in sez.

a Si tenga presente per` che which funziona controllando se il nome passato come argomento o compare nella lista dei programmi contenuti nelle directory elencate in PATH. LA SHELL E I COMANDI della shell. questa avviene da sinistra a destra nell’ordine in cui le directory sono elencate all’interno di PATH. Una delle caratteristiche peculiari di bash ` quella di essere in grado di vedere e immediatamente i nuovi programmi non appena si ridefinisce il valore di PATH.60 CAPITOLO 2. mentre con altre shell (ad esempio la csh) pu` essere necessario utilizzare un comando apposito come rehash. 21 o un alias. 20 . Se cio` all’interno di una riga di comando si usa come argomento un nome che contiene e uno di questi caratteri jolly. a a Un’altra funzionalit` di grande utilit` fornita della shell ` il cosiddetto filename globbing. Qualora invece si esegua il comando alias senza specificare nulla questo mostrer` la lista degli alias gi` definiti. dato il nome di un programma presente nel path search. se si indica il nome di un comando interno della shell questo non viene considerato. si a a e pu` cio` operare su insiemi di file con nomi simili passando ai comandi che dovranno operare su o e di essi degli argomenti che li indicano in gruppo tramite i cosiddetti caratteri jolly (in inglese wildcard ). definire abbreviazioni per quelli pi` usati. la shell controlla se esso corrisponde ad un alias. per questo se si vuole capire se si sta usando un comando interno o un programma. nel secondo una abbreviazione per l’uso di ls -l e nel terzo si ridefinisce rm in modo che di default sia richiesta conferma nella cancellazione dei file. Per cancellare un alias si pu` usare il comano do unalias seguito dal nome dello stesso. ad esempio potremo ottenere il pathname del comando ls con: piccardi@monk:~/Truelite$ which ls /bin/ls in questo modo ` possibile anche capire quale sia effettivamente il programma che viene usato e qualora ne esistano pi` versioni in alcune delle directory contenute all’interno di PATH. ne stampa a video il pathname assoluto. ottenendo qualcosa del tipo: piccardi@monk:~/Truelite$ type export export is a shell builtin Un’ulteriore funzionalit` che la shell mette a disposizione ` quella degli alias: prima ancora a e di cercare se il nome di un comando corrisponde ad un programma presente in una delle directory indicate in PATH. la shell nell’eseguirne la scansione verificher` quali file ci sono nella a la regola ` che viene usato sempre il primo programma che viene trovato nella scansione delle directory del e path search. o ridefinire lo stesso nome di un comando per u farlo comportare in maniera diversa. o Come complemento alla gestione del path search la shell fornisce il comando interno which che. o type.21 si pu` usare un altro comando interno. Un alias si crea con il comando interno alias associando un nome ad un altro comando (che pu` a sua volta essere stato definito in un altro alias) con o una sintassi del tipo: alias ll=’ls --color=auto -l’ ma si pu` anche definire una abbreviazione con: o alias l=’ls -l’ o ridefinire un comando esistente con: alias rm=’rm -i’ In questo modo nel primo caso si definisce una versione colorata e “prolissa” di ls. ci permette cos` di ideare nuovi ı comandi.20 Se non u viene trovato nessun programma corrispondente non sar` stampato nulla.

toc netadmin. e se ne trover` di corrispondenti espander` il nome contenente il carattere a a jolly nella lista dei file. se sono pi` di uno) e u il nome (o i nomi) del file che corrisponde. Ma oltre a queste due wildcard elementari la shell ne supporta di pi` sofisticate.log Struttura. invece di un singolo argomento.pdf baseadm.pdf corso.log ringraziamenti. per cui ad esempio se si fosse eseguita la riga di comando: piccardi@anarres:~/Truelite/documentazione/corso$ ls ??? Entries Repository Root questo significa che al programma sar` passato.22 Come nel caso del DOS o del VMS.log corso.pdf infine se ci interessano i file Latex il cui nome non inizia per lettera maiuscola potremo usare: piccardi@anarres:~/Truelite/documentazione/corso$ ls [^A-Z]*.pdf Struttura.tex config.tex baseadm.pdf netadmin. 61 directory corrente.log mentre per selezionare i file PDF il cui nome inizia con una lettera maiuscola potremo usare: piccardi@anarres:~/Truelite/documentazione/corso$ ls [A-Z]*. ponendole fra due parentesi quadre.toc baseadm.tex shell. Si pu` inoltre invertire la selezione dei caratteri specificati fra o parentesi quadre precedendo la lista o l’intervallo con un carattere di “^”.tex corso.1.tex Si tenga presente che il meccanismo dell’espansione ` quello descritto per cui il risultato della e stessa ` che viene passato al comando come argomento (o come argomenti.tex ringraziamenti. cos` si possono indicare elenchi di possibili u ı alternative per un singolo carattere. Per capire meglio facciamo alcuni esempi di filename globbing: supposto che per essi venga usata la solita estensione . Le alternative possono essere espresse con una lista dei caratteri voluti messi uno di seguito all’altro. L’INTERFACCIA A LINEA DI COMANDO.toc corso.toc texput.tex struttura. si potranno vedere tutti i documenti PDF presenti in una directory con una riga di comando come: piccardi@anarres:~/Truelite/documentazione/corso$ ls *.pdf. il carattere “*” indica un numero arbitrario di caratteri qualsiasi mentre il carattere “?” indica un solo carattere qualunque. 22 .tex fdl.log netadmin.log baseadm.2. mentre si possono specificare degli intervalli (corrispondenti a tutti i caratteri compresi fa i due estremi) usando due caratteri separati da un “-”.pdf Struttura. mentre si pu` usare la notazione ~username per indicare la home directory di un altro o utente.aux fdl.tex netadmin.tex se invece vogliamo vedere i file i cui nomi finiscono in c o in g potremo usare: piccardi@anarres:~/Truelite/documentazione/corso$ ls *[cg] Struttura. Infine come ultima modalit` di espansione si pu` utilizzare il carattere “~” per indicare la home directory dell’utente a o corrente.pdf mentre si potranno selezionare tutti i file il cui nome ` lungo esattamente sette caratteri con una e riga di comando del tipo: piccardi@anarres:~/Truelite/documentazione/corso$ ls ??????? fdl. la lista dei nomi dei file a corrispondenti all’espansione dei caratteri jolly.

e mette il suo output sulla riga di comando. che permette di accedere. in tal caso la stringa sar` interpretata in maniera assolutamente letterale. Una modalit` alternativa ` quella che permette di specificare degli argomenti che vanno a e considerati come una stringa letterale (risolvendo anche cos` il problema degli spazi) e per i ı quali non si vuole che la shell effettui delle espansioni. si pu` eliminare anche questa se al posto delle virgolette si usano gli o apici singoli (’). come se lo si fosse scritto manualmente. per` a o talvolta presentano degli inconvenienti. si capisce anche come da questa espansione si possano trarre ulteriori potenzialit` di utilizzo.tex’: No such file or directory che nel caso fallisce perch´ i file elencati non esistono. In questo caso quello che succede ` che la e e shell esegue il comando racchiuso fra apici inversi. Simile alla command expansion ` la cosiddetta arithmetic expansion che permette di vae lutare delle semplici espressioni aritmetiche. usando i tasti di freccia in alto e in . il o primo. un tale nome verrebbe spezzato in due con il risultato di passare al comando due argomenti invece di uno. per farlo si usa una sintassi del tipo di “$(())” all’interno della quale si inserisce l’espressione da calcolare. a L’ultima funzionalit` generica della shell che prenderemo in esame ` quella della storia dei a e comandi. o usando la sintassi equivalente $(comando). e potremo avere un qualcosa del tipo: piccardi@monk:~/Truelite/documentazione/corso$ echo $((5+7)) 12 e considerato che all’interno dell’espressione si possono usare delle variabili di shell.tex’: No such file or directory rm: cannot lstat ‘vecchio. asterischi ı e punti interrogativi.62 CAPITOLO 2. Un inconveniente analogo ci sarebbe per i nomi dei file che contengono degli spazi: dato che lo spazio viene usato per separare fra di loro gli argomenti. Il risultato ` questo perch´ l’unico nome di file di tre lettere presente nel caso dell’esempio ` quello e e e della directory CVS. Questo ci mette a disposizione un mezzo estremamente potente per collegare fra loro i comandi: possiamo usare il risultato di uno di essi per generare gli argomenti di un altro. Per risolvere questi problemi esistono dei caratteri che permettono di disabilitare del tutto o in parte le capacit` della shell di interpretare in maniera speciale altri caratteri. che disabilita il filename globbing e l’interpretazione degli spazi. cos` e ı si pu` usare un asterisco in un argomento indicandolo con “\*” o si pu` utilizzare uno spazio o o proteggendolo con “\ ” o specificare la stessa barra trasversa con “\\”. In questo modo per` resta attiva l’espansione di eventuali variabili di shell o tramite il carattere “$”. Uno di a questi ` la barra trasversa “\” che anteposta ad un carattere ne disabilita l’interpretazione. ad esempio se si volesse passare ad un comando come argomento un file il cui nome contiene uno dei caratteri jolly. ` quello di definire la e stringa racchiudendola fra virgolette ("). racchiudendo quest’ultimo fra due apici inversi (‘). ad esempio se nel file elenco si ` scritto una lista di file si potr` effettuarne la cancellazione con una linea di comando come: e a piccardi@anarres:~/Truelite/documentazione/corso$ rm ‘cat elenco‘ rm: cannot lstat ‘pippo. quindi ci verr` stampato. a Un’altra funzionalit` molto utile della shell che si attiva con una sintassi simile alla specifia cazione delle stringhe. Il filename globbing e l’uso delle variabili di ambiente sono funzionalit` molto utili. ` quella che viene chiamata command expansion. dato che non riporta file di tre lettere. per cui dall’espansione del filename globbing otteniamo una riga di comando equivalente a ls CVS. il contenuto di tale a directory. Questo pu` essere fatto in due modi. si pu` cio` usare come e o e argomento nella riga di comando il risultato di un altro comando. cos` che al suo interno si possano usare spazi. o il carattere “$” usato per referenziare le variabili si avrebbe il problema che la shell cercherebbe di espandere la relativa espressione. il risultato del calcolo sar` riportato a direttamente come argomento. LA SHELL E I COMANDI si sarebbe ottenuto un risultato forse inaspettato. la cosiddetta history. secondo la sintassi di ls.

ma ` anche possibile sia effettuare un e ricerca incrementale nella history utilizzando la combinazione C-r seguita dal testo della ricerca (che comparir` all’interno di un apposito prompt). Con il comando history inoltre si pu` visualizzare l’intero contenuto della history. con il valore che si pu` usare con “!” per richiamarla. 2. 63 basso. o richiamare con l’uso del carattere “!” una a specifica voce. 1. in cui o ogni riga ` numerata progressivamente.23 Diventa cos` possibile non solo rieseguire i comandi precedenti. e o Cos` ad esempio per richiamare righe di comando precedenti si potr` fare qualcosa come: ı a piccardi@anarres:~/Truelite/documentazione/corso$ which chown /bin/chown piccardi@anarres:~/Truelite/documentazione/corso$ ls -l $(!wh) ls -l $(which chown) -rwxr-xr-x 1 root root 19948 Aug 19 03:44 /bin/chown mentre se si vuole usare direttamente il numero. o metterlo in una stringa delimitata da apici singoli. ma che pu` essere cambiato in qualunque altro o file specificato dalla variabile HISTFILE. In sostanza il meccanismo che ci permette di costruire quella catena di montaggio cui accennavamo in sez.1. 2. La bash infatti mantiene in memoria ogni linea di comando eseguita e poi quando esce salva l’elenco in un apposito file. o . associati ai primi 23 e si pu` anche indicare una dimensione massima del file con HISTFILESIZE..1.5 La redirezione dell’I/O Abbiamo voluto dedicare una sezione separata a questa funzionalit` fondamentale della shell a perch´ ` quella che ci fornisce la vera potenza dell’interfaccia a riga di comando.. Per maggiori dettagli riguardo tutto l’argomento si pu` fare riferimento alla sezione HISTORY EXPANSION del manuale della o shell. L’INTERFACCIA A LINEA DI COMANDO. si potr` verificarlo con: a piccardi@anarres:~/Truelite/documentazione/corso$ history .. alle linee di comando eseguite in precedenza.bash_history (nella nella home dell’utente).. Nel file vengono salvate fino ad numero di righe massimo specificato attraverso la variabile HISTSIZE. navigando avanti ed indietro ı lungo la storia con i tasti di freccia in alto e in basso.tex 524 which chown 525 ls -l $(which chown) 526 history e richiamare un comando con: piccardi@anarres:~/Truelite/documentazione/corso$ !526 . lo standard input.2.1 ` appunto quello della redirezione e dell’I/O. indicandola sia per numero che tramite le prime lettere. permettendoci ee di combinare fra loro i vari comandi. come mostrato nel primo esempio viene espanso quando usato nella linea di comando. e per usarlo in maniera letterale occorre o proteggerlo con la barra rovesciata. lo standard output e lo standard error.4 quando la shell lancia un comando uno dei suoi compiti ` aprire e preventivamente 3 file.tex 524 which chown 525 ls -l $(which chown) 526 history 527 history si tenga infine conto che il carattere “!”. Come accennato in sez.3. 523 ls [^A-Z]*.1. 523 ls [^A-Z]*. che di default ` e .

ed essendo quea a st’ultimo collegato al terminale. e -E che scrive un $ alla fine di ogni riga. -t che stampa i tabulatori come ^I. ash(1). tutti i comandi unix si aspettano di ricevere i loro dati in ingresso sullo standard input (e non da uno specifico file o dispositivo. e e ad esempio quando si redirige lo standard output. LA SHELL E I COMANDI tre file descriptor (0.). a meno che questo non sia previsto come argomento).64 CAPITOLO 2.24 Prendiamo allora come esempio il comando cat. e scrivono i loro dati in uscita sullo standard output. questo (il suo nome. dato che il comando legger` il contenuto e lo riverser` sullo standard output. ed a il comando lo riscriver` sullo standard output.. dato che programmi per visualizzare il a e contenuto del file ce ne sono altri. a Fin qui di nuovo. PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games" .25 Usato cos` il comando non ` di grande utilit`.. 24 lo standard error non viene. in genere non serve a molto scrivere qualcosa ı e a sulla tastiera per vederselo ristampare sul terminale ad ogni riga. insieme ai dati in uscita. 1 e 2). Il comando comunque prende alcune opzioni per facilitare la visualizzazione. -v che visualizza i caratteri non stampabili. in generale. per cui alla conclusione della riga verr` letto quanto appena scritto. l’utilit` del comando ` relativa. origina da conCATenate file) ` un comando elementare serve a leggere uno o pi` file in ingresso e u passati come argomenti e a scriverne il contenuto sullo standard output. Se e lo facciamo scrivendo prova seguito da invio otterremo qualcosa del tipo: piccardi@anarres:~/Truelite/documentazione/corso$ cat prova prova dove il comando reagisce all’invio ristampando sul terminale quanto appena scritto e attendendo nuovo input. ma questo solo perch´ si ` usato lo stesso file dello standard output.. magari pi` sofisticati come more e less. mai usato. o interrompere il programma con un segnale.profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1). Questi nel caso di shell interattiva sono associati al terminale su cui essa ` eseguita. che permettono u anche di vedere il file un pezzo alla volta. Nel caso di shell interattiva questi di nuovo vanno sul terminale e compaiono sullo schermo. non ` cos` essendo i due file distinti. per` se vogliamo vedere il o contenuto di un file il modo pi` immediato per farlo ` con un comando del tipo: u e piccardi@anarres:~$ cat /etc/profile # /etc/profile: system-wide . e pertanto corrispondono alla tastiera per i dati in ingresso e allo schermo e per i dati in uscita. per cui se eseguiamo: piccardi@anarres:~/Truelite/documentazione/corso$ cat ci troveremo in una situazione in cui il comando ` bloccato in attesa che scriviamo qualcosa. come -n che stampa un numero progressivo per ogni riga.. su di esso vengono scritti solo gli eventuali messaggi di errore. per cui i dati in ingresso vengono letti e scritti una riga alla volta. e non scrivono tutto di file in un colpo solo sul terminale dove poi l’inizio va perso nello scorrimento delle scritte sullo schermo. La descrizione completa si trova al solito nella pagine di manuale accessibile con man cat. . e andare avanti e indietro. e ı. ksh(1). per uscire dal comando occorre nel caso indicare che la lettura ` a e conclusa. lo si vedr` sullo schermo. 25 questo avviene in quanto sul terminale si quello che si chiama I/O bufferizzato. Seguendo una convenzione comune. . Se non si specifica nessun file come argomento il comando legge di default dallo standard input. non proprio intuitivo. in caso di operazioni regolari. ad esempio inviando un end-of-file sull’input con C-d.

Cos` se si ` spezzato un file di grosse dimensioni in una serie una serie di file pi` piccoli (ad ı e u esempio per scriverlo su una serie di floppy) si potr` ricostruirlo con un semplice comando del a tipo: cat file1 file2 file3 . Come accennato quando si effettua una redirezione dello standard output il file di destinazione viene sovrascritto.. > filecompleto La redirezione dello standard input ` invece molto utile con i programmi che richiedono e l’immissione dei dati da tastiera. il cui scopo come dice il nome stesso non ` quello di mostrare a e un file.1. L’INTERFACCIA A LINEA DI COMANDO. ` stato rediretto o e dall’operatore “<” sul file /etc/profile. per e cui quest’ultimo risulter` appunto essere la concatenazione del contenuto di tutti i file passati a come argomenti. I due pi` u elementari sono “<” e “>” che permettono rispettivamente di redirigere lo standard input e lo standard output su un file specificato dall’utente dopo l’operatore. La shell e infatti riconosce sulla riga di comando vari operatori. specificando il suo numero prima a o dell’operatore. ` utilizzando un comando del tipo: e piccardi@anarres:~/Truelite/documentazione/corso$ cat < /etc/profile # /etc/profile: system-wide . se invece esiste viene prima troncato a zero e poi sovrascritto. in cui invece di leggere un file specificato dalla riga di comando. I dettagli sulle varie forme di o redirezione possono trovare nella pagina di manuale alla sezione REDIRECTION. dato che nel primo caso si sarebbe potuto stampare direttamente il file. emerge solo quando esso viene unito alla capacit` della shell di modificare i file associati a a standard input.. invece di essere associato al terminale.26 Vediamo allora come si usano di questi due operatori.. a o mentre cosa succede se con cat specifichiamo una serie di file per poi redirigere l’uscita su di un altro? Per quanto appena detto il comando legger` il contenuto di ciascuno dei file passati come a argomenti. e qui emerge anche o la vera utilit` del comando cat.). Fin qui di nuovo niente di particolarmente utile. ash(1).profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1). Per questo ` e bene essere consapevoli della modalit` con cui il meccanismo funziona. specie quando questi vengono eseguiti in uno script. detti appunto di redirezione. ksh(1). con cp si pu` solo copiare il contenuto di un file su un altro. Per`. . e farli leggere al programma semplicemente con la redirezione dello standard input. si legge sempre dallo standard input che per` in questo caso. standard output e standard error. Una volta definiti quali dati sono necessari infatti li si potranno scrivere in un file. e nel secondo si sarebbe potuto usare cp.. se infatti si pensasse di a aggiungere dei dati in fondo ad un file con un comando del tipo di: cat file addendum > file in realt` si pu` effettuare la redirezione su un qualunque file descriptor. occorre pertanto stare molto attenti a non cancellare dei dati.2. 26 . e ad esempio si pu` copiare il contenuto del file pippo sul file pippo2 con un comando del o tipo: cat pippo > pippo2 dato che invece che sul terminale adesso il contenuto di pippo sar` scritto su pippo2.. . Si tenga a conto che se il file su cui si effettua la redirezione non esiste viene creato. cio` con la redirezione dell’I/O. riscrivendolo sullo standard output. La redirezione dell’output avviene in maniera identica associando lo standard output ad un file. 65 La vera utilit` del comando. ad esempio si pu` redirigere lo standard error con l’operatore “2>”.. una modalit` alternativa di stampare a il contenuto di un file con cat. che nel caso ` stato rediretto sul nuovo file.

1. che usa l’operatore “|”. 2. Tabella 2. pipelining: redirige lo standard output del comando cmd1 sullo standard input del comando cmd2. redirige lo standard error : scrive gli errori del comando cmd sul file file. ma esiste solo come file descriptor accessibile dall’interno dei processi interessati. Questo operatore infatti permette di collegare l’uscita del comando che lo precede con l’ingresso del successivo attraverso una pipe. se ad esempio si fosse usato less (che usato con la redirezione si comporta esattamente come cat) si sarebbe perso il contenuto originale di file.2. il cosiddetto pipelining. 27 .1. 1. il che comporta che nell’esempio in questione cat alla lettura di file lo troverebbe vuoto. LA SHELL E I COMANDI si andrebbe incontro ad una sgradita sorpresa. concludiamo questa sezione riportando in tab. fornendo un risultato per il successivo. Questo significa che si pu` fornire come dati o in ingresso ad un comando quelli prodotti in uscita da un altro. In questo modo si a sarebbe potuto realizzare l’aggiunta di informazioni alla fine del file file con il comando: cat addendum >> file La redirezione di ingresso ed uscita. e a u Comando cmd < file cmd > file cmd >> file cmd 2> file cmd1 | cmd2 cmd > file 2>&1 cmd1 2>&1 | cmd2 Significato redirige lo standard input: legge l’input del comando cmd dal file file. ad esempio non ` pi` necessario dover inserire in tutti i comandi una opzione per e u ordinare in maniera diversa i risultati.1. redirige lo standard output e lo standard error del comando cmd1 sullo standard input del comando cmd2.66 CAPITOLO 2. ` per` marginale rispetto ad una forma e o ` di redirezione molto pi` potente. Gi` questo comincia a farci intuire le capacit` intrinseche nel funzionamento della riga di a a comando. redirige lo standard output: scrive il risultato del comando cmd accodandolo al contenuto del file file. 2. Quello che avviene con la redirezione infatti ` e che prima viene creato o troncato il file.27 che come indica il nome funziona appunto come tubo di collegamento fra i due comandi.2 vari esempi di come queste funzionalit` possono essere sfruttate per a costruire delle vere e proprie catene di montaggio in cui si ottiene un risultato finale attraverso la concatenazione di molti comandi. redirige lo standard output: scrive il risultato del comando cmd sul file file. ma non ` detto che altri e e programmi (o versioni non GNU di cat) siano in grado di farlo. 2.4: Principali modalit` di redirezione. redirige lo standard output e lo standard error : scrive errori e risultati del comando cmd sul file file. u che ` del tutto analoga alle fifo incontrate in sez. “>>”. Cos` si possono lanciare in ı sequenza una serie di comandi in cui ciascuno elabora i risultati del precedente. Nel caso specifico cat ` in grado di rilevare la situazione anomala e stampare un errore. Comprese alcune delle pi` esoteriche a u che permettono di redirigere pi` file. per quanto utile. e poi ci viene scritto sopra il risultato. a Vedremo in sez. che e redirige lo standard output su di un file eseguendo per` la scrittura in append (una modalit` di o a scrittura speciale in cui i dati vengono aggiunti in coda a quelli gi` presenti). Per ovviare a questo problema ` disponibile un altro operatore di redirezione. E questo u infatti quello che ci permette di eseguire la concatenazione dei comandi cui abbiamo accennato in sez. solo che in questo caso non ` associata ad un oggetto e e nel filesystem. basta inviare questi ultimi con una pipe al programma sort il cui solo scopo ` quello di effettuare riordinamenti nelle modalit` pi` varie.4 un riassunto delle principali modalit` di redirezione utilizzate nella shell.

quello chiamato a. usato nei kernel delle serie fino alla 1. si usa spesso una o sintassi della shell che prevede l’uso di istruzioni e comandi con una sintassi pi` complessa di u si noti infatti che essa deve trovarsi.out. viene comunque ampiamente utilizzato. 31 renderlo eseguibile in questo caso significa attivarne il permesso di esecuzione con chmod +x. tanto che. per quanto sia poco a elegante e piuttosto limitato.6 Scripting elementare Una delle capacit` fondamentali della shell ` che.3. sotto /bin. Questi sono identificati dal link-loader come file di testo dotati di permesso di esecuzione la cui prima riga ` nella forma: e #!/bin/bash in cui cio` si trovano i caratteri “#!” seguiti dal pathname di un programma che faccia da e interprete. in questo caso la si invoca come un qualunque altro comando. si a e possono inserire delle sequenze di comandi in dei file per farli eseguire direttamente senza doverli riscrivere tutte le volte.1. 1. dal punto di vista del contenuto del file non cambia assolutamente nulla. usato nelle serie successive. e prende come argomento il file dello script da eseguire. ma che e viene lanciato come parte dalla chiamata al sistema che esegue un nuovo programma. 29 questo ` un programma speciale. e u o il grande vantaggio di una shell unix che ` avete a disposizione un vero e proprio linguaggio e di programmazione con tanto di variabili e direttive di iterazione. che usano questa funzionalit` il carattere # indica l’inizio di una riga di commento. anche se finora ne abbiamo parlato solo come del programma che implementa l’interfaccia a riga di comando. dato che ` e essenziale per l’avvio del sistema.1. ed un ottima risorsa per quanti vogliano approfondirlo ` [2]. come vedremo in sez. ecc.3. u E per questo motivo che la shell.2. le sue carattee ristiche principali si trovano comunque nella sezione SHELL GRAMMAR della pagina di manuale. e il formato ELF. questo resta un normale file di testo. che permette di utilizzare le librerie condivise e mettere in esecuzione gli altri programmi. La descrizione dettagliata del linguaggio della shell non ` affrontabile adesso. a esattamente come avrebbe fatto se di fosse trattato di un eseguibile compilato. 5. per automatizzare una grande quantit` di compiti per i quali non vale la pena ricorrere ad un a linguaggio di pi` alto livello. come avveniva per i file . condizionali. ed oltre ad eseguirlo a come tale la shell provveder` anche a passargli gli argomenti scritti nella riga di comando.2. In tal caso il link-loader lancer` automaticamente il comando (con le opzioni che si a possono specificare sempre sulla prima riga del file) dandogli come argomento il nome file stesso. 67 2. ma pu` anche essere lanciata non inteo rattivamente facendole eseguire direttamente quello che appunto si chiama uno script. per la sua immediatezza. Ma se questo ` pi` o meno tutto quello che si pu` fare con il DOS. usano proprio degli script di shell per eseguire le loro operazioni.4. 28 . che vi permette di effettuare anche compiti di notevole complessit`. 30 in Linux esistono sostanzialmente due formati binari. che vengono trattati esattamente allo e stesso modo. che non costituisce un programma a se (ed infatti sta sotto /lib). ` in realt` uno dei componenti essenziali per e a 28 e non solo dal punto di vista dell’interfaccia utente: tutti i sistemi far funzionare il sistema.2. Nel caso degli script per`. Dato che per la shell e per tutti i linguaggi di scripting. quando ` associata ad un e o e terminale ed utilizzata dagli utenti per dare comandi. come il python o il perl. L’INTERFACCIA A LINEA DI COMANDO. come richiesto dal FHS trattato in sez. In realt` gli script possono sfruttare una funzionalit` peculiare del link-loader 29 di Linux (che a a si trova comunque in tutti i sistemi unix-like). Quello che ` importante sottolineare e e qui ` che la shell non solo pu` essere invocata in maniera interattiva.bat del DOS. che oltre ad eseguire i programmi nel formato binario standard30 ` in grado di eseguire anche gli script. e poi renderlo eseguibile. rispetto quanto avviene sulla riga di comando. di avvio del sistema infatti.31 In a questa maniera uno script sar` del tutto equivalente ad un comando binario. con sintassi del tipo bash script. quando si vuole creare a uno script baster` scrivere un file di testo contenente tutte le istruzioni necessarie che inizi con a questa riga (che verr` ignorata nell’interpretazione dei comandi).

In questo caso il comando successivo all’operatore verr` eseguito solo se il precedente non ha avuto errori.3.” per indicare la fine di un comando e l’inizio del successivo: in questo caso essi saranno eseguiti in sequenza da destra a sinistra come al posto del “. Allora potremo verificare che: piccardi@anarres:~/Truelite/documentazione$ CVS README corso internet-server lucidi piccardi@anarres:~/Truelite/documentazione$ 0 piccardi@anarres:~/Truelite/documentazione$ ls: licidi: No such file or directory piccardi@anarres:~/Truelite/documentazione$ 1 32 ls samba echo $? ls licidi echo $? ` ad esempio il costrutto usato nel condizionale presente nell’esempio di /etc/profile illustrato pi` avanti. In caso di errori la catena a viene immediatamente interrotta.” si fosse premuto invio. E inoltre da specificare che qualora invece si concatenino dei comandi senza condizionali con l’uso del “. sono generalmente poco usate in quanto meno indicate ad un uso interattivo. nel ricevere lo stato di uscita di un comando. In realt` questo ` di scarsa a e utilit` sulla linea di comando (se non per eseguire pi` comandi in sequenza senza dover stare ad a u attendere che ciascuno di essi finisca per lanciare il successivo) ma ` utile negli script dove alcuni e direttive di programmazione (come i condizionali) usano come parametro una linea di comando. ad una caratteristica comune di tutti i programmi che una volta eseguiti riportano (nel caso specifico alla shell che li ha lanciati) uno stato di uscita che serve ad indicare se le operazioni sono state concluse correttamente. In questo caso si avr` che il comando a successivo all’operatore verr` eseguito soltanto se il precedente ha fallito. e u questo pu` essere fatto in tre modi diversi. la cui terminazione pu` essere resa esplicita con questo metodo.32 o La seconda modalit` ` quella in cui i comandi che si vogliono eseguire vengono separati a e dall’operatore “&&”.68 CAPITOLO 2. E automatico su questi valori che vengono prese le rispettive decisioni nell’uso dei operatori “&&” ` e “||” quando la shell concatena dei comandi. La convenzione ` che un valore nullo (cio` e e 0) significa il successo dell’operazione. Inoltre se il programma non si ` concluso spontaneamente ma ` stato e e e interrotto da un segnale la shell assegna al codice di uscita il valore di 128 + n. a Una prima sintassi ` quella che permette di eseguire pi` comandi distinti sulla stessa linea. Questo consente di a eseguire in alternativa due comandi. Queste due ultime modalit` fanno riferimento. che invece assume il significato di OR logico.” verr` riportato il codice di uscita a dell’ultimo comando eseguito. per quanto siano utilizzabili in teoria anche sulla riga di comando. per stabilire se un comando ha avuto o meno a successo. lo memorizza nella variabile speciale “?”. in genere lo si usa per eseguire le operazioni da effettuare solo in caso di errori. La presenza di un codice di uscita ` molto importante. mentre un valore non nullo (in genere 1) indica che c’` stato un errore. in genere lo si usa per verificare se un certo file esiste e poi eseguire un comando. La prima modalit` prevede che i singoli comandi o a siano separati fra di loro tramite il carattere “. specie per gli script che possono usare e questa informazione per capire se ci sono stati problemi.”. Una sintassi e delle istruzioni che. e u . 2. Per questo la shell. in tal caso si tratta semplicemente di scrivere quello che altrimenti si scriverebbe su linee diverse su una riga unica. che assume il significato di AND logico. usando il “. LA SHELL E I COMANDI quella elementare illustrata in sez.1. cos` che per un comando ı successivo o all’interno di uno script ` possibile ricavare lo stato di uscita dell’ultimo comando e eseguito in precedenza accedendo a quest’ultima. dove n ` il e ` con un controllo numero del segnale (ed ovviamente il comando viene considerato fallito). Questo consente allora di eseguire un secondo comando solo se il primo ha avuto successo. o dipendenti da funzionalit` specifiche degli script. La terza modalit` prevede che i diversi comandi sulla stessa linea vengano separati dall’opea ratore “||”.

mentre con $@ si ottiene la lista degli stessi. con $2 il secondo. seguito da un altro then e da altri comandi.1.. mentre nel secondo. prendendo come argomento un altro comando da usare come condizione. Variabile # * Significato Il numero degli argomenti passati ad uno script. e Il codice di uscita dell’ultimo comando eseguito. in realt` questa ` fondamentale negli script.33 L’elenco delle principali variabili speciali ` riportato in tab. cio` e e fallimento). non esistendo e il file licidi.2. La lista degli argomenti. questo comporta ad esempio che nel caso si usi la prima in una istruzione for si avr` un solo ciclo. o. queste istruzioni possono essere ripetute fino a chiudere la sequenza con l’istruzione else. propri di un vero linguaggio u di programmazione. Il pid del programma in background che ` stato eseguito e per ultimo. la shell provvede anche delle a istruzioni che consentono di creare costrutti sintattici pi` complessi. mentre $ viene espansa in una lista. e se si stampano le due variabili con echo non se o ne vedr` nessuna. L’INTERFACCIA A LINEA DI COMANDO. mentre con la seconda si avranno tanti cicli quanti sono gli argomenti. Il pid della shell.. no.. la differenza fra $* e $ pu` sembrare non significativa. fi then dove dopo l’if si esegue il comando specificato.5: Principali variabili speciali. La sintassi pu` essere pi` complessa in quanto si pu` sostituire l’istruzione else con un’istruo u o zione elif che invece di eseguire una serie di comandi ripete un successivo blocco condizionale. @ ? $ ! 0 La variabile ? ` una delle variabili speciali (descritte nella sezione Special Parameters e della pagina di manuale). queste variabili vengono mantenute direttamente dalla shell stessa (non ha cio` senso assegnarle direttamente come visto in sez. La lista degli argomenti. Tabella 2. chiudere definitivamente il blocco condizionale con l’istruzione fi. Il nome della shell o dello script. che ` quello che specifica la condizione.1. con $1 il primo. E inoltre possibile ottenere una stringa contenente tutti gli argomenti con $*.5. se non ci sono alternative. Se espansa fra virgolette come "$@" ` equivalente alla lista dei singoli argomenti. 2.. Il primo ` quello usato per specificare delle e esecuzioni condizionali ed ` basato sull’istruzione if. costituita da tanti elementi quanti sono gli argomenti passati allo stesso. e a e seconda del suo codice di ritorno verranno eseguiti alternativamente i comandi indicati dopo l’istruzione then (se nullo. e Al di l` della semplice logica dei due operatori “&&” e “||”. 2. ecc. else comando . la sua forma generica `: e e if comando. Ad esempio quando si lancia uno script con degli argomenti con $# si ` ottiene il numero degli stessi. Se espansa fra virgolette come "$*" ` equivalente ad una unica stringa formata dal e contenuto dei singoli argomenti separato da spazi (o dal carattere di separazione specificato in IFS). comando . cio` condizione di riuscita) o l’istruzione else (se non nullo. a 33 . infatti $* nelle istruzioni usate negli script viene a a e considerata come un’unica stringa.4) che vi memorizza il valore di e alcuni parametri interni. 69 e nel primo caso il comando ` stato eseguito correttamente. Di questi illustreremo solo i pi` significativi (l’elenco completo ` nella u e sezione SHELL GRAMMAR della pagina di manuale).

esac in cui ogni caso viene terminato da un doppio “.. con una sintassi generica del tipo di: o case expr in valore1) comando . Questa capacit` aggiunge a a una ulteriore funzionalit` alla linea di comando in quanto oltre ad eseguire i comandi binari e gli a . in questo modo si possono eseguire dei cicli condizionali.. piuttosto che ai file. Infine l’istruzione for permette di compiere dei cicli su un numero stabilito di alternative. . done (e analogo per until). ecc. . Se invece si devono operare delle scelte opzionali su un valore si pu` usare l’istruzione case. basati sul successo (while) o l’insuccesso (until) di un determinato comando che governa la ripetizione del ciclo... ed i singoli valori con cui viene confrontata l’espressione sono terminati da una parentesi chiusa. valore2) comando . do comando . con una sintassi del tipo: o for var in lista ... una command expansion. definendo una variabile che pu` essere utilizzata all’interno del ciclo. e L’utilit` di case rispetto all’uso di una serie concatenata di if ed elif.. ed il valore generico ` indicato da un *. oltre alla leggibilit`. o che prende come parametro una espressione che possa assumere valori diversi (una variabile. Una delle caratteristiche comuni a tutti i linguaggi. *) comando. do comando done dove var ` la variabile che assumer` per ciascun ciclo ciascuno dei possibili valori risultanti e a dall’espansione dell’espressione lista. e la shell non fa eccezione. .) e che permette di eseguire comandi diversi a seconda dei valori che detta espressione pu` assumere.. eseguendo ogni volta la lista dei comandi inserita nella sezione seguente delimitata dalle istruzioni do e done...”.70 CAPITOLO 2. LA SHELL E I COMANDI Oltre all’uso di if si possono eseguire cicli condizionali tramite dell’uso delle due istruzioni while e until che ripetono l’esecuzione del comando specificato come argomento fintanto che questo non riporta rispettivamente uno stato di uscita nullo o non nullo.. Questo consente allora di raggruppare in maniera flessibile valori simili e trattarli con una unica serie di istruzioni. ` quella della e possibilit` di definire delle funzioni cui fare eseguire compiti ripetitivi. a a ` che i valori con cui effettuare il controllo supportano i caratteri jolly con lo stesso significato e che questi assumono nel filename globbing. . anche se in questo caso vengono applicati alla lista dei valori forniti dall’espressione. secondo uno schema del tipo: while comando..

in tal caso queste vengono espresse scrivendo questi ultimi come argomenti .6. specificate attrao verso una opportuna espressione. } dove ciascuna linea conterr` un comando.1 per indicare che un comando ha avuto successo. e viene introdotta dalla parola e chiave function (ma lo si pu` fare anche a linea di comando.. Se invece si usa false questo restituisce un valore non nullo.. In generale una funzione ` definita all’interno di uno script. equivalente alla condizione falsa e al fallimento del comando. . come “!”. ritornando un valore nullo se la condizione ` verificata. che viene raggiunto sempre a passi di uno. Il comando pu` eseguire controlli su una enorme serie di diverse condizioni. o usare un alias per fare riferimento ad un comando. infine con tre argomenti il secondo viene usato come valore di incremento nell’intervallo che inizia con il primo e finisce col terzo. 71 script.3) per gli account degli utenti di sistema che non devono avere una shell. Questo comando ` molto utile quando si vogliono fare dei cicli. le principali opzioni utilizzate. che come tale deve essere riconosciuto. e viene utilizzato. cui o e u segue in nome della funzione e il costrutto (). come illustrato in sez. 2.2. Oltre alle condizioni sui singoli file il comando pu` essere usato per esprimere condizioni o relative a due file. Questi due programmi vengono usati spesso come shell di default (vedi sez. Nel caso di true si avr` un valore nullo che nelle condizioni a implica vero. i cui valori o possono poi essere utilizzati all’interno del ciclo. e la combinazione logica di due espressioni con l’uso delle opzioni -a e -o (che indicano rispettivamente l’AND e l’OR). Il comando inoltre supporta l’uso di alcuni operatori.3. comando2. una modalit` con cui si possono far a eseguire dei comandi alla shell ` quello di definire delle funzioni ed eseguire una lista di comandi e richiamando semplicemente il nome della funzione. 2. sono riportati in tab. non si tratta infatti di una sintassi interna della shell ma di un comando esterno. lo si e pu` infatti usare per generare una lista di numeri da utilizzare con l’istruzione for. in sostanza la forma ` sempre qualcosa del tipo: e function nome () { comando1. Il primo di questi ` seq. Altri due comandi speciali sono true e false. in questo modo si possono costruire delle condizioni molto complesse.1. ed il relativo significato. Buona parte delle condizioni verificate da test fanno riferimento alle propriet` dei file. a Oltre alle istruzioni interne della shell esistono anche una serie di comandi che sono stati grati proprio per facilitare la scrittura di scritp. partendo da 1 ed incrementando di uno. specificando due argomenti si indicano il valore iniziale ed il valore finale.2. 4. Un altro comando utilizzato negli script principalmente per controllare il suo codice di uscita ` test che ` uno dei comandi pi` comuni utilizzato in combinazione con le istruzioni condizionali e e u illustrate in precedenza. in a questo caso la condizione viene espressa con una opzione seguita dal nome del file cui la si vuole applicare. e non e nullo altrimenti. che anteposto ad una espressione ne nega il risultato. L’INTERFACCIA A LINEA DI COMANDO.. che non fanno assolutamente nulla se non fornire alla shell un valore di ritorno. dopo di che il corpo della funzione ` delimitato e fra parentesi graffe. che permette di stampare e sullo standard output una sequenza di numeri. Il comando pu` essere invocato con un numero o di argomenti variabile da uno a tre numeri interi: un solo argomento indica il numero finale a cui fermare la sequenza. E questo il motivo per cui le a condizioni che si trovano spesso negli script di shell richiedono che dopo la parentesi quadra sia sempre presente uno spazio. ` solo molto pi` scomodo). Per questo motivo una modalit` alternativa per invocare il comando a ` con il nome [ (si pu` infatti osservare l’esistenza del file /usr/bin/[) nel qual caso la linea e o ´ di comando dovr` essere terminata con una corrispondente ].

1. u u e 36 in generale un utente pu` sempre lanciare. e diverso). -lt e -ne. che invece non sono necessarie quando la si invoca per eseguire una script. E per` possibile o o eseguire i comandi di uno script senza usare una subshell.4. non si ` pu` pensare di far questo lanciando uno script che contiene i relativi comandi. con -nt si richiede che il primo sia pi` recente (in termini di tempo di ultima modifica. -ge.35 cui dare come argomento il nome dello script da cui leggerli. LA SHELL E I COMANDI ` un dispositivo a blocchi e ` un dispositivo a caratteri e ` una directory e ` un file normale e ` un link simbolico e ` di propriet` dell’effective user ID del processo e a ` propriet` dell’effective group ID del processo e a ` leggibile e ha dimensione maggiore di zero ` scrivibile e ` eseguibile e Tabella 2. Questa ` la modalit` che a e e a viene usata dal programma login quando d` all’utente un accesso al sistema e che in genere a ` alla radice di ogni altro programma lanciato dall’utente. varie altre shell interattive.2. Questo vuol dire ad esempio che se nello script si effettuano operazioni che modificano le propriet` della shell (come modifiche alle variabili di ambiente o a agli alias) queste modifiche saranno effettive solo per la subshell. vedi sez. dopo il login. 1. bench´ il programma sia lo stesso. Per questo la shell supporta diverse modalit` di funzionamento di cui quella usuale a linea di comando avviene attraverso a quella che si chiama una shell interattiva.72 Opzione -b -c -d -e -f -h -O -G -r -s -w -x Significato il file esiste ed il file esiste ed il file esiste ed il file esiste il file esiste ed il file esiste ed il file esiste ed il file esiste ed il file esiste ed il file esiste ed il file esiste ed il file esiste ed CAPITOLO 2. che viene eseguito da un altro processo. l’uso degli script ci pone di fronte ad alcune sottigliezze u del funzionamento della shell. Un’altra modalit` ` quella della shell di login (vedi sez. Se infatti si lancia uno script esso viene eseguito come tutti gli altri comandi. 35 34 . minore uguale. Ora ` abbastanza chiaro che. Per le stringhe invece si possono usare gli operatori “=” e “!=” per indicare rispettivamente uguaglianza e disuguaglianza. il cui significato ` banale e (uguale. ` quella di usare . e Per cui se si vogliono automatizzare una serie di impostazioni per la shell corrente. una shell utilizzata per e e eseguire uno script necessita di impostazioni diverse rispetto ad una shell usata per gestire la riga di comando da un terminale (ad esempio non serve il prompt). il sistema comunque ne o provvede una di default. 4. per questi ultimi valgono gli operatori di confronto dei valori come -eq. maggiore. con -ef si richiede che essi abbiano lo stesso inode.6: Opzioni per le condizioni sui file del comando test. al posto di source. e Oltre ad una sintassi pi` complessa. e che deve e pertanto essere in grado di gestire tutte le problematiche relative al controllo di sessione illustrato in sez.36 Queste modalit` in realt` came a a biano pochissimo.1) u mentre con -ot che sia pi` vecchio (negli stessi termini). quello che le contraddistingue ` che nel caso di shell di login viene sempre e cio` un’altra istanza della shell.3. maggiore uguale. e l’opzione -z serve a verificare se la stringa ` vuota. usando il comando source. pi` sintetica ma anche pi` criptica. -gt. e una sintassi alternativa. in cui essa ` associata ad un terminale. e non per la shell originaria da cui esso ` stato lanciato.3). la shell cio` crea un nuovo processo figlio in cui esegue quella che si chiama una e subshell 34 a cui fa eseguire lo script. minore. direttamente all’interno della shell corrente. separati dalla relativa opzione. -le. u Una ultima serie di condizioni riguarda l’uso di stringhe e numeri.

i file ..profile. ash(1)..bashrc. se la shell ` una o e bash. dato che non viene eseguito come script. poi. # see /usr/share/doc/bash/examples/startup-files for examples. 2. ed esegue i comandi nel primo che trova (e per il quale ha il permesso di lettura). Un esempio di e . quelle derivate dalla C shell usano /etc/csh.bash_login e . Infine viene impostato il valore della umask (vedi sez. PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games" if [ "$BASH" ].bashrc per le impostazioni ` dovuto al fatto che se la shell ` interattiva ma non e e ` di login. in modo da averle disponibile in tutti i casi.).profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1). 37 .bashrc fi dove sostanzialmente si modifica la umask (vedi sez. . 1. .2. (questo vale ad esempio per le shell lanciate dentro un terminale sotto X) al posto e ` dei precedenti file viene letto quest’ultimo. o Un esempio di questo file.bash_profile.4. then source ~/.1. 1.4. ksh(1). E per questo che conviene inserire in esso le proprie personalizzazioni.37 in cui l’amministratore di sistema pu` inserire una serie di impostazioni comuni per tutti gli utenti. 73 letto ed eseguito (all’interno della shell corrente) il contenuto del file /etc/profile. Si noti comunque che nessuno di questi file deve essere eseguibile.bashrc if it exists if [ -f ~/. then PS1=’\u@\h:\w\$ ’ else if [ "‘id -u‘" -eq 0 ]. dopo aver letto /etc/profile la bash cerca nella home degli utenti. Per permettere agli utenti di personalizzare la loro shell di login. che pu` essere considerato una sorta di file di configurazione per o la shell. per cui ` sufficiente il permesso di lettura. ed eseguire un source di questo file all’interno di . Un esempio `: e questo vale in generale per tutte le shell derivate dalla Bourne shell. il prompt usando un valore di PS1 che sfrutta le funzionalit` di tab. ` il seguente (l’esempio ` preso dalla versione installata di default su una Debian): e e # /etc/profile: system-wide .login. # the files are located in the bash-doc package. . senza guardare gli altri.4). in quest’ordine.bash_profile.1. umask 027 # include .4) rispetto al valore impostato per il sistema e si utilizzano le impostazioni personali poste in un altro file.bash_profile: executed by bash(1) for login shells. altrimenti (supa ponendo una shell generica) vengono usati direttamente i caratteri # e $ a seconda che l’utente sia o meno l’amministratore. L’uso di . L’INTERFACCIA A LINEA DI COMANDO.bash_profile ` il seguente: e # ~/. then PS1=’# ’ else PS1=’$ ’ fi fi export PATH PS1 umask 022 in questo caso si pu` notare come prima venga impostato la variabile PATH.bashrc ].

mv. 1 i a comandi elementari che ci permettono la gestione dei file sul filesystem come cp.bashrc).bashrc per i singoli utenti esiste un equivalente di /etc/profile anche per le shell interattive. /etc/bash_completion #fi fi ed in questo caso quello che si fa ` definire una serie di alias. if it’s already enabled in /etc/bash.74 CAPITOLO 2. then # don’t put duplicate lines in the history. ln. mkdir. then eval ‘dircolors -b‘ alias ls=’ls --color=auto’ #alias dir=’ls --color=auto --format=vertical’ #alias vdir=’ls --color=auto --format=long’ fi # some #alias #alias #alias more ls aliases ll=’ls -l’ la=’ls -A’ l=’ls -CF’ # set a fancy prompt PS1=’\u@\h:\w\$ ’ # If this is an xterm set the title to user@host:dir #case $TERM in #xterm*) # PROMPT_COMMAND=’echo -ne "\033]0. Abbiamo gi` visto nel cap. LA SHELL E I COMANDI # ~/.bashrc. e 2.2 I comandi dei file Dato che in un sistema unix-like tutto ` un file. In questa sezione affronteremo gli altri comandi che permettono di operare sul contenuto dei file ed eseguire su di essi operazioni pi` complesse. rm.${USER}@${HOSTNAME}: ${PWD}\007"’ # .. #esac # enable programmable completion features (you don’t need to enable # this.bashrc: executed by bash(1) for non-login shells. ed un nuovo prompt. ecc. che ` /etc/bash. .. then # . in cui sono mantenute le impostazioni generali scelte dall’amministratore per tutto il sistema. e dato che buona parte di queste vengono u effettuate con la redirezione vedremo anche delle applicazioni di quest’ultima. See bash(1) for more options # export HISTCONTROL=ignoredups # enable color support of ls and also add handy aliases if [ "$TERM" != "dumb" ]. e Si tenga conto che oltre a . #*) # . then: if [ "$PS1" ]. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for examples # If running interactively. ` naturale che la maggior parte dei comandi e e abbia a che fare con le operazioni di manipolazione dei file. #if [ -f /etc/bash_completion ].

Questa ` comunque solo una convenzione.1 Caratteristiche comuni Bench´. 2. tutti i programmi a infatti prima esaminano le opzioni.1. u Il primo fra i comandi usati per cercare i file l’abbiamo gi` incontrato in sez. anche se si applicano in generale a qualunque tipo di comando. e per questo sono stati sviluppati alcuni comandi molto e flessibili. facendo una ricerca nel PATH. in tal caso questo. come in maniera analoga ad un cursore o una manopola. che permettono di effettuare le pi` complesse tipologie di ricerca. quelle pi` e u comuni. ed ` a e which. per quei comandi che prendono come argomento un file. o dei file con una certa serie di caratteristiche.4.2. o Il comando pi` veloce per cercare un file qualunque ` invece locate. 38 . Per questo scrivendo “--” prima del nome del file l’interpretazione delle opzioni sar` terminata ed il nome (anche se inizia per “-”) sar` preso come argomento.1. e non solo a quelli che riguardano i file. ad esempio per la gran parte dei comandi l’opzione -h pu` o essere utilizzata per stampare a video una schermata di aiuto che riassume l’uso del comando.1 con ps). dei semplici switch.2.1. in cui queste si possono specificare con parole intere invece che con singole lettere. serve a localizzare nel filesystem tutti i file che contengono nel loro pathname la stringa passata come argomento. che ci indica a quale file eseguibile corrisponde un certo comando. nel a formato che varier` da caso a caso. esso infatti non e a ` un’altra delle funzionalit` introdotte dalla sezione delle GNU libc che permette di gestire le opzioni a riga e a di comando. 2. e esistono comunque una serie di caratteristiche comuni. le tratteremo qui. e non ` seguita da tutti i comandi. Invece a a per l’uso del “-” vale la convenzione. ad esempio --tabsize=80. Questo per` esegue la ricerca solo fra i comandi. che come degli interruttori attivano o disattivano una certa modalit` di funzionamento che si attivano semplicemente scrivendole a (ad esempio si usa spesso -v per aumentare la prolissit` dei messaggi del comando). Tutti i comandi GNU ad esempio supportano le due opzioni --help che stampa una schermata riassuntiva della sintassi. in genere la combinazione “--” viene utilizzata per indicare di aver completato le opzioni. 2. o delle a opzioni pi` complesse che. nel qual caso esse iniziano con un “--”. I COMANDI DEI FILE 75 2. Cos` se ad esempio avete in file il cui nome inizia per “-” vedrete che non ` affatto facile ı e cancellarlo con rm. Infine una menzione speciale per due casi particolari.2. segnalando errori se ne trovano di inesistenti. ed ` perci` molto diffusa. a a Inoltre comandi del progetto GNU supportano (come accennato in sez. 2.38 in modo tutti gli argomenti che seguono verranno usati direttamente senza essere considerati una opzione anche se cominciano per un “-”. che si viene dato come valore per l’opzione -p di renice). che come suggerisce il u e nome.2 I comandi per le ricerche sui file La ricerca di uno specifico file all’interno del filesystem. (come abbiamo visto in sez. La principale caratteristica comune a quasi tutti i comandi ` la gestione delle opzioni che avviene come illustrato in sez. 2. e --version che stampa il numero di versione. ` una operazione molto comune. di considerarlo (a seconda del contesto) come sinonimo dello standard input o dello standard output. La a convenzione per` viene usata da tutti i comandi realizzati all’interno del progetto GNU e da o quelli che usano le relative funzionalit` delle GNU libc.2. e poi trattano gli altri argomenti. Il vantaggio di questo programma ` la sua velocit`. tendono ad essere le stesse. come anticipato in sez. 1.3.3) anche una versione estesa delle opzioni.3 e alcune di esse. alcuni infatti e e usano delle sintassi diverse per eredit` storiche. permettono u di passare dei valori al comando (come il process ID del processo cui applicare un cambiamento di priorit`. il valore dovr` essere specificato di seguito all’opzione.1. ogni comando sia specializzato per fare un compito specifico. dato che il comando si lamenter` di una opzione sbagliata. dato che i comandi relativi ai file sono la maggioranza. Se l’opzione estesa deve indicare un valore questo deve essere specificato in forma di assegnazione con un =. a e o Le opzioni in genere sono di due tipi.

2. si pu` usare il comando find.3. e Alcune di queste opzioni vanno chiarite. al costo di una notevole attivit` su disco.2. filesystem su cui ` il file. LA SHELL E I COMANDI effettua la ricerca scandendo il contenuto del disco. o Opzione -follow -mount -maxdepth -mindepth Significato dereferenzia i link simbolici.3) che viene eseguito in genere una volta al giorno (fra i lavori periodici di cron che vedremo in sez. proprietario. la seconda. -ctime. che non utilizza un database. a Il comando supporta quattro categorie principali di opzioni.). permettono di modificare il comportamento del comando. resta nel filesystem corrente e non analizza sottodirectory in altri filesystem. se si vuole ricercare su quest’ultimo occorre usare -path. 3. le principali delle quali sono riportate in tab. e Per superare i limiti di locate. secondo i vari tempi (-atime. Le opzioni generiche. per cui se un file ` stato creato da poco non potrete vederlo. mentre con -mindepth la si pu` far partire da un certo sottolivello. e -e che richiede che sia verificata l’effettiva esistenza del file. da quelli sul nome del file in varie forme (con -name. se non si specifica nulla la ricerca partir` dalla directory corrente. Un elenco delle principali e opzioni di ricerca. La ricerca ` effettuata e esattamente sul nome del file cos` come ` scritto nella directory che lo contiene. ad esempio con l’opzione -name si pu` effettuare o la classica ricerca sul nome del file. non sul suo ı e pathname. Le altre opzioni e la descrizione completa del comando ` al solito disponibile nella relativa pagina e di manuale accessibile con man locate. che verr` eseguita ricorsivamente in tutte le directory a sottostanti. a permessi. -path). gli identificatori. seguita da un numero di livelli indica il massimo numero di volte che scende in una sottodirectory. seguita da un numero di livelli indica quanti livelli di directory ignorare prima di iniziare la ricerca. 2. la terza (descritta nella sezione ACTIONS) contiene le opzioni che permettono di specificare una azione da eseguire per ciascun file che corrisponde alla ricerca. Il comando riconosce l’opzione -i. descritte da altrettante sezioni della pagina di manuale (accessibile al solito con man find). Per tutte le opzioni che prendono un valore numerico (quelle sui tempi. con il relativo significato ` riportato in tab. la quarta (descritta nella sezione OPERATORS) contiene le opzioni che permettono di combinare fra loro diverse selezioni.7: Principali opzioni generiche di find. 3. il comando infatti prende come primo argomento la directory da cui iniziare la ricerca. ecc. -regex. che controllano il comportamento di find. Tabella 2. Le maggiori potenzialit` di find derivano dalla sua capacit` di effettuare ricerche con i criteri a a pi` svariati. o ma esegue la ricerca direttamente nel filesystem. tipo. Questo viene in genere creato dal comando updatedb (vedi a sez. Si pu` ridurre il carico comunque facendo effettuare u o la ricerca su sezioni ridotte dell’albero dei file. ma in piccolo database interno che contiene l’elenco di tutti i file presenti nel sistema.76 CAPITOLO 2. che richiede che venga effettuata una ricerca case insensitive.8. Il fatto che il comando si affidi ad un database ci fa capire immediatamente anche i suoi limiti: anzitutto la ricerca pu` essere effettuata solo per nome. -mtime) per tipo di file. ad esempio con -maxdepth si pu` limitare la ricerca ai o primi livelli di sottodirectory.7. e di a tempi di esecuzione decisamente pi` lunghi. La prima categoria (descritta nella sezione OPTIONS) contiene le opzioni vere e proprie. a quelli per u gruppo e utente (con -group e -user). (descritta nella sezione TESTS) contiene le opzioni di ricerca che permettono di selezionare i file in base ad una loro qualunque propriet` (nome. ed inoltre ` in grado di cercare o e solo i file gi` inseriti nel database. con tanto di supporto per le wildcard (che per` vanno o adeguatamente protette per evitarne l’espansione da parte della shell).1). ecc. i vari tempi. secondo i permessi (con -perm). Il comando inoltre consente l’uso come argomento di espressioni analoghe a quelle usate dalla shell per il filename globbing. il .

il significato ` diverso. -mmin -5 . I COMANDI DEI FILE Opzione -amin n Significato Un file acceduto n minuti fa.si richiede invece che il valore sia inferiore. Come accennato una seconda importante categoria di opzioni ` quella relativa alle azioni.2. L’user ID del proprietario ` n. mentre precedendolo con un + si richiede che sia superiore. nel caso dei tempi.8 con n. il comando permette una sintassi molto e potente: specificando solo il numero si richiede una corrispondenza esatta. il valore di c corrisponde alla lettera usata da ls e riportata in tab. le opzioni u -cnewer e -mnewer eseguono lo stesso controllo rispettivamente con i tempi di ultimo cambiamento e ultima modifica./shell. Per questo si possono usare le altre due forme. La dimensione del file ` n. Il nome del file corrisponde al pattern pattern. In questo modo con -mode si pu` richiedere una e o condizione in cui siano attivi un bit e un altro.2. si pu` richiedere che un file sia e ı o pi` vecchio o pi` giovane di un dato tempo. e Seleziona sul tipo di file. Il pathname del file (comprese quindi le directory a partire dalla radice) corrisponde al pattern pattern. Il group ID del gruppo proprietario ` n. numero di link). se invece si usa + la richiesta ` ancora pi` debole ed il file corrisponde e e u purch´ almeno uno dei bit di mode sia attivo. le opzioni -cmin e -mmin eseguono lo stesso controllo rispettivamente con i tempi di ultimo cambiamento e ultima modifica. trattandosi di una maschera di bit. precedendolo con il segno . Prevede anche -iname per una ricerca case insensitive. e Il proprietario ` user. Un file acceduto n giorni fa. Come prima il valore o e senza segno richiede la corrispondenza esatta. il cui valore mode deve essere specificato in ottale. Cos` ad esempio se si vuole cercare i file modificati u u ı negli ultimi 5 minuti si dovr` fare: a piccardi@anarres:~/Truelite/documentazione/corso$ find . . e Il gruppo proprietario ` group. In questo caso per`.1. le opzioni -ctime e -mtime eseguono lo stesso controllo rispettivamente con i tempi di ultimo cambiamento e ultima modifica.come per gli altri valori numerici.allora u mode specifica la maschera dei bit dei permessi che devono essere presenti sul file (i bit nulli cio` vengono ignorati).tex Una spiegazione a parte poi deve essere fatta per l’opzione -perm. 1. 2.tex mentre se si vuol cercare quelli non acceduti da pi` di quindici giorni si far`: u a piccardi@anarres:~/Truelite/documentazione/corso$ find . per ogni file che corrisponde al criterio di ricerca specificato. questo per` ci renderebbe impossibile selezionare o per la presenza di uno o pi` bit senza curarsi dello stato degli altri (che ` in genere il tipo di u e ricerca pi` utile).8: Principali opzioni di find per la ricerca. ` e e possibile infatti. ` cos` allora che per esempio. se si usa il segno . e 77 -atime n -anewer file -gid n -group group -links n -name pattern -path pattern -perm mode -size n -type c -uid n -user user Tabella 2. e Il file ha n hard link. far eseguire una ./ringraziamenti. -atime +15 . Prevede anche -ipath per una ricerca case insensitive. che ` stato indicato in tab. Un file acceduto pi` recentemente di file. mentre con +mode una in cui siano attivi un bit o un altro. I permessi corrispondono a mode. e supporta i due segni + e .

ma cambia profondamente quando ci sono di mezzo delle azioni come -exec. L’elenco delle opzioni principali ` riportato in tab. Ma se il significato di -and o -or pu` sembrare immediato nel caso di criteri di ricerca. come -exec ma chiede conferma del comando. ma quella di gran lunga pi` importante e u ` -exec che permette di eseguire. e ci sono delle convenzioni usate dal comando per passare i valori. Il funzionamento di un operatore come -and (che ` sottinteso se si specificano pi` opzioni) e u ` che la seconda opzione (sia questa di ricerca. che ` quello che ci si aspetta intuitivamente (entrambe le condizioni di e ricerca devono essere soddisfatte per -and o solo una per -or. La e sintassi dell’opzione ` complessa in quanto si deve inserire una riga di comando all’interno di e un’altra.9: Principali opzioni di find per specificare azioni. una ulteriore modalit` di ricerca ` quella che permette di effettuare a e . stampa il nome del file terminato con un carattere NUL (il valore 0). e falso altrimenti. e equivalente alla opzione -print. si potr` usare un comando del tipo: a piccardi@anarres:~/Truelite/$ find . Viceversa con -or la seconda opzione viene eseguita solo se la prima ` falsa.” nel qual caso saranno eseguiti comunque tutti. scrive il nome del file sul file file. lo stesso vale per e tutte le azioni. Tabella 2. per ogni file corrispondente alla selezione. ma si avr` un valore finale corrispondente a all’ultimo della lista. o usare vari formati. Per questo ad esempio specificare con -and pi` comandi (o semplicemente scriverne pi` di u u uno. allora se ad esempio si vogliono spostare tutti i file non acceduti da pi` u di 15 giorni un una directory old. e quando si esegue una selezione il valore ` automaticamente vero. che una azione) viene eseguita solo se la prima ` e e vera. LA SHELL E I COMANDI certa azione. Qualora si voglia essere sicuri di eseguire tutti i comandi in una lista si pu` usare l’operatore o “. e devono quindi essere e adeguatamente protetti. diventa meno chiaro quando o si ha a che fare con delle azioni. stampa il nome del file terminato con un a capo. La potenza del comando find ` poi ulteriormente aumentata dal fatto che le varie opzioni e precedenti possono essere combinate fra di loro con degli operatori logici.78 CAPITOLO 2. In realt` infatti il comando associa un valore logico ad ogni a opzione. -atime +15 -exec mv \{\} old \.9.”. ma si possono anche scrivere i nomi su un file qualunque usando l’opzione -fprint file. tranne -exec (e derivate come -ok) in cui il valore ` vero se il comando ha uno e stato di uscita nullo. Infine -not e nega il risultato di una opzione. un comando. Quando si usa -exec tutto quello che segue viene interpretato come una riga di comando fino a che non si incontra un carattere “. Abbiamo allora visto come find ci permette di trovare un file in base al nome e alle sue caratteristiche generiche. o Il problema ` che tutti questi caratteri vengono interpretati dalla shell. 2. o si inverte la selezione con -not). dato che in tal caso il -and ` sottinteso) non significa affatto che essi saranno eseguiti tutti: e lo saranno solo se tutti hanno successo. Opzione -exec -print -print0 -fprint file -ok Significato esegue un comando usando come argomento il nome del file. Se non si specifica nulla l’azione di default ` quella di stampare il nome del file. perch´ in tal caso e l’esecuzione della seconda opzione dipende in maniera essenziale dal risultato della prima (se si chiede di eseguire due comandi ad esempio le cose dipendono dal risultato di quello che si esegue per primo). in detta riga si pu` fare riferimento al file che corrisponde con la stringa {}. se uno non ha successo i successivi non saranno eseguiti. Nel caso si combinino opzioni di ricerca tutto questo ` del tutto ininfluente riguardo il e risultato del comando.

u non distingue fra maiuscole e minuscole. Ad esempio: piccardi@anarres:~/Truelite/documentazione/corso$ grep Dispense *. 2. indica esplicitamente la stringa di ricerca (serve a proteggere stringhe di ricerca che iniziano con “-”). se se ne ` indicati pi` di uno) nella quale ha rilevato e u una corrispondenza.tex:%% Dispense amministrazione base Altre opzioni del comando sono -i che permette di effettuare ricerche case insensitive. interpreta la stringa di ricerca come espressione regolare in stile Perl. si possono effettuare corrispondenze fra stringhe con un grado di complessit` incredibilmente elevato.10: Principali opzioni del comando grep.2. al solito si rimanda alla pagina di manuale per u una descrizione pi` completa. interpreta la stringa di ricerca come una espressione regolare estesa. -s -v Tabella 2. sospende la stampa in uscita dopo N corrispondenze. I COMANDI DEI FILE 79 ricerche in base al suo contenuto. o regex. u u . insieme ae ai suoi confratelli evoluti (come egrep) che nella loro forma elementare servono a cercare una stringa di caratteri all’interno di uno o pi` file. stampa le linee non corrispondenti. 2. diventa allora evidente la sua 39 le espressioni regolari. il comando prende come primo argomento la stringa da e cercare seguita dal nome del file (o dalla lista di file) in cui effettuare la ricerca. Di nuovo le opzioni del comando sono moltissime.tex Struttura.10 le pi` importanti. ma permettono anche di effettuare ricerche u estremamente evolute attraverso l’uso delle espressioni regolari. esegue la ricerca in forma ricorsiva. qualora non gli sia passato nessun file come argomento. stampa il numero di riga del file in testa a ciascuna linea in uscita. dall’inglese regular expressions. Il comando stampa in uscita ogni riga del file (o dei file.tex:%% Dispense editor e amministrazione di base corso. ma solo il numero totale delle stesse. ripetendola anche per tutti i file contenuti nelle sottodirectory di quelle passate in ingresso (pu` essere specificata anche come -R). inverte la selezione. -r che effettua la ricerca ricorsivamente.4) in cui. Come gli altri comandi Unix anche grep legge. non stampa le righe con le corrispondenze. stampa il nome del file in testa a ciascuna riga di output (anche se si ricerca su un solo file). sono una specie estensione del sistema del filename globbing (che abbiamo illustrato in sez. sopprime la stampa del nome del file in testa a ciascuna riga di output (quando sono pi` di uno).39 L’uso elementare di grep ` banale. e -v che inverte il risultato della ricerca (cio` stampa le righe e che non corrispondono alla stringa utilizzata). o sopprime la stampa degli errori al riguardo di file non leggibili o non esistenti.2.tex:%% Corso Linux : Dispense dei corsi GNU/Linux di Truelite netadmin.tex:%% Dispense amministrazione base struttura. u Opzione -b -c -E -e -G -H -h -i -m N -n -P -r Significato stampa la posizione nel file (in byte) in testa a ciascuna riga in output. questo le rende allo stesso tempo a uno degli strumenti pi` potenti ed uno degli argomenti pi` ostici del mondo Unix. attraverso una serie di operatori.1. dallo standard input e scrive sullo standard output.tex:%% Dispense amministrazione base baseadm. Il comando che implementa questa funzionalit` ` grep. si sono riportate in tab. interpreta la stringa di ricerca come espressione regolare normale (il default).tex:%% Dispense Amministrazione di rete shell.

caratteri di controllo. lettere (maiuscole e minuscole. indipendenti dalla localizzazione) e numeri. Il carattere “^” viene utilizzato per identificare l’inizio di una riga. sulla base delle opportune corrispondenze le righe di a un file. di cui cercare l’occorrenza in un file eseguendo l’operazione che viene usualmente chiamata pattern matching. mentre il carattere “$” serve ad identificarne la fine. e questo ` spesso causa di confusione ed errori. caratteri vuoti verticali ed orizzontali (spazi.11: Le classi di caratteri utilizzabili nelle espressioni regolari.11.80 CAPITOLO 2. La trattazione dettagliata delle espressioni regolari va ben al di l` delle possibilit` di questo a a 40 in cui ci limiteremo a fornire la descrizione delle funzionalit` pi` elementari. minuscole. e la loro presenza richiede semplicemente la presenza di un corrispondente carattere nel contenuto su cui si effettua la ricerca. Classe [:alnum:] [:alpha:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:] Significato lettere (maiuscole e minuscole. In maniera analoga ad una espressione matematica una espressione regolare viene costruita combinando delle espressioni elementari attraverso gli opportuni operatori. ritorni a capo).” viene invece utilizzato per indicare un carattere qualunque. LA SHELL E I COMANDI utilit` come filtro per selezionare a piacere. Una esprestesto. a u sione regolare ` in sostanza una stringa di caratteri che identifica un pattern. Anche i caratteri “*” e “?” assumono un significato simile a quello del filename globbing. indipendenti dalla localizzazione). maiuscole. alcuni caratteri sono invece riservati per svolgere il ruolo di operatori. e . caratteri stampabili (esclusi gli spazi). indicato con una sintassi speciale che ` quella delle espressioni e regolari. uno di questi ` la barra rovescia “\” con la quale si pu` richiedere e o l’interpretazione letterale del carattere successivo (bloccandone l’intepretazione come operatore). Tabella 2. Gran parte dei caratteri (tutte le lettere. pertanto si potranno identificare i commenti in un file di configurazione con l’espressione regolare “^#” mentre con l’espressione “^$” si identificheranno le righe vuote. cifre esadecimali. Oltre a liste e intervalli specificati direttamente si possono indicare fra parentesi quadre una serie di classi predefinite di caratteri con le espressioni riportate in tab. tabulatori. 2. ma nel fatto che quest’ultima viene interpretata. anche se in questo caso assumono un significato leggermente diverso41 In particolare le parentesi quadre vengono utilizzate come nel filename globbing per indicare una lista o un intervallo di caratteri (ad esempio “[aeiou]” indica le vocali e “[a-z]” le minuscole). Alcune delle espressioni usate nel filename globbing si ritrovano anche nelle espressioni regolari. maiuscole o minuscole. punteggiatura. Il carattere “. Come accennato la vera potenza di grep sta nel fatto che la ricerca non viene semplicemente eseguita sulla corrispondenza ai caratteri contenuti nella stringa passata come argomento. Si noti come facendo cos` si possano effettuare ricerche sempre pi` mirate semplicemente ı u concatenando in successione diverse chiamate al comando. come un pattern all’interno del file. caratteri stampabili (caratteri vuoti compresi). attraverso l’uso di alcuni caratteri riservati. e i numeri) di una espressione regolare non viene interpretata. 40 41 un buon testo sull’argomento ` [3]. numeri. la differenza col filename globbing ` che in questo caso il carattere “^” messo all’inizio viene interpretato come e inversione della lista seguente (con “[^A-Z]” si indicano tutti i caratteri che non siano una lettera maiuscola). cio` una struttura e e ordinata di caratteri e stringhe.

”). non necessitando questa di nessun parametro.2.m} Significato L’espressione precedente pu` corrispondere zero o una volta. mentre nel secondo caso corrisponde ad una linea che contenga una “a” seguita da un numero qualunque (compreso zero) di “b”. in questo modo si richiede la presenza iniziale di entrambe le lettere “a” e “b” seguite da un qualunque numero (indicato da “*”) di qualunque altro carattere (indicato da “.. 2. riportati in tab.tex opzione mentre. u e Operatore ? * + {n} {n. Tabella 2.tex:mentre nel secondo caso corrisponde ad una una linea che contenga una dove appunto si ` richiesto che l’occorrenza della stringa “una ” avvenisse almeno due volte di e fila.. Un raggruppamento viene a costituire quello che viene chiamato un subpattern. Negli esempi appena mostrati gli operatori di ripetizione sono applicati solo al carattere che li precede. \texttt{pluto} e \texttt{paperino} verranno considerati come argomenti che nel . e non solo si pu` richiedere. Gli operatori di ripetizione si applicano all’oggetto che li precede (che sia un carattere singolo o una espressione complessa) e richiedono che l’occorrenza dello stesso avvenga un certo numero di volte. nel caso di “*” questo pu` essere un numero qualunque (compreso nessuna) mentre con o “?” si richiede che sia al pi` una volta (di nuovo lo zero ` compreso).2. I COMANDI DEI FILE 81 ma nel caso delle espressioni regolari questo accade perch´ essi vanno a far parte di un gruppo e particolare di operatori che sono chiamati operatori di ripetizione.12. \texttt{pippo}.}’ *. L’espressione precedente deve corrispondere n o pi` volte. Per riottenere lo stesso significato precedente con una espressione regolare occorrerebbe usare la stringa “ab. L’espressione precedente deve corrispondere esattamente n volte. L’espressione precedente pu` corrispondere da uno ad un o qualsiasi numero di volte. o ma si pu` anche usare l’operatore “|” posto fra due raggruppamenti per richiedere la presenza o alternativa di uno di essi. Ad esempio per trovare in questo testo gli errori di battitura in cui si era scritto due volte la parola una si ` usato il comando: e piccardi@monk:~/Truelite/documentazione/corso$ grep -E ’(una ){2.tex shell. usando quello che viene chiamato un raggruppamento. o L’espressione precedente pu` corrispondere da zero ad un o qualsiasi numero di volte. In questo caso la sintassi varia a seconda che si usi la sintassi delle espressioni regolari semplici (quelle di default) nelle quali le parentesi tonde e la “|” devono essere protetti42 con la barra trasversa “\” o quella delle espressioni regolari estese (quelle attivate con l’opzione -E) dove la protezione non ` necessaria. e in particolare una espressione come “ab*” nel primo caso seleziona tutti i file il cui nome inizia per “ab” seguito da un numero qualunque di altri caratteri qualsiasi. Questo significato ` di nuovo leggermente diverso da quello presente nel filename globbing.*”. ` possibile per` applicarli ad una intera espressione regolare mettendola fra parentesi e o tonde. u L’espressione precedente deve corrispondere fra n e m volte. Cos` si pu` richiedere la presenza della parola pluto o della parola ı o pippo nella stessa riga con: piccardi@monk:~/Truelite/documentazione/corso$ grep ’\(pluto\)\|\(pippo\)’ shell. 42 .. e all’interno dell’espressione regolare stessa. si noti infatti come si sia espressa quest’ultima fra degli apici per bloccare l’interpretazione degli stessi caratteri da parte della shell. per cui anche una stringa come “ac” corrisponderebbe.} {n.12: Gli operatori di ripetizione nelle espressioni regolari. con l’uso degli operatori di ripetizione la presenza multipla di uno stesso pattern.

82

CAPITOLO 2. LA SHELL E I COMANDI

L’uso dei subpattern ha poi un’ulteriore vantaggio, e cio` che tutte le volte che uno di questi e viene trovato, il suo valore viene memorizzato in un elenco progressivo (secondo la sua posizione nell’espressione regolare) e detto valore pu` essere referenziato (e riutilizzato all’interno della o stessa espressione) con l’uso delle sequenze speciali “\1”, “\2”, ecc. Cos` se ad esempio si voı gliono trovare tutte le righe in cui compare due volte, in posizione qualsiasi, una stessa identica combinazione di almeno 10 caratteri si potr` utilizzare l’espressione: a
piccardi@monk:/usr/share/common-licenses$ grep -E ’(.{10,}).*\1’ GPL patent must be licensed for everyone’s free use or not licensed at all. running the Program is not restricted, and the output from the Program conspicuously and appropriately publish on each copy an appropriate with the Program (or with a work based on the Program) on a volume of Software Foundation, write to the Free Software Foundation; we sometimes

dove fra parentesi si ` richiesta la selezione di 10 caratteri consecutivi qualunque e poi si ` e e richiesto che la stessa selezione di caratteri comparisse di seguito sulla stessa linea (con interposti un numero qualunque di altri caratteri).

2.2.3

I comandi visualizzare il contenuto dei file

Un primo comando che permette di visualizzare il contenuto di un file lo abbiamo gi` incontrato a in sez. 2.1.5, affrontando l’uso di cat, ed in tale occasione abbiamo anche citato che se lo scopo ` solo quello della visualizzazione del contenuto di un file esistono alternative migliori, che sono e quelle che tratteremo adesso. Il problema maggiore dell’uso di cat come visualizzatore ` che questo scrive tutto sul tere minale, senza possibilit` di mostrare il contenuto del file un po’ alla volta. Per questo sono a stati allora creati tutta una serie di programmi studiati per mostrare il contenuto dei file una pagina alla volta (dove per pagina si intende la schermata del terminale), che per questo sono detti pager. Ad essi ` dedicata anche una variabile di ambiente,PAGER, usata dai programmi che e necessitano di visualizzare il contenuto di un file, per scegliere quale di questi lanciare. Il primo programma usato per la visualizzazione ` more, il quale prende come argomento una e lista di file da leggere di cui stampa il contenuto sul terminale una pagina alla volta, attendendo che l’utente gli invii dei comandi da tastiera. Al solito la pagina di manuale riporta l’elenco completo delle opzioni usate per controllare il comportamento del programma, ad esempio con -num si pu` specificare un parametro che indica il numero di linee che devono essere stampate o sullo schermo (utile solo quando il comando non riesce a determinarlo da solo) ed i vari comandi. Rimandiamo ad essa per le informazioni complete, qui faremo solo una breve panoramica sui principali comandi che si possono dare durante la visualizzazione, il cui elenco comunque pu` o essere ottenuto direttamente durante l’uso del programma premendo i tasti ? o h. Una volta stampata una pagina more consente di passare a quella successiva con la pressione dello spazio, mentre l’uso del ritorno a capo permette di avanzare lo scorrimento di una riga alla volta. Si pu` interrompere la visualizzazione con q, mentre con b si pu` tornare una pagina o o indietro. Se si sono indicati pi` file con :n si pu` passare alla visualizzazione del successivo u o mentre con :p tornare al precedente. Con il tasto / si fa apparire un prompt dove inserire una stringa da ricercare all’interno del file.43 Infine con v si pu` lanciare l’editor impostato con la o variabile di ambiente EDITOR (gli editor sono trattati in sez. 2.4, quello usato di default ` vi) e per modificare il contenuto del file. Il comando more ` stato creato fin dagli albori di Unix, e la sua sintassi risente anche del e fatto che i primi terminali erano delle telescriventi, dove lo scorrere avanti ed indietro significa semplicemente ristampare pezzi del file. Dato che ben presto tutti i terminali iniziarono a
43

in realt` si pu` usare una regular expression, e compiere quindi anche ricerche molto complesse. a o

2.2. I COMANDI DEI FILE

83

supportare la riscrittura dello schermo, e che tutte le tastiere iniziarono ad avere i tasti di freccia, venne creato less come evoluzione 44 di more. Le funzionalit` di less sono analoghe, e supporta anche tutti i comandi precedentemente a illustrati per more, ma il comando anche consente degli spostamenti pi` comodi, potendo naviu gare il contenuto del file avanti ed indietro con i tasti di freccia, pagina su e gi`, ecc. Il comando u poi supporta funzionalit` avanzate come la possibilit` di ridefinire dei keybinding, di lanciare a a dei programmi per pre-processare dei dati (ad esempio decomprimere al volo dei file compressi), ecc. Per i dettagli si faccia al solito riferimento alla pagina di manuale. Un altro programma di visualizzazione, pi` utile in caso di file binari, ` od, (da Octal Dump) u e che permette di stampare il contenuto di un file in forma numerica, usando vari formati: decimale, ottale (il default), esadecimale e pure direttamente in semplice ASCII. La modalit` in cui viene a stampato il contenuto ` controllata dall’opzione -t, che prende come parametro una stringa e indicante il formato, il cui primo carattere indica il tipo di rappresentazione scelta, secondo quanto riportato in tab. 2.13, mentre, nel caso di forma numerica, si pu` utilizzare un secondo o carattere per indicare la dimensione in byte del numero in questione.
Carattere a c d f o u x Formato caratteri ASCII, coi caratteri non stampabili riportati tramite un nome simbolico carattere ASCII, coi caratteri non stampabili riportati in forma numerica preceduta dalla barra rovescia decimale virgola mobile ottale decimale senza segno esadecimale

Tabella 2.13: I caratteri indicanti il formato per la stampa dell’output del comando od.

Una seconda opzione che permette di modificare il formato di stampa di od ` -A, che stabilisce e come deve essere stampato il numero progressivo che indica la posizione nel file; l’opzione prende come parametro uno dei caratteri d, o, x, o n dove i primi tre hanno lo stesso significato riportato in tab. 2.13 mentre n indica che non deve essere stampato nulla. Altre due opzioni utili sono -j che permette di iniziare la stampa a partire da una certa posizione all’interno del file e prende come parametro il numero di byte da saltare, e -n che permette di specificare (passandolo come parametro) il numero di byte da stampare (altrimenti il comando stampa tutto il contenuto del file). Per le altre opzioni ed i dettagli di funzionamento del comando si faccia al solito riferimento alla pagina di manuale.

2.2.4

I comandi per suddividere il contenuto dei file

Ma al di l` della necessit` di leggere il contenuto di un file scorrendolo un poco per volta, si a a pu` essere interessati ad effettuare delle selezioni pi` mirate. La nostra scatola degli attrezzi o u dei comandi Unix provvede allora due comandi specializzati, head e tail, che ci permettono di selezionare (nel caso scrivere sullo standard output) rispettivamente l’inizio e la fine del file. Entrambi usano l’opzione -n per indicare il numero di linee totali da selezionare (il default ` e 10), e -c per effettuare la selezione in byte invece che in linee. Al solito si faccia riferimento alla pagina di manuale per l’elenco completo e la descrizione dettagliata dei comandi. In questo caso nostra cassetta degli attrezzi sembrerebbe mancare di un comando ulteriore che ci permetta di selezionare una sezione qualunque del file a partire da una certa riga N per finire con un’altra M. Ma questo ` ancora una volta facilmente ottenibile concatenando i due e
44

si, volevano davvero fare gli spiritosi!

84

CAPITOLO 2. LA SHELL E I COMANDI

comandi precedenti; baster` tagliare prima la coda del file con head e poi la testa con tail, a costruendo una linea di comando del tipo:45 head -n M file | tail -n $((M-N)) Vale la pena poi menzionare esplicitamente l’opzione -f di tail che quando usata fa si che il comando non esca e continui a stampare ogni eventuale altro dato aggiunto in coda al file, permettendo cos` di seguire la crescita di quest’ultimo. Questa ` una opzione molto utile per ı e tenere sotto controllo i file di log, ed in generale tutti i file in cui altri programmi scrivono in coda i loro dati. Come contraltare di cat (che si ricordi serve a concatenare il contenuto dei file) si pu` usare o split, che viene usato per tagliare a fette un file. Il comando prende come argomento il file da affettare, e lo suddivide in tanti file di dimensione uguale che chiama progressivamente xaa, xab, xac, ecc. Se non specifica un argomento al solito split legge dallo standard input, consentendo cos` ad esempio di creare un file con un comando e suddividerlo al volo con una pipe). Dato che ı il comando crea le sue fette in ordine alfabetico, per ricomporre il file originario baster` usare a un comando del tipo cat x* > file. Aggiungendo un secondo argomento dopo il nome del file da suddividere si pu` specificare un o prefisso diverso da x come intestazione dei nuovi file creati dal comando. La dimensione dei file viene specificata con l’opzione -C se le si vuole in linee o con -b se la si vuole in byte, quest’ultima supporta anche un valore del parametro con i suffissi m e k per indicare rispettivamente megabyte e kilobyte. Infine se due lettere non bastano per indicizzare i file che si generano si pu` usare o l’opzione -a per specificarne un numero diverso. Per tutti i dettagli si faccia al solito riferimento alla pagina di manuale. Se si vuole tagliare un file per colonne invece che per righe si pu` usare il comando cut. o Il comando opera sul file passato come argomento (o sullo standard input, rendendo di nuovo possibile operazioni complesse e filtri ricorsivi), stampando le colonne selezionate sullo standard output. Con l’opzione -c si pu` creare la colonna selezionando i caratteri in base alla loro o posizione rispetto all’inizio della riga. L’opzione prende una lista dei caratteri, separata da virgole, e supporta la presenza di intervalli, indicati con un -, cos` se si vuole ottenere la stringa ı dei permessi dall’output di ls -l baster` fare: a
piccardi@anarres:~/Truelite/documentazione/corso$ ls -l *.tex | cut -c 1-10 -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--

L’utilit` del comando ` che oltre alle posizioni assolute, permette di effettuare la selezione in a e termini di campi delimitati da un carattere qualunque che pu` essere specificato con l’opzione o -d (di default il comando usa come separatore il tabulatore), in tal caso si effettuer` la selezione a di quali campi stampare con l’opzione -f, che indica la posizione in maniera analoga a -c. Cos` ı si potr` ad esempio stampare il proprio user ID con: a
piccardi@anarres:~/Truelite$ cat /etc/passwd | grep piccardi | cut -d: -f 3 1000
45

dove si ` usata la arithmetic expansion brevemente descritta in sez. 2.1.4. e

2.2. I COMANDI DEI FILE

85

Come contraltare a cut, il comando paste permette di concatenare file diversi in colonna. Il comando prende come argomenti i nomi di una serie di file, e produce in uscita un file le cui righe sono l’unione delle righe dei file in ingresso, separate da dei caratteri di tabulazione. Se non si specifica nessun file il comando legge dallo standard input, che pu` essere usato anche o all’interno di una sequenza di file indicandolo con “-”. Quando i file hanno dimensioni diverse il file prodotto sar` esteso alla lunghezza (in righe) del a pi` lungo dei file in ingresso, in cui le righe finali avranno dei campi vuoti in corrispondenza alle u righe mancanti nei file pi` corti. Questo comportamento pu` essere modificato usando l’opzione u o -f che ferma la generazione di nuove righe non appena si incontra la fine di uno dei file dati in ingresso. Con l’opzione -s invece si pu` effettuare una trasposizione dei file, in cui il contenuto (in o righe) di ciascuno, viene messo in colonna su di un’unica riga. Se si usano pi` file in ingresso u saranno generate tante righe quanti sono i file. Con l’opzione -d si possono modificare i caratteri usati per la separazione delle colonne, l’opzione prende come parametro una stringa i cui caratteri saranno usati in sequenza come separatori fra le varie righe, nell’ordine in cui li si sono indicati.

2.2.5

I comandi per filtrare il contenuto dei file

In questa sezione prenderemo brevemente in esame una serie di comandi che permettono di filtrare e manipolare in maniera automatica il contenuto dei file. Questi costituiscono in genere uno strumento estremamente potente, in quanto il loro inserimento all’interno di una concatenazione di comandi permette di eseguire delle operazioni di conversione in maniera rapida ed efficiente. Il primo comando utilizzabile per manipolare il contenuto di un file ` tr, il cui nome sta per e TRanslate. Lo scopo del comando ` quello di effettuare delle conversioni dei caratteri. Come e tutti i comandi opera esso opera direttamente su un file qualora questo sia specificato a riga di comando altrimenti utilizza lo standard input, scrivendo il risultato sullo standard output; in tal modo lo si pu` utilizzare come una sorta di filtro. o Il comando, a parte le opzioni, pu` prendere uno o due argomenti. Il primo indica un o insieme di caratteri di cui eseguire la ricerca nel file, il secondo, quando presente, indica la lista dei caratteri con cui il corrispondente del primo insieme deve essere sostituito. In genere quando si specificano due argomenti questi devono specificare due insiemi almeno della stessa dimensione. Qualora questo non avvenga il secondo insieme viene esteso ripetendone l’ultimo carattere, a meno di non usare l’opzione -t che tronca invece il primo insieme alle dimensioni del secondo. Se invece il secondo insieme ` pi` lungo vengono utilizzati solo i caratteri iniziali. e u Qualora si specifichi l’opzione -d il secondo insieme viene ignorato, e tutti i caratteri del primo insieme vengono cancellati. Se invece si specifica l’opzione -c il primo insieme viene considerato come quello dei caratteri che non devono corrispondere. Infine usando l’opzione -s si possono strizzare preventivamente le ripetizioni di un qualunque carattere del primo insieme trasformandole in un carattere singolo (che poi potr` essere sostituito). a Le liste dei caratteri in genere si possono esprimere direttamente con delle stringhe, il comando per` supporta anche le classi di caratteri definite in tab. 2.11, e si possono usare gli o identificatori ivi riportati. Inoltre l’utilizzo del carattere di escape “\” permette non solo di proteggere i caratteri speciali, ma di inserire negli insiemi caratteri non stampabili secondo quanto riportato in tab. 2.14. Per la sintassi completa del comando ed i dettagli riguardo le varie forme che si possono utilizzare per specificare gli insiemi dei caratteri si faccia comunque riferimento alla pagina di manuale, al solito accessibile con man tr. Un secondo insieme di programmi operano sul contenuto dei file di testo, principalmente a scopo di riformattarlo adeguatamente. Il primo di questi ` pr che serve a suddividere il testo e

86
Espressione \NNN \\ \a \b \f \n \r \t \v

CAPITOLO 2. LA SHELL E I COMANDI
Significato carattere specificato col suo valore numerico ottale. barra trasversa. bell (suona sul terminale). cancella indietro (backspace). pagina nuova (form feed ). a capo (new line). ritorno carrello (return). tabulazione orizzontale. tabulazione verticale.

Tabella 2.14: Caratteri speciali ad uso del comando tr.

in pagine, numerate progressivamente dal programma stesso, in un formato adatto alla stampa (da cui deriva il nome), il programma supporta numerose opzioni volte a configurare in maniera diversa le modalit` con cui viene effettuata la suddivisione in pagine ed impostare le informazioni a mostrate in testa e coda delle stesse. Il secondo programma ` fmt che riformatta il file in uscita paragrafo per paragrafo, pere mettendo di impostare caratteristiche come indentazioni della prima riga e numero di spazi e mantenere una lunghezza costante della riga. Di nuovo le varie modalit` con cui si pu` compiere a o la formattazione sono controllate dalle opzioni, per le quali si rimanda alla pagina di manuale. Il terzo programma ` fold che si limita invece a troncare le righe troppo lunghe rispetto e ad una dimensione fissa delle stesse specificabile con l’opzione -w. Questo ` il pi` semplice dei e u comandi di formattazione, con forse l’eccezione di nl, che come indica il nome serve a numerare le linee di ciascun file. Di nuovo si pu` fare riferimento alle pagine di manuale per le singole o opzioni. Vale poi la pena citare i due programmi expand e unexpand che servono rispettivamente a convertire tabulazioni in spazi e viceversa. Entrambi prendono le opzioni -t che permette di specificare le dimensioni del tabulatore se seguita da un numero come parametro, o le posizioni delle tabulazioni, che devono invece essere specificate come lista separata da virgole. Per i dettagli di nuovo si pu` fare riferimento alla pagina di manuale. o Abbiamo lasciato per ultimo pi` importante dei comandi per filtrare il contenuto dei file: u sed, il cui nome sta per Stream EDitor. Il programma serve appunto per eseguire una serie di trasformazioni su un flusso di dati come quelle potrebbero essere fatte da un normale editor su un file, in modo da poter utilizzare il comando in una catena di pipeline che mettano in grado di effettuare le volute modifiche nel passaggio dei dati dallo standard input allo standard output. Il comando prende come primo argomento l’espressione di editing che indica le operazioni da eseguire, a meno che non si sia specificata quest’ultima nel contenuto del file indicato tramite l’opzione -f o direttamente come parametro per l’opzione -e. I restanti argomenti, se presenti, indicano i file su cui applicare la suddetta espressione; se non ` presente nessun altro argomento e lo script viene applicato sullo standard input. Le principali opzioni sono riportate in tab. 2.15.
Opzione -e -f -n -r Significato indica esplicitamente l’espressione che indica i comandi di editing da applicare. indica un file contenente l’espressione dei comandi di editing. sopprime la stampa del pattern space che avviene alla fine del processo di ogni riga. usa le espressioni regolari estese.

Tabella 2.15: Principali opzioni del comando sed.

A meno di non utilizzare l’opzione -n il comando stampa tutto quanto ` stato letto in ingresso e ` cos` possibile salvare il risultato del (che sia stato modificato o meno) sullo standard output. E ı

2.2. I COMANDI DEI FILE

87

filtraggio redirigendo l’output del comando. L’opzione -n ` fornita per permettere (all’interno dei e vari comandi) di eseguire una stampa in uscita solo quando lo si ritiene opportuno (ed ottenere pertanto un risultato diverso). La potenza di sed sta nella grande flessibilit` dei comandi che possono essere dati tramite a l’espressione di editing, alcuni di questi infatti utilizzano le espressioni regolari (le cui basi si sono illustrate in sez. 2.2.2) per individuare dei pattern nel file ed operare su di essi compiendo sostituzioni, cancellazioni, ecc. Le espressioni di editing sono normalmente divise in indirizzi e comandi. Un indirizzo esprime l’insieme delle righe del file originario a cui si applica il successivo comando. Un singolo indirizzo indica la riga cui si applica il comando, con due indirizzi separati da una virgola si indica un intervallo di righe, mentre quando, come nella maggior parte dei casi, non si specifica nessun indirizzo, il comando si applica a tutte le righe del file. Infine se ad un indirizzo si fa seguire (prima del comando) il carattere “!” la selezione delle righe viene invertita. In genere un indirizzo viene specificato tramite il numero della relativa riga (ad esempio “10” indica la riga 10, “5,15” indica le righe dalla quinta alla quindicesima e “3,7!” tutte le righe escluse quelle nell’intervallo fra la terza e la settima. Sono per` possibili delle selezioni pi` o u complesse, come “$” che indica l’ultima riga del file, o “/regexp/” che seleziona le righe corrispondenti ad una espressione regolare; un elenco delle principali forme con cui si pu` specificare o un indirizzo ` riportato in tab. 2.16. e
Espressione N N,M N~M /regexp/ $ N,+M Significato selezione la N-sima riga. seleziona le righe dalla N alla M. selezione le righe a partire dalla N-sima a passi di M. seleziona le righe che corrispondono all’espressione regolare /regexp/. seleziona l’ultima riga del file. seleziona M righe a partire dalla N-sima.

Tabella 2.16: Espressioni per specificare un indirizzo al comando sed.

Una volta specificato l’indirizzo la seconda parte di una espressione di editing ` composta e da un comando. Un comando viene sempre introdotto da un carattere di controllo, seguito da eventuali parametri. I comandi possono essere ripetuti e raggruppati con l’uso delle parentesi graffe, ed in genere vengono scritti uno per riga e possono essere letti da un file con l’opzione -f. Per capire l’azione dei vari comandi occorre capire come sed effettua la manipolazione dei dati e dove questi sono mantenuti. Quando una riga viene letta da un file essa viene posta nel cosiddetto pattern space dove vengono effettuate tutte le operazioni e la manipolazione del contenuto: ` cio` nel pattern space che si troveranno le modifiche eseguite al contenuto originale e e dalle operazioni di sed. Il comando prevede inoltre anche la presenza di un altro spazio lo hold space, inizialmente vuoto, dove ` possibile inviare dati a partire dal pattern space, che e possono essere ripresi successivamente; questo permette operazioni complesse in cui i dati sono opportunamente spostati e ricombinati all’interno di detti spazi. L’elenco dei comandi pi` comuni ` riportato in tab. 2.17; ma sed ne supporta molti altri. u e Un elenco completo con una descrizione sommaria si pu` trovare nella pagina di manuale, ma la o documentazione completa, fornita anche di parecchi esempi, ` disponibile solo nelle pagine info, e accessibili con info sed. Il pi` importante ed utilizzato (e l’unico che tratteremo esplicitamente) dei comandi di sed u ` “s” che permette di sostituire una sezione di testo nel pattern space con un’altra. La sintassi e del comando ` nella forma s/ricerca/sostituzione/ ed in questa forma rimpiazza (all’interno e del pattern space) la prima occorrenza della stringa ricerca con la stringa sostituzione. La potenza del comando sta nel fatto che la stringa di ricerca viene specificata come espressione regolare, pertanto diventa possibile fare selezioni estremamente complesse; inoltre si possono

88
Espressione q N p d s

CAPITOLO 2. LA SHELL E I COMANDI
Significato esce con codice di uscita pari a N. stampa il pattern space. cancella il pattern space e passa al ciclo seguente. sostituisce il testo corrispondente ad una espressione regolare con un altro testo.

Tabella 2.17: Principali espressioni di comando per sed.

utilizzare i subpattern per selezionare pezzi di testo che possono essere riutilizzati nella stringa di sostituzione con le usuali espressioni \1, \2, ecc. consentendo cos` manipolazioni molto ı sofisticate. Dopo la / finale si possono specificare degli ulteriori sottocomandi, ad esempio usando “g” si indica al comando di sostituire tutte le occorrenze della stringa di ricerca, e non solo la prima, con “p” si richiede la stampa del pattern space (si usa in genere in combinazione con l’opzione -n) mentre specificando un numero N si esegue la sostituzione solo per la N-sima corrispondenza trovata.

2.2.6

Altri comandi dei file

Raccogliamo qui una serie di altri comandi di uso abbastanza comune che non rientrano in nessuna delle precedenti categorie. Il primo di questi ` touch, che viene usato in quasi tutti e gli esempi per creare un file vuoto. In realt` il comando non serve a questo (dato che lo stesso a compito si potrebbe fare in molti altri modi) quanto, come dice il nome, a toccare un file. Se il file passato come argomento non esiste infatti il risultato del comando ` quello di crearlo e vuoto, ma se invece esiste l’effetto del comando ` quello di modificare al tempo corrente i tempi e di ultimo accesso e ultima modifica (si ricordi quanto illustrato in sez. 1.2.1). Il comando prende varie opzioni e permette di modificare solo il tempo di ultimo accesso, se usato con l’opzione -a o solo quello di ultima modifica, se usato con l’opzione -m. Le altre opzioni sono al solito sulla pagina di manuale. Un altro programma molto utile ` sort, che permette di ordinare il contenuto di un file. e Il comando prende come argomento un file e ne stampa il contenuto con le righe in ordine alfabetico. Dato che se non si specifica nessun file il comando opera sullo standard input, pu` o essere usato di nuovo in una catena di comandi per riordinare l’uscita di un altro comando. Cos` se si vuole riordinare un elenco baster` darlo in pasto a sort. Le opzioni permettono di ı a controllare le modalit` di ordinamento, ad esempio con -b si pu` dire al comando di ignorare gli a o spazi all’inizio delle righe, con -r di invertire l’ordinamento, con -n di ordinare le stringhe che contengono numeri sulla base del valore di questi e non di quello alfabetico (per avere 2 prima di 10), con -f di non differenziare fra maiuscole e minuscole. Per l’elenco completo si faccia al solito riferimento alla pagina di manuale. Un altro particolare riordinamento del contenuto di un file viene eseguito dal comando tac, che serve a stampare il contenuto di un file alla rovescia, cio` a partire dall’ultima riga verso la e prima.46 Il comando in realt` divide un file in campi separati da un carattere, che di default ` a e il ritorno a capo per cui i campi vengono a coincidere con le righe; con l’opzione -s per` si pu` o o passare come parametro un diverso separatore, mentre con -r si pu` usare come separatore una o espressione regolare. Per i dettagli conviene consultare la pagina info con info tac dato che la pagina di manuale ` molto sintetica. e Un altro comando che permette di filtrare il contenuto di un file ` uniq, che elimina le e linee adiacenti uguali; il comando prende come argomento un nome di file (ma se non viene specificato legge lo standard input) e stampa il risultato sullo standard output. Al solito le varie
46

si, l’idea era proprio quella di fare cat al contrario...

con -s si pu` specificare il numero di caratteri ad inizio riga da non inserire o nel confronto.). u Di nuovo considerata a se stante.3 Altri comandi Dopo aver trattato i comandi che operano sui file. al solito dettagliate nella pagina di manuale.3. a seconda dell’umore del momento.1. Si consia deri ad esempio la necessit` di riunire elenchi di parole contenuti in pi` file (supponiamo siano a u elenco1. -w e -c. che in questo caso sar` a un file che contiene una lista di risultati di precedenti invocazioni del programma. di parole e byte. ee u u che ` meno soggetto ad errori. con -d si limita a stampare (senza rimuoverle) le linee duplicate. 2. md5sum usa un’altro algoritmo. Al solito se non si specifica nulla i comandi leggono dallo standard input. cio` ` pi` facile avere lo stesso risultato. che permette di specificare un solo parametro. (da Word Count) che viene usato per contare le u e parole contenute in un file. a per eseguire manipolazione avanzate sulla redirezione ed in generale tutti i comandi che non hanno direttamente a che fare con la gestione dei file.1 I comandi per la documentazione Bench´ talvolta sia difficile trovare informazione sulle funzionalit` pi` esoteriche. Dato che questa informazione ` in genere e si chiamano cos` delle opportune funzioni matematiche che hanno la caratteristica di dare risultati molto ı diversi anche per piccole differenze nell’input. ecc. Il comando prende come argomento una lista di file (se non se ne specificano al solito viene usato lo standard input) di cui stampa il numero totale di linee. una delle cae a u ratteristiche di un sistema GNU/Linux ` quella di essere fornito di una quantit` impressionante e a di documentazione. tanto che una delle risposte pi` frequenti alle domande di chiarimento ` u e RTFM. per cksum dalla lunghezza e dal nome. ALTRI COMANDI 89 opzioni permettono di controllare le modalit` con cui vengono effettuati confronti: con -i si pu` a o ignorare la differenza fra maiuscole e minuscole. l’opzione -L stampa la lunghezza della linea pi` lunga.47 o hash che confrontate permettono di verificare l’integrit` di un file). a 2. Altre opzioni. Il comando verr` applicato a ciascuno dei file elencati. 47 . ma che a risultano di grande utilit` come quelli per la documentazione. Inoltre md5sum supporta un’opzione -c. per impostare i tempi del sistema. a o ma basta pensare alle combinazioni con altri comandi per apprezzarne la funzionalit`. faremo una panoramica su una serie di altri comandi di varia utilit` che non sono direttamente connessi alla gestione dei file.txt. In genere il comando stampa tutte queste informazioni insieme al nome del file. Diventa cos` possibile a ı effettuare direttamente un controllo di integrit`. lo scopo ` quello di avere un file con l’elenco completo in cui e tutte le parole compaiono una volta sola. per ciascuno dei quali sar` stampato a video il risultato a del calcolo. segnalando eventuali differenze.txt. detto MD5. 2. u Altri comandi sono cksum e md5sum che stampano delle opportune checksum (delle somme di controllo.48 Come accennato in sez. Si pu` far stampare solo il numero di linee.4 ciascun comando di norma supporta da suo una opzione --help che permette di visualizzarne brevemente la sintassi. Il pi` semplice ` wc.3. e u 48 sigla che sta.txt | sort | uniq > elencofinale Una ulteriore serie di comandi sono quelli che possono essere usati per fare dei sommari del contenuto di un file. di parole o di byte u o con le opzioni -l. che ` e piuttosto debole. pi` recente. l’utilit` di un comando come questo pu` apparire limitata.2. per md5sum solo dal nome. Entrambi a prendono come argomenti una lista di file. In particolare cksum usa un algoritmo chiamato CRC. permettono anche selezioni pi` complesse. ma comporta pi` calcoli. per Read The Fine Manual o Read The Fucking Manual. elenco2. questo pu` essere ottenuto in un batter d’occhio con o un comando come: cat elenco*. se ne sono specificate pi` di uno.

system call (funzioni fornite dal kernel). che al solito sono descritte in dettaglio nella sua pagina di manuale.90 CAPITOLO 2.5) permette per` di verificare se esistono pi` pagine associate ad uno stesso nome con il comando whatis. 2. giochi. se si vuole accedere a alla seconda si dovr` richiamarla esplicitamente indicando la sezione con un qualcosa del tipo a man 5 passwd. il sistema infatti origina fin dai primi Unix e prevede la documentazione di tutto il sistema. che si accedono con il e comando man. dove in genere si trova una documentazione esaustiva e dettagliata della sintassi e delle opzioni di un comando o del formato e del significato delle direttive di un file di configurazione. comandi di amministrazione. ci possono essere altre sezioni specifiche installate insieme a ad alcuni pacchetti come quelle della documentazione del perl (un linguaggio di programmazione). Tutti i comandi prevedono una pagina di manuale che si accede semplicemente con la sintassi man comando. 3. Per questo se esistono pi` versioni della stessa pagina in sezioni diverse (come ad esempio per u il comando passwd e per il file /etc/passwd) verr` mostrata solo la prima. In particolare poi gli sviluppatori di Debian hanno come impegno preciso quello di fornire per ogni pacchetto la relativa documentazione. che come per gli altri comandi si accede con man man.1. la fonte primaria delle informazioni relative ai comandi ` nelle pagine di manuale. formati dei file di configurazione.1.change user password passwd (5) . fin qui abbondantemente citate. varie (convenzioni. Il sistema delle pagine di manuale (torneremo sulla sua configurazione in sez. informazioni generiche su argomenti). cercando in sequenza50 nelle varie sezioni e restituendo la prima che trova. 3. il cui numero ` quello che compare fra e parentesi nella prima riga di ciascuna pagina dopo il nome del comando in maiuscolo.18: Sezioni delle pagine di manuale.5. o u che stampa l’elenco delle pagine ad esso corrispondenti. secondo la classificazione riportata in tab. Ma le pagine di manuale non fanno riferimento solo ai comandi. Tabella 2. trattata in sez. Per questo le pagine di manuale sono divise in sezioni. cos` ad esempio avremo: ı piccardi@anarres:~/Truelite/documentazione/corso$ whatis passwd passwd (1) . LA SHELL E I COMANDI solo uno stringato riassunto delle opzioni disponibili. . funzioni di libreria.18. Si tenga presente che il comando man richiama la pagina relativa al nome che si ` passato e come argomento. 2. Con il comando man si richiama la pagina di manuale.18.49 Sezione (1) (2) (3) (4) (5) (6) (7) (8) Significato programmi eseguibili o comandi di shell.The password file Un’altra funzionalit` utile del sistema ` fornita dal comando apropos che permette di efa e fettuare la ricerca della parola passata come argomento fra le descrizioni brevi dei comandi che compaiono nella intestazione delle pagine di manuale (quelle appena mostrate anche nell’output di whatis) per cui potremo eseguire la ricerca: 49 in realt` qui si sono messe solo le sezioni “classiche”. 50 si tenga presente che la sequenza esatta non ` detto sia quella di tab. Il comando supporta una serie di opzioni di formattazione e per inviare l’output su stampante. Ciascuna sezione contiene la documentazione relativa ad un certo argomento. in realt` essa si imposta nella e a configurazione del sistema di gestione delle pagine di manuale. documentazione sui file di /dev.

il kernel. ecc. Infine quando non si riescono a trovare informazioni nel sistema si pu` ricorrere direttameno te ad internet. al PDF) raccolti dal Linux Documentation Project.3. dei linguaggi.os. che e lo considera alternativo rispetto alle pagine di manuale. i gruppi di discussioni sono organizzati e per temi. tornare al livello precedente premendo u. Infine si tenga presente che in genere i singoli pacchetti dei vari programmi vengono distribuiti la documentazione prodotta direttamente dagli autori che di norma. si trova nella directory /usr/share/doc/nomeprogramma.linux. una serie di documenti sul come fare a riguardo di un certo argomento. delle librerie. andare all’indice con i.os per i sistemi operativi. http://www.change user password expiry information passwd (1) . In tal caso ` comunque opportuno leggere in anticipo le FAQ (Frequently Asked Question) che e tanto per cambiare.). la possibilit` di consultare a indici. all’HTML. Grazie a questa struttura info permette anche di accedere a documenti pi` complessi u di una semplice pagina di manuale.lang per i linguaggi di programmazione. che nella gerarchia internazionale51 sono quelli che si trovano sotto comp.2.org. e a In tal caso il proprio provider deve aver fornito una accesso ad un news server che riceve i gruppi dedicati alle discussioni su Linux.it/. e di norma installati dalle varie distribuzioni insieme all’altra documentazione in /usr/share/doc/HOWTO/. e l’aiuto di altri utenti.linux.change user password e si noti come si siano usati i doppi apici per effettuare una ricerca su una stringa contenente uno spazio.pluto. mentre quelli della gerarchia italiana stanno sotto it. e vi si trovano una grande quantit` di manuali di grandissima a importanza. una rete internazionale di distribuzione di notizie in cui chiunque (usando il relativo client) pu` lasciare messaggi e ricevere risposte (la filosofia di funzionamento del sistema o ` ripresa da quella delle bacheche pubbliche delle universit`). seguire i link premendo invio. rispetto alle pagine di manuale. una u a organizzazione gerarchica strutturata ad albero con nodi e sezioni. u 51 .comp. pu` essere trovato sui gruppi di a o discussione di usenet. ALTRI COMANDI 91 piccardi@anarres:~/Truelite/documentazione/corso$ apropos "user password" chage (1) . Una grande quantit` di informazioni. ecc. Una seconda fonte di informazioni ` costituita dal sistema di help on line fornito dal comando e info. ecc. passare al nodo successivo con n. tornare al precedente con p. che sono continuamente aggiornati sul sito del progetto. Molti per` continuano ad utilizzare o quest’ultime per cui alla fine i due sistemi si trovano a convivere. e sar` possibile iniziare la navigazione spostandosi con le a freccie. secondo il FHS. Qui sono disponibili anche delle guide. comp. La traduzione italiana di questi documenti si pu` trovare sul sito o del PLUTO (gruppo storico di utenti Linux italiani) nella sezione dedicata all’Italian Linux Documentation Project all’indirizzo http://ildp. In questo caso si tratta di una forma alternativa di strutturazione delle informazioni che usa un formato diverso e che aggiunge. In genere il contenuto delle pagine di manuale ` direttamente accessibile anche con il comando info comando. Una delle risorse pi` usate ` quella degli HOWTO del Linux Documentation u e Project. A questa poi si aggiunge il grande patrimonio degli HOWTO. effettuare una ricerca con /. ecc. dato che anche questo servizio ` nato su Unix.tldp. delle caratteristiche pi` avanzate e molto comode come: la possibilit` di navigare usando link ad altre pagine.os. veri e propri libri su vari argomenti come l’amministrazione di sistema. e strutturati ad albero in una gerarchia per cui si va da un tema pi` generale (comp per i computer) a u temi sempre pi` specifici (comp. dato che altrimenti si sarebbero passate due stringhe al comando. come tutta la documentazione dei sistemi di sviluppo. ed infine visualizzare i vari comandi disponibili con ?. disponibili in diversi formati (dal testo puro. Data le sue caratteristiche evolute info ` il formato raccomandato dal progetto GNU. se per` e o ci si limita a richiamare il comando info ci verr` mostrata la radice del sistema dove sono a elencati tutti i documenti installati.

3.030s 0m0. ` process time : detto talvolta tempo di processore. tre valori di tempo espressi in process time. Qui si aggiungono ulteriori complicazioni. non ` detto che e siano complete o aggiornate) ma anche altre risorse come le annotazioni ed i log lasciati in innumerevoli pagine web e gli archivi delle liste di discussione dei vari progetti in cui qualcuno pu` aver gi` avuto il vostro problema e trovato una risposta. il tempo passato nell’esecuzione di codice in user space (con la sigla user).92 CAPITOLO 2.2 I comandi per la gestione dei tempi Prima di accennare ai principali comandi per la gestione di tempo e date in GNU/Linux occorre una breve introduzione sulla gestione del tempo nei sistemi Unix. Tutti gli altri comandi relativi ai tempi hanno a che fare con la gestione del calendar time.000s 0m0. e stampa a video. in tempo universale coordinato (o UTC). ` pertanto il tempo in cui viene misurato il tempo di e esecuzione dei processi. E il tempo usato internamente dal kernel per le sue temporizzazioni. la prima ` che esistono due orologi. alla terminazione dell’esecuzione di quest’ultima. La descrizione completa del comando (comprese le stringhe usate per l’opzione -f) si trova al solito nella pagina di manuale. In genere ` legato alle interruzioni del timer. In genere il tempo a cui si fa riferimento ` sempre il calendar time. cio` all’interno delle system call invocate e dal processo (con la sigla sys). E il tempo su cui viene mantenuto l’orologio del kernel. Storicamente i sistemi unix-like hanno sempre mantenuto due distinti tipi di tempo all’interno del sistema: essi sono rispettivamente chiamati calendar time e process time. ed il tempo passato nell’esecuzione di codice dentro il kernel. ad esempio: piccardi@monk:~/Truelite/documentazione$ time ls CVS README corso internet-server ldap lucidi real user sys 0m0. onde evitare di ripetere domande u banali che non sarebbero accolte molto amichevolmente. e Il comando prende varie opzioni. che prende come argomento una riga di comando da e eseguire.3. le principali delle quali sono -o che permette di specificare un file su cui scrivere i risultati al posto dello standard output.1. che sono il tempo totale impiegato per l’esecuzione del programma (con la sigla real). e . l’unico altro a comando che usa il process time ` time. e viene impiegato e per tutti i calcoli dello scheduler. e -f che permette di specificare un formato per i tempi. Fra queste troverete le versioni pubblicate degli HOWTO e delle FAQ (anche se queste vengono spesso distribuite come documentazione nel sistema. il process time viene usato e soltanto dai comandi che riportano le propriet` specifiche dei processi (come ps o top) relative a ai tempi di esecuzione degli stessi. Infine l’utilizzo dei motori di ricerca ` un ottimo sistema per recuperare le informazioni e pubblicate su internet. E il numero di secondi dalla mezzanotte del primo gennaio 1970. e viene usato ad esempio per indicare le date di modifica dei file o quelle di avvio dei processi.010s samba e si noti come il tempo reale ` sempre maggiore degli altri due in quanto tiene conto anche del e tempo in cui il processo ` stato in stato di sleep in attesa di I/O. LA SHELL E I COMANDI raccolgono una serie di riposte alla domande pi` ricorrenti. Questo tempo viene anche chiamato anche GMT (Greenwich Mean Time) dato che l’UTC corrisponde all’ora ` locale di Greenwich. gi` trattati in sez. data che viene usualmente indicata con 00:00:00 Jan. o a 2. 1 1970 (UTC) e chiamata the Epoch. Oltre a questi due. quello di sistema. secondo le definizioni: ` calendar time : detto anche tempo di calendario. 1.

con DD il giorno. Il comando prende inoltre varie opzioni. Il comando che permette di leggere ed impostare l’orologio di sistema ` date. ma facendo cos` i tempi di sistema sono sempre coerenti. ma il tempo che si voleva impostare e viene comunque stampato a video. La stringa usa il carattere % per indicare una direttiva di formattazione che verr` sostituita dall’opportuno valore. Per e lui il tempo ` assoluto. u La seconda complicazione ` che il kernel non conosce assolutamente niente dei fusi orari. Le principali direttive sono riportate in tab. che permettono di eseguire il compito in maniera e trasparente. Se si vuole impostare la data questa deve essere specificata con una stringa nella forma MMDDhhmm[[CC]YY][. 2.19. dove i termini fra parentesi quadra sono opzionali.52 Di solito il kernel lo legge all’avvio per impostare il valore e iniziale dell’orologio di sistema e non lo considera pi`. Con MM si indica il mese (in numero). 2.3. Se invece l’argomento che si passa inizia con un + esso viene interpretato come una stringa di formattazione per il risultato del comando. di specificare l’impostazione dell’orologio di sistema. ed ` alimentato della batteria che si trova su di essa. e l’orologio hardware che funziona in maniera del tutto indipendente e che rimane in funzione anche quando la macchina ` spenta. ALTRI COMANDI 93 usato dal kernel per tutte le sue operazioni. ad esempio si pu` provare ad impostare l’orologio con: o piccardi@monk:~/Truelite/documentazione/corso$ date 09191854 date: cannot set date: Operation not permitted Fri Sep 19 18:54:00 CEST 2003 e l’operazione fallisce. e e il tutto ` fatto attraverso delle opportune funzioni di libreria. con mm il minuto. con lo stesso formato. La descrizione di queste stringhe pu` essere o o ` l’orologio che si trova sulla scheda madre. mentre l’anno si indica o con le cifre finali YY o per intero con tanto di secoli come CCYY. Purtroppo altri sistemi operativi usano l’ora locale per l’orologio di sistema che coincide con l’orologio hardware.2.19.ss]. con hh l’ora. devono essere in grado di convertirlo nell’ora locale.53 Se ci si pensa questa ` la scelta pi` logica: non solo si evita di inserire una serie di informazioni e u complesse all’interno del kernel. L’utilit` di queste due opzioni ` a e che la stringa che prendono come parametro pu` essere nelle forma pi` varie. per`) come 8 day ago. e tutta la gestione dei fusi orari ` demandata alle applicazioni in user space che. l’elenco completo ` nella pagina di e manuale. le principali delle quali sono -d che permette di specificare una data da stampare al posto del tempo corrente. e soprattutto di incompatibilit` a dei tempi in caso di dual boot. tutte le volte che e leggono un tempo. e non solo riconosce o u tutti i formati standard che si ottengono con le direttive di tab. tutti gli altri caratteri resteranno a immutati. o 1 month. ma anche descrizioni verbali (solo in inglese. ed aggiornato via software dal kernel stesso. dato che non si ` l’amministratore. Se usato senza e argomenti questo si limita a stampare data ed ora corrente nel formato standard: piccardi@monk:~/Truelite/documentazione/corso$ date Fri Sep 19 12:45:42 CEST 2003 il comando prende come argomento o il tempo da impostare (operazione privilegiata che pu` o eseguire solo l’amministratore) o un formato di stampa per il tempo che modifica l’output del comando facendogli stampare solo le parti di data volute. e -s che permette. 53 52 . e non ı dipendono dal fuso orario in cui ci si trova (nel senso che i file modificati un’ora fa risulteranno sempre con l’ora giusta qualunque cambiamento sia stato fatto nel fuso orario). con tutti i problemi che questo comporta quando si deve cambiare fuso orario (con file che possono anche risultare essere stati creati nel futuro). infine i secondi ss devono essere preceduti da un punto. e fa sempre riferimento al tempo standard universale (l’UTC appunto).

Se non si specifica nessuna opzione il comando si limita leggere il valore dell’orologio hardware e a stamparlo sullo standard output. secondo la localizzazione. anno abbreviato alle ultime due cifre.763201 seconds (risultato che si ottiene anche con l’opzione -r o --show). il nome del giorno della settimana. data. LA SHELL E I COMANDI Significato il carattere %. ora del giorno.3 I comandi di ausilio per la redirezione Nonostante la grande flessibilit` degli operatori di redirezione della shell. giorno del mese. che permette di impostare e l’orologio hardware.. il nome del mese. Tabella 2. 2. e lo si utilizza attraverso le opzioni. nella forma (0.12).. che provengono dalla linea di comando. con un risultato del tipo: monk:/home/piccardi/Truelite/documentazione/corso# hwclock Tue Sep 23 15:36:58 2003 -0. nella forma mm/dd/yy). esistono situazioni a in cui il loro uso non ` sufficiente a fornire le funzionalit` necessarie. anno completo. nella forma ( 1. Questo non ` ovviamente possibile perch´ l’uso e e di una pipe consente solo di passare lo standard output di un comando sullo standard input del successivo. secondo la localizzazione. ora del giorno. orario nella forma (hh:mm:ss [AP]M) su 12 ore.31). secondo la localizzazione. nella forma (01... numero di secondi. accessibili con info date. Ad esempio uno dei fraintendimenti pi` comuni riguardo l’uso della concatenazione dei cou mandi ` quello in cui si pensa di usare la pipe per passare come argomenti ad un comando e successivo l’output di un comando precedente.19: Direttive di formattazione per il comando date. nella forma (01. trovata solo nelle pagine info del comando. data nella rappresentazione secondo la localizzazione. Viceversa l’opzione -s (o --hctosys) imposta l’orologio di sistema al tempo di quello hardware. data e orario.12). e non ha nulla a che fare con gli argomenti di quest’ultimo.94 Direttiva %% %a %A %b %B %c %d %D %H %I %m %M %r %T %S %w %x %y %Y %Z CAPITOLO 2. che legge la linea di comando e ne estrae gli argomenti. ` E per` possibile provvedere questa funzionalit` con l’uso del comando xargs. Il comando poi permette di impostare l’orologio hardware con l’opzione --set.3. mese.. a Il secondo comando che riguarda la gestione del tempo ` hwclock.. giorno della settimana. nome convenzionale del fuso orario. Il comando non prende argomenti.59). orario nella forma (hh:mm:ss) su 24 ore.6) a partire dalla domenica. secondo la localizzazione. il nome del mese abbreviato. nella forma (00. il cui compito o a ` replicare il comportamento della shell. Si pu` per` usare l’opzione -w (o --systohc) per impostare l’ora direttamente al tempo o o segnato dall’orologio di sistema. il nome del giorno della settimana abbreviato. minuto. per questo esistono dei e a comandi che permettono di estendere l’uso della redirezione. nella forma ( 0. e Il comando cio` effettua la lettura standard input e ne ricava una lista di argomenti da passare e .23). secondo la localizzazione. dove si trova anche la trattazione completa tutte le funzionalit`. cui deve seguire un --date che specifichi la data da usare nel formato con cui la si specifica anche per date.

Per questo motivo lo strumento pi` usati dai professionisti nell’amministrazione u di sistema ` quello dell’editor di testi.3.4 Gli editor di testo Si ` preferito mantenere in una sezione separata la trattazione di una classe di programmi. quella di mantenere le configurazioni dei programmi all’interno di semplici file di testo. e quella degli editor di testo. quando a e si usa xargs. cos` come letti dallo standard input. che ha il semplice compito e (se invocato senza argomenti) di scrivere continuamente sullo standard input una serie di y. lanciare il comando senza argomenti per verificare che non si stiano facendo degli errori. separati da spazi. ` sempre consigliabile infatti. poi con il tempo e l’esperienza ognuno finir` con l’adottarne uno come preferito. come per la redirezione. Il comando. Il comando xargs prende come argomenti un comando da eseguire e le eventuali opzioni o argomenti iniziali. a 2. Un secondo problema ` quello che si ha quando si redirige lo standard output su un file e e si perde cos` la possibilit` di esaminarlo sullo schermo. Anche in questo caso ` possibile avere ı a e questa funzionalit` usando un comando apposito tee. Anche in questo caso l’utilit` di fare un comando per un compito cos` specifico diventa evidente a ı solo considerando la capacit` della shell di concatenare i comandi. GLI EDITOR DI TESTO 95 ad un successivo comando.1. che verr` usata al posto di y. Il comando permette di impostare. per le ragioni che tratteremo e in dettaglio in sez. Infine l’opzione -0 richiede che le linee sullo standard input siano terminate da zeri. con l’opzione -t inoltre a permette di stampare a video il comando eseguito.). si potr` usare un comando del tipo: a cat lista | xargs rm -f ovviamente nel far questo occorrer` stare molto attenti. ` a e in grado anche di eseguire la scrittura dei file in append usando l’opzione -a. e interpreta letteralmente i vari caratteri (in modo da non interpretare spazi. e per ogni riga ricevuta sullo standard input esegue il comando passandogli gli ` ulteriori argomenti. Un ultimo comando usato come ausilio per la redirezione ` yes. questi in genere mettono a . Lo scopo di questa sezione ` quello di mettere il lettore in grado di e cavarsela con i principali editor disponibili in tutte le distribuzioni. in questo modo diventa possibile ricevere gli argomenti dall’output di un comando precedente tramite una pipe. In questo modo diventa ad esempio possibile applicare un comando qualunque ad una lista di file usando semplicemente cat e xargs. Se non si passa nessun argomento viene usato echo come comando di default. Il comando non ha nessuna opzione specifica e prende come argomento una stringa.1 Introduzione Un’altra delle caratteristica fondamentali di un sistema unix-like `. accessibile con man e xargs. L’elenco completo delle opzioni ` riportato nella pagina di manuale. e Infatti nonostante stia crescendo la disponibilit` di strumenti che permettono le pi` comua u ni operazioni di amministrazione tramite una interfaccia grafica. per cui si pu` usare yes a o per pilotare automaticamente lo standard input di un comando che richiede conferme (come potrebbe essere rm -i).1. che vengono a costituire il principale strumento usato da tutti gli amministratori di sistema. con l’opzione -e una stringa da usare come marcatore per la fine del file. usando le virgolette o ı la barra trasversa. ecc. virgolette.4. e con -p di richiedere conferma dell’esecuzione sul terminale. in modo da ignorare tutto quanto sar` letto dopo. al solito tutte le opzioni ed i dettagli di funzionamento si trovano nella pagina di manuale. E possibile proteggere ı la presenza di spazi all’interno degli argomenti cos` come si fa con la shell. Se cio` si vogliono cancellare tutti i file contenuti nel e file lista. a 2.2.4.

La scelta dell’editor ` comunque una scelta personale. modificare e scrivere su un file di testo. gestire automatismi. leggere la posta e le news di Usenet. Tutto questo ha ovviamente un costo. ed infatti i detraxttori di emacs ne lamentano la pesantezza (di certo non lo troverete sulle distribuzioni su dischetto). ma restando nell’ottica dell’amministrazione di sistema tratteremo esclusivamente di editor accessibili da console. anche se questo fosse dotato degli strumenti grafici di amministrazione grafici necessari. Qualunque cosa sia possibile fare con del testo con emacs si fa. vanno da quelli dotati solo delle funzionalit` pi` elementari. Inoltre quando un qualche problema sul disco. a u come quelle di ed.54 le configurazioni sul sistema danneggiato andrebbero comunque effettuate a mano. ma data la diffusione e la potenza dello strumento. programmare (con evidenziazione della sintassi e scorciatoie ai costrutti principali di qualunque linguaggio). fare debug. uno dei primi editor che permette di operare solo su una linea alla volta55 ai pi` complessi e sofisticati. che pur svolgendo lo stesso compito di u base. che si pu` ottenere soltanto operando direttamente sui file di o configurazione. sar` a a sempre possibile usare una distribuzione su dischetto per rimettere le cose a posto. con i nomi pi` pittoreschi. anche se la diffusione della banda larga riduce il problema.96 CAPITOLO 2. e quindi utilizzabili anche attraverso connessioni remote con dei semplici modem. Sicuramente ` il pi` potente. non su quello danneggiato. Dato che l’editor di testi ha sempre avuto questo ruolo fondamentale. 55 quello che per questo viene chiamato un editor di linea. ma i cui comandi si ritrovano ancora in altri editor e pure in programmi come sed. comunque non entreremo nei dettagli dell’uso dei singoli editor. Nel prosieguo di questa sezione daremo una breve panoramica sull’uso dei pi` comuni editor u di testo. e come per molte altre applicazioni di uso generale ne esistono molte versioni. abbellire la visualizzazione. ne parleremo. 56 nome che in teoria vorrebbe dire Extensible MACro System. diventa il principale strumento dell’amministraizione di sistema. ma ` stato ribattezzato in Eight Megs And e Constantly Swapping. ` stato forse il primo e programma applicativo sviluppato sotto Unix. cio` un programma che permetta di leggere file di e testo e modificarne il contenuto. considerato 54 ovviamente.57 e per un qualunque compito specifico sono state create delle le estensioni pi` varie in u grado di eseguire operazioni complesse. Infine. come emacs che ha una quantit` infinta di funzionalit` diverse e u a a viene paragonato da alcuni esagerati ad un secondo sistema operativo. e non danno mai il completo controllo sul comportamento di un programma. dentro emacs si pu` davvero fare di e e u o tutto: navigare fra i file e in internet. o il classico rm -fR dato un po’ troppo allegramente da root avr` danneggiato qualche file essenziale o bloccato il sistema all’avvio. e la preferenza personale nei suoi confronti. giocare (a tetrix o a qualche avventura testuale). usare una interfaccia grafica da remoto resta sempre (considerazioni di sicurezza a parte) estremamente lento (e sostanzialmente impossibile senza una buona ADSL). u 2. un linguaggio funzionale estremamente potente che consente una enorme espandibilit` del programma. ed anche farsi psicanalizzare dal “doctor ”. ci limiteremo a esporre quali sono i comandi base per leggere. LA SHELL E I COMANDI disposizione solo un limitato numero di opzioni. la modifica dei file di testo. E quand’anche si usasse una delle tante distribuzioni su CD che sono in grado di fornire un desktop completo. infatti l’editor ` programe mabile. che origina dai tempi dei primi Unix quando i terminali erano delle vere telescriventi. questi opererebbero sul sistema corrente. 57 in un dialetto specifico del lisp.4.2 Un editor evoluto: emacs o xemacs Per molti emacs56 ` l’editor. a . mentre con la riga di comando si pu` usare un o terminale remoto e fare tutto quello che si vuole anche con la banda fornita da un semplicissimo modem analogico. i pi` blasonati fra gli editor di testi). che genera spesso clamorose guerre di e religione fra le fazioni dei sostenitori dei diversi editor (particolarmente virulente sono quelle fra i sostenitori di emacs e vi. ecc. l’editor. o Escape Meta Alt Control Shift. Per questo motivo. ma l` gli struı menti grafici non saranno disponibili. scrivere dispense come queste.

dato che ciascuna pu` a u o sua volta essere suddivisa a piacere. 2. anche operando in console.1. sono editor usabili direttamente anche dall’interfaccia grafica. con il solo problema che se se ne creano troppe non si vedr` a altro che barre di stato. ecc. questo verr` sempre inserito nella posizione in cui si trova il cursore (nell’ea emacs prevede una grande quantit` di combinazioni di tasti per andare avanti ed indietro..). Nella a prima riga si trova il men` dei comandi. che del testo generato automaticae mente nelle operazioni dell’editor (come le liste dei file da scegliere che compaiono quando si usa l’autocompletamento). GLI EDITOR DI TESTO 97 poi che molti altri editor ne hanno copiato la sintassi e le modalit` d’uso. u a Figura 2.4. in tal caso si otterr` una finestra come quella mostrata in fig. All’interno di una finestra ci si pu` spostare con le frecce e gli altri tasti di spostamento. con l’eccezione del men` e della barra di stato ` mantenuta in un buffer.done)) ed in cui si scrivono gli argomenti dei comandi pi` complessi. Come per tutti gli editor una sessione di emacs inizia invocando il comando seguito dal nome del file da modificare. u e sia che si tratti di un file che si ` aperto per lavorarci sopra. che riporta la scritta (Updating. Inoltre sia emacs. In genere un buffer viene visto su una finestra che ne mostra il contenuto ed ` terminata da e una barra di stato (nell’esempio ce n’` solo una). dove compare il u testo del file ed in cui ci si muove con le frecce. Questo o permette. con la peculiarit` di essere posizionato e a sull’ultima riga ed essere utilizzato per l’interazione con i comandi.58 o e scrivere del testo. o forniscono modalit` a a di comando compatibili. e e 58 .1 pu` venire divisa in due). spesso tutt’altro a che intuitive per chi proviene da altri sistemi. 2. di lavorare su due o pi` finestre. se sono state fatte modifiche. ad esso segue la sezione principale. Nella la riga finale viene tenuto il cosiddetto minibuffer.. che nacque proprio per questo. in cui compaiono brevi messaggi (come nell’esempio. Anche il minibuffer ` un buffer. questo ` una conseguenza che il programma ` nato quando ancora e e le tastiere non avevano n´ frecce n´ altri tasti di funzione. nel qual caso verranno forniti all’utente gli usuali men` a tendina in cui si potranno trovare buona parte delle funzionalit` di cui essi dispongono. che il suo cugino xemacs. ma all’interno di una stessa istanza dell’editor e possono anche esserci pi` finestre che possono essere aperte sullo stesso buffer o su buffer diversi u (questo vuol dire che ad esempio la sezione centrale di fig. terminato da una barra di stato in cui compaiono varie informazioni (il nome del file. qualunque porzione di testo venga e utilizzata da emacs. u Uno dei concetti fondamentali di emacs ` quello di buffer.1: Schermata di avvio dell’editor emacs.2.

Molti comandi inoltre prevedono l’uso di due combinazioni di tasti eseguite in successione. a meno di non porsi nella modalit` di sovrascrittura premendo il a a tasto INS (verr` notificato nella barra di stato) da cui si esce ripremendo lo stesso tasto. ecc. scartarle o cancellare l’operazione.61 Molti di questi comandi. ecc. provvedendo in ciascun caso diverse serie di combinazioni di tasti e diversi comandi di manipolazione. C-d in avanti e il tasto di backspace all’indietro. il programma ne mette a disposizione molti altri sia generici che specifici per a il tipo di file su cui si sta lavorando. per le tastiere che non ce l’hanno. Data la complessit` e la grande quantit` di a a comandi esistono due modificatori per i comandi. In tab. ripetendo si torna ulteriormente indietro nell’annullamento. premendo prima il tasto di o escape. e la capacit`.20: I principali comandi di emacs. per india e care la pressione contemporanea di un modificatore con un tasto qualunque X utilizzaremo una notazione del tipo C-X per l’uso di control e M-X per l’uso di alt (l’uso di M. In genere il testo viene inserito spostando quanto gi` presente nel file. 2.20 si ` riportata la lista dei comandi principali che sono attivi in qualunque modae lit`60 si usi emacs. se ci sono modifiche chiede se salvarle. il control. qualora i completamenti siano multipli. C-_. C-s cerca il successivo.3. C-y.. usano il minibuffer per ricevere i relativi dati. LA SHELL E I COMANDI sempio all’inizio della prima riga in alto a sinistra). inoltre in certi casi (come quello della specificazione di un file) la selezione supporta il meccanismo dell’autocompletamento (usando il tasto di tabulazione). Operazione aprire un file salvare un file salvare con nome uscire annullare seleziona Combinazione di tasti C-x C-f seguito dal nome del file nel minibuffer (supporta il completamento automatico). ad esempio tutti quelli che richiedono l’immissione di un nome di file. creare le intestazioni delle sezioni o delle tabelle. 60 essendo emacs un editor programmabile esso pu` essere usato in modalit` diverse a seconda del tipo di file o a su cui si sta lavorando. Come gi` visto in sez. C-x C-c. (ESC) e poi la lettera relativa. C-x C-w seguito dal nome del file nel minibuffer (supporta il completamento automatico). 59 .deriva dal fatto che il secondo tasto modificatore viene chiamato “meta” in tutta la documentazione di emacs). a I comandi invece vengono dati con delle combinazioni che prevedono la pressione contemporanea di un tasto modificatore 59 e di una lettera. il primo ` il classico control e ed secondo ` e e alt il cui uso pu` essere simulato. creare riferimenti a tabelle e figure presenti. di creare a automaticamente una lista di selezione in una nuova finestra. C-x spazio marca l’inizio di una regione e si porta in modalit` selezione.4. taglia incolla cancella ricerca help annulla Tabella 2. C-r cerca il precedente. C-h ? poi scegliere nella finestra quello che si vuole. C-w una volta selezionata una regione. e stampare messaggi. C-s seguito dal testo nel minibuffer esegue un ricerca incrementale sul testo specificato.98 CAPITOLO 2. C-x C-s. C-/ o C-x u. 1. In questo caso per spostarsi da una finestra all’altra occorrer` usare il comando C-x o (che ripetuto ritorna alla precedente). poi basta posizionarsi nel punto a finale. come ı il tasto per la maiuscole. 61 ad esempio scrivendo queste dispense con Latex si hanno tutta una serie di comandi per mettere le parole negli indici. si chiamano cos` i tasti che hanno un effetto solo quando sono premuti in contemporanea ad altri tasti. dove la si ` usata senza formalizzarne la definizione. (un comando) C-g o tre volte ESC. a mentre per eliminare tutte le finestre presenti tranne quella dove ` posizionato il cursore si potr` e a usare il comando C-x 1.

3 Un editor di base. forse erano due lettere rimaste libere e scelte a caso .2. 2. in particolare il fatto di essere un editor modale. presente fin dagli albori dei sistemi Unix ` vi. la sua lungheza in righe e caratteri e la posizione del cursore sulla prima colonna della prima riga). come l’evidenziau a zione della sintassi. 62 . vi Uno dei editor pi` diffusi. Il principale vantaggio di vi ` che essendo molto leggero e diffuso fin dalle prime versioni di e Unix lo si trova installato praticamente su qualunque sistema e molto spesso ` l’editor di default.. Succede spesso per` che al primo impatto non u o si riesca neanche ad uscire dall’editor. Figura 2.63 lasciando libera l’ultima linea. Al contrario di emacs (di cui ` il principale concorrente) vi si usa soltanto per manipolare e file di testo.4. il comando apre il file in modalit` comando in una finestra unica (mostrata in fig. Al solito vi si invoca passando come argomento il nome del file da modificare. hanno introdotto alcune capacit` avanzate. dove compare il testo a ed in cui ci si muove con le frecce.. e Inoltre anche se le funzionalit` del programma originale sono veramente minime. in cui cio` i comandi e il loro effetto dipendono dalla modalit` di operazioni corrente in cui si trova e a il programma. u Ma i fan(atici) tendono invece a considerarla una caratteristica utile in quando (secondo loro) con l’abitudine renderebbe pi` veloce le operazioni. Questa caratteristica lo rende senz’altro il meno intuitivo e pi` difficile da usare per il novizio. purtroppo i perch´ di questo nome si sono perse nei meandri del tempo. specie se capita di avere a che fare con una installazione che non ha attivato l’uso delle frecce. e non fornisce pertanto nessuna delle funzionalit` pi` evolute di emacs (come a u la possibilit` di fare debug dei programmi all’interno dell’editor facendo riferimento diretto al a codice su cui si sta lavorando) ma resta comunque un editor molto potente. usata per dare i comandi o ricevere le informazioni (nel caso il nome del file. esistono alcune a versioni pi` moderne. 63 le versioni installata in tutte le distribuzioni di Linux se non altro supportano nativamente l’uso delle frecce. dato che con le funzionalit` sono e a di pari passo aumentate anche le dimensioni.2). come vim.2: Schermata di avvio dell’editor vi. Non ` detto per` che quest’ultimo sia sempre disponibile al posto del vi e o normale e di certo non lo ` su una distribuzione di recupero. GLI EDITOR DI TESTO 99 2.62 Deriva dagli editor u e di linea e ne eredita alcune caratteristiche.4.

Un elenco degli altri comandi pu` a a o essere ottenuto con la documentazione interna. dw una parola.21 si ` riportata la lista dei comandi principali usati per i compiti pi` comuni. ma se ci sono modifiche non esce. in cui si entra con premendo a e R. :w nomefile. tenti di scriverci e non veda nulla finch´. lo spostamento nel file con i tasti h. se in fatti si ` in modalit` a e a di inserimento i tasti verranno utilizzati per scrivere e non intepretati come comandi. x cancella un carattere.21: I principali comandi di vi. Quando si avvia il programma questo si pone in modalit` normale. k. tutti i comandi pi` complessi (ad esempio quelli che richiedono una scrittura di una espressione di ricerca o di u un nome di file) devono essere invece dati dalla riga di comando. a ad esempio premendo i si passa in modalit` di inserimento. LA SHELL E I COMANDI Tutti i comandi di vi sono eseguiti con pressioni di singoli tasti.100 CAPITOLO 2. non sapendolo ci si trover` bloccati e a ed incapaci di uscire dal programma. e si pu` iniziare a scrivere in a o corrispondenza del cursore. per cui per abbassarsi di 10 righe si pu` o scrivere qualcosa tipo 10j. in questo caso il cursore si sposta dal testo e si pone sulla riga finale dove si potr` inserire il resto a dell’espressione. non entra in modalit` di e a inserimento. sovrascriver` a a quest’ultimo. d. ma ` una e estensione esclusiva di vim. Tabella 2. ma vale con questo significato solo con una selezione fatta con vim. Anche da questa modalit` si pu` uscire premendo il tasto di escape ESC. :q! le scarta. spostando il testo gi` presente. si e u tenga presente per` che essi possono essere specificati solo dalla modalit` normale. e in questo caso i tasti vengono a interpretati come comandi. alto e destra. che si attiva premendo :. La pressione dei tasti corrispondenti ai relativi comandi consente di cambiare modalit`. p inserisce l’ultimo oggetto cancellato. u ma sullo schermo non viene visualizzato nulla (se non l’effetto del comando). In tab. se ci si ` posti o a e in modalit` di inserimento prima bisogner` uscirne con ESC. d seguito da una altra lettera che specifica cosa cancellare. :w. una volta aperto un file. come a che vi entra ma riportandosi ad inizio riga o A che invece va a fine riga ed anche o che lo fa andando a capo creando una nuova riga. Come accennato vi supporta. / seguito da un testo o una espressione regolare. Una modalit` simile a quella di inserimento ` quella di rimpiazzo. ma la possibilit` di dare dei a comandi dipende dalla modalit` in cui si trova l’editor al momento. basso. e poi ci si sposta con i tasti di freccia. v. Inoltre una caratteristica dell’editor ` che qualunque comando dato in modalit` normale pu` e a o essere moltiplicato se lo si fa precedere da un numero. u solo sull’ultima modifica. Il problema in genere ` che una volta entrati in modalit` di inserimento l’unico e a modo per uscirne ` quello di premere il tasto di escape ESC. . ma quanto si scrive invece di essere inserito in corrispondenza al cursore. ESC annulla un comando. In questa fase molti dei comandi sono dati direttamente con la pressione di uno o pi` lettere. accessibile con :h. ` E allora abbastanza frequente che un utente alle prime armi. per le tastiere che non hanno frecce. premuto uno di questi tasti. j. in questo di nuovo tutti tasti assumeranno il loro valore letterale. Ma ci sono altri comandi che permettono di entrare in modalit` a inserimento. nel caso :qw le salva. dd una riga. 2. :q. l che effettuano rispettivamente lo spostamento a sinistra. a o Operazione aprire un file salvare un file salvare con nome uscire annullare seleziona taglia incolla cancella ricerca annulla Combinazione di tasti :ex file.

E a a ` possibile per` cancellare caratteri singoli (con x per quello corrente. gli affezionati del DOS noteranno che usa la sintassi di e wordstar.2. L’apertura di nuovi file deve essere fatta sulla riga di comando. Inoltre di solito il comando si pu` usare in modalit` di emulazione usando le o a sintassi di altri editor. per questi due comandi esistono anche delle versioni da date in modalit` normale e cio` a e rispettivamente ZZ e ZQ. 2.3.4. Il comando prende al solito come argomento il nome del file che viene aperto e visualizzato nella finestra principale.4 Gli altri editor Un altro editor leggero e potente ` joe. l’uscita invece si pu` forzare con e o :q!.4. mostrata in fig.2. Un’altra funzionalit` presente sulla linea di comando ` quella di sostituzione. e si esegue con :ex. Figura 2. Offre le tutte le normali funzionalit` di un a editor di testi ha un help in linea per i vari comandi che si attiva con C-k h. Un’altra caratteristica interessante della linea di comando di vi ` che ` possibile dare dei e e comandi di shell senza uscire dall’editor. 2. un word processor testuale di quell’epoca. con X il precedente). ma potremo anche usare le espressioni regolari con tutte le funzionalit` che si sono descritte in sez. si potr` cio` usare una sintassi del tipo “:!ls” per ottenere la a e lista dei file. che a e ha la stessa sintassi delle espressioni usate da sed. GLI EDITOR DI TESTO 101 Una delle caratteristiche che pu` lasciare pi` interdetti con vi ` che non esiste il classico o u e taglia e incolla in cui si seleziona una sezione qualunque del file. altri comandi che si possono utilizzare sono :w che salva il file e :x che salva ed esce. una volta entrati sulla linea infatti si pu` usare il o carattere ! come shell escape. potremo cio` effettuare una sostituzione di e una stringa con il comando “:s/ric/sost/g”.5. a meno che non usiate vim che definisce una modalit` visual (in cui si entra con v) che implementa questa funzionalit`. ed ` equivalente e al normale comando di uscita con salvataggio che ` :qw. ad esempio invocandolo come jmacs user` la sintassi dei comandi di a emacs. parole o (con dw) e righe (con dd).3: Schermata di avvio dell’editor joe. si pu` poi incollare quanto appena cancellato (anche pi` volte se si usano i moltiplicatori) con o u p. ed usare i moltiplicatori appena illustrati per cancellazioni multiple. che lo rende piuttosto facile da usare. La finestra presenta una riga di stato in testa . a 2.

4: Schermata di avvio dell’editor jed. C-k y in avanti e backspace indietro. C-k m muove la regione selezionata sulla posizione attuale. Tabella 2. Anche in questo a caso il comando non supporta il concetto classico del taglia e incolla. mentre con C-^ si ripete l’ultima operazione. C-c esce e se ci sono modifiche chiede d eventualmente scarta. Supporta anch’esso per` un u o linguaggio di programmazione interno.22 sono riportati i principali comandi per le funzionalit` di base. C-k d seguito dal nome del file. C-k x esce e salva. In tab. e utilizzare diverse sintassi per i comandi a seconda del tipo di file. LA SHELL E I COMANDI contenente i soliti dati (file. C-k c copia la regione selezionata sulla posizione corrente. C-k b all’inizio e poi spostarsi con le frecce e dare C-k k alla fine. posizione. ma una volta selezionata una sezione di testo consente solo o di spostarla o di copiarla. . e Operazione aprire un file salvare un file salvare con nome uscire annullare seleziona taglia incolla cancella ricerca annulla Combinazione di tasti C-k e seguito dal nome del file. C-k x. ed ` pertanto in grado di fornire parecchie funzionalit` e a avanzate.102 CAPITOLO 2. C-L cerca l’occorrenza successiva. e scompare quando non ` necessaria. 2. Figura 2. C-_. Fornisce anche un’ampia capacit` di evidenziazione della sintassi in console che con emacs ` disponibile solo a e nell’ultima versione. l’ultima linea viene usata per mostrare i messaggi e per dare i comandi o ricevere le informazioni. Un’altro editor per la console ` jed. C-k f seguito da un testo esegue la prima ricerca. che ` e e molto pi` leggero di quest’ultimo (ma anche molto meno potente). scritto come reimplementazione di emacs in C. lunghezza ed il suggerimento per ottenere la schermata di aiuto). (un comando) C-c.22: I principali comandi di joe. seguita dalla sezione principale in cui compare il testo del file ed in cui ci si muove con le frecce.

sulle quali vengono fatte pure le eventuali richieste di immissione o richieste scelte sulle azioni da compiere. anche questo ` un sottoinsieme di un’altro programma e e mc (nome che sta per Midnight Commander. Esistono infine anche versioni grafiche di alcuni u degli editor precedenti (come gvim per vi). ma pi` u leggero (tanto da essere usato nei dischi di avvio di Debian) e con qualche capacit` in pi`. 2. anche la composizione della finestra (una cui immagine ` mostrata in e fig. per questo ` uno degli editor a u e pi` potenti.20. a u Figura 2. per cui non staremo a descriverne i dettagli.5: Schermata di avvio dell’editor nano.4) ` analoga a quella di emacs per cui basta rifarsi quanto detto in precedenza. in cui si ha una riga di stato all’inizio. e si trova su varie distribuzioni su dischetto. che viene aperto nella finestra mostrata in fig.2. GLI EDITOR DI TESTO 103 Essendo jed in sostanza un clone di emacs non staremo a ripeterne i comandi principali. ma esistono tutta una serie di editor grafici come quelli inseriti in Gnome (gedit) e KDE (kate) che non sono spiegati qui in quanto l’interfaccia grafica ` in grado di dare accesso alle funzionalit` base e a con i soliti men`. Un altro editor molto usato ` mcedit. 2. il problema ` che siccome a e e pine non ` software libero. Il programma si invoca al solito passando come argomento il nome del file da modificare. Tutti gli editor citati sono in grado di funzionare in un terminale o dalla console. Data la maggiore utilizzabilit` rispetto a vi esso si ` diffuso parecchio. Essendo un editor leggero ma molto potente.5. il vantaggio e di jed ` che l’utilizzo del men` ` molto pi` intuitivo e avviene direttamente in modalit` semie ue u a grafica anzich´ all’interno di finestre secondarie. mentre come gi` accennato sia emacs che xemacs a usati dall’interfaccia grafica mettono a disposizione men` e utilizzo del mouse. separando da esso l’editor interno usato per per scrivere le email. pur restando anche facile da usare. questo ` derivato da pine. un client per leggere e e la posta elettronica in console. che sono gli stessi di tab. u . non lo ` neanche pico. Anche questo ` un editor che mantiene nella e prima riga un riassunto dei comandi principali. Un altro editor abbastanza diffuso ` pico. un file manager semigrafico utilizzabile in console che nasce come clone del Norton Commander. 2.4. e due righe di aiuto in basso che riportano i comandi disponibili al momento. per questo motivo ` stato realizzato un clone e e e completamente libero chiamato nano identico dal punto di vista dei comandi principali. u Fra gli editor grafici vale per` la pena segnalare uno dei pi` evoluti: nedit che dispone o u di un linguaggio di programmazione interna che ne permette una grande espandibilit` ed ` a e dotato di moltissime funzionalit` (forse il pi` vicino ad emacs).

104 CAPITOLO 2. LA SHELL E I COMANDI .

Descriveremo poi direttamente i file di configurazione di alcuni servizi di base.1. 1 root root root root root root root 4096 4096 4172 4096 4096 1660 44 Aug Aug Feb Feb Feb Feb Mar 21 21 15 26 28 26 10 2000 2000 01:27 21:21 23:47 21:21 02:33 CORBA GNUstep Muttrc Net X11 adduser.1).4). e si user` il file di configurazione di questo.2. dipendendo ciascuno dalla u sintassi adottata dal relativo programma. ma chiaramente se ne installer` uno solo. ed alcuni servizi di base. e non ` limitato e a quelli che tratteremo nel prosieguo di questa sezione. a 3. le sole due caratteristiche comuni che potete trovare nei file di configurazione su un sistema GNU/Linux sono che essi sono mantenuti. il registro. Questo vale in generale per tutti i file di configurazione. Si tenga comunque presente che alcuni file di configurazione (in particolare fstab e mtab) sono gi` stati descritti in precedenza (vedi sez.Capitolo 3 La configurazione dei servizi di base 3. non ` detto e che esse vengano sempre rispettate. nella directory /etc/ e che sono file di testo. vista la lunghezza dell’elenco che si produce o un comando come: [root@roke /etc]# ls -l total 1584 drwxr-xr-x 3 root drwxr-xr-x 3 root -rw-r--r-1 root drwxr-xr-x 2 root drwxr-xr-x 16 root -rw-r--r-1 root -rw-r--r-1 root .conf adjtime ad esempio esistono diversi programmi che gestiscono l’invio e la ricezione della posta elettronica.2.1 Una panoramica generale A differenza di Windows che tiene tutte le configurazioni in un unico file binario. per cui. per cui tutti i servizi sono forniti da opportuni programmi che non ` affatto detto siano sempre gli stessi anche per uno stesso servizio. a a 105 .1 I file di configurazione In questa sezione tratteremo la gestione generica dei file di configurazione all’interno di un sistema GNU/Linux. 1.3. come illustrato in sez. anche se esistono delle convenzioni generali come ignorare le righe vuote o considerare il carattere # l’inizio di un commento.. introducendo alcuni concetti validi in generale per qualunque file di configurazione. 1.1 Ci` comporta che e o i formati dei file di configurazione possano essere anche i pi` vari. come quelli che controllano il comportamento delle librerie dinamiche e quelli usati per il login. 1. Se da una parte tutto questo pu` spaventare. La ragione di questa frammentazione dei file di configurazione deriva dell’architettura del sistema (illustrata in sez..

quello di mettere in esecuzione i programmi.0 (0x4016a000) /lib/ld-linux. Questo ` il e meccanismo che permette di inserire tutto il codice comune usato dai programmi all’interno di opportune librerie.so. 2.6 (0x4003c000) libpthread. o nel caso di omonimia con un comando o una funzione di sistema. 4 a meno che questo non sia stato compilato staticamente. Una seconda cosa di cui bisogna tenere conto ` che Linux ` multiutente. accessibile usualmente con man nomefile.so.1. per quelli che prenderemo in esame faremo una descrizione generale.so.1 (0x401ba000) si ricordi quanto detto in sez.3 come ci siano delle directory specifiche previste dal Filesystem Hierarchy Standard che devono contenere i relativi file.2. Il comando prende come argomento il pathname assoluto del programma da analizzare e stampa a video il risultato.so.106 CAPITOLO 3.2 (0x40000000) libattr. ad esempio: piccardi@monk:~/Truelite/documentazione/corso$ ldd /bin/ls librt. Questo non ` un vero programma a se stante.1 => /lib/libacl. Questa ` una forma molto potente e pulita di e consentire a ciascun utente di personalizzare le sue scelte senza dover andare a scomodare le impostazioni generali di tutto il sistema.2. cio` in maniera da includere al suo interno tutto il e codice che altrimenti sarebbe stato disponibile attraverso delle librerie condivise. quelle che in Windows vengono chiamate DLL (da Dinamically Linked Library) e che nei sistemi unix-like sono chiamate shared object.so.so.2 In seguito.so.2 La gestione delle librerie condivise Una delle funzionalit` pi` importanti per l’esecuzione dei programmi in un qualunque sistema ` a u e quello della gestione delle librerie condivise. Per` per far s` che detto codice possa essere utilizzato dai singoli programmi occorre una o ı apposita infrastruttura.3 in modo che non sia necessario reinserirlo tutte le volte all’interno di ciascun programma.so. LA CONFIGURAZIONE DEI SERVIZI DI BASE dall’altra ha invece il grande vantaggio che le modifiche ad un singolo file di configurazione non hanno alcun modo di influenzare quelli di altri programmi. In genere questi file sono invisibili (iniziano cio` con un “. in maniera trasparente all’utente. quanto una sezione di codice che viene e sempre eseguita preventivamente tutte le volte che si deve lanciare un nuovo programma4 che permette di identificare le librerie condivise che contengono le funzioni necessarie e di caricarle automaticamente in memoria. Per verificare quali librerie dinamiche sono necessarie per l’esecuzione di un programma si pu` usare il comando ldd.so.1. ` E da tenere presente infine che per molti file di configurazione viene installata anche una pagina di manuale che ne spiega il formato.so. e abbiamo visto in sez. per questo varr` sempre la pena controllare la documentazione. 1. per cui ` molto e e e spesso possibile per ciascun utente scegliere le impostazioni che si ritengono pi` appropriate u per un programma mettendo un ulteriore file di configurazione nella propria home directory. trattando solo le caratteristiche principali. che contiene tutti i a dettagli. 3.1 (0x40035000) libc. che stampa sullo standard output i nomi delle librerie condivise di o cui esso ha bisogno.1 (0x40023000) libacl.”) ed hanno lo stesso nome del loro e analogo di /etc/ valido per tutto il sistema.3. 2. con man 5 nomefile.0 => /lib/libpthread. Il secondo enorme vantaggio ` e che essendo i file di configurazione dei file di testo ` possibile effettuare ricerche ed operazioni e complesse con i soliti comandi di shell abbondantemente trattati in sez.so.6 => /lib/libc.6 uno dei compiti fondamentali del sistema.1 => /lib/libattr.1 => /lib/librt. ed eseguire le operazioni di configurazione con un editor qualunque.1. viene realizzato attraverso il linkloader. 2.2 => /lib/ld-linux. Come brevemente accennato in sez.so. 3 2 .

le librerie cio` sono organizzate sempre con due numeri di u e versione. e sar` tranquillamente usabile (attraverso la diversa major version) senza nessun a 7 conflitto.2. In sez.5 Con questo si ottengono due risultati di grande rilevanza.so.3. Questo file si chiama /etc/ld.3. che contiene la lista delle altre directory che contengono le librerie condivise.2) venga rimappata o come prima major version. Se invocato con l’opzione -v il comando ldconfig stampa l’elenco di tutte le directory esaminate e delle librerie usate nella ricostruzione.6 il secondo ` che se e si ha bisogno di una versione vecchia delle librerie non c’` nessun problema. nel qual caso pu` di nuovo succedere di tutto.1. cos` come ı viene installato su una Debian Sid.conf. le altre opzioni al solito u sono descritte nella pagina di manuale del comando.conf. il primo ` che si pu` cambiare tranquillamente la minor version e o di una libreria senza che i programmi che la usano ne abbiano a risentire. ogni tanto qualche programmatore anche e non pi` alle prime armi la viola. in modo che il linker dinamico possa utilizzarle.1 -> librt-2. Pertanto se ad esempio si installa una nuova libreria dai sorgenti in /usr/local/lib.so. e viene generato (di norma tutte le volte che si installa una nuova libreria) con il comando ldconfig. 6 a meno che al solito un programmatore non troppo furbo non abbia usato una qualche funzione interna che non fa parte della interfaccia pubblica. dove e questa distinzione non esiste. ` il seguente: e /usr/local/lib /usr/X11R6/lib al solito ` una convenzione. major e minor.so. e 5 . 1. ma la libreria installata sar` comunque contenuta in un file con una sua specifica minor version. anche se quasi universalmente rispettata. I FILE DI CONFIGURAZIONE 107 ci fa vedere le librerie necessarie all’uso di ls. L’opzione pi` usata ` -v che permette di avere u e una descrizione pi` dettagliata con le informazioni relative alle versioni. a perci` quello che si fa ` creare un link simbolico alla versione effettiva. oltre alle canoniche /lib e /usr/lib.so 14 Sep 22 14:44 librt. sar` necessario aggiungerla in questo file e poi a eseguire il programma ldconfig per aggiornare i link alle librerie condivise disponibili e ricreare la cache.2.so un cui si pu` notare come una certa versione specifica di una libreria (la 2. basta installare e anche quella. che di norma non compare in /etc/ld.2. Si noti come le librerie siano file che terminano con l’estensione . Questa ` una delle caratteristiche e e pi` utili in un sistema unix-like. con il risultato che programmi che fino ad allora funzionavano perfettamente si u trovano a riportare errori o a terminare improvvisamente. ma di default il comando ldconfig esamina soltanto le directory /lib e /usr/lib.cache. ` sostanzialmente assente su GNU/Linux. Dato che il link-loader deve essere in grado di determinare quali sono le librerie che contengono le funzioni richieste da un programma tutte le volte che questo viene eseguito. Il comando ldconfig permette sia di ricostruire la cache che di ricreare i link alle ultima versione dei file delle librerie. mentre con -N e -X si pu` bloccare rispettivamente o la ricostruzione della cache e dei link. ed una convenzione vuole che le interfacce pubbliche delle librerie non debbano mai cambiare fintanto che non cambia la major version.3. per effettuare la ricerca in maniera efficiente viene utilizzato un apposito file di cache in cui sono state indicizzate tutte le informazioni relative alle funzioni presenti ed alle librerie in cui esse sono contenute. infatti queste vengono sempre cercate per numero di major version. Un esempio di questo file. se ci sono altre librerie condivise in altre directory queste possono essere specificate con un opportuno file di configurazione.so. come DLL hell.1 abbiamo visto come secondo il Filesystem Hyerarchy Standard le librerie possono essere mantenute in diverse directory. o 7 questo ` il motivo per cui il problema dei conflitti di versione delle librerie tristemente noto su Windows.so (che sta appunto per shared object) seguita da un numero che ` detto major version. per cui ad esempio avremo o e che: piccardi@monk:/lib$ ls -l librt* -rw-r--r-1 root root lrwxrwxrwx 1 root root 26104 Sep 21 14:56 librt-2.3. /etc/ld.

mentre con -n si pu` passare direttamente sulla linea di o comando una lista di directory dove effettuare la ricerca. le modalit` con cui queste informazioni vengono ottenute.conf Example configuration of GNU Name Service Switch functionality. cio` con le directory separate da dei “:”. e o per l’intero sistema.conf. ad esempio quelli relativi alla gestione di utenti e gruppi in sez. ` possibile inoltre specificare al sistema anche in e quale ordine utilizzare le varie fonti. . queste informazioni sono memorizzate in opportuni file di configurazione mantenuti sotto /etc. delle macchine ecc. si pu` ricorrere alla variabile di ambiente LD_LIBRARY_PATH. con degli ovvi problemi di estendibilit` e compatibilit`. ` il seguente: e # # # # # 8 9 /etc/nsswitch. all’inizio questo veniva fatto introducendo tutta la casistica possibile nell’implementazione delle funzioni stesse. a Il grande vantaggio del Name Service Switch ` che diventa possibile definire in maniera e modulare ed estendibile sia delle classi di informazioni (cosicch´ qualora si debba fornire qualche e nuovo servizio si ha l’infrastruttura gi` pronta) che il supporto (file. nella stessa forma usata per PATH. e u In genere si usa questa variabile quando si sviluppano delle librerie o se si vuole usare qualche pacchetto sperimentale oppure una versione alternativa delle librerie di sistema. permettendo configurazioni ibride. 12 il sistema ` stato introdotto la prima volta nelle librerie standard di Solaris.3 e quelli relativi alla rete in sez.3 Il Name Service Switch Una delle tante funzionalit` provviste dalle librerie standard del sistema ` fornire una serie di a e funzioni che permettono ai programmi di ottenere alcune informazioni relative alla gestione del sistema. 7. smetterebbero di funzionare praticamente tutti i programmi. in questo modo si pu` far uso di una libreria sperimentale senza conseguenze o per gli altri programmi9 del sistema che continueranno ad usare la versione abituale. per cui il sistema ` pi` lento). database o servizi di rete) a su cui queste informazioni sono mantenute. 4. configurabili in maniera indipendente. try: info libc "Name Service Switch" for information about this file. LA CONFIGURAZIONE DEI SERVIZI DI BASE Il default di ldconfig prevede l’uso di questo file.11 Con l’introduzione di queste estensioni si presentava per` il problema di come indicare alle o varie funzioni di libreria dove prendere le informazioni.6. Per le altre opzioni e la documentazione completa si consulti al solito la pagina di manuale disponibile con man ldconfig. con l’eccezione per i nomi delle macchine che possono essere forniti anche attraverso l’uso del DNS. un esempio di questo file. dato che se si usasse una versione non funzionante di una libreria fondamentale come la glibc. come i nomi degli utenti. Le modalit` di funzionamento del Name Service Switch vengono gestite attraverso il suo file a di configurazione che ` /etc/nsswitch.1.108 CAPITOLO 3. e di centralizzarle per interi gruppi di macchine tramite opportuni servizi. Infine. il a a Name Service Switch. 10 ne tratteremo alcuni in seguito.conf/etc/nsswitch. e come installato su una Debian Sid. le loro password.10 I sistemi moderni per` permettono di mantenere queste informazioni o anche in maniera diversa. i nomi dei gruppi. Per risolvere il problema venne creata una apposita interfaccia. If you have the ’glibc-doc’ and ’info’ packages installed. Infatti le librerie contenute nelle directory specificate tramite LD_LIBRARY_PATH hanno la precedenza e vengono utilizzate per prime. Tradizionalmente. in cui passare una lista8 di o ulteriori directory in cui verr` effettuata la ricerca di altre librerie (questa volta senza usare a l’indicizzazione. 3. nei casi in cui si vogliano utilizzare solo in forma temporanea delle librerie condivise. le librerie standard GNU hanno e ripreso lo stesso schema.12 che permettesse di demandare a delle librerie esterne. 11 gli esempi pi` comuni sono il NIS (Network Information Service ed LDAP (Lightweight Directory Access u Protocol ) due servizi di rete con cui si possono centralizzare le informazioni relative agli utenti. ma usando l’opzione -f si pu` specificare o un qualunque altro file al suo posto.

dove X fa riferimento alla versione delle glibc.X. identificatori di utente e gruppo principale. 4.3. corrispondenze fra nome a dominio e numero IP. ecc. separate da spazi. nel qual caso andr` installato l’apposito pacchetto (che per LDAP ` libnss-ldap) a e ed inserita la relativa parola chiave (nel caso ldap) nella adeguata posizione all’interno delle colonne che specificano dove sono disponibili i servizi.3). esse si trovano tutte in /lib/ e devono avere il nome a libnss_NOME.1: Le diverse classi di corrispondenze definite all’interno del Name Service Switch. 4.3. corrispondenze fra numero IP e MAC address della scheda di rete. terminata da un “:” indica una classe di informazioni. shadow password ed altre informazioni sulla gestione delle password (vedi sez. La prima colonna. .0 e 2 per le glibc 2.so. le modalit` con cui queste informazioni vengono fornite. corrispondenze fra nome di un protocollo e relativo numero identificativo. corrispondenze fra nome di un servizio RPC e relativo numero identificativo. la a ricerca dei dati sulle varie fonti sar` eseguita nell’ordine in cui queste sono indicate.3.3). 3. le e altre linee indicano una opzione.1. corrispondenze fra username. shell di default. di seguito vengono elencate.13 mentre NAME indica il tipo di supporto per quell’informazione (nel caso dell’esempio sar` files. La pagina di manuale contiene una lista completa delle opzioni disponibili.). I FILE DI CONFIGURAZIONE 109 passwd: group: shadow: hosts: networks: protocols: services: ethers: rpc: netgroup: compat compat compat files dns files db db db db files files files files nis Il formato del file ` sempre lo stesso. L’elenco a delle classi di informazioni disponibili ` riportato in tab. corrispondenze fra nome del gruppo e propriet` dello a stesso. db. 13 vale 1 per le glibc 2. ecc.1.1. (vedi sez. corrispondenze fra nome di una rete e suo indirizzo IP. alias per la posta elettronica. Per ciascuna nuova modalit` deve esistere una opportuna libreria che garantisce l’accesso a alle informazioni con quella modalit`. corrispondenze fra nome di un servizio e numero di porta. passwd group aliases ethers hosts netgroup networks protocols rpc services Tabella 3. le linee vuote o che iniziano per # vengono ignorate. a Di norma non c’` niente da cambiare in questo file a meno che non si aggiunga un ulteriore e supporto. e Classe shadow Tipo di corrispondenza corrispondenze fra username. corrispondenze gruppo di rete e macchine che lo compongono. come un sistema di autenticazione basato su qualche altro meccanismo (ad esempio su LDAP).

Analogo a issue ` il file /etc/issue. che poi sono spesso riutilizzati anche dagli altri programmi che eseguono la a procedura di collegamento al sistema. con l’uso di PAM (vedi sez.4 la procedura di login da terminale ` gestita dai due programmi e getty e login.2.3. nome del sistema (Debian. ad esempio con “\s” si inserisce automaticamente il nome del sistema operativo. attraverso dei moduli di PAM. hostname. attraverso l’uso del carattere “\”. che ` mantenuto e nel file /etc/motd.defs (che in realt` ` il file di configurazione del sistema di gestione delle shadow ae password. 1.3. 4.). 8. RedHat. 3.3. ma ` possibile e inserire delle direttive.110 CAPITOLO 3. come vedremo in sez. 4. Un altro file di controllo per la procedura di login ` /etc/securetty. Una volta completato il login viene invece mostrato un messaggio di benvenuto. architettura (i486. Viene o e usato dal programma login. LA CONFIGURAZIONE DEI SERVIZI DI BASE 3. che ` un semplice file il cui testo viene stampato sul terminale prima e della stringa “login: ”.3) detti file vengono ignorati. Al solito sono considerati commenti le righe che iniziano per # e ignorate le righe vuote. Questo file contiene la e lista delle console da cui si pu` collegare l’amministratore di sistema (cio` l’utente root). con “\n” il nome della macchina. Tabella 3.4) queste funzionalit` sono state inserite all’interno di questa libreria e gestite a dai relativi file di configurazione. trattate in sez. ora.4. e Opzione \d \l \m \n \r \s \t Significato data.net che viene usato al suo posto da telnet per i e collegamenti effettuati via rete. l’elenco completo ` riportato nella pagina di manuale di getty. ecc). se invece si usa ssh (vedi sez. Il contenuto del file viene stampato integralmente.3.4 I file usati dalla procedura di login Come accennato in sez.3). Questi usano una serie di file di configurazione che provvedono al controllo di alcune funzionalit`. versione del kernel. Il file contiene una serie di specificazioni di parametri.14 In quella occasione abbiamo accennato che il messaggio di presenza stampato sui terminali viene letto da /etc/issue.2: Principali caratteri di estensione per /etc/issue. che permettono di stampare alcune informazioni dinamiche. fatte nella forma: NOME valore quelle che concernono la procedura di login sono ad esempio LOGIN_RETRIES che imposta quante volte pu` essere ritentata la procedura di login. 4. mentre MOTD_FILE permette di specificare un altro file al posto di /etc/motd. e scrivere un messaggio in questo file ` una modalit` veloce per mandare un avviso a tutti gli utenti che entrano nel sistema. il nome del file sta per message of the day. ecc. e LOGIN_TIMEOUT che indica il numero di secondi o in cui il programma aspetta l’immissione della password prima di cancellare la procedura. con “\l” il nome del terminale. I principali valori sono riportati in tab. ppc. nome del terminale. Un esempio di questo file ` il seguente: e e # Standard consoles tty1 tty2 tty3 tty4 in genere sono gestiti. ` a e /etc/login. che legge da esso i nomi dei dispositivi di terminale (le tty) dai quali ` consentito l’accesso.1. e a Uno dei file che controllava15 una serie di funzionalit` relative alla procedura di login. 15 14 .

Per stabilire in quale directory si trovano gli originali delle pagine. dove mantenere gli indici delle pagine presenti e delle parole su cui effettuare le ricerche. Bench´ sia possibile e consentirlo aggiungendo una riga. La pagina di manuale fornisce una descrizione completa.1 il comando man supporta anche la possibilit` di generare docua mentazione stampabile.5 La configurazione del sistema delle pagine di manuale Come accennavamo in sez. che costruisce gli opportuni file con gli indici usati dai precedenti. questa infatti non ` diretta (come si pu` verificare e o tutte le volte che si installa un nuovo pacchetto e non lo si trova nei risultati di detti comandi). indici.config. I FILE DI CONFIGURAZIONE tty5 tty6 # Same as above. a 3. ma in uno speciale linguaggio di formattazione. dato che il suo contenuto ` ininfluente. l’amministratore pu` creare il file /etc/nologin. In genere il programma viene invocato periodicamente nelle operazioni giornaliere eseguite da cron (vedi sez. in che ordine cercarle.16 Infine quando si vuole bloccare temporaneamente l’accesso al sistema degli utenti normali. ogni linea definisce un nome di dispositivo dal quale ` e e possibile il login. La sua rimozione o ripristiner` l’accesso per tutti gli utenti. le opzioni principali sono o -c che gli fa ricreare tutti gli indici da zero (il default ` aggiornare quelli esistenti) e -p che e non fa eseguire la ripulitura degli indici dei dati della pagine non pi` presenti. e la generazione di vari tipi di formati in di uscita.1. ecc. la sua presenza serve solo a dire alla procedue ra di collegamento al sistema che solo l’amministratore pu` essere entrare. chiamato troff. ma lo si pu` anche invocare direttamente. but these only occur with devfs devices vc/1 vc/2 vc/3 vc/4 vc/5 vc/6 111 il formato del file ` sempre lo stesso. Dato che le console virtuali non sono indicate in questo file non ` normalmente possibile e eseguire un telnet da remoto per collegarsi come root su questa macchina. 2.1. e Tutte le volte che si richiama il comando man per visualizzare una nuova pagina di manuale il comando dovr` recuperare uno di questi file generando un testo in formato opportuno per a la visualizzazione. che permette la creazione di sezioni. Per evitare di ripetere il procedimento della generazione ad una successiva invocazione tutti questi file vengono salvati. dove devono essere memorizzate le pagine riformattate per la visualizzazione. per la descrizione u completa delle altre opzioni ed i dettagli sul comando al solito si faccia riferimento alla pagina di manuale.1). in una directory catN. cos` da poterli recuperare ı velocemente. quindi ` meglio se proprio lasciate e e perdere la cosa. Questo avviene perch´ in realt` le pagine di manuale non sono scritte e a direttamente nel formato in cui le vediamo su video. il sistema usa il file di configurazione /etc/manpath. in generale non ` comunque una buona idea neanche quella di usare telnet.3. le linee vuote o che iniziano per # vengono ignorate. Un secondo aspetto del sistema delle pagine di manuale ` quello dell’indicizzazione dei cone tenuti usata dai comandi whatis e apropos. 3. dove N corrisponde alla sezione cui appartiene la pagina. questo non ` propriamente un file di configuo e razione. ma viene effettuata normalmente tramite il programma mandb. fra cui quello del testo mostrato sul terminale ` uno fra i tanti. usualmente sotto /var/cache/man/. non ` assolutamente una buona idea per cui se volete farlo e dovrete studiarvelo da soli.3.3. 16 .

o ed in genere si otterr` qualcosa del tipo: a [piccardi@gont corso]$ manpath /usr/local/man:/usr/share/man:/usr/X11R6/man a meno di non aver definito in maniera diretta la variabile di ambiente MANPATH (nel qual caso sar` semplicemente stampato il suo valore) che permette di soprassedere il valore preimpostato a dal sistema. ed in un certo ordine rispetto alle altre. il primo indica una directory contenente i comandi. SECTION 1 n l 8 3 2 3pm 3perl 5 /usr/man /usr/share/man /usr/X11R6/man /usr/local/man /usr/share/man /usr/share/man /usr/share/man /usr/share/man /usr/local/man /var/cache/man/fsstnd /var/cache/man /var/cache/man/oldlocal /var/cache/man/local /var/cache/man/X11R6 /var/cache/man/opt 4 9 6 7 L’ultima direttiva. MANPATH_MAP /bin MANPATH_MAP /usr/bin MANPATH_MAP /sbin MANPATH_MAP /usr/sbin MANPATH_MAP /usr/local/bin . 2. indica l’ordine di ricerca delle pagine di manuale nelle varie sezioni. la direttiva prende come parametro il pathname alla directory contenente gli originali. La configurazione delle directory in cui cercare le pagine di manuale ` una di quelle mantenute e in manpath. e dove devono essere create le pagine temporanee. e Infine la direttiva MANDB_MAP serve ad indicare a mandb dove devono essere messi i file degli indici. Un estratto del file manpath.112 CAPITOLO 3.18. serve per aggiornare dinamicamente la lista delle directory in cui cercare le pagine di manuale sulla base delle directory presenti nel PATH (vedi sez. 17 .config. cos` come installato su una Debian Sid. il secondo la directory delle corrispondenti pagine di manuale.4) dell’utente. Se la prima compare nel PATH dell’utente la seconda ` aggiunta al MANPATH in maniera implicita. e deve essere ripetuta per tutte le directory che si vuole siano aggiunte alla lista. ` il seguente: ı e MANDATORY_MANPATH MANDATORY_MANPATH MANDATORY_MANPATH MANDATORY_MANPATH . La direttiva MANPATH_MAP indica invece la corrispondenza fra le directory dei comandi e le relative pagine di manuale...17 una lista di tutte queste directory si pu` stampare con il comando manpath. SECTION.. La direttiva MANDATORY_MANPATH serve per indicare tutte le directory che si vuole siano sempre aggiunte (se esistono) alla lista di quelle in cui si cercano le pagine di manuale. si noti come in questo caso ci siano altre sezioni oltre a quelle classiche illustrate in tab..1. ad esempio una versione pi` u recente a mano sotto /usr/local. si pensi al caso in cui si siano installate diverse versioni di uno stesso pacchetto. 2. La direttiva richiede due parametri.config.. LA CONFIGURAZIONE DEI SERVIZI DI BASE Il primo aspetto della configurazione ` quello della definizione delle directory in cui si trovano e le pagine di manuale. come per gli eseguibili infatti anch’esse possono essere installate in diverse sezioni dell’albero. in tal caso le pagine di manuale saranno sotto /usr/local/man ed il sistema deve essere in grado di vederle. MANDB_MAP /usr/man MANDB_MAP /usr/share/man MANDB_MAP /usr/local/man MANDB_MAP /usr/local/share/man MANDB_MAP /usr/X11R6/man MANDB_MAP /opt/man ..

.2 Altri file Raccogliamo in questa sezione le informazioni relative ad una serie di altri file di configurazione relativi a funzionalit` del sistema che non sono facilmente raggruppabili sotto un denominatore a comune. anche se connessi alla gestione degli utenti.2).3. come il nome stesso suggerisce. e le righe vuote sono ignorate. 3. sono /etc/shells ed il contenuto della directory /etc/skel. ALTRI FILE 113 3.local e si trova fra gli script di avvio (in /etc/rc.3.1 Il file rc. 3.boot Nella trattazione della procedura di avvio del sistema in sez. ad esempio vari server FTP rifiutano l’accesso ad username corrispondenti ad utenti che non hanno una shell valida fra quelle elencate in /etc/shells. compreso in fondo alla stessa. 4. 18 . in questo modo l’amministratore pu` lasciare all’utente la libert` o a di modificare la propria shell di login. Una modalit` alternativa (supportata ad esempio da Debian). Il file /etc/shells invece ` quello che contiene la lista delle shell valide che l’utente pu` e o selezionare con il comando chsh (vedi sez.3) in questo file. ` quella che contiene questo schee letro.3. ed assume un po’ il significato di quello che ` l’autoexec.18 a 3.2.4 vedremo che per far eseguire un proprio script nella sequenza di avvio baster` creare un opportuno link simbolico e come lo a si potr` inserire in un punto preciso della sequenza.3. Trattandosi di uno script di shell non si tratta propriamente di un file di configurazione.d o anche e direttamente in /etc/). 4. 5. o che hanno a che fare con la configurazione di comandi di base.boot nella quale si possono mettere gli script che si vuole siano eseguiti alla fine della procedura di inizializzazione.bat del DOS: contiene i comandi che si vogliono e eventualmente dare dopo che tutti i servizi sono partiti.2. infatti Debian esegue gli script usando lo speciale comando run-parts che. lancia tutti gli script presenti in una directory posto che il loro nome sia nel formato adatto. Tutti i file e le directory che si vuole siano creati nella home directory dei nuovi utenti (ad esempio una opportuna copia di . ` possibile creare uno scheletro del contenuto e della home directory di ogni nuovo utente in modo che questo sia automaticamente disponibile tutte le volte che se ne crea uno. e saranno automaticamente copiati nella relativa home alla creazione di ogni nuovo utente. 4. Un utente che voglia cambiare la propria shell di default potr` usare solo una shell fra quelle a che sono indicate in questo file. o Il file viene anche usato da alcuni servizi per verificare se un utente ` un utente normale. In tal caso occorre tenere presente che i file dovranno essere eseguibili. Il file utilizza il solito formato. in alcune a distribuzioni per` si ` soliti usare un file specifico per far eseguire dei comandi dopo che tutta o e la procedura di avvio ` stata completata. e sulla base della presenza della sua shell di login (tratteremo l’argomento in sez. Come vedremo meglio in sez.bashrc.local e la directory rc. Esso viene eseguito alla fine della procedura di avvio.2 La directory /etc/skel ed il file /etc/shells Altri file non classificabili in una specifica categoria.2 trattando i comandi per la gestione degli utenti.2. La directory /etc/skel. ` quella dell’uso della directory a e /etc/rc. le righe inizianti per # sono considerate commenti.bash_profile e di altri eventuali file di configurazione) possono essere messi in questa directory. Ogni riga non vuota contiene un solo campo che specifica il pathname completo del programma che pu` essere usato o come shell. e il loro nome non dovr` contenere caratteri speciali. come vedremo in sez.3. restringendola per` alle shell autorizzate.1.3. e In genere questo file ` rc.

Dato che normalmente il comando viene lanciato da uno degli script periodici eseguiti da cron (vedi sez. /etc/updatedb.daily/find: run at this priority -. Il contenuto tipico di questo file (cos` come ottenuto dalla versione ı installata su una Debian Sid) ` il seguente: e # This file sets environment variables which are used by updatedb # filesystems which are pruned from updatedb database PRUNEFS="NFS nfs afs proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs sysfs" export PRUNEFS # paths which are pruned from updatedb database PRUNEPATHS="/tmp /usr/tmp /var/tmp /afs /amd /alex /var/spool /sfs" export PRUNEPATHS # netpaths which are added NETPATHS="" export NETPATHS # run find as this user LOCALUSER="nobody" export LOCALUSER # cron.) e LOCALUSER indica l’utente con i permessi del quale sar` a effettuata l’indicizzazione.3. semplicemente lanciandola come un qualunque altro programma. which is usually +5) NICE=10 export NICE Trattandosi di una sezione di uno script (che sar` utilizzato con un source dallo script a che esegue la ricostruzione del database) la forma ` quella dell’assegnazione delle variabili di e ambiente che poi saranno usate da updatedb. e senza il -.higher number means lower priority # (this is relative to the default which cron sets. che serve come una specie di file di configurazione del comando. a o 3. 20 19 .114 CAPITOLO 3. 2. i filesystem virtuali come /proc o quelli di dispositivi estraibili. 3. non potr` per` cambiare quella con cui entra nel sistema al login. utilizzato come titolare dei programmi che devono avere accesso solo alle informazioni pubbliche.3 I servizi di base In questa sezione prenderemo in esame la configurazione di alcuni servizi di base del sistema.2. e un utente di servizio che non ha nessun privilegio nel filesystem. quest’ultimo prende una serie di opzioni (in forma estesa. gli spool delle a code di stampa e della posta.20 in modo da evitare che siano indicizzati file che gli utenti hanno protetto da lettura. nel caso nobody. Allora PRUNEFS indicher` i filesystem da non a indicizzare.conf Abbiamo visto in sez. LA CONFIGURAZIONE DEI SERVIZI DI BASE Si tenga conto comunque che un utente pu` comunque installare nella propria home directory o un’altra shell ed usare quella al posto della shell di login.1). ecc. ecc. come quelli per l’esecuzione periodica dei comandi.conf.iniziale. si consulti la pagina di manuale) che gli permettono di definire quali directory (ad esempio non ha molto senso indicizzare /tmp) e quali filesystem (non ha senso indicizzare un CDROM) inserire nel database dei file e quali no.2 come con locate si possa ricercare la presenza di un file utilizzando un database di tutti quelli presenti creato attraverso il comando updatedb.2. Oltre alle opzioni il comando utilizza delle omonime19 variabili di ambiente per ottenere le stesse impostazioni. In genere questi sono realizzati da degli appositi programmi detti demoni (si ricordi quanto detto in rispetto al nome delle opzioni le variabili sono scritte in maiuscolo anzich´ miniscolo. quello che viene fatto ` di impostare queste varibili e di ambiente all’interno di un file. il sistema di gestione dei log. come quelli di rete. PRUNEPATHS indicher` le directory da non indicizzare (quelle dei file temporanei.3 Il file /etc/updatedb. 3.

ogni riga deve contenere o una assegnazione di una variabile di ambiente (nello stesso formato usato negli script di shell) o la specificazione di una azione periodica. il server DNS (vedi sez.5. accessibile con man 5 crontab. a Per ulteriori dettagli si faccia riferimento alla pagina di manuale del file.1. trattati rispettivamente sez. 1. a Si tenga presente che siccome il programma specificato nella parte conclusiva della linea viene eseguito direttamente dal demone crond. I SERVIZI DI BASE 115 sez. mese dell’anno (da 1 a 12) e giorno della settimana (da 0 a 7. Il demone crond di GNU/Linux21 supporta poi alcune estensioni non presenti in altri sistemi unix-like: si pu` usare una lista (separata da virgole) per indicare pi` valori. This file also has a username field. L’azione viene specificata da una serie di campi separati da spazi o tabulatori. In particolare ` da tenere presente e che il demone si limita a definire solo alcune di esse ed in particolare per quanto riguarda PATH questa comprender` soltato le directory /usr/bin e /bin. preso dal file installato di default su una Debian Sarge.3. essenziale per compiere tutte quelle operazioni che devono essere eseguite a periodi fissi. 3. implementato attraverso l’uso del demone crond. Thu. 3. u . cos` ad esempio usando */2 nel ı primo campo si intender` chiedere la ripetizione del lavoro ogni due minuti.3.2. Il formato del file segue la solita regola di ignorare righe vuote ed inizianti per #. etc. un intervallo. Un esempio del contenuto del file /etc/crontab. creato da Paul Vixie. noto anche per essere l’autore di bind. Questa funzionalit` viene gestita dal servizio a chiamato cron. In genere si deve intervenire su questo file e e solo quando si vuole cambiare uno degli orari a cui le operazioni vengono eseguite o per inserire una nuova operazione periodica.3. that none of the other crontabs do.3 e 3. dove sia 0 che 7 indicano la domenica). I cinque campi della periodicit` indicano rispettivamente: minuto (da 0 a 60). Il primo file controllato da crond per decidere se c’` da eseguire una operazione ` questo.3. il sesto campo indica l’utente per conto del quale eseguire il comando scritto nel seguito della riga.1 Il servizio cron Una funzionalit` importante presente in qualunque sistema operativo ` quella dell’esecuzione di a e programmi su base periodica. e Il file di configurazione principale di crond ` /etc/crontab che contiene l’elenco dei delle e operazioni periodiche generali da eseguire nel sistema. come la creazione del database dei file e l’indicizzazione delle pagine di manuale. o u specificando gli estremi separati con un “-”. Infine il programma supporta la possibilit` di a specificare periodi personalizzati attraverso l’uso del carattere jolly abbinato con il carattere “/” seguito dal divisore da applicare al valore generico del campo. Per questo motivo se necessita la a presenza di altri valori o altre variabili occorrer` inserire in testa al file le relative definizioni. Il demone ha il compito di svegliarsi ogni minuto ed eseguire ogni programma che ` stato programmato per quel momento. 9) pi` usato nel mondo. Se il tempo corrente corrisponde a tutti i valori specificati nei cinque campi il comando viene eseguito. ora (da 0 a a 23). ` il seguente: e # # # # 21 /etc/crontab: system-wide crontab Unlike any other crontab you don’t have to run the ‘crontab’ command to install the new version when you edit this file.4) che lavorano in background ed il cui comportamento ` controllato dai relativi file di e configurazione. giorno del mese (da 1 a 31). i primi cinque indicano la periodicit` con cui il a comando indicato nell’ultimo campo viene eseguito. L’utilizzo del carattere * vale da jolly e lo si usa per indicare un valore qualsiasi. non saranno necessariamente definite le usuali variabili di ambiente presenti normalmente quando si esegue una shell. si tratta del programma vixie-cron. per qiest’ultimo campo sono accettati anche valori tipo Mon.

l’intallazione di default presuppone che la macchina non ne abbia bisogno. per cui il comando non sar` a presente e verr` eseguito invece run-parts.weekly/.22 tutte le domeniche alle 6:27 e tutti i primi giorni del mese alle 6:52. allo stesso modo si interpretano le altre due righe.24 Se lo si chiama con l’opzione -e questo invocher` l’editor prea definito (di norma ` vi. il carattere di sottolineatura ed il “-” (per i dettagli si consulti la relativa pagina di manuale). In assenza di detti file chiunque pu` usare il servizio. Si tenga presente che l’amministratore pu` riservare l’uso del servizio cron solo ad alcuni o utenti. a 24 i file vengono mantenuti in /var/spool/cron/crontabs. mese e giorno della settimana sono qualsiasi. Infine con -u si potr` modificare a (solo da parte dell’amministratore) la tabella dell’utente specificato come parametro. dato che l’utente ` gi` ben definito. nel quale si devono elencare gli username degli utenti che lo possono usare.daily 7 root test -e /usr/sbin/anacron || run-parts --report /etc/cron. ore 6. o a senza che questa debba essere periodica. che e nel caso non ` necessario e non deve essere specificato. perch´ run-parts non esegue gli script il cui nome contiene e caratteri diversi da lettere maiuscole e minuscole. per cui se non si hanno esigenze particolari non ` il caso di intervenire su questo file ma di aggiungere il e proprio script direttamente in /etc/cron. e e a Se lanciato senza opzioni il comando prende come argomento il file da usare come tabella. Il contenuto standard di questo file gi` prevede una serie di azioni giornaliere.deny che di nuovo dovr` contenere la lista degli username a di coloro che non possono usarlo.daily/. Queste azioni sono eseguite attraverso il comando run-parts23 dagli script presenti nelle directory elencate nell’esempio precedente. in modo da poter riutilizzare l’output del comando direttamente come input per un successivo crontab -. Il e formato di questo file ` identico a quello di /etc/crontab con l’eccezione del sesto campo. creando il file /etc/cron. o 3. Se il file non esiste ` possibile vietare l’uso del servizio solo ad alcuni utenti e con la creazione del file /etc/cron. 25 la versione usata da Debian in realt` non stampa le righe di commento iniziale che avvisano di non modificare a direttamente il contenuto del crontab. il quale si incarica anche di eseguire le operazioni che non sono state effettuate perch´ la e macchina era spenta.3. questo ` un sostituto di crond per le macchine che non ` previsto e e siano sempre accese. Per provvedere a questo compito esiste un altro servizio. se ` installato le operazioni periodiche vengono eseguite da lui e non ` necessario l’intervento e e di crond. Si pu` poi vedere la lista delle operazioni programmate o usando l’opzione -l che scrive sullo standard output il contenuto del crontab dell’utente. Oltre ai compiti generali appena illustrati il servizio cron ` in grado di eseguire anche operae zioni richieste da un singolo utente. settimanali e a mensili che vengono eseguite in maniera automatica.2 Il servizio at Abbiamo visto nella sezione precedente come si pu` programmare l’esecuzione periodica di proo cessi con crontab. in questo caso questi dovr` creare un suo crontab personale a tramite il comando crontab. a meno di non aver impostato diversamente la variabile EDITOR). LA CONFIGURAZIONE DEI SERVIZI DI BASE SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h 25 6 47 6 52 6 dom * * * * 1 * mon dow user command * root test -e /usr/sbin/anacron || run-parts --report /etc/cron. Occorre comunque fare attenzione. 23 nel file di crontab mostrato nell’esempio viene fatto un controllo preventivo della presenza del comando anacron (installabile dal pacchetto omonimo). /etc/cron. usando “-” si legge direttamente dallo standard input.116 CAPITOLO 3.25 Con -r invece si esegue la rimozione completa della tabella corrente.allow. numeri.monthly in cui sono riportate le azioni standard che vengono eseguite tutti i giorni alle ore 6:25. esistono per` anche necessit` di avere una esecuzione differita dei programmi.monthly/. per il nome dal comando che permette di richiedere l’esecuzione di un programma ad 22 la prima riga si legge appunto come minuto 25. essendo le altre indicazioni tutti * si intende che giorno. di cui legge il contenuto che deve essere nella forma in cui lo si scriverebbe con l’editor. . detto at. /etc/cron.weekly * root test -e /usr/sbin/anacron || run-parts --report /etc/cron.

che si occupa di fornire una sorta di servizio di segreteria telefonica. l’orario per cui ` stata programmata e l’esecuzione. Il demone pu` essere anche lanciato manualmente. ma in caso di necessit` lo si pu` anche a o lanciare direttamente (ad esempio per poter utilizzare l’opzione -d che attiva la modalit` di a debug). Il comando vuole come argomento data ed ora in cui il programma specificato e deve essere messo in esecuzione. a a fra cui tutti quelli del comando date. dove i vari programmi che devono dire qualcosa possono scrivere i loro messaggi. ed ` possibile attivarlo e e e disattivarlo direttamente con l’uso diretto degli stessi. in una opportuna coda. a e vari programmi per la gestione della stessa. Ogni regola ` costituita da due campi separati da spazi o tabulatori. Dato che detti programmi non sono associati ad un terminale non ` loro e possibile scrivere messaggi di avviso o di errore. Di nuovo un utente normale pu` operare o solo sui propri programmi. Se si vuole abilitare la ricezione di messaggi via rete invece occorre utilizzare l’opzione -r. il cui formato e significato sono identici a quello degli analoghi cron. Di norma il servizio ` attivato automaticamente dagli script di avvio. La directory di lavoro e l’ambiente del comando che verr` lanciato sono quelli presenti al momento in cui si invoca at. Una descrizione completa di queste si u trova nel file /usr/share/doc/at/timespec. mentre l’amministratore pu` usare lo stesso comando per vedere la lista di tutti o quanti.conf. I SERVIZI DI BASE 117 un tempo successivo. per questo esiste un demone apposito.3. Il comando di base. oltre il quale non saranno i programmi programmati (di default vale il valore preimpostato di 1. o Infine come per l’uso di cron ` previsto un controllo degli accessi al servizio attraverso i e due file /etc/at. Il servizio comporta diverse modalit` di gestione della esecuzione differita.allow e /etc/at. Il file di configurazione per il demone syslogd ` /etc/syslog. 3. Gli utenti possono vedere la lista dei propri programmi in coda con il comando atq. e Il demone controlla la presenza nelle code di programmi in attesa di essere eseguiti. e prevede o come opzioni -l che permette di impostare manualmente un limite massimo per il carico della macchina. che come crond viene lanciato dagli script di avvio. per ciascun utente. Il comando cio` e sar` posto in esecuzione solo quando il carico medio della macchina scende sotto un certo valore.deny.allow e cron. Il servizio ` realizzato dal demone atd. Il formato del file ` e e sempre lo stesso. -b che permette di impostare un intervallo di tempo minimo (il default ` 60 secondi) fra la messa in esecuzione e di due successivi programmi.deny.3. che prende come argoo mento l’identificativo dello stesso ottenibile con atq. che permette di programmare l’esecuzione di un programma ad un dato momento.5. syslogd. le linee vuote o che iniziano per # vengono ignorate. a Una volta programmata l’esecuzione di un programma questo viene messo. il e . il nome di quest’ultimo viene letto dallo standard input o pu` o essere specificato direttamente dalla riga di comando con l’opzione -f. La descrizione completa del comando e di tutte le opzioni ` disponibile nella pagina di e manuale. ` at. Al solito per l’elenco completo si pu` fare riferimento alla pagina o di manuale. e li manda in esecuzione al tempo stabilito. a Il comando supporta una grande variet` di formati per le modalit` in cui si indica la data. Un programma pu` essere rimosso dalla coda con il comando atrm. ha senso cambiarlo solo in caso di macchine multiprocessore). Il comando stampa il nome di ciascun programma. mentre l’amministratore pu` operare su tutti quanti. ed un numero identificativo ad esso associato.3.3 Il servizio syslog Il servizio di syslog ` il servizio usato dai demoni che girano in background (e dallo stesso kernel) e per inviare dei messaggi. pi` altre estensioni che permettono di usare anche speciu ficazioni in forma pi` discorsiva come at 1pm tomorrow. ogni linea definisce una regola di registrazione. Una alternativa ad at ` l’uso del comando batch che permette di programmare una esecue zione differita non in base ad un orario ma in base al carico della macchina. al solito accessibile con man syslogd.

messaggi del sistema UUCP (Unix to Unix CoPy. sinonimo di err. identificati dalle parole chiave da local0 a local7 che sono lasciati a disposizione dell’utente per un uso non specifico. LA CONFIGURAZIONE DEI SERVIZI DI BASE Significato servizio identico a authpriv.118 Servizio auth authpriv cron daemon ftp kern lpr mail mark news security syslog user uucp CAPITOLO 3. deprecato.3. che in questo caso esso dovr` u e a . Tabella 3. il sistema ` inusabile. un asterisco “*” seleziona o tutti i servizi o tutte le priorit` mentre la parola none li esclude tutti. dove sono elencati i servizi standard predefiniti. tutti i messaggi di priorit` superiore u a od uguale a quella indicata nella regola verranno registrati. condizione critica. Priorit` a debug info notice warning warn err error crit alert emerg panic Significato messaggio di debug. condizione di errore. si deve intervenire immediatamente. uso interno. il e e servizio e la priorit`. dalla pi` bassa alla a u pi` alta. messaggi dai demoni di gestione della posta elettronica. sinonimo di auth. deprecato.” mentre u ulteriori estensione di questa sintassi sono date dal segno “=” che permette di registrare solo una specifica priorit`.” permette di a elencare una lista di servizi per la stessa priorit`. 3. avvertimento. a Oltre a queste parole chiave syslogd riconosce alcune estensioni. Questi identificano l’importanza del messaggio. una “. I valori delle priorit` invece sono indicati in tab. situazione normale. o viceversa una lista di priorit` per un certo a a servizio. e dal segno “!” che permette di escludere una specifica priorit`. deprecato. demoni di sistema che non hanno una categoria di servizio a se stante. messaggio informativo. messaggi del servizio di gestione di USENET (la rete dei gruppi di discussione). separate da un punto. il secondo azione. messaggi generici a livello utente. messaggi interni generati da syslogd. sinonimo di warning. messaggi del kernel. e viene specificato tramite una delle parole chiave riportate in tab. ma significativa. Tabella 3. messaggi dei demoni (at e cron) . Il servizio identifica una categoria di servizi di sistema per conto dei quali si vuole registrare il messaggio. e sinonimo di emerg. Oltre a questo ci sono poi una serie servizi ausiliari. primo campo ` detto selettore. deprecato. un meccanismo di comunicazione precedente internet). servizio FTP (File Transfere Protocol. Per una descrizione completa di tutti i dettagli si a faccia al solito riferimento alla pagina di manuale. Il campo selettore ` costituito da due parti.4: Le varie priorit` dei messaggi del servizio di syslog. il caso pi` comune ` scriverli in un file. messaggi relativi ad autenticazione e sicurezza.3: I servizi standard in cui sono classificati i messaggi del syslog. Si possono infine associare pi` selettori ad una stessa azione separandoli con il “. messaggi dai servizi di stampa.4 in ordine crescente. a a L’azione usata come secondo campo ` un termine astratto per descrivere come si vuole che e siano registrati i messaggi. 3.

=info.* /var/log/uucp.log # # Logging for the mail system.mail. I SERVIZI DI BASE 119 essere specificato dal pathname assoluto.3.\ mail.warn mail.log *.\ auth. lpr. daemon.=debug.conf ` il seguente. oppure si pu` mandare l’output su una o console specificando come file quello di un dispositivo a terminale (ad esempio /dev/tty10).authpriv. ad esempio se si premette un “|” al nome del file si indica che si sta facendo riferimento ad una fifo (vedi sez. user e uucp vengano salvati su file a parte. La potenza di syslogd ` comunque quella di permettere di effettuare le registrazioni in e maniera estremamente flessibile.log lpr.* -/var/log/user.*. mail.none -/var/log/syslog #cron.authpriv.* /var/log/auth. kern.authpriv.* -/var/log/mail.2.none -/var/log/debug *.authpriv.\ auth.* -/var/log/lpr.=warn. lasciando spazio per la bufferizzazione degli stessi.*. Un esempio per il file /etc/syslog.info -/var/log/mail.* /var/log/cron.log kern. che si ` estratto dal file di riferimento e e che viene installato di default su una Debian Sid: auth. e questi li riceveranno sul terminale su cui sono collegati. mentre sul file syslog vengono mandati tutti i messaggi eccettuati quelli relativi ad auth e autpriv. Vengono poi definiti alcuni file per i messaggi generici come messages in cui si richiede l’invio dei messaggi solo delle priorit` info.log daemon. Una delle caratteristiche pi` utili del syslog ` che si possono mandare tutti i messaggi ad una u e macchina remota.news.none.1). infine il carattere “*” fa si che i messaggi siano inviati a chiunque sia collegato.* -/var/log/daemon.\ news.none.*.=notice.auth. in modo o ı da proteggere i file di log.daemon.log user.err /var/log/mail. identificati per username e separate da virgole. Inoltre sono trattati a parte i messaggi relativi al sistema di posta.* -/var/log/kern.3. dove per ciascuna priorit` viene usato un file a a parte. # *. si pu` inserire un “-” opzionale davanti al nome per o impedire che il contenuto del file venga sincronizzato ad ogni messaggio. notice e warn escludendo una serie di servizi i cui a . Si possono anche mandare i messaggi a liste di utenti.log uucp. 1.\ cron. che spesso possono contenere informazioni preziose utili in caso di intrusione (ovviamente detta macchina deve essere molto ben protetta).log mail. Questo si fa usando il carattere “@” seguito dall’hostname della destinazione.emerg * In questo caso si noti come tutti i messaggi relativi ai servizi auth e authpriv. Si pu` realizzare cos` un macchina dedicata solo a questo servizio.none.err # # Some ‘catch-all’ logfiles.info mail.none. Split it up so that # it is easy to write scripts to parse these files. Se su quella macchina ` stato predisposto un syslogd abilitato all’ascolto via rete questo ricever` e a tutti i messaggi.warn -/var/log/mail. # mail. # *.none -/var/log/messages # # Emergencies are sent to everybody logged in.

Il formato del file di configurazione prevede la presenza di una direttiva per riga. notifiche. Infine come per gli altri file di configurazione le linee vuote o che iniziano per # vengono ignorate. acccessibile con man logrotate. quando il comando viene invocato viene controllato se la condizione ` soddisfatta e solo in e questo caso (a meno di non aver specificato l’opzione -f) la rotazione viene eseguita. Per risolvere questo problema esiste il programma logrotate che.) provenienti dai vari servizi. 3. etc. Il comando deve essere lanciato specificando come argomento un file di configurazione che specifica le modalit` di rotazione. a a parte quelli con alcuni caratteri o con certe estensioni che li identificano come copie. In genere si mettono in logrotate. inserisca in questa directory un opportuno file di configurazione per logrotate quando viene installato.conf cos` che non ci ı sia necessit` di modificare quest’ultimo ogni volta che si installa un altro pacchetto. riempiendo la partizione su cui risiede la directory /var/log/ in cui normalmente vengono memorizzati.d/. Questo consente ad ogni servizio che gestisce autonomamente i suoi file di log. mentre -f forza il comando ad eseguire una rotazione anche a quando questa non ` in programma.5. lanciato su base periodica. L’opzione -d permette di eseguire il comando in modalit` di debug (ed implica -v).120 CAPITOLO 3. Una direttiva particolare ` include che permette di includere altri file all’interno della confie gurazione. 26 . specificate sempre una per riga. la descrizione completa di tutte le direttive e del loro significato si trova nella pagina di manuale del comando. Queste possono essere specificate direttamente nel file e vengono prese come impostazioni globali da ´ applicare in maniera generica a tutti i file. In questo modo si fa si che ogni pacchetto che ha bisogno di produrre dei log e ruotarli. 3. la cui produzione ` governata dal demone syslogd appena trattato. Infine si noti come le emergenze (ad esempio i messaggi di uscita di shutdown) vengano stampati su tutti i terminali attivi. contenente le direttive da applicargli. weekly o e monthly) che sulla base del superamento di una certa dimensione (con la direttiva size).4 Il sistema di rotazione dei file di log I file di log. In quasi tutti i casi negli script viene usato come standard il file di configurazione /etc/logrotate.d/. (al solito da crond) gestisce la rotazione dei file di log specificati. Bench´ sia possibile lanciare il comando a mano. ed e-mail di avviso all’amministratore. gran parte delle distribuzioni invocano e logrotate fra le operazioni giornaliere eseguiti da crond. Se si usa l’opzione -v il comando stamper` una serie di a a messaggi durante le operazioni di rotazione.5). avvertimenti. Le altre principali direttive sono riportate in tab.conf mentre ulteriori file di configurazione di singoli servizi sono mantenuti nella directory /etc/logrotate. definibili con la direttiva tabooext (vedi tab. le opzioni specifiche per ciascun servizio vengono messe nella directory /etc/logrotate. per cui si rischia e che finiscano fuori controllo. di usare un suo file di configurazione con delle impostazioni personalizzate semplicemente scrivendolo in una directory comune. u e o in tal caso infatti vengono inclusi tutti i file in essa contenuti26 . LA CONFIGURAZIONE DEI SERVIZI DI BASE messaggi sono archiviati altrove. La rotazione pu` essere specificata sia per intervalli temporali (con le direttive daily. sono una e delle caratteristiche pi` utili di un sistema unix-like in quanto vi sono registrati i messaggi u (errori. con tanto di eventuale compressione.conf solo alcune opzioni generali.3. Al solito per l’elenco completo delle opzioni si pu` fare e o riferimento alla pagina di manuale. E poi possibile indicare delle opzioni specifiche per un singolo file scrivendo al posto di una direttiva il pathname assoluto di quest’ultimo seguito da un blocco delimitato da parentesi graffe. Il contenuto della directory viene poi incluso dall’apposita direttiva presente in logrotate. e per questo sono di importanza fondamentale per capire le ragioni di eventuali malfunzionamenti. 3. Il suo uso pi` interessante ` per` quello in cui viene usata per includere una directory. rimozione delle versioni troppo vecchie. Il problema con i file di log ` che essi tendono a crescere di dimensione.

legge tutti il file passato come parametro. i commenti spiegano in e maniera molto chiara il significato delle varie opzioni. .conf ` il seguente. l’esempio ` estratto dalla versione del file e installata su una Debian: # see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.5: Le principali direttive usate nel file di configurazione di logrotate. M e G).swp. . crea un nuovo file di log vuoto immediatamente dopo aver eseguito la rotazione del precedente assegnandogli un insieme di permessi. specifica il numero di copie (da passare come parametro) dei file di log che devono essere mantenute in una successione di rotazioni.3. . . richiede che si specifichi la dimensione come parametro (supporta i suffissi k. . I SERVIZI DI BASE Direttiva daily weekly monthly size Significato effettua una rotazione giornaliera. questi devono essere passati come lista separata da virgole. .rpmorig. i file vengono ruotati la prima volta che il comando viene eseguito in un certo mese.dpkg-new. se il file di log ` assente non d` errori. Un esempio del contenuto di /etc/logrotate. effettua la rotazione al superamento di una certa dimensione da parte del file di log (invece che su un periodo temporale).v. o se trattasi di directory.we’ll rotate them here /var/log/wtmp { monthly create 0664 root utmp } /var/log/btmp { missingok monthly create 0664 root utmp rotate 1 } . e ~. tutti i file presenti all’interno di questa che non abbiano nel nome una delle estensioni vietate (tramite la direttiva tabooext).rpmsaa ve. e a 121 rotate include create tabooext compress missingok Tabella 3.d # no packages own wtmp or btmp -.disabled. un file viene ruotato se ` passata e pi` di una settimana dall’ultima rotazione. che devono essere specificati come parametri. .rpmnew. un proprietario ed un gruppo proprietario. effettua una rotazione settimanale.dpkg-old. di default questi sono . comprime le vecchie versioni dei file di log usando gzip.dpkg-dist. u effettua una rotazione mensile. permette di definire una lista di estensioni e caratteri vietati nei nomi dei file da includere con la direttiva include.3. Un carattere + indica di aggiungere la lista ai caratteri gi` esclusi. .

Questo significa che X Window ` in grado di operare allo stesso modo sia in locale. LA CONFIGURAZIONE DEI SERVIZI DI BASE # system-specific logs may be configured here In questo caso prima si specifica di ruotare i file settimanalmente e di mantenere quattro copie degli stessi. e interfacciandosi direttamente all’hardware grafico della macchina su cui si sta operando. 3. in particolare vedremo le caratteristiche principali del sistema X Window System (spesso chiamato per brevit` X11. e che pu` essere tranquillamente sostituito da uno strato diverso. che rende l’intera interfaccia trasparente rispetto alla rete. sia in rete.1 fra una applicazione ed il suo display. fornendo una serie di funzioni di libreria (tramite le Xlib) che separano completamente l’applicazione (detta per questo X-client) dal programma che si ` incaricher` di disegnarne le finestre (l’X-server ). gli eventuali errori verranno notificati via e-mail all’amministratore. dalla versione finale del protocollo). e che pu` anche essere eliminato o o tutte le volte che non serve (ad esempio sui server). illustrata in fig. L’interfaccia grafica X Window System nasce a met` degli anni ’80 con il progetto Athena a all’MIT. infine si cambiano le impostazioni di default per i due file /var/log/wtmp e /var/log/utmp che non fanno riferimento a nessun pacchetto (contengono i dati delle sessioni degli utenti) che vengono ruotati mensilmente invece che settimanalmente. La caratteristica principale del sistema. che a tutt’oggi lo distingue dalle pi` diffuse interfacce grafiche presenti u in altri sistemi operativi.4. Poi si dice di leggere tutto il contenuto della directory /etc/logrotate. e non ha nessuna caratteristica privilegiata.1 Introduzione a X Window System Bench´ in realt` esistano diverse alternative per la realizzazione di applicazioni in ambiente e a grafico. e di come gestirlo e configurarlo. e Il fatto che esistano delle alternative complete per l’uso dell’interfaccia grafica ci mette immediatamente di fronte ad una delle principali differenze che c’` fra un sistema unix-like come e GNU/Linux ed altri sistemi operativi: al contrario di altri sistemi come Windows o MacOS in un sistema GNU/Linux l’interfaccia grafica non fa parte del kernel. ` che.122 CAPITOLO 3. Tutto il sistema grafico in sostanza non ` che un altro strato che viene posto sopra il kernel. ma viene eseguita dal kernel in user space come un qualunque altro programma. Si tenga presente per` che in questa architettura in genere client e server hanno posizione o invertita rispetto al solito. a tutt’oggi l’ambiente grafico pi` utilizzato in un sistema GNU/Linux (ed in generale in un u qualunque sistema Unix) ` X Window System. con l’intento di fornire un ambiente grafico per i sistemi UNIX.org/). L’architettura di X Window infatti definisce una relazione client-server. E questa separazione che consente di definire a un protocollo di comunicazione (l’X protocol ). oltre a fornire alle usuali funzionalit` che permettono disegnare e a finestre ed altri elementi grafici su uno schermo.d. 3. inviando attraverso di essa le informazioni per disegnare la grafica di una applicazione su una macchina remota.4 L’X Window System In questa sezione tratteremo la configurazione dell’interfaccia grafica nei sistemi Unix. sia attraverso opportuni toolkit grafici che attraverso sistemi a finestre completi come Fresco (http://www.fresco. sia attraverso l’uso diretto del framebuffer o dell’hardware video. il sistema ` completamente trasparente rispetto e alla rete. in questo caso sono dei client remoti (le . fra client e server. a 3. Infatti in genere ` il client che viene eseguito localmente per ine terrogare un server remoto che fornisce delle risposte. e costituisce probabilmente la prima interfaccia grafica mai realizzata su un sistema operativo.

e noi faremo riferimento.org/. A causa di un recente cambiamento di licenza che lo rende incompatibile con la GPL. che fornisce anche numerose estensioni (come il rendering dei font truetype.org (si veda e a http://www. ` e molto probabile che XFree86 resti l’implementazione pi` diffusa ancora per poco. In realt` a essendo un protocollo standardizzato il cui codice di riferimento ` sempre stato rilasciato con e licenza libera.2 La configurazione del server X Il primo passo per utilizzare l’interfaccia grafica su GNU/Linux ` configurare il server X sulla e propria macchina. creata appunto per questo progetto e poi utilizzata in seguito anche per molti altri.xfree86. a quella. 27 . che non essendo copyleft consente anche l’esistenza di versioni proprietarie. da consorzio di industrie a fondazione aperta. perch´ questo possa disegnare le finestre e ricevere i dati da tastiera e mouse e (oltre che dai client).27 ne esistono anche varie versioni. Nel caso di GNU/Linux la versione pi` diffusa dell’X Window System ` XFree86. 3. il titolare dei diritti dell’implementazione originale di X Window.3.x. Fino alla versione 3 di XFree86 il primo passo era quello di identificare la propria scheda grafica e installare il pacchetto con il relativo server X in grado di parlare con essa. si ` ripartiti dall’ultima versione di XFree86 e con la licenza originale ed ` gi` stata rilasciata una prima versione del server X. il formato di questo e file ` stato modificato a partire dalla versione 4. per cui nelle distribuzioni pi` recenti si trova e u al suo posto il file XF86Config-4. Noi faremo sempre riferimento a questa ultima e versione. che mantiene la precedente licenza e che ` gi` previsto essere il sostituto e a di XFree86 nelle nuove versioni delle principali distribuzioni. e varie accelerazioni grafiche) attraverso una architettura modulare.1: Schema di funzionamento del protocollo X11 applicazioni) che inviano le informazioni al server locale (l’X-server ) perch´ questo ne disegni le e finestre.org/).4. Il server X in genere cerca prima quest’ultimo e se non lo la cosiddetta licenza X11. disponibile u e su http://www. La configurazione del server in XFree86 ` governata dal file XF86Config. Infatti con la u conversione dell’X-Consortium. Per il momento per` la gran parte o delle distribuzioni continua ad usare la vecchia versione di XFree86. L’X WINDOW SYSTEM 123 Figura 3. ed e il pacchetto che contiene il server ` uno solo.4. A partire dalla versione 4 il supporto delle varie schede ` stato modularizzato. almeno per i nomi dei file.

combinando una scheda video ed un monitor. o Il file ` diviso in varie sezioni ciascuna dotata di un suo nome che la identifica.. tastiera. Contiene le specifiche per il Direct Rendering Interface un’interfaccia diretta alle accelerazioni hardware delle schede grafiche. Contiene la descrizione di una modalit` video (corrisponde a specificare a risoluzione. ma con il pacchetto XFree86 vengono forniti direttamente anche due programmi per la configurazione. Le o sezioni hanno poi una loro gerarchia. Contiene la configurazione generale del server. tavoletta grafica. Indica le opzioni generali che controllano globalmente il comportamento del server. all’interno di queste sezioni dovranno poi essere specificate le opzioni ed i valori delle configurazioni (dipendenti dal tipo di sezione). ed alcune di esse devono essere necessariamente specificate. con una sintassi generica del tipo: Section "SectionName" SectionEntry . Si tenga e presente che fin dall’inizio XFree86 ha sempre supportato la presenza di schermi multipli.. questi programmi. permettono di generare automaticamente il file di configurazione. 3. LA CONFIGURAZIONE DEI SERVIZI DI BASE trova ricorre al precedente. scheda video e monitor. ne deve essere specificata una per ogni monitor disponibile. Contiene le informazioni di configurazione di una scheda grafica. Contiene le informazioni di descrizione di un monitor. . di norma non viene utilizzato e valgono i valori di default delle stesse. Tutte le distribuzioni mantengono i vari file di configurazione dell’X Window System in una directory separata. Indica i moduli aggiuntivi che devono essere caricati dinamicamente (e che forniscono estensioni come le accelerazioni 3D e il rendering dei font truetype). tastiera. Infine si pu` generare uno scheletro del file direttamente con il comando X -configure. una volta inseriti i dati dell’hardware. introdotta e dalla parola chiave Section e conclusa dalla parola chiave EndSection. sotto /etc/X11. a Contiene la definizione di uno schermo. Ogni distribuzione ha creato un suo programma dedicato. l’elenco completo pu` essere trovato nella pagina di manuale accessibile al solito con man XF86Config-4.6: I nomi delle varie sezioni del file XF86Config-4. xf86cfg che opera ad interfaccia grafica e xf86config che opera linea di comando. Module InputDevice Device Monitor Modes Screen ServerLayout DRI Tabella 3. in generale questo viene fatto automaticamente in fase di installazione (specie per le nuove distribuzioni su live-CD che usano l’autorilevamento dell’hardware) o attraverso un opportuno programma di configurazione che chiede i parametri. e che nelle versioni pi` recenti sono state inserite pure delle estensioni che permettono di “spalmare” u un desktop su pi` schermi. e cio` mouse. ecc. frequenza di refresh e profondit` di colore).) ne deve essere specificata una per singolo dispositivo. Nome Files ServerFlags Contenuto Indica i pathname di file o directory contenenti informazioni usate dal server come le directory dei font o i file con le descrizioni dei colori. Le informazioni necessarie alla configurazione del server X sono quelle che riguardano le varie componenti utilizzate dallo stesso. ne deve essere specificata una per ogni scheda disponibile. EndSection I nomi delle principali sezioni utilizzate comunemente sono riportati in tab. Contiene la descrizione di un dispositivo di input (mouse.6. u Configurare il server X significa allora creare un opportuno file /etc/X11/XF86Config-4 che lo metta in grado di utilizzare l’hardware.124 CAPITOLO 3.

le parole chiave yes/no. kHz. o l’identificatore di un font server. secondo il formato visto per i parametri generici) verranno interpretati come tali. Si pu` usare la direttiva pi` volte.4. on/off. separate da virgole. o delle stringhe. il primo dei quali ne specifica il nome ed il secondo il valore. i numeri (reali o interi.3. mentre i dispositivi di uscita devono essere collegati in una sezione Screen. anch’essi scritti direttamente. al solito per l’elenco completo si pu` fare riferimento alla pagina di manuale. L’X WINDOW SYSTEM 125 Al livello pi` alto c’` la sezione ServerLayout che serve a collegare insieme i dispositivi u e di ingresso e di uscita che vengono usati dal server in una sessione. ecc. o dei valori numerici in virgola mobile. Le direttive possibili sono le seguenti: FontPath specifica una lista di directory. MHz. Ciascuna sezione comprende una serie di direttive. La stringa che specifica quest’ultimo viene poi interpretata ed il suo contenuto viene classificato in altrettanti tipo di valore. 28 . in modo da diminuire lo spazio disco necessario all’installazione del server o consentire l’utilizzo di font ai cosiddetti dumb terminal non dotati di disco. e ModulePath indica il pathname delle directory in cui verranno cercati i moduli binari che forniscono le estensioni del server. Qualora non sia specificato nulla u u viene usata di default la directory /usr/X11R6/lib/modules/. che u hanno un formato comune per tutte le sezioni e possono essere di tre tipi diversi: o dei valori numerici interi. RgbPath indica il pathname del file contenente il database dei colori RGB. La sezione o Files contiene la definizione di una serie di pathname che riguardano la posizione di file e directory utilizzate dal server. il font server ` un servizio fornito dal programma xfs che permette di mantenere i font su una singola e macchina. true/false esprimeranno invece dei valori logici. questa richiede sempre due parametri di tipo stringa. in cui si trovano i font usati dal server.28 nella forma: <trans>/<hostname>:<port-number> dove trans indica la modalit` di connessione (e vale unix per i socket locali e a tcp per un collegamento remoto) hostname indica il nome della macchina cui si collega e port la porta. veniva utilizzato. qualora non specificato viene utilizzato il valore di default che ` /usr/X11R6/lib/X11/rgb. come per la direttiva FontPath si possono specificare pi` directory usando pi` istanze della direttiva. che comprende una sezione Device che descrive una scheda video ed una sezione Monitor che descrive il monitor ad essa collegato. prima del supporto diretto del rendering dei font truetype per generare automaticamente da questi ultimi dei font compatibili con il server X allora in uso. che vanno espresse su una singola riga. Queste sono introdotte da una parola chiave seguita da uno o pi` valori. Le altre sezioni sono invece indipendenti. off o false. Un singolo dispositivo di ingresso deve essere descritto in una sezione InputDevice. Inoltre usando il suffisso No nello scrivere il nome di una opzione si specificher` per essa a direttamente un valore logico pari a No. mentre apponendo ad un numero uno dei suffissi Hz. La direttiva richiede o un pathname assoluto ad una directory. e non dipendono dalle altre. il resto verr` interpretato a come stringa (l’elenco completo dei tipi di valori ` comunque riportato nella pagina di manuae le). espressi direttamente col numero o con un prefisso 0x qualora li si scrivano in esadecimale. indicando le principali direttive previste per ciascuna di esse. che devono essere espresse inserendole fra virgolette. Tratteremo qui solo le principali sezioni. e distribuirli via rete ad altre. Inoltre per tutte le sezioni esiste la direttiva generica Options che specifica il valore di una opzione. Un esempio tipico `: e FontPath "unix/:7100" che indica il fontserver sulla macchina locale. e le relative directory verranno o u unite insieme. si potranno specificare delle frequenze. proprie della sezione.

la disposizione dei tasti. e normalmente se ne hanno almeno due. e corrisponde in genere al nome della relativa localizzazione (con valori come us. de. Le restanti direttive sono tutte da specificare nella forma di opzioni. cui in genere si usa un mouse USB da affiancare u al touchpad. che ne specifica il tipo. essa contiene solo direttive di tipo Options. La sezione InputDevice serve a specificare le caratteristiche di un singolo dispositivo di input. tolto il lib iniziale e l’estensione. LA CONFIGURAZIONE DEI SERVIZI DI BASE La sezione ServerFlags permette di impostare alcune opzioni generali relative al server. CoreKeyboard Device SendCoreEvents XkbLayout Protocol . che se viene impostata indica che il relativo dispositivo viene considerato come la tastiera principale. ma se ne possono specificare anche di pi`. il protocollo utilizzato (i pi` comuni sono PS/2 u per i mouse ordinari e ImPS/2 per quelli dotati di rotellina). ecc. indica il file di dispositivo da utilizzare per accedere al relativo dispositivo. nel caso di una tastiera. in caso di presenza di pi` tastiere (caso non molto comune) o u u di pi` mouse (caso comune invece con i portatili.. In particolare Driver permette di indicare se il dispositivo in questione viene usato per il puntamento (con il valore mouse) o per l’immissione di dati (con il valore keyboard) facendo riferimento al caso pi` comune u di entrambe le tipologie.126 CAPITOLO 3. invia gli eventi relativi ad un altro dispositivo come se fossero generati dal dispositivo principale (lo si usa per abbinare gli eventi di un eventuale mouse USB a quelli della touchpad sui portatili). il modello (ad esempio pc105 per una tastiera da PC a 105 tasti). XkbModel indica.. di valore booleano. o con l’uso di tavolette grafiche). che se viene impostata indica che il relativo dispositivo viene considerato come il mouse principale." . una per la tastiera e l’altra per il mouse.. questo ` lo stesso del file corrispondente che si deve trovare e all’interno del path indicato ModulePath. fr.) indica nel caso di un mouse.. le principali delle quali sono: CorePointer di valore booleano. Ogni sezione viene specificata nel formato: Section "InputDevice" Identifier "nome" Driver "dispositivo" Option ". questa in genere prevede solo la direttiva Load seguita dal nome del modulo. la sezione Module ` usata per specificare quali e moduli di estensione del server devono essere caricate. EndSection dove le direttive Identifier. it. devono sempre essere specificate. nel caso di una tastiera. che indica un nome cui fare riferimento al dispositivo nelle altre sezioni e Driver. indica. L’unica formulazione alternativa ` usare una sintassi del tipo: e SubSection "extmod" Option "omit XFree86-DGA" EndSubSection dove il nome del modulo ` lo stesso e la direttiva Option viene utilizzata per passare dei parametri e al modulo.

le principali sono: VendorName ModelName HorizSync stringa che identifica la marca del monitor. e ne deve essere presente almeno una. 1240x1024.. e indica la frequenza (o l’intervallo di frequenze) di aggiornamento verticale30 supportato dal monitor. con nomi del tipo di 1024x768. e prevede le due direttive e obbligatorie Identifier e Driver. che si accede nella sezione 4 usando il nome del driver stesso (ad esempio per una scheda Matrox che si utilizza con il driver mga si potranno ottenere le informazioni con man mga o man 4 mga). a da utilizzare in una successiva sezione Screen. espresso di default in Hz. ecc. VertRefresh Mode In genere i valori per HorizSync e VertRefresh sono critici per l’uso del monitor. dove quest’ultima indica il nome del modulo associato al driver che gestisce la relativa scheda grafica. Il resto della sezione prevede come nel caso precedente solo delle direttive Option. Il formato generale della sezione ` del tipo: e Section "InputDevice" Identifier "nome" direttiva . Alcune opzioni generiche. mentre i valori da usare in termini di risoluzione e frequenze di aggiornamento vengono specificati nelle righe successive (per la sintassi si consulti la pagina di manuale). EndSection dove come nei casi precedenti Identifier specifica una stringa identificativa del monitor (che pu` essere qualunque) ed ` obbligatoria. In genere non ` necessario e utilizzarla in quanto vengono riconosciuti come predefiniti una serie di modalit` video in standard VESA. valide per tutti i driver. 30 ` la frequenza con cui pu` essere ridisegnato l’intero schermo. stringa che identifica il modello del monitor. Questo valore viene usato dal server X per determinare se un modo video ` compatibile e con il monitor. indica la frequenza (o l’intervallo di frequenze) di sincronia orizzontale29 supportato dal monitor. L’X WINDOW SYSTEM 127 La sezione Device serve a specificare le caratteristiche di una scheda grafica. Il suo u formato ` identico a quello visto in precedenza per InputDevice. e u la frequenza di sincronia orizzontale ` la frequenza a cui il monitor pu` spostare il fascio che disegna una riga e o orizzontale. e se non specificata con uno degli indicatori illustrati in precedenza ` supposto essere espressa in kHz. le restanti direttive servono a specificare le caratterio e stiche del monitor.. ` una direttiva speciale da scriversi su pi` linee (chiuse da una direttiva e u EndMode) che permette di specificare una modalit` video cui viene dato il a nome passato come argomento. Come per HorizSync pu` essere indicato sia come o singola lista di valori che come intervallo. e ne deve esistere almeno una (ma se ne possono avere diverse in caso di presenza di pi` schede grafiche). e o 29 . buona parte delle quali sono specifiche del driver della scheda grafica utilizzato e sono descritte nella relativa pagina di manuale. in quanto sbagliandoli ` possibile mandare fuori sincronia lo stesso con il risultato di non vedere pi` nulla. Pu` essere indicato come singola lista di valori separati o da virgole come intervallo separato da un meno. sono tuttavia specificate direttamente nella pagina di manuale di XF86Config-4.4.3. La sezione Monitor serve ad indicare le caratteristiche di un monitor.

. diverse risoluzioni e diverse frequenze di aggiornamento a seconda delle caratteristiche della scheda video e del monitor. questi vanno collegati fra loro oltre che con il cavo tramite una apposita sezione Screen che identifica l’insieme dei due. Di nuovo ne deve essere presente almeno una. nella forma generica: Section "ServerLayout" Identifier "nome" Screen "screen id" . a . Uno schermo infatti pu` essere utilizzato a diverse profondit` di o a colore. ed qualora si specifichino pi` modi. e definisce le caratteristiche dello “schermo” che verr` utilizzato dal server X. Viene spesso utilizzata anche la direttiva DefaultDepth che indica la profondit` di colore (in numero di bit) da utilizzare di default per lo schermo quando si hanno a pi` sottosezioni di tipo Display. che prendono come argomento l’identificatore utilizzato in una delle sezioni omonime... SubSection "Display" voci .. ed ` obbligatoria come le due Device e Monitor che servono a specificare la scheda video ed il e monitor collegati allo schermo. EndSubSection . InputDevice "input device id" . u ` E inoltre obbligatoria la presenza di almeno una sottosezione Display che specifichi la profondit` di colore (tramite la direttiva Depth. Infine la sezione ServerLayout serve ad ottenere una configurazione completa collegando uno o pi` schermi (definiti in altrettante sezioni Screen) con uno o pi` dispositivi di input (definiti u u in altrettante sezioni InputDevice).... detto EDID... Questi dati possono essere letti tramite il programma get-edid il cui output pu` essere trasformato direttamente o nella corretta sezione Monitor pronta per l’inclusione in XF86Config-4 mandandolo in pipe al comando parse-edid. obbligatoriamente presente) e una (o pi`) varie a u modalit` video (con la direttiva Modes che prende un elenco di nomi (separati da spazi) di quelli a predefiniti nello standard VESA o indicati da una precedente direttiva Mode inserita nella corrispondente sezione Monitor.. ` pure possibile passare u e al volo dall’uno all’altro una volta avviato il server con la combinazione di tasti Ctrl-Alt-+ e Ctrl-Alt--. Il formato generale di questa a sezione ` il seguente: e Section "Screen" Identifier "name" Device "device id" Monitor "monitor id" direttive .128 CAPITOLO 3. EndSection di nuovo la direttiva Identifier serve a fornire una stringa che identifica lo schermo in questione.31 Una volta definite le schede video ed i monitor presenti. che evita di doversi andare a cercare i rispettivi valori su una qualche oscura pagina del manuale (sempre che si siano scomodati a scriverceli). LA CONFIGURAZIONE DEI SERVIZI DI BASE I monitor recenti supportano comunque un meccanismo di notifica alle applicazione di questi ed altri dati. 31 nel caso di Debian per poter utilizzare questo comandi occorrer` installare il pacchetto read-edid.

xinitrc e lo esegue come se fosse uno script di shell. e quella che prevede direttamente il login dall’ambiente grafico. Nel caso dell’avvio da console il programma utilizzato per lanciare una sessione ` startx.. e si limita e u semplicemente a riprodurre dentro una finestra un terminale del tutto analogo a quello che si trova sulla console.. poich´ in tal caso xinit cerca se e nella home dell’utente esiste un file . Per questo usualmente non si specifica nessun programma. che viene lanciato direttamente nella procedura di avvio (tramite gli opportuni script) insieme al programma di gestione del login. e ed riutilizzare macchine dotate anche di scarse risorse hardware. quest’ultimo infatti permette di definire opportunamente i parametri necessari all’esecuzione del secondo.3.32 La seconda modalit` di avvio del server X ` attraverso un login manager grafico (in realt` a e a nella nomenclatura di X questo viene chiamato X Display Manger ). In questo per` occorre considerare che i programmi indicati in . Come accennato usualmente invece di usare direttamente xinit si lancia la sessione usando startx. usando l’identificatore specificato nelle omonime sezioni. integrandosi con la distribuzione in modo da utilizzare gli eventuali window manager o session manager scelti come default. in assenza di uno . sfruttando e la trasparenza sulla rete del protocollo X11. Altrimenti il secondo. per cui se si vuole che vengano eseguiti in maniera concorrente occorrer` a lanciarli in background. EndSection 129 di nuovo Identifier indica una stringa di identificazione. solo per il disegno delle finestre attraverso l’installazione del solo X server.3 L’avvio del server Le modalit` per attivare una sessione grafica sono sostanzialmente due. 32 .4). e questo in realt` non ` altro che una interfaccia semplificata per chiamare un altro programma. che non sarebbero in grado di sopportare il carico di tutta l’interfaccia grafica. tranne l’ultimo alla cui uscita terminer` anche la sessione grafica. E quest’ultimo che avvia il server X e poi esegue un eventuale programma client passato come argomento. si tenga presente per` o che questo avviene anche se gli eventuali altri programmi lanciati dal primo client eseguito direttamente da xinit sono ancora attivi. Un vero login manager deve per` essere in grado di fare anche qualcosa di pi`. ad esempio un terminale da cui eseguire gli altri comandi. Per a questo motivo in genere si lancia sempre per ultimo un window manager o un session manager (vedi sez. attraverso il supporto di un apposito protocollo.4. a e ` xinit.xinitrc vengono eseo guiti uno dopo l’altro.4. l’XDMCP (X Display Manager Control Protocol ). quella che prevede a l’avvio del server X e di tutto l’ambiente grafico da console.xinitrc per inizializzare il proprio ambiente grafico. e gestire o u cio` la stessa procedura di autenticazione e di avvio di una sessione pure da remoto. terminando il tutto solo alla fine di questo. Questo consente di utilizzare il contenuto di .4. mentre Screen e InputDevice servono a referenziare quali schermi e dispositivi di input inserire nel layout. All’uscita del suddetto programma xinit si incarica anche di terminare il server X. Quest’ultimo ` semplicee mente un programma che lancia il server e poi si incarica di mostrare all’utente una finestra di login (grafica) su cui questo pu` autenticarsi per entrare nel sistema ed eseguire una sessioo ne. che a questo punto assumeranno il compito di fare da semplici terminali per la sessione. 3. il programma xterm ` probabilmente il pi` semplice dei programmi ad interfaccia grafica.xinitrc dell’utente. L’X WINDOW SYSTEM opzioni . chiamando al suo interno i programmi che si intendono lanciare. Questo consente di presentare anche su macchine remote. lancerebbe semplicemente xterm. 3.. la stessa finestra di login. In questo modo ` possibile centralizzare le applicazioni grafiche su un unico server su cui esse saranno eseguite.

il valore ` associato ad un certo campo della risorsa stessa.4. pur essendo controllati da un file di configurazione testuae le (rispettivamente /etc/gdm/gdm. che a loro volta ı possono contenere altre strutture con altri dati. ` possibile e controllarli e modificarne l’impostazione con un apposito programma di configurazione ad interfaccia grafica (eseguibile anche al loro interno). Il valore di ciascuna risorsa ` specificato da una stringa. in cui i singoli e nodi della gerarchia sono separati da un “. 33 . attraverso quelle che vengono chiamate risorse. Entrambi offrono una grafica molto pi` u accattivante di xdm ed un sistema di configurazione molto pi` avanzato (e semplificato).xinit per lanciare la sessione grafica dell’utente.xinit e . Il grande vantaggio di entrambi ` che.xsession hanno lo stesso scopo e significato. che permette di attivare e controllare le loro funzionalit` senza dover modificare a mano il file di configurazione. vengono solitamente installati in corrispondenza a questi. da indicare nel file /etc/X11/xdm/xdm. per cui viene naturale accedere all’insieme di strutture e sottostrutture attraverso una gerarchia ad albero. Il programma per` onora anche una serie di opzioni.130 CAPITOLO 3.” e che usa come radice il nome del programma stesso (spesso scritto con la prima lettera maiuscola). a 3. nelle distribuzioni GNU/Linux di oggigiorno i login manager pi` utilizzati sono altri.. con e un certo nome.4. ma ` ampiamente configurabile in quanto il suo e comportamento viene governato da una serie di script di shell che eseguono i vari compiti. Il e programma ha una interfaccia molto spartana. mentre la configurazione ` effettuata tramite le delle opportune risorse (la trattazione di queste ultime ` e e in sez. xdm esegue un reset dell’X-server con lo script Xreset e ripresenta la schermata di login iniziale.conf per gdm e /etc/kde3/kdm/kdmrc per kdm). ecc. ciascuna struttura viene associate al singolo programma. 3. Bench´ si sia trattato pi` in dettaglio xdm. e come nel caso di startx quando il programma che gestisce la sessione termina. tanto che in Debian la configurazione di default fa si che sia usato quest’ultimo anche quando si lancia l’ambiente grafico da console con startx. i relativi campi identificano un possibile valore (o una ulteriore risorsa). quella distribuita direttamente con l’implementazione di riferimento dell’X-server.4) che vengono specificate nel file di configurazione /etc/X11/xdm/xdm-config. Come accennato il funzionamento di xdm prevede l’uso di una serie di script e programmi. e controllano il comportamento del programma. LA CONFIGURAZIONE DEI SERVIZI DI BASE Nella distribuzione classica di X Window. u e principalmente gdm (lo Gnome Display Manager ) che fa parte del desktop Gnome e kdm (il KDE Display Manager che fa parte del desktop KDE. a Una delle caratteristiche di X Window ` quella di avere definito un meccanismo per memorizzare e in maniera generica le preferenze relative all’ambiente grafico di ciascuna applicazione.4 L’uso di X Window dal lato client Come accennato qualunque programma che usi l’interfaccia grafica tramite le Xlib deve agire come client per un server X che si incaricher` di disegnarne le gli elementi grafici sullo schermo.xsession nella home directory dell’utente come analogo di . il programma che implementa il login manager ` xdm. e ne controlla vari aspetti come il colore delle finestre. dello sfondo. che tipicamente usa il file . una volta terminato con successo il login xdm esegue lo script Xstartup (situato in /etc/X11/xdm) per inizializzare la sessione. In genere ciascuna applicazione mantiene le impostazioni generali per le sue risorse in un le risorse si chiamano cos` in quanto corrispondono effettivamente a delle strutture dati. ma queste ultime sono organizzate e in una gerarchia ad albero33 in cui ogni nodo ` identificato dal nome della risorsa. I file . il titolo della finestra. o che assumono i valori descritti nell’omonima pagina di manuale.options. Entrambi contengono cio` i programmi da lanciare per gestire la sessione e grafica. u Infatti bench´ entrambi non necessitino della presenza dei rispettivi ambienti desktop e pose sano essere usati indipendentemente. e se questo ha successo il successivo Xsession. ad esempio la finestra di login in cui inserire username e password viene gestita dal programma xlogin. dato il suo legame diretto con il sistema di X e u Window.

Per usare con profitto una sessione grafica tutto quello che serve ` un window manager. il passaggio dall’una all’altra. in cui si modificano le impostazioni dei colori di sfondo e primo piano. ` appunto quello della selezione di u e quella che viene messa a fuoco.34 Infine si tenga presente che il carattere “!” serve ad introdurre una riga di commento. a ` nascondere. 34 . Si noti come la sintassi preveda una riga in cui si specifica il nome della risorsa terminato da “:”. si specifica la geometria iniziale ecc. Un esempio di un file di configurazione delle risorse pu` o essere il seguente: .. Il posizionamento delle stesse. devono essere invece gestiti a parte e non sono compito dei singoli programmi. e molti di questi infatti gestiscono anche la presenza di un men` o di una barra direttamente u sullo schermo (o eventuali altri elementi di contorno). cui segue la stringa che assegna il valore. o di passare dall’una all’altra. del disegno degli elementi grafici di contorno. seguendo la solita filosofia per cui ognuno si cura di eseguire un suo compito ben preciso. 1.geometry: 80x28 emacs*BorderColor: DarkSlateGray emacs*fringe.. nel quale specificare i valori che all’avvio del server andranno a soprassedere quelli di default. e che assume un po’ quello che ` il ruolo della shell nella riga di comando (lanciare altri comandi e passare dall’uno e all’altro). emacs*Background: DarkSlateGray emacs*Foreground: Wheat emacs*pointerColor: LightSteelBlue emacs*cursorColor: LightSteelBlue emacs*bitmapIcon: on !emacs*font: fixed emacs*font: -misc-fixed-*-*-*-*-15-*-75-75-*-*-iso8859-* emacs. che ` un po’ l’equivalente del processo in foreground e visto in sez. ridimensionare le finestre.3. L’X WINDOW SYSTEM 131 file apposito che in fase di installazione viene posto in una directory comune (di default viene usata /usr/X11R6/lib/X11/app-defaults/) con il nome stesso della risorsa. i singoli utenti per` possono cambiare a piacere questi valori tramite l’uso del file .4. quella cio` cui verranno inviati tutti gli eventi in ingresso (ad e esempio quello che si scrive sulla tastiera).4. ecc. il loro spostamento.Background: DarkSlateGray . Per questo per poter usare davvero un’interfaccia grafica ` necessario avere almeno un’altro programma che esegua e questi compiti specifici: quello che viene chiamato un window manager. E il window manager che si cura di tutti questi compiti. Senza un window manager infatti si avrebbe la grafica ma non la possibilit` di spostare.. la ridimensionamento e la selezione delle finestre. quello che contraddistingue una interfaccia grafica ` la capacit` di poter eseguire vari programmi in e a contemporanea. si limitano solo a disegnare il contenuto delle rispettive finestre. usando i quali ` possibile lanciare altre e cio` applica il valore a tutte le risorse che corrispondono alla stringa in cui nella gerarchia l’asterisco ` sostituito e e da un nome qualunque. Come per` ci si potr` rendere conto ad esempio o a lanciando xinit a mano con una serie di programmi qualsiasi. questi ultimi.. Un compito fondamentale infatti.3. quando si hanno pi` finestre da gestire.Xresources nella propria o home directory. e della gestione il mouse per gestire lo spostamento. Se le risorse permettono di controllare i vari parametri interni delle singole applicazioni. Si noti anche come il nome della risorsa possa contenere il carattere jolly “*” che assume lo stesso significato che avrebbe se si specificasse un pathname. Se poi si vogliono cambiare gli stessi valori una volta avviato il server si pu` o usare il comando xrdb che prende come argomento il file in cui sono stati scritti i nuovi valori che saranno caricati immediatamente. ciascuno nella sua finestra.

LA CONFIGURAZIONE DEI SERVIZI DI BASE applicazioni o avere informazioni sul sistema. Per questo un window manager non basta. il che comporta che con l’accesso diretto si possono avere pi` processi che scrivono u in contemporanea sul dispositivo della stampante. questa pu` essere infatti agganciata ai dispositivi pi` vari o u (e molte stampanti ne supportano pi` di uno). tuttora in ampio uso da parte di u coloro che sono abituati alla loro interfaccia e non necessitano di funzionalit` pi` avanzate. u In ciascuno di questi casi il file andrebbe inviato sul relativo dispositivo (nel caso pi` comune. cio` di una infrastruttura (completa di meccanismi di intercomunicazione) e che definisca non solo la gestione delle finestre. ma si scontra con una e serie di problemi che lo rendono altamente sconsigliabile. coi relativi dati che si mescolano fra di loro dando luogo risultati tutt’altro che piacevoli nella stampa finale. in cui si possono passare elementi o dati da una finestra ad un altra (e cio` da una applicazione ad un e altra). Questo significa che u anche un semplice file di testo debba essere opportunamente trattato prima di essere inviato alla stampante. un tempo u e quando si stampavano solo file di testo senza formattazioni il problema non c’era.5 Il sistema di stampa Tratteremo in questa sezione la configurazione delle stampanti sotto GNU/Linux. il passo successivo ` allora quello dell’uso di un e desktop environment. basterebbe identificare il die spositivo specifico e identificarlo con un link simbolico (un po’ come si fa per il CDROM). Per questa serie di motivi in genere il dispositivo della stampante non ` mai accessibile e direttamente ai singoli utenti. In generale quello che succede ` che l’accesso alla e stampante ` regolato attraverso un opportuno demone. Questo ` senz’altro possibile. Tutto questo non costituirebbe di per s´ un grosso problema. I pi` comuni. sono a u Window Maker. come la parallela. /dev/lp0). questo dovr` essere opportunamente a tradotto. oggi per` si o stampano file con contenuti grafici e con formattazioni complesse e font diversi. ecc. come accade spesso. 3. che ` l’unico che ci scrive.5. ecc. ICEwm. Il problema pi` importante ` invece quello relativo al contenuto del file da stampare.132 CAPITOLO 3. la seriale. Il terzo problema ` quello di essere in presenza di un sistema operativo multiutente e mule titasking. le stampe e e vengono richieste inviando i file da stampare al suddetto demone. blackbox. 3. dopo una introduzione generale sulla gestione generica della stampa vedremo in particolare la configurazione secondo il sistema tradizionale del Line Printing Daemon di BSD e la nuova architettura del Common Unix Printing System. che si incarica di eseguire . ma viene gestito attraverso un opportuno sistema di stampa che si incarica di risolvere questi problemi. u di stampante su porta parallela. per o a definire una infrastruttura che consenta operazioni come il cosiddetto drag and drop. ` facile immaginarsi che la e e prima e pi` immediata modalit` di stampa sia quella di inviare il file da stampare direttamente u a al dispositivo associato alla stampante. che permette di ottenere i risultati voluti. Per questo in genere le stampanti moderne prevedono un loro linguaggio di stampa come il PostScript (alcune ne supportano anche pi` di uno). il primo ` che non esiste un dispositivo e univoco che identifichi una stampante.1 Introduzione generale Mantenendo la filosofia progettuale di Unix per cui tutto ` un file. ma tutto un insieme di elementi (come oggetti grafici comuni e meccanismi di intercomunicazione) che porta appunto un ambiente grafico integrato analogo a quello che si trova su altri sistemi operativi come MacOS o Windows. Le interfacce grafiche moderne vanno per` al di l` della semplice gestione delle finestre. Inoltre se. i programmi generano le stampe in un formato (principalmente il PostScript) e la stampante non lo capisce. una porta USB.

2. a 3. Figura 3. Noi faremo riferimento solo a LPRng.5. le stampe cio` non vengono mai eseguite direttamente. tramite un e opportuno comando. ad esempio diventa possibile inviare la stampa su una coda remota se ` previsto un opportuno meccanismo di comunicazione. E presente un porting anche per GNU/Linux.5.4). questo consente ad esempio di utilizzare code diverse (con filtri diversi) a seconda del tipo di file che si vuole stampare. sviluppata indipendentemente che ha la stessa interfaccia e le stesse funzionalit` ma supporta anche molte estensioni (in Debian ` fornita dal pacchetto a e lprng). e . IL SISTEMA DI STAMPA 133 tutte le operazioni necessarie (comprese le eventuali conversioni di formato) e di garantire un accesso corretto senza sovrapposizioni. 3.3. (nel caso di Debian si pu` installare con il pacchetto lpr) ma il suo funzionamento ` difettoso o e ed il numero di stampanti supportate ` limitato. Il vantaggio di questo sistema ` che la gestione della coda pu` essere esguita indipendene o temente dalla gestione della stampante. LPRng. Per questo esso ` in genere sostituito da una e e implementazione alternativa. facendo riferimento al tutto con il nome del protocollo LPD (acronimo di Line Printer Daemon) che ` pure standardizzato nell’RFC 1179. e Infine l’uso di questa architettura permette anche di utilizzare pi` code di stampa per la u stessa stampante.5. su una coda di stampa dalla quale poi verranno prelevate (in genere dal demone di cui sopra) ed opportunamente inviate sulla stampante secondo lo schema illustrato in fig. 3. e tutt’ora e ` distribuito insieme a questo sistema operativo.2 nell’eseguire l’invio dei file dalla coda di stampa alla stampante il demone di stampa pu` eseguire tutte le operazioni necessarie (realizzate in genere attraverso o quelli che si chiamano filtri di stampa) per convertire il contenuto del file da stampare in uno formato che la stampante ` in grado di comprendere. ignorando completamente e l’implementazione originale di BSD. Inoltre con lo schema di fig. o con diversi privilegi o priorit`. ma immesse. 3. Lo stesso concetto di e stampa remota pu` essere realizzato in maniera alternativa usando una coda locale ed usando o direttamente il demone di stampa per inviare i file ad un altro demone remoto.2 Il sistema di stampa in stile BSD Uno dei sistemi di stampa storici in ambiente Unix ` quello sviluppato per BSD. Una delle caratteristiche fondamentali dei sistemi di stampa in ambiente unix-like ` quella e delle code. che uno dei sistemi di stampa di uso pi` comune nelle u distribuzioni GNU/Linux (l’altro ` CUPS che tratteremo in sez.2: Schema generico del funzionamento del sistema di stampa.

il valore di una delle variabili PRINTER. che ` la prima definita e in /etc/printcap. in modo che questo venga stampato nell’intestazione (quando questa ` prevista). Se invocato senza argomenti esso stampa la lista delle stampe presenti. il cuore del sistema di stampa LPD ` l’omonimo demone e di stampa lpd che gestisce l’invio dei file dalla coda di stampa alla stampante. NPRINTER o NGPRINTER. permette di specificare (come parametro) l’utente per conto del quale eseguire la stampa (utilizzabile solo dall’amministratore). le altre opzioni principali sono riportate in tab. da passare come argomento. Per richiedere la stampa di un file si deve utilizzare il comando lpr. specifica la priorit` della stampa. Tabella 3.5. LPDEST.134 CAPITOLO 3. con il formato: parker:/root# lpq Printer: rlp@parker ’Remote printer entry’ (dest epson@davis) Queue: no printable jobs in queue Server: no server active Status: job ’root@parker+648’ saved at 16:48:21.7. a meno di non usare l’opzione -P per selezionare una coda specifica. (vedi sez. seguendo la nomenclatura inglese. 3. Per la gestione delle stampe sono disponibili una serie di comandi per controllare lo stato della coda ed eseguirvi sopra delle operazioni. LA CONFIGURAZIONE DEI SERVIZI DI BASE Come il nome stesso suggerisce. 35 .3. oppure la stampante di default. ne tratteremo la configurazione in sez.7: Le principali opzioni del comando lpr. a Di default il comando esegue la ricerca delle stampe sulla coda di default. per l’elenco completo al solito si faccia riferimento alla pagina di manuale. 3. Oltre a lpd il sistema di stampa in stile BSD prevede una serie di altri programmi per l’immissione delle stampe nelle code e per la gestione di queste ultime. in particolare i comandi fanno riferimento a questi identificativi come ai job ID e riportano il numero di stampe correnti come numero di job. Il protocollo LPD prevede inoltre che il demone possa essere contattato anche via rete (da un altro demone o direttamente da un client) per eseguire la stampa in remoto. che permette di esaminare e lo stato della coda. L’opzione principale di lpr ` -P che permette di indicare su quale coda di stampa inviare e il file da stampare. Un’altra opzione utile ` -h che inibisce la stampa di e eventuali pagine iniziali per le code in cui questa ` prevista e -# che richiede la stampa di un e certo numero di copie. che prende come argomenti i file da stampare (se non si specifica nulla viene usato lo standard input). Opzione -# -C -J -m -U Significato specifica il numero di copie da stampare. il primo di questi ` lpq.3).800 Rank Owner/ID Class Job Files done root@parker+648 A 648 /root/iptables epson is ready and printing root: active [job 543 localhost] /root/iptables 3072 bytes Size Time 2748 16:48:21 altrimenti si pu` specificare come argomento il numero identificativo della stampa (quello riporo tato nella colonna Job) ed il comando riporter` solo le informazioni ad essa relative.5. da passare come parametro. job. una volta messa in coda una serie di stampe il comando riporta sullo standard output un numero identificativo (che potr` essere usato con gli altri comandi per fare riferimento alle stesse) per ciascuna di a 35 esse. e richiede l’invio di una email all’indirizzo passato come parametro qualora la stampa fallisca. se non la si specifica viene usato. Si pu` usare l’opzione -a per fare eseguire o le stampe sono spesso chiamate. se definito. u u associa alla stampa il nome passato come parametro. identificata da una lettera maiuscola a da “A” (pi` bassa) a “Z” (pi` alta). 3.

che seleziona tutte le stampe di un utente. Con status si ha la stampa dello stato della coda e relativa stampante associata. che serve per controllare lo stato del sistema di stampa. Si pu` fermare la stampa con l’uso del comando stop e farla ripartire con start. al solito l’elenco completo ed i dettagli sono nella e pagina di manuale. IL SISTEMA DI STAMPA 135 la ricerca su tutte le code.3). per le altre opzioni e per una descrizione dettagliata si pu` fare o riferimento alla pagina di manuale. il demone per` ` in grado oe anche di gestire la eventuale ricezione di richieste di stampa via rete (da un altro demone o direttamente da un client). Un esempio di risultato di questo comando ` il seguente: e parker:/var/log# lpq status Printer: rlp@parker ’Remote printer entry’ (dest epson@davis) Queue: no printable jobs in queue Server: no server active Status: job ’root@parker+648’ saved at 16:48:21. Come i precedenti esso opera sulla coda di default a meno di non usare l’opzione -P per specificarne un’altra o l’opzione -a per indicarle tutte. 36 .36 mentre se non si specifica nulla viene selezionata la prima che pu` essere rimossa. L’uso della parola chiave all seleziona tutte le stampe presenti.5. se usato dall’amministratore. al suo posto invece si deve usare semplicemente l’argomento “-”. ma un utente potr` rimuovere solo quelle per i quali ha il permesso (per la gestione dei permessi si a veda sez. 2. Chiude la lista dei programmi ausiliari lpc. Entrambe le forme supportano l’utilizzo dei caratteri jolly del filename globbing (vedi sez. 3. 3. L’uso di lprm serve a richiedere a lpd la cancellazione delle stampe selezionate. in cui ` prevista la presenza di una serie di e file di configurazione per i vari compiti eseguiti dal demone. Si pu` invece o o bloccare l’immissione di stampe su una coda con disable e riabilitarla con enable. questa ` una caratteristica della versione di lprm del pacchetto lpr-ng.800 Rank Owner/ID Class Job Files epson is ready no entries Size Time 3. Per le altre opzioni ed i dettagli di funzionamento del programma si faccia riferimento alla pagina di manuale. Il primo comando ` help che stampa la lista di tutti quelli e disponibili. Una volta creata una stampa. Pertanto la configurazione della stampante su una macchina che usa questo sistema consiste nel configurare opportunamente lpd. Di nuovo il comando o opera sulla coda di default a meno di non usare l’opzione -P per specificarne un’altra o l’opzione -a per indicare di operare su tutte le code.5. seguito da eventuali parametri per lo stesso. che tramite il nome dell’utente ad esse associato. Se non si specificano argomenti il programma si porta su una linea di comando interna.5.3.1. da cui questi possono essere specificati. o del sistema. Nel nostro caso esamineremo la configurazione soffermandoci specificamente sul caso particolare di LPRng. questo a prende come argomenti la lista delle stampe da rimuovere che possono essere indicati sia tramite il loro identificativo (quello stampato da lpr o riportato da lpq).4). e permette perci` di trasformare una qualunque stampante presente o sulla propria macchina in una stampante di rete. la si potr` eliminare dalla coda con il comando lprm. Il programma prende come argomenti un comando.3 La configurazione della stampa con LPRng Come accennato il principale programma di un sistema di stampa in stile BSD ` il demone e lpd che gestisce l’invio dei file dalla coda di stampa alla stampante.8. il pacchetto originale del demone di e stampa di BSD non supporta questa opzione. L’elenco dei principali comandi ` riportato in tab. con l’opzione -U si pu` richiedere (se si ` root) di operare a nome di un altro o e utente.

ma ` meglio farlo per compatibilit`. l’identificativo della stampa e la coda di destinazione. cio` la directory su cui verranno appoggiati temporaneamente i file da stampare. sposta una stampa da una coda ad un’altra. ` utilizzato principalmente quando un demoe ne termina lasciando dei job sulla coda per riavviarlo. Il primo campo indica il nome della coda di stampa. che controllano le caratteristiche della coda e della stampante associata. e se la stampante ` locale deve essere specificato il campo lp che indica quale dispositivo usare. abilita l’immissione di nuove stampe su una coda di stampa. che vengono accodate ma non stampate. prende come argomento il nome della coda o all per indicare tutte le code. usato da tutti i demoni di stampa in stile BSD. Al solito righe vuote e tutto quello che segue il carattere # viene ignorato. enable exit hold holdall move release start status stop topq up Il primo file di configurazione.136 Comando disable down CAPITOLO 3. Tabella 3.8: I principali comandi di lpc. seguito da una assegnazione con un “=” se il suo valore ` una stringa o con un “#” se e il valore ` numerico. sblocca la sospensione della stampa per una coda o una stampa specifica. prende come argomento il nome della coda o all per indicare tutte le code. prende come argomenti la coda di origine. blocca ogni ulteriore stampa dopo il completamento della stampa corrente. avvia una stampante. prende come argomento il nome della coda o all per indicare tutte le code. nel qual caso si usa semplicemente e la presenza del rispettivo identificativo. Ciascun blocco ` composto da una serie di campi separati dal e carattere “:”. prende come argomento il nome della coda o all per indicare tutte le code. Il file ` composto da una serie di blocchi. sospende automaticamente tutte le nuove stampe. ciascun campo inizia sempre per un identificativo di due caratteri. Di questi campi ` fondamentale specificare sempre sd. indica la e spool directory. un terzo tipo di campi ha valore logico. abilita sia l’immissione nella coda che la stampa. se e invece la stampante ` remota si deve specificare un campo rm (da remote machine) per indicare e 37 in realt` con LPRng questo non ` necessario. prende come argomento il nome della coda o all per indicare tutte le code.37 si tenga conto che l’ultimo campo deve essere anch’esso terminato col carattere “:”. prende come argomento il nome della coda o all per indicare tutte le code. LA CONFIGURAZIONE DEI SERVIZI DI BASE Significato disabilita l’immissione di stampe su una coda di stampa. prende come argomento il nome della coda seguito dalla lista degli identificativi delle stampe. Tutti gli altri campi. esso pu` riportare pi` nomi (per una o u migliore identificazione della stampante associata) separati con la barra verticale “|”. uno per ciascuna e coda che si intende utilizzare. ` /etc/printcap. che come il nome fa supporre. prende come argomento il nome della coda o all per indicare tutte le code. disabilita sia l’immissione di nuove stampe in coda che la stampa di quelle presenti. sospende la stampa (su una stampante o per una singola stampa). esce dal programma. prende come argomento il nome della coda ed eventualmente l’identificatore della stampa. a e e a . e Il file contiene la definizione delle code di stampa con la assegnazione delle stampanti (e degli eventuali filtri) ad esse associate. sposta le stampe selezionate in cima alla coda di stampa. prende come argomento il nome della stampante ed eventualmente l’identificatore del job. riporta lo stato di una coda e relativa stampante. prende come argomento il nome della coda o all per indicare tutte le code. possono essere specificati in ordine qualsiasi. un blocco pu` essere scritto su pi` righe terminando ciascuna di esse con la barra o u rovescia “\” come si fa per la shell.

3. remote printer. prende come valore un pathname. Si pu` usare questo file per specificare valori di default validi in generale per i parametri di o /etc/printcap. nome della directory dove vengono mantenuti i file da stampare presenti nella coda. account file. Questa ` la pi` grossa differenza con il sistema di stampa di BSD classico. insieme a tutti gli altri file del sistema. al solito per l’elenco completo ed i dettagli si pu` fare riferimento alla pagina di manuale.perms che viene utilizzato per il controllo degli e accessi. in /etc/lprng. lpd. 3. da specificare come stringa. da specificare come valore numerico. ma dato che tutti i valori sono ad un default corretto di norma questo non deve essere modificato. oltre alle modalit` previste per quest’ultimo.9: I principali campi di /etc/printcap. nome della macchina remota cui inviare le stampe. ad esempio con la direttiva lockfile si specifica la locazione del file di lock utilizzato per indicare la presenza di un demone che gira nel sistema. mentre con la direttiva include si possono includere altri file. contiene la configurazione generale del demone. Al solito si rimanda alla pagina di manuale. I principali campi del file sono riportati in tab. da specificare come stringa contentente l’hostname o l’indirizzo IP (in notazione dotted decimal). da specificare in byte come valore numerico. che deve leggere i dati dallo standard input e riemettere il risultato del filtraggio sullo standard output. line printer. remote machine. suppress header. e l’assegnazione. IL SISTEMA DI STAMPA 137 l’hostname del computer (o l’indirizzo IP) su cui essa si trova ed il campo rp (da remote printer ) per indicare il nome (cio` la coda di stampa) con cui essa ` identificata dal demone LPD presente e e su quel sistema. lf af lp mx pl pw rm rp sd sh Nel caso di LPRng il demone lpd viene controllato anche da altri due file di configurazione. sopprime la stampa delle intestazioni. file di dispositivo su cui ` situata la stampante (o pipe cui e pu` essere inviato il file da stampare). o Campo if Significato input filter.lpd (alternativamente viene usato. file su cui viene registrato il rendiconto delle pagine stampate. I parametri hanno gli stessi nomi usati in /etc/printcap. usualmente mantenuti. page lenght. nome della coda di stampa su una macchina remota. da specificare come valore numerico. ` un valroe e logico. prende come valore un pathname. Il primo file. accessibile con man lpd. ma la sintassi prevede che il file contenga l’assegnazione di un parametro per ogni riga (al solito righe vuote e tutto quello che inizia per # viene ignorato) anzich´ separati da e “:”. ` quello che permette le conversioni e di formato. prende come valore il relativo o pathname. spool directory.5. larghezza della pagina in caratteri.9. con printcap_path si indica la posizione di default del file printcap. questo infatti e u utilizza semplicemente il file /etc/hosts. anche . dimensione massima della pagina da stampare. prevede anche quella di utilizzare il carattere @ per identificare a un valore logico. page width. file su cui vengono registrati tutti gli errori del sistema. Il secondo file di configurazione di lpd ` lpd. prende come valore il pathname al programma da usare come filtro. indica il filtro da applicare a tutti i file immessi sulla coda prima di inviarli alla stampante. se presente. Il file permette inoltre di specificare una serie di configurazioni generali del demone usando delle opportune direttive che non corrispondono a nessun parametro di printcap.conf. lunghezza della pagina in righe. per i dettagli e l’elenco completo delle direttive. log file. Tabella 3.conf.

valore]* ]* REJECT [[not] chiave = valore[. vera quando la richiesta ` locale.equiv) per indicare le macchine da cui ` consentito collegarsi per stampare da remoto. macchina da cui ` stato inserito la stampa richiesta (definita per le e operazioni su stampe esistenti). a richiesta di lpr da un host remoto. se si deve usare quest’ultimo carattere in una configurazione lo si deve pertanto proteggere con una barra inversa “\”. Al solito righe vuote e tutto quello che segue un “#” viene ignorato. equivalente a NOT SAMEHOST Tabella 3. richiesta di rimozione di una stampa tramite lprm. la richiesta proviene dalla stessa macchina da cui ` stato inserito la e stampa (definita per le operazioni su stampe esistenti). La chiave pi` importante ` SERVICE. e per le richieste di controllo specifica quali dei comandi di lpc possono essere eseguiti nome della stampante (o meglio della coda) cui viene richiesto l’accesso. l’uso della direttiva DEFAULT serve a stabilre cosa succede quando non sono state specificate condizioni. operazione amministrativa di un utente. utente cui appartiene la stampa richiesta (definita per le operazioni su stampe esistenti). il controllo dei permessi viene fatto usando un insieme di chiavi il cui valore viene confrontato con quanto specificato nel file.perms. che permette di classificare il tipo di richiesta di accesso. utente da cui proviene la richiesta di accesso. Tabella 3.138 CAPITOLO 3. la richiesta proviene dallo stesso utente cui appartiene la stampa (definita per le operazioni su stampe esistenti).perms. u e quando non la si specifica si intende applicare la condizione seguente a qualunque tipo di accesso. i cui valori p[ossibili. Il file contiene una serie di direttive tutte nella forma: ACCEPT [[not] chiave = valore[. richiesta di elencazione delle stampe tramite lpq. . richiesta dello stato dello spool di stampa con lpc. e mentre con LPRng nessuno di questi file viene utilizzato. Valore REMOTEHOST REMOTEPORT REMOTEUSER SERVER LPC PRINTER USER HOST SAMEUSER SAMEHOST FORWARD Significato lista degli IP da cui accettare connessioni remote (indicato alternativamente come REMOTEIP). richiesta di controllo remoto tramite lpc. porta da cui viene effettuata la connessione (indicata alternativamente come PORT). u Le direttive REJECT e ACCEPT specificano. LA CONFIGURAZIONE DEI SERVIZI DI BASE host.11: Principali chiavi per le restrizioni di accesso in lpd. 3. connessione remota.10. questa pu` prendere uno o pi` dei valori identificata da una lettera.10: Valori del campo SERVICE in lpd. e o u relativo significato sono riportati in tab.valore]* ]* DEFAULT ACCEPT DEFAULT REJECT dove con le parenteis quadre seguite dall’asterisco si intende che una combinazione pu` essere o ripetuta pi` volte (per specificare ulteriori condizioni). se accettare o meno un certo accesso sulla base della condizione espressa di seguito. Valore P R C M Q S U X Significato capacit` di inviare alla stampante il contenuto della coda. come il nome rende evidente.

come dicevamo infatti la gestione di stampanti. come la creazione il controllo e la rimozione di stampe e code di stampa o la configurazione delle stampanti. cupsd. che vengono controllate sequenzialmente. pu` essere eseguita o direttamente tramite un browser qualunque. per un elenco dettagliato si pu` fare o riferimento alla pagina di manuale accessibile con man lpd. acronimo di Internet Printing Protocol.5. 38 il server web pi` diffuso.5. ma ad ogni richiesta di accesso alcune di esse (a seconda del tipo di accesso) vengono inizializzate con i valori relativi ai parametri della richiesta. Questo ` il file configura il servizio nel e suo insieme. ` il seguente: e REJECT NOT SERVER ACCEPT SERVICE=C SERVER REMOTEUSER=root ACCEPT SERVICE=C LPC=lpd.perms. NomeDirettiva valore dove il nome della direttiva ` composto da normali caratteri.conf. In tab. IL SISTEMA DI STAMPA 139 Tutte le chiavi partono con un valore nullo.printcap REJECT SERVICE=C ACCEPT SERVICE=M SAMEHOST SAMEUSER ACCEPT SERVICE=M SERVER REMOTEUSER=root REJECT SERVICE=M REJECT SERVICE=R FORWARD DEFAULT ACCEPT In questo caso la configurazione si apre vietando ogni accesso che non sia locale. Il formato del file ` simile a quello del file di e 38 la maggior parte sono una serie di direttive elementari nella forma: configurazione di Apache. mentre per chiunque altro viene consentito (con la direttiva LPC) di utilizzare solo i comandi in essa elencati. anche se ` possibile usare degli opportuni a e comandi di shell per eseguire gli stessi compiti. e e cupsd. 3. che di norma viene installato in /etc/cups. e questa resta la modalit` principale. che ` controllato da un file di configurazione. quando una di queste viene verificata gli ulteriori controlli vengono evitati. e il valore viene specificato di e seguito separato da uno spazio.4 Il Common Unix Printing System Un approccio completamente nuovo e diverso rispetto a quello di LPD ` quello realizzato da e CUPS (acronimo di Common Unix Printing System). che baster` puntare sulla porta 631 della macchina a da amministrare.11 si sono riportate le principali chiavi ed il relativo significato. che realizza tutta l’interfaccia al sistema di stampa attraverso un apposito servizio (in genere posto sulla porta 631) con cui si comunica via rete usando il protocollo HTTP.status. code e stampe avviene attraverso l’interfaccia che il servizio mette a disposizione. che poi saranno confrontati con le condizioni indicate all’interno di lpd. Un esempio di lpd. ??. solo a root di controllare il demone con lpc in maniera completa. Si elimina poi possibilit` di connettersi da a qualunque altra macchina che non sia quella locale. Il file esprime sempre un elenco di condizioni. e L’uso di un protocollo di rete che ` comunque basato su HTTP ha il grande vantaggio che con e CUPS buona parte dell’amministrazione del sistema di stampa.perms. Il servizio ` fornito da un demone. u . Rispetto ad un server HTTP per` un server CUPS prevede o una comunicazione con caratteristiche specifiche che sono state standardizzate nell’RFC 3239 in cui ` definito il protocollo IPP. Dopo di che viene consentito.3. o in maniera generica all’amministratore.perms. che tratteremo in sez. con le regole per il servizio “C”. estratto dalla versione installata su una Debian Sid. 3. al solito righe vuote o inizianti per un “#” vengono ignorate. Per quanto riguarda invece la capacit` di cancellare a un file (il servizio “M”) lo si permette solo a richieste provenienti dallo stesso utente e dalla stessa macchina.

livello dei messaggi da parte del demone. u per l’elenco completo con una descrizione sommaria si pu` fare riferimento alla pagina di mao nuale. Per una documentazione completa invece si pu` fare riferimento ai manuali on-line direttamente o accessibili attraverso l’interfaccia del sistema (un’altro dei vantaggi di avere un protocollo basato su HTTP) o reperibili su http://www. il default ` 0 e significa nessun o e limite. richiede come valore il nome del file o la parola chiave syslog che invia le informazioni all’omonimo servizio. Questa funzionalit` ` attivata ae di default (ma pu` essere disattivata impostando ad off la direttiva Browsing) e pu` essere o o controllata con la direttiva BrowseAddress per indicare l’indirizzo di broadcast cui inviare le richieste di riconoscimento. e numero massimo di stampe per utente. ServerRoot TempDir User MaxCopies MaxJobs MaxJobsPerUser In tab. inoltre in genere le distribuzioni installano una versione predefinita di questo file in cui tutte le opzioni (anche quelle non attivate esplicitamente) sono abbondantemente commentate. abilita o disabilita il riconoscimento automatico delle stampanti presenti (prende i valori on o off). in sostanza lo spool di stampa (di default ` /var/spool/cups/tmp).cups. e la directory in cui inserire i file temporanei. Direttiva AccessLog BrowseAddress BrowseAllow BrowseDeny Browsing DataDir DefaultCharset DocumentRoot ErrorLog Group Include LogLevel PageLog Port Printcap Significato il file su cui vengono registrati gli accessi. Oltre alle direttive appena illustrate. ma con le direttive BrowseAllow e BrowseDeny si possono indicare quali sono le macchine (o le reti) le cui richieste vengono accettate o rifiutate.12: Principali direttive per il file /etc/cups/cupsd. indirizzo di broacast cui inviare le richieste di riconoscimento. richiede come valore il nome del file o la parola chiave syslog che invia le informazioni all’omonimo servizio. Normalmente tutte le richieste vengono accettate. del tipo: <Location /percorso> . che usano la sintassi elementare in cui si esprime la corrispondenza di un valore ad una parola chiave. una o delle caratteristiche pi` interessanti di CUPS per` `l a sua capacit` di riconoscere automaticau oe a mente le stampanti presenti su una rete (il cosiddetto browsing). e Tabella 3. numero massimo di stampe in coda.conf. numero massimo di copie che un utente pu` richiedere. il default ` 0 e significa nessun limite. 3. il set di caratteri di default. il file su cui vengono registrati gli errori. gruppo per conto del quale viene eseguito cupsd (di default lpadmin). LA CONFIGURAZIONE DEI SERVIZI DI BASE Con la direttiva Port si pu` specificare la porta su cui il servizio si pone in ascolto. specifica la porta su cui si pone in ascolto il demone cupsd (il default ` 631). il file su cui vengono registrati i dati sulle pagine stampata. e specifica su quale file riprodurre un file printcap che faccia da sostituto per /etc/printcap per i programmi che necessitano di quest’ultimo per riconoscere le code di stampa.conf. e utente per conto del quale viene eseguito cupsd (di default lp). in particolare queste sono quelle usate effettuare il controllo degli u accessi all’interfaccia di rete fornita da cupsd con cui ` possibile gestire il controllo del sistema e di stampa attraverso il protocollo IPP. Queste direttive sono in genere specificate in coda al file. indirizzo o rete da cui non accettare le richieste di riconoscimento. la directory radice per i documenti HTTP (come la documentazione) che vengono messi a disposizione attraverso l’interfaccia. la directory dove sono mantenuti i dati di CUPS. cupsd. il default ` 0 e significa nessun limite.140 CAPITOLO 3. ed hanno una forma diversa. specifica la directory radice per il demone cupsd.org/. di default ` /etc/cups.conf prevede la presenza di direttive con una sintassi pi` complessa. richiede come valore il nome del file o la parola chiave syslog che invia le informazioni all’omonimo servizio.12 sono riportate le pi` importanti direttive elementari di /etc/cups/cupsd. permette di includere un altro file nella configurazione. indirizzo o rete da cui accettare le richieste di riconoscimento.

abilita la cifrature della connessione. Accesso alle operazioni sulle stampanti. l’accesso alle varie funzionalit` del sistema di stampa via IPP viene infatti gerarchizzato in una a struttura ad albero analoga a quella dei file.. ed espressa appunto con dei “percorsi” a partire da una radice “/” avendo accesso alla quale si diventa in grado di compiere qualunque operazione.it o . prende come valori: None che non effettua a nessuna autenticazione.Allow in cui si accettano solo le richieste consentite con una direttiva Allow.. Accesso operazioni amministrative (creazione. ma che sono utilizzabili solo all’interno di una collocazione.it per indicare tutti le macchine in un dominio. che hanno una sintassi identica alle direttive elementari viste in precedenza. I principali percorsi utilizzabili in una collocazione u sono illustrati in tab. che definisce la politica di accesso: se l’accesso ` consentito e . Digest e BasicDigest che utilizzano le credenziali specifiche memorizzate in /etc/cups/passwd. 3. Specificando un percorso a partire da detta radice si possono definire le propriet` di accesso a per insiemi sempre pi` ristretti di operazioni. usa gli stessi valori appena descritti per Allow. definisce il livello di autenticazione richiesto.14: Le direttive di accesso usate in una collocazione.2) o un nome a dominio. questo viene fatto attraverso una serie di ulteriori direttive.Deny in cui si accettano tutte le richieste eccetto quelle negate da un direttiva Deny e Deny.13. IfRequested. cancellazione.dominio. definisce le modalit` di autenticazione. </Location> 141 Una direttiva Location viene utilizzata per identificare quella che si chiama una collocazione. AuthClass AuthType Allow Deny Encryption Una collocazione prevede sempre la presenza di una direttiva Order (posta per chiarezza come prima direttiva al suo interno). specifiche per l’indicazione di regole di accesso. queste ultime devono essere specificate all’interno della collocazione stessa. Percorso / /admin /classes /classes/name /jobs /printers /printers/name Descrizione Accesso a tutte le operazioni. per l’elenco completo si pu` fare riferimento alla documentazione in o linea di CUPS. IL SISTEMA DI STAMPA DirettivaAccesso1 valore1 DirettivaAccesso2 valore2 .dominio.13: I percorsi per l’accesso alla gestione delle operazioni definibili all’interno di una collocazione. Accesso alle operazioni sulle stampe. User che richiede utente e password. Direttiva Order Significato Definisce la modalit` con cui vengono gestite le autorizzazioni con le direttive Deny e a Allow. nega l’accesso. e Tabella 3. prende come valori: Anonymous che disabilita l’autenticazione.3. prende come valori: Never.2. o la parola chiave All. consente l’accesso. Required il cui significato ` autoesplicativo. 7. System che inoltre richiede che l’utente appartenga al gruppo sys (o a quello specificato con la direttiva SystemGroup). vedi sez.5. Una volta che con la scelta di un percorso nella direttiva Location si ` definito a quale e classe di operazioni si vuole che siano applicate le regole di accesso. prende come valori: Allow. impostazione e avvio delle stampanti e delle code). Accesso alle operazioni sulle classi. prende come valore un numero IP di una singola macchina o di una rete (in notazione CIDR. Tabella 3. Basic che effettua l’autenticazione usando e credenziali standard della macchina. consentendo notazioni del tipo *.md5. Accesso alle operazioni sulla stampante name. Accesso alle operazioni sulla classe name. Group che richiede che l’utente appartenga al gruppo definito dalla direttiva AuthGroupName.

In pratica tutte le invocazioni di lpadmin richiedono l’uso di questa opzione. che ` quello che si pu` utilizzare e e o per definire le propriet` generali delle stampanti presenti nel sistema. e Alla direttiva Order devono poi seguire successive direttive Allow o Deny per indicare le macchine da cui vietare o consentire gli accessi.cupsrc nella propria home directory. 3. Il concetto di base ` quello a e 39 cui fare sempre riferimento con l’opzione -p seguita dal di definire delle stampanti logiche. ` il seguente: e DefaultCharset notused LogLevel info Printcap /var/run/cups/printcap Port 631 <Location /> Order Deny. e direttive come AuthType e AuthClass per indicare le eventuali modalit` di autenticazione. 3. I valori utilizzabili per queste direttive sono riportati a in tab.conf. seriale. Oltre alla configurazione lato server ` possibile specificare una configurazione generale sul e lato client (per tutti i programmi cio` che si appoggiano a CUPS per la stampa). In genere le direttive principali che si utilizzano in detti file sono ServerName che prende come valore il nome della macchina cui rivolgersi come server di stampa e Encryption che prende gli stessi valori della omonima vista in tab. nome. e ci si limita in sostanza a consentire l’accesso all’interfaccia via rete solo in locale. LA CONFIGURAZIONE DEI SERVIZI DI BASE per default si utilizza il valore Allow. Un esempio del contenuto di /etc/cups/cupsd.142 CAPITOLO 3. tranne il caso in cui si usi al suo posto -x che richiede la cancellazione di una stampante logica. e le si chiamano cos` in quanto si possono associare pi` stampanti logiche ad una stessa stampante fisica. 39 . il primo di questi ` lpadmin. cosa che si fa attraverso l’opzione -v.conf. che indica con quale modalit` ` possibile raggiungere ae la stampante stessa (se sulla porta parallela. Per creare una stampante logica oltre ad identificarla con -p occorrer` anche definire con a quale dispositivo vi si accede. e pu` essere personalizzata dal o singolo utente in un file . in cui sono illustrate le principali direttive di accesso. questa prende come argomento quello che la documentazione chiama un device-URI.14. richiedendo per l’amministrazione un’autenticazione basata sul corrispondente utente sulla macchina su cui si sta operando.Allow.Allow Deny From All Allow From 127. o via rete secondo vari protocolli di comunicazione).14 per il server.0. mentre se ` vietato si utilizza il valore Deny.1 </Location> In questo esempio gran parte delle opzioni sono lasciate al valore di default. per una descrizione pi` u dettagliata di tutte le direttive e della relativa sintassi si pu` fare nuovamente riferimento alla o documentazione di CUPS.0.0. che viene e mantenuta a livello di sistema nel file /etc/cups/client. cio` una stringa nella forma di un e indirizzo simile a quello di un sito web.0.15. Come accennato anche se la gran parte della gestione e della configurazione del sistema di stampa viene gestita attraverso l’interfaccia web fornita da CUPS ` comunque possibile utilizzare e anche una serie di comandi di shell. un breve elenco di possibili valori ` riportato in tab. che indica la modalit` con cui eseguire a una eventuale cifratura della connessione.1 </Location> <Location /admin> AuthType Basic AuthClass System Order Deny. 3.Deny. USB. estratto (togliendo i commenti) dalla versione installata con il pacchetto cupsys su una Debian Sarge. una ı u stampante logica ha una rozza equivalenza alla coda di stampa vista per LPD.Allow Deny From All Allow From 127.

stampante di rete windows raggiungibile tramite Samba.5. e che questa ` una e operazione diversa rispetto a quella di accettare o rifiutare l’immissione di nuove stampe sulla relativa coda.printer.ip smb://remote.printer. Il comando per richiedere una stampa ` invece lp (anche se il sistema supporta l’uso di lpr e . 143 Tabella 3. stampante locale su porta USB. IL SISTEMA DI STAMPA Nome ipp://remote. rimuove una stampante logica. stampante locale su porta seriale. al solito si pu` fare riferimento o alla pagina di manuale o alla documentazione di CUPS per un elenco completo e per la descrizione dettagliata. Indica la macchina remota su far operare il comando. cos` che indicando di stampare su quella classe la stampa viene effettuta su ı una delle stampanti che ne fanno parte. se una classe non esiste viene creata all’inserimento della prima stampante.printer.ppd -E -h host Descrizione indica la stampante logica su cui si sta operando. Una delle caratteristiche pi` interesanti di CUPS ` quella di permettere di definire delle classi u e di stampanti. questo ` un po’ l’equivalente a e del filtro di stampa. questo si fa con l’opzione -P che associa alla stampante logica il relativo file PPD (PostScript Printer Description) che ne descrive le capacit`.15). inserisce in una classe una stampante logica. Opzione -p stampante -x stampante -d stampante -c classe -r classe -v URI -P file. rimuove una stampante logica da una classe. in quanto serve a definire quali sono le modalit` con cui alla fine i file a vengono stampati. Tabella 3. come per disable anche reject supporta l’opzione -r con lo stesso significato. questa seconda operazione viene fatta invece con i comandi accept e reject. stampante di rete raggiungibile con protocollo LPD.15: Le diverse possibili specificazioni per gli indirizzi del dispositivo associato ad una stampante (device-URI ). in sostanza una classe definisce un gruppo di stampante che pu` essere trattato o come un insieme. che di nuovo richiedono come argomento il nome della stampante.16: Principali opzioni del comando lpadmin.16. il comando reject inoltre supporta l’opzione -c che permette di rimuovere tutte le stampe pendenti.ip lpd://remote. 3. abilita una stampante logica rendendola disponibile per la stampa. Una volta definita una stampante logica questa pu` essere abilitata o disabilitata alla stampa o rispettivamente con i comandi enable e disable che prendono come argomento il nome della stessa. imposta la stampante come stampante di default. Le principali opzioni del comando sono riportate in tab. se si elimina l’ultima stampante la classe viene cancellata. stampante locale sulla porta parallela. La definizione delle classi viene fatta tramite le opzioni -c e -r di lpadmin che permettono rispettivamente di inserire o eliminare una stampante dalla classe passata come argomento. definisce il file di descrizione della stampante da utilizzare.ip parallel:/dev/lp0 usb:/dev/lp0 serial:/dev/lp0 Descrizione stampante di rete raggiungibile con protocollo IPP.3. 3. indica il dipositivo da usare per parlare con la stampante (secondo il formato illustrato in tab. e a Si tenga presente comunque che abilitare o disabilitare una stampante logica significa sostanzialmente abilitare o disabilitare l’esecuzione delle stampe su di essa. Oltre a definire come si pu` parlare con la stampante ` necessario anche specificare quale o e “linguaggio” usare. e -r che prende come argomento una stringa in cui le motivazioni per cui la stampante ` stata disabilitata (che sar` riportata dai comandi diagnostici).

resume la avvia immediatamente e restart riesegue una stampa completata (gli ultimi due valori richiedono l’uso di -i per identificare la stampa cui si fa riferimento). specifica una priorit`. entrambe richiedono il nome di . Le opzioni principali sono a riportate in tab. specifica la stampante o la classe da usare. specifica la macchina remota cui inviare la stampa. specifica la stampa su cui operare.17. il comando richiede una delle opzioni -v o -m per stampare rispettivamente la lista dei dispositivi utilizzabili e quella delle stampanti supportate. con l’opzione -a una stampante o una classe. LA CONFIGURAZIONE DEI SERVIZI DI BASE con la stessa sintassi vista in sez. che prende come argomento il file da stampare. Infine per ottenere informazioni riguardo il sistema di stampa ci sono due comandi. Il comando usa le opzioni -E e -h con lo stesso significato visto in tab.17: Principali opzioni del comando lp. un tempo in formato HH:MM la blocca ad allora. a specifica quando eseguire una stampa: hold la blocca indefinitamente.5.2). L’opzione -c richiede la stampa delle informazioni relative ad una classe (o a tutte se non si specifica quale classe). o se specificato. mentre se si vuole stampare su una macchina remota specifica occorre specificarla come parametro per l’opzione -h. per l’elenco completo ed i dettagli si pu` fare riferimento alla pagina di o manuale. In questo caso per indicare la stampante da usare si usa l’opzione -d che prende come parametro il nome della stampante o della classe. classi e e stampe attive. -P Tabella 3. Altre due opzioni utili sono -n che permette di specificare il numero di copie da stampare e -q che permette di impostare una priorit` (un numero da 1 a 100. il primo ` lpinfo che permette di vedere i dispositivi fisici ed i supporti per le stampanti disponibili e all’interno di CUPS. Il comando supporta anche l’opzione -h con lo stesso sigificato di lp. Per cancellare una stampa si pu` invece usare il comando cancel. Opzione -E -d -h -i -n -q -H Descrizione forza una comunicazione cifrata col server.. direct usb:/dev/usb/lp15 network smb Il secondo comando ` lpstat che riporta le informazioni relative alle singole stampanti. specifica il numero di copie da stampare. 3.. Ad esempio se si vuole ottenere una lista dei dispositivi visibili da riutilizzare con l’opzione -v di lpadmin si pu` eseguire o il comando: monk:~# lpinfo -v network http network ipp network lpd direct parallel:/dev/lp0 direct usb:/dev/usb/lp0 .17. nel qual caso saranno cancellate tutte le stampe presenti su di essa.144 CAPITOLO 3. 3. l’opzione -a riporta lo stato di una coda (e delle eventuali stampe in attesa). specifica quali pagine stampare (passati come lista separate da virgole o intervalli separati da “-”). con valore di default pari a 50). e lo invia sulla stampante di default riportando a video un identificatore associato alla stampa in maniera analoga a lpr. che prende come argomento o l’identificatore della stampa. al solito per i dettagli si faccia riferimento alla pagina di manuale. mentre l’opzione -p riporta lo stato di una stampante. 3.

IL SISTEMA DI STAMPA 145 una stampante logica da interrogare.5. Ulteriori dettagli sul comando e l’elenco completo delle opzioni si trovano al solito sulla pagina di manuale . e riportano lo stato di tutte quelle definite se questa non viene specificata.3.

LA CONFIGURAZIONE DEI SERVIZI DI BASE .146 CAPITOLO 3.

Per questo motivo occorre prendere le a opportune misure per assicurarsi contro questa evenienza. errori del software e a guasti dell’hardware. ci` non di meno i guasti contio nuano ad esserci. affidabile e sicuro ` sempre un caso piuttosto raro. Tratteremo le modalit` con cui si a possono eseguire i backup sia di file e directory che di interi filesystem. ma questo copre soltanto un caso particolare di guasti dell’hardware. In a e questa sezione prenderemo in esame i programmi per la gestione degli archivi di dati.Capitolo 4 Amministrazione ordinaria del sistema 4. per la gestione dei backup e la duplicazione dei dati dei dispositivi. in generale si tende a classificarle in quattro categorie diverse: disastri naturali. per quanto ridotto. con la separazione dei privilegi. In questo la struttura di un sistema Unix. e la perdita degli stessi significa spesso la perdita di grandi quantit` di ore di lavoro. ed inoltre e l’affidabilit` di un singolo programma ` relativamente inutile se un altro va a sovrascrivere per a e errore i suoi dati. sia in termini a e delle competenze che riducano la eventualit` di errori nelle operazioni (che per` possono sempre a o accadere anche al pi` esperto degli amministratori) sia nell’affidabilit` personale diretta in caso u a 147 .1. Nel caso dei dischi una possibile assicurazione contro il malfunzionamento ` e e quello dell’uso del RAID (vedi sez. ma di nuovo non ` la soluzione al problema di o e eventuali perdite di dati. Ci possono essere varie ragioni per cui si possono perdere dei dati. ed un programma solido. che per quanto ben costruiti u hanno una loro fragilit` meccanica e sono comunque dispositivi basati sulla lettura di campi a magnetici di bassissima intensit`. attivit` umane.1 Criteri generali per il backup Quella dei backup ` probabilmente la principale attivit` di ogni sistemista. e la sfortuna ` in agguato per farli avvenire nel peggior momento possibile. Nel mondo dell’ine a formatica i dati sono il principale prodotto del lavoro svolto. L’affidabilit` delle persone ` sempre una variabile difficile da quantificare. 6. ciascuna di queste comporta rischi specifici ed opportune contromisure.1). Al contrario dell’hardware l’affidabilit` del software non sembra subire particolari miglioraa menti. Oggi l’hardware tende ad essere sufficientemente affidabile. a non ` trascurabile. e l’uso di utenti distinti pu` essere di aiuto. per cui il rischio di malfunzionamento. ed il backup ` la principale di queste e misure.1 Archiviazione e backup Una delle attivit` fondamentali della amministrazione di un sistema ` quella dei backup. 4. e In genere in questo caso i dispositivi pi` critici sono gli hard disk.

che qualora fossero gi` e a assenti alla data dell’ultimo backup disponibile sarebbero irrimediabilmente perduti. direttamente o indirettamente. se e non nel caso in cui una reinstallazione da zero non comporti un carico di lavoro eccessivo. nell’ambito di un sistema GNU/Linux. o se si vuole mantenere una storia completa per ragioni di archiviazione. occorre sempre valutare quanto la distruzione completa dei propri dati all’interno di un evento catastrofico possa incidere in termini di perdite complessive e determinare se vale la pena di prevedere delle contromisure specifiche per tali evenienze (che spesso comportano un discreto aggravio di spese sia in termini di attrezzature che di gestione). pi` risorse dovranno essere utilizzate nella u a u manutenzione dei backup. come ogni altra cosa del mondo reale infatti essi possono fallire e al solito tenderanno a farlo nel peggior modo e momento possibili.148 CAPITOLO 4. Infine la scelta del periodo da coprire con i backup dipende dall’uso degli stessi. a In genere un primo passo ` quello di definire cosa si intende inserire nel backup: ad esempio e non ` quasi mai strettamente indispensabile effettuare un backup dei programmi di sistema. mantenere dei backup ` la strategia pi` semplice ed efficace per proteggersi e u dalle molteplici evenienze che possono causare la perdita di dati. Ci sono infatti parecchie variabili da tenere sotto controllo. occorre stabilire anche il periodo di tempo che si intende coprire con i backup. per cui potreste trovarvi senza disco e scoprire che un nastro ` illeggibile. o che vi siete dimenticati di inserire nel backup alcune informazioni e essenziali. e non della ricreazione da zero degli stessi. ed eventualit` remote ma completamente distruttive a di ogni tipo. Questo ad esempio vuol dire. le modalit` di gestione degli stessi. mentre pu` essere importante salvare delle configurazioni ottenute come risultato finale di parecchie ore o di lavoro. non si potrebbero recuperare eventuali dati cancellati in precedenza. dato che se questo dovesse eccedere il periodo fra due e backup successivi si avrebbe una situazione in cui un backup non si completa prima dell’inizio del successivo. /var e /home. insieme ai dati personali dei e singoli utenti. il costo della perdita si riduce semplicemente a quello del ripristino degli stessi da backup. Per quanto riguarda i disastri naturali. e la frequenza con cui si effettuano questi ultimi. Questo comporta che deve essere determinata la frequenza con cui si vogliono effettuare i backup. e quant’altro non ` replicabile in maniera automatica. . Se infatti si avesse un sistema di backup contenente solo le informazioni necessarie a ripristinare la situazione ad un certo istante. la distruzione di dati o il danneggiamento dei relativi supporti. o che l’unica unit` a nastro in grado di rileggere i vostri backup si ` rotta pure lei. Un altro fattore che incide sulla frequenza ` il tempo che occorre a creare il backup. Ovviamente pi` lungo sar` il periodo. a e Per questo motivo nell’effettuare dei backup il primo punto ` quello di mettere a punto e una opportuna strategia. avere a disposizione copie multiple dei propri dati rende meno critica la perdita di una di esse. ad esempio se servono solo a mantenere una copia di riserva che permetta il recupero di eventuali cancellazioni accidentali passate inosservate. Una volta determinata la dimensione totale dei dati che si vogliono archiviare. Come accennato. in modo da poter essere in grado di ricostruire la situazione dei propri dati ad istanti diversi nel passato. la frequenza dei backup. il periodo che a si intende coprire con il backup. AMMINISTRAZIONE ORDINARIA DEL SISTEMA di eventuali azioni dolose che possono causare. Perch´ questa strategia sia efficace comunque occorre che i backup siano effettuati in maniera e appropriata. La frequenza dei backup dipende ovviamente anche da quella con cui variano i dati: in genere le configurazioni di sistema o un indirizzario variano senz’altro molto meno della posta elettronica o dei dati di accesso a servizi web. che si devono salvare i contenuti delle directory /etc. Sono senz’altro da salvare tutti i dati di sistema. come la quantit` di dati che si vogliono mettere sotto controllo. e non avrebbe senso usare una frequenza maggiore. gli archivi della posta e del database e del web. quando invece nella pratica il caso pi` comune di recupero di dati u da un backup ` proprio quello di vecchi dati cancellati inavvertitamente. il mezzo utilizzato. mentre non ` necessario salvare quelli di e /usr.

sotto una vecchia tubatura del riscaldamento. hanno dei grossi e problemi di stabilit` nel lungo periodo. chiamato cos` dall’inglese Tape u e ı ARchive dato che il comando ` nato apposta per archiviare i file su nastro magnetico. Ai vantaggi in risparmio di tempo di esecuzione e di utilizzo delle risorse corrispondono per` degli svantaggi: anzitutto si complica la procedura di recupero (che necessiter` di un o a numero di passaggi crescente con il numero di backup incrementali coinvolti). dovendosi utilizzare dischi estraibili a caldo. I CD-R infatti. Inoltre qualunque sia la modalit` di stoccaggio utilizzata occorre anche prevedere a verifiche periodiche del funzionamento dei backup (effettuando dei ripristini di controllo). dato che un backup inaffidabile a e ` assolutamente inutile. 4. In questo modo ` possibile e ricostruire la situazione ad un dato istante senza dover registrare tutte le volte l’insieme completo dei dati. anche in presenza di nuove tecnologia per le schede. Il a a a costo incide direttamente sulla quantit` di dati che si possono salvare.2 e e A titolo di esempio una strategia comunemente utilizzata ` quella di effettuare backup incree mentali a frequenza giornaliera. ARCHIVIAZIONE E BACKUP 149 Per limitare l’occupazione di risorse ed i tempo di esecuzione dei backup viene in aiuto la possibilit` di effettuare i cosiddetti backup incrementali. Oltre alla scelta dei supporti una strategia di backup deve comunque anche prevedere la definizione delle modalit` di conservazione degli stessi. in genere i dischi sono molto affidabili. bench´ funzionali e poco costosi.1. dato che questa interfaccia ha a dimostrato di mantenersi utilizzabile nel tempo. Tenendo conto di tutte queste caratteristiche alla fine i supporti pi` utilizzati per i backup u sono usualmente i nastri. e 2 ` rimasto famoso l’esempio di un sistemista coscenzioso che aveva accuratamente pianificato tutta la sua e strategia. dato che accorgersi che qualcosa ` andato storto nel momento del bisogno non ` molto simpatico. che si accorse la prima volta che dovette recuperare dei dati che i suoi nastri erano stati rovinati dal campo magnetico generato dai fili del riscaldamento del sedile della macchina su cui appoggiava i nastri quando li portava al sito di stoccaggio. ae lento rendesse impossibile effettuare i backup con la frequenza necessaria. 1 . ma questo comporta altri problemi. per cui ` opportuno avere a e un mezzo poco costoso. l’affidabilit`. ma non sono adatti come mezzi di backup in quanto stanno nello stesso computer dei dati originali che pu` andare distrutto.1. In genere inoltre si utilizzano unit` a nastro SCSI. L’affidabilit` invece ` fondamentale. per questo qualunque strategia di backup prevede comunque l’effettuazione periodica di backup completi.2 Il comando tar Il comando pi` usato per la gestione di archivi di file ` tar.4. L’utilizzabilit` viene a spesso data per scontata. intervallati da backup completi a cadenza settimanale o mensile. ma soprattutto il fallimento di un backup incrementale render` inutilizzabili tutti quelli successivi basati su di a esso. Al di l` e a del suo uso per la creazione di archivi. ma occorre invece riflettere su quanto possa essere pericoloso avere uno splendido sistema di backup perfettamente funzionante. dei backup cio` in cui si archiviano solo a e i file che sono stati modificati rispetto ad un backup precedente. Ad esempio pu` non essere troppo a o saggio tenere i propri supporti in un armadio nel corridoio. Le variabili in gioco sono il costo. ma diventa cruciale solo qualora un mezzo troppo manomesso. a a a mentre i vari tipi di dischi rimuovibili presentano in genere un costo troppo elevato con capacit` a insufficienti. ma l’affidabilit` dipende anche dal tipo di problema che ci si trova ad e a affrontare. i floppy hanno capacit` ridotta e scarsa affidabilit`. archiviando i backup mensili per un periodo di tempo pi` o meno lungo a secondo delle esigenze u “storiche” che si possono avere. ` solitamente molto alto. tar ` anche il programma pi` diffuso per la distribuzione e u ovviamente a questo fanno eccezione i dischi estraibili. la velocit` e l’utilizzabilit`. fra cui quello del costo che. che funziona per` solo con una vecchia o scheda hardware fuori produzione. Un’altra decisione cruciale nella strategia di backup ` la scelta del supporto da utilizzare e per gli stessi. prevedendo anche lo stoccaggio dei nastri in un locale sicuro in una locazione remota. danneggiato o o 1 La velocit` ` senz’altro utile.

In ogni invocazione si pu` specificare non pi` di una operazione.150 CAPITOLO 4. 4. a di norma si utilizza anche l’estensione . mantenendo invariate anche le caratteristiche specifiche dei file (come permessi. In generale per` si possono distinguere le opzioni o del comando in due classi principali: quelle che indicano delle operazioni e quelle che specificano dei parametri. -c per creare un archivio.). e la versione GNU ` a e stata dotata di una serie di ulteriori estensioni. permessi. Per questo anche la versione GNU (la sola che tratteremo) supporta varie sintassi. E in genere possibile u aumentare ulteriormente la quantit` di informazioni stampate inserendo la stessa opzione una a seconda volta. Si ` usata la sintassi delle opzioni in forma GNU. ma le operazioni sono in totale otto. Oltre alle operazioni tar supporta una enorme quantit` di opzioni che modificano il compora tamento del programma. estrae i file da un archivio. e che aumenta la prolissit` del comando.tar per identificare questi file. identica a --diff.1: Operazioni del comando tar. La caratteristica del comando ` che ` in grado di salvare (e ripristinare) il contenuto e la struttura di una certa directory e e e di tutto il suo contenuto. mentre si pu` o u o avere un numero qualunque di parametri.1 (sia in forma breve che estesa). La seconda ` -f (--file) che serve a specificare il nome del file da usare come archivio da e cui leggere o su cui scrivere. e sono illustrate in tab. a meno di non specificare il file con -f il comando usa come default /dev/st0 o il primo dispositivo che riconosce come una unit` a nastri. la prima ` -v (o --verbose). -c -x -t -A -d -u --update -r --append --delete --compare --get Tabella 4. cancella i file da un archivio (questo non pu` funzionare o sui nastri).1). Il comando tar supporta una grande variet` di opzioni ed argomenti. Il comando ha tre operazioni principali. aggiunge file in coda all’archivio. in generale. ma solo se sono pi` u recenti della versione gi` presente nell’archivio o non sono a presenti in esso. AMMINISTRAZIONE ORDINARIA DEL SISTEMA di pacchetti di software dai sorgenti (come vedremo in sez. e -x per estrarlo. proprietari. 4. Opzione --create --extract --list --concatenate --diff Significato crea un nuovo archivio. in questo caso dovr` anche essere specificato con -f il nome del file su cui saranno archiviati i file. -t per verificarne il contenuto. facendogli stampare a video durante l’esecuzione molte a ´ pi` informazioni (ad esempio la lista dei file inseriti o estratti dall’archivio). confronta i membri di un archivio con la controparte sul filesystem e riporta ogni differenza in dimensioni. aggiunge un archivio in coda ad un altro. identica a --extract. ma tar ` uno e e dei comandi storici di Unix. e ne esistono molte versioni. Di queste ne esistono due di uso comune. ecc. proprietari e tempi. tempi. Date queste due opzioni il comando prende come argomenti una lista dei singoli file da archiviare. se per` fra questi si o inserisce una directory il comando archivier` anche il contenuto di quest’ultima.2. ed in particolare si pu` sempre fare a meno di o utilizzare il . Ad esempio si possono archiviare alcuni file con: . aggiunge file in coda all’archivio. Come accennato per creare un archivio il comando necessita dell’opzione --create o -c. e di tutte le a directory sottostanti.per specificare una opzione in forma breve. per a evitare confusione ` pertanto opportuno specificare sempre esplicitamente il nome dell’archivio e con questa opzione. elenca i file contenuti in un archivio.

eps corso/images/dir_links.tex fdl.tar corso corso/ corso/CVS/ corso/CVS/Root corso/CVS/Repository corso/CVS/Entries corso/images/ corso/images/CVS/ corso/images/CVS/Root corso/images/CVS/Repository corso/images/CVS/Entries corso/images/dir_links.tex e si noti come si sia usata anche l’opzione -v per stampare la lista dei file archiviati. anche senza la presenza dell’opzione -v. di nuovo si a dovr` utilizzare -f per indicare il file contenente l’archivio che in questo caso sar` letto..tex corso.tar *.tex corso/netinter. il comando ` sufficientemente scale tro da accorgersi di questa situazione ed evitare di inserire nell’archivio che sta creando il file dell’archivio stesso: piccardi@anarres:~/Truelite/documentazione/corso$ tar -cf dispense. questo significa anche che se quest’ultima ` inclusa nell’archivio tar si trover` ad e a affrontare il problema di come archiviare l’archivio stesso. corso/ordadmin. allo stesso modo si potr` archiviare tutta una directory con: a piccardi@anarres:~/Truelite/documentazione$ tar -cvf dispense.tar .tex advadmin. se si vuole invece aggiungere dei file ad un archivio preesistente occorre usare l’opzione -r.tex netadmin. Se non a a si passano altri argomenti il risultato sar` la stampa a video della lista di tutti i file contenuti a nell’archivio..tex config./dispense.1.tex ringraziamenti.tex ordadmin.tex struttura.~ corso/netbase. ARCHIVIAZIONE E BACKUP 151 piccardi@anarres:~/Truelite/documentazione/corso$ tar -cvf dispense. a meno di non specificare un pathname assoluto.tex. si tenga presente per` che in o . not dumped Una volta creato un archivio se ne potr` verificare il contenuto con -t (o --list).tex# e si noti come in questo caso vengano archiviate ricorsivamente anche tutte le directory sottostanti ed il relativo contenuto.dia . analogo a quello di ls -l. specificando la quale si otterr` invece una a lista in formato esteso.tex netinter.tex Struttura. Si pu` verificare la presenza di un singolo o file o di una lista passando come argomento il nome (o i nomi). Si tenga presente che quando si crea un archivio con -c il file di destinazione viene sovrascritto. tar: .5.4.~1.tex shell.tar corso/#ordadmin.tar: file is the archive. il file viene creato nella directory corrente.tex corso/dispense. Inoltre.tex netbase.

AMMINISTRAZIONE ORDINARIA DEL SISTEMA questo caso deve essere specificato il nome completo del file cos` come ` stato archiviato (quello ı e stampato dall’opzione -v in fase di creazione). 3 . altrimenti tutti gli argomenti che non sono opzioni vengono considerati come pattern secondo la sintassi3 del filename globbing della shell (vedi sez. Come per la creazione e l’uso dell’opzione -v permette di ottenere la lista dei file che vengono estratti dall’archivio. Si tenga presente infine che nell’estrazione il comando ricrea i file con tutte le caratteristiche che essi avevano nel sistema su cui sono stati creati. questo significa anche che vengono mantenuti i permessi e utente e gruppo proprietario del file. Se non si specifica nessun argomento il comando estrae il contenuto completo dell’archivio.1. Di questo pu` essere necessario dover tenere conto quando o si estraggono degli archivi creati da altri (come quelli dei pacchetti sorgenti di cui parleremo in sez. per il quale ` anche in grado di usare lo stesso formato e usato da tar. un altro errore che viene segnalato. ` quando i file che vengono creati hanno dei tempi situati nel futuro. quello che si pu` ottenere dalla lista e o fornita dall’opzione -t. il confronto infatti viene eseguito solo nei termini della corrispondenza fra l’argomento ed il nome cos` questo viene visto nell’archiviazione.4) e vengono estratti solo i file che corrispondono. in caso di impostazione sbagliata dell’ora di sistema. il programma pu` lamentarsi dell’impossibilit` di ricreare o a questi attributi dei file. di nuovo ` necessario specificare l’archivio da cui si estraggono i file con -f. per a attivare questa modalit` deve essere specificata l’opzione -p o --pass-through. In modalit` copy-out il comando copia i file dentro l’archivio. vengono considerati validi come caratteri sui quali verificare una corrispondenza anche un “. per a attivare questa modalit` deve essere specifica l’opzione -o o --create. se non si specifica nessuna opzione tutti i file vengono estratti. A differenza di tar per` prende sempre come argomento di ingresso una lista di o file. ı Per estrarre i dati inseriti in un archivio si deve utilizzare l’opzione --extract o -x. L’archivio viea ne letto dallo standard input. e 4. Il programma legge una a lista di file dallo standard input e scrive l’archivio risultante sullo standard output. che devono essere sempre indicate ad ogni ina vocazione del programma. che permette e di estrarre ed inserire file in un archivio.2). Pertanto una invocazione tipica ` qualcosa del tipo: e cpio < lista_file > archivio ` uso comune generare la lista direttamente con l’uso di find. Il comando cpio ha tre modalit` operative. combinando a in sostanza le due modalit` copy-in e copy-out in un unico passo senza creare un archivio. 4. utente e gruppo che nel sistema corrente possono non esistere o essere del tutto diversi. Il comando a legge la lista dei file da copiare dallo standard input e li copia nella directory che deve essere con due eccezioni.152 CAPITOLO 4. 2. utenti e gruppi. a per attivare questa modalit` deve essere specificata l’opzione -i o --extract.” all’inizio del file e il carattere “/”. Pertanto una invocazione tipica in questa modalit` ` del tipo: ae cpio < archivio In modalit` pass-through il comando copia dei file da una directory ad un altra. cos` da considerare nella corrispondenza anche i file nascosti e intere sezioni ı di pathname. e In modalit` copy-in il comando estrae i file contenuti in un archivio o ne elenca il contenuto. ma ` possibile estrarre un singolo file fornendone il nome (o e se il pathname se questo ` collocato in una sottodirectory).3 Il comando cpio Un comando alternativo per la gestione dell’archiviazione di file e directory ` cpio. L’estrazione avviene sempre nella directory corrente.1. Inoltre dato che alcuni filesystem (come il vfat di Windows) non supportano la presenza di permessi. e qualora si siano archiviate intere directory ne viene ricreata l’intera gerarchia.

a per questo il file /etc/fstab prevede un campo apposito. con -t si richiede di stampare la lista del contenuto di un archivio. al solito l’elenco completo delle opzioni ` a e disponibile nella pagina di manuale accessibile con man cpio.2. Una volta abilitato il supporto per il dump del filesystem tramite fstab effettuando operazioni di backup dello stesso tramite dump saranno salvate le informazioni necessarie a ricostruire quali file sono stati cambiati da un backup all’altro.1. -1. che deve essere inizializzato opportunamente ad un valore non nullo. il quinto. stampa la lista dei file contenuti nell’archivio. stampa informazioni aggiuntive sui file che vengono processati dal comando (in combinazione con -t viene usato un formato analogo a quello di ls -l). e come accennato in sez.4.2: Principali opzioni del comando cpio. ma esistono comandi. Questo nel caso di Linux ` vero e solo per il filesystem ext2 e la sua estensione journalled ext3. Inoltre per poter utilizzare questa funzionalit` occorre anche montare opportunamente il filesystem. e se non specificato viene usato e il livello 9. numerati da 0 a a 9. 4.. L’elenco delle principali opzioni ` riportato in tab. con -A di aggiungere i file ad un archivio esistente (invece di sovrascriverlo). -9).4 I comandi dump e restore I comandi tar e cpio appena illustrati. supporta molte a altre opzioni. . vengono usati per archiviare i file presenti all’interno delle directory specificate. ı Il funzionamento del programma prevede la possibilit` 10 diversi livelli di dump. sovrascrive eventuali file gi` esistenti con quelli a dell’archivio senza chiedere conferma.2. copia solo i file che non corrispondono al pattern specificato. preserva i precedenti tempi di ultima modifica quando ricrea i file in fase di estrazione. con a la stampa dei nomi dei file che vengono processati.1. ripristina il tempo di ultimo accesso sui file appena letti perch´ non risultino tali. In particolare con -v si richiede una maggiore prolissit` nelle operazioni. Il limite di un programma come dump ` che questo funziona solo per un filesystem che ne e supporti le operazioni salvando le informazioni necessarie. a parte quelle usate per specificarne la modalit` di operazione. in cui si sono tralasciate le tre opzioni e principali per selezionare le modalit` di operazione. . Pertanto una invocazione tipica in questa modalit` a ` del tipo: e cpio < lista directory Il comando. cos` da permettere dei backup incrementali.. ARCHIVIAZIONE E BACKUP 153 specificata come argomento non opzionale. come dump e restore che permettono di effettuare l’archiviazione a livello di un intero filesystem. da specificare con le opzioni omonime (cio` -0.4. 1. 4. Opzione -0 Significato prende in ingresso una lista di stringhe terminate dal carattere NUL (generabili con find) per permettere l’archiviazione di file il cui nome contiene un carattere di a capo. permette di specificare un nome di file da usare come archivio al posto dello standard input o dello standard output. -a -d -f -F -m -t -u -v Tabella 4. e ricrea le directory in cui si trovano i file (altrimenti questi verrebbero creati nella directory corrente).

e esclude dal backup una lista di inode (vedi sez. a Quindi per fare un esempio. o Opzione -D Significato permette di cambiare il file su cui viene mantenuta l’informazione relativa ai precedenti backup (completi o incrementali) che di solito ` /var/lib/dumpdates.1) passati per numero. 5 4 .5 Oltre quelle citate dump prende numerose altre opzioni molte delle quali sono relative alla gestione dei nastri su cui usualmente vengono salvati i backup. si sono riportate le principali in tab.3: Principali opzioni del comando dump. scrive il backup sul file passato come parametro. 4.per indicare lo e o standard output). Le principali sono a -C che effettua un confronto fra i file passati come argomento e quelli sul backup. u -e -E -f -L -M -u -v Tabella 4. e cio` /dev/st0. Il comando inoltre prevede la necessaria presenza di una serie di opzioni che ne indicano la modalit` di operazione. se al posto del dump di livello 3 se ne fosse fatto uno di livello 5 invece si sarebbero salvati solo i file modificati dopo il backup di livello 4. e stabilisce un punto di partenza per tutti gli altri livelli. 1. Una possibile strategia di backup ` quella riportata nella pagina di manuale. e a quale livello.4 se si esegue un backup con livello 2 seguito da uno di livello 4 si avranno in quest’ultimo solo i file cambiati dal momento in cui si ` eseguito il precedente e backup di livello due. aumenta la prolissit` del comando facendogli stampare a a video pi` informazioni riguardo le operazioni correnti. si possono specificare pi` file separandoli con virgole. ma si pu` specificare un file ordinario o usare . abilita il salvataggio multivolume (in cui si usa -f per specificare pi` di un volume di backup). in cui si fanno backup incrementali giornalieri. Questo significa che un backup di livello 9 salver` sempre solo i file modificati dopo l’ultimo backup precedente. A parte l’opzione che ne specifica il livello il comando richiede la presenza dell’opzione -f seguita da un parametro che indica il file su cui effettuare il backup (in genere si usano unit` a a nastri. -i che porta si suppone che prima si sia partiti con un dump di livello 0. in cui si sono salvati tutti i file. e come dump usa l’opzione -f per indicare il file (ordinario o di dispositivo) da cui recuperare i dati da ripristinare. un passaggio iniziale infatti ` sempre necessario. che esegue e esattamente il compito inverso. Questo permette di poter eseguire i backup incrementali in maniera efficiente per ridurre al minimo sia il tempo di recupero che il numero di supporti utilizzati. AMMINISTRAZIONE ORDINARIA DEL SISTEMA Il livello 0 indica un backup completo. e usando un insieme di supporti da ruotare settimanalmente. e in realt` si pu` anche specificare una directory contenente i file che si vogliono archiviare e non un mount a o point. Un livello superiore richiede il salvataggio di tutti i file che sono cambiati dall’ultimo backup effettuato con un livello inferiore. usa la stringa passata come parametro come etichetta del backup. Il comando che permette di recuperare i dati archiviati con dump ` restore. se poi si eseguisse un dump di livello 3 sarebbero salvati di nuovo tutti i file modificati dopo il backup di livello 2 (e il livello 4 sarebbe ignorato). per l’elenco completo si pu` al solito fare riferimento alla pagina di manuale. u aggiorna il file /var/lib/dumpdates che contiene la tabella in cui sono scritte i filesystem per i quali e le date in cui sono stati effettuati i backup. ed un algoritmo di tipo torre di Hanoi modificato. e prende come argomento il mount point del filesystem di cui si vuole eseguire il backup.3. in questo caso per` sono consentiti solo backup completi di livello 0 e tutto il contenuto della directory o deve risiedere nello stesso filesystem. esclude una lista di inode elencati nel file specificato come parametro.154 CAPITOLO 4. e saranno u considerati come volumi successivi.2.

e -x che effettua il ripristino dal contenuto dell’archivio.tar. se questa viene passata come argomento. trattato in sez. estrae una directory dal backup (o tutto il contenuto). presenta un elenco di file nel backup. 4. In genere gli archivi vengono pure compressi. e probabilmente anche pi` “vicini” a voi e quindi u con una maggiore velocit` di accesso. e 4. Pertanto se il nostro pacchetto software ` pacchetto. a 4. in particolare esaminando le funzionalit` di gestione automatizzata a dei pacchetti che permettono di tenere traccia di tutto quello che si ` installato nel sistema. o di tutto l’archivio se non vengono passati argomenti.2. Una volta scaricato il pacchetto se ne pu` verificare a o il contenuto o scompattarlo usando il comando tar usando la sintassi trattata in sez. abilita il ripristino da un archivio multivolume. se ci sono.2 La gestione dei pacchetti software Affronteremo in questa sezione le varie modalit` in cui un amministratore pu` installare e rimuoa o vere software dal sistema. per cui di norna li si trovano distribuiti in file che usano l’estensione . nel qual caso l’estensione usata ` . 4.gz lo si potr` decomprimere con tar e a talvolta abbreviata in tgz.” al loro interno. stampa una maggiore quantit` di informazione durante a le operazioni.4.1 L’installazione diretta Uno dei grandi vantaggi del software libero ` che avendo a disposizione i sorgenti dei programmi e che si usano ` sempre possibile effettuare una installazione diretta dei pacchetti software che ci e servono a partire da questi ultimi. e non di quelle in essa contenute. estrae il contenuto di una directory. oltre a quelle brevemente spiegate in precedenza si a sono riportate in tab.1. descritti nella pagina di a manuale).gz6 dato che il programma di compressione piu usato ` gzip. Come dump anche restore prevede numerose opzioni. 6 . -r che permette di ricostruire un intero filesystem da zero. al solito tutti i dettagli e l’elenco completo delle opzioni u (e dei comandi disponibili in modalit` interattiva) sono riportati nella pagina di manuale.tar. una alternativa e che si inizia a diffondere per gli archivi pi` grandi ` quella dell’uso di bzip2 (che comprime u e molto di pi`.2. di una directory. per l’uso di sistemi obsoleti che hanno problemi coi nomi di file che hanno troppi caratteri “. u e u e Per installare un pacchetto dai sorgente la prima cosa da fare ` scaricarsi l’archivio degli e stessi dal sito di sviluppo: ` consigliato usare.1.2. Tabella 4. dato che questi di e norma sono meno occupati del sito originale. In genere il software viene distribuito in forma sorgente in degli archivi compressi chiamati gergalmente “tarball ” in quanto creati con il programma tar. attiva la modalit` interattiva. parecchie delle quali servono a controllare propriet` relative all’uso dei nastri. -t che verifica se i file passati come argomento sono nel backup o stampa a video il contenuto integrale dello stesso se invocato senza argomenti.tar. a ricostruisce un intero filesystem da zero.4 le pi` rilevanti. Opzione -f -C -i -r -t -x -h -M -v Significato indica il file in cui ` stato memorizzato il backup.4: Principali opzioni del comando restore. 4.2. LA GESTIONE DEI PACCHETTI SOFTWARE 155 in modalit` interattiva (dove possono essere dati una serie di comandi. eventuali mirror. anche se ` pi` lento).bz2. e esegue un confronto fra i file presenti nel filesystem e quelli nel backup.

in quanto se manca qualcosa lo script si interromper` dicendo che non esiste il a supporto per quella funzionalit` o mancano i file di dichiarazione relativi ad una certa libreria a che serve al programma (o la libreria stessa). In questo caso quello che c’` da fare ` installare questi pacchetti con il relativo meccanismo di gestione. basti dire quello che si otterr` dal comando ` una lunga serie di linee di uscita da parte del compilatore.156 CAPITOLO 4. in genere chiunque distribuisce software fornisce anche le relative informazioni per l’installazione che si trovano insieme ai sorgenti del pacchetto nei file README o INSTALL.1. Se il pacchetto usa gli autotool GNU7 o segue la procedura di installazione standard tutto quello che c’` da fare ` di entrare nella directory dove si ` scompattato il e e e contenuto della tarball ed eseguire la sequenza di comandi: . e che se installate e una nuova versione dovete verificare che la sovrapposizione non generi problemi. scrivere un bug report a chi ha creato il pacchetto (evitando troppi accidenti e fornendogli le righe in cui si ` verificato e l’errore) o provare a correggere l’errore voi stessi (ma dovete essere pratici di programmazione. ` che dovete ricordarvi di cosa avete installato. A questo punto per l’installazione occorre eseguire le relative operazioni. che usa meccanismo molto sofisticato che permette di creare i file nella giusta sequenza. dell’ordine delle o ore o dei giorni). quando compila il pacchetto. Queste possono essere molto diverse da pacchetto a pacchetto. make./configure make make install Il primo comando (. e pertanto nella installazione standard di una distribuzione normalmente vengono tralasciati.tar. Questo ` il punto pi` critico della e u procedura. Inoltre se installare ` facile. In questo modo ` possibile installare pacchetti generici. dove e quando./configure ha completato con successo le sue operazioni potremo eseguire il secondo comando nella sequenza. Questo ` un programma per la costruzione di altri e programmi. quando si installano pacchetti binari gi` a compilati.2). per cui per poterli utilizzare dovete avere le directory di questa gerarchia secondaria nel PATH (vedi sez. A questo punto con make install si dice allo stesso programma di eseguire le istruzioni di installazione. 3. a seconda della potenza della macchina.1. nel caso probabilmente non starete a leggere questo manuale). ` pi` problematico disinstallare. In genere infatti. oltre al tempo e o perso a compilare i programmi (che per pacchetti piccoli ` forse trascurabile. estesi con un -dev. questi non sono necessari. il problema di tutto ci`. Il funzionamento di make va al di la di quanto sia possibile affrontare qui. In genere questi sono disponibili nei dischi di installazione come pacchetti con lo stesso nome delle librerie relative. Alcuni pacchetti (una minoranza e e u un insieme di programmi che consente di usare delle procedure automatizzate per l’installazione controllando che sulla macchina sia presente tutto quello che serve per creare il pacchetto. Si tenga presente che ` la procedura standard prevede di installare i pacchetti e compilati dai sorgenti in /usr/local/. ma per pacchetti e importanti come il server X pu` essere. Uno dei problemi pi` comuni ` che./configure) esegue uno script di shell che verifica che nel sistema sia presente tutto quello che serve per compilare il pacchetto. AMMINISTRAZIONE ORDINARIA DEL SISTEMA -xvzf pacchetto. in genere questo crea nella directory corrente una sottodirectory (quella che conteneva i file sulla macchina in cui ` stato creato l’archivio) con il contenuto e dell’archivio. Se qualcosa va storto in questa procedura avete due strade. 2. secondo e e le modalit` che vedremo pi` avanti.4) ed essere in grado di usare le eventuali librerie installate dal pacchetto (secondo quanto vedremo in sez. non si sono installati u e i file di dichiarazione che sono usati dal compilatore per poter accedere. pur avendo installato una libreria.gz. 7 . alle funzioni della stessa. che di solito ha lo stesso nome del pacchetto. a u Una volta che . a e fino a quando tutte le operazioni saranno completate ed i binari del pacchetto saranno stati creati.

Il comando ` complesso e prende molteplici opzioni. i quali sono distribuiti in file in un apposito formato. Verifica lo stato di un pacchetto.5: Principali opzioni del comando rpm. Stampa il pacchetto che contiene un file.2. divenendo probabilmente il pi` diffuso sistema di gestione automatizzata dei u pacchetti. gran parte delle distribuzioni utilizzano un sistema di gestione dei pacchetti che permette di tenere traccia di cosa si installa. 4. uno comune ad esempio ` clean che serve a cancellare i risultati della compilazione per riportare la directory del e pacchetto nelle condizioni iniziali precedenti alla costruzione dello stesso. glii argomenti che di norma si passano a make e che normalmente indicano ı. Tabella 4. come vedremo nelle sezioni seguenti. nel secondo caso il nome del pacchetto stesso. che esegue di norma il compito principale. Se invece si usa -qf. il RedHat Package Manager ` stato introdotto e dalla RedHat nella sua distribuzione. u Stampa una barra di progressione. Opzione -i -U -e -q -qa -ql -qf -V -K -v -h Significato Installa il pacchetto.rpm che contiene il pacchetto.2 La gestione dei pacchetti con rpm Uno dei primi sistemi di gestione dei pacchetti. Rimuove il pacchetto. rpm. 8 . per poi permettere una cancellazione pulita del pacchetto quando lo si vuole disinstallare. Le due opzioni pi` semplici sono -i che installa un pacchetto e -e che lo cancella. Si pu` anche leggere o il contenuto di un pacchetto non installato con l’opzione -qpf specificando il file dello stesso.5. cos` pu` e ı o accorgersi se un pacchetto va in conflitto con altri cercando di installare gli stessi file. In realt` RPM fa molto di pi` che installare e disinstala u lare. come molteplici sono le funzionalit` che e a provvede. inoltre ` in grado di eseguire degli script in fase di installazione e disinstallazione che permettono di e norma anche una configurazione automatica del pacchetto stesso. la descrizione dettagliata del comando con l’elenco completo delle opzioni sono al solito disponibili nella relativa pagina di manuale. Esegue l’upgrade del pacchetto. non specificare nulla usa il primo dei target disponibili. si stampano i file in essi contenuti. Per questo. Una delle funzionalit` pi` importanti di un gestore di pacchetti ` quella di essere in grado a u e si chiamano cos` dall’inglese target. Se il pacchetto ` gi` installato si pu` usare -U che esegue l’upgrade. Il comando prende molte altre opzioni. Stampa tutti i pacchetti installati. se non si specifica altro l’opzione prende un nome di pacchetto di cui verifica l’esistenza.2. Interroga il database per la presenza di un pacchetto. che serve a gestire l’installazione e la rimozione dei pacchetti. di solito ne esistono anche degli altri. le principali delle quali sono riportate in tab. di dove sono messi i file. 4.rpm. mentre con rpm -qa si ottengono tutti i pacchetti installati nel sistema. anch’esso caratterizzato dalla estensione . quali delle varie sezioni di comandi di costruzione e installazione devono essere usati. LA GESTIONE DEI PACCHETTI SOFTWARE 157 purtroppo) provvedono uno speciale bersaglio 8 per make che consente la disinstallazione con make unistall. Ma se questo non c’` occorre tracciarsi a mano i file che sono stati installati e e cancellarli. seguito dal nome del pacchetto. Stampa i file contenuti in un pacchetto. e a o Inoltre con l’opzione -q ` possibile eseguire una serie di interrogazioni sul database dei e pacchetti installati. Verifica la firma digitale di un pacchetto. Il RedHat Package Manager si basa su un programma. data la sua efficacia esso ` stato poi adottato da molte e altre distribuzioni. u Nel primo caso deve essere specificato il file .4. Stampa pi` informazioni nell’esecuzione delle operazioni. Il comando tiene traccia di ogni pacchetto installato e di dove ` stato installato.

` in grado di e accorgersi di eventuali conflitti con pacchetti gi` installati. Uno dei grandi vantaggi di questa distribuzione (e di quelle che usano il suo sistema di gestione) ` costituito dalla interfaccia di alto livello chiamata Advanced Package Tool. I pacchetti Debian sono distribuiti in file con l’estensione . Stampa i file contenuti in un pacchetto.deb e -r che rimuove un pacchetto dal sistema.deb..deb risultino piuttosto usati (dato che sono diventate parecchie le e distribuzioni basate su Debian) la loro diffusione su internet come file a se stante ` piuttosto e ridotta. Le altre opzioni principali sono riportate in tab. Opzione -i -r -l -L -S -s -p -I -c Significato Installa il pacchetto. o Le opzioni principali del pacchetto sono -i che esegue l’installazione di un file . diventa cos` ı . scaricare ed installare i pacchetti mancanti. Tabella 4. quando un pacchetto dipende da un’altro che a sua volta dipende da una altro che a sua volta . Questo avviene perch´ in realt` dpkg ` solo la parte di basso livello del sistema di e a e gestione dei pacchetti di Debian. Stampa informazioni su un pacchetto installato. a pu` interrogare il database dei pacchetti e ottenere informazione sul loro contenuto. Stampa informazioni su un . con -L si stampa la lista dei file contenuti nel pacchetto e con -S quella dei pacchetti che contengono un file corrispondente alla stringa passata come parametro. Esso u e ` basato su un programma di gestione dei singoli pacchetti con funzionalit` analoghe a quelle e a di rpm. I pacchetti Debian infatti sono organizzati per indicare in maniera coerente da quali altri pacchetti essi dipendono. Stampa il contenuto di un . e delle dipendenze da altri pacchetti. e cos` via) di avvisare l’utente quali sono ı i file che devono essere gi` presenti nel sistema perch´ un certo pacchetto possa essere installato. che permette e di cancellare completamente il problema delle dipendenze. ed ` piuttosto raro dover usare questo comando per installare e un pacchetto.3 La gestione dei pacchetti di Debian Uno dei pi` grandi vantaggi di Debian ` proprio il suo sistema di gestione dei pacchetti. Il meccanismo per` si limita o a questo. deve cio` essere in grado di accorgersi e se per installare un certo pacchetto ` necessaria la presenza di un altro (ad esempio perch´ si possa e e usare un programma che usa l’interfaccia grafica dovr` prima essere installata quest’ultima).deb. 4. Stampa lo stato di un pacchetto. Interroga il database per la presenza di un pacchetto. a Nel caso in questione rpm ` in grado. provvede l’esecuzione di script in fase di installazione e rimozione. il programma che permette di installare questi pacchetti ` dpkg. ma sopra di esso ` stata costruita una infrastruttura molto pi` complessa che rende e u estremamente semplice e funzionale la gestione dei pacchetti. Ricerca i pacchetti che contengono un file.deb ed usano un formato diverso rispetto agli RPM. a e In questo modo il programma permette di evitare di installare pacchetti che non funzioneranno a causa della mancanza di un qualche componente a loro essenziale.. Inoltre con -l viene stampata la lista dei pacchetti installati (se non si specifica nulla. sia pure in forma non troppo sofisticata (il che porta a e quella situazione che viene chiamata dependency hell. ed e ` sostanzialmente un analogo (in realt` c’era da prima) di rpm. AMMINISTRAZIONE ORDINARIA DEL SISTEMA gestire le cosiddette dipendenze di un pacchetto da un altro. sta all’amministratore trovare.6.158 CAPITOLO 4. in quanto provvede le stesse e a funzionalit`: installa e rimuove pacchetti mantenendo un database dei pacchetti e dei relativi a file installati. Rimuove il pacchetto.2.6: Principali opzioni del comando dpkg. 4. al solito le istruzioni complete e tutte le altre opzioni sono descritte nella pagina di manuale. Bench´ ormai anche i . se si specifica un nome viene ricercata la presenza di un pacchetto con quel nome).

Una volta impostati i vari repository da cui si vogliono recuperare i pacchetti baster` eseguire a il comando apt-get update per scaricare la lista aggiornata dei pacchetti. il programma a si incaricher` di effettuare automaticamente il download dello stesso. una volta scaricati i pacchetti. che e possono essere disinstallati. ed installare il tutto.4. se altri pacchetti dipendono da quello che si vuole rimuovere. Per risolvere questo tipo o di situazione (che si incontra di solito quando si passa da una versione di Debian ad un altra) si pu` usare il comando apt-get dist-upgrade che esegue una risoluzione intelligente dei conflitti o ed ` in grado di effettuare l’upgrade di pacchetti importanti a scapito di quelli secondari. Esegue l’upgrade dei pacchetti aggiornati. ed in questo e caso. Opzione install remove clean update upgrade dist-upgrade autoclean Significato Installa un pacchetto. Le opzioni principali di apt-get sono riportate in tab. ma anche di tutti quelli da cui questo dipende. l’elenco completo. Tabella 4. basta infatti a usare il comando apt-get upgrade dopo aver usato apt-get update per ottenere l’installazione automatica delle eventuali nuove versioni presenti sul repository di tutti i pacchetti che sono installati nel sistema. Cancella dall’archivio i pacchetti con vecchie versioni. In una distribuzione Debian tutto quello che si deve fare ` mantenere una lista degli appropriati repository dei pace chetti nel file /etc/apt/sources. Inoltre in genere i pacchetti vengono distribuiti direttamente via rete.7: Principali opzioni del comando apt-get. anche quando questo pu` essere stato sostituito da un altro. insieme alla descrizione dettagliata di tutte le caratteristiche del comando.3. Scarica la lista aggiornata dei pacchetti. Un repository non ` altro che una directory (locale o e remota) che contiene i vari pacchetti e le relative informazioni organizzati in maniera opportuna.7. eliminarli. a Infine il sistema consente una estrema facilit` di aggiornamento del sistema. il comando chiede conferma della volont` di rimuovere anche loro. con una modalit` che permette il download automatizzato degli stessi.3 La gestione di utenti e gruppi Tratteremo in questa sezione la gestione degli utenti e dei gruppi presenti nel sistema: vedremo i comandi utilizzati per crearli. e modificarne le propriet` ed esamineremo quali sono a . Cos` oltre alla inı stallazione viene anche eseguita la configurazione di base con la creazione dei relativi file. che nel 90% dei casi ` comunque tutto quello che c’` da fare. di richiedere all’utente tutte le informazioni necessarie per la configurazione degli stessi. Il comando per` non rimuove mai un pacchetto gi` presente dal o a sistema. Rimuove un pacchetto. Esegue l’upgrade della distribuzione. 4. che serve e appunto da front-end per tutto il sistema dell’Advanced Package Tool. Cancella l’archivio dei pacchetti scaricati. Baster` poter accedere a detta directory (cosa che pu` essere fatta in una molteplicit` di modi. a Il programma di gestione principale per i pacchetti non ` allora dpkg. LA GESTIONE DI UTENTI E GRUPPI 159 possibile richiedere l’installazione automatica non solo di un singolo pacchetto. e e Qualora si voglia rimuovere un pacchetto il comando ` apt-get remove nome. ma apt-get. ` al solito disponibile nella relativa e pagina di manuale. 4. A questo punto sar` possibile installare un pacchetto con il comando apt-get install nome. Inoltre in Debian ` stato pure creato un sistema generico per la auto-configurazione automae tica dei pacchetti (chiamato debconf ) che permette. a o a i principali dei quali sono via HTTP o via FTP). ed in caso di conferma procede alla rimozione completa. e di quelli necessari per a soddisfare eventuali dipendenze.list.

ogni utente ha a disposizione una home directory per i propri file. ecc.3. viene realizzata da appositi programmi. cui abbiamo accennato a pag.4. 4. come tutti i file di configurazione del sistema. come accennavamo in sez. non solo occorrer`.3. ma come abbiamo abbondantemente ripetuto in sez. come riconoscerli e quali risorse assegnargli.).10 Nei sistemi moderni per` il meccanismo di gestione di utenti e gruppi ` stato completamente o e modularizzato attraverso sia l’uso del Name Service Switch. che tratteremo meglio in sez.1.2. visto in sez. ed una password segreta la cui e conoscenza serve a dimostrare l’autenticit` della propria identit`. server LDAP. ma dovranno anche essere identificate le risorse che gli si mettono a disposizione. Questo ci porta ad una delle caratteristiche fondamentali di un qualunque sistema multitutente: il concetto di account.3. per quella procedura di collegamento al sistema che porta ad avere dei processi che vengono eseguiti dal kernel per conto di un certo utente. Ovviamente perch´ questo accada. AMMINISTRAZIONE ORDINARIA DEL SISTEMA le modalit` con cui vengono mantenute all’interno del sistema le informazioni ad essi relative. Inoltre.1. Il kernel a e ı infatti supporta la presenza di utenti e gruppi associando a questi degli identificatori numerici che poi vengono usati nella gestione dei processi e dei file. 1. proprio per la presenza di un sistema di gestione degli stessi. che di PAM (Pluggable Authentication Method ).1 a a il sistema prevede anche la presenza di gruppi di utenti. come visto in sez. 3. /etc/passwd e /etc/group. ad esempio per togliere una password di amministratore e dal sistema contenuto in un disco montato a mano usando un sistema di recupero. e quindi non ` pi` possibile andare ad effettuare le e u modifiche a mano con un editor. Perch´ questa sia effettuata per` occorrono le opportune informazioni che e o permettano ai vari programmi che gestiscono la procedura (come login) di sapere quali utenti ci sono. che a loro volta vengono identificati9 da altri nomi (i groupname). 4.3. Tutte queste informazioni sono quelle che vengono mantenute ed utilizzate dai programmi per la gestione di utenti e gruppi. a 4. 1. Nelle prime versioni di Unix tutte le informazioni relative agli utenti ed ai gruppi presenti nel sistema erano memorizzate su due file. 1. compresa quella che permette il riconoscimento e l’accesso agli utenti. che dovranno contentere sia le informazioni necessarie all’identificazione degli stessi che quelle relative alle risorse messe loro a disposizione. sono file di testo. per poter utilizzare il sistema si deve avere un “conto” presso di lui. 72). Questo vale in particolare anche. come accennato in sez. Come avviene per una banca. che ci conceda l’accesso e l’uso delle risorse. 1.1. dato che a possono essere modificati a mano con un qualunque editor.2. Una delle parti pi` critiche dell’amministrazione del sistema ` allora quella che permette u e di creare e mantenere le informazioni relative agli account degli utenti presenti.4. e quando si collega al sistema gli viene messa a disposizione una shell (la shell di login. In realt` la questione non ` affatto cos` immediata. L’uso di un supporto modulare per` fa s` che si possano utilizzare buona parte degli steso ı si ricordi che il kernel conosce solo degli identificativi numerici. i nomi degli utenti e dei gruppi sono informazioni disponibili solo in user-space. Come accennato in sez. 9 . e non di quello che si vuole riparare. su cui torneremo in sez. che ` il nome che il sistema associa all’utente. vari database. in teoria non ci sarebbe nessuna necessit` di programmi specifici per la loro gestione. poich´ in quel caso i comandi e andrebbero ad operare sulla configurazione del sistema di recupero. 1.4.1 tutta la gestione del sistema. In questo modo ` possibile e mantenere le informazioni ed effettuare i relativi controlli usando i supporti pi` disparati (server u NIS. che un utente si e a identifichi appropriatamente.160 CAPITOLO 4. Tradizionalmente in un sistema unix-like l’autenticazione degli utenti viene fatta utilizzando un username.2.3. Dato che questi. 10 cosa che in certi casi ` comunque utile saper fare.1 Una visione generale Dato che GNU/Linux ` un sistema multiutente abbiamo finora dato per scontato la presenza di e utenti che potessero utilizzarlo.

12 i valori fra 0 e 99 sono usati normalmente per gli utenti corrispondenti ad alcuni servizi di sistema.) insieme a tutti i dettagli a sul funzionamento del comando sono disponibili nella pagina di manuale accessibile con man useradd. l’elenco completo che comprende anche quelle pi` sofisticate. imposta la password. 4. Il comando prende come argomento il e nuovo username. imposta la shell di default. imposta eventuali gruppi aggiuntivi.4. legate all’uso delle shadow password che permettono di impostare alcuu ne propriet` delle password (come durata. lunghezza minima. che permette di aggiungere e un nuovo utente al sistema (cio` di creare un account). con tanto di creazione di tutti i file contenuti nella directory /etc/skel (vedi sez. Inoltre usermod supporta le opzioni -L e -U usate rispettivamente per bloccare e sbloccare l’accesso di un utente inserendo un carattere ! nel campo che contiene la sua password criptata (su questo torneremo in sez.3.2. -g il gruppo iniziale.3. Per a a questo per` ` disponibile anche il comando usermod. Infine con -u si pu` impostare un valore specifico per lo user ID. a Tabella 4. ma non imposta la password (che resta disabilitata). permette di specificare un user ID gi` esistente. Le principali opzioni sono riportate in tab. 3. Oltre che a creare un nuovo utente il comando pu` essere anche usato per modificare le o propriet` di un utente gi` esistente.8. specifica un valore numerico per l’user ID.8: Principali opzioni del comando useradd. 4. in particolare il comando permette di cambiare il group ID usando -g. 4. ma si provvede ad eseguire il comando passwd in un secondo tempo. -G eventuali altri gruppi di appartenenza. a L’omologo di usermod per i gruppi ` invece il comando groupmod che permette di modificare e un gruppo. ´ E possibile comunque impostare ciascuna di queste propriet` (e molte altre) attraverso le a opportune opzioni: ad esempio -p permette di specificare la password dell’utente. 11 . non crea la home directory e non imposta una shell di login. altrimenti il comando o assegner` all’utente un valore predefinito corrispondente al primo numero maggiore di 9912 e pi` a u grande di tutti gli altri valori utilizzati per gli altri utenti. nel qual caso deve essere invocato con l’opzione -D.3. LA GESTIONE DI UTENTI E GRUPPI 161 si comandi che in origine operavano solo sui file di testo in maniera trasparente rispetto al meccanismo con cui sono effettivamente gestite le informazioni. che ` del tutto analogo all’uso di useradd oe e con l’opzione -D. Opzione -b -d -u -p -s -m -g -G -o Significato imposta la home directory. per cui di norma non si usa mai questa opzione. e prende le opzioni elencate in tab. Si tenga presente che di default il comando si limita a creare il nuovo utente.3). 4. In questo caso e le uniche opzioni sono -g che permette di specificare un group ID specifico (il valore di default ` impostato con gli stessi criteri visti per l’user ID) e -o che unito al precedente permette di e specificare un group ID gi` in uso.2).8 per useradd. ecc. -m richiede la creazione della home directory. imposta la home directory dell’utente. copia il contenuto di /etc/skel nella home.2 I comandi per la gestione di utenti e gruppi Il primo comando di gestione che prendiamo in esame ` useradd. ma prima di operare si assicura che l’utente che si va a modificare non sia collegato alla macchina. supportando che deve essere specificata in forma cifrata. Analogo ad useradd ` groupadd che permette di creare un nuovo gruppo.11 -s la shell. imposta il gruppo di iniziale.

I secondi eseguono la rimozione dell’utente e del gruppo14 seguendo lo schema specificato nel file di configurazione /etc/deluser. da specificare come argomento. usando l’opzione e a -g. u e L’utilizzo pi` comune ` quello di invocare il comando per cambiare la propria password. gli utenti o normali possono cambiare solo la propria e solo dopo essersi autenticati con la vecchia. bench´ sia una funzionalit` poco nota. dette opzioni con il relativo significato sono riportate in tab. nel u e qual caso non ` necessario nessun argomento. e di cambiare il nome del a gruppo con l’opzione -n. se si vuole anche rimuoverne la home directory13 si dovr` usare l’opzione -r che ` l’unica opzione supportata dal comando. il comando permette anche. 14 gestendo anche.9: Opzioni del comando passwd per la gestione delle informazioni relative alle shadow password. Infine. in tal caso per` chiunque pu` entrare nel sistema o o conoscendo l’username. ma si tenga presente che solo l’amministratore pu` cambiare la password di un altro utente. I comandi userdel e groupdel permettono invece di cancellare rispettivamente un utente e un gruppo. Oltre alla semplice operazione di cambiamento della password il comando supporta molte altre funzionalit` di gestione delle stesse.conf.3. esistono una serie di comandi diretti che permettono di modificare i singoli attributi. Le informazioni complete sono disponibili al solito nelle relative pagine di manuale. I primi permettono una impostazione automatica di tutti gli attributi di un nuovo utente. a e Per ciascuno di questi comandi per la creazione e rimozione di utenti e gruppi Debian mette a disposizione una interfaccia pi` amichevole attraverso gli analoghi comandi adduser ed addgroup u e deluser ed delgroup. rispetto ai corrispondenti programmi base. mentre userdel si limita a cancellare l’utente. -n -w -i -e Tabella 4. Oltre alle funzioni di gestione delle shadow password il comando permette anche di bloccare e sbloccare l’uso di un account rispettivamente con le opzioni -l e -u. 4. passato i e quali l’account sar` disabilitato. l’eliminazione dei file non contenuti nella home. a fa scadere immediatamente una password. il pi` comune ` passwd che permette di cambiare la password.162 CAPITOLO 4. imposta il numero minimo di giorni dopo il quale una password pu` essere cambiata. secondo quanto specificato nel file di configurazione /etc/adduser. onde evitare errori di battitura).conf. il comando chieder` la password corrente e poi e a la nuova password per due volte (la seconda per conferma. Opzione -x Significato imposta in numero massimo di giorni per cui la password rimane valida. in particolare per la gestione delle caratteristiche delle a shadow password (su cui torneremo in sez. dato che di norma non viene impostata) la password per un gruppo. richiedendo quando serve le informazioni necessarie come la password ed il nome reale. si tenga presente che questo non assicura la cancellazione di tutti i file di propriet` dell’utente che potrebbero a essere in altre directory diverse dalla sua home.3). l’utente non potr` modificarla o a prima che siano passati. e possono essere utilizzate solo dall’amministratore. Se si specifica un argomento questo indica l’utente di cui si vuole cambiare la password.9. AMMINISTRAZIONE ORDINARIA DEL SISTEMA sempre l’opzione -o per poter specificare un gruppo gi` assegnato. forzando cos` ı l’utente a cambiarla al login successivo. Oltre ai precedenti comandi generali. di cambiare (o mettere. Nel caso di groupdel il comando non ha nessuna opzione specifica. imposta il numero massimo di giorni per cui viene accettato il login dopo che la password ` scaduta. 4. passati i quali l’utente sar` forzato a a cambiarla. inoltre l’opzione -d consente di cancellare la password lasciandola vuota. 13 . imposta il numero di giorno per i quali l’utente viene avvertito prima della scadenza della password.

a e Oltre a newgrp si pu` cambiare gruppo anche con il comando sg cos` come il comando su o ı permette di assumere l’identit` di un altro utente. la home directory. quello che viene memorizzato ` solo il risultato della cifratura della password. 4. Se usati con l’opzione -c si pu` specificare un comando da eseguire con i diritti o del gruppo o dell’utente richiesto. LA GESTIONE DI UTENTI E GRUPPI 163 Se si specifica anche -r la password presente sul gruppo viene rimossa. 4.3 Il database di utenti e gruppi Come accennato in sez. Bench´ questo schema si sia evoluto con l’introduzione e prima delle shadow password e poi di PAM e del Name Service Switch. 4. Al solito si faccia riferimento alle relative pagine di manuale per la descrizione completa. quello e che si chiama un hash crittografico. e Se invecee si fa gi` parte del gruppo non ` necessaria nessuna password. Solo l’amministratore o l’amministratore del gruppo possono eseguire questo comando. il rendere leggibile quest’ultimo a non costituiva un problema. in caso di coincidenza si ` ottenuta l’autenticazione. e oltre a poterne cambiare la password ` in grado di aggiungere altri utenti al gruppo e usando il comando gpasswd. Il file e deve essere leggibile da tutti perch´ oltre alle password memorizza anche la corrispondenza fra e l’username ed il relativo identificativo numerico. Il primo file su cui sono mantenute queste informazioni ` /etc/passwd chiamato cos` perch´ e ı e ` al suo interno che nelle prime versioni di Unix venivano memorizzate le password. ma solo quando ` stata impostata e una password per il gruppo. Siccome poi dal punto di vista e matematico ` praticamente impossibile (ogni metodo ` equivalente a quello provare tutte le e e possibilit`) risalire dal valore cifrato alla password originale. Gli altri comandi per la gestione delle propriet` degli utenti sono chsh. ecc. Il fatto che il file sia leggibile da tutti pu` far sorgere il dubbio di come si possa avere o una cosa del genere per un file in cui sono memorizzate delle password. Nel file sono mantenute poi anche altre informazioni come la shell di login.4. . Tutte le volte che si richiede una autenticazione quello che il sistema fa ` semplicemente e ricalcolare questo valore per la password che gli si fornisce e verificare che coincida con quello memorizzato.3. Al solito la pagina di manuale riporta la documentazione completa. Questo.3. che permette ad a un utente di cambiare la sua shell di login di (ma solo fra quelle elencate in /etc/shells.3. in cui si scrivono il nome reale e altri dati relativi all’utente. a tutt’oggi la modalit` a pi` comune per mantenere il database degli utenti su un sistema GNU/Linux resta quella di u scrivere le relative informazioni su alcuni file di testo.2 nelle prime versioni di Unix tutte le informazioni relative ad utenti e gruppi venivano tenute in due soli file. Inserire una password su un gruppo significa consentire ad altri utenti che non sono nel gruppo di farne parte attraverso l’uso del comando newgrp. che deve essere fornita (altrimenti l’operazione non ` consentita). Questi ultimi potranno con le opzioni -a e -d aggiungere o rimuovere altri utenti dal gruppo e disabilitare l’accesso al gruppo da parte di esterni con -R. ` da qui che normalmente i programmi come e ls o ps ottengono l’username che corrisponde ad un certo user ID. a permette all’amministratore di aggiungere utenti a un gruppo con l’opzione -M. o definire degli utenti amministratori del gruppo con l’opzione -A. vedi sez. oltre alla capacit` di cambiare la password di un gruppo. Quest’ultimo ` uno degli utenti del gruppo cui ` stato dato il compito di amministrare lo e e stesso.2) e chfn che permette di cambiare le informazioni mantenute nel campo chiamato Gecos (vedi sez. 3. dato che solo se si ` fornita la password originaria si potr` riottenere lo stesso e a risultato. In realt` queste non a sono memorizzate in chiaro (il testo della password non viene mai scritto da nessuna parte nel sistema). Questo comando permette infatti di cambiare il proprio group ID assumendo quello di un gruppo.2.3. Entrambi i comandi vogliono come argomento a il nome del (gruppo o dell’utente) del quale si vogliono avere i diritti e richiedono la relativa password.3).

ad esempio se si ` persa la password di root. separati da virgole.:/home/piccardi:/bin/bash gdm:x:100:101:Gnome Display Manager:/var/lib/gdm:/bin/false i dettagli del formato del file possono essere trovati nella relativa pagina di manuale accessibile con man 5 passwd..164 CAPITOLO 4. identificatore numerico dell’utente (user ID)... la password del gruppo (si ricordi quanto visto in sez. per questo occorre sapere come vengono mantenute le informazioni. la lista degli username degli utenti appartenenti al gruppo.1 riguardo le sezioni delle pagine di manuale. in caso di emergenza pu` essere necessario modificare e o questo file. In questo caso i campi sono soltanto quattro (sempre separati da “:”) ed indicano rispettivamente: • • • • il nome del gruppo (o groupname). in modo da poter entrare per ripristinarla. non sono ammessi n´ commenti n´ righe vuote.3..2) abbiamo accennato come in casi di emergenza pu` essere utile o modificare a mano il file.admin . nome e cognome dell’utente ed eventuali altri campi di commento separati da virgole. Il formato del file ` molto semplice. 2. per ogni utente deve essere presente una riga composta da 7 e campi separati dal carattere “:”. e • home directory dell’utente (pathname assoluto). Analogo a /etc/passwd per mantenere l’elenco dei gruppi c’` il file /etc/group che contiene e le informazioni ad essi relative. password cifrata (opzionale). questo campo ` detto anche Gecos. Posto che per cambiare shell o le informazioni del quinto campo ` opportuno usare i comandi di shell. piccardi:x:1000:1000:Simone Piccardi. nel qual caso occorrer` far partire il e a computer con un disco di recupero e togliere la x lasciando il campo vuoto. piccardi:x:1000: . ed un esempio di questo file pu` essere il seguente: o root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:100:sync:/bin:/bin/sync games:x:5:100:games:/usr/games:/bin/sh man:x:6:100:man:/var/cache/man:/bin/sh .3. identificatore numerico del gruppo di default (group ID).2). Il significato e e dei sette campi ` il seguente: e • • • • • nome di login (o username). su cui torneremo fra poco.. • shell di login.. AMMINISTRAZIONE ORDINARIA DEL SISTEMA Bench´ per la gestione normale degli utenti ci siano gli opportuni programmi di shell (che e abbiamo visto in sez.. cos` che la richiesta ı della password venga disabilitata al successivo riavvio. 15 si ricordi quanto detto in sez. un esempio di questo file ` il seguente: e root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4: tty:x:5:piccardi. . 4. 4.15 La presenza di una x nel secondo campo del nostro esempio indica che sono attive le shadow password.. il valore numerico del gruppo (group ID).3.

anche se cifrate. • numero di giorni dall’ultimo cambiamento dopo i quali la password scade e deve essere necessariamente cambiata. . Per questo motivo alcuni anni fa. dato che potrebbero essere soggette ad una analisi di questo tipo. Bench´ l’algoritmo crittografico con cui si calcolano le password sia piuttosto robusto. ` comunque piuttosto e semplice (e ci sono un sacco di programmi molto efficienti nel farlo) utilizzare quello che si chiama un attacco a dizionario. Se nel sistema sono state abilitate le shadow password (in genere lo si fa in fase di installazione. il suo problema infatti e ` che prevede delle chiavi di dimensione ridotta ed ha dei limiti sul numero di caratteri delle password (vengono e usati solo i primi 8 caratteri) per cui in genere si usano algoritmi alternativi come MD5 che prende password di dimensioni qualsiasi. • numero di giorni che devono passare dall’ultimo cambiamento prima che la password possa essere cambiata nuovamente. venne introdotto quello che ` stato chiamato il sistema delle shadow password che oltre a consentire e di spostare le password in un file a parte ha pure aggiunto una serie di funzionalit` di sicurezza a ulteriori.4. era impraticabile.16 e mantenere leggibili le password. • numero dei giorni precedenti quello di scadenza della password in cui gli utenti vengono avvisati. invertire delle lettere o mettere un “3” al posto di una “e” o un “1” al posto di una “i”. dato che le altre informazioni necessarie ai programmi restano disponibili in /etc/passwd si pu` proteggere questo file in lettura cos` che solo l’amministratore possa acceo ı dervi. nella reimplementazione dei meccanismi di autenticazione. • giorno in cui ` stata cambiata password l’ultima volta (espresso in numero di giorni dal e 1/1/1970). • numero dei giorni successivi a quello di scadenza della password dopo i quali l’utente viene disabilitato. • giorno in cui l’utente ` stato disabilitato (espresso in numero di giorni dal 1/1/1970). In questo caso.3. come date di scadenza. oggi ` poco usato per la sua debolezza. Tutti trucchetti ampiamente noti che qualunque programma decente di password cracking applicher` alle parole del suo dizionario. c’` sempre da fare i conti con la pigrizia degli u e utenti che tendono ad usare password come pippo o ciccio e simili. anche se ormai questa non ` neanche pi` una opzione e vengono usate di default) nel e u secondo campo di /etc/passwd viene posta una “x” e le le password cifrate vengono spostate in /etc/shadow. dati i computer dell’epoca. espone comunque ad un attacco a forza bruta (cio` alla possibilit` che qualcuno tenti di provarle tutte). Per cui anche se spesso gli attacchi a forza bruta non sono praticabili. date in cui u sono state cambiate ecc. Inoltre anche se oggi ` diventato possibile usare altri algoritmi di crittografia e e che rendono pi` difficile un compito del genere. • password cifrata. e 16 per i curiosi l’algoritmo originale si chiama DES. Oltre alle password sono memorizzate in /etc/shadow una serie di ulteriori informazioni che permettono un controllo molto pi` dettagliato su di esse. il cui rispettivo contenuto `: e • nome di login (o username). ci sono 9 campi separati e a con dei “:”. a Per questo motivo non ` comunque molto sicuro lasciare leggibili a tutti le password anche e nalla forma cifrata. E non giovano neanche trucchetti come quello di scrivere le parole alla rovescia. Il formato del file ` analogo a quelli gi` visti. in cui invece di tutte le combinazioni si provano solo quelle relative ad un dizionario di possibili password. con la potenza dei computer di oggi a lo ` molto meno. Se quando ` stato creato Unix questa e a e eventualit`. LA GESTIONE DI UTENTI E GRUPPI 165 anche le informazioni mantenute da questo file sono usate da tutti i programmi che devono tradurre l’identificatore numerico del gruppo in un nome e pertanto deve essere mantenuto aperto in lettura.

166 • campo riservato. AMMINISTRAZIONE ORDINARIA DEL SISTEMA ed un esempio di questo file `: e root:n34MlzgKs8uTM:12290:0:99999:7::: daemon:*:11189:0:99999:7::: bin:*:11189:0:99999:7::: sys:*:11189:0:99999:7::: sync:*:11189:0:99999:7::: games:*:11189:0:99999:7::: . L’utilit` del sistema delle shadow password.. Si tenga presente che login. Tutte le distribuzioni recenti installano di default le shadow password. ` comunque possibie le effettuare una conversione automatica dal sistema tradizionale usando il comando pwconv. Inoltre il programma usa i valori di PASS_MIN_DAYS.defs non viene usato se si utilizza PAM e le relative informazioni sono prese direttamente dalla configurazione di quest’ultimo.admin . poi riporta le password presenti in esso all’interno di /etc/shadow.1..defs (vedi sez. /etc/gshadow... e ` E possibile inoltre effettuare anche la conversione inversa. dato che detti caratteri non corrispondono ad un valore possibile e per una password cifrata. Questo prima rimuove da /etc/shadow tutte le voci non presenti in /etc/passwd. questo ` un modo. Ad esempio si pu` impostare un tempo di scadenza forzando o gli utenti a non utilizzare sempre la stessa password. Si noti come per alcuni utenti la password sia sostituita dal carattere * (talvolta viene usato anche !). e lo si usa normalmente quando si vuole disabilitare l’accesso ad un utente o per gli utenti dei servizi di sistema che non necessitano di eseguire un login. ` che questo consente anche di impostare delle a e politiche di gestione delle stesse. tornando dalle shadow password al .. i campi in questo caso sono 4. piccardi:x:: . CAPITOLO 4. 3.. cosa che a lungo andare fa aumentare le possibilit` che essa venga scoperta.4) per impostare i rispettivi campi di /etc/shadow).. piccardi:$1$KSRp2lZ3$s9/C2ms0Ke9UTaPpQ98cv1:11189:0:99999:7::: .. a Infine dato che anche i gruppi hanno le loro password. essendo le password dei gruppi poco utilizzate anche questo comando non ` molto usato. Analogo a pwconv. anche queste sono state spostate in un altro file. di impedire che il corrispondente utente possa eseguire un login. accessibile con man shadow. al solito i dettagli sul significato dei campi si trovano nella pagina di manuale. ed infine le sovrascrive con una x. ma operante sui gruppi (e relativi file /etc/group e /etc/gshadow) ` e grpconv. ed e indicano rispettivamente: • • • • nome del gruppo password cifrata amministratore del gruppo utenti appartenenti al gruppo ed un esempio di questo file ` il seguente: e root:*:: daemon:*:: bin:*:: sys:*:: adm:*:: tty:*::piccardi. Il formato ` sempre lo stesso. PASS_MAX_DAYS e PASS_WARN_AGE presi da login.

Per questo motivo esaminare il contenuto di questi file non ` detto sia sufficiente ad e identificare tutti gli utenti di un sistema..:/home/piccardi:/bin/bash admin:x:1003:1003:Utente Amministrativo. quando le informazioni o sono distribuite su pi` supporti.10.. 4. ma le informazioni aggiuntive (come i dati sulle scadenze delle password) verranno persi. in breve PAM. 3. Dato che in questo caso la richiesta ` pi` sofisticata il sistema sar` e u a pi` complesso. In questo modo infatti ` molto pi` semplice per le singole applicazioni mantenere un proprio file e u di configurazione. cos` che questo ı possa essere. Ogni applicazione che necessita dell’uso del sistema sar` controllata da un apposito file in a /etc/pam.d.. come accennato all’inizio.:/home/admin:/bin/bash 4. ma anche.10. ` solo uno dei metodi per mantenere le informazioni riguardo gli account u e degli utenti. in maniera totalmente trasparente ai programmi scelti. In questo modo si otterr` la stampa delle informazioni degli utenti nello stesso formato in a cui sono mantenute nel corrispondente file tradizionale. getent. l’uso dei file appena descritti.d il cui nome corriponde a quello dell’applicazione stessa (si avranno cio` file come e . in quanto le informazioni potrebbero essere mantenute anche altrove.4 Il Pluggable Authentication Method La necessit` di una maggiore flessibilit` della gestione degli utenti non riguarda soltanto la a a possibilit` di mantenere su diversi supporti i dati loro associati. A questo provvede il a sistema chiamato Pluggable Authentication Method. e soprattutto.. e stampa a video il risultato. in questo caso le password verranno reinserite in /etc/passwd ed /etc/shadow. La flessibilit` di PAM ` dovuta al fatto che il sistema ` implementato come una libreria dia e e namica che permette di caricare una serie di moduli (usualmente mantenuti in /lib/security) che realizzano diverse funzionalit` in una o pi` delle classi di tab. LA GESTIONE DI UTENTI E GRUPPI 167 sistema tradizionale con i comandi pwunconv e grpunconv. illustrate in tab.. dove si sono riportate anche le quattro parole chiave usate nella configurazioni per identificarle. Per questo motivo si pu` utilizzare un apposito comando. pur restando ancora oggi quello pi` diffuso. quella a di permettere la gestione di diverse modalit` per gestire l’autenticazione. Nel gestire l’insieme dei metodi per l’autenticazione e l’accesso al sistema PAM suddivide il lavoro in quattro tipologie di servizio indipendenti fra loro. La configurazione di PAM pu` essere effettuata in due modi. 4.1. Si ricordi che. sostituito con un altro. introdotto inizialmente su Solaris e poi portato anche su GNU/Linux. quello pi` comune ` l’uso di una o u e serie di file (uno per ciascuna applicazione che usa il sistema) posti nella directory /etc/pam. Inoltre il sistema permette a di utilizzare impostazioni diverse per le differenti applicazioni che lo usano. ad esempio si avr`: a piccardi@monk:~/truedoc/corso$ getent passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh . consente di interrogare il sistema dal Name Service Switch u per richiedere una lista completa. che. piccardi:x:1002:1002:Simone Piccardi.3.. Una delle caratteristia u che pi` interessanti di PAM ` questi moduli possono essere impilati in modo da combinare le u e funzionalit` di ciascuno nella fornitura di un determinanto servizio.4.3. ma in sostanza si tratta sempre delle definizione di una interfaccia di programu mazione generica per cui tutti i programmi che necessitano di compiere una qualche forma di autenticazione (come login o passwd) lo fanno attraverso una liberia che fa da intermediario rispetto al meccanismo con cui poi le operazioni vengono effettivamente svolte. L’idea ` quella di realizzare un meccanismo che ricopra per i programmi di autenticazione e il ruolo che ha il Name Service Switch per quelli che richiedono una corripondenza fra identificatori numerici e simbolici. Il comando richiede come argomento una delle classi di informazioni gestite dal Name Service Switch fra quelle di tab.

ma pu` essere esteso in mao niera generica (permettendo l’uso anche di dispositivi hardware). che indica il modulo da utilizzare. ipologia requisite Significato il fallimento del modulo comporta l’immediata terminazione della procedura di autenticazione. su.d.11: I principali valori per il campo di controllo dei risultati usati nei file di configurazione di PAM. questi prevedono una sintassi semplificata. 4. si pu` a o accedere al servizio. Ciascun file contiene una regola per riga (si pu` proseguire una regola o su pi` righe terminandole con il carattere “\”) ed al solito righe vuote ed inizianti per “#” vengono u ignorate. indica la modalit` di comportamento che le a applicazioni devono assumere in caso di successo o fallimento del compito assegnato al modulo. nella forma: service type control module-path [arguments .). la classe di servizi a cui la regola fa riferimento.11. indica (con le parole chiave di tab. ecc. AMMINISTRAZIONE ORDINARIA DEL SISTEMA ipologia account Significato fornisce il servizio di verifica della presenza di un account e della relativa validit` (le password sono scadute. .. Una forma alternativa di configurazione ` quella dell’uso del file /etc/pam. in cui si utilizza direttamente uno dei valori riportati tab. possono seguire altri campi che specificano degli argomenti.. 4.168 CAPITOLO 4.. accessibile con man 7 pam. e . required sufficient optional Tabella 4. type.). ma . . fornisce il servizio di aggiornamento dei meccanismi di autenticazione (come cambiare la password).conf in cui si e inseriscono tutte le regole di gestione che starebbero dentro i file di /etc/pam.] dove service indica il nome dell’applicazione cui si applica la regola (quello che con /etc/pam. auth password session Tabella 4. fornisce i servizi di preparazione per le risorse che devono essere messe a disposizione dell’utente (ad esempio il montaggio della home directory) all’inizio di una sessione di lavoro e quelli relativi alla liberazione delle stesse alla fine della sessione.10: Le quattro tipologie di servizi forniti da PAM. il fallimento del modulo comporta il fallimento della procedura di autenticazione.10).d ` il nome del file). control.. all’ultimo e dei quali. nella forma: type control module-path [arguments . ed ` e strettamente collegato ad auth. a in genere sulla base di un meccanismo di sfida/risposta (come dare la password). gli altri eventuali moduli non vengono chiamati. ecc. e 17 se quest’ultima ` presente il file viene ignorato. una regola ` composta da almeno tre campi separati da spazi (o tabulatori). Il secondo campo. o la sintassi completa illustrata nella pagina di manuale di PAM.17 Il file prevede una linea per ciascuna regola ed al solito si ignorano le righe vuote e quelle inizianti per #.] Il primo campo. a differenza delle precedenti queste sono composta da cinque campi separati da spazi. fornisce il servizio di verifica dell’identit` di un utente. login. passwd.

org. In questo caso si hanno due scelte. non avendo necessit` specifiche (ad esempio la a mancanza di supporto per un qualche dispositivo) evitano di installarne un altro. Nella maggior parte dei casi il kernel viene installato dalla propria distribuzione durante l’installazione.1 In genere infatti le varie distribuzioni installano una propria versione del kernel. Se invece si vuole installare un kernel ufficiale (ad esempio per avere le funzionalit` aggiunte nello a sviluppo effettuato nel frattempo) occorre scegliere una versione adeguata. si pu` ricompilare il kernel della propria distribuzione (in o genere tutte forniscono i relativi sorgenti). occorre e prendere l’ultima versione stabile. 5.kernel. La scelta della versione di kernel da utilizzare ` in linea generale abbastanza semplice. l’installazione. modificata applicando vari patch 2 che si ritiene migliorino le prestazioni o la stabilit` ed aggiungono funzionalit` reputate rilevanti. l’utilizzo delle patch e tutto quanto attiene la manutenzione dello stesso. 2 si chiamano cos` le modifiche. molti kernel u di installazione infatti sono compilati con un supporto generico (per tipo di processore o per il chipset della piastra madre) per poter essere impiegati su qualunque PC.3. curato dal mantainer ufficiale (lo stesso Linus ı o chi lui ha delegato al compito). e i file di configurazione e provvedere alla ricompilazione secondo le istruzioni di sez.1. da applicare ai sorgenti tramite ı il comando omonimo. Le esigenze che portano all’installazione di un nuovo kernel sono in genere due. pertanto pu` essere o utile ricompilarli per eliminare il supporto di funzionalit` superflue non disponibili e attivare a quello per la versione specifica del proprio hardware. 1 si chiama cos` il kernel pubblicato su http://www. a a ma non ancora incluse nel kernel ufficiale. e molti. Per stabilire di quale versione si tratta basta andare sul sito ufficiale del kernel. per ottenere una nuova versione degli stessi. od utilizzare un kernel ufficiale.1 La gestione di kernel e moduli Tratteremo in questa sezione la gestione del kernel.1 Le versioni del kernel Uno dei primi problemi che ci si trova ad affrontare nella gestione del kernel ` quello della scelta e di versione quale usare. la sua ricompilazione. 169 . la gestione dei moduli. in forma di file prodotti dal programma diff. Qualora si scelga il kernel della propria distribuzione c’` solo da procurarsi i relativi sorgenti.Capitolo 5 Amministrazione straordinaria del sistema 5. la prima ` e ottimizzare il kernel per renderlo pi` adatto alla propria configurazione hardware. in tutti i suoi aspetti: dalla scelta delle diverse versioni. 5. al tipo di kernel da utilizzare.1. Conviene comunque dare alcune spiegazioni sul significato dei numeri di versione del kernel: essi sono espressi sempre da tre numeri separati da punti.

5. mentre i kernel della serie 2.x. Al momento della scrittura di queste dispense (gennaio 2004) l’ultimo kernel “stabile” ` il e 2. va presa comunque con prudenza. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Il primo numero esprime la major version.1. cio` il e u e kernel 2. la cui lista ` segnalata sulla stessa pagina.6. alla serie 2. in genere ci vuole sempre un po’ di tempo perch´ le nuove e e versioni stabili maturino e possano sostituire completamente le versioni precedenti. riscritte parti che non si consideravano soddisfacenti. Per questo al momento ` senz’altro pi` opportuno utilizzare l’ultima versione stabile precedente. di sviluppo.4 Questo ci dice che in realt` il nuovo kernel stabile non ` lo poi cos` tanto.4. mentre un numero dispari indica la versione e sperimentale.6. pare essere cambiata la modalit` di sviluppo del kernel. Il secondo numero esprime il cosiddetto patchlevel. che avviene solo quando esse sono state abbondantemente verificate. si pu` dire comunque che in generale in a o una versione stabile viene curata molto la stabilit` del sistema e la correzione degli errori rispetto all’inserimento a di nuove funzionalit`. 3 . che in genere ha molto carico. o eseguano backporting di codice dalla versione di sviluppo. l’indicazione di utilizzare l’ultimo kernel della serie stabile.x indicano i kernel stabili. Possono esistere anche delle buone ragioni (macchine con software vecchio che non gira sulle nuove versioni e che non si pu` aggiornare) o motivi di spazio (i nuovi kernel tendono a consumare pi` risorse e a non supportare pi` piatu u taforme hardware particolarmente ‘datate) che spingono a mantenere l’utilizzo di vecchie serie. e In genere i sorgenti vengono distribuiti nella directory /pub/linux (vi si accede sia in FTP accade spesso che gli sviluppatori si lascino comunque prendere la mano e introducano comunque nuove funzionalit`. un numero di versione che cambia solo in caso di fondamentali modifiche strutturali dell’infrastruttura. lo sviluppo dei quali3 ` e volto alla eliminazione dei bug e alla stabilizzazione del sistema. che ne cura lo sviluppo ed il e rilascio delle nuove versioni. a 4 dopo alcuni mesi dal rilascio della nuova serie 2.out all’ELF). e l’eventuale introduzione di un quarto livello di numerazione per tenere conto di eventuali stabilizzazioni di queste release successive.6. usati per le macchine in produzione. Si tenga presente che ogni versione stabile ha in genere un suo mantainer (quello delle versioni di sviluppo finora ` sempre stato Linus). che non prevede per il momento la creazione di nuove serie instabili. Per esempio i kernel della serie 2. nella direzione della stabilizzazione per le serie pari. in cui vengono introdotte tutte le nuove funzionalit` e le modifiche a infrastrutturali che porteranno alla successiva versione stabile. ma indica pi` propriamente una serie di u sviluppo. il passo successivo ` quello di scaricare e i sorgenti e ricompilarli. Come accennato il sito per la distribuzione delle versioni ufficiali ` e http://www. che ` quella che invece cambia periodicamente. per cui si consiglia l’uso di uno dei vari mirror italiani disponibili. sia pure solo a livello di correzione dei pochi errori restanti. Al momento la major version ` la 2 e non e sembrano esserci all’orizzonte modifiche tali da giustificare una 3. dato a e ı che la nuova serie ` appena nata. nei quali sono state introdotte le nuove funzionalit`. ma il a passaggio da una versione stabile alla successiva.org. cosa avvenuta finora una sola volta (nel passaggio dei formati dei binari dall’a.x e la 2.5.1.x indicavano i kernel sperimentali. integrando anche grossi cambiamenti del kernel.4. nati a partire da un precedente kernel stabile. mentre non esistono ancora kernel in versione instabile: siamo cio` in quel periodo che e segue il rilascio di una nuova serie stabile in cui non si ` ancora dato vita ad una nuova versione e di sviluppo. che sono a tutt’ora sviluppate.x.2. e che viene aggiornato periodicamente con il relativo sviluppo. a L’ultimo numero di versione ` infine il numero progressivo che identifica i kernel all’interno e di una serie. (nel novembre 2004. Questo ci dice che anche se genericamente valida. ecc.170 CAPITOLO 5.9). nella direzione delle nuove funzionalit` ed infrastrutture per a quelle di sviluppo.0. come la 2.24.2 Sorgenti e patch Una volta scelta la versione del kernel da utilizzare. La convenzione scelta dagli sviluppatori e ` che un numero pari indica una versione stabile.kernel.

EXPORT_SYMBOL(iopa). che per l’aggiunta o la rimozione di alcuni di essi. EXPORT_SYMBOL(ioremap). mentre la seconda la nuova versione. nel caso 6 righe del primo file a partire dalla 163. EXPORT_SYMBOL(_insl_ns). EXPORT_SYMBOL(flush_dcache_page). A seconda dei casi il comando da usare ` e tar -xvjf linux-2. LA GESTIONE DI KERNEL E MODULI 171 che in HTTP) e sono disponibili in tre forme.4.gz In genere si tende a mettere detti sorgenti in /usr/src ma nella procedura di compilazione ed installazione niente obbliga a questa scelta. Un discorso diverso va fatto qualora si vogliano utilizzare i patch.4. che permette di ridurre la quantit` a a di dati da scaricare.tar.bz2 a o linux-2. +EXPORT_SYMBOL(local_flush_tlb_all).20-ben8-xfs-lolat/arch/ppc/kernel/ppc_ksyms. Cos` si pu` passare da una versione di un programma alla successiva traı o smettendo solo le differenze nel relativo sorgente.24. Le differenze sono mostrate apponendo un + alle righe aggiunte nel secondo file ed un .23 si potr` passare al 2. 5 . che verr` a costituire per l’appunto il patch. ma la cosa vale per qualunque file di testo).24.c 2003-05-15 17:12:38.4. EXPORT_SYMBOL(xchg_u32). cos` come prodotta dal ı comando diff. EXPORT_SYMBOL(_outsl_ns).a quelle tolte.000000000 +0100 +++ linux-2.4. ma che non sono ancora a incluse nei sorgenti del kernel. dato che non ` necessario usare root per la compilazione. Per questo occorre capire cos’` un patch: questo ` definito sulla base della differenza fra due e e file (in genere dei sorgenti.000000000 +0200 @@ -163.tar. Cos` ad esempio una volta che si abbiano i sorgenti del kernel ı 2.24. EXPORT_SYMBOL(flush_icache_page).6 +197.5 le prime due sono degli archivi completi in formato tar compressi o con bzip2 o con gzip. #ifdef CONFIG_ALTIVEC EXPORT_SYMBOL(last_task_used_altivec).7 @@ EXPORT_SYMBOL(_outsw_ns). il cui nome sar` qualcosa del tipo linux-2.1.bz2 o tar -xvzf linux-2. +EXPORT_SYMBOL(ioremap_bot).c 2002-11-23 10:52:30. anzi.6 +163.24 scaricando soltanto il file patch-2.tar. Le righe che iniziano per @@ indicano a quale riga nei due file e fanno riferimento i dati riportati di seguito. l’uso e della propria home directory potrebbe anche essere una scelta migliore.20-ben8/arch/ppc/kernel/ppc_ksyms. Cos` diventa possibile aggiornare alla versione successiva senza dover ı effettuare dei download di enormi dimensioni. che ha come origine la directory in cui si trovano i due diversi alberi quando ` stato eseguito il diff.24.tar. che permette di indicare quali righe sono cambiate dall’uno all’altro e salvare il tutto su un file.4.4. ma sono sempre e u u una ventina di megabyte abbondanti) oppure attraverso dei patch che permettono di passare da una versione precedente alla successiva. un esempio di ` il seguente: a e --.gz (il primo ` pi` compresso e si scarica pi` velocemente.24.linux-2. Si pu` poi salvare il o tutto su unico file. la prima riga qui indica il file originale.5. EXPORT_SYMBOL(__ioremap). EXPORT_SYMBOL(flush_icache_user_range). @@ -196. Una volta scaricati gli archivi si dovranno scompattare questi ultimi che creeranno una directory linux-2.7 @@ EXPORT_SYMBOL(flush_dcache_range). in realt` esiste anche una forma di distribuzione tramite il protocollo rsync. Questo tra l’altro vale sia per il passaggio da una versione di kernel all’altra.4.24 nella directory corrente. EXPORT_SYMBOL(iounmap). che per l’applicazione di patch relativi all’installazione di funzionalit` aggiuntive che possono interessare. si noti che si tratta di un pathname relativo. in modo che sia possibile evitare di riscaricare da capo l’archivio completo tutte le volte. registrando le differenze sia per quanto riguarda i vari file che esse contengono.4.4. e 7 del secondo a partire sempre dalla stessa riga.gz (di norma viene a compresso anche questo).4. Il comando diff pu` inoltre essere eseguito o ricorsivamente su due intere directory.

4.4.23 ma non si ha la directory linux-2. applicarle senza dover ı scaricare tutto un nuovo albero dei sorgenti.4. potr` generare un patch delle differenze.24 mantiene anche quelli della versione 2. a In questo caso per capire il funzionamento del comando occorre rifarsi all’esempio di patch mostrato in precedenza.24. e cio` applicare ad un certo o e file le differenze ottenute con il metodo precedente. ma nel caso appena illustrato questo non funzionerebbe. o saltare da una versione di kernel ad un altra che non sia la successiva applicando in successione pi` patch. ad e esempio si sono scompattati i sorgenti nella directory linux-2. Il meccanismo ` del tutto generale. la nuova versione prender` il posto dell’originale. Nel caso pi` semplice e u in cui si deve operare su un singolo file la sintassi ` immediata e si pu` eseguire il comando con e o un qualcosa del tipo: patch original patch. in modo da convertirlo nella nuova versione.diff nel qual caso. in quanto non si sarebbe in grado di trovare il file di destinazione. Cos` o ı se chi dispone dei nuovi sorgenti del kernel 2. questo pu` essere richiesto esplicitamente con o l’opzione -R (o --reverse). fintanto che questi non u andranno ad operare esattamente sulle stesse righe degli stessi file eseguendo modifiche incompatibili fra di loro. La cosa pu` essere effettuata anche ricorsivamente. a meno che non si sia specificata l’opzione -b (o --backup) per richiedere un backup. per cui occorrer` usare una redirezione. ignorando le directory presenti nel pathname relativo. Si tenga presente per` che se si tenta di applicare lo stesso patch o una seconda volta si avr` proprio questo comportamento.4. a Quando per` si ha a che fare con un patch che coinvolge pi` file (come quelli che si applicano o u ad un albero di sorgenti) i nomi dei file cui esso va applicato ` riportato nel file stesso. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Con il comando patch si pu` invece compiere l’operazione inversa. inoltre in questo caso il comando legger` il contenuto del patch a dallo standard input. u Come accennato il comando per applicare un patch ` appunto patch. Cos` diventa possibile inserire nel kernel anche pi` funzionalit` aggiuntive.23. e non e devono quindi essere specificati. se lo desidera.23 cancellando il primo livello di directory tutti i pathname relativi sarebbero risolti. Inoltre patch ` in grado di e e rilevare il caso in cui si prodotto il patch invertendo le versioni. Il problema che molto spesso ci si trova di fronte ` che si ha a disposizione solo la versione di partenza e non quella di arrivo. nel qual caso avvisa richiedendo il permesso di applicare il patch alla rovescia. ma proseguire nell’applicazione non a . Il livello 0 usa semplicemente quanto specificato nel patch stesso. il comando ricerca (a partire dalla directory corrente) il file che considera la vecchia versione e cerca di applicarvi le differenze. se per` ci si o ponesse direttamente dentro la directory linux-2.4. o si ` sbagliato file) generer` dei automaticamente dei file terminanti in . il default di patch ` di utilizzare solo il nome e del file. che applicato a questi ultimi li trasformer` in quelli a a del 2. per cui in genere l’applicazione fallir`. da quale livello di directory nell’albero dei sorgenti si vuole partire per applicare il patch. pertanto di norma per applicare un patch sui sorgenti del kernel quello che si fa `: e cd /usr/src/linux patch -p1 < /path/to/patch/patch.diff Si tenga presente che se non si specifica un livello.rej e a che contengono le modifiche che ` stato impossibile effettuare. Per questo motivo di norma bisogna dire al comando. su un intero albero di file e directory.24. cos` che un utente possa. ed inoltre il comando patch ` sufficientemente intelligente e e da essere in grado di applicare anche pi` patch distinti in successione. ı u a fintanto che queste non interferiscono fra loro. Se il comando non riesce ad applicare un patch (ad esempio perch´ se ne ` gi` applicato a e e a uno incompatibile. usando l’opzione -p.172 CAPITOLO 5. L’utilit` dei patch ` che in questo modo anche chi cura la manutenzione di ulteriori a e funzionalit` non presenti nei kernel ufficiali potr` limitarsi a distribuire il patch che contiene le a a relative aggiunte e modifiche.4.

e le varie operazioni sono compiute invocando gli opportuni target 6 del comando make. per la relativa versione. creata dagli stessi sviluppatori. 4.4. Questa ` una delle caratteristiche pi` rilevanti di Linux.2. 5. ma nel caso non viene utilizzata la procedura illustrata in sez.4) ` quella di essere modulare. La vere sione del kernel ` indicata dai sorgenti. ed ` codificata nelle prime righe del Makefile principale. che aggiungono le funzionalit` ulteriori o il supporto per l’uso a di certi dispositivi. che gli permette una flessibilit` di e u a ´ utilizzo che gli altri kernel non hanno. e e che sono nella forma: VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 23 EXTRAVERSION = -ben1 KERNELRELEASE=$(VERSION). Una delle caratteristiche peculiari di Linux (torneremo sull’argomento in dettaglio anche in sez.1. viene eseguita tramite il comando make.$(PATCHLEVEL). per questo esiste l’opzione -N (o --forward) che indica di ignorare i patch che sembrano invertiti o gi` applicati. e 7 6 .1. 5. accessibile o con man patch.2.1. Pertanto tutto la procedura ` controllata dal Makefile principale e presente nella base della directory dei sorgenti.1 relativamente al funzionamento di questo comando. Ci` o comporta che ogni kernel deve avere la sua versione dei moduli. caricato in memoria all’avvio del sistema ed in cui e devono essere inserite tutte le funzionalit` che si vogliono usare. evitare di mantenere permanentemente in memoria parti di codice a che sono utilizzate solo per limitati periodi di tempo (ad esempio il codice per accedere a CDROM o floppy occupa inutilmente memoria se non li si stanno utilizzando). 5.1.7 Sorge allora un problema quando si vogliono ottenere due (o pi`) kernel diversi a partire dagli stessi u sorgenti.5. o modificarle senza bisogno di un riavvio (basta rimuovere il modulo e ricaricarlo con le nuove opzioni). che sono identificati. ma tutto viene gestito attraverso una procedura di costruzione dedicata. i moduli sono identificati soprattutto per la directory in cui sono a mantenuti.3 La ricompilazione del kernel Una volta che si sono scompattati i sorgenti ed applicati gli eventuali patch ritenuti opportuni si pu` passare alla compilazione del kernel.$(SUBLEVEL)$(EXTRAVERSION) si ricordi quanto accennato in sez. Per tutti i dettagli sul funzionamento del comando e sul significato delle opzioni si pu` al solito fare riferimento alla pagina di manuale. 4. A differenza cio` degli altri sistemi unix-like in cui il e e kernel ` un unico programma monolitico. solo quando servono. Linux pu` partire con un kernel a o contenente le sole funzionalit` di base e poi caricare da disco in maniera dinamica delle ulteriori a sezioni di codice. dette moduli. Un primo aspetto dell’uso dei moduli ` che quando e si usano diverse versioni del kernel devono essere usate anche diverse versioni dei moduli. Questa. in realt` come vedremo in sez. LA GESTIONE DI KERNEL E MODULI 173 sarebbe corretto. E possibile infatti modularizzare lo sviluppo del kernel separandone le funzionalit`.1. a Per risolvere questo problema ` allora possibile definire una versione “personalizzata”. L’uso dei moduli ha pertanto una grande rilevanza e deve essere pianificato accuratamente in fase di compilazione e configurazione. a Il comando patch prende molte altre opzioni ed ` in grado di utilizzare vari formati per i e patch ed anche di interagire direttamente con vari programmi per il controllo di versione per identificare quali sono i file su cui operare. come per la maggior parte dei pacchetti o che si installano dai sorgenti. dato che in questo caso la versione sar` la stessa. che ` /lib/modules/‘uname -r‘. come quest’ultimo. quella che viene mostrata dal comando uname -r. in quanto nel caso del kernel non esiste uno script di configurazione. indicare opzioni specifiche per la gestione di un dispositivo in fase di caricamento.

Una volta che si sia specificato quanto voluto. o e essere in vena di sperimentazione). come quello dei programmi ordinari. quali mettere direttamente dentro il kernel. pena il fallimento dell’avvio con un kernel panic. tramite il contenuto del file . ` un file che contiene il codice compilato di una o pi` e u funzioni. Un secondo aspetto dell’uso dei moduli che occorre tener presente ` che per poterli utilizzare e occorre anzitutto poter caricare in memoria il loro codice. 8 . Si noti allora la presenza. a meno di non sapere esattamente quello che si sta facendo. o in fase di boot quando mancano le componenti essenziali per l’avvio del sistema. assai meno rari). Per il primo compito occorre il supporto per accedere al dispositivo su cui si trova la radice e quello per il relativo filesystem. che serve appunto a specificare un ulteriore identificativo di versione. molto rari. questo ` anche quello che si fa quando si produce l’immagine del kernel. In genere questa ` l’unica modifica che pu` essere necessario fare a mano (anche se il e o kernel-package di Debian fornisce il comando make-kpkg che ` in grado di farla automaticae mente). Quanto necessario a svolgere questi due compiti. e 10 si chiama cos` un crash fatale del kernel.o (ma si ricordi che l’estensione in Unix ` solo una convenzione.9 Questo comporta allora che le funzionalit` del a kernel necessarie ad accedere al supporto su cui si trovano i moduli non possono essere ottenute con l’uso di questi ultimi (e dovranno essere inserite all’interno del kernel in maniera monolitica). e le opzioni per le ottimizzazioni del gcc (che ` meglio lasciar stare al e valore di default. in questo modo. attraverso un procedimento successivo o detto collegamento (o meglio linking) si possono unire insieme pi` funzioni per dar luogo a quello che poi andr` a u a costituire un eseguibile. anche se modularizzabile.x li si ` distinti dai normali file oggetto usando l’estensione . AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA e come si vede ` qui che viene definita la variabile KERNELRELEASE che poi sar` usata in tutto e a il resto della procedura.o.8 dato che questi non sono altro che codice. Per capire quali sono queste funzionalit` occorre ricordare quali sono i due compiti di base a eseguiti dal kernel all’avvio: montare la directory radice ed eseguire init.config. dovr` comunque a essere inserito permanentemente nel kernel. dal punto di vista della compilazione e della costruzione del kernel. 9 ed infatti a partire dalla serie 2. in cui per` gli indirizzi non sono stati assegnati. Le uniche altre eventuali (anche se poco probabili) modifiche che si posu sono voler fare al Makefile riguardano la variabile CROSS_COMPILE.10 A parte le eventuali modifiche del Makefile per modificare la EXTRAVERSION. tutte le altre configurazioni sono gestite in maniera indipendente. il kernel verr` costruito di conseguenza. o di problemi hardware. quelle attivate non sono commentate ed assegnate al relativo valore. sempre nella directory base dei sorgenti. nel caso conta solo il contenuto). Un estratto del contenuto del file ` il seguente: e # # Automatically generated make config: don’t edit # # CONFIG_UID16 is not set # CONFIG_RWSEM_GENERIC_SPINLOCK is not set CONFIG_RWSEM_XCHGADD_ALGORITHM=y CONFIG_HAVE_DEC_LOCK=y Le opzioni di configurazione sono tutte dichiarate come variabili nella forma CONFIG_XXX. e l’uso dei moduli e consente di ripetere il procedimento sul codice del kernel che sta girando. anche se un po’ particolare.174 CAPITOLO 5. appositamente predisposta. che pu` essere usata per o compilare kernel per una architettura diversa dalla propria (ad esempio un kernel per PowerPC su una macchina Intel). alcune indicano dei vaun file oggetto. questo pu` avvenire solo per errori fatali durante l’esecuzione dello ı o stesso (in caso di bug particolarmente gravi.6.ko al posto di e . e quali utilizzare come moduli. dove sono memorizzate tutte le opzioni di configurazione. che ` sicuro. per il secondo il supporto per l’uso del formato binario di esecuzione dei programmi. il che significa che si deve essere in grado di leggere i relativi file oggetto. che permetta di tenere separati kernel diversi (ad esempio per le opzioni di compilazione che si sono scelte) ottenuti a partire dagli stessi sorgenti. attraverso la modalit` a che vedremo pi` avanti. della variabile EXTRAVERSION. in cui si scelgono quali funzionalit` e a attivare e quali no. in genere identificato dall’estensione . a Tutto questo viene fatto. il primo passo per la compilazione del kernel ` quello della configurazione.

qualora l’opzione faccia riferimento ad una funzionalit` che pu` essere a o modularizzata.config e si voglia essere sicuri di ottenere un file di configurazione coerente.x le interfacce grafiche sono diventate 2. testuale la prima e grafica la seconda. con finestre e men` che permettono di selezionare inteu rattivamente le varie opzioni ed effettuare le relative scelte in maniera casuale.5. dato che. Le due interfacce. Il primo target ` config. Questo pu` risultare utile qualora si siano effettuate modifiche a mano o del file . o. “m”. Gli altri due target sono menuconfig e xconfig che attivano invece due interfacce utente. senza serializzare le domande. ma il procedimento ` comunque molto scomodo in quanto non esiste un e meccanismo per correggere una impostazione una volta che si sia fatto un errore. 5. accessibile e con make gconfig. invece che dalle nostre risposte sul terminale. per cui tratteremo solo la prima. mostrata in fig.config non deve essere scritto a mano. si rischia di attivare opzioni incompatibili fra di loro o inconsistenti. la prima. Come scritto nell’estratto illustrato in precedenza normalmente . sono sostanzialmente equivalenti. a meno di non sapere esattamente quello che si sta facendo. Per questo la configurazione viene eseguita invocando make con uno dei target di configurazione.1. questo talvolta fallisce in quanto per la compilazione necessitano le librerie ncurses su cui ` basata l’interfaccia a finestre.1: Schermata di avvio della configurazione del kernel con make menuconfig. Ovviamente eviter` di eseguire ulteriori domande qualora non si attivi una a che le prevede opzione. LA GESTIONE DI KERNEL E MODULI 175 lori generici (come il tipo di processore o la codifica NLS11 usata di default) ma la maggior parte possono avere come valori possibili solo “y” che ne indica l’inclusione nel kernel (o la semplice attivazione). le risposte alle domande. Di norma e 11 il Native Language Support. e Figura 5. questo avvia uno script di shell che effettua la configurazione e chiedendo di immettere sul terminale uno per uno i valori da assegnare varie opzioni che si vogliono attivare. indica la codifica dei vari codici ASCII per le stringhe. a parte l’apparenza. sempre accessibile con make xconfig ` basata sulle librerie QT. . Pertanto ` oggi praticamente in disuso. la seconda.6. In genere il programma viene compilato la prima volta che si esegue il relativo bersaglio. come iso8859-1. A partire dal kernel 2. per cui occorre ricominciare da capo. Eseguendo make menuconfig nella directory dei sorgenti del kernel si otterr` la pagina di a avvio del programma di configurazione.1. ` basata sulle librerie GTK. ma opportunamente generato. invocabile con il target oldconfig che si limita a rileggere e riprocessare il file di configurazione precedente ricavando da questo. a parte per una sua versione e modificata.

Un asterisco indica che la o funzionalit` ` attivata. per cui ` sempre il caso di usare i relativi pacchetti. I valori fra parentesi quadre indicano le opzioni per le quali ` possibile solo scegliere fra e l’attivazione o meno e la scelta pu` essere fatta premendo il tasto “y” per attivare e “n” per o disattivare. quelli indicati fra parentesi tonde sono per le opzioni che richiedono un valore generico. premendo la barra si pu` ciclare fra le due opzioni. I valori delle opzioni sono riportati e all’inizio di ogni riga. ma non altrettanto avviene per i file di dichiarazione necessari alla compilazione. Si tenga presente che se si tratta ae e del supporto per funzionalit` specifiche del kernel questo implica che il relativo codice sar` incluso a a monoliticamente. e per Debian sono ncurses e libncurses-dev. 5. nel qual caso andr` installato il relativo pacchetto12 (e quelli delle glibc. che possono essere cambiate con le frecce orizzontali.176 CAPITOLO 5. se si ` modificata e la EXTRAVERSION questa dovr` comparire. Subito sotto c’` il titolo della sezione in cui ci si trova a e (nel caso ` il men` principale). seguito da un breve riassunto dei principali comandi disponibili. Dal men` principale ` possibile selezionare una sezione premendo invio (a meno di non aver u e cambiato l’opzione di selezione). I valori fra parentesi angolari indicano invece le opzioni relative a funzionalit` che possono a essere anche modularizzate. che pu` essere selezionato da un men` a tendina o inserito da una finestra di o u immissione che si attivano quando l’opzione viene selezionata.2: Schermata di configurazione del kernel con make menuconfig. molte di queste opzioni per` servono anche per attivare ulteriori configurazioni o o specificare caratteristiche di un’altra opzione (che pu` anche essere modulare). AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA queste vengono installate. e u Le frecce verticali permettono di spostarsi nella finestra centrale che contiene le varie sezioni in cui sono state suddivise le opzioni di configurazione. rispetto alle precedenti possono presentare anche il valore “M” (attivabile direttamente premendo “m” o ciclando fra i valori possibili con la barra) che indica che si le librerie ncurses sono presenti in tutte le distribuzioni. e questo ci porter` nella finestra di configurazione delle relative a opzioni. qualora a anch’essi fossero assenti). Figura 5. uscire dalla finestra corrente e ottenere una finestra di aiuto (contestuale all’opzione selezionata). La finestra di avvio riporta nella prima riga in alto la versione del kernel.2. Nella parte bassa ci sono le tre opzioni principali che permettono di selezionare una opzione. un esempio della quale ` mostrato in fig. nel qual caso o le successive descrizioni appariranno indentate. uno spazio vuoto che non ` attivata. 12 .

Processor type and features Questa sezione contiene le opzioni relative alla scelta del tipo di CPU presente. in realt` ` sempre il caso di attivarla ae in quanto buona parte delle opzioni sperimentali sono ampiamente utilizzate e perfettamente funzionanti. LA GESTIONE DI KERNEL E MODULI 177 ` optato per la creazione del relativo modulo. cosicch´ le relative e funzioni possono essere chiamate solo all’interno dello stesso kernel. In genere deve essere sempre abilitato il supporto per il bus PCI e per la rete (Networking support e PCI support). Loadable module support In questa sezione si attivano le opzioni per abilitare la gestione dei moduli ed il relativo supporto nel kernel. Altre due opzioni essenziali (necessarie al funzionamento moltissimi programmi) sono System V IPC e Sysctl support. u General setup Questa ` la sezione dove si attiva il supporto per le funzionalit` principali del kernel. Sempre qui vanno attivate le opzioni per l’uso di grandi quantit` di memoria (High Memory a Support) quando si ha pi` di 1Gb. pertanto ci limiteremo ad una descrizione sommaria del contenuto delle varie sezioni del men` principale. il formato degli eseguibili. e a u a e comparir` una finestra che richiede se si vuole che le nuove configurazioni siano salvate o a scartate.x13 sono le seguenti: u Code maturity level options Questa sezione contiene una sola opzione che se attivata permette di vedere tutte le opzioni che sono classificate come sperimentali. che introduce un controllo di versione per i moduli in modo che non vengano caricati per errore moduli compilati per un’altra versione del kernel. Le opzioni sono tre e in generale si possono attivare tutte. Di particolare importanza ` poi l’opzione per il Sime metric multi-processing che consente l’uso di macchine multiprocessore. 14 13 . se si ` gi` nel men` principale invece si uscir` effettivamente dalla configurazione. con le opzioni per il supporto di vari insiemi di istruzioni estese (MTRR (Memory Type Range Register) support). come nel men` principale). Due opzioni specifiche per il men` principale sono poi quelle disponibili separatamente in u fondo allo stesso. quelle disponibili con i kernel della serie 2. Questo pu` comunque essere ottenuto o con delle semplici copie del file . Data la quantit` (alcune centinaia) delle opzioni disponibili non ` possibile commentarle a e tutte. e per alcuni servizi interni. si pu` o disattivare la seconda. per la rete.14 questo pu` comportare problemi qualora si vogliano utilizzare moduli compilati a parte o o distribuiti in forma binaria. Il supporto per il formato ELF (Kernel support for ELF binaries) deve essere sempre incluso nel kernel (` il formato standard degli eseguibili. sovrascrivendo un nuovo .config.5.config. e a in particolare per i vari tipi di bus. u il meccanismo funziona aggiungendo una checksum a tutti i nomi dei simboli del kernel.1. senza il quale non ` possibile lanciare nessun e e programma). alcune di queste sono presenti solo nelle versioni pi` recenti. le opzioni “pericolose” vengono ampiamente segnalate nelle relative descrizioni. Una u volta che si sono effettuate le proprie scelte selezionando la voce di uscita si pu` tornare al men` o u precedente. Infine per alcune sezioni sono presenti delle ulteriori sottosezioni (sono indicate dalla assenza del valore delle opzioni e dal fatto che terminano con una freccia. se invece si ha un “*” la funzionalit` sar` inserita e a a direttamente nel kernel. o caricarli da.4. un file specificabile dalla solita riga di immissione dei dati. che permettono di salvare i valori della configurazione su.

Plug and Play configuration Questa sezione contiene le opzioni per abilitare il supporto all’uso del Plug and Play per le schede che lo supportano. ATA and ATAPI Block devices le due opzioni Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support e Include IDE/ATA-2 DISK support. A meno di non avere la radice su uno di questi dispositivi il supporto pu` essere modulare. Telephony Support Questa sezione contiene le opzioni relative al supporto di schede telefoniche dedicate. L’opzione SCSI support deve essere abilitata anche se non si hanno dispositivi SCSI in quanto il protocollo viene usato da altri sistemi. Parallel port support Questa sezione contiene le opzioni relative al supporto per la porta parallela. o Networking options Questa sezione contiene le opzioni relative alla rete. Pu` essere completamente modulare. nastri). necessarie per poter utilizzare i dispositivi (ad esempio una stampante) ad essa collegati. tutto il resto ` pu` essere modulare. per gli ultimi due ` possibile e farlo anche in maniera modulare. Sono da attivare TCP/IP networking. ecc. di tutti i relativi dispositivi (dischi.) e dei vari chipset. e dei vari controller.178 CAPITOLO 5. Packet socket e Unix domain sockets. CDROM. SCSI support Questa sezione contiene le opzioni per il supporto dei dispositivi SCSI (dischi. in particolare il supporto per i vari protocolli di rete e tipi di socket e le funzionalit` relative al filtraggio dei pacchetti a (Network packet filtering) ed al routing avanzato. o Sono in genere da attivare Normal floppy disk support. E buona norma lasciare attivi Generic PCI IDE Chipset o Support e Generic PCI bus-master DMA support che permettono l’avvio con un supporto generico. RAM disk support e Loopback device support. Inoltre ` utile attivare l’opzione Use PCI DMA by default e when available altrimenti l’I/O su disco risulterebbe estremamente rallentato. come i programmi per la masterizzazione (che usano l’emulazione . Se si usa dhclient ` altres` necessario il supporto e ı per il Socket Filtering. i RAM disk e il loopback). AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Memory Technology Devices Questa sezione contiene le opzioni relative ai supporti di memoria opzionali come flash. memorie a stato solido ecc. vari disk-array e RAID hardware. oltre al supporto per il proprio chipset. ATA/IDE/MFM/RLL support Questa sezione contiene le opzioni per il supporto del bus IDE. Pu` o essere completamente modulare. Multi-device support Questa sezione contiene le opzioni per abilitare il supporto del RAID software (vedi sez. ) e del Logical Volume Manager (vedi sez. utilizzate prevalentemente nei sistemi embedded. del relativo protocollo.2). che consentono di telefonare direttamente dal computer. 6. Se come nella maggior parte dei casi si hanno dischi IDE occorre abilitare ed inserire nel kernel ATA/IDE/MFM/RLL support e nella sottosezione IDE. o Block devices Questa sezione contiene le opzioni per abilitare il supporto di una serie di dispositivi a blocchi (i floppy. A meno di non avere la radice su uno di questi dispositivi il supporto pu` essere modulare. CD. ed usare questo come ponte fra linea telefonica normale e VoIP.

) e dispositivi virtuali. SLIP. Character devices Questa sezione contiene le opzioni di configurazione per una serie di dispositivi a caratteri. pi` il supporto per alcuni protocolli u di comunicazione di basso livello (PPP. Qui pu` essere abilitato il supporto per la stampante su parallela (Parallel o printer support). ISDN subsystem Questa sezione contiene le opzioni per il supporto dei dispositivi ISDN e dei relativi protocolli. E sempre in questa sezione che si abilita il supporto per le porte seriali Standard/generic serial support (e se si vuole la console sulla seriale anche Support for console on serial port). Pu` essere inoltre utile abilitare il supporto per l’orologio o in tempo reale (Enhanced Real Time Clock Support).5. detto anche Packet radio. tastiere. Ampiamente in disuso. E presente una sottosezione per selezionare il supporto per i vari tipi di controller.1. Old CD-ROM drivers Questa sezione contiene le opzioni per il supporto dei vecchi CDROM pilotati direttamente dalla schede audio. Se non si ha la radice su un disco SCSI tutto tranne SCSI support. . joystick ed altri dispositivi di interazione (detti Human Interface Device su USB. per l’uso del bus AGP (/dev/agpgart (AGP Support)) e per il supporto delle accelerazioni grafiche (Direct Rendering Manager) attraverso la interfaccia DRI di XFree86. Input core support Questa sezione contiene le opzioni per il supporto per mouse. Il supporto pu` anche essere modulare. usato dai radioamatori per la trasmissione dati via radio. IrDA (infrared) support Questa sezione contiene le opzioni per il supporto dei dispositivi di comunicazione ad infrarossi (le porte IrDA). Network device support Questa sezione contiene le opzioni di configurazione per le varie schede di rete utilizzabili con Linux (sia ethernet che di altro tipo). Fusion MPT device support Questa sezione contiene le opzioni di configurazione per una scheda LSI Logic Fusion. SCSI disk support ed il supporto per il proprio controller pu` essere o ` modulare. Sono essenziali le opzioni per il supporto dei terminali (Virtual terminal e Support for console on virtual terminal) che servono all’avvio per la console di sistema.25. a meno di non avere la radice su un filesystem di rete. o Amateur Radio support Questa sezione contiene le opzioni per la configurazione del protocollo AX. I2O device support Questa sezione contiene le opzioni per il supporto del bus di comunicazione I2O usato per la comunicazione a basso livello fra i vari dispositivi presenti sulla scheda madre (ad esempio i sensori di temperatura). ecc. IEEE 1394 (FireWire) support Questa sezione contiene le opzioni per il supporto delle interfacce e dei protocolli per il bus Firewire. LA GESTIONE DI KERNEL E MODULI 179 IDE-SCSI) e le chiavi di memoria USB (che usano il protocollo SCSI per vedere la memoria come un disco). Per poter utilizzare connessioni da remoto (ad esempio con ssh) ` poi e ´ necessario il supporto per gli pseudo-terminali (Unix98 PTY support).

180

CAPITOLO 5. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA

Multimedia devices Questa sezione contiene le opzioni per il supporto di schede TV e schede radio. File systems Questa sezione contiene le opzioni per il supporto di un gran numero di diversi filesystem. Si deve essere sicuri di inserire nel kernel il supporto per il filesystem della radice (/), qualunque esso sia (i pi` usati sono ext2, ext3 e reiserfs). Qui si pu` u o anche abilitare il supporto per il filesystem dei CDROM (ISO 9660 CDROM file ´ system support), e per i vari filesystem di Windows. E sempre opportuno abilitare il supporto per il filesystem /proc (che ` usato da moltissimi programmi) e per gli e pseudo-terminali (/dev/pts). Una sottosezione a parte ` dedicata ai filesystem di rete e (NFS, SMB ed altri), dove pu` essere configurato il relativo supporto. o Console drivers Questa sezione contiene le opzioni per il supporto di tutta una variet` di diversi dia spositivi a caratteri. Di norma basta configurare solo l’opzione VGA text console, a meno di non avere necessit` del framebuffer (come avviene per le macchine che non a usano la VGA, come gli Apple). Sound Questa sezione contiene le opzioni relative al supporto delle schede sonore per Linux.

USB support Questa sezione contiene le opzioni per il supporto dei vari chipset del bus USB e dei vari dispositivi che si possono inserire su di esso. Bluetooth support Questa sezione contiene le opzioni per il supporto dei protocolli e dei dispositivi Bluetooth. Kernel hacking Questa sezione contiene le opzioni per la configurazione del supporto di alcune funzionalit` utilizzate principalmente dagli sviluppatori per il debug del kernel. Pu` essere a o utile abilitare l’opzione Magic SysRq key che permette l’uso di particolari combinazioni di tasti (a partire appunto da SysRq) per tentare un recupero in estremo dei dati in caso di crash del kernel. Cryptographic options Questa sezione contiene le opzioni per il supporto di vari algoritmi crittografici all’interno del kernel. In genere viene utilizzato per supportare filesystem cifrati e IPSEC. Library routines Questa sezione contiene le opzioni per la configurazioni di alcune librerie usate dal kernel. Una volta completata la configurazione, qualunque sia il metodo con cui la si ` effettuata, e viene salvato il nuovo .config. A questo punto la porcedura cambia a seconda che si stia utilizzando un kernel dalla serie 2.4.x o precedenti o un 2.6. Infatti con la serie 2.6.x anche la procedura di ricompilazione ` stata e profondamente modificata (e migliorata), pertanto quanto segue si applica soltanto ai kernel precedenti la serie 2.6.x. Se ` la prima volta che si compila il kernel, il primo passo ` creare le dipendenze con il e e comando make dep. Il comando esegue due compiti, il primo ` creare le dipendenze15 per e la compilazione, il secondo, se si ` abilitato il controllo della versione dei moduli, ` calcolare e e
cio` determinare quali file di dichiarazione (i .h) sono necessari per produrre i relativi file binari (i .o) e contenenti il codice di kernel e moduli.
15

5.1. LA GESTIONE DI KERNEL E MODULI

181

le informazioni per il versionamento nei simboli.16 Pertanto quando se non si ` abilitato il e versionamento ` necessario eseguire questo comando soltanto la prima volta che si effettua una e compilazione, altrimenti deve essere eseguito ogni volta che si cambia la configurazione, in quanto l’informazione sulla versione dei simboli dipende da questa. Il passo successivo ` normalmente quello di compilare il kernel, sui normali PC questo si fa con e il comando make bzImage, che crea l’omonima immagine compressa del kernel nella directory arch/i386/boot/; su altre architetture si usa in genere make vmlinux che crea una immagine non compressa nel file omonimo nella directory corrente. Un altro bersaglio possibile ` make e zImage, che crea una immagine compressa, valido anche in per altre architetture. Questo era il bersaglio originale per la creazione delle immagini del kernel, e pu` essere ancora o usato fintanto che il kernel ` di dimensione inferiore a 512kb. Se la dimensione ` superiore occorre e e invece usare make bzImage, non tanto, come qualcuno ancora ritiene, perch´ cos` l’immagine e ı viene compressa di pi`,17 quanto perch´ nel primo caso il kernel viene caricato nella cosiddetta u e low memory (cio` sotto i primi 640kiB) e viene utilizzato un meccanismo d’avvio diverso, mentre e nel secondo caso viene caricato sopra 1MiB. Al giorno d’oggi l’unica ragione per usare zImage ` quella della compatibilit` con alcune e a vecchie versioni di LILO ed alcuni vecchi BIOS che non supportano la procedura di avvio di bzImage, che non risente del limite di 512k nella dimensione, ed ` anche pi` veloce. Questo e u ovviamente vale solo per l’architettura PC, se si usano altre architetture ci possono essere altri bersagli o pu` non essere necessario l’uso di un kernel compresso (` il caso dell’architettura PPC o e dei Mac).
Target config oldconfig menuconfig xconfig dep depend zImage bzImage vmlinux modules modules_install clean mrproper distclean Significato interfaccia di configurazione a linea di comando. interfaccia di configurazione a linea di comando, che riutilizza i valori precedentemente immessi. interfaccia di configurazione a grafica testuale, basata sulle librerie ncurses. interfaccia di configurazione grafica. crea le dipendenze per la compilazione e le informazioni per il versionamento dei moduli. identico a dep. crea una immagine compressa del kernel (valida su tutte le architetture). crea una immagine compressa del kernel (su architettura PC) con una diversa procedura di avvio. crea una immagine non compressa del kernel. compila i moduli. installa i moduli nella relativa directory. cancella tutti i file oggetto (i .o) presenti prodotti da una predente compilazione. oltre a quanto esegue clean, cancella anche le informazioni sulle dipendenze. oltre a quanto esegue mrproper e cancella ulteriori file prodotti cercando di riportare l’albero dei sorgenti identico allo stato immediatamente dopo la scompattazione.

Tabella 5.1: Principali target del comando make per la compilazione del kernel fino alla versione 2.4.x.

Una volta compilata l’immagine del kernel il passo successivo `, se li si sono abilitati, passare e
si chiamano cos` i nomi delle funzioni che vengono dichiarate all’interno di un modulo, ma possono essere ı usati da altri; per far questo si dice che il simbolo deve essere esportato, il versionamento funziona aggiungendo al nome di ciascun simbolo un hash unico che impedisce di chiamare da un kernel diverso le suddette funzioni. 17 la compressione ` identica nei due casi e viene sempre effettuata con gzip, nonostante il nome bzImage possa e trarre in inganno, bzip2 non viene mai usato.
16

182

CAPITOLO 5. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA

alla compilazione dei moduli. Questo viene fatto con il comando make modules. La compilazione del kernel (e dei moduli) ` in genere un processo piuttosto lungo e che e utilizza pesantemente le risorse (memoria e CPU) della macchina. Pertanto viene spesso anche usato come test di efficienza.18 Il procedimento pu` essere velocizzato usando l’opzione -j del o comando make che consente di parallelizzare la compilazione. Questa ` una funzionalit` del e a tutto generale di make19 che consente di specificare come parametro dell’opzione un numero di processi da eseguire in parallelo,20 ciascuno dei quali compiler` parti indipendenti,21 cos` da a ı avere in generale sempre qualche processo in compilazione anche quando gli altri sono bloccati sull’I/O. Una volta eseguita la compilazione i passi successivi riguardano l’installazione; il primo passo ` installare i moduli, questo viene fatto usando un ulteriore target, con il comando make e modules_install. I moduli vengono sempre installati sotto /lib/modules, in una directory diversa per ciascuna versione del kernel, con lo stesso nome della versione del kernel (cos` come ı definita nel Makefile); cos` nel caso si installino i moduli del kernel 2.4.24 i moduli e tutti i ı relativi file saranno installati in /lib/modules/2.4.24/. I passi successivi sono l’installazione della nuova immagine del kernel e di file relativi. Per questo vengono anche forniti alcuni target per make, ma in genere ` preferibile eseguire l’operae zione manualmente, anche perch´ in questo caso le operazioni sono indipendenti dal bootloader e che si intende usare. Come spiegato in sez. 1.2.3 i file necessari all’avvio del sistema sono mantenuti in /boot, pertanto ` qui che deve essere copiata l’immagine del kernel, che nella maggior parte dei casi ` e e arch/i386.boot/bzImage; la convezione ` chiamare il file con il nome vmlinuz-versione, dove e la versione ` quella impostata con il Makefile. In genere ` utile anche copiare il file System.map, e e questo contiene le informazioni che permettono di identificare per nome (e non tramite l’indirizzo in memoria) le varie routine del kernel, la cosiddetta mappa dei simboli.22 Il contenuto di questo file ` utilizzato dal processo interno al kernel che invia al servizio del e syslog gli eventuali errori riscontrati nell’esecuzione del kernel; questi contengono degli indirizzi binari, ed il file viene usato per poter ottenere i nomi delle funzioni coinvolte invece dei loro indirizzi.23 La sua assenza perci` non comporta problemi di funzionamento del sistema, ma solo o una maggiore difficolt` per chi dovr` andare ad analizzare gli errori. a a Lo stesso file ` utilizzato anche in sede di installazione dei moduli quando vengono calcolate e le dipendenze di un modulo da un altro, ed il comando depmod (che vedremo a breve) dar` a degli errori in caso di sua mancanza o di non corrispondenza con il kernel attivo. Come per l’immagine del kernel questo viene di norma copiato su /boot appendendo un “-” e la versione; questo fa si che ogni kernel sia in grado di trovare ed utilizzare la sua mappa. Infine ` buona norma, tutte le volte che si installa un nuovo kernel, salvare anche le opzioni e di configurazione con cui lo si ` prodotto, questo significa copiare anche il file .config, di norma e questo si fa (ad esempio ` la scelta di Debian) copiandolo sempre sotto /boot, con il nome e config-versione.
18 ad esempio pu` facilmente causare il surriscaldamento della CPU, per cui viene utilizzato spesso per verificare o se un overclocking ` andato a buon fine. e 19 in realt` la funzionalit` ` della versione GNU di make, non ` detto la si ritrovi su altre versioni. a ae e 20 la cosa ` particolarmente efficiente su macchine multiprocessore. e 21 questo ` possibile sfruttando appunto le informazioni sulle dipendenze usate da make per affidare a processi e diversi la compilazioni di sorgenti indipendenti. 22 ` in questo file cio` che viene mantenuto l’elenco completo dei nomi delle funzioni esportate (cio` rese visibili e e e anche alle altre funzioni, cos` che queste possano chiamarle) all’interno del kernel, sia quelle presenti nell’immagine ı di avvio che quelle presenti nei moduli. 23 la funzionalit` di per s´ non ` essenziale, ma senza questa informazione diventa molto complesso per chi svia e e luppa il kernel capire dove si ` verificato l’errore, ed anche pi` difficile per voi chiedere aiuto o cercare informazioni e u relativamente all’errore stesso.

5.1. LA GESTIONE DI KERNEL E MODULI

183

Ricapitolando, l’insieme dei vari passi per ottenere un nuovo kernel ed installare tutti i file relativi, ` il seguente: e
make config make dep make -j 3 bzImage make -j 3 modules make modules_install cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.24-my cp System.map /boot/System.map-2.4.24-my cp .config /boot/config-2.4.24-my

dopo di che occorrer` configurare il proprio bootloader (vedi sez. 5.3) per l’uso del nuovo kernel. a

5.1.4

La gestione dei moduli

Come accennato nella sezione precedente una delle caratteristiche pi` significative del kernel u Linux ` la modularit`, che permette, tutte le volte che si richiede una funzionalit` mancante, di e a a tentare, prima di restituire un errore, il caricamento del modulo che la provvede. Come abbiamo visto questo comporta la configurazione del relativo supporto nel kernel e la compilazione come moduli delle varie funzionalit` che si vogliono utilizzare in questo modo; inoltre occorre a anche l’installazione di una serie di programmi in user space che permettono di gestire questa funzionalit`: il pacchetto modutils. a Nelle vecchie versioni del kernel la gestione dei moduli era fatta attraverso un apposito demone, kerneld, che riceveva le richieste dal kernel ed eseguiva il caricamento dei moduli. A partire dalla serie 2.4.x il meccanismo ` stato realizzato con un apposito sottosistema del kernel, e detto kmod. Il meccanismo si basa una apposita funzione interna al kernel24 che prende come parametro una stringa indicante il modulo che si vuole caricare (ma con questa si possono anche richiedere, come vedremo fra poco, funzionalit` generiche) e crea un processo temporaneo interno al kernel a che consente di invocare un apposito programma in user space il quale si incarica di tutte le operazioni necessarie al caricamento del modulo.25 Questo ` di norma modprobe (che esaminee remo in dettaglio a breve) ma si pu` specificare un qualunque altro programma sia attraverso o l’interfaccia del sysctl che scrivendolo direttamente in /proc/sys/kernel/modprobe. Il programma fondamentale per l’uso dei moduli ` insmod, che si incarica di caricare un e modulo all’interno del kernel, leggendolo dal disco, effettuando la risoluzione dei simboli, e collegandolo al codice del kernel. Il comando prende come parametro il nome del modulo, e per trovare il file il comando cerca il corrispondente file oggetto (cio` nome.o) sotto la directory e /lib/modules/‘uname -r‘,26 a meno che non si sia usata la variabile di ambiente MODPATH o una diversa opzione nel file di configurazione /etc/modules.conf per indicare una directory diversa. Se il modulo li prevede possono essere ulteriormente specificati dei parametri nella forma parametro=valore dove il parametro dipende dal modulo (la lista dei parametri disponibili per ciascun modulo si pu` ottenere tramite il comando modinfo), ed il valore pu` essere una stringa o o o un numero intero, quest’ultimo specificabile sia in forma decimale (17), che ottale (021), che esadecimale (0x11).
la funzione ` request_module, inizialmente oltre a questa kmod era un processo interno al kernel che girava in e permanenza, poi per` l’interfaccia ` stata semplificata in modo da usare solo questa funzione e creare il processo o e su richiesta. 25 data la complessit` delle operazioni non ` possibile eseguire un compito del genere in kernel space, mentre a e usando un programma in user space si possono avere a disposizione tutte le funzionalit` del sistema. a 26 si ` indicata la directory con questa notazione in quanto uname -r restituisce appunto la stringa con il nome e della versione del kernel, ed ` proprio con tale nome che vengono cercati i moduli. e
24

184

CAPITOLO 5. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA

Si tenga presente che insmod consente di inserire nel kernel solo un modulo alla volta, e per farlo ha bisogno di risolvere tutti i simboli necessari al modulo stesso, se alcuni di questi non sono presenti nel kernel, ma in altri moduli, il comando fallir` con un errore di “unresolved a symbol”. Come norma di sicurezza il comando non carica i moduli se i relativi file non appartengono all’amministratore, onde evitare che il contenuto di un modulo possa essere sovrascritto in caso di compromissione dell’utente cui appartiene, con la conseguente possibilit` di far eseguire a direttamente al kernel il codice che si vuole; questo comportamento pu` essere disabilitato con o l’opzione -r (ad uso principalmente degli sviluppatori). Inoltre insmod di norma controlla che la versione del kernel corrente e quella del modulo combacino, in questo modo si evita di caricare moduli che appartengano a kernel diversi; anche questo comportamento pu` essere disabilitato con l’opzione -f. Si tenga presente per` che in o o questo caso viene evitato soltanto il controllo sulla versione del kernel, il controllo sull’uso dei nomi dei simboli non pu` essere evitato, questo significa che se si sono compilati i moduli con il o supporto per il versionamento (che crea dei nomi di simboli contenenti una checksum) non sar` a comunque possibile utilizzarli. Per l’elenco completo di tutte le opzioni (alcune sono comunque obsolete, facendo riferimento al vecchi kerneld) con le relative spiegazioni dettagliate si pu` consultare al solito la pagina di o manuale, accessibile con man insmod; le principali opzioni si sono comunque riportate in tab. 5.2 con una breve spiegazione.
Opzione -f -L -h -n -r -v -k Significato Evita il controllo della corrispondenza fra versione del kernel e versione del modulo. Usa il file locking per prevenire tentativi simultanei di caricare lo stesso modulo. Stampa un sommario del comando e relative opzioni. Esegue tutta la procedura eccettuato il caricamento finale del modulo. Disabilita la condizione che il modulo da caricare sia di propriet` di root. a Abilita la stampa di un maggior numero di informazioni. imposta il flag di auto-clean per il modulo, che viene controllato da kerneld per rimuovere i moduli non pi` u in uso.

Tabella 5.2: Principali opzioni del comando insmod.

Come accennato insmod consente di inserire un modulo solo quando tutti i simboli di cui questo ha bisogno possono essere referenziati; questo comporta che se alcuni di questi sono definiti da un altro modulo, si avr` un problema di dipendenze. Per ovviare a questo problema a c’` un secondo comando, modprobe, che permette di risolvere anche tutte le dipendenze, trovare e quali sono gli altri moduli che servono per poterne utilizzare uno, e caricare preventivamente anche questi. Il meccanismo con cui modprobe ` in grado di risolvere le dipendenze si basa sul contenuto e del file modules.dep che si trova nella directory in cui sono installati i moduli. Questo viene di norma prodotto in fase di installazione degli stessi (tramite il comando depmod su cui torneremo pi` avanti) ed ha un formato del tipo: u /lib/modules/2.4.23/kernel/fs/vfat/vfat.o: /lib/modules/2.4.23/kernel/fs/fat/fat.o

che assomiglia a quello di un Makefile, dove per ciascun modulo viene indicato la lista degli altri da cui dipende. Come insmod anche modprobe effettua la ricerca dei moduli da caricare fra quelli compilati per il kernel corrente, nella directory /lib/modules/‘uname -r‘, dove questi vengono installati

5.1. LA GESTIONE DI KERNEL E MODULI

185

con make modules_install. In genere i moduli vengono poi suddivisi in ulteriori sottodirectory; questa suddivisione cambia a seconda della versione del kernel. Ad esempio a partire dal kernel 2.4 i moduli sono installati sotto la directory kernel, e all’interno di questa suddivisi per categorie: nel caso avremo fs per il supporto dei filesystem, driver per il supporto delle periferiche, net per il supporto dei protocolli di rete, crypto per gli algoritmi di crittografia. A loro volta i moduli installati sotto drivers sono suddivisi per tipologia di hardware. La potenza di modprobe ` che il comando, oltre alla risoluzione automatica delle dipendenze, e ` in grado anche di caricare pi` moduli in contemporanea e, sfruttando la suddivisione delle e u sottodirectory appena illustrata, anche uno fra tutti quelli che forniscono una certa funzionalit`. a Di norma infatti modprobe prevede come argomento il nome (o i nomi) dei moduli da caricare, (da indicare senza l’estensione .o finale), se invece si specifica l’opzione -t si indica di trattare il parametro successivo come un pattern di ricerca all’interno della directory dei moduli, in questo caso il comando tenter` di caricare in sequenza tutti i moduli il cui pathname corrisponde al a pattern, fermandosi al primo che viene caricato con successo. Questo consente ad esempio di chiedere il caricamento del driver di una scheda di rete (senza dover specificare quale) con un comando del tipo: modprobe -t drivers/net \* dato che in questo caso verranno provati tutti i moduli presenti in quella directory. Specificando anche l’opzione -a la stessa operazione verr` eseguita per tutti i moduli della a lista senza fermarsi al primo che ` stato caricato successo. Con l’opzione -l invece si avr` la lista e a dei moduli che corrispondono. Infine con l’opzione -r si pu` richiedere la rimozione dell’intera o pila di moduli caricati in dipendenza dal modulo specificato (sempre che nel frattempo non siano stati utilizzati). Come nel caso di insmod anche con modprobe si pu` specificare un parametro da passare al o modulo che viene caricato, il vantaggio di modprobe ` che attraverso l’uso del suo file di conie gurazione si possono passare dei valori di default senza doverli scrivere esplicitamente. Le altre opzioni del comando sono riportate in tab. 5.3, l’elenco completo ed una descrizione dettagliata delle stesse ` come sempre disponibile nella pagina di manuale, accessibile con man modprobe. e
Opzione -t -a -l -n -r -v -C -c Significato Usa una lista di moduli da caricare che corrispondono ad un pattern. Carica tutti i moduli della lista specificata con -t invece di fermarsi al primo. Stampa la lista dei moduli che corrispondono ad un certo pattern specificato con -t. Esegue tutta la procedura eccettuato il caricamento finale del modulo. Rimuove il modulo specificato e l’insieme di moduli da cui esso dipende, o esegue l’autoclean. Abilita la stampa di un maggior numero di informazioni. Permette di usare un differente file di configurazione (da passare come parametro per l’opzione). mostra i valori della configurazione corrente.

Tabella 5.3: Principali opzioni del comando modprobe.

Un comando essenziale per il funzionamento di modprobe ` depmod che crea il file modules.dep e ` che identifica le dipendenze fra i vari moduli passati come argomenti sulla riga di comando. E grazie a questo file che ` possibile determinare quali sono i moduli che contengono i simboli e necessari per poter poi caricare una altro modulo, cos` da poter effettuare il caricamento di tutti ı i moduli nella giusta sequenza. In genere il comando viene sempre invocato senza argomenti e

186

CAPITOLO 5. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA

con l’opzione -a,27 dato che in tal caso esegue il calcolo delle dipendenze con i moduli presenti in tutte le directory specificate in modules.conf. Con l’opzione -A il calcolo viene effettuato controllando preventivamente i tempi dei file, aggiornando modules.dep solo se qualcosa ` e cambiato. Una volta che i moduli non sono pi` utilizzati possono essere rimossi con il comando rmmod, u che prende come parametro il nome di un modulo. Ovviamente perch´ il comando abbia successo e il modulo in questione non deve essere in uso, n´ contenere simboli usati da un altro modulo e (cio` non devono esserci altri moduli che dipendano da esso). e Se per` si usa l’opzione -r il comando esegue una rimozione ricorsiva, cercando di rimuovere o anche i moduli che dipendono dal modulo indicato (diventa cos` possibile effettuare l’operazioı ne inversa di modprobe). L’uso dell’opzione -a attiva invece l’autoclean, marca cio` i moduli e inutilizzati come “ripulire” e rimuove i moduli che erano gi` stati marcati come tali. In questo a modo si pu` compiere l’operazione in due passi diminuendo la probabilit` di rimuovere moduli o a temporaneamente inutilizzati. Al solito l’elenco completo delle opzioni con le relative descrizioni ` disponibile nella pagina di manuale accessibile con man rmmod. e Il comportamento del comando modprobe, e con esso dell’intero meccanismo di caricamento automatico dei moduli, che viene realizzato attraverso questo programma, ` determinato dal file e 28 Qui si possono specificare una serie di direttive che di configurazione /etc/modules.conf. permettono di controllare sia le modalit` con cui vengono caricati i moduli, che le directory dove a effettuare le ricerche. Il formato del file prevede anche la presenza di direttive condizionali e l’uso di variabili, con sintassi analoga a quella della shell, ma queste funzionalit` non sono molto a usate. La direttiva principale che si trova nel file ` alias, che permette di associare un modulo ad e una certa funzionalit`. In realt` la direttiva consente semplicemente di associare un nome (un a a alias appunto) ad un modulo (indicato al solito con il nome del relativo file oggetto, ma senza estensione). In questo modo si pu` usare il nome dell’alias al posto di quello del modulo nella o invocazione di modprobe. La potenza reale della direttiva sta nel fatto che il kernel, quando necessita dell’uso di un certa funzionalit`, utilizza kmod per invocare modprobe, passandogli a come parametro un opportuno identificativo, e si capisce subito allora che basta usare detto identificativo come alias per un certo modulo per ottenere l’associazione di quest’ultimo alla relativa funzionalit`. a Il problema ` allora di sapere quali sono gli identificativi utilizzati dal kernel; un certo numero e di essi sono predefiniti,29 ed gi` associati all’unico modulo che pu` essere utilizzato. Esistono a o per` tutta una serie di funzionalit` che non sono necessariamente associate ad un unico modulo: o a il caso classico ` quello del controller SCSI (vedi sez. 5.4.2, identificato come scsi-hostadapter, e che deve essere fatto corrispondere al modulo specifico della scheda SCSI di cui si dispone, ad esempio se si ha una Adaptec si potr` usare una riga del tipo: a alias scsi-hostadapter aic7xxx Il problema ` che non esiste una lista di riferimento che indichi i nomi delle varie funzionalit`, e a per cui si possono dare solo indicazioni generali. Allora per quanto riguarda ethernet si possono associare le singole interfacce ad un certo modulo (relativo ad una certa scheda) usando il nome dell’interfaccia stessa. Per le schede sonore invece si pu` usare la sound-slot, per il controller o del bus USB (vedi sez. 5.4.4) usb-interface, ecc. Inoltre per le periferiche associate ad un file di dispositivo si pu` usare la notazione generica char-major-NN, o block-major-NN-MM o o direttamente il file di dispositivo stesso; cos` un estratto del file potrebbe essere: ı
nelle ultime versioni questa ` opzionale. e in alcuni sistemi pi` vecchi pu` essere usato invece il file /etc/conf.modules, che ` deprecato e non deve u o e essere pi` utilizzato. u 29 invocando modprobe -c specificando un file di configurazione vuoto (con -C) si pu` stampare la configurazione o di default.
28 27

6 il meccanismo di caricamento dei moduli ` stato completamente riscritto.*/ path[net]=/lib/modules/‘uname -r‘/net nella prima si indica semplicemente una directory. Una seconda direttiva ` option. fra parentesi quadre. Inoltre ci sono due parole chiave che si possono specificare al posto del modulo. anche se non viene caricato niente. This file should contain the names of kernel modules that are to be loaded at boot time. 187 sound-slot-0 dmasound_pmac char-major-14-3 dmasound_pmac /dev/dsp dmasound_pmac sound-service-0-0 i2c-keywest char-major-14-0 i2c-keywest /dev/mixer i2c-keywest eth0 sungem eth1 airport Si tenga presente infine che si possono tranquillamente creare alias facendo riferimento ad altri alias. e che quanto illustrato finora fa riferimento solo alle versioni e precedenti (per essere precisi fino al kernel 2. con null invece si fa si che la richiesta abbia comunque successo. Un possibile esempio di questo file `: e # # # # # /etc/modules: kernel modules to load at boot time. Alla direttiva si pu` apporre un add che fa si che i parametri specificati vengano aggiunti ad altri o eventualmente gi` presenti. che prende come primo argomento il nome di un modulo (o e di un alias) seguito dai parametri da passare al suddetto modulo quando viene caricato. le linee vuote o che iniziano per # vengono ignorate. a Infine la direttiva path permette di specificare le directory in cui eseguire la ricerca dei moduli. and everything on the line after them are ignored. Si tenga comunque presente che con il kernel 2. Comments begin with a #.. se si vuole che queste vengano mantenute si utilizzare la direttiva keep prima di specificare qualunque direttiva path. una etichetta che identifica una classe di moduli (se non specificata si assume il valore misc).conf. one per line. 5. e Un altro file utilizzato da Debian per la gestione dei moduli ` /etc/modules. questa ha due diverse forme possibili: path=/lib/modules/2. per e l’elenco completo e delle spiegazioni pi` dettagliate si pu` al solito fare riferimento alla pagina u o di manuale. mentre nella seconda si specifica anche. LA GESTIONE DI KERNEL E MODULI . con off si indica a modprobe di ignorare le richieste di caricare quel modulo. ogni linea deve contenere il nome di un modulo. quando ` stato introdotto il nuovo sistema).48.5. con relativa descrizione.4.0..1. alias alias alias alias alias alias . ` riportato in tab.. che contiene e la lista dei moduli che si vuole siano caricati all’avvio del sistema... . Il formato del file ` sempre e lo stesso. accessibile con man modules.. alias alias . Un elenco delle altre principali direttive. Se la direttiva non viene utilizzata vengono usate le directory predefinite che sono le seguenti: path[boot]=/lib/modules/boot path[toplevel]=/lib/modules/‘uname -r‘ path[toplevel]=/lib/modules/‘kernelversion‘ path[toplevel]=/lib/modules/default path[toplevel]=/lib/modules ma anche una singola occorrenza della direttiva path sovrascrive questi valori con quanto indicato.5.

per la descrizione completa si pu` fare riferimento alla relativa pagina di manuale. definisce un parametro opzionale da passare al modulo quando viene caricato.o description: "ATI Radeon" author: "Gareth Hughes.4. definisce un comando da eseguire prima di caricare il modulo specificato." license: "GPL and additional rights" parm: drm_opts string e come si vede questo modulo ha un parametro prm_opts il cui valore ` una stringa. definisce un nome da associare a un modulo. un esempio di questo comando `: e . la principale delle quali ` la lista dei parametri supportati dal modulo. Il comando e supporta una serie di opzioni che gli permettono di stampare solo alcune delle informazioni disponibili.188 CAPITOLO 5. o Infine il comando lsmod permette di ottenere la lista dei moduli caricati in memoria e tutte le informazioni ad essi relative.conf. definisce un comando da eseguire prima di rimuovere il modulo specificato. mantiene le directory predefinite per la ricerca dei moduli .23-ben1/kernel/drivers/char/drm/radeon. Per sapere quali sono si pu` usare il comando modinfo che o consente di esaminare il file oggetto del modulo ed estrarne una serie di informazioni. Tabella 5. il comando non prende opzioni (a parte le classiche -h e -V) n´ e argomenti.4: Principali direttive del file di configurazione modules. definisce un comando da usare al posto di rmmod per caricare il modulo specificato. definisce un comando da eseguire dopo aver rimosso il modulo specificato. Keith Whitwell. #ide-floppy auto # # I2C adapter drivers i2c-isa i2c-ali15x3 # I2C chip drivers w83781d eeprom Oltre ai comandi per il caricamento dei moduli. il pacchetto modutils contiene altri comandi di gestione. Abbiamo visto che molti moduli possono prendere dei parametri che consentono di specificarne il comportamento. definisce un comando da usare al posto di insmod per caricare il modulo specificato. definisce un comando da eseguire dopo aver caricato il modulo specificato. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Opzione path keep option alias pre-install install post-install pre-remove remove post-remove Significato definisce una directory dove cercare i moduli. others. Un esempio del comando ` il seguente: e e anarres:/home/piccardi# modinfo radeon filename: /lib/modules/2.

e per questo sono dispositivi a blocchi. delle dimensioni di 512 byte. Per questo ancora oggi si parla di geometria di un disco. lo spazio disponibile sui piatti magnetici di un disco viene suddiviso in blocchi elementari di dati. mentre la seconda le sue dimensioni.2 La gestione dei dischi e dei filesystem In questa sezione prenderemo in esame la gestione dei dischi a partire da alcune nozioni relative all’hardware. 5. da cui il nome head e la sigla H. mentre l’ultima colonna indica se il modulo ` e e inutilizzato o marcato per la rimozione (fra parentesi tonde) e quali altri moduli dipendono da lui (fra parentesi quadre). Le prime interfacce IDE separavano fisicamente le linee di indirizzamento che consentivano richiedere la lettura di un particolare settore all’interno del disco in tre gruppi. Tratteremo inoltre la gestione dei filesystem per quanto riguarda quelle tutte le operazioni (come creazione. lo stesso vale se o il modulo ha altri moduli che dipendono da lui. e a 5. LA GESTIONE DEI DISCHI E DEI FILESYSTEM 189 anarres:/home/piccardi# lsmod Module Size Used by Not tainted hid 23156 0 (unused) radeon 111132 1 agpgart 18012 3 ds 8284 1 yenta_socket 11936 1 dmasound_pmac 65408 1 (autoclean) dmasound_core 12832 1 (autoclean) [dmasound_pmac] soundcore 4184 3 (autoclean) [dmasound_core] pcmcia_core 44328 0 [ds yenta_socket] airport 3348 1 (autoclean) orinoco 38616 0 (autoclean) [airport] hermes 9088 0 (autoclean) [airport orinoco] usb-ohci 22848 0 (unused) usbcore 72628 1 [hid usb-ohci] La prima colonna indica il nome del modulo. da cui il nome cylinder e la sigla C.2. da cui il nome sector e la sigla S. Dal disco si pu` sempre o leggere un settore alla volta (e non un singolo byte).5. a .1 Alcune nozioni generali Prima di affrontare l’uso dei programmi per la gestione di dischi e filesystem occorre introdurre qualche concetto relativo al funzionamento fisico dei dischi rigidi. e quando se ne vuole identificare le dimensione si indica i rispettivi valori massimi di questi tre parametri (la terna chiamata CHS). questo viene fatto direttamente dal kernel (o dal BIOS) che dice all’interfaccia hardware di leggere un determinato settore fornendogli l’indirizzo dello stesso. Un modulo il cui conteggio di utilizzo non sia nullo non pu` essere rimosso. facendo riferimento ad un determinato piatto nel disco. a meno di non usare l’opzione -r di rmmod. riparazione e modifica dei parametri interni) che non sono direttamente connesse all’uso ordinario (montaggio e smontaggio). Un primo gruppo serviva per indirizzare le testine dei diversi piatti. e quindi la capacit` del disco.4. infine l’ultimo gruppo indicava come muoversi lungo la coordinata radiale. Il secondo gruppo serviva per muoversi lungo la coordinata angolare all’interno di un piatto. moltiplicando i quali si ottiene il numero totale dei settori. in sostanza vedendo il disco come un cilindro questo parametro indicava la coordinata in altezza lungo l’asse dello stesso. che ` gi` stato trattato in sez.2. chiamati settori.2. 1. La terza colonna indica quante volte ` usato il modulo. per passare al partizionamento ed ai relativi programmi. In genere.

a lungo considerato un limite irraggiungibile. 10 linee servivano per indicare il cilindro. pari a 504Mib. e u testina e settore. per cui non risente affatto delle limitazioni del BIOS. Resta il problema che alcuni sistemi operativi e vari programmi non sono in grado di utilizzare questa nuova interfaccia. che richiedeva. In genere questo viene fatto e per i dettagli sui registri e su tutte le varie limitazioni storicamente susseguitesi si pu` leggere il Large Disk o HOWTO. pari a circa 8. dato che il kernel ` in grado di accedere nativamente all’interfaccia IDE ed indirizzare direttamente l’accesso ai e singoli settori. ma pu` essere un problema quando nella prima partizione si ` installato Windows e o e questa ` troppo grossa.31 specificando semplicemente un e numero di settore che cresce linearmente da 0 al valore massimo. Il limite irraggiungibile ` stato per` raggiunto piuttosto presto.2) non pu` implementare un suo accesso indipendente. Tutto questo ` stato superato con l’introduzione del Linear Block Addessing. Questi venivano passati tramite il contenuto di alcuni registri del processore. l’accesso ad un settore veniva eseguito direttamente dall’hardware in maniera trasparente. per questo nei BIOS pi` recenti al posto della vecchia e u u INT13 pu` essere usata anche una “INT13 estesa” che utilizza direttamente il numero del settore o in forma lineare. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Il problema ` che nelle prime interfacce IDE c’era una separazione fisica delle linee che e indicavano questi indirizzi. ma che si pu` presentare ancora quando si e o mettono dischi nuovi su macchine molto vecchie.190 CAPITOLO 5.2. Il che significa o che se si mette il kernel in una zona del disco oltre il 1024-simo cilindro con dei BIOS che non supportano LBA. anche se poi il BIOS si doveva inventare una geometria per poter usare le sue routine di accesso. testina e settore. Anche il BIOS usava questa suddivisione nella routine di accesso al disco (la INT13). La corrispondenza diretta fra valori di head.4GiB. 5. 30 . il problema invece si pone per un bootloader come LILO che dovendo stare nei pochi byte a disposizione nel Master Boot Record (vedi sez. Questo per` comporta che la o vecchia interfaccia non ` pi` utilizzabile. LILO non sar` in grado di leggerlo. sector e cylinder e coordinate fisiche del settore indirizzato ` andata persa quasi subito. Ma per mantenere la compatibilit` con i a sistemi operativi che usavano il BIOS.2. da cui deriva il famoso problema di non poter accedere a dischi oltre il 1024simo cilindro che affligge i BIOS pi` vecchi. e 6 per i settori. come per i dischi SCSI. In tal caso si deve avere l’accortezza di mettere il kernel in una sezione di disco che sia entro il 1024-simo cilindro (cio` nella parte iniziale del disco). in cui anche e per i dischi IDE l’accesso ` eseguito. Dato che il parametro indicante la testina ` e di 8 bit. per un totale di 1024x16x63 settori.30 ed in particolare 10 bit erano utilizzati per indicare il cilindro. Questo ` un problema che in tutti a e i computer moderni ` abbondantemente superato. indipendentemente dalla geometria reale del disco. l’interfaccia di accesso di quest’ultimo ` rimasta invariae ta. 31 il protocollo SCSI non ha mai avuto problemi di geometria. ma a questo punto ci si e o ` trovati di fronte al limite non pi` superabile delle restrizioni sui valori massimi di cilindro. e per loro deve essere usata la vecchia interfaccia. dato che ha sempre previsto l’uso di un valore lineare per indicare il settore. In genere il problema della geometria non si pone assolutamente per Linux. 4 per le testine. non appena i dischi han cominciato a superare le dimene sioni massime previste dall’interfaccia IDE originale. e 5. una terna di valori indicanti appunto il numero di cilindro. Questo pu` voler dire la necessit` di e o a creare una partizione iniziale (di solito la si monta sotto /boot) su cui si mettono le immagini del kernel. ed i sistemi operativi e le vecchie versioni di LILO u che sono in grado di usare soltanto l’interfaccia originaria. la dimensione massima ottenibile con questa interfaccia ` di un totale di 1024x256x64 e settori. per accedere ad un certo settore.2 Il partizionamento Uno dei compiti di preparazione che occorre eseguire tutte le volte che si installa un nuovo disco ` quello di suddividerne lo spazio in opportune partizioni. 6 bit per indicare il settore ed 8 bit per la testina.

1. fdisk. dato che ` sempre l` che viene installato e ı il bootloader per l’avvio del sistema. (ad esempio la seconda) tenendo presente per` che si ` utilizzata o e una partizione primaria per indicare le partizioni estese. PowerPC Apple.4 le partizioni vengono indicate nel file di dispositivo che si riferisce ad un disco con il relativo numero. queste vengono memorizzate nel primo settore di ciascun disco. sulla e sua base sono stati creati anche altri programmi (ad esempio il diskdrake usato dall’installatore di Mandrake che ha una interfaccia utente grafica ed ` pertanto pi` facile da usare).2. 5. Una parte di questo settore costituisce la cosiddetta tabella delle partizioni. Qui vengono memorizzate settore di inizio e di fine delle partizioni. cos` ad esempio /dev/hda2 ` la seconda partizione ı e primaria del primo disco del primo canale IDE. le partizioni primarie successive (nel caso la terza e la quarta) non saranno pi` utilizzabili. Un esempio del risultato del comando ` il seguente: e 32 su un PC. e dato lo spazio limitato questa non pu` contenerne o pi` di quattro. u Il comando che tradizionalmente viene utilizzato per ripartizionare un disco32 ` fdisk.2) quando il numero dei cilindri ` e maggiore di 1024. testine e settori possono essere modificati anche all’interno del comando).2.3. e avvisa di possibili problemi (vedi sez. o se si vuole effettuare l’operazione manualmente per avere un maggior controllo. Il comando prende come argomento il file di dispositivo che indica un disco (ad esempio /dev/hdc per un disco IDE o /dev/sda per un disco SCSI). Partizioni primarie e secondarie possono coesistere. Per superare questa limitazione e dell’architettura PC sono state introdotte le cosiddette partizioni logiche o estese. Quando si installa un u e nuovo disco. il Master Boot Record. o Alpha) non hanno questo limite. l’unica opzione che ha senso usare ` -l che si limita a stampare la tabella delle partizioni presente. ma si pu` usare una o partizione primaria qualunque. In tal caso quello che si fa ` di indicare nella tabella delle partizioni sull’MBR l’utilizzo di una partizione e estesa e poi utilizzare il settore di inizio di quest’ultima per installarvi una ulteriore tabella delle partizioni. LA GESTIONE DEI DISCHI E DEI FILESYSTEM 191 all’installazione del sistema attraverso il programma di installazione. Le altre opzioni servono e per specificare le caratteristiche del disco e non servono pi` in quanto i valori sono determinati u automaticamente (e per quanto riguarda numero di cilindri. non tratteremo qui le altre architettura. Quando il comando viene lanciato stampa un messaggio di benvenuto. Le partizioni primarie sono sempre numerate da 1 a 4. mentre /dev/hdb5 ` la prima partizione logica e del secondo disco del primo canale IDE. occorre utilizzare un apposito programma. quello che viene chiamato. I u Architetture meno obsolete (come SPARC. u Come accennato in sez. che in tutte le distribuzioni pi` recenti ` in grado di eseguire il compito in maniera semi-automatica. che hanno programmi diversi. che vengono chiamate logiche o secondarie.5. nei termini in cui si usa una partizione primaria per indicare la tabella delle partizioni secondarie. in modo da poterne utilizzare di altre. . mentre quelle logiche iniziano dal 5. In genere questo lo si fa creando tre partizioni primarie ed usando la quarta per le partizioni secondarie. ma noi e u faremo riferimento solo a questo e alla variante cfdisk. in numero pi` elevato. Prima di entrare nel dettaglio del funzionamento di fdisk e derivati ` comunque oppore tuno dare alcuni cenni sui criteri base del partizionamento. ed il numero di partizioni ` sostanzialmente arbitrario. Anzitutto occorre ricordare che nell’architettura del PC esiste (a causa delle limitazioni storiche) un limite massimo al numero di partizioni fisiche effettive (dette anche partizioni primarie).

g. a Una volta scelta la partizione il programma chieder` il settore di partenza (proponendo come a default il primo che risulta libero) e la dimensione: quest’ultima pu` essere specificata in varie o unit` di misura o direttamente con il settore finale (il comando propone come default l’ultimo a settore del disco). ottenendo: ı Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition’s system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help): ed allora con p potremo stampare la tabella delle partizioni corrente: Command (m for help): p Disk /dev/sda: 255 heads. old versions of LILO) 2) booting and partitioning software from other OSs (e. OS/2 FDISK) Command (m for help): dove dopo la stampa iniziale si pone in attesa dei comandi che vengono specificati con le relative lettere. Il comando t permette di impostare il valore numerico che identifica il tipo di partizione. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA monk:/root# fdisk /dev/sda The number of cylinders for this disk is set to 2213. a A questo punto si pu` usare d per cancellare una partizione (ne chieder` il numero). ed in genere coincide e e con quanto visto dal BIOS. and could in certain setups cause problems with: 1) software that runs at boot time (e.g. Si noti anche come viene riportata una geometria per il disco. DOS FDISK. ma ` possibile cambiarla (anche se inutile) con una dei comandi delle e funzionalit` avanzate. 63 sectors. There is nothing wrong with that. questo viene in genere utilizzato per indicare che tipo di filesystem sar` contenuti nella stessa.. Cos` se vogliamo una lista dei comandi possibili possiamo premere m. di cui una normale.192 CAPITOLO 5. una per la swap. ed n per o a crearne una nuova. 2213 cylinders Units = cylinders of 16065 * 512 bytes Device Boot /dev/sda1 /dev/sda2 Start 1 2177 End 2176 2213 Blocks 17478688+ 297202+ Id 83 82 System Linux Linux swap che mostra due partizioni. nel qual caso prima chieder` se primaria o secondaria e poi il relativo numero. a . but this is larger than 1024. questa ` quella che ` vista dal kernel..

se se ne modificano le dimensioni o la posizione le informazioni del filesystem non saranno pi` utilizzabili. Qualunque modifica si effettui sulla tabella delle partizioni non sar` mai registrata effeta tivamente su disco fintanto che non si d` il comando w. anche se l’operazione resta complessa e delicata. u Per questo in genere occorre pianificare bene le dimensioni delle partizioni fin dall’inizio. parted (per il quale rimandiamo alla relativa documentazione.2.5). il quale comunque chieder` conferma a a avvertendo che si possono perdere tutti i dati presenti sul disco. I filesystem e Windows invece usano vari codici diversi a seconda del tipo di filesystem. cio` decidere quante partizioni fare e come assegnarle. In fig.2).3: Schermata del comando cfdisk. Per questo nell’installazione occorre normalmente decidere una strategia di partizionamento. 6. in quanto se si cambia la tabella delle partizioni cancellando o modificando una di quelle presenti il relativo contenuto andr` perso. 5. che pu` compiee o ` re solo l’amministratore. per questo occorre tenere ben presenti le e al riavvio successivo. dalla quale ` poi possibile dare tutti i comandi.5. che per` non salva le modifiche effettuate.1 e 8e per quelle usate per il Logical Volume Manager (vedi sez. Esiste comunque un comando molto utile. per questo se si ripartizione un disco in uso occorre riavviare il sistema. disponibile sia nella pagina di manuale.33 a Occorre quindi stare molto attenti ed evitare di salvare le modifiche fintanto che non si ` assolue tamente sicuri di quanto si ` fatto. o Un comando alternativo a fdisk ` cfdisk. e Figura 5. Altri valori usati da Linux sono fd per indicare le partizioni usate per il RAID software (vedi sez. Il valore 82 ` invece e usato per indicare una partizione destinata all’uso come swap (vedi sez. Si esce da fdisk con il comando q. che nelle FAQ distribuite con il pacchetto). una versione pi` amichevole che permette l’uso e u una interfaccia testuale semigrafica ed interattiva in cui si possono eseguire le varie operazioni spostandosi su comandi e partizioni con l’uso delle frecce. in quanto il kernel legge la tabella delle partizioni all’avvio e la mantiene in memoria. che permette di ridimensionare un filesystem e restringere le relative partizioni. Ovviamente il partizionamento di un disco ` una operazione privilegiata. E anche un compito delicato. 6. Infatti ogni filesystem viene creato per stare esattamente nelle e dimensioni di una partizione. 33 .3 ` mostrata la schermata di e cfdisk. perch´ modificarle in un secondo tempo comporta quasi sempre la necessit` di dover fare un e a backup dei contenuti. 5.2. LA GESTIONE DEI DISCHI E DEI FILESYSTEM 193 Per i filesystem di Linux il valore ` 83 (in esadecimale) e vale per tutti i filesystem.

quando si installa il sistema per` (o quando si aggiunge un disco) i filesystem o devono essere creati. /var e /usr (ed eventualmente /opt) non ` e che resti molto altro. Una delle strategie pi` semplici ` quella di creare una partizione unica e mettere tutto quanto su di essa.3 La creazione di un filesystem Abbiamo visto in sez.2. Questo u e schema ha il vantaggio di non doversi preoccupare del dimensionamento delle altre partizioni n´ e del rischio di esaurire lo spazio su una mentre le altre sono vuote. 1. Inoltre se si hanno pi` a u dischi non ` ovviamente possibile mettere tutto su una sola partizione. che non possono essere pi` tenute u u sotto una directory unica.3. per evitare di inserire nel backup cose che non c’entrano nulla. e per quanto grandi si possano fare le partizioni. 34 . Inoltre una volta che si sono spostate /home.194 CAPITOLO 5. complicandone la gestione. In questo modo se per qualche motivi si danneggiano file essenziali per il sistema.3. Come si vede l’uso delle partizioni comporta una serie di potenziali problemi di gestione dovuti alla necessit` di pianificare adeguatamente la gestione dello spazio disco. ma questo non comporta che poi si possa utilizzarlo. che ` quella da usare per i volumi e fisici che verranno usati con LVM come componenti di un volume logico. operazione comunemente detta formattazione. a partire dai kernel della serie 2. si noti come in fig. ed un’altra per /var. si avr` sempre a disposizione l’altra partizione con un sistema a pienamente funzionale. se l’occupazione cresce oltre la capacit` del pi` grande dei dischi che si hanno.3 compaia appunto una partizione di tipo Linux LVM. 5. 1. con il comando fdformat. 5.2. occorrer` anche creare a il filesystem: in Linux infatti la formattazione fisica del dispositivo e la creazione del filesystem. Infine se si opera spostando tutto il possibile su partizioni separate si avr` una riduzione del a contenuto della radice che consente di attuare una strategia di ridondanza in cui si tengono due copie della stessa su due partizioni diverse.2) pu` essere necessario creare o una partizione separata per /boot. Se poi si vuole separare anche quanto strettamente necessario all’avvio dal resto del sistema si pu` mettere anche /usr su una partizione separata. che non ` il massimo dell’eleganza. e Per questo di solito si preferisce creare almeno una partizione su cui montare /home per i dati degli utenti. posta archiviata e tutto quanto in genere si tiene sotto /var) verr` cancellato. in modo da strutturare lo spazio disponibile (che sia una partizione o un dispositivo fisico o virtuale) per l’uso. Ha per` lo svantaggio che o se si deve reinstallare il sistema i dati degli utenti e quelli di sistema (come pagine web. non si risolver` mai il a problema di esaurire lo spazio in quelle con la maggior parte dei contenuti. per risolverli a alla radice ` disponibile. e e pu` comportare una serie di problemi per i programmi di backup che di norma vengono usati o imponendo di archiviare solo i file presenti sul filesystem corrente. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA indicazioni su contenuto delle varie directory di sistema illustrate in sez. anzitutto u si pu` sprecare inutilmente spazio disco quando una partizione si riempie mentre le altre sono o vuote. come quella che di solito si fa sui dischetti. In genere per gli hard disk questa operazione non ` pi` necessaria dato che viene eseguita e u direttamente dal fabbricante una volta per tutte. 6.x il sistema del Logical Volume e Manager (che tratteremo in sez. Si deve invece eseguirla per i floppy. e a questo punto si ha solo l’alternativa di ripartizionare o di spostare pezzi da una partizione all’altra e farvi riferimento con dei link simbolici. Usare varie partizioni (e pi` dischi) ha comunque una serie di controindicazioni.4. Infine in o certi casi (per il solito problema del 1024 cilindro visto in sez. Si tenga presente che questa ` una operazione diversa dalla formattazione fisica del dispositivo e che divide lo spazio sul disco in tracce e settori. Per questo spesso ad esempio si ` a u e costretti ad usare pi` dischi per le home directory degli utenti. 5.2.2) che permette di unire partizioni34 e dischi fisici diversi in dei volumi logici all’interno dei quali creare i relativi filesystem.4 come si pu` rendere disponibile il contenuto di un filesystem nell’alo bero delle directory. ma andranno suddivise su path diversi.

vengono sempre tenute separate. anche nelle sezioni seguenti. i vari comandi specifici della gestione di questo filesystem (che valgono anche per ext3). mkfs. Forza successivo controllo del filesystem. In generale i a programmi di formattazione sono forniti insieme agli altri programmi di supporto per il filesystem (come quelli per il controllo di consistenza) e possono avere un nome specifico (ad esempio per Reiser FS il programma si chiama mkreiserfs) che pu` essere invocato direttamente. mentre il tipo di filesystem che si vuole creare si specifica con l’opzione -t. e viene gestito semplicemente in maniera diversa a livello del kernel. Cos` ad esempio se si vuole ı formattare un filesystem msdos con mkfs -t msdos verr` invocato mkfs.type. e Bench´ oggi esistano molteplici alternative (Reiser. a partire da quello usato per la creazione. Le altre opzioni dipendono dal filesystem scelto. un comando specifico. non pu` essere inferiore alle dimensioni di un blocco. Associa una etichetta al filesystem (che pu` essere utilizzata per farvi o riferimento al posto del file di dispositivo) . Specifica un file di dispositivo per il giornale. LA GESTIONE DEI DISCHI E DEI FILESYSTEM Filesystem reiserfs Opzione -b N -s N -j file -h hash msdos -F N -n name -c vfat ext2 -b N -F -i N -j -j -m N -c -L ext3 Descrizione mkreiserfs Specifica la dimensione dei blocchi. Per questo motivo esamineremo.5. 195 Tabella 5. Un elenco delle principali opzioni disponibili con i principali filesystem ` riportato in tab. e possono essere trovate nella relativa pagina di manuale. Specifica la dimensione del giornale. Specifica un algoritmo di hashing per la ricerca veloce dei file all’interno delle directory. In realt` il comando ` solo un front-end. 5. Permette di specificare i parametri per la gestione del file di giornale. mkfs. che mantiene una identica struttura dei dati e su disco.2. questo prende come parametro il file di dispositivo su cui si vuole creare il filesystem. per ciascun tipo di filesystem.type. Esegue il controllo del dispositivo per eventuali settori difettosi. Specifica un nome per il volume (11 caratteri). che a e chiama.ext2. Esegue il controllo del dispositivo per eventuali settori difettosi.msdos.ext3). o Crea il giornale per il filesystem (equivalente ad invocare il comando come mkfs. accessibile al solito con man mkfs. il filesystem pi` usato con e u Linux ` ext2. Specifica la percentuale di spazio disco riservata per l’amministratore che gli utenti normali non possono usare.vfat Identiche a mkfs.ext3 Identiche a mkfs. mkfs. JFS. mkfs.ext2 Specifica la dimensione dei blocchi. un cui esempio `: e .5: Le principali opzioni per i comandi di creazione dei filesystem. ma perch´ o e la forma generica mkfs -t type funzioni deve essere presente il corrispondente mkfs.5.msdos. La creazione di un filesystem su un dispositivo si esegue con il comando mkfs. o il suo fratello maggiore ext3. XFS). mke2fs. che sono comunque delle operazioni operazioni distinte nonostante alcuni sistemi operativi le eseguano insieme.msdos Specifica la dimensione della FAT (File Allocation Table). Specifica ogni quanti byte di spazio disco deve essere creato un inode.

Un altro parametro importante ` quello del numero di inode da creare (si ricordi che. Use tune2fs -c or -i to override. Con blocco si indica in genere l’unit` minima di spazio disco che viene a allocata per inserirvi i dati di un file.39 Il comando permette. Una delle principali ` la dimensione dei blocchi in cui lo spazio disco viene suddiviso.35-WIP (07-Dec-2003) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 25064 inodes. 100000 blocks 5000 blocks (5. 37 per alcuni filesystem pi` evoluti. 24577. 2048 o 4096. Questi di norma vengono mantenuti e in una sezione apposita del filesystem.2. per una spiegazione pi` completa di pu` leggere il file filesystem/ext2. u 36 35 . 73729 Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 37 mounts or 180 days. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA anarres:/home/piccardi# mke2fs /dev/hda3 mke2fs 1. con l’uso dell’opzione -i di impostare ogni quanti byte di spazio disco deve essere creato un inode. anche se ` possibile recuperarla in un secondo momento con dumpe2fs. in genere37 ogni file consuma almeno un blocco. Qualora si ometta questo parametro il suo valore viene stabilito con una valutazione euristica sulla base della dimensione del disco e del tipo di uso che si vuole fare del filesystem.38 Qualora si usi un valore negativo questo viene preso come limite inferiore per la dimensione di un blocco. Pertanto ` bene annotarsi la posizione delle varie e copie.2. e le dimensioni dei file sono dei multipli interi di questo valore. le cui dimensioni vengono determinate in sede di creazione del filesystem. Se usato senza specificare altro che il dispositivo35 da formattare il comando si limita a creare ` il filesystem. come e detto in sez. 1. 40961. E particolarmente significativa quella relativa a dove sono stati posti i vari backup del superblock 36 questo infatti ` e un blocco speciale che contiene tutte le informazioni relative alla configurazione del filesystem. largefile e largefile4 e assegna o un diverso rapporto fra numero di inode e spazio disco disponibile. che prende i tre valori news. Si deve dare cio` la valutazione della dimensione e anche se volendo si pu` anche usare un file normale che potr` poi essere montato in loopback. in breve per` si pu` dire che un filesystem ext2 divide lo spazio disco in blocchi a o o che a loro volta vengono raggruppati nei group blocks. 38 questo pu` essere indicato tramite l’opzione -T. ogni file ` sempre associato ad un inode). e Al di l` della invocazione diretta appena mostrata il comando prevede numerose opzioni che a permettono di impostare tutta una serie di caratteristiche del filesystem che si va a creare. La perdita del superblock causerebbe la perdita completa e del filesystem per cui ne vengono mantenute varie copie in modo che in caso di distruzione o corruzione si possa usare una delle copie. o a la spiegazione esatta del significato dei vari parametri come quelli relativi a group blocks e fragments va al di l` di quanto sia possibile fare qui. come Reiser.txt distribuito nella documentazione allegata ai sorgenti del u o kernel. ed ` essenziale per poterlo montare. che contengono al loro interno le tabelle degli inode e lo spazio per i blocchi di dati e le informazioni per evitare la frammentazione dello spazio disco. 57345. whichever comes first. Valori tipici sono 1024. esistono dei meccanismi automatici che permettono di mettere u il contenuto di diversi file di piccole dimensioni in un solo blocco. da specificare e tramite l’opzione -b.00%) reserved for the super user First data block=1 13 block groups 8192 blocks per group.196 CAPITOLO 5. stampando tutta una serie di informazioni ad esso relative. 39 alcuni filesystem pi` evoluti permettono di cambiare questo parametro anche in un secondo tempo. 8192 fragments per group 1928 inodes per group Superblock backups stored on blocks: 8193.

si possono cio` esaurire sia i blocchi liberi che gli inode disponibili (anche se il e primo caso ` di gran lunga quello pi` comune). con relativa spiegazione. con ext2 ed ext3. Per questo motivo per una gestione ottimale del disco di solito occorre una scelta opportuna sia delle dimensioni dei blocchi che del rapporto fra blocchi disponibili e inode. un elenco dei parametri specificabili con -J ` illustrato in e tab. Nel caso si voglia creare un filesystem di tipo ext3. Parametro dir_index filetype has_journal journal_dev sparse_super Significato usa una struttura ad alberi ed hash per la gestione del contenuto delle directory.7. Deve essere un minimo di 1024 blocchi. richiede che sul dispositivo indicato sia creato un giornale invece di un filesystem. e non pu` o superare 102400 blocchi.7: Parametri per la gestione del giornale di un filesystem ext3 specificabili tramite l’opzione -J di mke2fs. crea anche il file per il giornale (equivalente all’uso di -j). ma implica un maggiore lavoro per la gestione (e maggiore spazio per le informazioni relative). altrimenti questi possono essere specificati nella forma parametro=valore. Altre caratteristiche aggiuntive di un filesystem ext2 possono essere impostate attraverso l’opzione -O. a questa si abbina di solito -J che permette di specificarne delle ulteriori caratteristiche. LA GESTIONE DEI DISCHI E DEI FILESYSTEM 197 media di un file sul disco. a Si tenga presente che per la gestione dei file in un filesystem blocchi e inode sono due risorse indipendenti. e trovarsi cos` nella condizione di non poter pi` e u ı u creare nuovi file.6: Parametri per l’attivazione delle estensioni dei filesystem ext2 attivabili mediante l’opzione -O di mke2fs. che per` non sono compatibili con le implementazioni di ext2 antecedenti i kernel della serie 2. Qualora non venga utilizzata sono utilizzati i valori di default. crea un filesystem con meno copie del superblock per non sprecare spazio sui filesystem molto grandi. che u specificano la caratteristiche da abilitare.5. specificare un valore troppo alto creer` pochi inode. con il rischio di a esaurirli. Usare pochi inode permette di risparmiare spazio ed essere pi` veloci nella ricerca. Parametro size Significato Specifica la dimensione del giornale. per o cui se si deve utilizzare il filesystem con un kernel 2.0 ` necessario specificare come parametro il e valore none che disabilita tutte le caratteristiche aggiuntive.2. creare il filesystem in modo da non utilizzare i blocchi contenenti settori difettosi attraverso l’opzione -c che esegue . 5. I valori possibili per i parametri di -O sono illustrati in tab. Tenere le dimensioni dei blocchi basse riduce lo spreco di spazio per quelli occupati parzialmente. Il dispositivo che fa da giornale deve essere inizializzato con il mke2fs -O journal_dev. ma si corre u il rischio di finirli prima di esaurire lo spazio disco. Di default vengono attivate le due caratteristiche sparse_super e filetype.2.4).2. Al posto di un file di dispositivo si pu` specificare una l’etichetta associata al filesystem (con o l’opzione -L). Un problema che si pu` avere nella gestione dei dischi ` quello dei settori difettosi. Tabella 5. un valore troppo basso ne creer` troppi. device Tabella 5. permette di impostare un dispositivo esterno per mantenere il giornale.6. 5. si deve utilizzare -j che permette di creare un file apposito per il giornale (affronteremo il tema dei filesystem journalled in sez. con conseguente spreco di risorse. da specificare in MiB. memorizza il tipo di file nelle voci delle directory. ed ` bene provvedere ad un e ` backup ed alla sua sostituzione. E comunque possibile. che prende una lista di parametri. separata da virgole se sono pi` di uno. In genere o e l’avvenire di errori di questo indica che il disco si sta degradando. 5.

8.2. 5. e Con l’opzione -O si possono modificare in un secondo tempo le caratteristiche avanzate specificando come parametro una lista dei valori gi` illustrati in tab. mentre con -o si indica un file su e scrivere i risultati. ma anche il suo consumo e a di memoria. fra due e controlli. come anche mostrato nell’output di mke2fs. 5. Per le rimanenti o opzioni del comando si pu` al solito fare riferimento alla pagina di manuale. normalmente viene eseguita una lettura dei blocchi per verificare errori. al solito si pu` ottenere l’elenco completo o ed una descrizione dettagliata nella pagina di manuale del comando. per cui in genere ` sempre meglio non usare direttamente e il programma. per un elenco si faccia al solito riferimento alla pagina di manuale. Si a o tenga presente che se si modificano i parametri sparse_super o filetype sar` poi necessario a eseguire una riparazione del filesystem con e2fsck. ed opzionalmente il blocco di partenza e quello finale del controllo. il metodo ` molto pi` preciso. L’opzione -c permette di selezionare quanti blocchi vengono controllati alla volta (il default ` 16). in giorni. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA un controllo per verificarne la presenza ed escluderne dall’uso qualora rilevati. Le altre opzioni principali di mke2fs sono riportate nella lista di tab. L’uso pi` comune di tune2fs ` u e probabilmente quello per trasformare un filesystem ext2 in un filesystem ext3 creando il giornale. 5. Si deve aver cura di specificare con l’opzione -b la dimensione dei blocchi. di norma questo pu` essere o prodotto indipendentemente dal programma badblocks che ` quello che viene eseguito anche e quando di usa -c per effettuare il controllo. Se invocato senza opzioni il comando stampa una lunga lista di informazioni ricavate dal contenuto del superblock e dei group block. ottenibili specificando l’opzione -h: .7 per indicare le caratteristiche del giornale. in modo da poter forzare il controllo ad un successivo riavvio. se non ce ne sono si prosegue. Con -C si pu` anche modificare a mano il contatore del numero di volte che un o filesystem ` stato montato.2. inoltre in questo a e u u modo il controllo ` distruttivo in quanto sovrascrive i dati. in questo caso per a disabilitare una funzionalit` si pu` apporre un carattere “^” al corrispondente parametro. questo ` ottenibile immediatamente con l’opzione -j. 5. si possono modificarne alcune caratteristiche con l’uso del comando tune2fs. 5. Le altre opzioni principali sono illustrate in tab. nel qual caso per` il controllo diventa estremamente lento. mesi o settimane. e si pu` usare -J con le stesse opzioni e o di tab.198 CAPITOLO 5. ma invocarlo tramite mke2fs o e2fsck. ma anche molto pi` lento. Un’altra opzione di uso comune ` -c che permette di impostare il numero di volte che il e filesystem pu` essere montato senza che venga forzato un controllo di consistenza con fsck. 5. Si pu` eseguire questo stesso tipo di test in modalit` non distruttiva o a con l’opzione -n. Qualora l’opzione venga specificata due volte il controllo viene eseguito in maniera distruttiva (ed estremamente lenta). Infine ci sono una serie di opzioni per indicare il tipo di test da eseguire. aumentandolo si accresce la velocit` di esecuzione del comando. come esempio riportiamo solo la prima parte dell’output del comando. scrivendo e rileggendo tutto il disco.4 Controllo e riparazione di un filesystem Come gi` accennato in sez. o analoga a questa ` -i che specifica l’intervallo massimo. che dovr` ovviamente a coincidere con quella usata con mke2fs. Specificando l’opzione -l invece di eseguire il controllo direttamente su legge una lista di questi blocchi da un file. Con l’opzione -i si indica un file contenente una lista nota di blocchi danneggiati (quella presente nel filesystem ` ottenibile con dumpe2fs).3 il comando dumpe2fs pu` essere usato per recuperare una serie a o di informazioni riguardo ad un filesystem ext2. con -w si richiede di eseguire il controllo scrivendo dei dati e poi rileggendoli per verificarne l’integrit`. Se lo si usa indipendentemente da mke2fs anche badblocks vuole come argomento il file di dispositivo da esaminare. con -p che pu` specificare quante volte ripetere la scansione di un blocco prima di decidere che non ci o sono errori.5. quella relativa alle sole informazioni del superblock. o Una volta creato il filesystem. pertanto non pu` essere usato su e o un filesystem montato.6.

LA GESTIONE DEI DISCHI E DEI FILESYSTEM Opzione -c Significato Imposta il numero di volte che un filesystem pu` esseo re rimontato prima di subire un controllo. un numero (espresso in cifre esadecimali) che identifica il filesystem (in maniera analoga alla label ). anarres:~# dumpe2fs -h /dev/hda4 dumpe2fs 1. Imposta le caratteristiche avanzate del filesystem. Imposta la percentuale di blocchi riservati (messi a disposizione dell’utente specificato con -u. per un massimo di 16 carat` teri. prende come parametro un numero di giorni. remount-ro (rimonta il filesystem in sola lettura). 5. Modifica il comportamento del kernel quando viene rilevato un errore sul filesystem. 199 -C -e -i -j -J -l -L -m -O -r -u -U Tabella 5. di norma l’amministratore). Modifica il contatore del numero di volte che un filesystem ` stato montato.6.35-WIP (07-Dec-2003) Filesystem volume name: <none> Last mounted on: <not available> Filesystem UUID: d0cb4773-dbf8-4898-94e8-bb2acc41df0d Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal filetype needs_recovery sparse_super Default mount options: (none) Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 4169760 Block count: 8324194 Reserved block count: 416209 Free blocks: 5365536 Free inodes: 3935324 First block: 0 Block size: 4096 Fragment size: 4096 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 16352 Inode blocks per group: 511 Last mount time: Fri Jan 30 20:59:45 2004 Last write time: Fri Jan 30 20:59:45 2004 Mount count: 16 Maximum mount count: 22 Last checked: Sun Dec 21 14:45:22 2003 Check interval: 15552000 (6 months) Next check after: Fri Jun 18 15:45:22 2004 . o Imposta l’universally unique identifier (UUID) del filesystem. panic (si ferma causando un kernel panic). di mesi se si pospone il carattere “m”. prende come parametro un numero.2. Imposta il nome del volume. prende come parametro uno dei valori di tab. prende come parametri uno dei valori di tab. Imposta l’utente che pu` usare i blocchi riservati.5. aggiunge un giornale per il filesystem. 5. stampa i contenuti del superblock (come dumpe2fs). E questo nome (detto anche label ) che pu` essere o usato da vari comandi per indicare il filesystem al posto del dispositivo. Imposta il numero di blocchi riservati.7. Imposta l’intervallo di tempo fra due controlli successivi. prende come parametro un e numero.8: Principali opzioni per il comando tune2fs. sovrascrive i parametri del giornale. prende come parametro uno dei valori: continue (continua ignorando l’errore). di settimane se si pospone il carattere “w”.

che indica che ` in uso. In questo caso si pu` avere un danneggiamento della struttura del filesystem. In genere la procedura di controllo e riparazione pu` essere molto lunga e complessa. e Questo comando permette di salvare su un file i dati critici del filesystem in modo da poterli riutilizzare con programmi di riparazione come e2fsck o debugfs. Di norma in caso di rilevamento di un errore questo viene automaticamente avviato. In generale il funzionamento dei filesystem in Linux ` estremamente stabile. ` normale che e il filesystem. pari appunto ad o un intero filesystem. che comportano varie scansioni del contenuto del filesystem. ed ` anche possibile trovarle. a Il concetto fondamentale del journalling ` che le operazioni sul filesystem vengono prima e registrate su un giornale. che deve essere o riparato. in cui l’interruzione ı ` avvenuta durante l’aggiornamento del filesystem. ma il filesystem sar` comunque in uno ı a stato coerente. -ob che permette di specificare il blocco (indicato per numero) da usare come superblock al posto di quello standard (in caso di corruzione di quest’ultimo). (un file apposito a questo dedicato) e poi riportate sul filesystem. o qualcuno inciampa nel cavo di alimentazione del server. si perderanno cos` le ultime modifiche. 40 per far questo viene creato uno sparse file delle stesse dimensioni del filesystem. a 41 a meno di non usare kernel sperimentali. attivato quando viene montato. uno sparse file ` un file in e cui non sono state scritte le parti vuote. Se per` si ha e o un black-out improvviso. ma il e a giornale sar` coerente e al riavvio baster` utilizzarlo per riprendere la registrazione da dove era a a stata interrotta. ed una volta e creati ` praticamente impossibile41 danneggiarli nel corso delle normali operazioni.200 CAPITOLO 5. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Le altre opzioni principali del comando sono -b. Per un elenco completo e relative spiegazioni si faccia al solito riferimento alla pagina di manuale. che qualcosa ` andato storto. in quanto prevede una serie di controlli accurati per identificare informazioni incoerenti e parziali. Infine -i permette di leggere le informazioni invece che dal filesystem da una immagine create con il comando e2image. e che viene azzerato solo quando il filesystem viene smontato e (nel qual caso si ` certi che tutte le operazioni sospese sono state completate e lo stato ` coerente). e a a al successivo tentativo di montaggio. e . e e Se c’` stata un’interruzione della corrente questo flag rester` attivo ed il sistema potr` rilevare. Una delle misure di precauzione che si possono prendere per tentare un recupero in caso di corruzione di un filesystem ext2 ` quella di crearne una immagine con il comando e2image. Il comando prende come argomenti il dispositivo su cui si trova il filesystem ed il nome del file su cui salvare l’immagine. L’unica opzione ` -r che crea una immagine binaria che pu` essere usata dai vari programmi di e o 40 controllo come se fosse l’intero filesystem. A questo punto occorre usare l’opportuno programma di controllo per verificare lo stato del filesystem ed eventualmente riparare gli errori. Questo pu` significare dei tempi che possono diventare ore o addirittura giorni per i o dischi pi` grandi. pertanto anche se la sua dimensione pu` essere enorme. e si possa trovare in uno stato incoerente. In genere ogni filesystem prevede l’esistenza di un flag su disco. che permette di evitare questo procedimento e riportare il filesystem in uno stato coerente con grande velocit`. e Quello che pu` succedere in questi casi dipende dal filesystem. in realt` viene occupato su disco solo lo spazio relativo alle parti non vuote. Se invece l’interruzione ` avvenuta durante la scrittura nel giornale sar` questo e a ad essere scartato. nel qual caso si stanno cercando rogne. -oB per indicare la dimensione dei blocchi (anche questa ` una informazione necessaria solo in caso di e corruzione del filesystem). Cos` se si ha una interruzione improvvisa si hanno due casi: nel primo. dal momento in cui l’aggiornamento dei dati su disco ` stato interrotto brutalmente. speo cie per filesystem di grandi dimensioni. Coi filesystem tradizionali di o norma mount rileva l’errore e non monta il filesystem o lo monta in sola lettura (a seconda delle opzioni scelte). questo sar` in uno stato incoerente. che restituisce l’elenco dei blocchi marchiati come danneggiati in un filesystem. per questo molti dei filesystem pi` avanzati supportano il cosiddetto journalu u ling.

non ` altro che un front-end per i singoli programmi specifici di ciascun tipo di e filesystem. mentre con -L il file indica la nuova lista di blocchi difettosi. che sono state mantenute solo per compatibilit`. e -r che invece esegue le riparazioni in modalit` intea rattiva. e come mkfs.42 e dando una risposta di “no” a tutte le domande. In caso di filesystem pesantemente corrotto si possono poi specificare il superblock da utilizzare con -b e la dimensione di un blocco con -B. Quando si ` usata l’opzione -b e e il filesystem non ` stato aperto in sola lettura e2fsck si cura anche di ripristinare anche il e superblock al completamento del controllo. Per questo motivo ci concentreremo e u sulla versione dei programmi di riparazione e controllo specifici di questo filesystem. deve essere specificata come parametro per -t. di solito sono definite due opzioni generiche. cavi difettosi o bug del kernel possono comunque corrompere le informazioni. Con l’opzione -l si pu` specificare un file con una lista da aggiungere a quella dei o blocchi difettosi. che nella o gestione dei dati ` identico) come il filesystem pi` diffuso. per cui la diffusione di ext2 ` ancora molto ampia. non ` detto e che questo venga sempre utilizzato. Il comando supporta le opzioni generiche -a e -r illustrate in precedenza. Quando il comando viene invocato con l’opzione -A (di solito questo viene fatto nella procedura di avvio) questo esegue una scansione di /etc/fstab e cerca di controllare ogni filesystem ivi elencato. 42 .2. Il programma generico per il controllo di un filesystem ` fsck (da File System ChecK ) che. Usando l’opzione -c si pu` richiedere anche la scansione per il rilevamento di settori difettosi. Nel qual caso prima prova ad eseguire il controllo per il filesystem radice e poi per tutti gli altri in ordine di valore crescente del suddetto campo. Come per mkfs le opzioni disponibili dipendono dallo specifico filesystem. che prende come argoe mento il dispositivo da controllare. specie se si usa ext3. Se si specifica pi` di un filesystem la lista dei u relativi tipi. in quanto errori sul disco. Inoltre per e la facilit` della conversione (tutto quello che occorre fare ` aggiungere il giornale al filesystem con a e tune2fs -j e rimontarlo come ext3) si pu` sostanzialmente considerare ext2 (ed ext3. Nel caso di Linux tutti i filesystem pi` recenti (ReiserFS. Comunque l’uso di un giornale ha un impatto sulle prestazioni del filesystem. eccetto il caso in cui si siano specificate le opzioni -c. JFS e XFS) supportano nativamente u il journalling. che vengono attivati attraverso l’opzione -t seguita dal nome del filesystem. se sono citati in /etc/fstab). In generale comunque. -a che cerca di eseguire le riparazioni in modo automatico. E comunque possibile usare l’opzione -y per ottenere per far rispondere “yes” a automaticamente a tutte le domande in modo da poter eseguire il comando in modalit` non a interattiva (ad esempio da uno script). -l o -L nel qual caso il filesystem viene aperto in scrittura per aggiornare la lista dei settori difettosi. 1.2. mentre con -n si fa la stessa cosa aprendo il filesystem in sola lettura. senza chiedere l’intervento dell’amministratore. Il programma di controllo e riparazione del filesystem ext2 ` e2fsck. non dovendo effettuare il controllo a completo del filesystem. Il programma prende come argomenti un elenco di filesystem da controllare (specificati per dispositivo o mount point.5. a meno che il sesto campo del file non sia impostato a zero (si ricordi quanto detto in sez. solo che grazie alla prea e senza del giornale questo viene eseguito con grande rapidit`. ` comunque opportuno e mantenere un controllo periodico sul filesystem. Se si ` usato un giornale posto su un altro e dispositivo questo deve essere specificato con l’opzione -j. in realt` -a ` deprecata in favore a a e della pi` recente -p mentre -r non fa niente dato che il comando viene sempre eseguito in mou ` dalit` interattiva.4). o e specificandola due volte viene usato il metodo non distruttivo di scansione con scrittura e rilettura. Per le altre opzioni si pu` fare riferimento alle pagine di manuale dei vari programmi o dedicati di ciascun filesystem. In realt` in questo non ` che il procedimento non avvenga. ed anche il tradizionale ext2 ha ottenuto questa funzionalit` con la nuova versione a ext3. LA GESTIONE DEI DISCHI E DEI FILESYSTEM 201 In questo modo quando si ha un filesystem journalled si pu` evitare il lungo procedimento di o riparazione. separata da virgole.

5. forza il controllo del filesystem.9: Principali opzioni per il comando e2fsck. in caso di filesystem pesantemente danneggiato l’opzione -b permette di specificare una dimensione dei blocchi. Specifica il dispositivo di un giornale esterno. o Opzione -b -B -c -f -j -l -L -n -t -y Significato Specifica la dimensione dei blocchi. ed infine l’opzione -i permette di specificare una immagine creata con e2image. Specifica le dimensioni di un blocco. In tal caso di norma il filesystem non ` montato. a Specifica il file con la nuova lista dei blocchi difettosi (sovrascrivendo quella presente). Non ` detto che si riesca e a riparare completamente il filesystem44 . Esegue il controllo rispondendo automaticamente yes a tutte le domande. o sia montato in sola lettura.202 CAPITOLO 5. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Le altre opzioni principali del comando sono riportate in tab.3. Esegue il controllo rispondendo automaticamente no a tutte le domande. Questa costituisce un complemento essenziale alla gestione della chiaramente se il filesystem ` danneggiato cos` gravemente da non poter neanche essere montato si avr` un e ı a kernel panic. e di eseguire su di esso delle operazioni. e Quando questo avviene durante la procedura di avvio di norma il sistema viene mandato in Single User Mode (si veda sez. proprio perch´ inutili. nel qual caso il programma si ferma.45 Questa infatti ` un problema solo per quei filesystem la cui architettura e ` talmente inadeguata da renderlo tale. Qualora anche la riparazione con e2fsck eseguito manualmente fallisca ci si trova di fronte ad un filesystem pesantemente danneggiato.4) e viene richiesto di rieseguire il programma manualmente. Stampa delle statistiche di esecuzione. Il comando permette di aprire anche un filesystem danneggiato. 5. 45 in effetti ci sono alcuni programmi per questa operazione. nel qual caso esso deve essere comunque montato.9. Specifica il file con una lista di blocchi difettosi da aggiungere a quelli gi` presenti. In questo caso l’ultima risorsa ` quella di utilizzare e debugfs per provare ad eseguire manualmente la riparazione. non ` uno strumento per il controllo quanto per il debugging. l’opzione -s permette di specificare il superblock. In generale un qualunque filesystem unix-like ` in grae e do di gestire la allocazione dello spazio disco in maniera da evitare il sorgere del problema fin dall’inizio. Nel caso lo di voglia eseguire comunque.43 ma in sola lettura. in quanto di norma questo viene e a eseguito dagli script di avvio.5 La gestione della swap Come ultimo argomento relativo alla gestione dei dischi affronteremo quello della gestione dello spazio dedicato alla swap. Di norma l’esecuzione automatica (quella ottenuta con -a o -p) prevede che il filesystem sia riparato senza necessit` di intervento da parte dell’utente. Ci sono casi comunque in cui questo a non ` possibile. ad uso dei cosiddetti filesystem e guru. ma non vengono usati. per un elenco completo e la relativa documentazione si pu` al solito fare riferimento alla pagina di manuale del comando. Tabella 5. oltre a specificare l’opzione -f occorre assicurarsi che il filesystem relativo non sia montato. come dice il nome. e 43 .2. ma si possono tentare delle operazioni di ripulitura che potrebbero portare lo stesso in uno stato riparabile da e2fsck. Infine si tenga presente che per Linux non esistono programmi di uso comune per la deframmentazione del disco. a meno che il filesystem danneggiato non sia e la radice. 44 per questo occorre una conoscenza dettagliata della struttura di un filesystem ext2. 5. in effetti il programma. Il comando prende come argomento il dispositivo contenente il filesystem da esaminare. Esegue il controllo del dispositivo per eventuali settori difettosi. In genere non c’` necessit` di eseguire direttamente e2fsck.

4. dove la velocit` di trasferimento ` maggiore). 5. comunque possibile.1 e poi approfondito in sez. l’elenco delle opzioni ` riportato in tab. si avr` quello che si chiama un page fault 46 a a a questo punto il sistema della memoria virtuale provveder` a recuperare la pagina dall’area di a swap e a rimetterla in memoria. In genere si usa il comando specificando come argomento un file di dispositivo indicante una partizione appositamente riservata (vedi sez. e o tramite la MMU acceder` ad indirizzo reale della memoria effettivamente disponibile. quando l’uso di questa diventa eccessivo. cos` che questo possa eseguire la opportuna sezione del kernel. 1. cos` che il processo possa proseguire la sua esecuzione come se ı nulla fosse. L’opzione -p permette di specificare come parametro la dimensione delle pagine di memoria (in genere 4096 byte. una sezione di disco (in genere una partizione. con l’aiuto della MMU (Memory Management Unit) del processore una rimappatura dello spazio degli indirizzi dei processi sulla memoria fisica effettivamente disponibile. se non lo si specifica viene automaticamente utilizzato tutto lo spazio disponibile.2. 47 in realt` ovviamente tutto questo richiede tempi che sono ordini di grandezza superiori rispetto all’accesso a diretto alla RAM. se un processo usa un indirizzo che non corrisponde a nessuna pagina di memoria si avr` quello che si chiama un segmentation fault ed il sistema si accorger` a a immediatamente dell’errore inviando al processo un segnale di SIGSEGV. in questo caso infatti l’accesso al disco ` diretto (` quindi pi` veloce) rispetto al caso. Ma la potenza del meccanismo della memoria virtuale consiste nel fatto che esso consente di utilizzare anche dello spazio disco come supporto aggiuntivo rispetto alla memoria fisica.10 erano possibili fino ad un massimo di 8 aree di swap. Come per mkfs l’opzione -c richiede un controllo della partizione per la presenza di settori difettosi. u a e Il comando prevede (per compatibilit` con le vecchie versioni) un secondo argomento che a specifica la dimensione dell’area di swap.1 il kernel gestisce. e Si tenga presente che per i kernel precedenti il 2. in caso di utilizzo dell’area di swap. un elenco di quelle attive ` visibile in e /proc/swaps. a Una delle caratteristiche del meccanismo ` che in questo modo ciascun processo mantiene un e suo spazio di indirizzi separato.10. per cui il nulla ` solo teorico. LA GESTIONE DEI DISCHI E DEI FILESYSTEM 203 memoria virtuale.2. il meccanismo con cui il kernel gestisce l’allocazione della memoria fisica ai vari processi.5.2). Come accennato in sez.48 a questo provvede il comando mkswap che prende come argomento il file da usare come area di swap. ` in genere una pessima idea usare un disco vecchio e lento per questo scopo. e come se fosse un filesystem. 49 per il quale si dovrebbe prima passare attraverso il relativo filesystem. E per e questo motivo inoltre che si preferisce usare per l’area di swap l’ultima partizione disponibile (quella che contiene i settori pi` esterni del disco. in pratica il programma sar` molto pi` lento.47 Perch´ il kernel possa usare un’area di swap questa deve essere opportunamente inizializzata.2. dai tempi di accesso a quest’ultima e dalla velocit` di trasferimento a ` dei dati. Dato che le prestazioni del sistema della memoria virtuale dipendono direttamente. quest’ultimo ı si occuper` o di recuperare la pagina dalla swap (se l’indirizzo era giusto) o di inviare un segnale di SIGSEGV (se a l’accesso era sbagliato).2. 1. In questo modo ciascun processo pu` usare un suo spazio di indirizzi virtuale (usando un qualunque valore fa quelli possibili). 1. e a u 48 dato che l’area deve essere solo utilizzata per copiarci pagine in questo caso non sono affatto necessarie tutte le infrastrutture mostrate in sez. ı Chiaramente quando si andr` a rieseguire il processo le cui pagine di memoria sono state salvate a sull’area di swap e questo cercher` di accedere a quelle. ma dipende dall’architettura hardware).3. La dimensione massima dell’area di swap dipende sia dalla versione utilizzata che quello che succede ` che quando la MMU si accorge che la pagina richiesta non ` mappata su della memoria e e fisica invia un segnale al processore. ma si pu` usare anche un file) su cui il kernel pu` salvare le pagine di memoria meno utilizzate o o di un processo. 46 . ` E questo lo scopo della cosiddetta area di swap. a partire da esso sono state portate a 32. in modo che altri possano utilizzare la memoria fisica che cos` viene liberata. 5. e e u 49 in cui si usa un file normale.

Con la vecchia versione il massimo dipendeva solo dalla dimensione delle pagine (ed era di 128MiB con le pagine di 4096 byte della architettura standard dei PC) con la nuova versione dipende solo dall’architettura ed ` di 2GiB per la maggior parte di esse.3.1 L’avvio del kernel Una volta accesa la macchina ` il BIOS che si incarica di lanciare il sistema operativo. 6. forza l’esecuzione del comando anche se si sono dati argomenti sbagliati (come un dimensione dell’area maggiore di quella della partizione). specifica.10: Opzioni per il comando mkswap. che permette di impostare una priorit` (un parametro di e a valore fra 0 e 32767) per l’uso della partizione. Si pu` ottenere o a u a o questo risultato anche per le aree di swap attivate con swapon -a specificando in /etc/fstab nel relativo campo l’opzione pri=N dove N ` lo stesso valore che si userebbe con -p. vedi sez.204 CAPITOLO 5. Quando si ha una sola area questo valore non ` e significativo in quanto il kernel si limiter` ad usare la prima sezione libera che trova. anche in questo caso o occorre fornire come argomento il file di dispositivo indicante l’area da disabilitare. e Una volta creata un’area di swap questa non verr` utilizzata dal kernel fintanto che non la a si attiva con il comando swapon. se le aree a sono pi` di una l’algoritmo di utilizzo prevede che il kernel usi a turno quelle della stessa priorit` u a (realizzando cos` una forma di RAID-1.1. dall’architettura hardware. ı 5. e come si possa intervenire (trattando i vari programmi coinvolti ed i relativi meccanismi di configurazione) a ciascuno stadio di questa procedura.3 La gestione dell’avvio del sistema In questa sezione prenderemo in esame la procedura di avvio del sistema. Tabella 5. In a . specifica la versione della formattazione dell’area di swap da utilizzare. ma chiamato con l’opzione -a negli script di avvio. 5. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Opzione -c -f -p -v Significato esegue un controllo per la presenza di settori difettosi. dettagliando i vari passaggi che portano dall’accensione della macchina al pieno funzionamento del sistema.1) e passi ad una di priorit` inferiore solo ı a quando quelle di priorit` superiore sono piene. ed in genere le versioni pi` moderne a u permettono di avviare il sistema da una variet` di supporti (ivi compreso l’avvio via rete). Le e modalit` possono dipendere da tipo e versione di BIOS. ed in questo caso attiver` tutti a i dispositivi che sono marcati come swap all’interno di /etc/fstab. In generale per` il comando non viene mai invocato a o direttamente. che verr` immediatamente attivata. Se invece si vuole avere una lista dei dispositivi attualmente utilizzati si potr` usare l’opzione -s con qualcosa del tipo: a monk:/home/piccardi/truedoc/corso# swapon -s Filename Type /dev/hda2 partition Size 498004 Used 1936 Priority -1 Un’altra opzione importante ` -p. usando -p ı e a si pu` forzare la stessa priorit` ottenendo un uso pi` efficace e maggiore velocit`. questo prende come argomento il file da usare coma area di swap. con -v0 usa il vecchio stile (deprecato) con il -v1 usa il nuovo. con il valore passato come parametro la dimensione delle pagine di memoria. e Infine si pu` disattivare un’area di swap usando il comando swapoff. cos` come indicate in /proc/swaps e /etc/fstab. il comando consente anche l’uso dell’opzione -a nel qual caso non sar` necessario passare argomenti e saranno a disattivate tutte le aree di swap presenti. a Se non si specifica nulla le priorit` vengono assegnate automaticamente andando a diminuire a nell’ordine di attivazione (cos` che la prima area attivata ` quella a priorit` maggiore).

ottale o esadecimale) o una stringa. Una delle caratteristiche di Linux infatti ` che.1. un elenco dettagliato e pu` essere trovato nel file kernel-parameters. di fornire una opportuna interpretazione.4). a Il caso pi` comune ` quello in cui l’avvio viene fatto dal disco rigido. ed avere un controller SCSI che supporta il boot. 5.11. Una delle caratteristiche dei bootloader (tratteremo pi` avanti i due pi` comuni) ` che essi. In generale il bootloader ` un programma elementare il cui unico compito ` quello di trovare e e sul disco il file che contiene il sistema operativo. o il valore ask per fare eseguire una scansione. chiamato bootloader. che si incarica di effettuare il lancio del sistema operativo. qualora compilati all’interno del kernel possono ricevere in questo modo i valori dei loro parametri. e deve anche essere in grado. anche se BIOS pi` recenti permettono di usare o u anche altri dischi 52 che in questo caso svolge il ruolo della shell. caricarlo in memoria ed eseguirlo. Questo contiene un programma apposito. se non quella che pu` mettere a disposizione il o bootloader 52 prima di eseguirlo. u u e oltre che nel Master Boot Record. specifica il programma da lanciare come primo processo del sistema (di default ` /sbin/init). passandogli eventuali parametri di avvio. per alcuni argomenti. 50 . possono essere installati anche nel settore iniziale di ciascuna si sottintende disco IDE. se si vuole usare un disco SCSI occorre comunque impostare il BIOS per l’avvio su SCSI. o MBR. ed ` su questo che ci u e e soffermeremo con maggior dettaglio nei paragrafi successivi. solo che in questo caso o non esiste una riga di comando da cui darglieli. disco e CDROM (anche se alcuni dei pi` vecchi non supportano il CDROM). veniva utilizzato per soprassedere il malfunzionamento del sistema di autorilevamento del kernel. 5. LA GESTIONE DELL’AVVIO DEL SISTEMA 205 genere comunque tutti i BIOS supportano l’avvio da floppy. ` compito del bootloader interpretare il significato di e file. In genere questo si fa tramite l’apposito men` di configurazione che permette di u selezionare la sequenza in cui vengono controllati i vari dispositivi per l’avvio. specifica (in genere col nome del file di dispositivo) il disco (o la partizione) da montare come radice. imposta la dimensione della memoria da utilizzare. u Per quanto riguarda l’avvio da CDROM e floppy non esiste nessuna configurazione specifica per Linux. Il primo su cui si trovano i dati opportuni verr` utilizzato.5.txt della documentazione allegata ai sorgenti o del kernel54 o nel boot-prompt-HOWTO. 53 ad esempio i moduli che supportano l’uso di parametri in fase di caricamento (vedi sez. 51 per molti BIOS questo pu` essere solo il primo disco IDE. in generale questi e a servono a passare valori ad alcuni sottosistemi53 o ad impostare delle funzionalit` usate all’ava vio. e specifica un file di dispositivo da usare come console per i messaggi di errore. Un elenco dei principali argomenti ` riportato in tab.11: Principali argomenti per la linea di comando del kernel. initrd=file root=dev init=command console=dev Tabella 5. La procedura prevede che il BIOS legga il primo settore del disco50 scelto per l’avvio51 che viene detto Master Boot Record.3. o una lista di stringe separate da virgole. essi sono sempre nella forma chiave=valore. specifica un RAM disk iniziale (che verr` usato come radice prova visoria). 54 nella directory Documentation. Normalmente non c’` necessit` di passare argomenti specifici al kernel. occorre semplicemente impostare opportunamente il BIOS perch´ vengano usato tali e dispositivi. Argomento vga=mode mem=size Significato dove mode ` un valore intero che stabilisce la modalit` video in cui e a utilizzare la console. pu` prendere degli argomenti. essendo in fin e dei conti anche questo un programma. dove valore pu` essere un valore numerico o (espresso in notazione decimale.

Nel caso di un CDROM il meccanismo di avvio ` sostanzialmente lo stesso dei floppy. Per i dettagli si faccia riferimento alla pagina di manuale. Se usato senza argomenti il comando si limita a stampare una riga in riporta quale ` la partie zione impostata come directory radice per il sistema corrente. una volta che lo si ` montato. a e la dimensione del RAM disk iniziale. scompattarlo ed eseguirlo. In tal caso baster` copiare i file necessari (come l’immagine del kernel o del RAM disk iniziale) a sul floppy55 di destinazione e poi eseguire il programma. si concludono con il lancio di init. Il caso del floppy ` analogo a quello di un disco.1. Pertanto basta l’uso di dd per copiare direttamente l’immagine del kernel su un dischetto con un comando del tipo: dd if=bzImage of=/dev/fd0 per ottenere un floppy di avvio. il vantaggio di utilizzare un filesystem consente. e Il vantaggio di questo metodo ` che se si crea una immagine compressa del kernel (con la e procedura vista in sez. tutto il resto verr` eseguito da quest’ultimo in user a space. ognuno dei quali ha un suo diverso meccanismo di funzionamento. posto e che il CDROM sia stato masterizzato con le opportune estensioni. o invocandolo come vidmode. In questo caso per` o di solito non viene usata una immagine di un floppy contenente soltanto il kernel. e cos` via. 5.206 CAPITOLO 5. come Alpha. PowerPC.3) viene automaticamente inserito nei primi 512 byte della stessa un programma di avvio che si limita a caricare il resto del contenuto del floppy in memoria. La procedura con cui il BIOS carica in memoria il sistema dipende ovviamente dal supporto da cui lo prende. come le inizializzaa zioni delle infrastrutture generiche. Sparc. Il problema con un disco d’avvio fatto in questo modo ` che non si possono fornire argomenti e all’avvio. Linux per` gira su molo tissime architetture hardware diverse. Una volta completata l’inizializzazione dell’hardware tutto quello che resta da fare ` e semplicemente montare il dispositivo su cui si trova la directory radice e lanciare il programma di avvio del sistema. In sostanza viene inserita nel CD l’immagine di un floppy e l’avvio viene eseguito alla stessa maniera. ma viene utilizzato il programma syslinux per creare una immagine di avvio contenuta in un filesystem FAT. di accedere direttamente ai contenuti. ı Infine si tenga conto che tutto questo si applica solo ai normali PC. ecc. e questo deve ovviamente contenere i dati in un formato adeguato. a Il comando permette anche di modificare anche altri due parametri che sono mantenuti nell’immagine del kernel. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA partizione. In particolare questo significa che il sistema user` come radice quella in uso quando a viene compilata l’immagine. e come SILO per la Sparc. non ci occuperemo di questi casi. MILO per le Alpha e OpenFirmware per i Mac. e dei dispositivi il cui supporto ` stato compilato direttamente e nel kernel. la modalit` video usando l’opzione -v. per quanto riguardo il e kernel. che di norma ` /sbin/init. Una volta avviato il kernel effettuer` una serie di operazioni preliminari. il BIOS legge il primo settore del floppy ed esegue il e programma che c’` contenuto. se si specifica un secondo argomento questo dovr` essere il dispositivo a contenente la nuova directory radice che andr` a sovrascrivere la precedente. In realt` alcuni argomenti di avvio in questo caso possono essere a modificati con il comando rdev. e 55 . usando l’opzione -r o invocandolo come ramsize. Le operazioni di avvio. Questo permette allora di concatenare pi` bootloader (in particolare questa ` la u e tecnica usata normalmente per lanciare il bootloader di Windows) in modo che il primo lanci il successivo. Se si specifica un solo argomento questo deve essere un file contenente l’immagine di un kernel e allora stamper` la radice predia sposta per quel kernel. In tal caso la procedura di avvio ` spesso gestita direttamente dall’equivalente del BIOS per quell’architettura. che prende come argomento il file del o su qualunque altro dispositivo si stia utilizzando. HP-UX.

e Per i dettagli si pu` fare riferimento alla pagina di manuale di syslinux al solito accessibile con o man syslinux.3.conf. E un bootloader con una architettura elementare.conf). alcuni BIOS non e sono capaci di leggere i dischi oltre il 1024-simo cilindro. ed a lungo ` stato anche e e ` l’unico presente. Un esempio di questo file ` il seguente: e # Support LBA for large hard disks. questo contiene sia le e opzioni passate al kernel in fase di avvio. Infatti per poter lanciare un kernel occorre specificarne la posizione su disco al bootloader in modo che questo possa caricarlo. e poi eseguirla. che si affida al BIOS per la lettura del disco. con la conseguente impossibilit` di lanciare il sistema. pertanto se si sovrascrive un file non ` e affatto detto che la posizione fisica del nuovo file sia la stessa (anzi di norma non lo ` affatto) e per cui al successivo riavvio senz’altro LILO non potrebbe non essere pi` in grado di trovare il u kernel.2.3. si pu` caricare in memoria anche l’immagine di un ram-disk. a Il formato di /etc/lilo.5.5. e pertanto risente di tutti i limiti che questo pu` avere.conf ` simile a quello degli altri file di configurazione. # lba32 # Specifies the boot device. or the raw device. and will overwrite the current MBR. Le altre linee indicano una opzione o una direttiva. In genere si ha a che fare con questo file tutte le volte che si vuole usare un nuovo kernel. non quella logica nel filesystem. al contrario di quanto o avviene in genere per altri file di configurazione. Una volta eseguito (sia direttamente dal BIOS. come accennato in precedenza. Si deve invece far girare il programma lilo che reinstalla il bootloader con le nuove opzioni. che si incarica di tutto il resto. in which # case it installs in the MBR.56 Da questo punto in poi il controllo passa al kernel.SYS che contiene il programma di avvio. Il comando sovrascriver` opportunamente il a settore iniziale del disco e ci copier` un file LDLINUX. (in sostanza in fase di installazione viene memorizzato il settore su cui essa si trova) caricarla in memoria. (‘/’) # qualora lo si sia richiesto. La cosa va fatta anche se si ` semplicemente sovrascritto un e kernel precedente con un altro (e pertanto non si ` neanche dovuto modificare /etc/lilo. le linee vuote e o che iniziano per # vengono ignorate.2).CFG che basta inserire nella radice del floppy. 56 . Uno di questi problemi o ` che. che serve come o filesystem iniziale per il kernel. In generale ` possibile. che le direttive che permettono di controllare direttamente il comportamento del bootloader. This is where Lilo installs its boot # block. La configurazione di LILO ` gestita tramite il file /etc/lilo. ed ` controllato dal file di configurazione SYSLINUX. LA GESTIONE DELL’AVVIO DEL SISTEMA 207 dispositivo da inizializzare (in genere /dev/fd0). 5. a causa delle restrizioni ereditate dai primi PC illustrate in sez. da LInux LOader. In genere LILO viene installato nell’MBR alla fine della procedura di installazione di una distribuzione. a Questo mette a disposizione una riga di comando analoga a quella di LILO (vedi sez. che da un altro bootloader ) LILO si incarica di trovare l’immagine del kernel sul disco. It can be either a partition. se si dispone di un altro bootloader in grado di eseguirlo.3. quello che sta nell’MBR) conosce solo la posizione fisica del kernel nel disco. # boot=/dev/hda # Specifies the device that should be mounted as root. 5. passare tutti gli eventuali parametri di avvio specificati in fase di configurazione. installarlo all’interno di e una partizione.2 L’uso di LILO Il primo bootloader creato per Linux ` stato LILO. non basta modificarlo perch´ i cambiamenti die ventino effettivi al riavvio successivo. e si ricordi infatti che LILO (il bootloader. Si tenga presente per` che.1.

b # Specifies the location of the map file # map=/boot/map # Specifies the number of deciseconds (0. nel caso ` l’MBR del primo disco e IDE. che si applicano al comportamento generale del bootloader. ne possono esistere varie e versioni.txt prompt # single-key # delay=100 timeout=30 # Kernel command line options that apply to all installed images go # here. See: The ‘boot-prompt-HOWTO’ and ‘kernel-parameters. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA root=/dev/hdb5 # Installs the specified file as the new boot sector # install=/boot/boot. # delay=30 # message=/boot/bootmess.2. u In genere tutti questi i file referenziati da queste direttive vengono tenuti. Si pu` specificare allo stesso o modo una partizione. e le direttive che permettono di passare delle opzioni al kernel (Linux). Se u a . # other=/dev/hda1 label=dos # restricted # alias=3 Le direttive sono divise in tre classi principali: le direttive che specificano opzioni globali. come illustrato in sez.txt’ in # the Linux kernel ‘Documentation’ directory. La maggior parte delle direttive ricade nella prima classe. che presentano una interfaccia di avvio semplificata a men` o semplicemente testuale.208 CAPITOLO 5. # default=linux image=/boot/vmlinuz-2. questa viene definita automaticamente alla installazione del pacchetto e ricostruita tutte le volte che si lancia il comando lilo. ad esempio se si volesse installare LILO sulla seconda partizione del primo disco si sarebbe potuto usare /dev/hda2.1 seconds) LILO should # wait before booting the first image. La direttiva map specifica il file (di norma boot.2.2. di queste forse la pi` importante ` u e boot. 1. La direttiva install invece specifica qual’` il file che contiene il programma del bootloader. nella directory /boot. indicato tramite il suo file di dispositivo come /dev/hda. # # append="" # Boot up Linux by default.map) che contiene la mappa della posizione su disco delle varie immagini del kernel.3. le direttive che specificano opzioni relative alle singole immagini dei sistemi che si vogliono lanciare. Le altre direttive globali pi` usate sono quelle che controllano le modalit` di avvio. you can uncomment the # following lines.20 label=linuxold read-only optional # If you have another OS on this machine to boot. changing the device name on the ‘other’ line to # where your other OS’ partition is.21 label=linux read-only optional image=/boot/vmlinuz-2. che specifica il dispositivo su cui installare il bootloader.

o Qualora il BIOS non supporti queste estensioni. 5. fra le varie immagini del kernel installate o o gli altri sistemi operativi presenti su altre partizioni. che prende come e parametro il file che contiene l’immagine del kernel. LILO continuer` ad accedere alla a posizione del vecchio file. ae si noti che non ` assolutamente detto che questa debba stare sullo stesso disco da cui si lancia il kernel. Per farlo basta riferimento all’etichetta che si ` associata con la direttiva label a ciascuna immagine o altro sistema presente. Questo pu` essere utile in quanto non ` detto o e che Linux ed il BIOS concordino sempre sulla geometria del disco.5.3. o La direttiva che permette di identificare un kernel da lanciare ` image. ma per l’accesso al disco esegue una conversione al vecchio formato. poi cancellato il file preesistente e assegnato il suo nome al nuovo).58 Di solito la si specifica all’inizio del file per utilizzarla come valore di default per tutti i kernel. L’uso di questa direttiva comunque ha senso solo per i vecchi BIOS che non supportano LBA. mentre in caso di sovrascrittura a l’avvio fallir` (in maniera pi` o meno spettacolare a seconda dei casi). la direttiva append permette di specificare dei parametri di avvio al kernel. nel nostro esempio /dev/hdb5. viene selezionato come default per l’avvio (e lanciato quando scade il tempo specificato da timeout). Con i BIOS (e le versioni di LILO) a pi` recenti. con relativo fallimento. Usando linear invece l’idea della geometria che ha il kernel viene diventa irrilevante. Direttive come lba32 e linear servono ad indicare a LILO quale metodo utilizzare per caricare il kernel. usando la INT13 originale. Con la direttiva default si pu` scegliere quale. questo comporta che si avranno problemi tutte le volte che si installa un kernel al di l` del limite del 1024-simo cilindro. ed il caricamento del kernel viene utilizzando l’interfaccia classica illustrata in sez. fintanto che non si ricrea la boot map e la si reinstalla. pur avendo specificato prompt. a e ci si pu` dimenticare di tutti i problemi relativi alla geometria dei dischi. la direttiva linear mantiene sempre gli indirizzi nella boot map in forma lineare. seguito dalle eventuali opzioni che gli si vogliono passare). che si utilizzer` ancora la vecchia immagine. testina e settore relativi ad una e a geometria diversa a quella vista dal BIOS. si proceder` automaticamente all’avvio. LA GESTIONE DELL’AVVIO DEL SISTEMA 209 si specifica prompt il bootloader si ferma all’avvio presentando una riga di comando da cui l’utente pu` immettere dei comandi (si tratta in genere di scrivere il nome di uno dei kernel o predefiniti. si deve sempre specificare la direttiva lba32. analoghi a quelle che si possono scrivere 57 58 in realt` ` comunque possibile ottenere la riga di comando se ti tiene premuto il tasto di shift. e . testina e settore. Di default questi indirizzi sono indicati nella notazione classica.2. Questo significher` nel migliore dei casi. e sar` LILO ad usare all’avvio la a conversione dell’indirizzo lineare usando la geometria che gli fornisce il BIOS. Questo significa che se si copia su una di queste immagini un altro file (ad esempio per un aggiornamento). senza possibilit` di intervento dell’utente. ma pu` essere anche specificata per ciascuna immagine. se si ` fortunati e nessuno ha a e sovrascritto i dati. essendo questo creato altrove (quando si sovrascrive con cp prima viene creata la copia. Specificando un numero con timeout si introduce un tempo massimo (in decimi di secondo) dopo il quale. Si ricordi che bench´ qui essa sia specificata e tramite il pathname del file che la contiene. a u Per ciascuna direttiva image vanno poi fornite una serie di ulteriori direttive specifiche da applicare all’avvio di quella immagine. Una sempre necessaria ` label che definisce l’etichetta e che identifica l’immagine. La direttiva initrd specifica il file da utilizzare come ram-disk per l’avvio.57 dopo il a a numero di decimi di secondo specificato con delay. Per trovare l’immagine del kernel sul disco infatti LILO utilizza la posizione dello stesso specificata dalla boot map che contiene la lista degli indirizzi sul disco da cui leggere una immagine del kernel. da usare nella fase di avvio e per la direttiva default. in tal caso gli indirizzi nella boot map u saranno tenuti in forma lineare. se questo accade e non si ` usato linear all’avvio LILO user` dei valori per cilindro. Se non si specifica prompt invece a l’avvio verr` effettuato automaticamente. specificando cilindro.1. LILO vi acceder` direttamente usando posizione a di quest’ultima nel disco. e verr` usata la nuova interfaccia di accesso della INT13 estesa. e Un’altra direttiva fondamentale ` root che definisce il dispositivo da cui montare la directory e radice.

accessibile con man lilo. cos` a ı se qualcosa non va. Il comando prende varie opzioni che permettono di soprassedere i valori specificati da lilo. Una direttiva utile per la sicurezza ` password che permette di proteggere con una password e la procedura di avvio. basato su una architettura microkernel. basta far riavviare la macchina per riavere i valori precedenti. con e funzionalit` molto avanzate e completamente modulare. come se la si scrivesse direttamente dal prompt. Specificando bypass non viene applicata nessuna restrizione. 5.3.conf. il primo ` un analogo di LILO e viene installato sul bootloader. si pu` attivarle con il o comando lilo. a oe 59 . In sostanza poi gli stadi sono due.conf. e il suo unico compito ` quello di lanciare lo stadio successivo.conf del disco. ovviamente in tal caso occorre montare il disco da qualche parte nel sistema usato come recupero e poi usare lilo -r sulla directory su cui lo si ` montato. La caratteristica principale rispetto a LILO ` che GRUB ` formato da diverse parti. accessibile con man lilo per o l’elenco completo. L’uso di questa direttiva permette di controllare le modalit` con cui si fanno partire le varie a immagini (o i sistemi operativi alternativi). dette e e stadi.conf. tutte le restrizioni che si applicano ad un e programma che deve stare nell’MBR scompaiono. attraverso ulteriori direttive da indicare nelle relative sezioni del file di configurazione. essa ` molto utile quando di si avvia e il sistema da un disco di recupero (ad esempio perch´ si ` fatto casino con LILO ed il sistema non e e parte pi`) perch´ permette di correggere i valori nel lilo. la prima ` -r che permette di specificare una directory o e nella quale eseguire un chroot prima di eseguire il comando. Anche questa direttiva deve essere seguita da una label. specificando mandatory ` necessario fornire la password anche e per avviare la relativa immagine. come gli omonimi dei razzi. GRUB ` e e 59 ma ` in grado di avviare qualunque altro tipo di nato come bootloader per il sistema HURD e sistema (compreso Linux e BSD). Per questo GRUB non solo non soffre del HURD ` un sistema libero sperimentale realizzato dalla FSF. che si presume siano funzionanti. il suo sviluppo per` ` ancora all’inizio. viene usato per lanciare il successivo. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA al prompt. al solito si pu` fare riferimento alla pagina di manuale.210 CAPITOLO 5. la direttiva read-only fa montare la radice in sola lettura (in genere ` cura degli e script di avvio di rimontarla anche in scrittura). Nel caso si voglia lanciare un altro sistema operativo (cosa che di norma si fa tramite un altro bootloader) si deve usare la direttiva other specificando la partizione su cui si trova quest’ultimo. Vale la pena per` di ricordarne due.3 L’uso di GRUB Il secondo bootloader disponibile per Linux ` GRUB (da Grand Unified Bootloader ). a meno di non fornire la password. ciascuno dei quali. Dato che la password ` scritta in chiaro nel file di configurazione. Una volta che si sono definite le impostazioni in /etc/lilo. e ripristinare il sistema u e reinstallando il bootloader come se lo si fosse fatto direttamente dal disco originale. Questo si limita a leggere il suddetto file e a reinstallare il bootloader con i nuovi valori. ed il riavvio fallisce. L’utilit` dell’opzione ` che a e questo avviene una sola volta. per cui solo il riavvio successivo user` le nuove opzioni. che poi si incaricher` di effettuare e a tutte le operazioni successive. Il grande vantaggio di GRUB ` che siccome il primo stadio deve solo occuparsi di trovare e il secondo ed ` quest’ultimo che fa tutto il lavoro. qualora e si usi questa funzione si abbia anche la cura di proteggerne l’accesso in lettura (il comando lilo in ogni caso stampa un avviso se questa direttiva viene utilizzata con un file accessibile in lettura). L’elenco completo si trova al solito nella pagina di manuale. e La seconda opzione ` -R che invece specifica una riga di comando da passare a LILO al e successivo riavvio. specificando restricted si impedisce all’utente di passare dei parametri al kernel sul prompt.

Un altro grande vantaggio ` che GRUB pu` ricevere i comandi avvio non solo dalla console. u e essendo di nuovo indipendente dal BIOS.map. o Tutti i file di GRUB sono mantenuti in /boot/grub. # # You can specify ’saved’ instead of a number. Il file device. I comandi di GRUB sono molteplici ed oltre a quelli usati per impostare l’avvio dei vari kernel. pu` usare uno qualunque dei dischi presenti. LA GESTIONE DELL’AVVIO DEL SISTEMA 211 problema del 1024-simo cilindro. e cosicch´ non solo si pu` fare riferimento alle immagini del kernel attraverso un pathname. ed un help on line con il comando help. ma. grub-install: questo prende come parametro il dispositivo su cui si vuole installare GRUB. in ordine di rilevazione. si pu` dirgli di usare una radice diversa con o l’opzione --root-directory=DIR. quindi anche questi verrebbero identificati con la sigla hdN (con N dipendente dall’ordine di rilevamento). e la shell di GRUB offre funzionalit` avanzate a ` come l’auto-completamento di comandi e nomi.map (fd0) /dev/fd0 (hd0) /dev/hda che ci mostra come su questa macchina sia presente un floppy ed un hard disk. Si tenga presente che GRUB non distingue i nomi per i dischi SCSI.map contiene invece la lista dei dispositivi riconosciuti da GRUB in fase di installazione. and # the entry number 0 is the default if the command is not used. Il comando esegue anche una scansione dei dispositivi e crea device. la differenza ` che essa ` e e e disponibile anche quando viene lanciato all’avvio. In this case. Numbering starts from 0. the default entry # is the entry saved with the command ’savedefault’.lst ` che questo permette di creare automaticamente un men` e u semigrafico (in formato testo) dal quale scegliere quale kernel (o altro sistema) avviare. Inoltre non ` limitato a lanciare il sistema dal primo canale IDE. Il file device. ma e o si ha anche a disposizione una micro-shell che consente di navigare attraverso un filesystem ed esplorarne il contenuto. e o ma anche via seriale e via rete. GRUB identifica i dispositivi con un nome fra parentesi tonde. E per` possibile inserire una lista di questi comandi nel file menu. il floppy viene sempre identificato con fd0 (nel caso ci siano due floppy ci sarebbe anche fd1) mentre i dischi vengono identificati. ce ne sono altri con capacit` di ricerca dei file. Questo vuol dire che basta cambiare il file di configurazione di GRUB (o sovrascrivere una immagine del kernel) perch´ la nuova versione sia usata al successivo riavvio.5. hd1. per cui questo diventa una sorta di file di configurazione. ecc. infatti se avviato normala mente mette a disposizione una specie di shell da cui eseguire i vari comandi interni. e come questi vengono mappati nella notazione interna di GRUB. In realt` GRUB non ha un vero e proprio file di configurazione.map viene generato con il comando di installazione di GRUB. Il comando copia anche nella directory /boot tutti i file di GRUB. un esempio di questo file ` il seguente: e piccardi@monk:/boot/grub$ cat device.3. Questa ` disponibile anche da Linux. Un contenuto tipico di questo file `: e ## default num # Set the default entry to the entry number NUM. in questa directory si trovano i file stage1 e stage2 che contengono i due stadi standard usati nell’avvio. e e non ` necessario utilizzare un comando apposta come per LILO (evitando i guai che nascono e tutte le volte che ci si dimentica di farlo).lst (sempre sotto /boot/grub) o e questi verranno eseguiti automaticamente all’avvio. con hd0. dato che non ha bisogno del BIOS per gestire l’I/O. Il vantaggio di usare menu. se lo si lancia con il comando grub. a di visualizzazione e confronto del loro contenuto. il che lo rende molto pi` flessibile. e una serie di stage1_5 che contengono gli stadi intermedi che GRUB utilizza per accedere ai contenuti di vari filesystem (sono supportati tutti i principali filesystem di Linux). ma ` in grado di leggere nativamente i principali filesystem. .

Al nome del file si devono poi far seguire le opzioni da passare al kernel all’avvio.60 Questo ` uno dei motivi per cui questo programma (come tutti e e quelli essenziali all’avvio.3.0) /boot/vmlinuz-2. a o . in sostanza /dev/hda1. timeout 5 # Pretty colours color cyan/blue white/blue ## password [’--md5’] passwd # If used in the first section of a menu file.lst. che per tradizione ` /sbin/init. deve stare nella radice in /sbin. La direttiva default permette di stabilire quale.3. nella lista di immagini dichiarate. L’elenco completo delle funzionalit` di GRUB ` disponibile nel GRUB-HOWTO. disable all interactive editing # control (menu entry editor and command-line) and entries protected by the # command ’lock’ # e.4. in SEC seconds.4. ad essa si associa la direttiva root. che specifica su quale partizione cercare u il file..21 (recovery mode) (hd0. fra cui occorre comunque specificare il dispositivo da montare come radice (nell’esempio con root=/dev/hda1). seguito da una virgola e dal numero progressivo della partizione a partire da zero.21 (hd0.21 root=/dev/hda1 ro Debian GNU/Linux. L’immagine da caricare si specifica con la direttiva kernel. kernel 2.212 default CAPITOLO 5.1 una volta lanciato il kernel si cura solo dell’inizializzazione dell’hardware. che specifica una stringa che comparir` a nel men` iniziale. che effettua una ricerca dei kernel o presenti in /boot/ e crea automaticamente una le relative voci in menu. password topsecret # password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/ # password topsecret title root kernel savedefault title root kernel savedefault Debian GNU/Linux.21 root=/dev/hda1 ro single e su Debian si pu` anche usare il comando update-grub. before automatically booting the default entry # (normally the first entry defined).4. di montare la directory radice e di lanciare il programma di avvio del sistema. a e 5.0) /boot/vmlinuz-2. deve essere lanciata se l’utente non interviene. I vari kernel sono introdotti da una direttiva title. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA 0 ## timeout sec # Set a timeout. Questa viene indicata con la notazione di GRUB. Si tenga presente che questo ` relativo alla partizione stessa (non esiste in concetto di radice e in GRUB). per cui se ad esempio si ` posto /boot su un’altra partizione non ` pi` necessario e e u specificarla nel nome del file. in cui si indica fra parentesi tonda il dispositivo.4. Nel caso precedente allora si dice di cercare il kernel nella prima partizione del primo disco.. si pu` lanciare un programma qualunque indicandone il path. dopo un tempo di attesa specificato con timeout. 60 in realt` passando l’opzione init=.g. kernel 2.4 Il sistema di inizializzazione alla SysV Come accennato in sez. 5. seguita dal pathname del file.

tutto il u ` resto viene effettuato attraverso gli opportuni programmi invocati da init. che comportano l’impossibilit` di proseguire nella procedura di u a avvio. secondo quanto un runlevel all’altro. che garantiscono la ` presenza di un certo gruppo di servizi. fra la versione sviluppata alla AT/T. LA GESTIONE DELL’AVVIO DEL SISTEMA 213 Due degli errori pi` comuni. a Tutto il procedimento di avvio eseguito viene controllato da /etc/inittab. Essa origina dalla divisione che ci fu negli anni ’70. ma che offre maggiore funzionalit` u a e soprattutto ` pi` “modulare”. per questo e in genere si ` cercato di prendere il meglio da entrambe. per la sua maggiore flessibilit`. Una delle differenze a principali fra i due sistemi ` quello del procedimento di avvio. etc. 5. E a questo punto che emerge una delle principali differenze fra i vari sistemi che si ispirano a Unix.5. E specificato nel suo file di configurazione. normalmente il runlevel 0 ` usato per fermare il e sistema. e quella sviluppata a Berkley. la Slackware. I sistemi derivati da SysV usano un sistema pi` complesso. E possibile selezionare sia quali programmi (ed in che ordine) lanciare in ciascun runlevel. Il formato di questo file ` molto semplice. o si ` indicato come radice una partizione sbagliata). nella forma: id:runlevels:action:process dove il campo id deve essere una sequenza unica di 1-4 caratteri che identifica la linea (ed in certi casi delle azioni speciali). o qualche libreria. RedHat usa il 2 per l’avvio in console senza rete. 3 per l’avvio in console con la rete e 5 per l’avvio in modalit` grafica. come al solito le linee vuote o che iniziano per # vengono ignorate. a Nei sistemi derivati da BSD questo viene fatto attraverso l’esecuzione di alcuni script. lo stile di avvio di a a SysV. una sorta di modalit` operative a del sistema in cui vengono lanciati un particolare insieme di programmi. Per Debian da 2 a 5 sono tutti equivalenti. /etc/inittab.3. il runlevel 1 serve per andare nel cosiddetto single user mode.12. Per gli altri runlevel le caratteristiche possono variare da distribuzione a distribuzione (con o senza servizi di rete. quando nella modalit` in cui questi vengono avviati. avvio terminante con il login direttamente da X. numerati da 0 a 6. sono proprio quelli relativi alll’impossibilit` di montare la radice (ad esempio perch´ ci si ` a e e dimenticati di inserire nel kernel il supporto per accedere al dispositivo su cui essa si trova o quello per il suo filesystem) o all’impossibilit` di lanciare init (ad esempio perch´ si ` danneggiato il a e e programma. Un esempio di questo file ` il seguente: e GNU/Linux ` stato sviluppato da zero. Inoltre ` possibile passare da e ` compito di init portare il sistema in un certo runlevel. i dettagli e l’elenco completo si trovano al solito nella pagina di manuale accessibile con man inittab. I principali valori utilizzabili per il campo action sono riportati in tab. ha adottato questa modalit`. L’avvio “alla SysV ” avviene sulla base dei cosiddetti runlevel. e le altre prevedono quattro campi separati dal carattere “:”. e La differenza non ` tanto nel meccanismo di funzionamento del sistema. che dar` origine alla famiglia dei BSD. Attivare o meno un servizio dipende dall’inserimento o meno (al posto “giusto”) delle opportune righe di avvio all’interno di essi. sia quale runlevel utilizzare. la modalit` di recupero in cui pu` entrare nel sistema solo l’amministratore e solo a o dalla console. dato si che tratta e sempre di lanciare gli opportuni programmi. e Una volta lanciato init il kernel non esegue pi` direttamente nessun altro compito. e 61 . La gran parte delle distribuzioni di GNU/Linux61 ha adottato e u questo sistema. Nel caso di Linux solo una distribuzione. I runlevel validi sono 7. tutte le altre han preferito. il campo runlevel la lista dei runlevel (espressa coi numeri di cui sopra) cui si applica l’azione specificata dalla parola chiave del campo action mentre il campo process indica il programma che deve essere lanciato (e relative opzioni ed argomenti). che poi diventer` a SysV. mentre il runlevel 6 per riavviarlo. per cui non deriva da nessuna delle due famiglie di Unix.). con tutti i servizi disattivati e la directory radice montata in sola lettura.

il valore del runlevel viene ignorato. # # The "id" field MUST be the same as the last # characters of the device (after "tty").d/rcS # /etc/init.d/rc 6 # What to do when CTRL-ALT-DEL is pressed. ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now # What to do when the power fails/returns.d/rc 1 l2:2:wait:/etc/init. a eseguito quando viene notificato ad init il ritorno della corrente sulla linea elettrica. id:2:initdefault:# Boot-time system configuration/initialization script.12: Principali valori delle azioni indicabili nell’omonimo campo di /etc/inittab.d/rc 2 l3:3:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init. il processo viene eseguito una volta all’ingresso nel runlevel e si aspetta la sua terminazione prima di proseguire. il campo indicante il programma da eseguire viene ignorato.d/rc 4 l5:5:wait:/etc/init. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Argomento respawn wait Significato il processo viene eseguito all’ingresso nel runlevel e viene riavviato tutte le volte che termina. eseguito quando viene notificata ad init la caduta della linea elettrica da parte del programma di gestione del gruppo di continuit`. once boot initdefault ctrlaltdel powerwait powerokwait powerfailnow Tabella 5. eseguito quando viene comunicato ad init da parte del programma di gestione del gruppo di continuit` che le a batterie si stanno esaurendo. pf::powerwait:/etc/init. # This is run first except when booting in emergency (-b) mode.d/rc 3 l4:4:wait:/etc/init. viene usato in genere per invocare shutdown. Se il numero del runlevel scelto corrisponde con almeno uno di quelli indicati nel secondo campo viene eseguito il comando .d/powerfail stop # /sbin/getty invocations for the runlevels. l0:0:wait:/etc/init. si::sysinit:/etc/init.d executes the S and K scripts upon change # of runlevel.d/powerfail start pn::powerfailnow:/etc/init. indica quale runlevel deve essere utilizzato all’avvio.d/powerfail now po::powerokwait:/etc/init.214 CAPITOLO 5. 1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 3:23:respawn:/sbin/getty 38400 tty3 4:23:respawn:/sbin/getty 38400 tty4 5:23:respawn:/sbin/getty 38400 tty5 6:23:respawn:/sbin/getty 38400 tty6 Il file viene letto da init e le azioni specificate vengono eseguite nella procedura di avvio (e ad ogni cambio di runlevel forzato con il comando telinit). esegue il processo specificato quando init riceve un segnale di SIGINT o se si utilizza la combinazione di tasti ctrl-alt-del. il processo viene eseguito una volta all’ingresso nel runlevel senza aspettare la sua terminazione prima di proseguire. il processo viene eseguito una sola volta all’avvio del sistema. # The default runlevel.

Il meccanismo di avvio di SysV si basa infatti sulla presenza. Questo ` quello che e nell’esempio viene fatto con getty per avere i terminali di login attivi sulle varie console: ogni volta che ci si collega al sistema getty eseguir` login per l’autenticazione e questo eseguir` a a la shell. LA GESTIONE DELL’AVVIO DEL SISTEMA 215 indicato nella ultima colonna secondo la modalit` specificata dal terzo campo. l’unica cosa che pu` servire ` cambiare la e o e linea dell’azione initdefault per cambiare il run level di default a cui ci si trova dopo l’avvio. Come si pu` notare dall’esempio precedente.d. in quanto alcune sono indipendenti dal runlevel scelto. Se vediamo il contenuto di queste directory vedremo che esse contengono tutte una serie di link simbolici agli script di /etc/init.d. la cui locazione. Inoltre il campo id pu` dover essere soggetto a restrizioni come nel caso delle righe di getty che richiedono o il numero della console. ` e in /etc/init. avere una procedura d’avvio personalizzata. reload che fa rileggere la configurazione. powerfailnow. Questi script prendono sempre come parametri una serie di comandi: start. restart che lo ferma e lo riavvia.63 dove N corrisponde al numero del runlevel passato come argomento e legge la lista dei file ivi presenti. per ciascun programma o servizio che si vuole attivare. powerokwait. Specificando a come azione wait si richiede che il programma sia eseguito una sola volta. ed avviarlo o fermarlo a piacere nei vari runlevel con un semplice link simbolico. e altre come initdefault impostano proprio il runlevel di default. accorgendosi della terminazione del processo. Dopo aver letto la lista dei file presenti /etc/init. In genere non c’` molto da fare con questo file. grazie all’uso dello script /etc/init. Se invece non ` necessario attendere la conclusione si pu` usare once. da e mettere in /etc/init.3. passando l’argomento stop a quelli che iniziano per K (che sta per kill ) ed l’argomento start a quelli che iniziano per S. di uno specifico script di avvio. che avvia il servizio. sono quelli usati per avviare e fermare i servizi). ad esempio per passare dal login da console a quello su X (sempre che questo sia previsto dalla distribuzione.d/rc. rilancer` di a nuovo getty. ed invoca il e programma shutdown per riavviare il computer. stop che lo ferma. e o Specificando respwan si chiede che il comando sia messo in esecuzione immediatamente. per o ciascun runlevel. nell’esempio ` questo il caso con gli script e /etc/init. per ogni servizio. grazie alle due cifre.62 all’uscita dalla shell. Se si va ad analizzare il contenuto di /etc/init. init.d a seconda delle distribuzioni. Come si pu` notare questo viene invocato. attraverso inittab si possono impostare solo o alcune azioni elementari. con un argomento pari al numero dello stesso. In questo modo i servizi indicati dai rispettivi script vengono fermati o avviati. in Debian invece non esiste).d. Un seconda azione che si pu` volere modificare (o disabilitare) ` la reazione alla combinao e zione di tasti ctrl-alt-del che nell’esempio ` specificata dall’azione ctrlaltdel. per RedHat questo significa mettere un 5 al posto di 3. senza attendere la sua conclusione per proseguire coi successivi. come vedremo fra poco. 62 . Si pu` anche.5. si richiede inoltre che esso sia rilanciato automaticamente ogni volta che se ne termina l’esecuzione. decidere anche in quale punto della sequenza di o si ricordi che mettere in esecuzione un nuovo programma non comporta la creazione di un nuovo processo.d. tutto il procedimento di avvio di SysV viene effettuato. Il problema con questo file ` che il significato di queste azioni non ` di immediata comprensioe e ne.d/rc (che. In questo modo ` possibile. nella catena di esecuzioni successive il processo rester` sempre lo stesso.d/rc si limita ad eseguire tutti questi script in ordine alfabetico. come accennato.d/rc ci si accorger` che questo verifica a la presenza di una directory rcN. attendendo che esso sia concluso prima di passare all’azione successiva. secondo il FHS. come per powerwait. con lo stesso nome ma preceduto da una sigla composta da una S od una K seguite da un numero di due cifre. e nell’ordine stabilito dalle due cifre usate nella sigla. a 63 direttamente sotto /etc o dentro /etc/init.

2.1 Gestione delle interfacce di espansione Una delle caratteristiche essenziali dell’architettura hardware dei computer moderni ` quella di e disporre di opportune interfacce di espansione in cui inserire delle schede dedicate che permettono l’uso di nuove periferiche. seguendo il criterio fondamentale dell’archietettura di un sistema unix-like per cui tutto ` un file. La struttura di base di queste interfacce ` quella di definire uno speciale canale di comunie cazione (il cosiddetto bus) sul quale far passare sia i dati che i comandi che vanno dal sistema centrale (CPU e memoria) ai dispositivi inseriti nell’interfaccia stessa (le periferiche appunto). altrimenti resteranno attivi. per l’uso i quali rimandiamo alle rispettive pagine di manuale. sono comunque disponibili innumerevoli programmi in grado di automatizzare il compito. a In Linux il supporto per queste interfacce ` ovviamente fornito direttamente dal kernel. quanto una interfaccia hardware comune che consente una comunicazione fra la CPU e la memoria e tutti i dispositivi che sono posti su detta espansione. 5.1. e viceversa. si ha cos` la possibilit` di ampliare le capacit` di un computer ı a a utilizzando degli appositi dispositivi in grado effettuare i pi` svariati compiti. Le interfacce forniscono inoltre un opportuno meccanismo che permetta di comunicare in maniera indipendente (identificando opportunamente i flussi di dati sul bus) con ciascuna delle periferiche presenti sull’interfaccia. in modo da poterne utilizzare le capacit` specifiche. 5. 7. Questi ultimi. come update-rc. u Una interfaccia di espansione in sostanza non fornisce direttamente delle funzionalit` finali. anche se non sono previsti fra quelli che verrebbero avviati se si andasse direttamente in quel runlevel. dimensioni. nel passaggio da un runlevel ad un altro infatti i servizi avviati dal e primo vengono fermati dal secondo solo in presenza di uno corrispondente script iniziante per K. a che sono specifiche del singolo dispositivo che si pone su di essa.4 La gestione di interfacce e periferiche Tratteremo in questa sezione i programmi e le funzionalit` disponibili per la configurazione di a una serie di interfacce hardware di cui i moderni computer sono dotati (escludendo le interfacce di rete che saranno trattate a parte in sez. e Si noti come la presenza dei servizi presenti in un determinato runlevel possa dipendere da come si ` arrivati ad esso. Come accennato attivare o disattivare un servizio su un certo runlevel ` semplicemente e questione di creare un link simbolico con l’opportuna sigla iniziale. .3) per le quali. Entrambe queste interfacce definiscono uno standard sia hardware (consistente in piedinatura. In questo modo il sistema operativo pu` inviare comandi e scambiare o dati con le singole periferiche. potranno e poi essere acceduti attraverso l’interfaccia generica illustrata in sez.) che software (i comandi che la CPU deve dare per comunicare con l’interfaccia ed i dispositivi presenti sulla stessa). specifiche dei segnali elettrici ecc. e che predispone tutta l’infrastruttura software con cui ` possibile leggere i dati relativi a dette e interfacce.4. 1. al di l` dell’accesso ai dispositivi a finali secondo l’interfaccia classica per cui in un sistema unix-like tutto ` un file. sono necessari e ulteriori modalit` di accesso e controllo per le funzionalit` che non sono comprese in questa a a astrazione. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA avvio lanciare un certo servizio (ad esempio un server di rete dovr` essere lanciato sempre dopo a che questa ` stata attivata). e poi dialogare con i singoli dispositivi su di esse presenti. Le due interfacce di espansione tradizionalmente pi` utilizzate nel mondo dei computer bau sati sulla architettura classica dei cosiddetti PC (in sostanza la piattaforma basata su Intel o compatibili) sono la ormai superata ISA (Industry Standard Architecture) e la pi` recente ed u ampiamente utilizzata PCI (Peripheral Component Interconnect).216 CAPITOLO 5.d per Debian o chkconfig per RedHat.

il kernel permette di esaminare lo stato corrente di queste allocazioni attraverso i due file /proc/interrupts per gli interrupt e /proc/dma per i canali DMA. ide3. il cui numero progressivo ` riportato in prima colonna.4. bttv EMU10K1. la loro gestione ` infatti completamente realizzata all’interno del kernel attravere so il codice relativo al loro supporto. questi sono un meccanismo hardware che cone sente dei trasferimenti diretti di dati da una periferica alla memoria senza che questi debbano essere letti direttamente con l’intervento della CPU. aic7xxx PS/2 Mouse ide0 ide1 che mostra l’allocazione degli interrupt. eth0 ide2. le seriali e la parallela. 65 64 . Uno dei problemi relativi alla gestione delle interfacce di espansione ` allora proprio quello e della allocazione degli interrupt e dei canali DMA ai dispositivi esistenti. viene alzato un livello su uno dei piedini del processore a questo dedicato. che pu` essere utilizzata in altre operazioni. come l’interfaccia IDE per i dischi. btaudio. o Con l’uso dei canali DMA il sistema si limita a richiedere solo un intervento iniziale della CPU per indicare al dispositivo in quale zona di memoria inviare i dati. Un interrupt ` un un meccanismo con cui un dispositivo hardware pu` inviare un e o segnale al processore64 (usando quella che si chiama una linea di interrupt) cos` che questo possa ı interrompere le operazioni e rispondere all’esigenza di attenzione cos` manifestata dal dispositivo.5. un esempio potrebbe essere il seguente: # cat /proc/interrupts CPU0 0: 584706 1: 15435 2: 0 8: 4 9: 2 10: 933383 11: 2170 12: 319229 14: 56 15: 162630 NMI: 0 LOC: 584659 ERR: 848 MIS: 0 XT-PIC XT-PIC XT-PIC XT-PIC XT-PIC XT-PIC XT-PIC XT-PIC XT-PIC XT-PIC timer keyboard cascade rtc usb-uhci. nella seconda colonna sono in senso fisico. in altre architetture sono 32 o 64. oggi sono state portate a 15). 5. In particolare alcuni interrupt sono assegnati staticamente a periferiche presenti sui PC da prima che fosse possibile una allocazione dinamica. che saranno poi trasferiti in maniera asincrona.4. gli altri poi possono essere lasciati liberi per l’uso da parte delle interfacce di espansione o di altre interfacce interne come USB (che vedremo in sez. In genere l’uso di un canale DMA si abbina sempre a quello di un interrupt che serve a segnalare la conclusione del trasferimento. cos` che la CPU sistema possa utilizzare ı i dati disponibili in memoria.4). I problemi che possono sorgere sono allora quelli dell’allocazione di queste risorse. usb-uhci. Le risorse fondamentali usate da una interfaccia sono sostanzialmente due gli interrupt e i canali DMA. La seconda risorsa ` quella dei canali DMA. Quello che interessa dal punto di vista dell’amministrazione di sistema ` capire quali sono le risorse utilizzate e come allocarle e le funzionalit` messe a die a sposizione del kernel che consentono di accedere alle informazioni relative a dette interfacce ed ai dispositivi su di esse presenti a scopo di configurazione o di controllo. LA GESTIONE DI INTERFACCE E PERIFERICHE 217 Una descrizione dettagliata del funzionamento di queste interfacce va ben oltre lo scopo di queste dispense. che hanno pochi a e interrupt e canali DMA e tutta una serie di limitazioni ereditate dall’architettura originaria che su altre piattaforme non esistono. ı In genere un processore ha un numero limitato di linee di interrupt (originariamente nei PC erano 8. in realt` questo ` un problema che si ha quasi esclusivamente sui PC intel-compatibili.65 che di norma pu` o essere eseguita a livello di BIOS. e rispettivamente ai dispositivi ad essi associati (riportati nell’ultima).

218 CAPITOLO 5. Analogamente abbiamo: # cat /proc/dma 4: cascade che mostra l’allocazione dei canali DMA.. originariamente prevedeva un bus a 8 bit. la situazione corrente dell’allocazione ` riportata dal kernel nel file /proc/ioports. con conseguente impossibilit` di usare le espansioni. L’interfaccia ISA nasce come estensione dei bus dei vecchi PC. In questo caso era cura del sistemista allocare queste risorse in maniera compatibile fra le varie schede (con le opportune impostazioni sui jumper ). una modalit` di comunicazione diretta fra la e a CPU e le stesse effettuata attraverso l’accesso ad alcune locazioni di memoria riservate (chiamate appunto in questo modo) leggendo e scrivendo dalle quali si andava a leggere e scrivere direttamente sui dispositivi. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA riportati il numero di interrupt registrati al momento ed un sommario di questa statistica ` e riportato nelle ultime quattro righe. Anche in questo caso alcune di queste porte sono allocate staticamente a periferiche standard come le seriali. quasi immediatamente ribattezzato in Plug’n Pray visto che spesso il meccanismo non funzionava e le risorse venivano allocate in maniera non compatibile con altre schede. a 67 una descrizione pi` dettagliata pu` essere trovata nel Plug-and-Play HOWTO. Una terza risorsa ` quella delle porte di I/O. che consentivano l’utilizzo di schede di espansione. quasi subito portato a 16. u Le prime versioni dell’interfaccia prevedevano la presenza di opportuni interruttori sulle schede stesse (i cosiddetti jumper ) che permettevano di selezionare in maniera manuale gli interrupt. mentre altre devono essere allocate opportunamente quando si inserisce il relativo dispositivo su una interfaccia di espansione. al giorno d’oggi ` sostanzialmente in disuso. i canali DMA o le porte di I/O da utilizzare.66 in cui le precedenti risorse potevano essere allocate dinamicamente dal sistema operativo o dal BIOS ed impostate sulle schede. un cui esempio `: e e # cat /proc/ ioports 0000-001f : dma1 0020-003f : pic1 0040-005f : timer 0060-006f : keyboard 0070-007f : rtc 0080-008f : dma page reg 00a0-00bf : pic2 00c0-00df : dma2 00f0-00ff : fpu 0170-0177 : ide1 01f0-01f7 : ide0 02e8-02ef : serial(set) 02f8-02ff : serial(set) 0376-0376 : ide1 03c0-03df : vga+ 03f6-03f6 : ide0 03f8-03ff : serial(set) 0cf8-0cff : PCI conf1 5c20-5c3f : ALi Corporation M7101 PMU . u o 66 . in particolare gli interrupt che a differenza del pi` recente bus PCI non possono essere condivisi u fra schede diverse. usata principalmente per modem interni e schede sonore. Per evitare questo problema e facilitare l’uso delle schede di espansione da parte degli utenti meno esperti venne creato uno standard per l’autoconfigurazione delle schede chiamato Plug’n Play.. Il supporto per questa funzionalit` prevede un meccanismo a 67 in cui ad ogni scheda venga assegnato un Card Serial Number di configurazione detto isolation. e e si trova soltanto sulle macchine pi` vecchie.

conf). a 69 68 . dove vengono mantenute tutte le configurazioni del BIOS) in modo da poter essere riutilizzata al riavvio successivo. Le uniche opzioni sono --help e --version il cui significato ` evidente. Se non si fa cos` e ı si corre il rischio. In questo modo un driver potr` utilizzare la scheda conoscendo i parametri che indicano a quale risorsa utilizzare. passando gli opportuni valori ai moduli che le utilizzano.come nome di file.69 altri non sono in grado di farlo70 ed il procedimento dovr` a allora essere effettuato direttamente dal sistema operativo prima di poter utilizzare i driver. cos` che al successivo riavvio con Linux queste diventino inutilizzabili. con Linux c’` il problema e che quando la configurazione viene eseguita in un secondo tempo i nuovi valori non vengono salvati nella ESCD.4. ioport e dma che permettono di utilizzare la scheda sapendo quali sono le risorse ad essa allocate. e non staremo qui a descriverlo (gli intee ressati possono fare riferimento alla pagina di manuale. In genere dovrebbe essere eseguito ad ogni riavvio. quando viene inserita una nuova scheda Plug’n Play questa verr` riconosciuta a e configurata e la configurazione sar` aggiunta nella ESCD.x. 72 alcuni BIOS meno evoluti non supportano questa funzionalit`. ed esegue le impostazioni secondo le direttive in esso contenute. usando Windows (95 o 98) sulla stessa macchina che questo configuri le schede in maniera differente. in quanto con Linux non c’` modo di salvare le impostazioni precedenti. nel caso di Linux buona parte dei moduli delle schede ISA utilizzano i parametri irq. Per questo motivo con Linux ` in genere preferibile usare le capacit` di configurazione fornite direttamente e a dal sistema. per indicare una lettura dallo standard input. a questo nel caso di Linux significa solo che si dovranno individuare quali sono le risorse assegnate. dopo di che alle varie schede vengono assegnate le risorse da utilizzare in modo che non ci sia conflitto. dato che molte delle funzionalit` vengono a dipendere dalla versione di a BIOS disponibile e da come questo e le relative schede supportano lo standard.conf ` piuttosto complesso. 70 o si pu` dire al BIOS di non farlo specificando che si ha un sistema operativo Pnp enabled che si occuper` o a del compito nella apposita sezione di configurazione. ı Il formato di isapnp. a partire da essi il supporto per la configurazione ` stato introdotto nel e kernel grazie al modulo isa-pnp che viene chiamato dai vari driver dei dispositivi per eseguire l’allocazione delle risorse. se poi si cerca di riallocare le risorse di una scheda in uso gli effetti possono essere anche peggiori. almeno fin quando i driver ed il supporto e u sulle schede funzionano correttamente. accessibile con man isapnp. Prima dei kernel della serie 2. Il comando prende come unico argomento il nome di un file di configurazione (che in genere ` e /etc/isapnp. e presentare il risultato finale al sistema operativo.5. Il problema ` che se un modulo viene caricato prima che il PnP abbia eseguito e l’allocazione la scheda non sar` utilizzabile. LA GESTIONE DI INTERFACCE E PERIFERICHE 219 (in breve CSN) che la identifica e ne vengono rilevate le caratteristiche. Eseguendo il comando si esegue la configurazione delle schede e l’assegnazione delle risorse secondo quanto specificato nella configurazione. inoltre se il meccanismo fallisce ci si pu` trovare con a o delle schede presenti ma non utilizzabili.18 si pu` e o usare anche . a partire dalla versione 1. Sebbene in teoria questo permetta a di evitare la riconfigurazione tutte le volte che si riavvia la macchina. Per tutta questa serie di motivi il meccanismo del Plug’n Play finisce con il complicare notevolmente le cose.68 Le modalit` con cui le schede vengono configurate sono sostanzialmente due: alcuni BIOS a sono in grado di eseguire da soli il procedimento di allocazione delle risorse.4. Extended System Configuration Data. l’unico modo di eseguire la configurazione era grazie al programma isapnp.71 In genere72 quando il BIOS esegue la configurazione delle schede PnP questa viene salvata nella memoria non volatile (la cosiddetta ESCD.conf) dato con buona probabilit` il blocco completo del sistema. Il programma viene comunque ancora utilizzato (e lo descriveremo a breve) anche se non ` pi` strettamente necessario. significa che la configurazione dovr` essere effettuata prima di caricare i moduli a relativi a dette schede. 71 questo. nel caso di Linux.

contando sull’uso del driver (ovviamente fornito solo per DOS/Windows) per eseguire le impostazioni. interrogando in fila tutte le porte di I/O possibili (nell’intervallo fra 0x203 e 0x3ff. stampa la versione scrive il risultato sul file passato come parametro invece che sullo standard output. o Se il comando viene invocato con un solo argomento questo viene interpretato come il valore minimo della porta di I/O da cui iniziare la scansione sul bus ISA. nel qual caso il programma non esegue la a procedura di ricerca. riservato alle schede ISA). cui richiedere le informazioni. -d -h -i -v -o . in alcuni casi questo non ` dovuto a conflitti e porta e a classificare come non valide tutte le porte. Il problema ` che in certi casi le informazioni riportate non sono accurate. 5. Pertanto ` sempre opportuno eseguire il comando in single user e mode (vedi sez. Si tenga presente per` che se l’allocazione risulta impossibile o il comando pu` bloccarsi indefinitamente nel tentativo di trovare una soluzione. ignora gli errori di checksum nel riconoscimento degli indirizzi delle porte di I/O. e potrebbe essere necessario controllare quali sono le risorse utilizzate sotto Windows per ricavare dati esatti. Si tenga presente per` che in certi casi si o possono avere conflitti (l’interrogazione cio` pu` interferire con altre schede non PnP o gi` e o a configurate) con risultati che vanno dalla successiva inutilizzabilit` delle suddette schede al a blocco completo del sistema. Se si usano due argomenti in questo caso il primo dei due assume il significato di numero di schede gi` identificate e configurate dal BIOS. per identificare quali di queste corrispondono ad un dispositivo presente sul BUS. di default per` tutte le istruzioni sono commentate. Se per` lo si invoca con l’opzione -c il comando stesso cerca o di determinare le impostazioni pi` sicure e fornisce una versione pronta (cio` senza necessit` di u e a togliere i commenti) del file stesso.220 CAPITOLO 5. L’argomento pu` essere specificato a o come valore esadecimale (se inizia con le cifre 0x). Opzione -c Significato tenta di determinare delle impostazioni sicure per i dispositivi. pertanto ` comune salvare il file e poi o e editarlo per togliere i commenti.13: Principali opzioni per il comando pnpdump. e produce un output direttamente utilizzabile senza necessit` di rimuovere i a commenti. ottale (se inizia per 0) o decimale. in questo modo ` possibile vedere le eventuali impostazioni e fatte dal BIOS o mantenute di default dalle schede stesse.13. scarica i valori dei registri interni per ogni scheda e li stampa sullo standard output. si pu` cos` limitare l’intervallo o ı evitando di interrogare schede gi` configurate o non PnP. e inizia la scansione per nuove schede a partire dall’indirizzo passato come secondo argomento. Questo significa che in certi casi le informazioni ricavate da pnpdump non sono corrette. Questo comando permette infatti di ricavare i dati delle schede presenti sulla macchina eseguendo una scansione del bus ISA alla ricerca di schede che supportano il Plug’n Play e leggendo da ciascuna di esse l’elenco delle risorse necessarie (il PnP prevede che esse siano memorizzate all’interno della scheda). Tabella 5. ignorandolo si potranno trovare lo stesso le schede presenti. direttamente nel formato utilizzato per la configurazione del programma isapnp. questo perch´ e e fintanto che le schede non erano necessarie all’avvio alcuni produttori sono stati piuttosto pigri nella specificazione delle risorse necessarie all’interno della scheda.4). 5. stampa un messaggio di aiuto. Se invocato senza argomenti il comando stampa sullo standard output il risultato della scansione. Al solito per l’elenco completo ed i dettagli si faccia riferimento alla pagina di manuale.3. Le opzioni principali del comando sono riportate in tab. Il comando comunque esegue la scansione effettuando vari tentativi di comunicazione con le eventuali schede. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA che in genere questo file viene prodotto automaticamente grazie al comando pnpdump.

inoltre e il bus supporta la condivisione degli interrupt. In un bus PCI ciascuna periferica viene identificata univocamente grazie ad un indirizzo che ` composto da tre numeri: il numero di bus. dello standard sono state proposte varie estensioni (fra cui il bus AGP delle schede video che ` sostanzialmente un e PCI con frequenze operative pi` alte).4. Figura 5. che possono essere confrontati con un database delle schede prodotte (usualmente mantenuto nel file /usr/share/misc/pci. Per ciascun bus si possono poi inserire fino a 32 schede diverse (identificate per numero di dispositivo) che possono supportare fino a 8 diverse periferiche cadauna (in caso di schede multifunzione). u e In generale il kernel riporta le informazioni relative a tutte le periferiche disponibili sul bus PCI all’interno del filesystem proc nella directory /proc/bus/pci. la CPU ` collegata attraverso il cosiddetto host bridge sul bus prine cipale che ` sempre il bus 0. LA GESTIONE DI INTERFACCE E PERIFERICHE 221 Lo standard PCI Peripheral Connect Interface nasce per fornire un bus di espansione generico che fosse adatto all’evoluzione dei computer. I computer pi` recenti in genere hanno sempre almeno due bus (uno dei quali viene usato u principalmente per l’AGP). in genere gli e interrupt vengono associati sulla base dello slot su cui ` inserita la scheda di espansione. fino ad un massimo a u di 256.3MHz.5. ed in grado di supportare velocit` di trasferimento a dei dati molto superiori al precedente ISA.ids).4: Schema della disposizione del bus PCI e delle varie interfacce di espansione. Una caratteristica comune del PCI ` che i bus possono essere collegati in fra di loro e attraverso dei dispositivi appositi detti PCI bridge. il numero di dispositivo ed il numero di e funzione. Il bus nasce a 32 bit e prevede una frequenza per le operazioni di 33. pi` il file devices u .4. Uno schema della disposizione dei bus pi` comune nelle architetture PC ` in fig. infatti lo standard supporta la possibilit` di avere pi` bus (fisicamente distinti) sulla stessa macchina. che contiene una directory (chiamata con il numero corrispondente per ciascun bus presente nel sistema. u A differenza del bus ISA nel caso di PCI la allocazione delle risorse ` dinamica. il tutto compone un numero a 16 bit che viene a costituire l’indirizzo hardware della periferica sul bus PCI. per una banda passante teorica di circa 1Gbit/s. per cui con una scheda apposita si pu` o controllare un altro bus PCI contenente altre schede. Il numero di bus identifica su quale bus si trova la scheda. Un’altra caratteristica specifica del bus PCI ` che e ogni scheda riporta al suo interno (nel firmware) una serie di informazioni fra cui da una coppia di numeri che specificano sia il produttore che il tipo della scheda. ulteriori bus sono agganciati su questo con un PCI bridge e su di e essi possono essere agganciati ulteriori bus in modo da formare un albero. 5.

passando un parametro che esprime il relativo o indirizzo nella forma bus:slot.0 SCSI storage controller: Adaptec AHA-2940U/UW/D / AIC-7881U (rev 01) 00:0f. per un elenco completo si faccia al solito riferimento alla pagina di manuale del comando. Inc.L per indicare che si vuole eseguire l’operazione su un registro di dimensione pari ad un byte. latency 32. 5. u Con l’opzione -t si pu` invece avere una stampa della struttura ad albero del bus. a Il comando prende come argomento il nome del registro73 su cui si vuole operare. medium devsel. VT82C686 [Apollo Super South] (rev 40) 00:07. come il tempo massimo che un dispositivo pu` tenere il bus. Inc. attualmente deprecato. Ltd. Inc.2 USB Controller: VIA Technologies. Il comando necessita sempre di una opzione di selezione per indicare su quale dispositivo operare. Inc. Al posto del nome pu` anche essere usato un valore o esadecimale che ne indica la posizione nello spazio dei registri.14. . USB (rev 16) 00:07.1 IDE interface: VIA Technologies. Al nome del registro si possono aggiungere i suffissi .4 Host bridge: VIA Technologies. VT82C586/B/686A/B PIPC Bus Master IDE (rev 06) 00:07. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA in cui sono riportate le informazioni relative a tutte le schede presenti (ed agli eventuali moduli cui sono associate).0 Host bridge: VIA Technologies. VT8363/8365 [KT133/KM133 AGP] 00:07. lo standard PCI prevede che tutte le schede debbano avere una serie di registri di configurazione. Il comando non e a prende argomenti e stampa sullo standard output la lista delle schede rilevate sul bus PCI. VT82C686 [Apollo Super ACPI] (rev 40) 00:09. usando l’opzione -v si pu` avere una descrizione pi` dettagliata comprensiva o u delle risorse utilizzate dalla periferica stessa. o 73 . con qualcosa del tipo: [root@gont corso]# lspci 00:00. La lista dei dispositivi presenti sul bus pu` essere ottenuta anche con il comando lspci (nei o nuovi kernel questo ` il metodo canonico. VT6102 [Rhine-II] (rev 74) Subsystem: Micro-Star International Co. VT8363/8365 [KT133/KM133] (rev 03) 00:01. nelle versioni pi` vecchie o u u esisteva solo il file /proc/pci. bench´ ancora presente per compatibilit`. Ltd.3 USB Controller: VIA Technologies. Questo per` vale per le versioni di kernel pi` recenti.W e . che pu` essere utilizzato e o per interrogare e configurare i singoli dispositivi presenti sul bus. una parola (16 bit) o una parola lunga (32 bit). Inc. con qualcosa del tipo di: 0000:00:12. questa pu` essere sia -s per o usare l’indirizzo che -d) per usare l’identificativo della scheda. non-prefetchable) [size=256] Capabilities: <available only to root> e ripetendo una seconda volta l’opzione si possono avere ancora pi` dettagli.func (il formato della prima colonna del precedente esempio) dove ciascun numero identificativo pu` essere sostituito dal carattere jolly “*”. entrambe usano la stessa sintassi gi` vista in tab.222 CAPITOLO 5.: Unknown device 7120 Flags: bus master. indicando una assegnazione nella a forma registro=valore ne sar` invece cambiato il contenuto (si tenga conto che il valore deve a essere espresso in esadecimale). Inc. e sar` l’unico supportato in futuro).0 Ethernet controller: VIA Technologies. 5.. Un secondo comando utilizzabile per operare sul bus PCI ` setpci.14 per lspci. IRQ 23 I/O ports at dc00 [size=256] Memory at dffffe00 (32-bit. USB (rev 16) 00:07. Indicando solo il nome di un registro ne sar` stampato il valore corrente. Inc..B. Inc. numero di dispositivo e numero di funzione seguito da una descrizione sommaria della periferica relativa.0 PCI bridge: VIA Technologies. Le altre opzioni o principali sono riportate in tab.0 Ethernet controller: Realtek Semiconductor Co. RTL-8139/8139C/8139C+ (rev 10) 01:00.0 VGA compatible controller: nVidia Corporation NV11 [GeForce2 MX/MX 400] (rev a1) Il comando riporta nella prima colonna l’indirizzo di ciascun dispositivo ordinato per numero di bus. che contengono informazioni o controllano vari aspetti del loro funzionamento. e a che contiene una lista descrittiva delle varie schede presenti.0 ISA bridge: VIA Technologies. mentre con o -s si pu` selezionare quali dispositivi guardare.

o riporta il valore numerico degli identificatori delle schede invece di usare la descrizione testuale riportata nel database. imposta un temporizzatore scaduto il quale il dispositivo rilascia l’uso del bus (cos` si permette in uso pi` corretto del bus da parte di altri ı u dispositivi presenti). Registro device_id vendor_id latency_timer Significato identificativo del dispositivo. un e elenco completo di tutti i nomi definiti ` riportato nella pagina di manuale di setpci (i nomi sono e riportati in maiuscolo. La trattiamo a parte in quanto in realt` questa a non ` necessariamente una interfaccia collegata ad un solo PC74 e di norma viene realizzata e tramite l’uso di apposite schede (i controller SCSI ) che si inseriscono in una delle interfacce precedentemente citate (ormai esclusivamente PCI. Una seconda differenza con le interfacce generiche di sez.4. per il relativo significato si pu` fare riferimento alla dichiarazione delle constati omonime in /usr/include/linux/pci. Tabella 5. usa il file passato come parametro come database degli identificativi delle schede PCI. mostra una schematizzazione ad albero della disposizione dei dispositivi.func.2 in quanto anche essa definisce una struttura a bus su cui vengono innestati dispositivi multipli.1 ` che nonostante sia possibile e inserire dispositivi diversi su un bus SCSI. ma possono essere specificati anche in minuscolo). mostra le informazioni relative ad uno o dispositivi che corrispondono ad un certo indirizzo sul bus espresso un parametro nella forma bus:slot. e viene fatto normalmente con sistemi di dischi condivisi. 74 .2 Gestione delle interfacce SCSI L’interfaccia SCSI (Small Computer System Interface) potrebbe essere inserita fra le interfacce di espansione generiche trattate in sez. anche se alcuni vecchi controller usavano l’interfaccia ISA) e vengono utilizzati tramite esse. valore (in sola lettura) del tempo minimo per il quale deve essere garantito l’uso del bus al dispositivo (in unit` di quarti di a microsecondo).h o o alle specifiche dello standard PCI.4. LA GESTIONE DI INTERFACCE E PERIFERICHE Opzione -v -n -b -t -s Significato aumenta le informazioni stampate (pu` essere ripetuto due volte). identificativo del produttore del dispositivo.15. riporta la lista degli interrupt per come li vede il bus (con APIC nel kernel vengono rimappati). 5.5.14: Principali opzioni per il comando lspci. a min_gnt max_lat Tabella 5. 5. l’interfaccia ` utilizzata quasi esclusivamente per e l’accesso a periferiche di stoccaggio di dati (principalmente dischi e nastri. 5.4. mostra le informazioni relative ai dispositivi di un singolo produttore (usando gli identificativi della scheda sulla base del valore del parametro vendorID:deviceID dove entrambi gli identificativi sono espressi come numeri esadecimali. 223 -d -i Un elenco sommario dei principali registri e del relativo significato ` riportato in tab. ma anche CD e ` infatti possibile.4. collegare pi` PC alla stessa e u interfaccia SCSI. valore (in sola lettura) che specifica quanto spesso il dispositivo necessita di accedere al bus (in unit` di quarti di microsecondo).15: Costanti identificative di alcuni registri PCI usate dal comando setpci. 5.

dei connettori a e dei segnali sono varie il che ha portato ad una discreta confusione. molte delle quali relative alla gestione dei segnali sui cavi ed alla composizione della cablatura stessa (terminazione attiva. che in genere si mette sul bus a unica eccezione ancora in uso ` quella degli primi scanner che. Altre modifiche vennero fatte riguardo la a modalit` di gestione dei segnali sui cavi ed il tipo di cablatura.5: Schema della struttura delle interfacce SCSI. consentendo fino ad un massimo di 8 periferiche sul bus. Lo schema classico di una interfaccia SCSI ` riportato in fig. Infine il bus non ` di solito cablato in soluzione e e unica su una piastra madre. segnali differenziali. In questo modo si otteneva a parit` di frequenza (con il cosiddetto Fast a Wide SCSI ) un raddoppio della velocit` di trasferimento 20MiB/s. del 1986) si sono susseguite molte modifiche (lo SCSI-2. la scheda. questo port` allo sviluppo di a o un secondo standard (lo SCSI-2).224 CAPITOLO 5. detta controller SCSI. Ultra160 a 160MiB/s e ultimamente pure Ultra 320 a 320MiB/s. in modo da poterne ottimizzare l’ordine di esecuzione. Passi successivi sono state a l’introduzione di bus con frequenze sempre maggiori consentendo velocit` di trasferimento sempre a maggiori: Ultra SCSI a 40MiB/s. la frequenza di trasmissione u a era di 5MHz.5. Lo standard originario (SCSI-1) prevedeva un bus basato su un connettore a 50 pin. in a contrapposizione con il precedente. di cui 8 (pi` uno di parit`) erano riservati per la trasmissione dei dati. Uno dei problemi maggiori con le interfacce SCSI ` che dalla prima definizione dello standard e (SCSI-1. u Figura 5. 5. venivano pilotati da una interfaccia SCSI. ma pu` essere realizzato anche con un insieme di connettori che o collegano fra loro le varie periferiche. il bus prevede l’esistenza e di almeno una unit` di controllo. che richiede un connettore diverso a 68 pin. nuovi connettori). erano poi a previste 4 linee per gli indirizzi. Lo standard prevedeva una lunga serie di estensioni. Ultra2 a 80MiB/s.75 ed il protocollo stesso della trasmissione dei dati sul bus ` dedicato a questo tipo di lavoro. chiamata Fast SCSI venne fatta aumentando la frequenza del bus a 10MHz per raddoppiare la velocit` di trasferimento. cui segue lo SCSI-3 che per` o non ` mai stato rilasciato come tale ed ` stato suddiviso in parti distinte dell’interfaccia) ma e e anche all’interno degli stessi standard le modalit` di realizzazione delle cablature. oltre ad un aumento dei comandi disponibili e all’introduzione del sistema del command queing che permetteva ad un singolo dispositivo di accettare pi` comandi. detto narrow ) raddoppiando anche il numero di periferiche inseribili nel bus. non essendo all’epoca disponibile una interfaccia e pi` semplice con sufficienti capacit`. Una delle modifiche principali (detta Wide SCSI ). con una corrispondente velocit` massima di trasferimento di 5MiB/s. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA masterizzatori) e non all’uso di periferiche generiche. Una prima modifica. prevedeva la possibilit` di usare un bus per il trasferimento dati a 16 bit (detto wide. u a 75 .

4. a questi si aggiunge il supporto generico che viene usato come interfaccia per inviare direttamente comandi ad una periferica (che viene usato per pilotare dispositivi particolari come gli scanner o i masterizzatori). il numero viene assegnato dal kernel all’avvio a seconda dell’ordine in cui rileva le schede presenti o di quando viene abilitato il supporto per bus virtuali che si utilizzeranno. nell’ordine u in cui l’adatattore stesso li presenta (che dipender` ovviamente da come ` fatto quest’ultimo). a Le periferiche accedute tramite interfaccia SCSI sono identificate attraverso quattro numeri: il primo ` l’host adapter number che identifica. L’host adapter number ` un numero progressivo che parte da zero. e a cui si collegano le altre periferiche utilizzando gli appositi connettori. in tal caso i comandi del protocollo SCSI. che per utilizzare i masterizzatori IDE attraverso un meccanismo di emulazione.4 il sistema ` stato organizzato e su tre livelli. Al livello pi` alto. secondo lo schema illustrato in fig. saranno inviati su un bus virtuale fornito dal driver per il supporto di dette funzionalit`. stanno i driver per le periferiche che si trovano sul bus. a e Anche questo ` un numero progressivo che parte da zero. quale ` l’interfaccia e e (in genere la scheda col controller. alcuni controller infatti possono gestire pi` di un bus. ad esempio il protocollo viene utilizzato sia per accedere ai dischi sul bus USB (che siano memorie a stato solido o veri e propri hard disk). e Il secondo numero ` il cosiddetto channel number. detto SCSI ID. compreso l’unit` di controllo. Oltre a quest’ultimi per` si situano a questo livello anche tutti i moduli che o consentono di utilizzare il protocollo SCSI per controllare dispositivi posti su altre interfacce. che saranno diversi a secondo della scheda SCSI utilizzata. In genere sui dispositivi questo viene stabilito a . nastri o dischi. come CD. vengono identificate attraverso a un indirizzo di identificazione. Nel caso di Linux il supporto SCSI ` presente fin dalle prime versioni del kernel. come il nome stesso indica. Tutte le periferiche sul bus. che identifica ciascun bus (detto anche. ma pu` essere anche l’interfaccia di un bus virtuale) con o cui si accede ai dispositivi. ma dato che e lo standard prevede vari tipi di periferiche a partire dal kernel 2.6. Un singolo controller pu` gestire anche pi` bus. canale SCSI ) associato ad un host adapter . utilizzati direttamente dai u programmi quando accedono ai relativi file di dispositivo. ciascuno dei quali richiede una modalit` d’accesso a distinta.6: Strutturazione del supporto alle interfacce SCSI nel kernel. e questi saranno numerati progressivamente a partire da zero. 5. e All’interno di ciascun canale si avr` poi l’identificativo del singolo dispositivo posto su di a esso (lo SCSI ID di cui abbiamo gi` parlato). invece di diventare segnali elettrici su connettore attaccato ad un controller. Figura 5. in e altra nomenclatura. Il livello intermedio costituisce il collante fra i driver dei dispositivi finali ed i driver che invece si occupano di gestire i controller per l’accesso al bus. LA GESTIONE DI INTERFACCE E PERIFERICHE 225 PCI del computer. nel qual caso sar` in grado di alloggiare pi` conneto u a u tori.5.

channel 0. del tipo di: <scsi(_adapter_number). che non hanno pi` periferiche a bordo. ID e LUN nulli. ID e LUN. id 0.10 ANSI SCSI revision: 02 Rev: 1. Qualora invece si abbia a che fare con dei CDROM si avranno dispositivi diversi. in particolare nel caso del secondo esempio si avr` (andando a controllare i messaggi di avvio) un risultato del a tipo: . o LUN.. canale. per la maggioranza dei dispositivi. o i juke-box di u a CDROM) possono avere al loro interno diverse funzionalit` che vengono allora indirizzate da un a quarto numero detto Logical Unit Name.. Come gi` mostrato nel precedente esempio sul contenuto dei messaggi di avvio ogni volta a che una periferica viene rilevata su una interfaccia SCSI gli viene assegnato un file di dispositivo. In questo caso la periferica da usare (ad esempio l’unit` a nastro o il meccanismo di controllo della libreria) viene identificata completamente a usando anche il LUN. ma ` in o e genere preimpostato al valore pi` alto (in genere 7) che ` quello che ha maggiore priorit`.01 ANSI SCSI revision: 02 Rev: 0004 ANSI SCSI revision: 02 ed in questo caso si noti come ci siano tre diversi ID per tre diverse periferiche. ed dispositivo viene riconosciuto (non essendo qui disponibile un meccanismo di assegnazione degli ID ogni dispositivo verr` associato ad una diversa interfaccia) a con valori del canale. esattamente come per i dischi IDE. in cui l’interfaccia di emulazione viene vista come scsi0. Il kernel mantiene le informazione relative alle interfacce SCSI disponibili nella directory /proc/scsi. nel caso di dischi essi sono tutti nella forma /dev/sdX dove X ` una lettera progressiva a partire da a. Per i controller invece l’identificativo pu` essere modificato dal BIOS di configurazione. SCSI device sda: 241254720 512-byte hdwr sectors (123522 MB) sda: assuming drive cache: write through sda: sda1 Attached scsi disk sda at scsi0. le eventuali partizioni saranno accedute e per numeri crescenti a partire da 1. channel. quest’ultimo dipende dal tipo di dispositivo. ed in particolare nel file scsi. anche se in alcuni confezionamenti sono disponibili dei selettori. un esempio del contenuto del file. e Pertanto una modalit` di indicare le periferiche SCSI ` quella di fornire una quadrupletta di a e numeri che indicano interfaccia. lun> e quando esse vengono riconosciute dal kernel in fase di avvio si avr` in messaggio del tipo: a scsi0 : SCSI emulation for USB Mass Storage devices Vendor: IC35L120 Model: AVV207-0 Rev: 0 0 Type: Direct-Access ANSI SCSI revision: 02 USB Mass Storage device found at 2 . u questo ` nullo. u e a Infine alcuni dispositivi pi` sofisticati (come le unit` a nastro dotate di libreria. lun 0 e si noti come in questo caso sia stato rilevato un hard-disk su USB. di norma sono presenti dei jumper che permettono di impostare le linee corrispondenti. id. quando si ha una interfaccia cui sono agganciati pi` dispositivi ` il seguente: u e root@ellington:~# cat /proc/scsi/scsi Attached devices: Host: scsi0 Channel: 00 Id: 00 Lun: 00 Vendor: MATSHITA Model: CD-R CW-7502 Type: CD-ROM Host: scsi0 Channel: 00 Id: 01 Lun: 00 Vendor: PIONEER Model: CD-ROM DR-U16S Type: CD-ROM Host: scsi0 Channel: 00 Id: 02 Lun: 00 Vendor: SEAGATE Model: ST118202LW Type: Direct-Access Rev: 4.226 CAPITOLO 5. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA dall’utente con degli appositi interruttori.

contenente un file con nome corrispondente al numero di ciascun host adapter number presente con quella interfaccia. anch’esso utilizzato. questo permette di ricavare dal e dispositivo le informazioni ad esso sottostanti come: monk:/home/piccardi/truedoc/corso# scsi_info /dev/sda SCSI_ID="0. e in quest’ultimo caso. questo pu` essere fatto con comandi come: o echo "scsi remove-single-device H C I L" > /proc/scsi/scsi echo "scsi add-single-device H C I L" > /proc/scsi/scsi dove H. Un programma storicamente utilizzato per ricavare le informazioni relative ai dispositivi SCSI ` scsi_info. (che in Debian fa parte del pacchetto pcmcia-cs). LA GESTIONE DI INTERFACCE E PERIFERICHE Attached scsi CD-ROM sr0 at scsi0. un nome equivalente. che ` di norma a carico degli utenti. funzionalit` che pu` essere utile ı a o qualora si disponga di periferiche hot-swap che possono essere estratte a caldo dal bus76 . alcuni bus infatti devono essere opportunamente terminati per cone u sentire una corretta trasmissione dei segnali. inoltre la presenza di diversi standard sullo stesso bus pu` portare a degrado di prestazioni. otterremo al suo interno due file. Ovviamente un dispositivo potr` essere rimosso solo se non ` al momento utilizzato.77 Rispetto agli equivalenti dispositivi IDE in genere dischi e CDROM SCSI hanno prestazioni superiori per la capacit` del bus di gestire l’invio di comandi multipli. lun 0 Attached scsi CD-ROM sr1 at scsi0. I ed L sono la solita quadrupletta di numeri che identifica il dispositivo. id 0.0. ` /dev/scdN. Gli altri dispositivi utilizzati sono e /dev/sgN per l’utilizzo del driver generico (quello con cui si pilotano ad esempio masterizzatori e scanner) e /dev/stN per i nastri (con l’alternativa di /dev/nstN. in cui il nastro non viene riavvolto quando arriva alla fine). channel 0. la presenza di due dispositivi con lo stesso ID infatti li e rende entrambi inutilizzabili. id 1. Infine occorre tenere sotto controllo l’allocazione degli o ID. Una caratteristica speciale del file /proc/scsi/scsi ` che questo pu` essere acceduto anche e o in scrittura. C. si possono cos` rimuovere e aggiungere dispositivi. vista per` la maggiore a o complessit` del protocollo sono anche in genere pi` costosi (per questo CD e masterizzatori a u sono ormai praticamente inesistenti. nella forma: /proc/scsi/<driver_name>/<scsi_adapter_number> cos` nelle situazioni dei due esempi illustrati potremo trovare la directory aic7xxx in caso e la ı directory usb-storage nell’altro.0" HOST="0" MODEL="IC35L120 AVV207-0" FW_REV=" 0 0" questo ` possibile solo se il bus e le periferiche sono cablati con dei connettori appositi (ad 80 pin) che e supportino questa funzionalit`.5. quando utilizziamo oltre al disco fisso anche una penna USB. u 76 . lun 0 227 i CD infatti vengono acceduti con i dispositivi /dev/srN dove N ` un numero progressivo a partire e da 0. a e Le altre informazioni presenti nella directory /proc/scsi sono una directory per ciascuna interfaccia utilizzata. con il nome del relativo modulo di kernel. a 77 si avrebbe lo stesso risultato nel caso si installassero pi` schede con lo stesso controller. Un secondo aspetto da tenere presente nel caso di dispositivi SCSI ` che in genere il cablaggio e degli stessi ` pi` delicato.4. corrispondenti alle due istanze della stessa interfaccia viste come host adapter diversi. e rimangono sostanzialmente solo dischi e nastri per l’uso professionale). channel 0.

l’assegnazione delle risorse delle porte seriali ` predefinita.sh che esegue una scansione del bus abilitando nuovi dispositivi eventualmente aggiunti dopo il boot. sia che siano modem reali che modem finti. anche se negli ultimi tempi (per la presenza di nuove interfacce pi` veloci come l’USB) tendono ad essere meno presenti. IRQ: 3 78 quelli esterni. che possono essere estese a 4. Le seriali sono presenti da sempre sui PC. come i winmodem. Port: 0x02f8. usate per lo pi` dai provider per gestire i a u modem).78 ed una delle interfacce pi` semplici per collegarsi a dispositivi esterni come router o switch programmabili. e sia le porte di I/O che gli interrupt utilizzati per le 4 porte e previste dall’architettura sono riportati in tab. Per ovviare a questo problema si pu` o utilizzare il programma di configurazione delle interfacce seriali setserial. A causa delle limitazioni dell’architettura originale dei PC. da fare e senza specificare un dispositivo.228 CAPITOLO 5. u Data la loro presenza fin dalle origini dell’architettura dei PC. Ci` u o non di meno esse restano le interfacce tipiche con cui vengono gestiti i modem. /dev/ttyS3. se utilizzato senza opzioni viene stampato un breve riassunto delle principali caratteristiche dello stesso: monk:/home/piccardi/truedoc/corso# setserial /dev/ttyS1 /dev/ttyS1. Un caso e di conflitto pi` comune ` invece quello in cui. . Tabella 5. e prevedono appunto una comunicazione via cavo estremamente semplice (e di breve distanza) basata sull’invio dei dati lungo una linea di trasmissione. il principale ` scsiinfo che permette di interrogare un dispositivo (passato e come argomento) per ricavarne tutta una serie di propriet` (per l’elenco completo e le relative a spiegazioni si consulti la pagina di manuale). 5. ma pure alcuni di quelli interni. insieme ai file di dispositivo con cui si pu` o accedere ad essi. /dev/ttyS1.4. l’uso contemporaneo di due porte seriali crea problemi se queste condividono la stessa linea di interrupt. Infine sempre con il pacchetto scsitools viene anche fornito lo script rescan-scsi-bus. come parte di una scheda ISDN o di un modem-fax u e interno. e a Uno dei problemi pi` che si possono avere utilizzando altre porte oltre quelle standard ` u e che queste possono non essere configurate correttamente.16: Risorse e file di dispositivo usati dalle porte seriali. che riporta quelli presenti. utilizzando i comandi da inviare sul file /proc/scsi/scsi illustrati in precedenza. in cui un dato viene trasmesso appunto come una sequenza di singoli segnali che traducono direttamente il valore dello stesso espresso come sequenza di bit.16. Per questo se ` necessario e un numero maggiore di porte seriali occorre utilizzare delle schede di estensione apposite (esistono ad esempio delle schede dedicate ad alta velocit`. /dev/ttyS2. le configurazioni standard di molte schede madri prevedono due interfacce. 5. Interrupt 3 4 3 5 Porta I/O 0x3F8 0x2F8 0x3E8 0x2E8 Dispositivo /dev/ttyS0.3 Gestione delle interfacce seriali Le interfacce seriali sono una delle prime interfacce create per la comunicazione fra computer. viene installata una nuova interfaccia seriale ed in tal caso occorrer` verificare questa a non sia sulla stessa linea di interrupt di una porta seriale che ` gi` in uso. Questo prende come primo argomento il file di dispositivo da configurare (o controllare). per le quali il kernel ` in grado di supportare la condivisione degli interrupt. UART: 16550A. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Gran parte dei programmi di gestione dell’interfaccia SCSI sono per` distribuiti con il paco chetto scsitools. ` invece da segnalare l’uso dell’opzione -l.

insieme a quello a degli altri parametri principali. stampa un riassunto della configurazione. 16550A. richiede l’uso di una velocit` di 57600bps (bit per secondo). infine si pu` controllare o la velocit` della porta seriale con la serie di argomenti spd_* il cui significato. e e -b che riporta solo un riassunto della configurazione del dispositivo. richiede di autoconfigurare anche la linea di interrupt. imposta il divisore con cui calcolare una velocit` personalizzata. i principali valori sono 8250. imposta la frequenza delle operazioni di base. 5.4. imposta il tipo di chip. I due parametri principali impostabili dal comando sono port e irq. che fa stampare tutte le informazioni possibili. LA GESTIONE DI INTERFACCE E PERIFERICHE 229 dove sono mostrate rispettivamente il tipo di chip della porta seriale (nel caso un 16550A) la porta di I/O e la linea di interrupt utilizzate.18. a richiede l’uso di una velocit` di 230400bps (bit per secondo). 16550. a richiede una velocit` personalizzata pari a valore di baud_base diviso a per quello di divisor. ma molto semplice ad realiz- . a autoconfig auto_irq baud_base X spd_hi spd_vhi spd_shi spd_warp spd_normal spd_cust divisor N Tabella 5. a richiede l’uso di una velocit` di 38400bps (bit per secondo).17: Principali opzioni per il comando setserial. ma alcuni di questi possono essere impostati o anche da un utente normale. gli argomenti successivi al primo permettono di indicare quale parametro del dispositivo deve essere impostato dal comando. azzera tutti i valori prima di fare le impostazioni. Se invocato senza l’opzione -g. 16450. in generale soltanto l’amministratore pu` modificare i parametri dell’interfaccia. fa eseguire una autoconfigurazione al kernel (la porta di I/O deve essere gi` impostata) con cui determinare la UART e se auto_irq anche la a linea di interrupt. 5. in genere vale 115200. e Opzione -a -b -G -z Significato stampa tutte le informazioni disponibili. con none si disabilita la porta. ` riportato in tab. Si pu` o inoltre impostare a mano (qualora non venisse riconosciuta correttamente) il tipo di interfaccia (la UART. Opzione port 0xHHHH irq N uart type Significato imposta la porta di I/O. in bit per secondo. Tabella 5. al solito per una descrizione dettagliata e su pu` fare riferimento alla pagina di manuale di setserial. o 5.5. a richiede l’uso di una velocit` di 460800bps (bit per secondo). l’output delle informazioni riportate dal a comando ` controllato dalle ulteriori opzioni -a. ecc. imposta il numero della linea di interrupt. stampa le informazioni nel formato in cui vengono prese sulla riga di comando.4 Gestione delle interfacce USB L’interfaccia USB (Universal Serial Bus) nasce sulla piattaforma PC allo scopo di fornire una interfaccia di comunicazione semplificata e con prestazioni ridotte.18: Principali direttive di impostazione del comando setserial. Quando il comando viene utilizzato con l’opzione -g gli argomenti vengono interpretati come un lista di dispositivi di cui stampare le propriet`. l’elenco delle principali opzioni ` riportato in tab.17.4. Universal Asynchronous Receiver/Transmitter ) con uart. il cui significato ` ovvio e e che prendono rispettivamente come ulteriore argomento il numero di porta e di interrupt. a richiede l’uso di una velocit` di 115200bps (bit per secondo). (per la lista si faccia riferimento alla pagina di manuale). che ` il massimo raggiungibile da una seriale e standard.

A ciascuna porta USB si pu` agganciare un dispositivo o un hub. per cui si sono evitate funzionalit` avanzate come l’arbitraggio del bus che comportano una a a maggiore complessit` realizzativa per dispositivi che dovevano essere estremamente semplici a 79 . dall’host alla altre architetture non hanno queste limitazioni.7: Schema della struttura di un bus USB. secondo la struttura mostrata in fig. a cui ` direttamente collegato un concentratore (o hub) radice a cui tutti i dispositivi o e eventuali altri concentratori secondari vanno ad agganciarsi. In genere su un computer ` presente un solo host (anche se alcuni ne hanno pi` di uno. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA zare e poco costosa per la realizzazione di dispositivi semplici (ed in genere portabili. Come mostrato in fig. 5.7. ` infatti e prevista anche la capacit` di fornire alimentazione) che non necessitano di tutte le risorse (in a termini di velocit` di accesso e banda passante nella trasmissione dei dati) fornite dalle usuali a interfacce di espansione trattate in sez. ed e u ` comunque possibile aggiungerne altri usando schede di espansione) cui sono agganciate 2 o 4 e porte. ma si tenga conto che anche essi contano come unit` sul bus.1. 5.230 CAPITOLO 5. la presenza di hub secondari permette l’utilizzo di un a a maggior numero di periferiche rispetto alle porte presenti sul PC. non ` prevista nessuna possibilit` di comunicazione dei singoli dispositivi fra di e a loro. Un bus USB ` costruito in maniera gerarchica ed ` controllato da una unit` di controllo (o e e a host).7 il bus prevede due direzioni per il flusso dei dati. Il protocollo prevede che le comunicazione siano tutte controllate dall’unit` di controllo.79 Figura 5. ed i dispositivi possono solo rispondere all’unit` e o a di controllo. Il bus prevede fino ad un massimo di a 127 unit` per ciascuna unit` di controllo. pertanto le unit` disponibili per le periferiche sono in realt` a a a 127 meno il numero di hub aggiuntivi. il quale a sua volta o avr` altre porte cui agganciare altri dispositivi ed hub. ma USB ` stata progettata con un compromesso fra prestazione e ed economicit`. a che ` l’unica che pu` iniziare una comunicazione.4. 5.

pena il rischio di non far funzionare nulla per mancanza di potenza. usualmente fornita direttamente dal chipset della piastra madre. La presenza di due direzioni nel flusso di dati si riflette anche sui connettori.5Mbit/s e quelli veloci che possono usare potenzialmente fino al 90% della banda passante massima. Isochronous transfers usata per inviare e riceve dati potendo contare su una quantit` di banda garantita.1.5Mbit/s anche in condizioni ideali. ma ripetuti periodicamente.4. ma e nella serie 2. la richiesta viene ripetuta periodicamente. Interrupt transfers simili ai precedenti. indicati con downstream e upstream. La prima versione del protocollo (USB 1. Bulk transfers usata per trasmettere dati alla massima velocit` possibile in maniera affidabile. Le funzionalit` sono le stesse. mentre prestazioni tipiche sono intorno a ai 2Mbit/s. Un’altra distinzione fra i dispositivi ` fra quelli lenti (come e mouse. a utilizzando rispettivamente i moduli usb-uhci e usb-ohci (da selezionare nella relativa sezione di configurazione del kernel. a seconda che siano rivolti all’unit` di controllo (di tipo A) a o verso una periferica (di tipo B). ecc.x il supporto ` molto grezzo. viene a usata per i trasferimenti di dati da e verso i dispositivi. quindi attenzione a non sovraccaricare. Negli ultimi tempi praticamente qualunque PC compatibile viene fornito di interfaccia USB.4.0 le unit` di controllo sono a a sostanzialmente di due tipi.2.) che comunicano al massimo ad 1. che devono essere di dimensioni ridotte e trasportati con affidabilit`. usata per trasferimenti real-time (ad esempio i trasferimenti per a video e audio). per un supporto pieno delle funzionalit` del bus (ed in a a particolare per utilizzare dischi su USB) occorre comunque usare un kernel della serie 2. vengono utilizzati come meccanismo di notifica (dato che non esiste un vero e proprio interrupt). alimentati dal bus.2. avremo allora.x o successivo. In genere ` estremamente facile riconoscere quale delle due interfacce viene utilizzata. a ma senza affidabilit`. ma la seconda specifica richiede hardware a pi` semplice e quindi ` meno costosa. basta e infatti usare lspci per verificare il tipo di unit` di controllo. Per quanto riguarda USB 1. o compatibili con le specifiche Open Host Controller Interface (o OHCI) della Compaq (usata anche nel mondo Mac) o con la specifiche Universal Host Controller Interface della Intel. la USB2 permette invece di portare la banda passante ad un massimo teorico 480Mibit/s.3).80 o entrambi. viene usata per configurare i dispositivi e per supportare a i comandi di controllo di base. tastiere. vedi sez. Il supporto per USB ` stato introdotto per la prima volta a partire dal kernel 2. Tuttavia l’uso di dispositivi lenti. LA GESTIONE DI INTERFACCE E PERIFERICHE 231 periferica e viceversa. a per una macchina che ha una unit` UHCI: a che fornisce un massimo di 400 mA.7.4. che in genere sono classificati in due tipi diversi.5. a seconda dei casi. ampliando notevolmente l’utilizzabilit` del bus per a l’utilizzo con dispositivi di stoccaggio esterni (in particolare con dischi rimuovibili).0) consentiva una banda passante massima di 12Mibit/s. 80 .18 in cui sono state portate e indietro parecchie funzionalit` del 2. Inoltre i dispositivi si possono suddividere in autoalimentati. In ogni caso Linux supporta entrambi i tipi di unit` di controllo (UHCI o OHCI). almeno fino al 2. La seconda versione del protocollo. gli interrupt e l’overhaed del protocollo non consentono velocit` superiori a 8.2. inoltre vengono specificati quattro tipi di trasferimento: Control transfers utilizzati per inviare pacchetti di controllo. anche se sono disponibili schede PCI con a bordo delle unit` di controllo. 5. ma richiede un driver pi` complesso e quindi un maggior u e u carico sulla CPU.

(Wrong ID) USB Controller Flags: bus master. In questo caso sotto la directory /proc/bus/usb compariranno tante directory quanti sono i bus disponibili (numerate in ordine crescente).. e e pu` essere fissata usando modules. o Una delle caratteristiche del bus USB ` che (a differenza ad esempio di quanto avviene per e il bus SCSI) la numerazione delle periferiche presenti non deve essere effettuata a mano. . medium devsel.81 che ` in grado di rilevare la e e connessione e la disconnessione di nuove periferiche caricando (e rimuovendo) automaticamente i relativi moduli. Il bus fornisce inoltre al kernel la possibilit` di rilevare tutta una serie di informazioni dai a singoli dispositivi (il protocollo infatti prevede che questi forniscano i dati relativi a loro stessi). latency 32. o riga del tipo: none /proc/bus/usb usbdevfs defaults 0 0 a /etc/fstab. 5. L’altra caratteristica interessante del bus ` che e e esso supporta sempre la possibilit` di disconnettere a caldo i dispositivi (anche se questo non a pu` avere conseguenze poco piacevoli se fatto senza accortezza). VT82xxxxx UHCI USB 1.2 USB Controller: ServerWorks CSB6 OHCI USB Controller (rev 05) (prog-if 10 [OHCI]) Subsystem: ServerWorks: Unknown device 0220 Flags: bus master.conf (vedi sez. mentre per una unit` OHCI si avr`: a a davis:~# lspci -v . Per questo motivo in genere il o sistema ` in grado di usare un demone dedicato come hotplug.2 USB Controller: VIA Technologies. 00:0f. 82 si ricordi di abilitarne il supporto in caso di ricompilazione del kernel.. Inc. In generale la scelta di quale modulo deve essere fatta in sede di installazione. 00:04. Invece se si dispone di una unit` USB 2. IRQ 5 Memory at fe120000 (32-bit. Un sommario con una presentazione pi` leggibile degli stessi dati ` fornito invece dal file u e /proc/bus/usb/devices che riporta l’elenco di tutti i dispositivi presenti con una contenuto del tipo: T: B: 81 Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= Alloc= 0/800 us ( 0%).. #Int= 0. PCI. mentre in questo caso il modulo da utilizzare ` ehci-hcd.1. non-prefetchable) [size=4K] .. #Iso= 0 1 Spd=480 MxCh= 6 inizialmente la gestione automatica veniva effettuata tramite il demone usbmgr. contenente i relativi dati.. questo ` ormai obsoleto e e sostituito da hotplug che fornisce lo stesso tipo di funzionalit` in maniera generica per tutte le periferiche a (PCMCIA. altrimenti gran parte dei programmi di visualizzazione dei dati del bus non funzioneranno. Inc. ciascuna delle quali conterr` un file con a nome il numero associato a ciascun dispositivo presente su detto bus.. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA holland:~# lspci -v . SCSI. medium devsel. latency 32... in genere questa informazione ` disponibile sotto /proc/bus/usb una volta che si sia montato il e 82 cosa che si pu` fare automaticamente all’avvio aggiungendo una filesystem virtuale usbdevfs. USB) che possono essere connesse e disconnesse a caldo. identificata con la sigla EHCI. IRQ 9 I/O ports at b400 [size=32] Capabilities: [80] Power Management version 2 . in quanto questo compito ` eseguito dal bus stesso.4).1 Controller (rev 10) (prog-if 00 [UHCI]) Subsystem: VIA Technologies.232 CAPITOLO 5. le specifiche utilizzate sono quelle della Extended Host a Controller Interface.

Al solito si faccia riferimento alla pagina di manuale per una descrizione completa.0 SerialNumber=0000:00:10.5. infatti per ciascun dispositivo presente sul e bus viene riportata ne file una diversa sezione con tutti i dati ad esso relativi. gli identificatori del venditore e del prodotto che vengono utilizzati per selezionare automaticamente83 il modulo da utilizzare per il supporto del dispositivo.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 Vendor=04b4 ProdID=6830 Rev= 0.4.) Sub=06 Prot=50 Driver=usb-storage Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms 233 Il principale utilizzo di questo file ` per verificare se il riconoscimento di una periferica e la e relativa numerazione ` stata eseguito correttamente. Ogni sezione ` e introdotta da una linea che inizia con la lettera T e che indica il posizionamento dello dispositivo all’interno del bus. Inc.01 Manufacturer=Cypress Semiconductor Product=USB2. informazioni utili relative al dispositivo sono quelle delle stringe fornite dal produttore e mostrate nelle righe inizianti per S.org/USB-guide/book1. Per il resto della sintassi si pu` fare riferimento alla Linux o USB Guide disponibile su http://www. se si ` installato il demone hotplug. ma che in caso di fallimento possono essere utilizzati per cercare informazioni su internet. USB 2.6. 83 . Bus 001 Device 001: ID 0000:0000 Il programma pu` comunque stampare la lista anche in forma gerarchica usando l’opzione -t. Nelle righe successive sono poi riportate altre informazioni relative al dispositivo. Si possono poi usare o u le opzioni -s e -d in maniera analoga a come si fa con lspci per selezionare un singolo dispositivo sulla base rispettivamente del suo bus e numero identificativo (con la sintassi bus:num) o del produttore (usando i rispettivi identificatori cui abbiamo accennato in precedenza). Lev il livello (in termini di passaggi per eventuali hub secondari) Dev il numero progressivo assegnato. in particolare il programma lsusb permette di avere una lista molto semplice dei dispositivi presenti nella forma: piccardi@monk:~/truedoc/corso$ lsusb Bus 001 Device 002: ID 04b4:6830 Cypress Semiconductor Corp.linux-usb.06 Manufacturer=Linux 2.html Per una visualizzazione pi` intelligibile di queste informazioni si pu` usare i programmi u o del pacchetto usbutils.6 ehci_hcd Product=VIA Technologies.3 #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub Ad=81(I) Atr=03(Int. sono particolarmente importanti.) MxPS= 2 Ivl=256ms Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 0 Ver= 2. ogni nuovo dispositivo attaccato ad una porta USB e di caricare in memoria il relativo modulo. come riportati nella riga iniziante per P. che si cura di identificare. LA GESTIONE DI INTERFACCE E PERIFERICHE D: P: S: S: S: C:* I: E: T: D: P: S: S: S: C:* I: E: E: Ver= 2. tramite questi numeri ed un opportuno database e di corrispondenze.0 Storage Device SerialNumber=600000001814 #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 0mA If#= 0 Alt= 0 #EPs= 2 Cls=08(stor. o mentre si pu` ottenere informazioni molto pi` dettagliate con l’opzione -v.00 Cls=09(hub ) Sub=00 Prot=01 MxPS= 8 #Cfgs= 1 Vendor=0000 ProdID=0000 Rev= 2. dove Bus indica il numero progressivo del bus.

234 CAPITOLO 5. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA .

cos` che scrivendo in maniera ı lineare prima verr` riempito il primo e poi i successivi. Data la modalit` di scrittura comunque si a perderanno solo i dati presenti nel disco rotto. quelli che prenderemo in esame sono pertanto: linear In questo livello due o pi` dischi vengono combinati in un singolo dispositivo. L’idea di base ` quella di combinare pi` dischi indipendenti di piccole dimensioni per ottenere o e u prestazioni. partiremo con una introduzione teorica a questa tecnologia per poi vedere le varie a modalit` con cui essa viene realizzata e pu` essere utilizzata con Linux. a 1 235 .1 In generale comunque ci si suole riferire a queste configurazioni con il nome di livelli. e qualche forma di recupero potrebbe comunque essere possibile. dove si descrivevano varie tipologie di disk array. La dimensione dei singoli a dischi in questo caso ` del tutto irrilevante. Oggigiorno alcune delle configurazioni previste nell’articolo non sono pi` supportate (se non u in sistemi specializzati). con il kernel 2. I u dischi sono semplicemente accodati uno sull’altro.1 L’utilizzo del RAID Tratteremo in questa prima sezione l’utilizzo dei sistemi RAID. e Questo livello non assicura nessun tipo di ridondanza. A queste si ` aggiunta poi la notazione RAID-0 per indicare una configurazione e senza ridondanza.1 Introduzione La tecnologia RAID (acronimo che sta per Redundant Arrays of Inexpensive Disks) nasce con un articolo pubblicato nel 1987 a Berkley. o affidabilit` o quantit` di spazio disco superiori a quelle ottenibili con un qualunque a a disco SLED (Single Large Expensive Drive).x ` stata introdotta pure una tecnologia RAID-6 analoga alla RAID-5 che per` usa due dischi e o invece di uno per mantenere la ridondanza e pertanto assicura una maggiore affidabilit`. L’articolo prevedeva cinque diversi tipi di architetture RAID (da RAID-1 a RAID-5) ciascuna delle quali provvedeva diversi gradi di ridondanza per fornire tolleranza alla rottura e diversi gradi di prestazioni. ne sono poi emerse altre come la combinazione del RAID-0 con il RAID-1 (spesso indicata come RAID-10) o quella definita linear.6. una tecnologia che permette di utilizzare i dischi a gruppi (detti array) per ottenere migliori prestazioni o una maggiore affidabilit`. e se uno dei dischi si rompe si perderanno probabilmente tutti i dati. a o 6. e non le prenderemo neanche in considerazione.1.Capitolo 6 Amministrazione avanzata del sistema 6.

e se i dischi sono u veloci ed in numero sufficiente si pu` facilmente saturare la capacit` del bus. per cui basta sostituire un disco rotto e per recuperare l’intera funzionalit` dell’array. a Come controparte per l’affidabilit` le prestazioni di scrittura di un RAID-1 sono in a genere peggiori di quelle del singolo disco. ecc. se sono diversi la dimensione dell’array sar` quella del pi` piccolo dei a u dischi. dato che in questo caso non esistono. in quanto i dati devono essere scritti in contemporanea su pi` dischi. qualora per un caso fortuito venga eseguiti degli accessi a dati posti su dischi diversi. ma in questo caso si operer` su un solo disco. In questo caso i controller hardware questa viene di norma definita in fase di creazione dell’array. Gli eventuali dischi di riserva vengono utilizzati in caso di fallimento di un disco dell’array.236 CAPITOLO 6. pertanto basti che sopravviva anche un solo disco dell’array perch´ i dati siano e intatti. e non si avr` quindi nessun miglioramento delle prestazioni a a per quanto riguarda i dati che vanno a finire su di esso. appunto) di dimensione predefinita2 a che vengono scritte in sequenza su ciascuno dei vari dischi che compongono l’array: una striscia sul primo. per dare inizio ad una ricostruzione immediata dell’array stesso. e se questi sono molti (e si usa una implementazione u software) facendo passare tante copie si pu` superare il limite di banda del bus su o cui sono posti i dischi abbastanza facilmente. compresi pure quelli sugli altri dischi. in quanto ciascun disco ne ha una copia completa. In realt` poi ` ancora minore. AMMINISTRAZIONE AVANZATA DEL SISTEMA Questa configurazione non migliora le prestazioni di lettura o scrittura sulla singola operazione. I dati vengono scritti in parallelo su tutti i dischi che compongono l’array. 2 . La rottura di un disco comporta la perdita totale di tutti i dati. In questo modo la capacit` totale resta la somma di quella dei singoli dischi. Richiede almeno due dischi e per l’array e l’eventuale presenza di dischi di riserva. a differenza di linear. in quanto la probabilit` che i a e a dischi falliscano tutti insieme ` ancora minore. In questa modalit` l’MTBF u a (Mean Time Between Failure per` diminuisce proporzionalmente al numero di dischi o dell’array in quanto la probabilit` di fallimento dell’array ` equivalente a quella di a e un singolo disco moltiplicata per il numero dei dischi che compongono l’array. RAID-1 Questo ` il primo livello che fornisce della ridondanza. Se ` presente un disco di dimensioni maggiori si potr` continuare ad accedere opee a rando solo sullo spazio presente sulla parte finale dello stesso. o se o a quest’ultimo ` veloce si pu` ottenere una banda passante totale pari alla somma di e o quella dei singoli dischi. a In questo modo le prestazioni di lettura e scrittura possono essere notevolmente aumentate. in questo caso dischi dovrebbero avere e la stessa dimensione (anche se non ` strettamente necessario). ed ` uno dei parametri fondamentali per le e prestazioni dello stesso. In questo caso le e operazioni sull’array vengono distribuite sui singoli dischi. Con questo livello di RAID si aumenta l’affidabilit` in quanto la probabilit` di a a fallimento dell’array ` equivalente a quella di un singolo disco divisa per il numero e dei dischi dell’array. RAID-0 Questo livello ` anche chiamato stripe mode. Come nel caso precedente questo livello non fornisce nessuna ridondanza. fino all’ultimo per poi ricominciare con il primo. in quanto vengono eseguite in parallelo su pi` dischi. blocchi di dati continui pi` lunghi della dimensione di una striscia. Se si scrive un blocco di dati questo verr` suddiviso in strisce (le stripes. poi sul secondo. Inoltre i dischi devono essere tutti uguali. ma quando pi` utenti accedono all’array si pu` una distribuzione del u o carico sui vari dischi.

Inoltre se si sono inseriti dei dischi di riserva la ricostruzione del disco rotto o indisponibile viene fatta partire immediatamente. e le operazioni possono essere anche molto costose. o Il RAID-5 presenta inoltre. il rischio di fallimento hardware si moltiplica per il numero di dischi). per evitare il problema del collo di bottiglia. In questo modo si ottiene sia la ridondanza del RAID-1 che l’aumento di prestazioni del RAID-0. ma fintanto che almeno ne resta almeno uno attivo nei u due RAID-1 le informazioni saranno integre. ma quando ci sono molte letture contemporanee e spostamenti sui dati.1. Anche per il RAID-5 sono necessari almeno tre dischi. Rispetto al RAID-5 ha il vantaggio che possono rompersi anche pi` dischi.6. Le prestazioni in lettura sono invece migliori. Se per` si rompono due dischi i dati sono persi.3 RAID-4 Bench´ disponibile ` senz’altro il meno usato. ma non viene usato molto spesso per` perch´ il disco di parit` o e a viene a costituire un collo di bottiglia in quanto comunque tutte le informazioni devono esservi replicate. Se uno dei dischi in RAID-0 si rompe ` possibile utilizzare le u e informazioni di recupero del disco di parit` per ricostruire i dati in maniera completa. ed utilizza gli altri in RAID-0. Questo livello cerca di bilanciare i vantaggi di affidabilit` del RAID-1 con le prestaa zioni del RAID-0. quando richiedono pure le letture necessarie al calcolo delle informazioni di parit`. Inoltre nel caso di RAID software ` richiesto un discreto e consumo di risorse (sia di memoria che di CPU) per il calcolo delle informazioni di parit`. queste vengono distribuite su tutti i dischi che fanno parte dell’array. L’UTILIZZO DEL RAID 237 hanno il vantaggio di gestire internamente la replicazione dei dati. richiedendo l’invio su bus di una sola copia. l’unico caso di impiego reale ` quello di un disco veloce e affiancato ad un gruppo di dischi pi` lenti. rispetto al posizionamento (il cosiddetto seek time). u RAID-5 Come per il RAID-4 anche in questo caso si cercano di ottenere sia vantaggi di affidabilit` che quelli di prestazioni. non tanto sulla singola lettura. altrimenti l’array avr` la dimensione a del pi` piccolo di essi. Mantiene e e u delle informazioni di recupero su un disco di parit`. a I dischi devono essere di dimensioni identiche. dato che dati sono comunque distribuiti su pi` dischi. a Uno degli scopi pi` comuni di un RAID ` quello di proteggersi dal fallimento di un disco (per u e questo il RAID-0 non deve mai essere usato in un sistema di produzione. o dell’ora dine di quelle del RAID-1. Necessita di tre o pi` dischi. le informazioni di parit`. Il tutto al prezzo di un numero molto maggiore di dischi per ottenere la stessa capacit`. In scrittura invece le prestazioni sono meno predicibili. In a questo modo anche se uno dei dischi si rompe le informazioni di parit` presenti a sugli altri permettono di mantenere intatti i dati. gli u stessi vantaggi nella lettura presentati dal RAID-0. si tenga comunque presente che l’utilizzo di un livello di RAID che assicuri la ridondanza non ` mai un sostituto di una buona politica di e ` caratteristica comune degli hard disk avere tempi di risposta nettamente diversi per la lettura sequenziale e di dati. ma in questo caso. a Se si rompono due dischi si perderanno invece tutti i dati. ed ` il pi` usato quando si hanno pi` di due a e u u dischi da mettere in RAID. e si pu` approfittare o del diverso posizionamento delle testine sui dischi per leggere i dati da quello che deve compiere un minore spostamento delle testine. In tal caso infatti i dati possono essere letti in parallelo da dischi diversi. 3 . In generale comunque le prestazioni aumentano sia in lettura che in scrittura. a RAID-10 Si suole definire cos` una configurazione in cui si effettua un RAID-0 di pi` array ı u configurati in RAID-1.

1. 5. E cio` possibile far costruire al kernel stesso degli array utilizzando e qualunque tipo di dispositivo a blocchi. ma non pu` o o nulla contro la corruzione di un filesystem. i cui nomi sono analoghi ai precedenti. cio` di e un controller per i dischi che esegue le operazioni necessarie al suo interno. che ` nella sezione ATA/IDE/MFM/RLL support.3). i raidtools (disponibili nell’omonimo pacchetto) e il programma mdadm che invece ` un singolo programma che raccoglie al suo interno tutte le e funzionalit` divise nei vari componenti dei raidtools. si avr` cio` ad esempio qualcosa a e del tipo di /dev/ataraid/d0p1. a 6. attraverso e i file di dispositivo generici disposti nella directory /dev/ataraid. un utente che cancella i dati dal disco. che supporta la creazione di RAID-0. RAID-5 e linear.238 CAPITOLO 6. Una volta e partizionato l’array (che a questo punto viene visto come un altro disco) le partizioni saranno accessibili con nomi del tipo /dev/ida/c0d0p1. ` RAID-4. Nel primo caso (i controller SCSI) i vari driver sono disponibili nella sezione Block Devices della configurazione del kernel. Nel primo caso occorre poter disporre di un supporto hardware. fa si che l’opzione del RAID software nella maggior parte dei casi si riveli estremamente competitiva. molti controller hardware (specie quelli IDE) si sono rivelati essere molto pi` lenti u dell’implementazione software del kernel Linux per la scarsa potenza dei processori utilizzati. dato che gli stessi RAID software sono a loro volta dispositivi a blocchi. Come accennato i raidtools utilizzano nelle loro operazioni un apposito file di configurazione. attivabile nella sezione Multi-device support. ma in genere chiede parecchio (specie per gli SCSI) da quelle del portafogli. Nel nostro e caso ci concentreremo comunque su questi ultimi. sia SCSI che IDE.1. RAID-1. e presenta al sistema operativo l’insieme dei dischi come un dispositivo unico. e pu` funzionare anche senza l’ausilio di a o un file di configurazione (/etc/raidtab) che invece ` necessario per i raidtools. un RAID infatti pu` proteggere dal fallimento dell’hardware di un disco. In teoria un RAID hardware ` l’opzione migliore sul piano delle prestazioni in quanto non e necessita di utilizzare dalle risorse (CPU e memoria) della macchina. Inoltre la superiorit` di prestazioni ` spesso a e solo teorica. In ogni caso Linux supporta vari controller RAID hardware. Essi sono in genere accessibili attraverso i file di dispositivo posti in opportune sottodirectory di /dev a seconda del controller (ad esempio per il DAC Mylex si usa rd mentre per gli array Compaq si usa ida). unito al fatto che in genere per molti server la CPU ` una risorsa che conta assai poco in e confronto all’importanza dell’I/O su disco.1. una volta attivato il relativo supporto. 6. ed i dispositivi sono accessibili. per l’utilizzo del RAID software ` necessario utilizzare anche gli opportuni programmi in user space. un dispositivo tipico di un u array ` sempre nella forma /dev/rd/c0d0 che indica il primo array sul primo canale. Questo. AMMINISTRAZIONE AVANZATA DEL SISTEMA backup. Una volta costruiti gli array si potr` accedere ad essi con i file di dispositivo /dev/mdX. Nel caso di RAID su IDE non ci sono canali. Il file ` diviso in sezioni che e . soltanto che non presentano un numero di canale. ` possibile riutilizzarli per metterli in RAID fra di loro (pertanto ` possibile e e creare un RAID-10 mettendo semplicemente in RAID-0 un precedente array software creato in RAID-1).3 Il RAID software A parte abilitare il supporto nel kernel (cui abbiamo accennato in sez.2 Il RAID su Linux In generale per poter creare un array di dischi in RAID ci sono due opzioni fondamentali: hardware o software. di questi e esistono sostanzialmente due versioni. /etc/raidtab. o un qualunque incidente che distrugga il vostro array. I singoli array vengono identificati per “canale” (spesso i controller supportano pi` di una singola catena SCSI) e per “disco”. Per quando non si dispone di un supporto hardware Linux fornisce un supporto software. che contiene le definizioni di tutti gli array.

il persistent superblock appunto. che prende come parametro il numero di livello: i valori e possibili sono 0. ogni riga e valida contiene una direttiva seguita da un parametro che ne specifica il valore. righe vuote o inizianti per “#” vengono ignorate. a partire da 0). Una volta che si ` definito un array lo si pu` e o riutilizzare (in successive direttive raiddev. La principale ` raid-level. purch´ questo sia gi` stato definito in una precedente sezione di e a /etc/raidtab. esistono una serie di direttive opzionali che permettono di configurare altre caratteristiche del RAID. L’UTILIZZO DEL RAID 239 definiscono i vari array. Per i livelli che supportano dei dischi di riserva (vale a dire RAID-5 e RAID-1) se ne pu` specificare il numero con nr-spare-disks. Ad una direttiva device deve seguire una direttiva raid-disk che ne specifica la posizione nell’array (in ordine progressivo. A questa segue di solito la direttiva nr-raid-disks che indica il numero di dischi dell’array.1. Devono essere specificate tante a direttive device quanti sono i dischi che si ` indicato (con nr-raid-disks e nr-spare-disks) e fare parte dell’array. che prende come parametro il nome del dispositivo da utilizzare per accedere ad esso. Alla definizione di una sezione con raiddev devono seguire le altre direttive che specificano di che tipo di array di tratta. ` il seguente: e # # sample raiddev configuration file # ’old’ RAID0 array created with mdtools. Oltre a queste che sono fondamentali per definire la struttura di una array. o ivi compreso un altro RAID. Nel caso di RAID-4 esiste anche la direttiva di specificazione parity-disk che identifica il disco con le informazioni di parit`. o Per ciascuna componente dell’array si deve poi specificare con la direttiva device qual’` il e file di dispositivo con cui vi si accede. anche quando non si pu` accedere ad /etc/raidtab (ad esempio quando o . 4 o 5) oppure linear. preso dalla pagina di manuale. detto cos` in quanto in questo modo le informazioni sull’array ı sono sempre disponibili. identificati dalla direttiva raiddev. Questo pu` essere un qualunque dispositivo a blocchi. # raiddev /dev/md0 raid-level 0 nr-raid-disks 2 persistent-superblock 0 chunk-size 8 device /dev/hda1 raid-disk 0 device /dev/hdb1 raid-disk 1 raiddev /dev/md1 raid-level 5 nr-raid-disks 3 nr-spare-disks 1 persistent-superblock 1 parity-algorithm left-symmetric device /dev/sda1 raid-disk 0 device /dev/sdb1 raid-disk 1 device /dev/sdc1 raid-disk 2 device /dev/sdd1 spare-disk 0 La sintassi del file ` molto semplice. Gli eventuali dischi di riserva devono essere anch’essi dichiarati con device. in un apposito blocco di dati. Un esempio di questo file.6. 1. e poi specificati con la direttiva spare-disk. Ad esempio l’uso della direttiva persistent-superblock permette di salvare le informazioni relative alla configurazione di un array in tutte le partizioni che ne fanno parte.

ma come failed-disk) e si copia su di esso tutto il sistema. Le altre principali direttive di /etc/raidtab sono riassunte in tab. Tabella 6. 6. e cos` diventa possibile ad esempio utilizzare il suddetto ı dispositivo ed al contempo essere in grado anche di montare il dispositivo RAID che user` a ` in questo modo che di solito si effettua una installazione che usi come i restanti dischi. I valori possibili sono 1 e 0 che rispettivamente attivano e disattivano l’uso del persistent superblock. ma negli altri casi questo dice la dimensione delle strisce in cui vengono divisi i dati inviati su dischi consecutivi. delle stripe e in cui vengono divisi i dati scritti sull’array per i livelli che supportano lo striping. indica la posizione nell’array del precedente dispositivo indicato con device. ad attivare ae e anche l’autorilevamento del RAID all’avvio del kernel. indica uno dei dispositivi costituenti l’array. in genere comunque il comando rileva la presenza di dati e si rifiuta di eseguire l’inizializzazione a meno che non la si forzi con l’uso dell’opzione -f. nel a qual caso per forzare l’inizializzazione occorrer` usare l’opzione -R. AMMINISTRAZIONE AVANZATA DEL SISTEMA si ha la partizione radice sul RAID). Un’altra direttiva importante ` chunk-size che dice le dimensioni. Con l’opzione -c si pu` specificare in file di configurazioo ne alternativo. Una volta definite le propriet` dei vari RAID in /etc/raidtab si pu` inizializzare ed attia o vare ciascuno di essi con il comando mkraid. dimensione delle strisce (per le modalit` RAID che le a supportano). accessibile con man raidtab. perch´ in entrambi i casi i dati e e e vengono comunque scritti (rispettivamente su entrambi o su uno dei dischi) qualunque sia la loro dimensione. occorre per` anche aver marcato le paro tizioni che fanno parte di un array come di tipo 0xFD.240 CAPITOLO 6. indica la posizione nell’array del precedente dispositivo indicato con device come disco rotto. e Direttiva raiddev raid-level nr-raid-disks nr-spare-disks persistent-superblock chunk-size device raid-disk spare-disk failed-disk Significato introduce la sezione che definisce un array. a . in tal caso infatti il kernel riconosce la partizione come componente di un RAID. indica il numero di dischi che costituiscono direttamente l’array. facendo fare la sincronizzazione dei dischi al kernel. Questa funzionalit` ` essenziale. indica il numero di dischi di riserva inseriti nell’array. in kilobyte. che prende come parametro il file di dispositivo /dev/mdX che identifica ciascun array.1: Principali direttive di configurazione di /etc/raidtab. Riavviando ed usando l’array come radice si potr` successivamente aggiungere all’array il disco usato per a l’installazione. prende come parametro il relativo file di dispositivo. Questa non ha nessun significato n´ per il RAID-1 n´ per il linear. in sostanza questa direttiva marca il dispositivo suddetto come rotto. registra le informazioni sull’array in un apposito settore sui dispositivi sottostanti. E directory radice un array: prima si installa su un disco normale. Il comando rileva anche se i dispositivi scelti sono gi` stati utilizzati per un altro RAID. e legge dal persistent superblock tutte le informazioni necessarie per attivarlo. indica il tipo di RAID da utilizzare. Infine ` molto utile la direttiva failed-disk che permette di creare un array inserendoci un e dispositivo senza che questo venga effettivamente utilizzato. poi si crea l’array (di cui fa parte anche detto disco. Si tenga presente che l’operazione distrugge il contenuto dei dischi. a meno che questi non siano marcati come failed-disk.1. se si ` compilato il relativo supporto del kernel. al solito l’elenco completo ` nella pagina di manuale. indica la posizione nell’array del precedente dispositivo indicato con device come disco di riserva.

6. In genere un disco diventa inutilizzabile in caso di problemi hardware. sincronizzato e attivo.... entrambi i comandi vogliono come argomento il dispositivo da attivare (come identificato in /etc/raidtab) oppure si pu` usare l’opzione -a per operare su tutti gli array definiti.. Una delle funzionalit` pi` interessanti dell’uso di tecnologie RAID che supportano la ridona u danza (come RAID-1 e RAID-5) ` quella per cui ` possibile continuare ad utilizzare il sistema e e anche senza utilizzare uno dei dischi. quando invece si ha il caso di e un array in cui alcuni dischi non sono attivi e devono essere sincronizzati si avr` un risultato del a tipo: server:~# cat /proc/mdstat Personalities : [raid1] read_ahead 1024 sectors md0 : active raid1 hdc1[0] hda1[1] 5855552 blocks [2/2] [UU] md1 : active raid1 hdc2[2] hda2[1] 69336448 blocks [2/1] [_U] [>. Per questo esiste il o a comando raidhotremove che permette di forzare l’uscita di un disco dall’array (ovviamente il comando funziona solo se i restanti dischi sono sufficienti a mantenere attivo l’array). per` fintanto che fa parte dell’array sar` possibile sostituirlo.. se il dispositivo a ` hot-pluggable) senza problemi. per tutti i dettagli si faccia al solito riferimento alla pagina di manuale.] recovery = md2 : active raid1 hdc3[2] hda3[1] 4490048 blocks [2/1] [_U] 0. questo e o permetter` ad esempio di sostituire un disco mettendone uno nuovo. ed il terzo abbia un solo disco attivo. in cui ` e attivo solo il secondo disco (/dev/hda). in questo caso un disco non attivo (perch´ rimosso in precedenza o perch´ e e marcato failed-disk quando si ` creato l’array) pu` essere inserito a caldo nell’array... In sostanza l’effetto ` lo stesso che si sarebbe e e ottenuto creando l’array con la direttiva failed-disk.1.. .... ` possibile aggiungerne uno usando il o e comando raidhotadd. ma pu` essere ottenuto in qualunque o momento. una o volta tolto il disco dall’array infatti lo si potr` rimuovere (anche senza riavviare.. Il comando prende come argomenti il dispositivo dell’array seguito da quello del disco da rimuovere. Cosi come si pu` rimuovere un disco da un array. e si vede come il primo array sia integro... e non appena esso sar` a a 4 ovviamente l’array non deve essere in uso.. o Anche per questi comandi si pu` utilizzare un file di configurazione alternativo specificabile con o l’opzione -c... L’UTILIZZO DEL RAID 241 Una volta creato un array lo si pu` attivare con raidstart o si lo pu` disattivare4 con o o raidstop.. e senza dover fermare l’array (cosa che ad esempio non sarebbe e possibile se su di esso si ` posta la directory radice). il sistema stia provvedendo alla ricostruzione del secondo. L’uso di questo comando pu` servire ad esempio quando si vuole sostituire un disco.8% (581632/69336448) finish=183. un esempio di questo file ` il seguente: e davis:~# cat /proc/mdstat Personalities : [raid1] read_ahead 1024 sectors md0 : active raid1 hdc1[1] hda1[0] 116214080 blocks [2/2] [UU] unused devices: <none> in cui ` presente un solo array in RAID-1. Una volta che si ` creato ed attivato un array se ne pu` controllare lo stato sul file /proc/mdstat e o che riporta tutte le informazioni relative ai dispositivi RAID presenti nel sistema.7min speed=6232K/sec dove si hanno tre array RAID-1 costruiti con le prime tre partizioni di due dischi..

In questo modo se lo spazio disco su un volume logico si esaurisce baster` allargarlo. quello del gruppo di volumi (indicato in figura con la notazione VG. da physical volume). Pertanto e in casi come questi si ` spesso costretti a complesse operazioni di backup per sostituire il disco e riempitosi o a creare link simbolici spostando su altri dischi il contenuto di alcune delle directory un disco riempitosi. relative alle diverse possibili strategie di partizionamento. AMMINISTRAZIONE AVANZATA DEL SISTEMA reinserito nell’array il kernel provveder` automaticamente ad effettuare la sincronizzazione del a contenuto dello stesso ricostruendo l’integrit` dell’array. da volume group).242 CAPITOLO 6. evidenziate in sez.1 Introduzione Uno dei problemi che la struttura di un filesystem unix-like presenta ` che quando si riempie e un dispositivo montato su una directory non se ne pu` aumentare la dimensione direttamente o semplicemente aggiungendo un altro disco perch´ questo andrebbe montato altrove.2 Il sistema del Logical Volume Manager Tratteremo in questa sezione il sistema del Logical Volume Manager. 5. ed i volumi fisici (indicati con PV. il sistema consiste nell’introdurre un livello intermedio. uno speciale supporto nel kernel che permette di organizzare in maniera flessibile lo spazio disco per superare le difficolt` a di modificare le dimensioni delle partizioni qualora i filesystem in essa contenuti non abbiano pi` spazio sufficiente. L’uso del Logical Volume Manager permette cio` di evitare alla radiu e ce tutta le problematiche.2. all’interno di un “volume logico”.x. Per superare alla radice questo problema ` stato creato il sistema del Logical Volume Mae nager.1.6. montare. per cui usando i programmi per il ridimensionamento dei filesystem si possono allargare o restringere questi ultimi in maniera molto comoda (con certi filesystem le operazioni possono essere eseguite a “caldo”. per espanderne le dimensioni senza doversi preoccupare di ripartizionare. cos` come mostrato nel secondo esempio a ı del contenuto di /proc/mdstat.2. che viene a costituire l’interfaccia fra i volumi logici (indicati con LV da logical volume).6 cio` poter creare una copia dello stato di un volume logico ad un e certo istante utilizzando lo spazio libero nel gruppo di volumi di cui questo fa parte. a 6 si tenga presente per` che gli snapshot al momento della scrittura di queste note non sono ancora stati portati o a LVM2. .2. dove ` stato riscritto da e zero per migliorare stabilit` e prestazioni. 6. In sostanza il kernel si cura di suddividere un disco fisico in tante piccole sezioni (dette physical extent. 6. Lo schema del funzionamento del Logical Volume Manager (da qui in breve LVM) ` riportato e in fig. che lo vanno a costituire. Tutto ci` o viene realizzato allocando dello spazio libero per contenere tutte le modifiche eseguite al volume 5 da cui il nome di device mapper che il sistema ha assunto a partire dal kernel 2. con il filesystem montato). e a se lo spazio disco sottostante non ` sufficiente baster` comprare un nuovo disco ed agganciarlo al e a volume logico. e indicate in figura con PE) che poi vengono rimappate5 nei corrispondenti logical extent (indicati con LE) che vanno a costituire un volume logico. che vengono opportunamente riuniti dal kernel in modo da presentarsi come un unico disco. grazie al quale ` possibile creare un filesystem invece che su un disco singolo o su una e partizione. Una delle funzionalit` pi` interessanti di LVM ` quella di poter utilizzare il sistema per a u e poter creare degli snapshot. fare link e spostare contenuti da un disco ad un altro. che da esso si estraggono. 6. Il vantaggio ` che i volumi logici possono essere ridimensionati a piacere senza necessit` e a di toccare le partizioni o i dischi che stanno al di sotto. Quest’ultimo poi non ` altro che un dispositivo e virtuale creato a partire da un insieme di volumi fisici.

pertanto si potranno avere delle differenze a seconda che e si usi la prima versione (detta anche LVM1) o la seconda (detta LVM2). ed avere installato gli opportuni programmi in user-space.1. se infatti questo dovesse esaurirsi il volume logico originale diverrebbe inusabile. . l’unico aspetto critico ` quello di assicurarsi di avere allocato e per lo snapshot spazio sufficiente a contenere tutte le modifiche.x il sistema ` stato completamente riscritto. Una volta completato il backup si potr` rimuovere il volume a logico usato per lo snapshot ed il volume logico originario manterr` in maniera trasparente tutte a le modifiche eseguite nel frattempo. La versione corrente del filesystem sul volume logico originale registrer` tutte le a modifiche nel nuovo spazio allocato.1: Strutturazione del Logical Volume Manager.x al 2. mentre il volume creato come snapshot conterr` i dati cos` a ı come erano al momento della creazione.2. anche se alcune funzionalit` sono e u a tutt’ora in fase di adeguamento. Nel passaggio dal kernel 2.3).4. Questo ` molto comodo per poter eseguire dei backup per volumi di grosse dimensioni senza e doversi preoccupare del fatto che durante l’esecuzione del backup i dati vengano modificati. basta assicurarsi che nel breve tempo necessario a creare lo snapshot non ci siano attivit`. Per poter utilizzare LVM occorre abilitare il relativo supporto nel kernel (vedi sez. originario. 5. dopo a di che si potr` eseguire il backup con tutta calma su di esso mentre le operazioni continuano a regolarmente sul volume originale.6. In ogni caso la nuova versione ` in grado di riconoscere la presenza di volumi logici creati con la versione precedente e e di riutilizzarli senza problemi ed ` in genere pi` performante.6. IL SISTEMA DEL LOGICAL VOLUME MANAGER 243 Figura 6.

total: 1 [54. nel qual caso occorrer` eliminare la o a tabella delle partizioni (se questa viene rilevata il comando segnala un errore). u Con il comando pvscan.2. e si avr` a un risultato del tipo: monk:/home/piccardi/Truelite/documentazione/corso# pvscan pvscan -. con -u si fanno stampare gli UUID presenti. 5.Physical volume --PV Name /dev/hda3 VG Name vg PV Size 54. nel nostro caso avendo visto che abbiamo un u volume fisico su /dav/hda3 potremo ottenere: monk:/home/piccardi/Truelite/documentazione/corso# pvdisplay /dev/hda3 --.19 MB [LVM: 182 KB] PV# 1 PV Status available Allocatable yes Cur LV 3 PE Size (KByte) 4096 Total PE 13955 Free PE 4995 Allocated PE 8960 PV UUID ZeyhF7-CK5M-HXup-rc0f-Ji1U-UKqq-3rr4yE lo Universal Unique IDentifier ` un numero a 128 bit utilizzato per identificare univocamente un oggetto.52 GB] / in no VG: 0 [0] che mostra la presenza di in unico volume fisico completamente utilizzato.) pvscan -. il primo ` quello di marcare la partizione usata (vedi sez.51 GB / 19.. questo prende come argomento il file di dispositivo che identifica il volume fisico (se ne possono specificare anche pi` di uno) nel quale crea uno spazio iniziale nel quale mantenere le informazioni relative u al volume (come il gruppo di volumi di cui andr` a fare parte o l’identificatore univoco assegnato a al volume). a 7 .52 GB [114334605 secs] / NOT usable 4. fra cui N riferimento ad un MAC-address per il computer locale.51 GB free] pvscan -.244 CAPITOLO 6. AMMINISTRAZIONE AVANZATA DEL SISTEMA 6. Un secondo comando diagnostico ` pvdisplay che stampa a video le caratteristiche di uno e pi` volumi fisici (specificati come argomenti).reading all physical volumes (this may take a while. con -n si stampano solo i volumi fisici che non appartengono ad un volume logico.2.52 GB] / in use: 1 [54. Il comando pu` essere applicato anche a dischi interi.2 La gestione dei volumi fisici Il primo passo nell’uso di LVM ` quello della inizializzazione dei volumi fisici. con -s si riduce la stessa al minimo. questo prevede e due passi. Le opzioni del comando controllano sostanzialmente l’informazione che viene stampata a video. che permette di specificare uno UUID7 ) a mano invece di farlo generare automaticamente al comando e -f che forza la creazione del volume senza richiedere conferma (distruggendo eventuali dati presenti). per le altre opzioni si faccia riferimento alla pagina di manuale. Le altre opzioni riguardano aspetti specifici della gestione interna ed al solito rimandiamo alla pagina di manuale per una trattazione pi` dettagliata. si pu` eseguire una scansione dei dischi presenti per rilevare al loro o interno la presenza di volumi fisici usati da LVM. il comando si invoca senza argomenti. ` e e composto di varie sezioni. una marca temporale e una parte casuale per garantire unicit`. cosa che pu` esser o fatta facilmente con un comando di cancellazione come: dd if=/dev/zero of=/dev/hdX bs=512 count=1 Il comando prende come opzioni specifiche -u.ACTIVE PV "/dev/hda3" of VG "vg" [54.2) con il codice 0x8E per e indicare il suo uso come volume fisico e poi inizializzarla con il comando pvcreate. Infine (ma solo con la versione di LVM2) con -M si pu` indicare quale versione usare per il formato meta-dati (specificato con il o numero con lvm1 o lvm2)..

-c che produce un output coi dati separati da un carattere “:” cos` da poterlo usare facilmente all’interno di script. Una volta creato un gruppo di volumi con nome vgname si avr` a disposizione una corrispondente directory /dev/vgname/ a in cui si troveranno tutti i file (in particolare i file relativi ai volumi logici. ed inserendoci tutti i volumi fisici specificati negli argomenti successivi. che di nuovo prende come primo argomento il nome del gruppo (che stavolta deve esistere) seguito dai volumi fisici che si vogliono aggiungere (al solito specificati tramite il relativo file di dispositivo). accessibile con man lvm. e baster` reinvocarlo senza parametri per fare ripartire lo spostamento dal e a punto un cui era stato interrotto. L’opzione -s permette di definire le dimensioni dei physical extent in cui saranno divisi i volumi fisici.2. la prima ` -i che fa stampare una percentuale di e completamento delle operazioni tutte le volte che ` trascorso il numero di secondi passato come e parametro. 6. le principali sono: -s che fa stampare solo la dimensione totale del volume. e 8 .2. Per i dettagli sulle opzioni (alcune delle quali sono riportate in tab. o Infine un comando estremamente utile8 ` pvmove che permette di spostare tutti i dati mane tenuti su un certo volume fisico su di un altro (cos` da poterlo rimuovere dal gruppo di volumi ı di cui fa parte). per questo si deve usare il comando vgcreate che crea un nuovo gruppo di volumi assegnandogli il nome specificato come primo argomento. quello di rimuovere un volume da un gruppo. viene invece eseguito da vgreduce che al solito prende come primo argomento il nome del gruppo. o Il lavoro opposto. si tenga presente che un volume logico pu` mantenere un massimo di o 64k physical extent che comporta una dimensione massima di 256Gb. il valore massimo assoluto ` di 256. IL SISTEMA DEL LOGICAL VOLUME MANAGER 245 che ci mostra tutte le caratteristiche di quest’ultimo.2) si pu` fare riferimento alla pagina di manuale. che tratteremo in sez. con -n invece si pu` restringere lo spostamento ai dati relativi al solo volume logico il o cui nome si ` passato come parametro. a e anche se un supporto iniziale ` disponibile nel ramo di sviluppo. La dimensione standard ` di 4Mb. 6. Si pu` anche evitare di specificare un volume fisico di destinazione.2. mega e gigabyte. e Per le ulteriori opzioni si pu` fare riferimento alla pagina di manuale. o nel qual caso lo spazio sar` redistribuito automaticamente sui volumi appartenenti allo stesso a gruppo. a meno appunto di invocare pvmove --abort. ed il massimo assoluto ` sempre lo stesso. ed i valori possono spaziare da 4kb a e 16Gb in potenze di due. se si ha a disposizione pi` u spazio disco occorrer` usare delle dimensioni pi` ampie per i physical extent.4). Il comando prende come argomenti il volume fisico sorgente da cui rimuovere i dati e quello di destinazione su cui inviarli. l’elenco completo invece ` riportato nella pagina di manuale dedicata a LVM. se infatti il comando viene interrotto durante l’esecuzione non c’` nessun problema. Infine con --abort si pu` abortire un precedente tentativo e o di spostamento non completato. 6. 6. un elenco di opzioni comuni o a buona parte dei comandi che operano con i gruppi ed i volumi logici si trova in tab. seguito dai volumi sfortunatamente questa funzionalit` non ` stata ancora reimplementata su LVM2 all’interno del kernel stabile.3 La gestione dei gruppi di volumi Una volta inizializzati tutti i volumi fisici necessari il secondo passo ` combinarli in un gruppo e di volumi.6. a u L’opzione -l permette di definire un numero massimo di volumi logici che possono essere estratti dal gruppo. e Una volta creato un gruppo di volumi questo pu` essere espanso aggiungendovi altri volumi o fisici con vgextend. Per ı un elenco completo e i dettagli si pu` fare riferimento alla pagina di manuale. Il comando ha tre opzioni principali. perch´ il comando abbia successo tutti i volumi fisici e devono essere stati preventivamente inizializzati con pvcreate. ovviamente la destinazione deve avere spazio libero sufficiente a contenerli. con -p invece si imposta il numero e massimo di volumi fisici che possono essere inclusi. da passare come argomento numerico seguito dalle estensioni standard per indicare kilo.2. Anche per questo comando le opzioni servono a controllare l’informazione riportata.

(il default ` il primo e non ` il caso di cambiarlo).found active volume group "vg" vgscan -.2 per pvdisplay. ma se non se ne specifica uno si applica a tutti quelli presenti. e e rispettivamente con i parametri “y” e “n”. importa il livello di debug.WARNING: This program does not do a VGDA backup of your volume group Esiste poi un comando analogo di pvdisplay da usare per i gruppi di volumi..246 CAPITOLO 6. Le opzioni sono le stesse gi` viste in sez. 6. con vgdisplay si possono elencare le caratteristiche del gruppo passato come argomento. questa opzione ` disponibile solo su LVM2. pu` essere ripetuto fino a sei o volte per aumentare le informazioni stampate a video. AMMINISTRAZIONE AVANZATA DEL SISTEMA Opzione -v -d -t -h -M Significato imposta il livello di prolissit`. che si vogliono rimuovere. e esegue automaticamente il backup dei metadati quando essi vengono cambiati.reading all physical volumes (this may take a while. imposta il formato dei meta-dati..) vgscan -.2.2: Principali opzioni comuni dei comandi di gestione di LVM. -A -P Tabella 6. Altre opzioni sono -l che modifica il numero massimo di volumi logici. prende come valore y o n. Un secondo comando usato all’avvio del sistema (ma solo per LVM1. prende come valore lvm1 o lvm2 (o semplicemente il numero). a un esempio di questo comando `: e . L’opzione che ci interessa ` -a che ` quella che permette di attivare o disattivare il gruppo. passato come parametro (deve essere eseguita su un gruppo inattivo) e -x che attiva o disattiva (sempre con i parametri “y” e “n”) la possibilit` di estendere o ridurre il gruppo a togliendo o aggiungendo volumi fisici. La creazione di un gruppo di volumi ` comunque solo un primo passo. Al solito per i dettagli sul comando e le altre opzioni supportate si faccia riferimento alla pagina di manuale. esegue il comando in modalit` di test. in genere lo si lancia prima di vgchange.d" successfully created vgscan -. e e cerca di accedere al meglio ai dati quando i gruppi di volumi sono solo parzialmente accessibili."/etc/lvmtab" and "/etc/lvmtab. e l’unica opzione significativa (per le altre si consulti la pagina di manuale) ` e --mknodes che crea in /dev i file speciali necessari all’uso di dei dispositivi. prima di poterlo e utilizzare infatti questo deve essere attivato in modo da poter essere utilizzato. Ovviamente perch´ il comando abbia successo tutti i volumi che si e vogliono rimuovere dal gruppo non devono essere utilizzati. Per questo si usa in genere il comando vgchange il cui scopo ` quello di modificare le propriet` di un gruppo e a di volumi. o di tutti quelli presenti nel sistema se non si specifica nulla. stampa un messaggio di aiuto. dato che in tal caso si rimuoveranno tutti quelli non utilizzati. i dati non vengono a modificati. con l’opzione -a non ` necessario e specificare quali volumi rimuovere. Il comando al solito prende come argomento il nome del gruppo di volumi. Un esempio di questo comando `: e monk:~# vgscan vgscan -. pu` essere ripetuto fino a a o tre volte per aumentare le informazioni stampate a video. in genere gli script di avvio di LVM eseguono sempre un comando del tipo vgchange -a y. in LVM2 la cosa ` e automatica) ` vgscan che esegue una scansione dei dischi presenti per rilevare la presenza di e gruppi di volumi (analogo a quanto fa pvscan per i volumi fisici).

questo pu` o essere fatto in due modi. IL SISTEMA DEL LOGICAL VOLUME MANAGER 247 monk:~# vgdisplay --.2. Al solito per le opzioni (sono solo quelle comuni) ed i dettagli si pu` fare riferimento alla pagina di o manuale.51 GB ePD2qd-BolC-6h0T-0mm5-Th01-Aqbl-BNbdsO Quando si vogliono riunire in uno solo due gruppi di volumi si pu` utilizzare il comando o vgmerge.4 La gestione dei volumi logici Una volta creato un gruppo di volumi sar` possibile estrarre da esso lo spazio necessario a a creare un volume logico. Il comando richiede come argomento obbligatorio il nome del gruppo di volumi da utilizzare.6. 6. Se invece si vuole spezzare in due un gruppo di volumi si pu` usare il comando vgsplit. Per le opzioni (che sono sostanzialmente quelle comuni di tab. e come secondo il gruppo da inglobare nel primo. definendo con l’opzione -i un numero di stripes su cui distribuire 9 le dimensioni sono le stesse dei physical extent sottostanti. che deve essere disattivo. 6.2). l’opzione supporta anche la specificazione di altre unit` di misura come kilobyte. definite in fase di creazione del gruppo.2. Una delle funzionalit` di LVM ` che permette di suddividere i dati su pi` volumi fisici in a e u maniera analoga al RAID-0. o con l’opzione -l. Dato che i volumi logici non possono essere suddivisi fra gruppi diversi occorrer` che ciascun volume a logico esistente sia compreso interamente nei volumi fisici che restano in uno dei due gruppi. seguita dal numero di logical extent da utilizzare. seguito dai volumi fisici da inserire in quest’ultimo. o questo prende come primo argomento il nome del gruppo da cui si parte e come secondo quello del nuovo gruppo che si vuole creare. in questo caso si potr` accedere o a al nuovo volume logico usando come file di dispositivo /dev/vgname/lvname. gigabyte o terabyte se si aggiunge al numero a passato come parametro l’iniziale (va bene sia maiuscola che minuscola) della misura utilizzata. che diventer` l’unione a dei due. inoltre deve essere sempre specificata la dimensione del volume fisico che si va a creare. Il comando funziona soltanto se i due volumi sono stati creati con parametri compatibili (stessa versione dei metadata e stessa dimensione dei physical extent) e se l’unione dei due rispetta i limiti presenti sul gruppo di destinazione. Se non si specifica altro il comando crea un volume logico con un nome assegnato automaticamente al valore lvolN dove N ` il numero progressivo usato internamente dal sistema. questo prende come primo argomento il gruppo di destinazione.Volume group --VG Name VG Access VG Status VG # MAX LV Cur LV Open LV MAX LV Size Max PV Cur PV Act PV VG Size PE Size Total PE Alloc PE / Size Free PE / Size VG UUID vg read/write available/resizable 0 256 3 3 255. .99 GB 256 1 1 54. Il comando principale per eseguire questo compito ` lvcreate che crea e il volume logico allocando i logical extent necessari dalla riserva di physical extent disponibili.51 GB 4 MB 13955 8960 / 35 GB 4995 / 19.9 o con l’opzione -L seguita dalla dimensione in byte. per i dettagli si faccia riferimento alla pagina di manuale. si pu` e o per` specificare un nome qualunque con l’opzione -n lvname. megabyte.

indica la richiesta di creazione di un volume di snapshot. passato come parametro. imposta la dimensione di un volume fisico specificata in byte. in tal caso occorre usare l’opzione -s e specificare un nome con l’opzione -n. inoltre gli argomenti obbligatori diventano due: il nome del volume logico da usare come snapshot e quello del volume logico cui fare da snapshot. Se invece di un normale volume logico si vuole creare uno snapshot occorre usare modalit` a completamente diversa di invocazione del comando. Il comando supporta anche l’uso delle stripe (con le stesse opzioni di tab. imposta la dimensione di una stripe nella distribuzione dei dati su pi` volumi fisici (da specificare con un numero u n da 2 a 9 per indicare 2n kilobyte). per i dettagli al solito si pu` fare riferimento o alla pagina di manuale. gigabyte o terabyte. solo che in questo caso la dimensione pu` specificata apponendovi un segno “-” per o in particolare si avr` un enorme degrado di prestazioni qualora si usassero partizioni diverse dello stesso disco a come volumi fisici su cui distribuire le stripes. -I -l -L -n -p -r -s Tabella 6. imposta il nome del volume logico. dopo di che non rester` che ridimensionare il filesystem presente sul volume a logico (vedi sez. Opzione -i Significato indica di utilizzare il numero di stripe passato come parametro per distribuire i dati sui volumi fisici sottostanti.3) ed inoltre si pu` specificare come argomenti ulteriori una lista di volumi fisici sui quali si vuole che sia o compiuta l’estensione del volume logico.10 Se si utilizza questa funzionalit` si pu` anche determinare la dimensione delle stripes con l’opzione a o -I. importa il numero di settori da leggere in anticipo per migliorare le prestazioni (solo per LVM1). Il comando prende gli stessi argomenti ed opzioni di lvextend (esclusi quelli relativi alle stripe). il comando utilizza anche e molte delle opzioni generali accennate in tab.1. 10 .5) per avere a disposizione lo spazio aggiunto. 6. a La comodit` di LVM consiste nel fatto che una volta che si ` creato un volume logico si potr` a e a accedere a quest’ultimo con il relativo file di dispositivo e trattarlo come un qualunque disco.248 CAPITOLO 6. Come per i volumi fisici e quelli logici si possono usare i comandi lvscan e lvdisplay rispettivamente per eseguire una scansione dei volumi logici presenti e per ottenere un sommario delle relative propriet`. Un elenco delle opzioni principali del comando ` riportato in tab. il vantaggio ` che qualora si avesse la necessit` di ampliarne le dimensioni si potr` ricorrere al e a a comando lvextend. prende il valore r per indicare sola lettura o rw per indicare lettura e scrittura. 6. Se invece di aumentare le dimensioni di un volume logico le si vogliono ridurre si deve usare lvreduce. Si possono per` usare le o stesse opzioni per specificare la dimensione dell’estensione al posto di quella totale.1 per il RAID-0. 6.2.2. Anche le opzioni sono analoghe e non staremo a ripeterle.3: Principali opzioni del comando lvcreate. kilobyte. AMMINISTRAZIONE AVANZATA DEL SISTEMA i dati. apponendo al valore specificato il carattere “+”. 6. 6. Il comando permette anche di estendere le dimensioni dei volumi di snapshot. imposta la dimensione di un volume fisico per numero (passato come parametro) di logical extent.3. megabyte. Il comando richiede obbligatoriamente come argomento il volume da estendere e la dimensione finale dello stesso che deve essere specificata o con l’opzione -l in numero di logical extent o direttamente con l’opzione -L (con la stessa convenzione di lvcreate). importa i permessi sul volume logico. Valgono in questo caso le stesse considerazioni viste in sez.

l’unica opzione specifica supu portata ` -f che permette di sopprimere la richiesta di conferma della rimozione dallo standard e input. e possono e anche essere utilizzati quando di ridimensiona una partizione su un disco con parted.2. 12 che per` supporta solo accrescimenti. fa eccezione JFS. Alcuni filesystem per` supportano anche il ridimensionamento a caldo (cio` senza smontare il o e filesystem) se questo avviene per accrescimento. e e .6.5 Il ridimensionamento dei filesystem Bench´ non direttamente attinente ad LVM conviene trattare qui i comandi per il ridimensionae mento dei filesystem dato che il loro uso pi` comune ` appunto in combinazione con i comandi u e per ridurre o aumentare le dimensioni dei volumi logici di LVM. 11 questi comandi sono comunque validi qualunque sia il dispositivo su cui ` mantenuto il filesystem.13 La dimensione pu` essere indicata con la convenzione sulle unit` di misura gi` o a a illustrata in precedenza che prevede che queste siano specificate posponendo al numero la relativa iniziale. il u o comando prende come argomento uno o pi` volumi da rimuovere.2. Il comando che permette di ridimensionare un filesystem ext2 (o ext3.12 JFS) ` dotata di questa funzionalit`. e stavolta sono permessi per le dimensioni sia il segno “+” che quello “-”. XFS. inoltre se si ridimensiona una partizioni occorre avere cura che essa continui ad avere lo stesso cilindro iniziale. la struttura dei due ` e identica) ` resize2fs. per cui se si usa una dimensione troppo grande si avranno problemi. Di nuovo le opzioni sono le stesse. Si tenga presente che i dati presenti nella parte tolta con la riduzione vengono persi. il programma richiede che il filesystem sia smontato (anche se il supporto e per le operazioni a caldo ` disponibile come patch) e prende come primo argomento il dispositivo e su cui si trova il filesystem da ridimensionare. Si tenga presente che il comando non tiene assolutamente in considerazione le dimensioni del dispositivo sottostante. reiserfs. Per completare i comandi di ridimensionamento si deve citare il generico lvresize che unisce le funzionalit` dei precedenti lvreduce e lvextend permettendo ridimensionamenti in a qualunque direzione (sia crescenti che decrescenti).11 La possibilit` di ridimensionare un filesystem dipende dalla presenza di un opportuno proa gramma specifico per ciascun tipo di filesystem. Se non viene specificato un secondo argomento indicante la dimensione da usare il ridimensionamento avviene alla dimensione corrente del dispositivo. per ridimensionare un filesystem JFS infatti baster` rimontarlo con un comando del tipo: a mount -t jfs -o remount. o 13 questo significa che l’argomento non ` necessario in caso di espansione e lo ` in caso di riduzione. Come accennato ogni filesystem ha normalmente un suo programma per il ridimensionamento. a Il comando prevede l’opzione -d per abilitare il debug (che prende come parametro una bitmask indicante quali informazioni stampare). -f che forza le operazioni escludendo alcuni controlli di sicurezza e -F che scarica i dati in cache prima di iniziare. In genee a rale questa operazione pu` essere eseguita solo a filesystem inattivo (cio` senza che questo sia o e montato). Correntemente la gran parte dei filesystem presenti su Linux (ext2/ext3. il che comporta degli ovvi problemi se si vuole ridimensionare la directory radice. -p che stampa una percentuale di completamento durante le operazioni. IL SISTEMA DEL LOGICAL VOLUME MANAGER 249 richiedere una riduzione. 6. Qualora un volume logico non sia pi` utilizzato lo si pu` eliminare usando lvremove. pertanto ` fondamentale ridurre le dimensioni di un eventuale filesystem presente e sul volume logico prima di eseguirne una riduzione. che si ridimensiona con una opzione di mount. altrimenti il programma non potr` funzionare.resize=10G /dev/vg/home /home dove se non si specifica nessun parametro per l’opzione resize il ridimensionamento viene fatto alla dimensione totale del dispositivo sottostante.

uno dei problemi pi` comuni ` infatti quello del riempimento del disco.1 Visione generale Una delle risorse principali che gli amministratori di sistema devono gestire ` quella dello spazio e disco. Le quote sono sempre calcolate per ogni singolo filesystem (che deve supportare il meccanismo14 ). 6. La nuova dimensione si specifica con l’opzione -s seguita dal valore (con la solita convenzione per le unit` a di misura). Tratteremo in questa sezione il loro utilizzo e le relative modalit` di gestione. e reiserfs. se non si specifica nulla il comando user` la dimensione del a dispositivo sottostante. Il comando permette anche di specificare con l’opzione -j un dispositivo alternativo su cui mantenere il giornale. entrambe con gli ultimi kernel il supporto ` presente per ext2. 6. Del sistema esistono due versioni. che pone delle restrizioni alle risorse che un singolo utente pu` utilizzare.0 ` quella e delle quote disco. che di un gruppo o e (cio` in base al GID). L’opzione supporta anche l’uso dei segni “+” e “-” per indicare dei ridimensionamenti relativi (accrescimenti o riduzioni). e di forzare le operazioni senza eseguire controlli con -f. a 6. o Un’ultima caratteristica generale delle quote disco ` che il controllo sulla occupazione delle e risorse pu` avvenire a sia livello di un singolo utente (cio` in base all’UID). per avere pi` u informazioni nel corso delle operazioni si deve invece usare -v. e finiscono per e riempire tutto lo spazio disponibile.250 CAPITOLO 6.3. e questo avviene u e sovente perch´ alcuni utenti non si curano di controllare le risorse che usano. In pratica. Per questo motivo una delle caratteristiche presenti da sempre in sistemi multiutente ` quella e di poter imporre delle restrizioni allo spazio disco utilizzato dai singoli utenti. un meccanismo che consente di limitare la quantit` delle risorse su disco che i a singoli utenti (o gruppi) possono usare. mentre per XFS la caratteristica deve e essere esplicitamente abilitata dato che ` gestita in modo diverso.3. un e meccanismo. pertanto ` usuale attivarle sul filesystem su cui si sono piazzate le home degli utenti. a scapito pure degli altri utenti. ext3.3 Le quote disco Una delle caratteristiche avanzate della gestione dei dischi presenti fin dal kernel 2. le due risorse sono completamente indipendenti per cui ` possibile e superare il limite sul numero di file occupati pur avendo ancora spazio disco disponibile. che di entrambi. e 14 . La struttura del meccanismo di controllo opera sia sulla quantit` di o a spazio disco (cio` sul numero di blocchi) che sul numero di file (cio` sul numero di inode) e e da mettere a disposizione. o L’idea ` che in questo modo esiste un limite di occupazione delle risorse oltre il quale ogni e utente non pu` andare. si avr` la possibilit` di utilizzare il disco e a a per aggiungere un certo file se questo ` consentito dalla quota dell’utente cui apparterr` il file e a in questione o se ` consentito dalla quota di gruppo (sempre per il gruppo di appartenenza del e file). AMMINISTRAZIONE AVANZATA DEL SISTEMA Per ridimensionare un filesystem di tipo reiserfs si deve invece usare il comando resize_reiserfs. passando come argomento il dispositivo contenente il filesystem da ridimensionare. Si e tenga presente comunque che se gli utenti possono scrivere su pi` filesystem le quote opereranno u in maniera indipendente su ciascuno di essi.2 Configurazione del sistema delle quote Per poter utilizzare le quote disco occorre anzitutto abilitare il relativo supporto nel kernel nella sezione File systems della configurazione. Nel caso specifico di un sistema unix-like questo ` sempre stato realizzato attraverso le cosiddette quote disco. realizzato nel kernel. e dovranno perci` essere impostate separatamente.

se specificata con -a non controlla la radice. richiede l’esecuzione del controllo per le sole quote dei gruppi. In generale non ` necessario creare questi file a mano. a meno di non usare l’opzione -c (nel qual caso detti file non vengono letti) con i dati memorizzati su aquota.user e aquota. controlla le quote nel formato specificato. -u -g -c -v -m -M Tabella 6. rpc (per le quote su NFS) e xfs (per le quote su XFS).user e quota. anche se nei nuovi sistemi ` preferibile usare la pi` recente.4: Principali opzioni del comando quotacheck.user e aquota. forza il controllo delle quote senza rimontare il filesystem in sola lettura. 8. non legge i file con i dati delle quote esistenti.group. Questo comando deve essere sempre eseguito su un filesystem montato con le opzioni per le quote prima di abilitare le stesse (con un successivo quotaon) in modo da ricostruire lo stato dell’occupazione delle risorse sul disco. questo non ` vero per le quote su XFS.3. esegue il controllo anche con il filesystem montato in scrittura se il tentativo di rimontarlo in sola lettura fallisce. Se si vuole utilizzare il controllo delle quote il secondo passo ` segnalarne la presenza in fase e di montaggio del filesystem perch´ il kernel sia successivamente in grado di mantenere i dati e relativi all’uso del disco ed applicare le restrizioni. richiede l’esecuzione del controllo per le sole quote degli utenti. se trova delle incoerenze aggiorna le informazioni.group non sono aggiornate il meccanismo delle quote non funziona in maniera corretta.usrquota. Il comando prende come argomento il file di dispositivo su cui ` posto il filesystem da cone trollare o il rispettivo mount point presente in /etc/fstab. E in questi file che sono mantenuti i dati relativi all’uso del disco da parte di utenti e gruppi rispettivamente.16 se sono assenti infatti la prima volta e che si usa il comando quotacheck verranno creati automaticamente. 15 . riporta lo stato di avanzamento delle operazioni. LE QUOTE DISCO 251 supportate per compatibilit`. questo viene fatto utilizzando due opzioni specifiche per /etc/fstab: per le quote gli utenti si usa usrquota mentre per quelle dei gruppi grpquota. vfsv0 (per la versione 2). Il comando costruisce una tabella con dell’uso corrente del disco e la confronta.group se si usa la versione 2.grpquota 0 1 Una volta abilitato il supporto nel kernel e montato opportunamente il filesystem il passo successivo ` quello di avere presenti15 nella radice del relativo filesystem (la directory corrispone dente al mount point) dei due file quota.4). prende i valori: vfsold (per la versione 1). Si a e u tenga presente che se si vogliono usare le quote con NFS occorre che sia stato opportunamente avviato il relativo demone per la gestione (vedi sez. onde evitare delle variazioni dello spazio occupato durante il calcolo.6. un esempio di utilizzo di queste opzioni ` il seguente: e /dev/vg/home /home ext3 defaults. se infatti le informazioni di aquota. si pu` forzare l’esecuzione se il filesystem non ` montabile in o e sola lettura usando l’opzione -m.group se si usa la versione 1 del supporto ` o aquota. Opzione -a -R -F Significato controlla tutti i filesystem montati. In genere il comando necessita di montare il filesystem in sola lettura. in detto filesystem infatti le quote sono mantenute nei metadati e non e su file visibili.user e aquota. 16 alcuni HOWTO indicano di crearli vuoti con il comando touch se non sono presenti. ma questo argomento pu` essere o tralasciato con l’uso dell’opzione -a che controlla tutti i filesystem montati (tranne quelli montati via NFS).

1 le quote si applicano in maniera indipendente per ciascun filesystem.3 Gestione delle quote di utenti e gruppi Una volta attivato il configurato il supporto delle quote. Il comando prende gli stessi argomenti u di quotaon (in realt` si tratta dello stesso eseguibile. 6. inoltre se si ricorda quanto illustrato in sez. Il comando crea un file di testo temporaneo con la rappresentazione delle quote correnti per l’utente o il gruppo scelto. L’opzioni -v aumenta la prolissit` del comando stampando a ogni filesystem per il quali si sono attivate le quote. se si vuole operare su un gruppo occorre specificare l’opzione -g. una volta modificato /etc/fstab per indicare i filesystem su cui usarle. AMMINISTRAZIONE AVANZATA DEL SISTEMA Di default il comando controlla solo le quote utente. per l’elenco completo ed i dettagli al solito si faccia riferimento alla pagina di manuale. il passo successivo ` quello di impostare quali restrizioni (in termini di spazio disco e di e inode disponibili) si vogliono imporre ai vari utenti (e gruppi). si dovr` provvedere a lanciare negli script di avvio (subito dopo il a montaggio dei filesystem) un opportuno script che invochi prima quotacheck e poi quotaon. un filesystem unix-like ha due tipi di risorse. il comando infatti per default agisce sulle quote utente. Il comando prende le opzioni -u e -g con lo stesso significato di quotacheck per attivare le quote su utenti e gruppi. Una volta che si ` montata una partizione con il controllo delle quote perch´ questo sia e e applicato ` necessaria una attivazione esplicita con il comando quotaon. solo invocato con un nome diverso). Il o comando (che ` equivalente a chiamare quotaon con l’opzione -f) e notifica al kernel la richiesta e di non effettuare pi` controlli sul superamento delle quote. In sostanza per poter utilizzare le quote. a Il programma che permette di impostare le quote (ovviamente solo all’amministratore) ` e edquota. ed uno duro (detto o hard limit) che non pu` mai venir superato. durante detto periodo ` ancora e e possibile creare nuovi file o usare spazio disco superando il limite morbido. i blocchi e gli inode. e nella sua forma pi` semplice prende come argomento l’utente di cui si vogliono u modificare le quote.3. mentre con -p si stampa solo lo stato delle stesse invece di attivarle.d/quota e fa parte del pacchetto omonimo. Per le altre opzioni ed i dettagli di funzionamento al solito si pu` fare o riferimento alla pagina di manuale.3.17 Il sistema del controllo delle quote pu` anche essere disabilitato utilizzando quotaoff. all’interno del quale apparir` a un contenuto del tipo: Quotas for user piccardi: 17 nel caso di Debian lo script ` /etc/init. 6.3. uno morbido (detto appunto soft limit) che pu` essere superato per brevi periodi di tempo. ma comunque mai al di l` del limite duro. e lancia l’editor di default (in genere vi o quello stabilito dalla variabile di ambiente EDITOR). 6. Il breve periodo di tempo durante il quale ` possibile o e superare il primo limite ` detto periodo di grazia (grace period ). se le si vogliono controllare entrambe va specificata esplicitamente anche l’opzione -u. e le a due opzioni -v e -p hanno lo stesso effetto descritto in precedenza. 5. i secondi al numero di file. e attivato lo stesso con i passi appena visti. Come accennato in sez. i primi sono relativi allo spazio disco utilizzabile. se si vogliono controllare solo le quote gruppo occorre specificarlo esplicitamente usando l’opzione -g. e .2. al solito di default sono attivate soltanto quelle sugli utenti. La struttura del meccanismo delle quote disco prevede la presenza di due limiti. come per quotacheck e il comando richiede come argomento uno (o pi`) file di dispositivo su cui ` situato il filesystem u e con le quote o l’opzione -a per attivarli tutti. e su entrambi possono essere applicate delle restrizioni in maniera indipendente.4. gran parte delle distribuzioni installano automaticamente uno script di questo tipo con l’installazione dei programmi di controllo delle quote. Le altre opzioni principali sono riportate in tab.252 CAPITOLO 6.

limits (soft = 1000. il primo ` quota che permette ad un utente di verificare le condizioni delle sue quote e disco. per i dettagli e e l’elenco completo si faccia al solito riferimento alla pagina di manuale. LE QUOTE DISCO /dev/hda3: blocks in use: 2594.5. si pu` delimitare l’azione del programma ad un solo filesystem specificando quest’ultimo (indicato o per file di dispositivo) con l’opzione -f. in questo modo ` possibile effettuare una impostazione generale per un singolo e utente senza doverla poi ripetere a mano per tutti gli altri. Opzione -f -u -g -t -p Significato limita le impostazioni filesystem specificato. Tabella 6. e una loro modifica verr` ignorata. Le altre opzioni principali di quota sono riportate in tab. salvando il file ed uscendo a dall’editor questi verranno utilizzati come nuovi limiti. In realt` ` possibile specificare come argomenti pi` utenti (o gruppi) ed utilizzare l’opzione -p ae u per specificare un utente (o gruppo) di riferimento le cui impostazioni dovranno essere utilizzate per tutti gli altri. . Una volta attivare le quote si possono ci sono due comandi che permettono di verificarne lo stato. richiede l’impostazione delle quote per un gruppo. richiede i dati delle quote utente.6. per i dettagli e l’elenco completo si faccia al solito riferimento alla pagina di manuale.6: Principali opzioni del comando quota. imposta il periodo di grazia. 6. Se non si specifica nulla il comando imposta le quote per tutti i filesystem che le supportano. riporta solo le quote su filesystem locali. hard = 6500) inodes in use: 356. Opzione -f -u -g -l -q Significato limita le impostazioni filesystem specificato. hours. minutes. pu` essere omessa) stampa un resoconto delle o quote utente. modificando invece i valori dei limiti fra parentesi.6. questa ` una propriet` globale e o e a pu` essere impostata solo a livello di tutti gli utenti (o tutti i gruppi) di un singolo filesystem. il cui contenuto a sar` qualcosa del tipo: a Time units may be: days. limits (soft = 5000. richiede i dati delle quote gruppo.3. stampa le informazioni in modalit` succinta.5: Principali opzioni del comando edquota. L’amministratore (e solo lui) pu` anche richiedere il resoconto delle quote di un altro utente o o gruppo specificando quest’ultimo come argomento del comando. a Tabella 6. e Un elenco delle principali opzioni del comando edquota ` riportato in tab. richiede l’impostazione delle quote per un utente. 6. file grace period: 0 days Con la prima versione della gestione delle quote specificare un valore nullo per il periodo di grazia significava utilizzare il valore del periodo di default (una settimana) con le nuove versioni ` necessario impostare esplicitamente un limite. or seconds Grace period before enforcing soft limits for users: /dev/hda2: block grace period: 0 days. il comando con l’opzione -u (il default. hard = 1500) 253 le informazioni riguardo l’uso corrente sono riportate solo per riferimento. se si vuole controllare le quote di gruppo occorre usare l’opzione -g. specifica un utente di riferimento. Infine con l’opzione -t si pu` impostare il periodo di grazia. un limite pu` essere annullato usando il o valore 0. in o tal caso di nuovo sar` aperto un file temporaneo all’interno dell’editor di default.

. un esempio del suo risultato potrebbe essere il seguente: root@monk# repquota -a User root bin uucp man user1 user2 used 175419 18000 729 57 13046 2838 Block limits soft hard 0 0 0 0 0 0 0 0 15360 19200 5120 6400 grace File limits used soft hard 14679 0 0 735 0 0 23 0 0 10 0 0 806 1500 2250 377 1000 1500 grace ------- Il comando non prevede argomenti. a adatta le unit` di misura per spazio disco e inode.7. in quanto serve a fornire dei rapporti globali sullo stato delle quote nel sistema. stampa le informazioni in modalit` succinta. 6. Opzione -a -u -g -n -q -s -v Significato elenca i dati per tutti i filesystem in cui /etc/mtab riporta l’uso di quote. un sommario delle principali opzioni ` riportato in tab. AMMINISTRAZIONE AVANZATA DEL SISTEMA Un secondo comando per il controllo dello stato delle quote ` repquota che per` ` ad uso e oe esclusivo dell’amministratore. elenca i dati delle quote gruppo.254 CAPITOLO 6. elenca i dati delle quote utente. a riporta maggiori informazioni e stampa anche i dati delle quote anche quando non sono usate. e le opzioni servono per lo pi` a controllare le informazioni u che vengono stampate. al solito per e l’elenco completo ed i dettagli di funzionamento del comando si pu` fare riferimento alla pagina o di manuale. Tabella 6.7: Principali opzioni del comando repquota. non risolve i nomi di utenti e gruppi.

Nel e u corso degli anni sono stati sviluppati molti mezzi (cavo. grazie a delle infrastrutture dedicate. In questa sezione introduttiva esamineremo in breve alcuni concetti di base relativi alle reti. che indica le reti locali. quale l’estensione. la classificazione era molto semplice e prevedeva soltanto le due tipologie: LAN Local Area Network. quando le reti erano disponibili solo nei grandi centri di ricerca o nelle grandi imprese. 7. ed una delle meno precise.1 Un’introduzione ai concetti fondamentali delle reti. a partire dai diversi criteri che vengono usati come base per le loro classificazione. realizzate su brevi distanze. di dimensione intermedia fra LAN e WAN. la topologia con cui sono realizzate ed i protocolli di comunicazione usati. all’interno di uno stesso edificio o gruppo limitrofo di edifici (in genere una universit` o la sede di a una grande impresa) che di norma sono possedute e gestite da una sola organizzazione. AppleTalk. che indica in genere una rete una rete cittadina. in cui varie reti locali vengono integrate preliminarmente fra di loro a livello di area metropolitana.) che permettessero di far comunicare fra loro computer diversi.Capitolo 7 L’amministrazione di base delle reti 7.1. chiamati nodi o stazioni (in inglese host) vengono messi in comunicazione fra di loro in modo da potersi scambiare dati. e e tanto che attualmente oltre alle due precedenti sono state introdotte una lunga serie di altre tipologie. IPX. estendendosi potenzialmente su tutto il mondo (Internet ` un esempio di WAN).1 L’estensione Una delle forme di classificazione di una rete pi` elementari. Wide Area Network. anche questa classificazione delle reti si ` evoluta. ma viene gestita in comune e a a da pi` enti o organizzazioni. come ad esempio: MAN Metropolitan Area Network. In generale con il termine di rete si identifica quella serie di meccanismi e metodi di collegamento tramite i quali tanti singoli computer. e a cui in genere si fa riferimento per indicare la struttura che connette varie reti locali. Il campo della comunicazione via rete ` uno dei pi` vasti e complessi di tutta l’informatica. a a 255 . In origine. e molti protocolli (TCP/IP. In e questo caso la rete non ` propriet` di una entit` singola. ` quella u e per estensione o area. u WAN Con il diffondersi dei computer e delle tecnologie di comunicazione. e la suddivisione per area di estensione si ` diversificata notevolmente. fibra. che indica in generale una rete di grande estensione. ecc. Viene di norma gestita da entit` legate al governo della citt`. radio).

su distanze di pochi metri. Il canale funziona come collettore cui ogni stazione si collega con un connettore inviandovi tutti i messaggi. e ` E una rete in cui ogni stazione ha due stazioni vicine. Ogni stazione pu` osservare tutto il traffico o del canale. E potenzialmente pi` efficiente della struttura a bus in quanto non u ` necessario che il messaggio attraversi tutto l’anello. Inoltre usando uno switch i pacchetti vengono smistati direttamente dalla stazione di origine alla destinazione. e pu` essere facilmente saturato.2 La topologia Una classificazione generale applicabile a qualunque rete ` quella basata sulla sua topologia. e non si soffre del problema del collo di bottiglia dovuto alla necessit` di trasmettere tutti i dati ad a ogni stazione collegata. L’AMMINISTRAZIONE DI BASE DELLE RETI Storage Area Network. Ciascuna stazione comunica con le stazioni limitrofe. compreso quello destinato agli altri. 7. la sola classificazione rilevante ` la prima. In genere questo tipo di rete ha il vantaggio della facilit` di installazione. Richiede normalmente una maggiore estensione della cablatura. le altre si sovrappongono e spesso fra di loro (come per DAN e PAN) o non hanno a che fare. ring star . o all’interno dei computer per le varie CPU) con quello che tratteremo in queste dispense. Desktop Area Network. PAN DAN In generale comunque. a loro volta collegate ad un’altra stazione. come il bluetooth. In generale sono usate all’interno di singole organizzazioni e non sono da considerarsi propriamente delle reti di comunicazione. Anche in questo caso per` la rottura di un cavo o di una o stazione comporta l’inutilizzabilit` dell’intera rete. e si applica pertanto anche alla struttura delle reti.1.256 SAN CAPITOLO 7. che indica in genere quelle reti di comunicazione usate per connettere computer e dispositivi di uso personale (ad esempio il telefonino). ma la rottura di un cavo non interrompe tutta la rete. in genere poi le reti sono costruite con l’interconnessione di reti diverse e possono assumere delle topologie ibride rispetto a quelle qui elencate. estraendone i messaggi a lei indirizzati. Personal Area Network. a ` E una rete in cui esiste uno snodo centrale (un hub o uno switch) cui vengono connesse le varie stazioni. ed i messaggi vengono inoltrati lungo l’anello per essere ricevuti dalla stazione di ` destinazione. Inoltre in caso o di rottura del canale tutto il traffico di rete ` totalmente bloccato e l’intera rete non e ` usabile. in quanto il canale deve distribuire ad ogni nodo tutto il traffico. fino a formare un anello. La classificazione riportata prevede solo alcune topologie di base. Le topologie fondamentali sono: bus ` E una rete che utilizza un canale centrale (detto backbone) per connettere fra loro tutti i dispositivi. che in genere fa riferimento alle reti di comunicazione usate per connettere vari dispositivi periferici ad un computer a brevissima distanza (la scrivania appunto) come le reti ad infrarossi IRDA. ma solo la parte necessaria a e raggiungere la destinazione. che fa riferimento alle reti dedicate a fornire un sistema di stoccaggio dati comune ad un insieme di computer. come la SAN (e le tecnologie di comunicazione usate per i cluster. ma ` efficace solo per un numero a e limitato di stazioni. La e topologia (dal greco topos) ` una branca della geometria che studia le propriet` delle connessioni e a fra oggetti geometrici. ` E la topologia classica delle vecchie reti Ethernet su BNC.

che permette di comunicare con latenze inferiori. per rendere possibile la comunicazione attraverso un cos` variegato insieme ı di mezzi sono stati adottati una serie di protocolli. La definizione di ciascuno di questi livelli ` la seguente: e Applicazione Il livello di applicazione indica il livello finale in cui un utente interagisce con l’applicazione. tree 257 ` E una rete che integra in forma gerarchica pi` reti a stella. quello alla base del u funzionamento di internet. In questo modo si possono aumentare le stazioni collegate superando i limiti sul numero di dispositivi collegati ad un singolo switch e limitare la quantit` di traffico che deve a passare per la backbone. la cifratura. con un traffico pi` u ı u distribuito. gli schemi di compressione. . si effettuano connessioni incrociate a fra pi` switch. 7. ` il protocollo TCP/IP.1. crea e termina sessioni di comunicazione.1.1: I sette livelli del protocollo ISO/OSI. ` E una rete che comporta la presenza di diversi percorsi possibili per la comunicazione. il pi` famoso dei quali. Sessione Il livello di sessione gestisce. immagini). come la rappresentazione dei caratteri. definiti e sincronizzati gli scambi di dati. e Una caratteristica comune dei protocolli di rete ` il loro essere strutturati in livelli sovrape posti.3 I protocolli Come abbiamo accennato parlare di reti significa parlare di un insieme molto vasto ed eterogeneo di mezzi di comunicazione che vanno dal cavo telefonico. strutturato in sette livelli. Livello Livello 7 Livello 6 Livello 5 Livello 4 Livello 3 Livello 2 Livello 1 Nome Applicazione Presentazione Sessione Trasporto Rete Collegamento Dati Connessione Fisica Application Presentation Session Transport Network DataLink Physical Tabella 7.1. FTP. e-mail) che vengono offerti sulla rete. in questo modo ogni protocollo di un certo livello realizza le sue funzionalit` basandosi su a un protocollo del livello sottostante. Si indicano come esempi di questo livello le applicazioni per l’uso di telnet e FTP. Presentazione Il livello di presentazione fornisce le funzionalit` di codifica e conversione dei dati usate a dal successivo livello di applicazione. Questo modello di funzionamento ` stato standardizzato e dalla International Standards Organization (ISO) che ha preparato fin dal 1984 il Modello di Riferimento Open Systems Interconnection (OSI). ` E in genere la modalit` in cui vengono create le reti WAN. Di norma ` qui che sono e definiti i protocolli di funzionamento dei singoli servizi (telnet. cos` da avere strade diverse per il flusso dei dati. i formati dei dati (audio. ` a questo livello e che sono impostati. UN’INTRODUZIONE AI CONCETTI FONDAMENTALI DELLE RETI. Viene in genere realizzata u connettendo su una backbone o su uno switch centrale diversi hub o switch periferici. o i cosiddetti fabric switch. alla fibra ottica. per ottimizzare la velocit` di trasmissione.7. a in cui. video. alle comunicazioni via satellite o via radio. mesh 7. secondo quanto riportato in tab.

viene chiamato anche modello DoD (sigla che u sta per Department of Defense). pi` semplice.1.2: I quattro livelli del protocollo TCP/IP. il tipo dei connettori. la sequenza dei pacchetti. Cos` come ISO/OSI anche il modello del TCP/IP ` stato strutturato in livelli (riassunti in ı e tab. etc. dato che fu sviluppato dall’agenzia ARPA per il Dipartimento della Difesa Americano. il TCP/IP (su cui si basa internet) che ` diventato uno standard e de facto. ed ` a questo livello che si definiscono gli indirizzi di rete che identificano macchine e non in diretto collegamento fisico. il TCP e (Trasmission Control Protocol ) che copre il livello 3. delle schede di rete. detti appunto MAC address. nel sistema operativo. Le funzioni dei vari livelli sono le seguenti: . viene inserita l’interfaccia di programmazione (i cosiddetti socket) per l’accesso alla rete. meccaniche) e funzionali per attivare. Livello Livello 4 Livello 3 Livello 2 Livello 1 Nome Application Applicazione Transport Trasporto Network Rete Link Collegamento Esempi Telnet. e l’IP (Internet Protocol ) che copre il livello 2. UDP IP. ` sostanzialmente equivalente all’omonimo livello del e modello TCP/IP illustrato pi` avanti. e consente a dispositivi diversi di identificarsi univocamente in una rete: a questo livello sono definiti gli indirizzi fisici. TCP. definito nello standard IEEE 802. dove viene evidenziata anche la e corrispondenza fra i rispettivi livelli (che comunque ` approssimativa). ` sostanzialmente equivalente all’omonimo livello del modello e TCP/IP illustrato pi` avanti.258 CAPITOLO 7. Nel frattempo per` era stato sviluppato un altro o protocollo di comunicazione. Il modello ISO/OSI ` stato sviluppato in corrispondenza alla definizione della serie di protoe colli X. un confronto fra i due modelli ` riportato in fig. u Rete Il livello di rete si occupa dello smistamento dei singoli pacchetti su una rete interconnessa. Si ` indicato in figura e e anche fra quali livelli. FTP. Connessione fisica Il livello di connessione fisica si occupa delle caratteristiche materiali (elettriche.25 per la commutazione di pacchetto. 7. A questo livello si definiscono caratteristiche come l’indirizzamento dei dispositivi. u Collegamento Dati Il livello di collegamento dati ` quello che fornisce una trasmissione affidabile dei dati e su una connessione fisica. IGMP) ethernet. L’AMMINISTRAZIONE DI BASE DELLE RETI Trasporto Il livello di trasporto fornisce la comunicazione tra le applicazioni che girano sulle due stazioni terminali.2. le distanze raggiungibili. che gestisce le comunicazioni fra dispositivi all’interno di un singolo collegamento in una rete. e non attraverso i livelli superiori del protocollo). Il nome del modello deriva dai due principali protocolli su cui ` basata internet. Il modello di quest’ultimo. (ICMP. ed il Media Access Control (MAC) che gestisce l’accesso al mezzo fisico. Sono definiti a questo livello caratteristiche come l’ampiezza e la temporizzazione dei segnali. disattivare e mantenere il collegamento fisico fra diverse reti di comunicazione. la massima capacit` a di trasmissione.2). SLIP Tabella 7. la topologia della rete. PPP. fisiche. il controllo del flusso e la notifica degli errori sul livello di connessione fisica (cio` delle singole stae zioni collegate direttamente fra loro da una connessione fisica. 7. La IEEE ha diviso questo livello in due ulteriori parti. il Logical Link Control (LLC).

1. UN’INTRODUZIONE AI CONCETTI FONDAMENTALI DELLE RETI. IPv4. e data la sua maggiore semplicit`. che mettete in una busta con l’indirizzo che poi imbucate. secondo il e procedimento che ` illustrato in fig. Qui un altro postino prender` la vostra e la metter` nella cassetta a a della posta del vostro destinatario. Ad ogni passaggio attraverso un livello del protocollo al e Rete Collegamento . Il postino la raccoglier` dalla buca delle lettere per portarla al centro di smistamento. pu` fornire un o trasporto affidabile. il modello ISO/OSI ` pi` e e u teorico e generale. Per cercare di capire meglio le ragioni di tutta questa suddivisione in livelli consideriamo un’analogia con quanto avviene nella spedizione di una lettera per posta aerea in America. I protocolli e principali di questo livello sono il TCP e l’UDP. che nella nuova versione. il modello TCP/IP ` pi` legato alla struttura con cui la gestione della rete ` e u e implementata in un sistema GNU/Linux.2. il quale la aprir` e legger` quello che gli avete scritto. a a Questo ` molto simile a quello che succede quando volete spedire dei dati via rete.1: Confronto fra il modello OSI ed il modello TCP/IP nella loro relazione con il sistema. gestendo l’invio e la ricezione dei pacchetti da e verso l’hardware. Quale dei due modelli usare ` spesso una questione di gusti. Qui sar` reimpacchettata a insieme a quelle provenienti dagli altri centri di smistamento ed imbarcata sull’aereo. cio` con recupero degli errori o inaffidabile. Una volta scaricate in America le varie lettere saranno spacchettate e reimpacchettate per lo smistamento verso la destinazione finale. Per questo motivo. IPv6). regola il flusso delle informazioni. in genere questi vengono realizzati secondo il modello client-server. a questo stesso livello operano i protocolli per il reperimento delle informazioni necessarie allo smistamento. per lo scambio di messaggi di controllo e per il monitoraggio della rete. ` E responsabile per l’interfacciamento al dispositivo elettronico che effettua la comunicazione fisica. e Trasporto Fornisce la comunicazione tra applicazioni che girano sulle stazioni terminali su cui girano gli applicativi. 259 Figura 7. ´ Applicazione E relativo ai programmi di interfaccia con la rete. realizzando una comunicazione secondo un protocollo che ` specifico di ciascuna applicazione. Il protocollo su cui si basa questo livello ` IP e (sia nella attuale versione. a dove in base alla sua destinazione sar` impacchettata insieme a tutte quelle che devono essere a inviate per posta aerea. a nel resto delle dispense faremo riferimento solo a quest’ultimo. 7. Voi scrivete la vostra bella lettera su un foglio.7. Si occupa dello smistamento dei singoli pacchetti su una rete complessa e interconnessa. e mandata al successivo centro di raccolta.

in realt` non si tratta di un solo protocollo. e A differenza della posta in questo caso i pacchetti con i dati non vengono disfatti ad ogni livello per passare in un pacchetto diverso. 7. Come accennato in sez.2 Il TCP/IP. In questa sezione ci limiteremo ad introdurre i concetti fondamentali delle reti IP. L’AMMINISTRAZIONE DI BASE DELLE RETI Figura 7. il protocollo1 pi` diffuso. 7. in queste dispense per` prenderemo in esame soltanto il caso di reti o basate su TCP/IP.1. la notazione e le terminologie principali. con la confidenza che questo poi sar` trattato uniformemente da tutti i a nodi della rete. i vari “pacchetti” vengono disfatti (e la relativa intestazione rimossa) solo quando si torna indietro ad un livello superiore. ma di una suite in cui sono inseriti vari protocolli. ma vengono reimbustati pari pari al livello successivo.2: Strutturazione del flusso dei dati nella comunicazione fra due applicazioni attraverso i protocolli della suite TCP/IP. nostro pacchetto di dati viene aggiunta una intestazione relativa al protocollo utilizzato in quel livello.260 CAPITOLO 7. si dice cio` che un pacchetto di un protocollo viene “imbustato” nel protocollo successivo. u 1 .3 negli anni sono stati creati molti tipi diversi di protocolli per la comunicazione via rete. Questo meccanismo fa si che il pacchetto ricevuto ad un livello n dalla stazione di destinazione sia esattamente lo stesso spedito dal livello n dalla stazione sorgente. e che ormai ` diu e ventato uno standard universale e disponibile su qualunque sistema operativo. quello su cui si basa “Internet”. in modo da a coprire in maniera sostanzialmente completa le pi` varie esigenze di comunicazione. Tutto ci` rende facile il o progettare il software in maniera modulare facendo riferimento unicamente a quanto necessario ad un singolo livello.

senza doversi preoccupare di tutto il procedimento di passaggio da un livello all’altro che viene eseguito dal kernel. il TCP/IP ` la modalit` di comunicazione nativa e e a di GNU/Linux. Come illustrato in sez. u Figura 7. L’interfaccia fondamentale usata dal sistema operativo per la comunicazione in rete ` quella e dei cosiddetti socket. svolto da uno (o pi`) protocolli specifici.2. Come mostrato in fig. 7. 7. Tutte le applicazioni che forniscono i principali servizi su internet (pagine WEB. 7. AppleTalk. a ciascuno di essi corrisponde un particolare compito. e secondo l’omonimo modello. su 4 livelli. connessione remota) sono realizzati a livello di applicazione usando questa interfaccia. e non solo con l’insieme dei protocolli TCP/IP. Con i socket infatti si pu` creare un canale di comunicazione fra due stazioni remote. e bench´ per compatibilit` siano stati implementati nel kernel anche parecchi e a altri protocolli di comunicazione (come DECnet.2 i socket fanno da ponte fra il livello di applicazione e quello di trasporto. posta elettronica. IPX).2. Dato che il protocollo ` nato su macchine Unix. 261 7.3 si ` riportata una panoramica dei principali u e protocolli che costituiscono il TCP/IP e come questi vengono suddivisi nei quattro livelli illustrati in precedenza. In fig.7.1. una volta inviati su un socket i dati vengono passati (dal kernel) ad uno dei protocolli del livello di trasporto. Cos` se si ` usato uno a ı e stream socket basato sul TCP quest’ultimo si curer` di stabilire la connessione con la macchina a . questo resta il principale ed il pi` usato. IL TCP/IP. Solo per applicazioni specialistiche per il controllo della rete il kernel mette a disposizione delle ulteriori interfacce che permettono di accedere direttamente ai livelli inferiori del protocollo.3: Panoramica sui vari protocolli che compongono la suite TCP/IP.2. sul quale o inviare i dati direttamente. La flessibilit` e la genericit` dell’interfaccia consente di utilizzare i socket con i pi` disparati meccanismi a a u di comunicazione.3 l’insieme di protocolli che costituisce il TCP/IP ` strutturato. secondo le modalit` specificate dal tipo di socket scelto. nata nel 1983 a Berkley e resa pubblica con il rilascio di BSD 4.1 Introduzione. che sono quelli che si curano di trasmettere i dati dall’origine alla destinazione.

Token IPv6 TCP UDP ICMP IGMP ARP 2 in questo caso dal punto di vista dell’utente la trasmissione dei dati ` pi` simile ad un collegamento telefonico e u che ad un invio di lettere. In fig. ` Internet Protocol version 6. tutti gli altri protocolli della suite (eccetto ARP e RARP. etc. E un protocollo orientato alla connessione che provvede un trasporto affidabile per un flusso di dati bidirezionale fra due stazioni remote. E quello che comunemente si chiama IP. Ha uno spazio di indirizzi ampliato 128 bit che consente pi` gerarchie di indiu rizzi. ` Trasmission Control Protocol. I messaggi sono normalmente generati dal software del kernel che gestisce la comunicazione TCP/IP. E a questo livello che sono definiti gli indirizzi IP che identificano ogni macchina sulla rete. 2 Al livello successivo sar` poi IP che curer` l’invio dei singoli pacchetti sulla rete. una breve descrizione di quelli riportati in a u figura ` comunque la seguente: e IPv4 ` Internet Protocol version 4. ` Internet Control Message Protocol. ` Address Resolution Protocol. Usa indirizzi a 32 bit. ma si deve essere consapevoli che nessuna di esse ` mai perfettamente congruente con il comportamento effettivo della rete. In queste dispense copriremo solo quelli di utilit` pi` comune. E un protocollo senza connessione. Il protocollo ha cura di tutti gli aspetti del trasporto. gli anycast. E stato progettato a met` degli anni ’90 per rimpiazzare a IPv4. la ritrasmissione. ritrasmettendo a i pacchetti persi e scartando quelli duplicati. l’autoconfigurazione. E un protocollo di livello 2 usato per il multicasting. A volte ci si riferisce ad esso come ICPMv4 per distinguerlo da ICMPv6. e . Useremo questa ed altre analogie nel seguito. o abbiano un particolare ordine di arrivo. Il livello finale ` quello dell’interfaccia di rete usata per trasmettere i pacchetti verso l’esterno. e che a seconda dei casi pu` essere una scheda ethernet o l’interfaccia associata al modem. e e e mantiene tutte le informazioni di instradamento e controllo per la trasmissione dei pacchetti sulla rete. anche se ICMP pu` venire usato direttamente o da alcuni programmi come ping. ed un nuovo tipo di indirizzi. E il protocollo che mappa un indirizzo IP in un indirizzo ` hardware sulla rete locale. e quelli specifici di IPv6) vengono trasmessi attraverso di esso. Come ICMP viene implementato direttamente sopra IP. Effettua lo stesso servizio di trasmissione dei pacchetti di IPv4 di cui vuole essere un sostituto. che consentono di inviare un pacchetto ad una stazione su un certo gruppo. vengano duplicati. come l’acknoweledgment. E usato in reti di tipo broadcast come Ethernet. ed ` su questo a a e livello che operano i vari dispositivi che su internet consentono lo smistamento dei pacchetti fino ` alla loro destinazione finale. ` User Datagram Protocol. L’AMMINISTRAZIONE DI BASE DELLE RETI remota e garantire l’affidabilit` della comunicazione controllando eventuali errori. Contrariamente al TCP il protocollo non ` affidabile e non c’` garanzia e e che i pacchetti raggiungano la loro destinazione. i ` timeout.262 CAPITOLO 7.3 si sono riportati i protocolli principali che costituiscono il TCP/IP. E il protocollo usato a livello 2 per gestire gli errori e trasportare le informazioni di controllo fra stazioni remote e instradatori (cio` e fra host e router ). per l’invio di dati a pacchetti. ´ Internet Group Management Protocol. Ha origine negli anni ’80 e da allora ` la base su cui ` costruita internet. questo si o incaricher` di trasmettere i dati sulla rete fisica che connette la macchina all’esterno (sia questa a una rete locale o internet). 7. si perdano. Permette alle stazioni remote di notificare ai router che supportano questa comunicazione a quale gruppo esse appartengono. E usato dalla maggior parte delle applicazioni.

Combina per IPv6 le funzionalit` di a ICMPv4. E un protocollo a livello 1 progettato per lo scambio di pacchetti su connessioni punto punto. file per il boot via rete. controllarne la raggiungibilit` e scambiare informazioni sullo a stato della rete. OSPF GRE AH ESP PPP SLIP DHCP 7. 263 Ring o FDDI che hanno associato un indirizzo fisico (il MAC address) alla interfaccia. indirizzi di gateway e nameserver. E un protocollo generico di incapsulamento che permette di incapsulare un qualunque altro protocollo all’interno di IP. ` definire i protocolli di rete usati ed incapsulare i pacchetti di dati. RARP ` Reverse Address Resolution Protocol.1. E un protocollo di livello 1 che permette di inviare informazioni di inizializzazione alle stazioni presenti in una LAN.2 Gli indirizzi IP Per poter comunicare fra loro due computer in rete devono potersi in qualche modo riconoscere. Viene implementato direttamente sopra IP. IGMP e ARP. e ` Point-to-Point Protocol. solo che invece che di un numero decimale composto di un numero variabile di cifre 3 vengono chiamati autonomous systems i raggruppamenti al livello pi` alto della rete. come numero di IP. ` Generic Routing Encapsulation. Provvede la cifratura insieme all’autenticazione dell’integrit` e dell’origine di un pacchetto.2. IL TCP/IP. 7. ` Dinamic Host Protocol. E s´ su IPv4. Come per AH ` opzione nativa in IPv6 e a e viene implementato come protocollo a s´ su IPv4. Viene implementato direttamente sopra IP. Viene usato per configurare i collegamenti. u . version 6. ` Open Shortest Path First.2.3. che permette a questi ultimi di scambiarsi informazioni sullo stato delle connessioni e dei legami che ciascuno ha con gli altri. L’analogia pi` diretta ` quella con il telefono. con meccanismi che permettono di identificare i vicini. ecc. Provvede l’autenticazione dell’integrit` e dell’origine di un a ` una opzione nativa in IPv6 e viene implementato come protocollo a pacchetto. Viene usato a volte per durante l’avvio per assegnare un indirizzo IP ad una macchina. svolgono esattamente questo ruolo. E un protocollo di livello 1 che permette di trasmettere un pacchetto IP attraverso una linea seriale. ICMPv6 Internet Control Message Protocol. che ` analogo a quello del numero di telefono o dell’indirizzo di una casa. Fa parte della suite di IPSEC che provvede la trasmissione cifrata ed e autenticata a livello IP. E un protocollo complesso con varie componenti.7. E in protocollo di routing per router su reti interne. EGP ` Exterior Gateway Protocol. E il protocollo che esegue l’operazione inversa rispetto ad ARP (da cui il nome) mappando un indirizzo hardware in un indirizzo IP. Essi devono e identificare univocamente un nodo della rete. L’indirizzo IP ` l’equivalente del numero e di telefono. Authentication Header. E un protocollo di routing usato per comunicare lo stato fra gateway vicini a livello di sistemi autonomi 3 . per poter telefonare occorre avere un numero u e di telefono e conoscere quello di chi si vuole chiamare. Gli indirizzi IP. Encapsulating Security Payload. definiti dall’Internet Protocol visto in sez. ` Serial Line over IP. ma non serve in connessioni punto-punto.

0.111.0. gli indirizzi di rete erano stati organizzati in classi. che prende e la parte superiore dell’indirizzo e identifica la particolare sezione di internet su cui si trova la vostra rete e l’indirizzo della stazione (il cosiddetto host). per venire incontro alle diverse esigenze.255. il numero IP completo e ` quello che identifica il singolo telefono. un esempio di questa notazione potrebbe essere qualcosa del ` tipo di 192.255.255 — 239.111.255 Netmask 255.11.255.0.0. visto che scrivere i numeri in formato binario ` poco comprensibile. e La differenza con i prefissi ` che un indirizzo di rete IP. .0.255.0.0.0 Tabella 7.264 CAPITOLO 7. u Di solito.0.0 0. pur essendo espresso a sempre come un singolo numero. RIPE NCC e APNIC).0 240. L’assegnazione degli indirizzi IP ` gestita a livello internazionale dalla IANA (Internet Assie gned Number Authority). solo che in questo caso il numero di cifre (binarie) che e si usano per il prefisso non ` fisso. che ha delegato la gestione di parte delle assegnazioni ad altre organizzazioni regionali (come INTERNIC. vedremo pi` avanti come ad uno stesso computer (o a una stessa u u interfaccia di rete) possono essere assegnati pi` indirizzi IP. ` un insieme di reti. La situazione dunque ` ancora analoga a quella di un numero di telefono che ` diviso in e e prefisso e numero locale.0. ad ogni indirizzo IP si associa sempre anche quella che viene chiamata una netmask : una maschera binaria che permette di dire quali bit dell’indirizzo sono usati per identificare la rete e quali per il nodo.255 — 247.168. quando lo si scrive.0.255. come dice il nome.255 — 223. L’AMMINISTRAZIONE DI BASE DELLE RETI ` un numero binario (quindi espresso con soli 0 e 1) ed ha una dimensione fissa di quattro byte. anche queste devono venire idene tificate. che corrispondono alla parte comune e di tutti gli indirizzi delle macchine sulla stessa rete. Classe A B C D E Intervallo — 127.0 255. Questo meccanismo significa in realt` che ogni indirizzo su Internet.0. la cosa ` vera anche per le reti private non connesse direttamente e ad Internet (come quelle che collegano i computer di un ufficio). usando un numero decimale per ciascuno dei quattro byte che compongono l’indirizzo.255.255. Dato che Internet.3: Le classi di indirizzi IP.3).255. ma ad un telefono possono o essere collegati pi` numeri. e che ` lo stesso per tutti i telefoni di quell’area. e Come per i telefoni ad un numero pu` corrispondere solo un telefono.255 — 191. si ` soliti e e esprimere il numero che costituisce l’indirizzo IP usando una apposita notazione che viene chiamata dotted decimal. deve essere e completato da tanti zeri quanti sono necessari a raggiungere la dimensione di 32 bit degli indirizzi normali.255. Un prefisso ` l’equivalente dell’indirizzo di rete. per consentire dispiegamenti di reti di dimensioni diverse.0. (riportate tab. 7.0.0.0. l’indirizzo di rete. un possibile indirizzo di rete ad esso relativo potrebbe essere 192. E attraverso questo numero il vostro computer viene identificato univocamente su Internet. e o Per questo motivo.0 240.0 192. quando si configura una macchina.168.0 128.255. Originariamente.255. che prende la parte inferiore del numero e che identifica la macchina all’interno della vostra rete. Per proseguire nell’analogia con il telefono si pu` pensare all’indirizzo di rete come al prefisso che serve per parlare con un altra citt` o un o a altro stato.255. Come per il telefono di casa ogni computer connesso ad Internet viene sempre considerato come facente parte di una rete. e pu` anche essere cambiato a seconda dei casi. Questa viene espressa con la solita notazione dotted decimal. usate per parlare all’interno degli uffici.0 224.255.0. usando il numero binario costruito mettendo un 1 ad ogni bit dell’indirizzo corrispondente alla rete e uno zero a quello corrispondente alla stazione: nel caso dell’indirizzo in esempio si avrebbe allora una netmask uguale a 255.255. nei fatti ` composto da due parti. Per proseguire nell’analogia si pensi alle linee telefoniche interne di una ditta. Questo ` fatto attraverso altrettanti indirizzi IP. per riprendere il precedente esempio di numero IP.0 255.0). separati da un punto.255.

che viene utilizzato da una singola stazione quando vuole inviare un messaggio contemporaneamente a tutti gli altri nodi presenti su quella rete.111. u e e ed alcuni programmi cercano di calcolare automaticamente la netmask a seconda dell’IP che gli date. una rete di classe B comprende 65536 (cio` 216 ) indirizzi e ed ha una netmask pari a 255. mentre l’indirizzo . come vedremo fra poco. 265 Le classi usate per il dispiegamento delle reti di cui ` attualmente composta Internet sono le e prime tre. IL TCP/IP. E stata cos` introdotta anche una nuova u ı notazione.4).0 e una rete di classe C comprende 256 (cio` 28 ) indirizzi e ed ha una netmask pari a 255.5 Una rete di classe A ` una rete che comprende 16777216 (cio` 224 ) indirizzi di singoli computer e e ed ha una netmask pari a 255. questi indirizzi sono riservati per e ogni rete e non possono essere usati per un singolo host.11 192.255.111.168. in cui si ` riassunta la e struttura di un indirizzo IP di esempio. nel caso in esempio si avrebbe allora 192. 4 .255 Tabella 7.11 255. dato che non ` detto che la rete in questione sia ancora classificabile o e in questo modo. mentre la classe E ` e e riservata per usi sperimentali e non viene impiegata.0.11/24.3 ` largamente inefficiente in quanto se un utente necessita e di anche solo un indirizzo in pi` dei 256 disponibili6 con una classe A occorre passare a una u classe B.111. 7.255. Per questo nel 1992 ` stato introdotto un indirizzamento senza classi (detto CIDR) in cui il e limite fra i bit destinati a indicare il numero di rete e quello destinati a indicare l’host finale pu` o essere piazzato in qualunque punto dei 32 bit totali (vedi tab.0. che lo emette una volta sola.7 Indirizzo Indirizzo completo Maschera di rete Porzione di rete Porzione del nodo Indirizzo di rete Indirizzo broadcast Esempio 192.0. ottimizzando quindi la u trasmissione dati da uno verso molti. 5 e questo alle volte pu` creare problemi.168. In ogni rete Internet infatti esiste un indirizzo riservato. 7 questo permette di usare direttamente le capacit` di broadcasting di alcune interfacce di rete che supportano a questa modalit` di comunicazione.168.0 192.111.0 ` riservato per indicare a e e la rete.255. 6 in realt` gli indirizzi disponibili con una classe A sono 254.168. n bit CIDR net Id 32 − n bit host Id Tabella 7.111. che permette di indicare la parte di rete appendendo all’indirizzo l’indicazione del numero di bit riservati alla rete. la classe D ` destinata all’ancora non molto usato multicast. permettendo cos` di accorpare ı ` pi` classi C su un’unica rete o suddividere una classe B. mostrato insieme agli altri visti finora nello specchietto in tab.255.5. questo perch´ l’indirizzo . Per concludere questa panoramica sugli indirizzi occorre accennare all’indirizzo di broadcast. ma la si trova riportata spesso.255. La presenza di un indirizzo di broadcast permette il funzionamento di una serie di protocolli ausiliari del TCP/IP che devono poter scambiare e ricevere informazione con tutti i computer il multicast ` una modalit` di comunicazione per consentire la spedizione simultanea di uno stesso pacchetto e a IP da una stazione singola.168. ` quello di broadcast.0 192. 7. 7. a 4 . La suddivisione riportata in tab. che per convenzione ` sempre ottee nuto mettendo ad 1 tutti i bit della porzione dell’indirizzo riservata all’host. . seguendo queste tabelle.2.4: Uno esempio di indirizzamento CIDR. per utilizzare questa comunicazione occorre operare su uno di questi indirizzi. con un conseguente enorme spreco di numeri (si passerebbe da 256 a 65536).5: Specchietto riassuntivo della struttura degli indirizzi IP. verso pi` stazioni riceventi.7.0.0. Oggigiorno questa divisione in classi non ` e pi` molto usata (perch´ come vedremo fra poco ` inefficiente).255.

255 192. a Una volta usciti dalla rete locale la situazione si complica molto.31. L’argomento del routing ` uno dei pi` complessi nella gestione delle reti. Il lavoro di smistamento e reindirizzamento verso la loro destinazione finale dei pacchetti di dati che vengono trasmessi via rete ` quello che in termini tecnici viene chiamato instradamento. ad esempio dalla classe A ` e stata rimossa l’intera rete 127.168. Classe A B C Intervallo 10.255 Tabella 7. perch´ il collegamento telefonico nasce a commutazione di linea. senza influenzare la rete. senza doversi indirizzare a ciascuno di essi individualmente. 7.255. cio` la destinazione verso e cui inviare tutti i pacchetti con una destinazione al di fuori della rete locale.0.0 — 10.0. in inglese routing.0. Infine l’RFC 1918 riserva una serie di indirizzi per le reti private. interna al singolo nodo.0. i loro indirizzi sono riportati in tab. L’AMMINISTRAZIONE DI BASE DELLE RETI presenti (ad esempio quelli che permettono di scoprire quali sono gli indirizzi realmente attivi).3 Il routing L’identificazione di un nodo nella rete effettuata tramite l’indirizzo IP ` solo il primo passo e per poter stabilire effettivamente una comunicazione. e In questo caso il problema si pu` sostanzialmente dividere in due. per questo quando installate una macchina in una rete locale dovete sempre sapere l’indirizzo del gateway. che anch’essa avr` un suo numero IP.255. e per questo viene anche usato per indicare la cosiddetta default route.0 — 192.2. 16 reti di classe B e 256 reti di classe C.6: Le classi di indirizzi IP riservate per le reti private. ed in questo caso l’analogia telefonica non ci aiuta. In una rete locale il ruolo del centralino ` svolto dal cosiddetto default gateway. ed in quello che succede una volta usciti da essa.255.6. ma in questo caso deve essere proprio specificato l’indirizzo completo della macchina che fa da ponte. Tutte le telefonate dirette fuori (cio` e tutti i pacchetti di dati che devono uscire dalla rete locale per andare su internet) devono passare da questa macchina. 7. questa ` la e e macchina che nella vostra rete fa da ponte verso l’esterno. ma dal punto di vista di una rete locale tutto si e u riduce al problema dell’instradamento dei pacchetti che escono dai computer che ne fanno parte. La differenza coi numeri telefonici sta per` nel fatto che l’indicazione di usare un centralino o non si pu` inserire all’interno del numero che si compone (ad esempio mettendo un 0 o un 1 o all’inizio dello stesso).0.0 che viene associata ad interfaccia di rete virtuale.1.255 172. Un altro indirizzo speciale ` l’indirizzo nullo 0.0 — 172. cio` non e e esiste mai una connessione diretta fra due nodi.255.266 CAPITOLO 7. Infine alcuni indirizzi sono trattati a parte e considerati riservati. Lo si usa anche per indicare l’insieme di tutti gli indirizzi possibili. il localhost. Una volta che si sappia la destinazione finale infatti. quando un programma che usa i socket TCP/IP deve fare riferimento a se stesso.168. Si tratta di una interfaccia assolutamente virtuale che effettua la comunicazione in locale facendo passare i dati attraverso il kernel. che viene utilizzato per comunicare. occorre infatti sapere anche come poterci arrivare. per poter uscire e telefonare all’esterno occorre in qualche modo passare dal centralino. In questo caso si pu` ancora fare riferimento all’analogia telefonica: si pu` pensare alla propria o o rete locale come alla rete telefonica interna di una ditta.0.0.0 che viene usato per indicare un indirizzo e generico non specificato. anche se poi i programmi usano delle funzionalit` a .0. mentre internet ` progettata per funzionare a commutazione di pacchetto.0. cio` per le reti interne che e non devono mai essere connesse direttamente ad internet.16. cio` e e per realizzarlo si mettevano effettivamente in collegamento elettrico i due telefoni con una serie di selettori.0. di solito le si associa l’indirizzo 127. indicata dalla sigla lo. si tratta di una rete di classe A. cio` nella parte relativa o e alla propria rete locale.

da li prenderanno la strada opportuna per arrivare al router del provider a cui ` collegato il computer del vostro interlocutore. ora quando inviate un pacchetto su internet succede qualcosa di simile. relativa stao volta al livello di trasporto. ed illustra pi` chiaramente i concetti del routing ` quella delle reti stradali. a Firenze Nord cambiavo sulla Firenze Mare. u interruzioni del traffico ecc. lo stesso accade e anche per internet. come accennato nell’introduzione (si ricordi quanto detto in sez. un’analogia che pu` spiegare un o po’ meglio le cose. e sono in grado di a u far prendere ai pacchetti la strada pi` veloce. o spedite un pacchetto fuori dal gateway della vostra rete locale. senza comprendere la quale mancherebbero le basi per poter spiegare il funzionamento di quest’ultimo: quella delle porte. o un altro computer (se c’` attaccato un modem).8 cio` a delle a e specie di “frequenze” diverse su cui sintonizzate il vostro telefono. a 7. Per u questo in realt` si potrebbe pensare alle porte come ai canali della filodiffusione. ma questo riguarda solo la parte del protocollo che viene usato per effettuare la trasmissione fra due computer. 267 che permettono di lavorare come se le cose fossero effettivamente cos` ma i dati inviati vengono ı. u e Ad esempio quando lavoravo per l’INFN mi capitava spesso di dover andare al CERN. come TCP ed UDP. usata per trasmettere musica quando le radio avevano una pessima qualit`. in aiuto. che li mander` a lui. Cos` se il tunnel del Monte Bianco viene chiuso. tenendo conto di eventuali ingorghi. 7. uscendo a Lucca per fare il raccordo per prendere l’autostrada per Genova. una o segreteria telefonica. ma che oggi non esiste praticamente pi`. Per questo. nella cui periferia sono i laboratori del CERN. incidenti. Anche in questo caso l’analogia telefonica ci viene. Occorre perci` introdurre un’altra delle caratteristiche del protocollo TCP/IP. si tratta di una specie di radio via telefono. a u 8 . e per far questo ci sono i socket. e anche lui deve passare attraverso dei “caselli”. spezzati in pacchetti passati da un nodo della rete all’altro fino ad arrivare alla loro destinazione finale dove vengono riassemblati. dove fatta la circonvallazione prendevo l’autostrada per il traforo del Monte Bianco. che comporta il passaggio da diversi caselli. u per chi non ha idea di che cosa sia. e a In tutto questo percorso i pacchetti passeranno per una serie di altri router che sanno che strada devono prendere i pacchetti per poter arrivare alla destinazione finale. corrispondenti a a forme di comunicazione diversa. un fax. e Allora come su un numero di telefono pu` rispondere una persona (se solleva la cornetta). L’analogia usata ` molto debole perch´ di solito per fare ognuno di questi compiti ci vogliono e e apparecchi diversi (anche se talvolta si trovano oggetti che assommano pi` di uno di essi). cambiavo di nuovo per Torino. che usano i protocolli del livello di trasporto.7. Abbiamo gi` visto che per poter effettuare delle comunicazioni in generale i programmi a necessitano di creare delle connessioni.2. sia pure in maniera molto parziale.2. sulle quali trovate i contenuti pi` diversi. Quello che succede ad esempio quando vi collegate con un modem e iniziate a “chattare” con qualcun’altro. Come vedete si tratta di un bel percorso complicato. La differenza fra i caselli ed i router ` che questi ultimi sanno indicare da soli ai pacchetti la strada su cui devono e andare per arrivare a destinazione.4 I servizi e le porte. IL TCP/IP. Finora infatti abbiamo parlato dei numeri IP come dei numeri di telefono. quando arrivate a ı Torino il router vi far` dirottare per il Frejus. Per farlo prendevo l’autostrada a Firenze Sud. ` che i pacchetti che escono dal vostro computer vengono inviati al router e (l’equivalente del casello) del vostro provider. da Genova proseguivo per Alessandria. e cio` il protocollo IP. e copre soltanto il livello e di rete. In realt` sono ancora pi` intelligenti. Da li il raccordo porta sull’autostrada per Ginevra. Finora abbiamo parlato quasi esclusivamente di IP. come dice poi lo stesso nome di instradamento.3) questo ` solo uno dei protocolli di internet.1. su un numero IP possono in realt` rispondere diversi servizi.

alcune di queste porte per` sono state usate tradizionalmente o da altri servizi molto diffusi. da e verso qualunque altro telefono e su quanti canali volete9 in contemporanea. usando uno scambio di a dati specifico che va a costituire l’ultimo livello (quello di applicazione) della struttura mostrata in fig. se su di essa non c’` un server. Dal punto di vista del TCP/IP si potrebbe usare un numero di porta qualsiasi. ed IP (quello e e dei numeri) serve solo a gestire la trasmissione dei pacchetti attraverso una rete. per cui in certi casi si potranno avere comunque dei conflitti. in quanto con porta si intende o e una qualche forma di accesso permanente che pu` essere aperto o chiuso. 7. ed a i client di posta cercano un server sulla porta 25. Bussando ad una porta (o sintonizzandosi su quella frequenza a seconda dell’analogia che si preferisce) si potranno scambiare. mentre con internet potete sia ascoltare che trasmettere. pari a 216 − 1.1. 7.3 un elenco che associa un numero di porta ad un servizio noto viene mantenuto nel file /etc/services. ma dal fornitore del servizio telefonico. a o per UDP ` pi` corretto parlare di canali di comunicazione in quanto non c’` una connessione come nel caso e u e di UDP. e ma se mettete la posta elettronica sulla porta 80 e il web sulla 25 avrete certamente delle grosse difficolt` a comunicare con gli altri.268 CAPITOLO 7. in modo da poter gestire la possibilit` di avere pi` connessioni10 contemporanee tra le stesse macchine (destinate a servizi a u diversi o provenienti da applicazione diverse) e tenere separati i pacchetti ad esse relative. Inoltre si ricordi che come c’` una porta per contattare il server sulla macchina di destinazione e si deve avere anche una porta che identifica il programma client che ha eseguito la connessione sulla macchina sorgente. cio` di un secondo numero che in sostanza permette e di identificare le due applicazioni che stanno usando il protocollo. avviando un o demone che si metta in ascolto. se non siete in ascolto. potete solo ascoltare. Si tenga conto per` che il concetto di porta ` spesso fuorviante. in cui oltre all’invio dei pacchetti si cerca di assicurare pure una comunicazione affidabile. ı 10 9 . In un sistema Unix le prime 1024 porte sono dette riservate in quanto solo l’amministratore pu` installarci sopra dei servizi. su cui si pu` trasmettere o ascoltare. ´ E per questo motivo che nei protocolli del livello di trasporto. In realt` non esiste o a nessuna forma di accesso permanente e lo scambio di dati avviene solo se si hanno da ambo le parti gli strumenti per effettuarlo11 (il server ed il client). Per poter effettuare uno scambio di dati fra due programmi che comunicano via rete. ecc.). ed un canale alla volta. la porta 80 al web. attraverso l’opportuno protocollo di applicazione. Questo perch´ se ad esempio si lanciasse due volte un browser per e leggere lo stesso sito si avrebbe una situazione in cui si contatta un server web a partire dallo in realt` lo si pu` fare fino ad un numero massimo di 65535 porte. mentre quando si vuole leggere una pagina web se ne user` un’altra. e un altro telefono. come spiegato. ed in cui ciascuno pu` essere la trasmittente o o (il server) o il ricevente (il client) o anche entrambi allo stesso tempo (ad esempio nei sistemi peer to peer ). per questo sarebbe pi` chiaro parlare u di frequenza. come vedremo in sez. L’AMMINISTRAZIONE DI BASE DELLE RETI In realt` non ` neanche cos` perch´ nel caso della filodiffusione il segnale non viene da a e ı. a e cos` come non possono mandarvi offese sulla radio. Questo avviene perch´. Cos` quando si vuole inviare della posta elettronica si comunicher` attraverso una di queste ı a porte. Al di sopra della porta 1024 qualunque utente pu` mettere un suo servizio.6. occorre una modalit` a per stabilire un canale di comunicazione che permetta di andare pi` in l` di quanto si fa con u a IP. come UDP e TCP. ma la standardizzazione ha portato ad associare alcuni numeri a dei servizi specifici (la porta 25 alla posta elettronica. che serve solo ad inviare pacchetti da un computer all’altro. la corrispondenza fra queste porte ed i servizi che ci devono o essere installati ` regolata a livello internazionale: nessuno vi obbliga a rispettare la convenzione. TCP/IP ` un insieme di protocolli. e non da una applicazione ad un’altra. ` stato e introdotto questo concetto delle porte. 11 per questo non sar` mai possibile sfondare una “porta” sul vostro computer. dato che in genere i browser cercano i siti sulla porta 80. i dati relativi al servizio associato.

che sono la base su cui tutto il resto ` costruito.3 o a meno che non abbiate una gigabit o qualche scheda WAN.4. la differenza ` che in genere questa viene scelta automaticamene te dal kernel quando il client crea la connessione. Nel caso il vostro hardware non sia u supportato. u e ed esamineremo sia i comandi di base con i quali si effettua la configurazione manuale della rete. Networking options e Network device support. per cui non ci e dilungheremo su questa procedura. o attivare alcune opzioni specialistiche (su cui eventualmente torneremo pi` avanti). In questa sezione per` affronteremo solo la configurazione di base della rete. i servizi che operano sulla rete. 5. In genere anche in questo caso la configurazione di default per la maggior parte delle distribuzioni fornisce il supporto per le condizioni di uso pi` comune. LA CONFIGURAZIONE DI BASE 269 stesso IP sorgente.4 si possono attivare i protocolli di rete di alto livello (sopra il collegamento) necessari. 7. 7. nel qual caso dovrete cercare nelle relative sezioni. o vi necessiti un protocollo o una funzionalit` non previsti nel kernel corrente vi a occorrer` ricompilare il kernel12 . e spesso molto complessi. si veda sez. In particolare vedremo come effettuare le varie impostazioni relative all’uso e alla gestione dei tre livelli pi` bassi del protocollo TCP/IP. verso lo stesso IP e la stessa porta di destinazione.1 Il supporto nel kernel Come mostrato fig. cosa che potrete fare ricorrendo ad una lettura dell’Ethernet HOWTO (disponi12 13 nel caso di kernel modulare pu` bastare la compilazione dei moduli necessari. se per` si ha una scheda u o di rete non supportata dal kernel di default pu` essere necessario accedere alla sottosezione o Ethernet (10 or 100Mbit)13 dove troverete le opzioni per una vasta scelta di schede. 7. come si pu` vedere dalla schermata del men` di configurazione riportata in fig.3. sono altrettanto numerose e complesse le configurazioni che si possono affrontare. ed ` detta pertanto porta effimera (o ephemeral e port) proprio in quanto non corrisponde ad un valore fisso ed il suo utilizzo ` limitato al solo e tempo di una connessione. 7.7. In genere tutte le distribuzioni provvedono dei kernel standard che sono gi` predisposti a a supportare tutto quello che serve nei casi pi` comuni.3 La configurazione di base La configurazione della rete ` una materia alquanto complessa e di una vastit` impressionante. o u Nelle prima delle due opzioni segnalate con un asterisco in fig. ma il kernel deve essere in grado di poter separare i pacchetti inviati indietro alle due istanze del browser (che potranno leggere contenuti diversi) e per questo dovranno essere usate da ciascuna istanza delle porte sorgenti diverse. u Nella seconda parte si attivano invece i driver per le varie schede ed i protocolli di basso livello.3. In tal caso la difficolt` maggiore sar` quella di selezionare il modulo che corrisponde alla a a vostra scheda. Le sezioni relative alla rete sono due. ` necessario intervenire qui solo se si vuole supportare e e un altro protocollo (come IPX o Appletalk). Di solito per il TCP/IP tutto quello che serve ` attivato di default. 5.1. di rete ed il collegamento fisico) per il funzionamento della rete e delle interfacce di comunicazione. che i file di configurazione usati nel procedimento di avvio per la configurazione automatica dell’interfaccia. 7. ma solo sulle opzioni di compilazione che ci interessano. a Il procedimento per la ricompilazione del kernel ` affrontato in sez.1 ` il kernel che fornisce il supporto dei protocolli necessari (per i livelli di e trasporto.1. . Questo comporta che ogni client viene sempre contattato (dai pacchetti di risposta) su una porta specifica (quella sorgente). e non dei vari servizi che o possono essere realizzati su di essa. e a In particolare essendo numerosissimi.

<Enter> selects submenus --->.4: Schermata di configurazione per la compilazione del kernel. come illustrato in sez. che permette anche di e si suppone che abbiate una scheda PCI. Se non avete idea di quale sia la scheda che avete sulla macchina.4. Pressing <Y> includes.conf.4. | | Legend: [*] built-in [ ] excluded <M> module < > module capable | | +---------^(-)--------------------------------------------------------+ | | | Multi-device support (RAID and LVM) ---> | | | | * Networking options ---> | | | | Telephony Support ---> | | | | ATA/IDE/MFM/RLL support ---> | | | | SCSI support ---> | | | | Fusion MPT device support ---> | | | | IEEE 1394 (FireWire) support (EXPERIMENTAL) ---> | | | | I2O device support ---> | | | | * Network device support ---> | | | + Amateur Radio support ---> | | | +---------v(+)--------------------------------------------------------+ | +-------------------------------------------------------------------------+ | <Select> < Exit > < Help > | +-------------------------------------------------------------------------+ Figura 7. 7. in ı particolare una sezione del file tipo: alias eth0 3c59x alias eth1 eepro100 dice di usare la 3Com Vortex per la prima interfaccia e la Intel EtherExpress per seconda. L’AMMINISTRAZIONE DI BASE DELLE RETI Linux Kernel v2.16 Configuration --------------------------------------------------------------------------+------------------------------.270 CAPITOLO 7. le opzioni di configurazione per il supporto di rete sono indicate con un asterisco bile su http://en. che permette di associare un modulo ad una specifica interfaccia. per le schede ISA si pu` usare pnpdump. Inoltre se lo ritenete opportuno potete far caricare i moduli relativi alle interfacce di rete all’avvio della macchina.3. nell’esempio riportato a pag. e nel quale ` riportata una lunga lista di e schede supportate.html) che di solito si trova anche nella documentazione allegata con la vostra distribuzione. | | Highlighted letters are hotkeys. <?> for Help. 222 potete verificare come la scheda di rete sia una Realtek 8139. 5. ma ` senz’altro meglio andare o e a comprarsi una scheda pi` recente u 14 .tldp. Il comando che vi consente di fare questo ` ifconfig. In questo caso dovrete semplicemente attivare il relativo supporto nella sezione delle schede ethernet RealTek RTL-8139 PCI Fast Ethernet Adapter support nella sezione Ethernet (10 or 100Mbit). Nel caso abbiate optato per un supporto modulare dovrete inoltre configurare opportunamente il file /etc/modules.org/HOWTO/Ethernet-HOWTO.1.Main Menu -------------------------------+ | Arrow keys navigate the menu. e vi secchi aprire il computer.2 Il comando ifconfig Il primo passo per poter utilizzare la rete ` quello di assegnare ad una interfaccia di rete il e suo numero IP. questo viene fatto indicando i rispettivi nomi nel file /etc/modules. cos` da specificare in maniera univoca a quale interfaccia viene associata una certa scheda. <N> excludes. Press <Esc><Esc> to exit. | | <M> modularizes features. potete sempre ricorrere al comando lspci14 .

3. e a L’interfaccia ` in modalit` loopback.2 GiB) TX bytes:1385547296 (1.168.255.255.168. se invece si vuole lo stato di tutte le interfacce esistenti.7: Stati riportati nella terza riga del comando ifconfig e relativo significato.255 Mask:255.168. Tutto quello che serve nella maggior parte dei casi sono soltanto le opzioni che permettono di attivare e disattivare una interfaccia.1 Bcast:192. e Non ` attivato il protocollo ARP per l’interfaccia.168. Si pu` notare come il comando riporti le varie caratteristiche delle singole interfacce: nella o . due di esse (eth0 e eth1) corrispondono a due schede di rete ethernet. e che deve essere sempre attivata anche per i computer non connessi in rete.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:10226970 errors:0 dropped:0 overruns:0 frame:0 TX packets:10226970 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1385547296 (1.3 GiB) Interrupt:10 Base address:0x8800 eth0:0 Link encap:Ethernet HWaddr 00:01:02:2F:BC:40 inet addr:192. occorre usare l’opzione -a. Come si vede nell’esempio sulla macchina sono presenti 3 interfacce di rete. Questo ` il primo passo da fare sempre prima di qualunque configurazione e per vedere lo stato del sistema (ed anche dopo per controllare che sia tutto a posto).0.0. e L’interfaccia sta funzionando.0.1. Se usato senza opzioni e senza specificare una interfaccia il comando mostra lo stato di tutte le interfacce attive. e a Tabella 7.6 GiB) TX bytes:2524425895 (2.255.0.255 Mask:255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 Base address:0x8800 Link encap:Ethernet HWaddr 00:E0:7D:81:9C:08 inet addr:192.7.255 Mask:255.2 GiB) eth1 lo Se si specifica come argomento il nome di una interfaccia il comando mostra lo stato solo dell’interfaccia specificata.234 Bcast:192. Sull’interfaccia ` attivato il multicast.1 Mask:255.1 Bcast:192.168.0 b) Interrupt:9 Base address:0x6000 Link encap:Local Loopback inet addr:127.168.255. Valore UP NOARP RUNNING MULTICAST BROADCAST POINTOPOINT LOOPBACK Tipo indirizzo L’interfaccia ` attiva.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:82075264 errors:0 dropped:0 overruns:0 frame:0 TX packets:51585638 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:2858378779 (2.255.0. e L’interfaccia ` in modalit` broadcast. Un risultato possibile ` il seguente: e [root@havnor root]# ifconfig eth0 Link encap:Ethernet HWaddr 00:01:02:2F:BC:40 inet addr:192.1. LA CONFIGURAZIONE DI BASE 271 impostare le varie caratteristiche delle interfacce di rete. comprese quelle non attive.0 b) TX bytes:0 (0.168. la e cosiddetta interfaccia di loopback che viene usata per le comunicazioni locali.255. e a L’interfaccia ` in modalit` punto-punto. la terza (lo) ` una interfaccia logica.168.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0.

e a perch´ quando si assegna un indirizzo IP il valore precedente viene sovrascritto. Indirizzo IPv6. in quanto esse non possono che essere uniche per ciascuna interfaccia. che indica il protocollo TCP/IP. in cui sono elencate una serie di valori il cui elenco e relativo significato ` riportato e in tab. ` inet. ad esso pu` seguire un argomento opzioo nale aftype che serve a specificare i tipo di indirizzo che si vuole associare all’interfaccia. dando un errore nel caso il supporto nel a kernel non sia attivato. mentre per riattivarla si potr` utilizzare un comando del tipo: a [root@havnor root]# ifconfig eth0 up infine si pu` assegnarle un indirizzo ed attivarla in un colpo solo con il comando: o [root@havnor root]# ifconfig eth0 192.272 CAPITOLO 7. che presentano indirizzi diversi. A parte il caso in cui si legge la configurazione generica il comando richiede sempre come primo argomento il nome dell’interfaccia su cui operare. e se presente per quel tipo di interfaccia anche l’indirizzo fisico. infine sulle righe seguenti vengono scritte una serie di altre informazioni statistiche relative al traffico sostenuto dall’interfaccia. e u . Si noti comunque come le statistiche siano riportate solo per la prima istanza. e l’opzione non compare pi`. dato che il caso pi` comune ` relativo all’impostazione e u e di indirizzi IP. sottinteso quando non si specifica nulla. Prima di poter configurare una interfaccia ` opportuno verificare che essa non sia gi` attiva. purch´ si sia abilitato il u e relativo supporto nel kernel. 7. 271 ci mostra anche che l’interfaccia eth0 ` come suol e dirsi multihomed .1. essa cio` compare con due indirizzi diversi. quindi segue una riga che indica lo stato corrente della stessa. Il comando e ifconfig iface (dove iface ` il nome della singola interfaccia che si vuole controllare.15 e l’assegnazione degli indirizzi ulteriori si pu` fare appunto specificando delle ino terfacce “virtuali” ulteriori nella forma eth0:X dove X ` un numero crescente a partire da e 0. nella seconda riga viene riportato il tipo ed il valore dell’indirizzo associato all’interfaccia. L’AMMINISTRAZIONE DI BASE DELLE RETI prima riga viene scritto il tipo di collegamento fisico usato da ciascuna di esse. l’opzione ` indicata come IP aliasing. Indirizzo Novell IPX. Tabella 7.100 in cui ` sottintesa l’opzione up in quanto si d` per scontato che assegnare un IP all’interfaccia e a implichi la volont` di utilizzarla. Il risultato del comando riportato a pag. 7.8: Valori del parametro aftype del comando ifconfig.8.168. I valori possibili sono riportati in tab. ` E sempre possibile assegnare pi` indirizzi ad una stessa interfaccia. ad e esempio eth0) ci mostrer` lo stato dell’interfaccia. identificati in due sezioni separate e introdotte dalle stringhe eth0 ed eth0:0.7. Indirizzo AppleTalk. il valore di default. nella sezione Networking e options. a 15 nei kernel recenti ` attivata di default. Valore inet inet6 ax25 ddp ipx Tipo indirizzo Indirizzo IPv4. Qualora invece la si voglia disattivare si potr` usare un comando del a tipo: [root@havnor root]# ifconfig eth0 down utilizzando l’opzione down. Indirizzo AX25.

In sostanza dovete avere una segnaletica stradale che vi dice da quale parte svoltare per arrivare a destinazione. che permette di aggiungere una voce alla tabella. 7. e seleziona il tipo di mezzo (in genere il cavo).3. 7. In sostanza la tabella contiene le associazioni fra le possibili destinazioni di un pacchetto e l’interfaccia che deve essere usata perch´ questo possa raggiungerle.255. e abilita il multicast sull’interfaccia. Supponiamo di avere la rete schematizzata in fig. e le opzioni sono quelle riportate in tab. dato che l’indirizzo ` di classe C). per questo si usa il comando route. e. tutto quello che dovete fare ` specificare qual’` il numero del centralino e e e quali sono i numeri diretti. accessibile con man ifconfig. che normalmente vengono lasciate al valore di default. multicast [-]promisc netmask addr Tabella 7. Se non si specifica nessuna direttiva il comando viene usato per mostrare lo stato corrente della tabella. nel caso specifico per` essa e o sembra non comparire.1. che ` posta a cavallo fra due reti diverse.7.10.168.3. Il comando permette di manipolare la tabella di instradamento del protocollo IP: questa ` una tabella usata e mantenuta dal kernel per decidere come smistare i pacchetti in uscita e e in transito. imposta la maschera di rete per l’indirizzo.5. che si chiama cos` proprio perch´ serve a specificare la strada che i pacchetti possono ı e prendere per arrivare a destinazione. La rete su cui si allaccia l’interfaccia e pu` anche essere specificata esplicitamente indicando la netmask con una opzione del tipo: o [root@havnor root]# ifconfig eth0 192. e del che ne permette la cancellazione.).255. Valore [-]arp media type Significato attiva e disattiva (con -) l’uso del protocollo ARP per l’interfaccia.9. Le principali sono elencate in tab.3 Il comando route Avere attivato l’interfaccia ed averle assegnato un numero di IP ` solo il primo passo. perch´ sia e e possibile utilizzare la rete occorre anche impostare l’instradamento. ecc. Se non specificato il default ` arp.255. nel nostro esempio questa dovr` e a . 7.9: Possibili opzioni del comando ifconfig. il e comando appena visto assegna automaticamente all’interfaccia una netmask corrispondente alla classe cui l’indirizzo appartiene secondo la suddivisione tradizionale di tab. questo ` dovuto al fatto che. se non viene specificato esplicitamente.3 (nel caso sarebbe pari a 255.0 Oltre ai due argomenti up e down appena illustrati. In questo caso si vede che un ruolo particolare ` rivestito e e dalla macchina havnor. e vediamo come deve essere configurata la tabella di instradamento per le varie macchine di cui la rete ` composta. tramite il parametro type (che pu` assumere ad esempio valori come 10base2. LA CONFIGURAZIONE DI BASE 273 Si ricordi che ad ogni indirizzo ` sempre associata una rete. per le altre. Il concetto fondamentale del routing ` che ciascun nodo sulla rete deve sapere a quale nodo e limitrofo deve rivolgersi per inviare un pacchetto verso una certa destinazione. normalmente ` selezionato e automaticamente quando si attiva l’interfaccia. 10bao seT. In realt` quando si ha a che fare con una rete locale le cose sono molto pi` semplici.0. e Il comando prende come argomenti delle direttive che ne specificano le operazioni. tornando a u all’analogia telefonica. di solito viene impostato automaticamente usando il default che ` auto.100 netmask 255. il comando ifconfig supporta molte altre direttive di configurazione. attiva e disattiva (con -) il modo promiscuo (in cui tutti i pacchetti vengono ricevuti) per l’interfaccia. 7. 7. si rimanda alla lettura della pagina di manuale. le direttive fondamentali sono sono due: add. che prenderemo come riferimento per i nostri esempi.0.

che invece ` il lavoro svolto dai router. abilitando l’opportuno supporto nel kernel. non effettua la risoluzione degli indirizzi.5 usando route. perch´ questo e funzioni per` deve essere stato abilitato il cosiddetto IP forwarding. in maniera completamente trasparente ai livelli superiori.4. o e questo si pu` fare attraverso l’interfaccia del sysctl.5. prende gli stessi valori e usati da ifconfig riportati in tab. 7. andando su havnor avremo: tecnicamente si parla di un bridge quando si ha a che fare con un apparato che fa da ponte fra due sottoreti fisiche passando i pacchetti dall’una all’altra a livello di datalink.3). u opera direttamente sulla tabella di routing (il default).8). 7. nel caso illustrato in fig. -v Tabella 7. ripetuto due volte stampa pi` informazioni. Quando ` invocato senza parametri il e e comando vi mostra il contenuto corrente della tabella di instradamento.10: Opzioni a riga di comando per l’uso di route. Linux pu` essere utilizzato anche in questo modo. 7. Figura 7. passando i pacchetti da una interfaccia ad un’altra. fare da ponte16 fra le due reti.5: Schema di una rete di prova.274 Opzione -C -e -F -n -A CAPITOLO 7. Ad esempio. usa gli indirizzi della famiglia passata come parametro (il default ` inet per gli indirizzi IP. L’AMMINISTRAZIONE DI BASE DELLE RETI Descrizione opera sulla cache di instradamento del kernel. Il primo passo ` sempre quello di controllare la situazione corrente. o usando direttamente i file con cui questa o viene rappresentata nel filesystem /proc. usa il formato di netstat (vedi sez. qui per` o o stiamo parlando semplicemente del passaggio di un pacchetto da una interfaccia ad un altro a livello di rete. 7. e 16 . che di default ` disabilitato. per cui abilitare l’IP forwarding baster` eseguire il a comando: [root@havnor root]# echo 1 > /proc/sys/net/ipv4/ip_forward Vediamo allora come configurare le rotte della rete in fig. esegue le operazioni in maniera prolissa.

interfaccia verso cui sono inviati i pacchetti. in generale le rotte impostate con route vengono dette rotte statiche (in quanto una volta impostate non vengono pi` cambiate).0 192.168. la terza la sottorete coperta dalla destinazione. valore iniziale dell’RTT (Round Trip Time) per il protocollo TCP. la quarta lo stato della rotta e l’ultima l’interfaccia usata per l’invio dei pacchetti.3. LA CONFIGURAZIONE DI BASE 275 [root@havnor root]# route -n Kernel IP routing table Destination Gateway 192.168.0 0. e Tabella 7. 7.0 0.0.0.0.7.0. i demoni di routing sono programmi che implementano questi protocolli e aggiornano automaticamente la tabella di instradamento con le informazione ottenute.0. che usualmente vengono chiamate anche rotte.0.0 0.0 se non impostato).0. default per la window size delle connessioni TCP su questa rotta.3. L’output usa la formattazione appena mostrata in cui la prima colonna identifica la destinazione.1 Genmask 255. maggiori dettagli sono nella pagina di e manuale. Nell’esempio mostrato si pu` notare come ci siano tre diverse destinazioni associate a tre o diverse sottoreti. il significato delle altre colonne ` associato e agli aspetti pi` sofisticati del routing.0.0 Flags U U U UG Metric 0 0 0 0 Ref 0 0 0 0 Use 0 0 0 0 Iface eth0 eth0 eth1 eth0 e si ` usata l’opzione -n per avere un output con i valori numerici per gli indirizzi. indirizzo del gateway (0.6) i nomi delle macchine e delle reti. 7. Nome Destination Gateway Genmask Flags Metric Ref Use Iface MSS Window irtt HH Arp Descrizione rete o nodo di destinazione.0. 7. metrica della rotta (distanza dalla destinazione in numero di salti).255. netmask della rete di destinazione flag associati alla rotta (vedi tab.255.0 192. numero di riferimenti nella tabella di instradamento (non usato nel kernel). di cui due fanno capo alla stessa interfaccia (quella che in sez.12).255.0 0. numero di voci ARP e rotte in cache che fanno riferimento allo stessa intestazione hardware.0. 7.1.17 che modificano continuamente le rotte presenti nella tabella di instradamento per tenere conto delle condizioni della rete.0 255. non esiste un gateway (` come per le telefonate all’interno dell’ufficio.255.0. 7.0 255.0. numero di verifiche sulla rotta. Per tutte queste sottoreti. la seconda il gateway (nella nostra analogia il centralino per quella destinazione). 17 .255.0. flag che indica se il l’indirizzo hardware per la rotta in cache ` aggiornato. in contrapposizione alle u rotte dinamiche che vengono impostate dai demoni di routing. e L’uscita del comando mostra le voci presenti nella tabella di instradamento. default per l’MMS (Maximum Segment Size) delle connessioni TCP su questa rotta.0 192.1.3 alla presenza di protocolli usati dai router per scambio delle informazioni. essendo esse accessibili direttamente da una interfaccia locale.11.0.168.168.168. Se non specificato altrimenti il comando tenta anche di risolvere (vedi sez.255. uno specchietto u delle informazioni mostrate dal comando ` in tab. gestiti di norma dai demoni di routing. e non c’` bisogno di usare il centralino) e questo ` indicato dall’uso dell’indirizzo generico in e e abbiamo accennato in sez.11: Nomi della colonna e relativo significati per le varie informazioni riportate nell’uscita del comando route.2 abbiamo visto essere multihomed).0 0.

ed invia un pacchetto in uscita sulla . Il problema si pone quando la e struttura della rete ` pi` complicata. per passare da una rete all’altra.168. installata dinamicamente da un demone o una redirezione. con le sue due interfacce di rete.168.255.0. Il comando ` mostrato per havnor. questo si fa ad esempio con il comando: [root@havnor root]# route add default gw 192. Per le macchine sulla rete 192.0 di usare come gateway la macchina 192.168.168. in quanto cambiare i contenuti della tabella di instradamento ` una operazione privilegiata. non c’` bisogno di a e chiamare esplicitamente route.0.276 CAPITOLO 7. cio` l’indirizzo cui e e devono essere inviati i pacchetti che non hanno una strada specificata altrimenti. lo stesso vale per le macchine di quella e LAN.1 Il kernel ordina le rotte nella tabella di routing in ordine di dimensione della rete di destinazione a partire da quella pi` specifica per arrivare alla pi` generica (di norma quella associata u u al default gateway che ha per destinazione tutta internet). modificata da un demone o una redirezione.234.12: Significato dei simboli utilizzati nella colonna Status del comando route. devono attraversare havnor.0 netmask 255. in tal caso la destinazione ` indicata dall’indirizzo nullo (che fa le veci della wildcard).0 gw 192. L’ultima riga indica invece quello che ` il default gateway.0 gw 192.5.168. che non possono accedere direttamente al tratto di rete delle precedenti. fa da tramite fra i due tratti separati. infatti tutte le volte che tirate su una interfaccia la rotta per la rete a cui l’indirizzo ` associato viene inserita automaticamente. si deve specificare esplicitamente una rotta statica che indichi anche quest’ultima come gateway per quella rete. e usa un gateway. cos` se lorbaner vuole accedere a gont. e la destinazione ` un nodo.0 c’` per` il problema che esse non possono vedere e o direttamente il router. ma dovr` essere e e a ripetuto per tutte le macchine mostrate in fig. Allo stesso modo perch´ oppish possa accedere ad hogen (e ad internet e attraverso il router roke) si dovr` impostare una rotta statica con: a [root@oppish root]# route add -net 192. rotta reintegrata da un instradamento dinamico.168.168. e la rete ` divisa in diverse parti. si dovr` ı a impostare una rotta statica con: [root@lorbaner root]# route add -net 192. Nel caso di un computer con una sola interfaccia di rete inserito in una LAN singola.168. rotta bloccata (impedisce l’instradamento per la destinazione specificata).0 netmask 255.1 che ovviamente deve essere dato da root. Tabella 7. cio` l’indirizzo della macchina (di solito un router) che si usa per uscire in e internet.234 che dice ai pacchetti destinati alla rete 192. che ` posto su una LAN diversa. installata da addrconf. e In realt` se avete una sola interfaccia.0.160.168.255. L’AMMINISTRAZIONE DI BASE DELLE RETI seconda colonna. voce nella cache. In tutti i casi in l’accesso ad una rete ` condizionato al passaggio da una macchina specifica e che fa da collegamento. 7.0. e non uscite dalla rete locale. e u e Simbolo U H G R D M A C ! Significato la rotta ` attiva. che.168.168. In questo caso infatti i pacchetti. una volta assegnato l’indirizzo con ifconfig tutto quello che resta da fare ` specificare qual’` il e e default gateway.255.255.

d/network /etc/rc.d/rc3.2. Tabella 7. 7.d/. perch´ la rotta per la rete 192.14 si sono riportati quelli delle principali distribuzioni.7. Di solito la configurazione dei dati permanenti della rete viene effettuata una volta per tutte in fase di installazione. in tab.3. permette di impostare oltre alla destinazione e all’eventuale gateway anche una serie di altre caratteristiche. dove una opportuna applicazione vi richieder` tutte le informazioni a necessarie che verranno memorizzate negli opportuni file di configurazione (vedi sez. in questo caso basta identificare univocamente la voce che si vuole cancellare perch´ il comando abbia effetto.5)...d/.d/rc3.inet2 /etc/rc. 7. queste in genere sono opzionali o inutilizzate per le rotte statiche e di norma vengono automaticamente impostate agli opportuni default relativa all’interfaccia cui la rotta fa riferimento.inet1 /etc/rc. /etc/rc. Le opzioni base (-net e -host) valgono anche per il comando del.d/rc. quando si aggiunge una nuova rotta alla tabella di instradamento.3.reinstate dev Parametro Nm Gw – M M W I If Descrizione imposta la maschera per rete imposta l’indirizzo del gateway installa una rotta bloccata imposta il valore del campo Metric imposta la Maximum Segment Size del TCP per la rotta imposta la dimensione della advertizing window del TCP per la rotta imposta il Round Trip Time iniziale per la rotta flag diagnostici usati dai demoni di routing imposta l’interfaccia usata per raggiungere la destinazione Tabella 7.d/.d/init.168. La configurazione della rete all’avvio viene fatta da degli opportuni script di inizializzazione. per impostare gli indirizzi IP sulle interfacce ed il default gateway (o eventuali rotte statiche).14: Gli script di inizializzazione della rete per varie distribuzioni. In genere.. e deve essere seguito dall’indirizzo (di rete o di nodo) della destinazione (sia in forma numerica che simbolica).13: Direttive del comando route. 7. Cos` nella rete e ı di esempio un pacchetto destinato ad oppish verr` instradato (correttamente) su havnor e non a su roke. per le distribuzioni che supportano i run level in stile System V (tutte tranne Slackware).d/rc.3. per far partire o fermare la rete ` sufficiente lanciare uno di questi script e rispettivamente con il parametro start o stop. nel caso si sia indicata una rete.13. specificare anche la relativa netmask con la direttiva netmask ed eventualmente l’interfaccia da utilizzare con la direttiva dev. 7..0 ` pi` specifica di default.d/networking /etc/rc.3. la differenza fra ` che e mentre con add devono essere specificate interamente le caratteristiche della rotta.d/network Servizi /etc/rc2.4 La configurazione automatica. e Direttiva netmask gw reject metric mss window irtt mod. Di solito i casi pi` comuni che si presentano sono due: u . e e u Il comando route. la cui locazione dipende dalla distribuzione.. 7. LA CONFIGURAZIONE DI BASE 277 prima rotta che comprende nella sua destinazione l’indirizzo cui esso ` destinato.. /etc/rc. In generale la direttiva add prende sempre due opzioni: -net per indicare una voce riferita ad una rete e -host per una stazione singola. le altre principali direttive utilizzabili sono riportate in tab. Gli script usano al loro interno i comandi visti in sez. Distribuzione Debian Slackware RedHat Suse IP e routing /etc/init. Si deve inoltre.dyn.

vi consiglio caldamente di usare le varie classi riservate per le reti locali di tab.15: Comandi di configurazione della rete.18 Quasi tutte le distribuzioni hanno dei programmi per configurare la rete locale. nel qual caso non dovrete fornire a nessuna informazione specifica. Nel primo caso vi verranno chiesti i dati necessari alla connessione. Come accennato tutte le distribuzioni attivano la rete tramite gli opportuni script di avvio. Distribuzione Debian RedHat Slackware Comando dpkg-reconfigure etherconf netcfg. qual’` il default gateway. che vi devono essere forniti dal provider (ad esempio nel caso del modem numero telefonico. che la IANA ha destinato appositamente a questo uso. u a per quei pochi provider che non forniscono l’informazione.278 CAPITOLO 7. u 19 nel caso di Debian non c’` un programma specifico. gli indirizzi dei DNS (torneremo su questo in sez. 7. e ecc. Questo ` un passo necessario anche se volete creare la vostra rete interna. Se invece nella rete ` disponibile un server DHCP l’indirizzo e non dovr` essere specificato a mano. Nel secondo caso invece ` molto probabile che dobbiate eseguire voi l’impostazione dell’IP e chiedendo all’amministratore di fornirvi una serie di informazioni.15. che usa il sistema e o standard di debconf per effettuare la riconfigurazione. in genere attraverso una interfaccia a finestre e campi (che pu` essere grafica o testuale). che a e tratteremo in sez. e l’indirizzo del gateway (oltre alla informazione sul DNS da usare).3.1) a utilizzare opportunamente le informazioni che gli vengono fornite dal provider per eseguire le configurazioni opportune. se con le vostre macchine non accedete mai ad internet potreste anche pensare di usare altri indirizzi. ad esempio attraverso un modem. 7. 7. I comandi pi` comuni sono riportati in o u tab. 7. uno specchietto degli script usati ` riportato nella seconda colonna di tab. L’AMMINISTRAZIONE DI BASE DELLE RETI • Il computer di casa. In questo caso non dovete preoccuparvi dell’impostazione dell’indirizzo IP in quanto ci penser` il programma di connessione (che in genere ` una qualche forma di front-end per pppd. ma si pu` usare il pacchetto etherconf.) ed eseguono poi i comandi necessari ad attivare le interfacce ed impostare le rotte statiche. ADSL).19 che permettono di impostare questi valori in maniera semplice. 7.6. modalit` di autenticazione) ed eventualmente quelli relativi al vostro modem a (anche se ormai tutte le distribuzioni sono in grado di eseguire il riconoscimento automatico). e che non vengono mai usati per macchine pubbliche su Internet.7. • Un computer connesso in rete locale (con una scheda di rete). in questo caso e l’amministratore di rete siete voi. i siti su internet che hanno i numeri che voi avete assegnato alle vostre macchine interne non sarebbero pi` raggiungibili. In particolare vi occorrer` il a numero IP da assegnare alla vostra macchina. se non quella di usare DHCP. Al pi` ci potr` essere da configurare a mano. In genere questi script e non fanno altro che andare a leggere degli opportuni file di testo che contengono le informazioni necessarie (quante interfacce ci sono. e i numeri li dovete decidere da soli. 18 .14. 7. che si collega ad internet attraverso un provider (connessione via modem analogico. username e password del vostro account. ed in genere si tratta di soltanto di specificare i valori richiesti.5). Tutti a a i programmi di configurazione prevedono questa possibilit`.6. che va interamente a vostro scapito.5 I file di configurazione delle interfacce statiche. netconfig netconfig Tabella 7. questo purtroppo ` un errore sciocco. Una volta infatti che uno di questi computer e dovesse accedere ad internet. ma potr` impostato automaticamente grazie ad esso. la netmask. quali IP devono essere assegnati. ISDN. dopo di che sar` il programma di connessione che si preoccuper` di eseguire le relative operazioni a a per attivare la connessione.

per i primi due non occorre altro. in realt` si tratta del file di configurazione usato dai comandi ifup e ifdown che sono quelli usati da Debian a per gestire attivazione e disattivazione delle interfacce. Le due righe seguenti.255. Debian e RedHat (Mandrake usa gli u stessi file di RedHat).3. Quest’ultimo deve essere specificato una volta sola. down. la netmask e l’indirizzo del gateway. che di solito si indentano. introdotta dalla parola chiave auto. che possono essere specificate sia insieme. ma se si modifica la configurazione a mano. Debian Il file di configurazione delle interfacce20 ` /etc/network/interfaces. che verr` eseguito a rispettivamente dopo e prima dell’attivazione e prima e dopo la disattivazione. usando le parole chiave up.127. introdotte dalla parola chiave iface. ma se si specifica static si devono impostare i relativi parametri nelle righe seguenti. per cui se vogliamo effettuare una impostazione permanente dobbiamo andare a modificare i file in cui sono memorizzate le informazioni usate dagli script di avvio della rete.177. LA CONFIGURAZIONE DI BASE 279 L’uso manuale dei singoli comandi per impostare la rete lo abbiamo gi` discusso nelle sezioni a precedenti.21 e le modalit` della a stessa. dice quali sono le interfacce attivare automaticamente all’avvio del sistema. ma sono possibili anche ipx per IPX. come nell’esempio. che in altrettante righe distinte. post-down seguite dal comando. il cui formae to ` descritto in dettaglio dalla omonima pagina di manuale. dhcp static si richiedono i dati di configurazione ad un server DHCP. 20 . farlo a mano pu` servire quando non avete la grafica a disposizione. Per ciascuna interfaccia deve essere fornita una riga in cui specificarne il nome.0 gateway 194. Possono inoltre essere specificati dei comandi da u chiamare contestualmente all’attivazione e alla disattivazione dell’interfaccia. nel caso in esempio si sono indicati l’indirizzo.177. e inet6 per IPv6. Infine ` possibile usare la parola chiave mapping per effettuare una mappatura fra e interfacce logiche e fisiche. come nell’esempio. indentate per chiarezza.1 la prima riga. queste sono sostanzialmente tre: loopback si usa per l’interfaccia di loopback. al successivo riavvio tutti i cambiamenti saranno perduti. nel caso compaiano pi` interfacce.127. servono a impostare i parametri di ciascuna interfaccia. cos` come pu` essere diverso il loro ı o formato.255. prenderemo in esame due dei casi pi` comuni. la famiglia di protocolli usata. 21 inet indica l’usuale TCP/IP. specificano le ulteriori opzioni. per maggiore chiarezza. Quando si usa la parola chiave iface le righe successive. In genere i programmi di configurazione automatica (o i vari programmi grafici per la configurazione) non fanno altro che leggere e modificare i valori che stanno su questi file.234 netmask 255. si assegnano i valori secondo i parametri specificati nelle righe seguenti. Anche questi file variano da distribuzione a distribuzione. pre-up. Per l’uso normale ` e e sufficiente specificare i dati con un contenuto del tipo: auto lo eth0 iface lo inet loopback iface eth0 inet static address 194. essendo file di o testo basta usare un editor qualunque.7.

a Il c