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

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

.

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

1: Schema della struttura del sistema operativo GNU/Linux. Infine c’` un’ultima parte del kernel.2 di [1]. specifiche a e 1 . 1. Torneremo brevemente sull’argomento in sez. u o 4 questa in realt` non ` un unico sottosistema come le precedenti. 1. ma un insieme di varie parti diverse. La ı memoria virtuale si incarica anche di gestire.1. 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.1). Questa architettura comporta che solo il kernel viene eseguito in modalit` privilegiata. I normali programmi invece e verranno eseguiti in modalit` protetta.1 come VM. 1. in un ambiente virtuale. che vengono utilizzate attraverso l’interfaccia fornita dalla libreria di sistema (la GNU C library di fig.1 le cosiddette system call. 1. (sigla che sta per Virtual Memory) si occuper` invece di gestire l’uso della memoria disponibile.2 CAPITOLO 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. 2 e oggetto di continui rifacimenti. che tratteremo in sez.1 come scheduler. l’eventuale spostamento delle pagine di memoria meno usate su uno opportuno spazio disco (lo swap. 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. cos` che sia impossibile che un processo possa accedere alla memoria di un altro processo. ma oltre quelle dello standard Linux supporta alcune system call ulteriori relative a sue estensioni specifiche. quella indicata in fig.1 con l’indicazione generica driver. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX Figura 1. 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).3.4 che e lo standard in questo caso si chiama POSIX. quella indicata in fig. 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’user space. in cui essi vedono a se stessi come se avessero piena disponibilit` della CPU e della memoria. ı Una seconda parte. indicata in fig.1.2. 1. 5. in caso di esaurimento della RAM. ed a ` l’unico a poter accedere direttamente alle risorse dell’hardware. in quanto critico per tutte le prestazioni del sistema. Una parte del kernel.5) evitando di fermare l’esecuzione di un processo per una temporanea mancanza di memoria.

Questa. quelli che eseguono vari compiti di amministrazione.2.4. 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. su cui torneremo in dettaglio in sez. 5. terminata la fase di inizializzazione (in e cui ad esempio si esegue una scansione delle periferiche disponibili. nel caso di Linux per l’architettura PC i due principali sono LILO e GRUB.1.4 e sez.5 che a sua volta recupera (in genere dal disco) una immagine del kernel che viene caricata in memoria ed eseguita.1. che vedremo in sez. come la copia di un file. All’accensione del computer viene eseguito il programma che sta nel BIOS. cui spesso si fa riferimento dicendo che in un sistema unix-like tutto ` un file. 1. 5.4).2. .2. per il tipo di periferica in questione. Nei PC tutto ci` viene effettuato caricando dal o dispositivo indicato nelle impostazioni del BIOS un apposito programma. Questo significa ad esempio che il kernel di per s´ non dispone di primitive per tutta una e serie di operazioni. 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. 1. 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. L’ARCHITETTURA DEL SISTEMA. il cui solo compito ` quello di far partire un sistema operativo.4.2) il filesystem su cui ` situata a e la directory radice (vedi sez. o vengono. 1. il primo chiede l’utente e poi chiama il secondo a e che chiede la password. 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. Per convenzione questo a processo si chiama init.3.1. leggendo l’originale e scrivendo sulla copia. 2) che una delle tante interfacce grafiche disponibili (argomento che riprenderemo in sez. 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. Fra questi processi ci saranno ad esempio quelli che forniscono i vari servizi di rete. e far` partire il primo processo.3). o dal lanciare un server web che viene eseguito anche quando nessuno ` collegato e al sistema. 3.1. questo dopo aver fatto i suoi controlli interni esegue la procedura di avvio del sistema.3. 7 questa infatti viene eseguita usando semplicemente le funzioni che permettono di leggere e scrivere il contenuto di un file. in genere e e ogni sistema ha il suo.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. 6 in realt` se la cosa ` fatta da console i programmi sono due. per vari motivi. il bootloader. torneremo su questo in sez. 5.3. 1.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. che potrebbe essere sia una shell a riga di comando (argomento che tratteremo in dettaglio in cap. e si leggono le tabelle delle partizioni dei vari dischi) si incaricher` di montare (vedi sez. 5 questo ` un programma speciale.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. 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. permette di definire una interfaccia di accesso generica per qualunque dispositivo. eseguiti all’interno del kernel. 3 si incaricher` di accedere alle periferiche per conto dei programmi. Una volta che il controllo ` passato al kernel questo. cos` come quelli che si occupano di chiedere nome e ı password dell’utente che si vuole collegare. 3.

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

Questi problemi oggi sono sempre pi` rari. ed una flessibilit` nettamente inferiore in quanto si perde la capacit` di a a poter specificare eventuali opzioni al momento del caricamento. Linux cio` pu` essere esteso (torneremo su questo in sez. ottenendo quello che viene chiamato un kernel monolitico (come sono i kernel degli altri Unix). u In realt` ` sempre possibile costruire un kernel Linux comprensivo di tutti i moduli che a e servono. quello espresso dalla frase “everything is a file” (cio` tutto ` un file). anche quando queste sono essere sparse qua e l` sul disco.2). dato che attraverso di essa ` in grado di supportare con e relativa facilit`. . che permettono di ampliare le capacit` del a sistema (ad esempio fargli riconoscere una nuova periferica). salvo limitazioni della realizzazione. 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.1. a partire da u quelli usati da Windows e dal DOS. 5. a seconda dei casi.2 L’architettura dei file Un aspetto fondamentale della architettura di GNU/Linux ` quello della gestione dei file. torneremo in dettaglio sull’interfaccia dei file (e di come possa essere usata anche per altro che i file di dati) in sez.2. 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. L’ARCHITETTURA DEI FILE 5 per cui non ` classificabile in nessuno di questi due rami e prende invece. e Inoltre. per cui inserendo gli opportuni moduli nel sistema e diventa possibile accedere con la stessa interfaccia (e. essendo in presenza di un sistema multiutente e multitasking.1. 5. e u 12 nel senso che le interfacce hardware per i dischi consentono l’accesso diretto al contenuto di questi settori. Quello che contraddistingue Linux ` che l’interfaccia per la lettura del contenuto del filesye stem ` stata completamente virtualizzata. Dato che essa gioca un ruolo centrale nel sistema. 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. le e migliori caratteristiche di ciascuno di essi. e da tutte le altre versioni di Unix. Una seconda peculiarit` di Linux ` quella del Virtual File System (o VFS). i moduli. 1.4) inserendo e o a sistema attivo degli ulteriori “pezzi”. Lo spazio disco grezzo ` normalmente12 suddiviso in settori contigui e di dimensione fissa. in maniera completamente trasparente all’utente) ai pi` svariati tipi di filesystem. ma all’interno del sistema questo viene organizzato in maniera tale da permettere il rapido reperimento delle informazioni memorizzate su questi settori. 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). Un’altra delle caratteristiche peculiari di Linux rispetto agli altri kernel unix-like ` quella e di essere modulare. dal MacOS. 1. una variet` di filesystem superiore a quella di qualunque a a altro sistema operativo. ed in maniera nativa. costringendo al riavvio in caso di necessit` di cambiamenti. quello che ` e importante tenere presente da subito ` che la disponibilit` di una astrazione delle operazioni sui e a file rende Linux estremamente flessibile. 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. 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. esso e deriva direttamente da uno dei criteri base della progettazione di tutti i sistemi Unix. ma comporta un maggiore consumo di memoria (dovendo tenere dentro il kernel anche codice non utilizzato). 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.2.

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

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 ). e il comando mostra l’elenco dei file nella directory corrente. un file speciale che identifica una linea di comunicazione unidirezionale. 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. Funzione open read write llseek ioctl readdir Operazione apre il file. Il Virtual File System ` anche il meccanismo che permette al kernel di gestire tanti filesystem e diversi.1. Usando l’opzione -l ` possibile e ottenere una lista estesa. un file che contiene un riferimento ad un altro file o directory.1: I vari tipi di file riconosciuti da Linux Le principali operazioni sono riportate in tab. un file che contiene una lista di nomi associati a degli inode. un file speciale che identifica una linea di comunicazione bidirezionale. si sposta all’interno del file.2. scrive sul file. 7 d l c b p s Tabella 1. questa ` la ragione principale della grande flessibilit` di Linux nel supportare i filesystem pi` diversi. legge dal file. 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. accede alle operazioni di controllo.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). 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. che pi` specialistiche come lo u spostamento all’interno di un file. 1. un file che identifica una periferica ad accesso a caratteri. ogni oggetto del sistema visto attraverso il Virtual File System definisce la sua versione di queste operazioni. un file che identifica una periferica ad accesso a blocchi. Come si pu` notare sono o definite sia operazioni generiche come la lettura e la scrittura. Tabella 1. 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). 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. u . Uno dei comandi fondamentali per la gestione dei file ` ls (il cui nome deriva da LiSt file). in cui compaiono varie propriet` del file.2: Principali operazioni sui file definite nel VFS. 1. legge il contenuto di una directory.2.

2). Si noti infine come in un sistema unix-like non esista un tempo di creazione del file. anche questo secondo la notazione riportata nella terza colonna della stessa tabella. a meno di non richiederlo esplicitamente con l’uso dell’opzione -a. Il comando ls ` dotato di innumerevoli opzioni.2).1.8 CAPITOLO 1.4. con l’eccezione dei socket.2. l’elenco completo ` riportato nella pagina di e manuale accessibile con il comando man ls.3: Principali opzioni del comando ls. 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.”) non vengano riportati nell’output di ls. 1. 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. esegue la lista ricorsivamente per tutte le sottodirectory. il numero di hard link (che vedremo in sez.2. Altre caratteristiche sono i tempi di ultimo e accesso. 1. e come il primo carattere della prima colonna indichi tipo di file. che gli consentono di visualizzare le varie e caratteristiche dei file. la dimensione.4. 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. si noti come la prima lettera in ciascuna riga indichi il tipo di file. usa il tempo di ultimo accesso al file. Il comando prende come parametro una lista di file o directory. mostra i file invisibili. per questo tali file sono detti invisibili. 1. Una convenzione vuole che i file il cui nome inizia per un punto (“. 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. scrive il numero di inode (vedi sez. Tabella 1.2). 1. senza opzioni viene mostrato solo il nome del file (se esiste) o il contenuto della directory specificata. e non segue i link simbolici. questi ultimi infatti non sono di norma utilizzati dai comandi di shell.2). L’opzione -l permette di mostrare una lista in formato esteso in cui vengono riportate molte informazioni concernenti il file. Il sesto campo ` il tempo di ultima modifica del file e l’ultimo campo il nome del file. modifica e cambiamento (su cui torneremo fra poco). mostra solo il nome e non il contenuto quando riferito ad una directory.4. 1. le informazioni relative a permessi di accesso e proprietari del file (che vedremo in dettaglio in sez.3. 1. Il quinto campo indica la dimensione. usualmente riportata in byte. mentre il resto della colonna indica i permessi del file. ma vengono creati direttamente dai programmi che li usano (il caso pi` comune ` X window). 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).2). Abbiamo visto in precedenza un esempio di questa lista. 1. 1. usa il tempo di ultimo cambiamento del file. Le opzioni sono moltissime. Si badi bene che questo e tempo riguarda solo il contenuto del file. mentre il terzo ed il quarto campo indicano rispettivamente utente e gruppo proprietari del file (anche questo sar` trattato a in sez. Il secondo campo indica il numero di hard link al file (su questo torneremo in sez.2. 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. Opzione -l -a -i -R -c -u -d Significato scrive la lista in formato esteso.2. non esiste pertanto un comando u e che permetta di crearne uno in maniera esplicita. e le principali sono riportate in tab. a ma solo una convenzione usata e rispettata dai vari programmi in user space. 15 . delle quali il tipo ` solo una.

da cui si evidenziano alcune delle caratteristiche di base di un filesystem. ed anche tutti i riferimenti ai settori del disco (i blocchi fisici) che contengono i dati. ognuno dei quali ha a una sua particolare struttura e funzionalit` proprie. le dimensioni. Figura 1. ma daremo una descrizione a grandi linee che si adatta alle caratteristiche comuni di qualunque filesystem usato su sistema unix-like. L’ARCHITETTURA DEI FILE 9 1. sulle quali ` e bene porre attenzione visto che sono fondamentali per capire il funzionamento dei comandi che manipolano i file e le directory. grazie al VFS. 1.1.2. L’unica informazione relativa al file non contenuta nell’inode ` il suo nome.2. ma semplicemente una etichetta associata ad un inode. Come mostrato in fig. 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. 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. infatti il nome di e un file non ` una propriet` del file. Una delle caratteristiche di Linux rispetto agli altri Unix ` quella di e poter supportare.1). le informazioni che il comando ls fornisce provengono dall’inode.2. i permessi di accesso. possiamo esemplificare la situazione con uno schema come quello esposto in fig. una enorme quantit` di filesystem diversi. 1.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.2 si possono avere pi` voci in directory diverse che puntano allo u .2: Strutturazione dei dati all’interno di un filesystem. 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. Per questo non entreremo nei dettagli di un a filesystem specifico. come il tipo (fra quelli di tab. utente e gruppo proprietario. 1. ma sono dei file speciali (di tipo directory. i tempi.

dato che o su un altro filesystem lo stesso numero identificher` un inode diverso. o symbolic link (quelli pi` simili ai collegamenti di Windows o u agli alias del MacOS). questo viene mostrato. Questo limita l’uso degli a hard link solo a file residenti sul filesystem corrente. 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. 1. Questo introduce il concetto di hard link : due file che puntano allo stesso inode sono fisicamente lo stesso file. Siccome uno stesso inode pu` essere referenziato in pi` directory. Per questo ogni inode mantiene un contatore che indica il numero di riferimenti (detto link count) che gli sono stati fatti. 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. oltre agli hard link appena illustrati infatti esistono anche i cosiddetti collegamenti simbolici. o Il problema con gli hard link ` che le directory contengono semplicemente il numero di inode. un file pu` avere pi` o u o u nomi. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX stesso inode.10 CAPITOLO 1. anche completamente scorrelati fra loro. ed il comando ln dar` un errore se si cerca a di creare un hard link ad un file posto in un altro filesystem. 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. come il file link mostrato in precedenza. Il comando generico che permette di creare dei link ` ln che prende come argomenti il file e originale ed il nome del link. che di default crea questo tipo di link. 1. Per superare questa limitazione sono stati introdotti i link simbolici. 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. ad esempio si ` creato il link simbolico link dell’esempio e precedente con il comando: . che vengono creati usando l’opzione -s del comando ln. dal valore numerico riportato nel secondo campo. nessuna propriet` specifica. pari a 2117. e per cui si pu` fare riferimento solo ad un inode nello stesso filesystem della directory. tempi di accesso o a contenuto permette di distinguerli. e ci permette di dire se un file ha degli hard link (anche se non indica dove sono). in quanto l’accesso avviene per entrambi attraverso lo stesso inode. Per creare un hard link basta usare direttamente il comando ln (da LiNk file). La differenza rispetto a Windows o MacOs ` che in un sistema e unix-like i link sono di due tipi. come permessi. nell’esempio del precedente risultato di ls.

di tipo symbolic link. La possibilit` di creare dei link alle directory tuttavia ` estremamente utile. Opzione -s -f -i -d -b Significato crea un link simbolico. lo spazio disco non viene rilasciato. La lista completa ` riportata nella pagina di manuale accessibile attraverso e il comando man ln.4. ` 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. a non cancella affatto i dati del file. a in Linux non ` supportata per la sua pericolosit`. e esegue un backup della destinazione se questa esiste gi`. piuttosto che dover spostare tutti i file baster` creare un link simbolico e si sar` risolto il problema. per cui anche se si cancella un file da una directory. Una seconda caratteristica dei link simbolici ` la possibilit` di creare dei link anche per e a delle directory. 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. con un link simbolico questo errore pu` essere corretto in quanto la cancellazione del link simbolico rimuove o quest’ultimo. a richiede conferma in caso di sovrascrittura. infatti qualora si a e voglia accedere ai file in una directory attraverso un percorso diverso. disponibili. e non il file referenziato. Il comando rm prende come argomenti una lista di file da cancellare. mentre con l’opzione -f si annulla ogni precedente -i ed inoltre non vengono stampati errori per file non esistenti. 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. Questa capacit` infatti. ma la funzione usata dal e sistema per effettuare questo compito si chiama in realt` unlink ed essa. Oltre a -s il comando ln prende una serie di altre opzioni le principali delle quali sono riportate in tab. ed ` pertanto e . a Tabella 1. ad esempio a causa di un programma che cerca dei file di configurazione in una locazione diversa da quella usuale. sebbene teoricamente possibile anche per gli hard link. L’ARCHITETTURA DEI FILE 11 piccardi@oppish:~/filetypes$ ln -s file link In questo caso viene creato un nuovo file. i dati del file vengono effettivamente rimossi dal disco dal kernel. che a ` questo punto pu` essere in qualsiasi altro filesystem. anche se solo per a lui. come mostrato nell’esempio precedente. ma si limita ad eliminare la relativa voce da una directory e decrementare il numero di riferimenti presenti nell’inode. 1.1. forza la sovrascrittura del nuovo file se esso esiste gi`. se si usa l’opzione -i il comando chiede di confermare la cancellazione. ma resta attivo un processo che lo utilizza. 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. Il comando per la cancellazione di un file ` rm (da ReMove file). crea un hard link ad una directory (in Linux questa non ` usabile). 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. Infine l’opzione -R (o -r) permette la cancellazione ricorsiva di una directory e di tutto il suo contenuto.2. ma con un hard link non ` pi` possibile fare questa e u distinzione e la rimozione diventa impossibile. e fintanto che il processo non avr` finito i dati resteranno. che avr` un suo diverso a inode. 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. Solo quando il numero di riferimenti ad un inode si annulla.4: Principali opzioni del comando ln.

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

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

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

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

e Lo standard prevede che debbano essere necessariamente presenti le sottodirectory di / specificate in tab. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX e questo ci mostra il contenuto sommario primi due livelli dell’albero. file degli utenti.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. con un esempio dei file e delle sottodirectory presenti in una distribuzione Debian. ecc. programmi.2. oggi sono usate principalmente per quei sistemi (come gli AMD-64) che supportano diversi formati binari (32 o 64 bit). documentazione. si organizzano cos` in maniera meticolosa ed a ı ordinata dati.0 che sono in corso di rilascio. sono previste delle ulteriori e sottogerarchie che definiscono ulteriori dettagli dell’organizzazione dei file. 1.3. per alcune di esse. al momento della stesura di questo testo la versione corrente ` la 2. e che pertanto devono essere situati sul filesystem usato per la directory radice.9 sono obbligatorie soltanto qualora si siano installati i sottosistemi a cui essi fanno riferimento (utenti. Un elenco delle specifiche delle caratteristiche e del contenuto di ciascuna delle sottodirectory di / ` riportato di seguito. /proc filesystem.out ad ELF. 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.9: Sottodirectory di / obbligatorie solo in presenza dei relativi sottosistemi. rilasciato come parte delle specifiche e LSB (Linux Standard Base) 2. file di configurazione. nella attuale versione 1. 1. 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). 25 le eventuali /lib<qual> contengono le versioni delle librerie di sistema in formati binari diversi.8: Sottodirectory di / obbligatorie per qualunque sistema. mentre quelle di tab.16 CAPITOLO 1. prevedendo una divisione molto rigorosa che permette una notevole uniformit` anche fra distribuzioni diverse. dato che essi non sarebbero disponibili se posti in filesystem diversi che possono essere montati solo dopo che il sistema ` partito. 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. come /usr e /var.24 Lo standard descrive in dettaglio la struttura dell’albero delle directory e il relativo contenuto. a cui tutte le distribuzioni si stanno adeguando. 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. diversi formati binari). 24 .8. le /lib alternative sono state usate al tempo della transizione dei programmi dal formato a. In particolare le directory vengono suddivise sulla base di alcuni criteri fondamentali. L’organizzazione dell’albero delle directory ` standardizzata in maniera molto accurata da e un documento che si chiama Filesystem Hierarchy Standard (abbreviato in FHS).3 delle LSB ` utilizzata la e versione 2.

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

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

posı sono essere reperiti sul documento ufficiale di definizione del FHS.pathname. o addirittura montate via rete e condivise fra pi` macchine. ` E evidente infatti che alcune directory (come /usr ed /opt) possono essere mantenute su ` partizioni e filesystem diversi rispetto alla directory radice. Figura 1. con quell’operazione che si chiama montaggio del disco.3) che i nuovi dischi devono essere inseriti in maniera opportuna all’interno dell’albero. L’importanza del Filesystem Hierarchy Standard diventa evidente quando si vanno ad esaminare le strategie partizionamento dei dischi. 5. disponibile all’indirizzo: http://www. 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. L’ARCHITETTURA DEI FILE 19 In fig. Anche in questo e caso ` opportuno separarle dalle altre directory.2.2. 1. Allora. e quali altre directory porre su altre partizioni. possono essere montate in sola lettura e non inserite nei backup (in quanto ` possibile sempre ripristinarle e dall’installazione).2. esse infatti servono solo come riferimento per montare i relativi filesystem virtuali. 1. 1.1. e 27 . u La situazione ` invece del tutto diversa per directory come /home e /var.3. E pertanto utile separare queste due directory che. e come vedremo in sez.3 ` riportata una rappresentazione grafica della struttura generale delle directoe ry prevista dal FHS.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. contenendo file comuni di norma identici per le diverse installazioni. 1. come illustrato in sez. 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. e Non esistendo il concetto di volume o disco come entit` separata. a parte la directory radice che viene montata dal kernel all’avvio.3: Struttura tipica delle directory. che siano filesystem contenuti in partizioni diverse dello stesso disco o in altri dischi. In tal caso infatti occorrer` stabilire quali directory a dovranno andare sul filesystem usato come radice. questo significa (come aca cennato in sez. 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).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. in modo che il loro contenuto possa essere visto all’interno delle opportune directory. Si tenga inoltre presente che alcune di queste directory (ad esempio /proc) devono essere lasciate vuote sul disco.27 tutti gli altri volumi.2. I dettagli come pleti sulla struttura (cos` come le specifiche relative ad i contenuti delle varie directory.com/fhs/. (si ` mostrata solo una parte delle directory previste). secondo il Filesystem Hierarchy Standard.

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

Filesystem virtuale che fornisce l’accesso ai segmenti di memoria condivisa. filesystem per la condivisione di file attraverso la rete attraverso il protocollo NFS creato da Sun. FreeBSD. il filesystem del sistema operativo RiscOS. Filesystem virtuale per consentire un accesso efficiente ai terminali virtuali. il filesystem journalled della IBM portato su Linux. ? File System. Oltre a specificare delle modalit` di funzionamento coi valori riportati in tab. un filesystem su ROM per sistemi embedded. Minix File System. il filesystem di OS/2. NT File System. Journalling File System. SMB 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. Filesystem virtuale che fornisce informazioni sul sistema. Il filesystem elementare usato dall’MSDOS. ad esempio usando l’opzione remount diventa possibile rimontare al volo un filesystem gi` montato senza smontarlo. il filesystem del MacOS (non MacOS X). per cambiare a alcune delle opzioni precedenti. Il filesystem Unix File System. NetBSD.11 l’opzione a -o consente anche di effettuare alcune operazioni speciali. filesystem standard di UnixWare disponibile anche su HP-UX e Solaris. filesystem distribuito su rete che supporta funzionalit` evolute come autenticazione. Network File System. QNX4 File System. Compressed ROM File System. il filesystem del sistema operativo Minix. il filesystem di IRIX. 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. se geomorphix. ? File System. Il filesystem FAT usato da Windows 95/98. il filesystem del sistema operativo BeOS. filesystem usato per montare le directory condivise di Windows. Second Extended File System (filesystem standard di Linux) in versione journalled. Un’altra opzione molto utile ` loop.1. replicazione e operazioni a disconesse. il filesystem usato da QNX4 e QNX6. a . il filesystem di Windows NT. Il filesystem dei CD-ROM. Veritas VxFS File System. BeOS File System.10: Principali filesystem disponibili su Linux e relativi nomi per l’opzione -t di mount. Cos` ad ı esempio. portato dalla SGI su Linux. la password di accesso verr` chiesta sul terminale.2. secondo lo standard ISO 9660. 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. che consente di montare il filesystem dal contenuto di e un file (ovviamente il file deve contenere un filesystem completo di un qualche tipo).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. il filesystem usato da vari Unix derivati da BSD (SunOS.iso /cdrom l’interfaccia (detta loopback ) inoltre consente anche di montare un filesystem opportunamente cifrato. 1. il filesystem standard di Linux. Coda? File System. 21 smbfs Tabella 1. Reiser File System un filesystem journalled per Linux. Hyerarchy File System. Filesystem virtuale contente le informazioni relative al bus USB. Second Extended File System. OpenBSD e MacOS X).

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

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

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

il processo iniziale che. 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. mentre i processi da lui creati vengono detti figli. e pertanto tutti i processi avranno un padre. in questa gerarchia init viene a ricoprire nel sistema un ruolo speciale. come radice dell’albero.1 Le propriet` dei processi a Come accennato in sez. 1.1. Questa caratteristica permette di classificare i processi in una gerarchia ad albero basata sulla relazione padre-figlio.1. 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. in questo e o contesto il processo originale viene chiamato padre. non ` figlio di e nessun altro processo.2 una delle caratteristiche principali dell’architettura dei processi in un sistema unix-like ` che qualunque processo questo pu` creare nuovi processi.3.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 .3. venendo lanciato direttamente dal kernel all’avvio. Questa classificazione pu` essere stampata con il comando pstree o che evidenzia in maniera grafica l’albero genealogico dei processi presenti nel sistema. L’ARCHITETTURA DEI PROCESSI 25 1.

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

in realt` lo scopo di ps non ` semplicemente a a e quello di fornire la lista dei processi in esecuzione. Ogni processo interattivo ` sempre associato ad un terminale di controllo.3. 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.conf /sbin/getty 38400 tty1 dato che la combinazione delle opzioni a e x. Questo ` il numero che il kernel utilizza per identificare univocamente ciascun processo. la descrizione del significato di quest’ultime andar` allora di pari passo con la spiegazione a dell’output del comando. L’ARCHITETTURA DEI PROCESSI 27 associati ad un terminale. e questo numero viene assegnato alla creazione del processo. 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). marcata TTY. mostra il nome del terminale di controllo del processo. essendo queste complementari. 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. infine l’opzione f permette di mostrare la gerarchia dei processi. e Come gi` questi primi esempi ci mostrano. marcata PID. insieme ad una serie o di informazioni relative alle risorse da esso utilizzate. mostra il cosiddetto process id del processo. L’uso dell’opzione r permette invece di restringere la selezione ai soli processi in esecuzione effettiva (cio` nello stato R. quanto quello di mostrare le loro caratteristiche. La prima colonna dei precedenti esempi. La seconda colonna. E uno specifico processo. 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. seleziona tutti i processi attivi nel sistema.1. che corrisponde ape .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.

La terza colonna.12: Elenco dei possibili stati di un processo in Linux. pur essendo attivo. 37 . Per capire il significato del campo STAT occorrono alcune spiegazioni generali sull’architettura della gestione dei processi. 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. eccetto lo stesso comando ps axf.12 gli stati di sleep sono due. nella colonna STAT si ` riportata la corrispondente e lettera usata dal comando ps nell’omonimo campo. in genere per` un processo. 1.3. i cui valori sono riportati in tab. si ha a disposizione un segnale apposito). come vedremo in sez. Tabella 1. o Il processo ` stato fermato con un SIGSTOP.2). in quanto ci permette di spiegare varie caratteristiche dell’architettura dei processi. Il pi` comune ` il primo. Se il processo non ` interattivo. e e non pu` essere interrotto in nessuna circostanza. 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. fossero in stato di sleep. 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). 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.28 CAPITOLO 1. Lo stato di stopped ` relativo ai processi la cui esecuzione ` stata fermata per una richiesta e e dell’utente (per fare questo. 1. l’esecuzione della maggior parte delle system call infatti pu` essere u e o interrotta da un segnale (i segnali saranno trattati in sez. Un o u processo in stato D comunque non avr` nessun effetto n´ sugli altri processi n´ sul sistema. 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. Il processo ` in attesa di un risposta dal sistema (in genere per I/O). per cui se un processo si blocca nell’esecuzione di una di queste esso pu` essere comunque terminato.12. o ` tracciato. Il sistema infatti prevede cinque possibili stati diversi per i processi. 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 “?”. 1. che a e e continuer` a funzionare senza problemi. a parte quello di non poter liberare le risorse occupate a dal processo. riporta un’altra informazione fondamentale: lo stato del processo. 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). Il caso pi` comune infatti ` quello in cui il programma ` in attesa u e e di ricevere dati da una periferica. contraddistinti dalle lettere S e D. marcata STAT. 1. 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. Il processo ` in attesa di un risposta dal sistema.2. e Come dettagliato in tab.3. e e Il processo ` terminato ma il suo stato di terminazione non ` ancora e e stato letto dal padre. 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). non ` assolutamente detto o e che sia anche in esecuzione. torneremo su questo a breve. Si noti allora come nell’elenco precedente tutti i processi. Come sistema multitasking Linux ` in grado di eseguire pi` processi e u contemporaneamente. ma pu` essere e o interrotto da un segnale.

per il semplice fatto che lo ` gi`. 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. la ricezione del loro stato di uscita. durante le operazioni di terminazione di un processo. Perci`. Vedremo fra poco per` che. o rendendo inutilizzabile il sistema. e lui deve invocare una apposita system call per ricevere lo stato di uscita. in quanto esso non occupa e e (a differenza di un processo bloccato in stato D) nessuna risorsa nel sistema. e si dice che il figlio diventa e orfano. e nel caso assegna a questi ultimi init come nuovo padre.3. La relazione padre/figlio infatti ` ben definita finch´ entrambi i processi sono attivi nel sistema. 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. tutti i file aperti dal processo vengono chiusi. 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. dato che init ` scritto bene e sa gestire la ricezione dello stato di uscita. Infine c’` lo stato di zombie. resta allocata soltanto una voce nella tabella dei processi che contiene le informazioni per riportare lo stato di uscita. cio` un processo che non esiste pi`. Si noti nella lista precedente la presenza di alcuni processi con una lettera aggiuntiva W nella colonna STAT. Questo ` quello che e in gergo viene chiamato uno zombie. e Dato che in un sistema Unix tutto viene fatto con i processi. a differenza dei processi in stato o D. 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). cosa non facile da ottenere o se si ` gi` esaurita la tabella dei processi. ma soprattutto il problema ` a chi fare questa notifica. e 39 per poterlo fare per` occorre avere un processo in grado di eseguire il comando. Resta il problema di come notificare l’avvenuta conclusione del processo. il cui significato pu` essere compreso solo ritornando con maggiori e o dettagli sulla relazione fra processo padre e gli eventuali figli. Di per s´ la presenza di uno zombie non ` un grave problema. ed infatti i programmi ben scritti non presentano mai questo problema. 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. Per questo il sistema controlla. ad esempio se questa ` stata regolare o ` stata dovuta ad un qualche e e errore. Se questo non viene fatto comunque il processo figlio si conclude regolarmente e tutte le risorse che occupava nel sistema vengono rilasciate. 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.1. se questo ha dei figli. quando un processo termina al padre viene inviato uno speciale segnale che lo avvisa del fatto. 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. perch´ ` terminato. e a . questi non sono processi effettivamente lanciati da init quanto dei processi interni al kernel (e da 38 si vedr` cio`. 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. e sar` lui che gestir`. E pertanto compito di chi scrive programmi che e a ` creano processi figli curarsi della ricezione del loro stato di uscita. a e che questo ` diventato 1. a riceverne lo stato di uscita liberando la voce che occupavano nella tabella dei processi. alla terminazione di questi a a ultimi. ad una successiva esecuzione di ps con opzioni che permettano di visualizzare il PID del padre. tranne la voce mantenuta nell’output di ps. con un nome del comando fra parentesi quadre e con un PID molto basso. per gli zombie ` possibile risolvere il problema e far si che essi siano terminati regolarmente e senza dover riavviare il sistema.38 Si dice allora che init adotta i figli dei processi che terminano. la memoria utilizzata viene liberata e con essa tutte le risorse occupate dal processo.

dove X indica quale propriet` del processo si vuole far comparire nella lista (secondo una tabella di a valori riportata nella pagina di manuale). 1. il che permette di identificarli. e -f che permette di avere una lista con pi` informazioni. UID.7 del secondo capitolo di GaPiL [1]. o 40 . Nel caso si usa la lettera W per indicare che i processi non usano memoria in user space. ecc.30 CAPITOLO 1.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`. Infine l’opzione o permette all’utente di specificare un suo formato.3.3) e la presenza di pagine di memoria bloccate. per una e a trattazione si pu` fare riferimento alla sezione 2.40 Le opzioni di visualizzazione di ps sono moltissime. Se invece si usa la sintassi SysV le opzioni pi` usate sono -e. riporta un nome utente. “N” e “L” e indicano rispettivamente una priorit` maggiore o minore di quella standard (torneremo sulla priorit` in a a sez. anche queste quest’ultima ` una caratteristica avanzata che va al di l` di quanto affrontabile in questa sede. Anzitutto notiamo che la u prima colonna. e qui potremo prendere in esame solo le principali. e s che stampa informazioni sui segnali. 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. Ciascun processo infatti mantiene le informazioni riguardanti l’utente che ha lanciato il processo ed il gruppo cui questo appartiene. altre opzioni sono v che stampa informazioni u relative all’uso della memoria virtuale. come lo scarico su disco dei buffer. Le altre lettere associate al campo STAT sono “>”. con l’uso di una serie di direttive %X. che permette di selezionare u tutti processi. 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. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX esso utilizzati) per la gestione di alcuni compiti interni. la generazione di eventi dovuti all’inserimento di periferiche (usato da USB e PCMCIA).2.

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

44 cio` il tempo trascorso da quando il sistema ` stato avviato.32 CAPITOLO 1. a meno di non aver impostato un intervallo diverso con l’opzione -d.0 0 0 0 0 S 0.13:06:35 up 6:04. Un esempio di output del comando ` il seguente: e top . Lo stesso vale per la directory radice.0 19 0 0 0 S 0.3 TIME+ 1:03.0 0. che lo esegue in modalit` batch. Per questo motivo ogni processo porta con s´. 6 users.0 0.0 0. nelle ultime due le statistiche di uso della memoria fisica e della swap.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. Se si vuole tenere sotto controllo l’attivit` del sistema non ` pratico ripetere in a e continuazione l’esecuzione di ps.2 0 824 768 740 S 0. in tal caso di a solito si usa anche l’opzione -n per specificare il numero di iterazioni volute. nella terza le statistiche di utilizzo della CPU. Come si pu` notare ps si limita a stampare la lista dei processi attivi al momento della sua o esecuzione. che richiede un parametro nella forma ss.57 0:00.3 0 864 784 756 S 0. 1.0 0.98.0% nice.0 0.00 0:00.04 0:00.44 numero di utenti e carico medio della macchina.66 0:00. 0.4 0 500 452 436 S 0. a I pi` rilevanti sono h e ? che mostrano un help in linea dei comandi disponibili.3 0. Le informazioni riportate di default sono il PID del processo (colonna omonima). 8288k buffers Swap: 524280k total. 1 running. anche l’indicazione della directory che considera come radice.00 0:49. 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. aggiornandola automaticamente in maniera periodica.0 0 968 932 836 S 0. Il comando opera normalmente in maniera interattiva.01 0:00. 0 stopped. le informazioni sui processi. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX ratteristica del processo.63 0:00.0 0.4 0 548 516 516 S 0. infatti bench´ di norma questa coincida con la radice del sistema. in modo da restringere un processo in una sezione o dell’albero dei file.0 0. dopo una riga lasciata vuota che serve per gestire l’input in interattivo.3% system.0 0.02 0:00. che deve specificarli tramite una lista di PID.2 0 0 0 0 S 0.0 0 0 0 0 S 0. evidenziando (con la stampa un grassetto) quelli trovati in stato e u runnable.0 0. Quando opera in modalit` interattiva il comando permette di inviare dei comandi da tastiera. a meno di non averlo lanciato con l’opzione -b.04.0 0 0 0 0 S 0.8m 4512 S 1. ordinati per uso decrescente della CPU (vengono cio` mostrati i pi` attivi). nella seconda riga le statistiche sul totale dei processi.0 0. load average: 0.dd dove ss sono i secondi e dd i decimi di secondo. e rispetto alla quale risolve i pathname assoluti. 81 sleeping. essa e pu` essere cambiata con il comando chroot.3 0 724 684 636 S 0. Per questo ci viene in aiuto il comando top. e e .3% user.01 0:00.0 0. 0. 438808k free. che stampa una lista di processi. 97. Infine l’opzione -p permette di osservare una lista di processi scelta dall’utente. Per la lista completa delle opzioni si faccia riferimento al solito alla pagina di manuale.01 0:01. e q che termina u il programma.3 0 1196 528 504 S 0.06 0:00.0 0.73 0:00.00 0:00.0 0. oltre alla directory di lavoe ro corrente. consentendo la redirezione dell’output. A queste informazioni generiche seguono.0 0 0 0 0 S 0. 0 zombie Cpu(s): 1. 85472k used.6 3. 252828k used. 3352k free.4% idle Mem: 256180k total.9 0 1124 1124 896 R 1.2 0 912 852 836 S 0. accessibile con man top.00 0:02. che viene ereditata nella creazione di un processo figlio. Il comando ristampa la lista ogni secondo.14 0:00.0 0.00 Tasks: 82 total. 1. uptime.

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

questo e ` corretto. Come dice la parola un segnale ` una specie di avviso che viene inviato ad un processo. mentre l’ultimo quello della swap (se questa ` attiva. Si noti che in genere la RAM libera ` sempre molto poca. 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). L’elenco completo.1 che uno di essi viene utilizzato per notificare la terminazione di un processo figlio). 1. I dettagli sono al solito nella pagina di manuale accessibile con man free. e possono essere anche inviati a mano attraverso l’uso del comando kill. come riportato nelle colonne buffer e cache. Ciascun segnale ` identificato da un numero e ed un nome simbolico. oltre che nella pagina di manuale. 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. in quanto non ha senso lasciare inutilizzata la RAM. kilobyte (il default) e megabyte. Si noti che nelle righe iniziali top riporta anche delle statistiche complessive sull’uso della memoria. 5. In genere i segnali vengono utilizzati per notificare ai processi una serie di eventi (abbiamo accennato in sez. pu` essere stampato a video o con h. . -k e -m per stampare i dati di utilizzo rispettivamente in byte. 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. torneremo sull’argomento in sez. queste possono essere ottenute separatamente tramite il comando free.2. 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. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX dei risultati. la riga centrale ci dice quanto della memoria e viene utilizzata per i buffer. La forma pi` elementare di e u comunicazione fra processi ` costituita dai segnali. e non e contiene nessuna informazione oltre al fatto di essere stato inviato.2 I segnali Bench´ i processi siano di norma entit` separate e completamente indipendenti fra di loro.3. adesso ` obsoleta e deve u e essere ignorata. esistoe a no molti casi in cui ` necessaria una qualche forma di comunicazione.3.5).46 Il comando non ha argomenti e prende come opzioni -b. 1.34 CAPITOLO 1.

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

che servono ı a fornire vari servizi.3 Priorit` a Abbiamo visto in sez. 1. chiede una conferma interattiva prima di inviare il segnale. come accennato in tale occasione. 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. torneremo su questo in sez. 1. 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. Infine invece del PID si pu` inviare un segnale ad un intero process group (sui process group o torneremo pi` avanti in sez. almeno nella sua versione standard. 1. non ` un sistema operativo e a e real-time.15. In realt`. . ed invia il segnale (specificato con la stessa sintassi di kill) a tutti i processi attivi con quel nome. Opzione -g -e -i -l -w Significato invia il segnale al process group del processo. 1.36 CAPITOLO 1. che viene utilizzato per dire ai demoni 51 u e di sistema di rileggere il proprio file di configurazione.3.4 quando affronteremo le questioni relative al controllo di sessione. Di norma le priorit` statiche vengono utilizzate a a solo per i cosiddetti processi real-time. e molti altri. 1. ` killall che invece di richiedere un u e numero di PID funziona indicando il nome del programma. il valore -1 inoltre u ha il significato speciale di indicare tutti i processi correnti eccetto init ed il processo che esegue il comando. attende la terminazione di tutti i processi cui ha inviato il segnale. Un comando alternativo a kill.15: Principali opzioni del comando killall. 52 questo nome ` in realt` fuorviante. e pi` facile da usare. Linux.3. Alcuni segnali (come SIGSTOP e SIGTERM) sono associati al controllo del terminale e vengono inviati attraverso opportune combinazioni di tasti. I segnali sono un meccanismo di comunicazione elementari fra processi. e accessibile con man killall. Le opzioni principali disponibili sono riportate in tab. il sistema per il log e le esecuzioni periodiche dei comandi. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX processo venga bloccato anche nell’esecuzione della funzione di gestione.4) usando un valore negativo come parametro. stampa la lista dei nomi dei segnali . e o e e a u 51 sono chiamati cos` i programmi che girano in background senza essere associati ad un terminale. richiede una corrispondenza esatta anche per nomi molto lunghi (il comando controlla solo i primi 15 caratteri).3. e questo senza alcuna conseguenza per gli altri processi o per il sistema.3.3. dato che non ` possie bile intercettare SIGKILL si ha a disposizione un mezzo infallibile50 per terminare un processo impazzito. quello che di norma si pu` modificare a a o non ` tanto la priorit` di un processo. come ad esempio i server di rete. Tabella 1.52 i processi ordinari (tutti. quanto il suo valore di nice. infatti come accennato in sez.1 che una delle propriet` dei processi che si pu` modificare con top ` a o e la priorit`.1 non ` possibile inviare segnali ad un processo in stato D e perch´ non pu` riceverli. ed ` inutile inviarli ad un processo in stato Z perch´ in realt` esso non esiste pi`. 1. Uno dei segnali pi` usati ` ad esempio SIGHUP. 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. ` cio` possibile utie e lizzarli per dare delle istruzioni (molto semplici. come quella di terminare l’esecuzione) ad un processo. Al solito la documentazione completa ` nella pagina di manuale. 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. 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.

si ricordi (vedi sez. e First In First Out. fra tutti u a quelli in stato runnable.. in cui i processi girano o a turno per un tempo fisso. pi` un processo viene eseguito.1. Il comando che permette di modificare il valore di nice di un processo ` appunto nice. Si ricordi che valori positivi corrispondono ad una diminuzione della priorit`. e lo scheduler 53 mette sempre in esecuzione. 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 vengono eseguiti nella sequenza in cui sono stati lanciati. 53 .1. questo ha una a a o sintassi diversa. Tralasciando i dettagli possiamo dire che le priorit` dinamiche sono caratterizzate da un valore a iniziale. Al solito si applica la restrizione che solo l’amministratore pu` applicare valori negativi.. ı a Il comando nice pu` essere usato solo quando si avvia un programma. 1. che ` quello che poi si chiama nice.3. e ci si affida al normale procedimento di scheduling. non avendo modo di eseguire nient’altro). Se pi` processi hanno la stessa priorit` statica l’ordine di esecuzione dipende u a dalla politica di scheduling scelta. Se non e si specifica nulla viene applicato un valore di 10.. i ı a valori di renice sono relativi al valore di nice attuale. che e deve essere usato quando si lancia un programma.. con l’opzione -u si possono selezionare o tutti i processi di un singolo utente.. ed in quel momento altri processi possono essere eseguiti.3. L’amministratore pu` anche usare valori negativi. 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. ed o aumentare cos` la priorit` di un processo.] [[-u] user . Si tenga conto inoltre che.. secondo quello che appunto ` il meccanismo chiamato a e fairness. 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). indicandone il PID. L’opzione a principale ` -n che permette di specificare un valore di nice da applicare al programma. e e u pi` il valore di priorit` dinamica aumenta. del tipo: renice priority [[-p] pid . 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. infine con -g si possono indicare tutti i processi di uno stesso gruppo (che come vedremo in sez. che di default ` nullo.] 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. che pu` essere di tipo Round Robin.4 corrispondono ai comandi eseguiti su una stessa riga di shell) specificandone il process group.] [[-g] pgrp . nella forma: nice [OPTION] [COMMAND [ARG]. a differenza di nice.1) che lo scheduler ` la parte di kernel che decide quale processo deve essere posto in e esecuzione. Con l’opzione -p si pu` specificare un processo singolo. I valori possibili sono fra 19 e -20. se si vuole cambiare o la priorit` di un programma gi` in esecuzione si pu` usare il comando renice. il processo che ha una priorit` dinamica pi` bassa.. 1. aumentando a o cos` la priorit`..] in cui si fa seguire a nice la linea di comando di cui su vuole cambiare la priorit`. lasciando cos` la possibilit` di ı a interromperlo. 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.

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

di nuovo il programma ` sempre lo stesso. e per distinguere questo tipo di situazioni. 57 .. 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. Poi stampa la linea “login: ” ed attende l’immissione sul terminale di un nome di login. che contraddistinguono poi quella che viene appunto chiamata una shell di login e una shell interattiva. Questo ` il processo e che cura in generale la procedura di login. 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. emacs e lo stesso ps) hanno lo stesso SID.1 si pu` notare come sia presente il processo getty o associato ai sei terminali virtuali (da tty1 a tty6) presenti sullo schermo..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 ? . associata al terminale virtuale pts/1.1) e tutti processi lanciati tramite la shell saranno identificati dallo stesso session id . creata da gnome-terminal all’interno di una sessione X.3. e gran parte delle distribuzioni usa come shell di default la bash. che i processi ı. Tutti i programmi che si sono lanciati dalla nostra shell (xmms. 1. 2.4). che richiedono comportamenti diversi. E inoltre presente un’altra sessione.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. 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 . cambiare il proprietario dello stesso all’utente che si ` collegato. Questa ` un’altra funzionalit` e a della shell.. 3. ma e una shell pu` essere eseguita anche all’interno di uno script non interattivo. L’ARCHITETTURA DEI PROCESSI 39 Negli output di ps mostrati in sez. o lanciata come sub-shell all’interno o di una sessione. o i vari programmi avviati nell’esecuzione di xdvi) vengono assegnati allo process group..1. e vengono o eseguiti insieme. le informazioni relative alla sessione possono essere visualizzate con l’opzione -j di ps.1.. Come si pu` notare tutti questi comandi fanno riferimento allo stesso terminale. Se questa ha successo ` login che si incarica di impostare il valore del session id per il processo e in corso. e identificati pertanto dallo stesso valore della colonna PGID. e lanciare una shell di e login. xdvi. 4857 4527 4527 ? 4858 4527 4527 ? 4859 4859 4859 pts/1 . Esso stampa un messaggio di benvenuto preso dal file /etc/issue (vedi sez.. sul terminale virtuale pts/2. essi infatti sono stati lanciati in background. il comando viene lanciato con le opportune opzioni. che viene passato al programma login che si cura di chiedere la password ed effettuare l’autenticazione.3.bin -name xdvi s 0:02 | \_ gs -sDEVICE=x11 1:07 \_ emacs struttura. dando l’avvio ad una sessione di lavoro. che fa s` quando si termina una linea di comando con il carattere &.

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

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

dato che e in questo caso il permesso di esecuzione ha il significato che ` possibile attraversare la directory e quando si scrive un pathname. Nel caso di un programma invece (come il getparam nell’esempio) i permessi di default sono diversi. e cio` e il permesso di scrittura solo per il proprietario.x. • permesso di esecuzione (indicato con la lettera x.c getparam getparam.c SockWrite. gruppo e altri) e l’assenza del permesso di esecuzione.c ErrCode. • permesso di scrittura (indicato con la lettera w. il cui significato ` abbastanza ovvio.42 CAPITOLO 1.c ForkTest.c wrappers. introdotte ufficialmente a partire dai kernel 2. che ` detto proprietario del file e ad un gruppo. 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. 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. ed il permesso di esecuzione ` abilitato per tutti.2 I permessi dei file Anche la gestione dei permessi dei file ` tutto sommato piuttosto semplice.c SimpleEchoTCPClient. quello di lettura per tutti quanti (proprietario.4. In generale un utente pu` effettuare su un file solo le azioni per le quali ha i permessi.5. 1. esistono estensioni62 e che permettono di renderla pi` sottile e flessibile. gruppo e altri) ` possibile specificare uno dei tre e permessi. dall’inglese user ). il proprietario di un file pu` sempre modificarne i permessi (con il comando chmod.c ElemDaytimeTCPCuncServ. per e e ciascuno dei tre livelli di privilegio (utente. e Ogni file ` associato ad un utente. dall’inglese write). dall’inglese group). .c TestRen.4.c ElemEchoTCPClient. o 62 come le ACL (Access Control List).c ElemDaytimeTCPServer. • i privilegi di tutti gli altri (indicati con la lettera o. dall’inglese execute). e tre permessi base: • permesso di lettura (indicato con la lettera r. dall’inglese other ). lo stesso vale per le directory.c Makefile ProcInfo.c SockRead. dall’inglese read ). In sostanza per il sistema esistono tre livelli di privilegi: e u • i privilegi dell’utente (indicati con la lettera u.c ElemEchoTCPServer.h che ci mostra nella prima colonna i permessi secondo lo schema riportato in fig. 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. ma nella maggior parte dei casi il controllo di u accesso standard ` pi` che sufficiente.c SimpleEchoTCPServer.c test_fopen. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX 1. • i privilegi del gruppo (indicati con la lettera g.

una estensione ripresa da SysV.4: Legenda dei permessi dell’output di ls. cosa che rende a u molto pi` difficile la sua diffusione.4. I bit usati per i permessi sono in realt` 12. 1.4. che quando esegue un programma lo fa con i permessi dell’utente che lo ha lanciato. dal loro a nome suid bit. ma se usato da un utente normale consente si di modificare la password. u 64 con l’eccezione del cosiddetto mandatory locking. 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. 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. Questo ad esempio ` il modo in cui funziona il e comando passwd. In genere poi ogni distribuzione o fa s` che tutti i file di configurazione ed i programmi installati nel sistema appartengano a root. Per i file normali tutti questi permessi hanno significato64 solo al caso di programmi eseguibili. che viene attivato impostando lo sgid bit su un file non eseguibile. 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.4.4. gli altri tre vengono rispettivamente chiamati.4.2) del file.4) per allargarli o restringerli (ad esempio i file della posta elettronica normalmente non hanno il permesso di lettura). ma solo la propria e fornendo prima quella corrente. vedi sez. 1.3 I permessi speciali Quelli illustrati in sez. che se usato da root non ha restrizioni. un virus potr` al pi` infettare i file di quell’utente. sgid bit e sticky bit.1. 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. 1. 1. esistono per` altri tre o permessi speciali. Ciascun permesso in realt` corrisponde ad un bit in una apposita parola a mantenuta nell’inode (vedi sez. disattivati.2 sono i permessi standard applicati ai file. 65 nel caso si cerchi di attivarli per uno script essi vengono comunque. 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.5: Schema dei bit dei permessi mantenuti nell’inode. Figura 1. i primi a nove sono quelli gi` illustrati in fig.65 I primi due servono per modificare il comportamento standard del sistema. IL CONTROLLO DEGLI ACCESSI 43 Figura 1. ı cosicch´ diventa impossibile per un utente normale poter danneggiare (accidentalmente o meno) e gli stessi63 .2. 63 . come misura di sicurezza.

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

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

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

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

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

log /etc/fstab -----a----------. questo gli viene impedito fintanto che l’attributo non viene rimosso.1. bench´ nelle operazioni ordinarie questo sia e sempre possibile se si hanno i privilegi di amministratore. un file immutabile potr` essere cancellato o a modificato soltanto se prima ne viene rimosso il relativo attributo.log [root@gont corso]# chattr +i /etc/fstab e potremo controllare lo stato degli attributi ottenendo che: [root@gont corso]# lsattr /var/log/auth. Potremo allora attivare alcuni di questi attributi (ad esempio l’append flag per un file di log. in questo caso baster` eseguire i comandi: a [root@gont corso]# chattr +a /var/log/auth. 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./var/log/auth. E si noti questo vale anche ee per le operazioni richieste dall’amministratore stesso. e a .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.log ----i-----------. o l’immutable flag per /etc/fstab). Di nuovo questa funzionalit` a permette di proteggere file essenziali in modo da impedirne ogni forma di modifica. esistono delle modalit` operative (dette capabilities) in a cui ` possibile cedere questa capacit` e rendere pertanto impossibile una successiva rimozione dell’attributo.

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

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

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

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

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

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

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

` quella dell’ambiente a e (in inglese environment).6).1. che. 57 La caratteristica delle variabili di shell ` che una volta definite ` possibile recuperarne il e e valore precedendone il nome con il carattere “$”. 2. Se si vuole inserire una variabile nell’ambiente lo si deve fare esplicitamente usando il comando interno export seguito dal nome della variabile. a Il comando echo ` uno dei pi` elementari e prende due sole opzioni. cha abbiamo gi` incontrato). che permettono sia di controllarne il funzionamento a che di accedere ad una serie di informazioni. a seconda del valore) al comando che viene eseguito. altrettanto non accade per la visualizzazione della stessa. una parte di queste e informazioni sono gli argomenti. che vengono presi direttamente da quanto scritto nella riga di comando con il meccanismo illustrato in sez. deve ricevere una serie di informazioni da chi lo lancia. la stamper` a video.2. che evita e u e la stampa del carattere di a capo alla fine della stringa passata come argomento. cos` se nella variabile MAIL mettete la directory ı in cui si trova la vostra posta elettronica.1. come avrebbe fatto per una qualunque altra stringa che potreste aver scritto direttamente sulla linea di comando. 2. dopo di che quest’ultima viene passata come argomento ad echo. e l’elenco completo ` descritto nella sezione Shell Variables della pagina di manuale. accessibile con man echo. e a . con una sintassi del tipo export VAR=val. si trova nella relativa pagina di manuale. In particolare il comando da usare ` echo.3. 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]).2.1. in tal caso infatti la shell nell’eseguire la scansione della linea sostituir` automaticamente alla variabile il suo contenuto. Un elenco delle principali ` riportato in tab. 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. 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. dato che sul terminale si avrebbe l’interferenza da parte del prompt. La bash definisce di suo (o utilizza qualora siano gi` definite) tutta una serie di variabili a (come IFS. 13 la bash supporta anche la definizione della variabile nella stessa linea in cui viene esportata nell’ambiente. 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`.13 Lo stesso risultato si pu` ottenere con l’uso del comando interno declare. Questo avviene perch´ questo compito pu` essere eseguito attraverso l’uso di uno dei tanti comandi e o specialistici della Unix toolbox. e Una delle altre funzionalit` che la shell fornisce con l’uso delle variabili. La seconda opzione ` -e che attiva l’interpretazione di una serie di caratteri e speciali. Si noti che mentre la shell provvede la sintassi e gli opportuni comandi interni per assegnare e cancellare la singola variabile. La prima ` -n. esso viene utilizzato per poter utilizzare il valore di alcune variabili di shell anche all’interno dei programmi che questa mette in esecuzione. insieme a tutti gli altri dettagli relativi al comando. l’altra parte sono appunto le variabili di ambiente. L’INTERFACCIA A LINEA DI COMANDO. 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. 2. 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. la cui espressione.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. che deve essere gi` definita. che vengono definite appunto nell’environment. e passer` questo come argomento (o a a come opzione.

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

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. In sostanza. Si tenga conto che PATH ` comunque modificabile dall’utente. limitandosi ad utilizzare esclusivamente le funzionalit` interne a 15 vedremo a breve come si possono creare dei comandi personalizzati attraverso l’uso degli alias. Si noti come una riga del genere non esegua nessun programma. col rischio di guai seri qualora ci` avvenisse per l’amministratore. nel qual caso il nome pu` essere del tutto arbitrario. In genere15 questo nome deve corrispondere al nome del file che contiene il programma che la shell deve eseguire. ` necessario specificare. L’INTERFACCIA A LINEA DI COMANDO.17 ..2. che pu` personalizzarla a e o piacere.. /usr/sbin.1. 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. contengono i programmi di uso per l’utente. 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.16 per questo in genere per lanciare un comando (o uno script) nella directory corrente si usa la sintassi: piccardi@monk:~/Truelite$ . 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. o 16 la shell riconosce questo quando nel nome del comando compare il carattere “/” che indica una directory. 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. baster` scrivere man e non sar` necessario e a a specificare /usr/bin/man. un e pathname per accedere al comando. 2. voi potete sempre scrivere solo il nome del file al posto del pathname completo: se cio` volete leggere una pagina di manuale. che verrebbe eseguita al posto dell’originale. Se volete evitare questo comportamento. ed aggiungere un’altra directory. solo non vengono trovati i relativi programmi. ad esempio perch´ il programma che volete lanciare non ` in una di quelle e e directory e non sarebbe trovato.1.2 per le directory dove sono mantenute le librerie di sistema. nella standardizzazione del filesystem illustrata in sez. ma qualcuno potrebbe sempre creare un programma la e aspettarvi al varco per un comune errore di battitura di ls .1. ecc. Si noti come in e questo caso siano indicate solo le directory che.3. Si pu` fare cos` perch´ la shell esegue automaticamente una ricerca nel cosiddetto PATH dei o ı e comandi. 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:. 18 questo ` il motivo per cui alcuni comandi “non funzionano” quando chiamati da utente normale./comando La variabile PATH ha la forma di una lista di pathname di directory.3. 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. ad esempio in sez. 1.19 Il dubbio casomai pu` essere sul come farlo senza doversi riscrivere tutto e o da capo il contenuto precedente. che usualmente vengono inserite dentro PATH soltanto per l’amministratore.2. 3. ` o e vero che si inserisce la directory corrente in coda a PATH i comandi standard hanno la precedenza./ dove di nuovo si ` usato la capacit` della shell di espandere il valore delle variabili. in realt` e a non ` che non funzionano. . come ad esempio la directory corrente che di norma non vi ` mai inclusa. lo reincontreremo spesso. cio` del fatto che essa vi permette di associare un nome scritto sulla linea di e comando ad un programma da lanciare. sono pertanto assenti18 directory come /sbin. separati fra loro da un carattere di due punti. sia in forma assoluta che relativa. come visto nell’esempio iniziale di sez. che funziona e a anche all’interno della sintassi usata per assegnare le stesse.

per questo se si vuole capire se si sta usando un comando interno o un programma. mentre con altre shell (ad esempio la csh) pu` essere necessario utilizzare un comando apposito come rehash. o type. 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. 21 o un alias. Qualora invece si esegua il comando alias senza specificare nulla questo mostrer` la lista degli alias gi` definiti. 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. dato il nome di un programma presente nel path search. 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. la shell controlla se esso corrisponde ad un alias.20 Se non u viene trovato nessun programma corrispondente non sar` stampato nulla. 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. o ridefinire lo stesso nome di un comando per u farlo comportare in maniera diversa. definire abbreviazioni per quelli pi` usati. 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. ne stampa a video il pathname assoluto. LA SHELL E I COMANDI della shell. ci permette cos` di ideare nuovi ı comandi. 20 . 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. questa avviene da sinistra a destra nell’ordine in cui le directory sono elencate all’interno di PATH. se si indica il nome di un comando interno della shell questo non viene considerato. o Come complemento alla gestione del path search la shell fornisce il comando interno which che. 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 ). 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.60 CAPITOLO 2. 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.21 si pu` usare un altro comando interno. Per cancellare un alias si pu` usare il comano do unalias seguito dal nome dello stesso.

Per capire meglio facciamo alcuni esempi di filename globbing: supposto che per essi venga usata la solita estensione . si potranno vedere tutti i documenti PDF presenti in una directory con una riga di comando come: piccardi@anarres:~/Truelite/documentazione/corso$ ls *. 61 directory 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.log baseadm. invece di un singolo argomento.log ringraziamenti.1.toc netadmin.pdf baseadm.tex baseadm. 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.log netadmin.tex ringraziamenti. Le alternative possono essere espresse con una lista dei caratteri voluti messi uno di seguito all’altro. e se ne trover` di corrispondenti espander` il nome contenente il carattere a a jolly nella lista dei file.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]*.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. la lista dei nomi dei file a corrispondenti all’espansione dei caratteri jolly.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. mentre si pu` usare la notazione ~username per indicare la home directory di un altro o utente. Ma oltre a queste due wildcard elementari la shell ne supporta di pi` sofisticate.aux fdl. L’INTERFACCIA A LINEA DI COMANDO. mentre si possono specificare degli intervalli (corrispondenti a tutti i caratteri compresi fa i due estremi) usando due caratteri separati da un “-”.pdf corso.pdf netadmin.tex shell.toc baseadm.log corso.pdf.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. Infine come ultima modalit` di espansione si pu` utilizzare il carattere “~” per indicare la home directory dell’utente a o corrente.tex corso. il carattere “*” indica un numero arbitrario di caratteri qualsiasi mentre il carattere “?” indica un solo carattere qualunque.22 Come nel caso del DOS o del VMS. ponendole fra due parentesi quadre.2.pdf Struttura.tex netadmin. cos` si possono indicare elenchi di possibili u ı alternative per un singolo carattere. 22 . Si pu` inoltre invertire la selezione dei caratteri specificati fra o parentesi quadre precedendo la lista o l’intervallo con un carattere di “^”.toc corso.tex struttura.log Struttura.tex config.tex fdl. se sono pi` di uno) e u il nome (o i nomi) del file che corrisponde.toc texput.

racchiudendo quest’ultimo fra due apici inversi (‘). a Un’altra funzionalit` molto utile della shell che si attiva con una sintassi simile alla specifia cazione delle stringhe. o il carattere “$” usato per referenziare le variabili si avrebbe il problema che la shell cercherebbe di espandere la relativa espressione. per` a o talvolta presentano degli inconvenienti. che disabilita il filename globbing e l’interpretazione degli spazi. il contenuto di tale a directory. 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. In questo modo per` resta attiva l’espansione di eventuali variabili di shell o tramite il carattere “$”. Simile alla command expansion ` la cosiddetta arithmetic expansion che permette di vae lutare delle semplici espressioni aritmetiche. come se lo si fosse scritto manualmente. un tale nome verrebbe spezzato in due con il risultato di passare al comando due argomenti invece di uno. ` quello di definire la e stringa racchiudendola fra virgolette ("). secondo la sintassi di ls.62 CAPITOLO 2. 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. 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 “\\”. 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. il risultato del calcolo sar` riportato a direttamente come argomento. 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. 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. asterischi ı e punti interrogativi. dato che non riporta file di tre lettere.tex’: No such file or directory che nel caso fallisce perch´ i file elencati non esistono. la cosiddetta history. si capisce anche come da questa espansione si possano trarre ulteriori potenzialit` di utilizzo. il o primo. LA SHELL E I COMANDI si sarebbe ottenuto un risultato forse inaspettato. o usando la sintassi equivalente $(comando). 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. per cui dall’espansione del filename globbing otteniamo una riga di comando equivalente a ls CVS. si pu` eliminare anche questa se al posto delle virgolette si usano gli o apici singoli (’). ad esempio se si volesse passare ad un comando come argomento un file il cui nome contiene uno dei caratteri jolly. ` quella che viene chiamata command expansion. cos` che al suo interno si possano usare spazi. Il risultato ` questo perch´ l’unico nome di file di tre lettere presente nel caso dell’esempio ` quello e e e della directory CVS. e mette il suo output sulla riga di comando. Uno di a questi ` la barra trasversa “\” che anteposta ad un carattere ne disabilita l’interpretazione. 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. usando i tasti di freccia in alto e in . che permette di accedere. in tal caso la stringa sar` interpretata in maniera assolutamente letterale. Il filename globbing e l’uso delle variabili di ambiente sono funzionalit` molto utili.tex’: No such file or directory rm: cannot lstat ‘vecchio. si pu` cio` usare come e o e argomento nella riga di comando il risultato di un altro comando. Questo pu` essere fatto in due modi. In questo caso quello che succede ` che la e e shell esegue il comando racchiuso fra apici inversi.

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

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

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

E questo u infatti quello che ci permette di eseguire la concatenazione dei comandi cui abbiamo accennato in sez. fornendo un risultato per il successivo. Comprese alcune delle pi` esoteriche a u che permettono di redirigere pi` file. basta inviare questi ultimi con una pipe al programma sort il cui solo scopo ` quello di effettuare riordinamenti nelle modalit` pi` varie. e poi ci viene scritto sopra il risultato. per quanto utile. Tabella 2. LA SHELL E I COMANDI si andrebbe incontro ad una sgradita sorpresa. redirige lo standard output e lo standard error del comando cmd1 sullo standard input del comando cmd2. Questo operatore infatti permette di collegare l’uscita del comando che lo precede con l’ingresso del successivo attraverso una pipe. ` per` marginale rispetto ad una forma e o ` di redirezione molto pi` potente. il cosiddetto pipelining. 27 . 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.66 CAPITOLO 2.1. 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). 1. 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. Gi` questo comincia a farci intuire le capacit` intrinseche nel funzionamento della riga di a a comando.4 un riassunto delle principali modalit` di redirezione utilizzate nella shell. concludiamo questa sezione riportando in tab. Questo significa che si pu` fornire come dati o in ingresso ad un comando quelli prodotti in uscita da un altro. pipelining: redirige lo standard output del comando cmd1 sullo standard input del comando cmd2.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. ad esempio non ` pi` necessario dover inserire in tutti i comandi una opzione per e u ordinare in maniera diversa i risultati. u che ` del tutto analoga alle fifo incontrate in sez.2. redirige lo standard output e lo standard error : scrive errori e risultati del comando cmd sul file file. 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. a Vedremo in sez. 2. Nel caso specifico cat ` in grado di rilevare la situazione anomala e stampare un errore.1. redirige lo standard output: scrive il risultato del comando cmd accodandolo al contenuto del file file. 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. che usa l’operatore “|”. il che comporta che nell’esempio in questione cat alla lettura di file lo troverebbe vuoto. 2.4: Principali modalit` di redirezione. Per ovviare a questo problema ` disponibile un altro operatore di redirezione.27 che come indica il nome funziona appunto come tubo di collegamento fra i due comandi. ma non ` detto che altri e e programmi (o versioni non GNU di cat) siano in grado di farlo. Cos` si possono lanciare in ı sequenza una serie di comandi in cui ciascuno elabora i risultati del precedente. Quello che avviene con la redirezione infatti ` e che prima viene creato o troncato il file.1. “>>”. redirige lo standard output: scrive il risultato del comando cmd sul file file. solo che in questo caso non ` associata ad un oggetto e e nel filesystem. 2.

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. 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). ed oltre ad eseguirlo a come tale la shell provveder` anche a passargli gli argomenti scritti nella riga di comando. che permette di utilizzare le librerie condivise e mettere in esecuzione gli altri programmi. che vi permette di effettuare anche compiti di notevole complessit`.1.3. Ma se questo ` pi` o meno tutto quello che si pu` fare con il DOS.2. dal punto di vista del contenuto del file non cambia assolutamente nulla. 67 2. 28 .1. 29 questo ` un programma speciale. usano proprio degli script di shell per eseguire le loro operazioni. sotto /bin. anche se finora ne abbiamo parlato solo come del programma che implementa l’interfaccia a riga di comando. e poi renderlo eseguibile.3. come vedremo in sez. 1. rispetto quanto avviene sulla riga di comando. usato nelle serie successive. quando ` associata ad un e o e terminale ed utilizzata dagli utenti per dare comandi. come avveniva per i file . e prende come argomento il file dello script da eseguire. quello chiamato a. 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). come richiesto dal FHS trattato in sez. condizionali.bat del DOS. 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. per la sua immediatezza. u E per questo motivo che la shell.6 Scripting elementare Una delle capacit` fondamentali della shell ` che. Nel caso degli script per`. Dato che per la shell e per tutti i linguaggi di scripting.out. si a e possono inserire delle sequenze di comandi in dei file per farli eseguire direttamente senza doverli riscrivere tutte le volte. per quanto sia poco a elegante e piuttosto limitato. a esattamente come avrebbe fatto se di fosse trattato di un eseguibile compilato. che non costituisce un programma a se (ed infatti sta sotto /lib). L’INTERFACCIA A LINEA DI COMANDO. tanto che.2.2. 5. questo resta un normale file di testo. La descrizione dettagliata del linguaggio della shell non ` affrontabile adesso. dato che ` e essenziale per l’avvio del sistema.31 In a questa maniera uno script sar` del tutto equivalente ad un comando binario.4. con sintassi del tipo bash script. 31 renderlo eseguibile in questo caso significa attivarne il permesso di esecuzione con chmod +x. ma pu` anche essere lanciata non inteo rattivamente facendole eseguire direttamente quello che appunto si chiama uno script. ecc. come il python o il perl. ` 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. in questo caso la si invoca come un qualunque altro comando. che usano questa funzionalit` il carattere # indica l’inizio di una riga di commento. ma che e viene lanciato come parte dalla chiamata al sistema che esegue un nuovo programma. 30 in Linux esistono sostanzialmente due formati binari. che oltre ad eseguire i programmi nel formato binario standard30 ` in grado di eseguire anche gli script. e il formato ELF. ed un ottima risorsa per quanti vogliano approfondirlo ` [2]. per automatizzare una grande quantit` di compiti per i quali non vale la pena ricorrere ad un a linguaggio di pi` alto livello. che vengono trattati esattamente allo e stesso modo. le sue carattee ristiche principali si trovano comunque nella sezione SHELL GRAMMAR della pagina di manuale. di avvio del sistema infatti. Quello che ` importante sottolineare e e qui ` che la shell non solo pu` essere invocata in maniera interattiva. 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. usato nei kernel delle serie fino alla 1. 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. viene comunque ampiamente utilizzato.

In questo caso il comando successivo all’operatore verr` eseguito solo se il precedente non ha avuto errori. nel ricevere lo stato di uscita di un comando. e u . a Una prima sintassi ` quella che permette di eseguire pi` comandi distinti sulla stessa linea. 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. Per questo la shell.” 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 “. in genere lo si usa per verificare se un certo file esiste e poi eseguire un comando. in tal caso si tratta semplicemente di scrivere quello che altrimenti si scriverebbe su linee diverse su una riga unica. 2. Questo consente allora di eseguire un secondo comando solo se il primo ha avuto successo. per quanto siano utilizzabili in teoria anche sulla riga di comando. la cui terminazione pu` essere resa esplicita con questo metodo. 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. mentre un valore non nullo (in genere 1) indica che c’` stato un errore. che assume il significato di AND logico. Queste due ultime modalit` fanno riferimento. per stabilire se un comando ha avuto o meno a successo. e u questo pu` essere fatto in tre modi diversi. 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. specie per gli script che possono usare e questa informazione per capire se ci sono stati problemi. Una sintassi e delle istruzioni che.3. LA SHELL E I COMANDI quella elementare illustrata in sez. E automatico su questi valori che vengono prese le rispettive decisioni nell’uso dei operatori “&&” ` e “||” quando la shell concatena dei comandi. E inoltre da specificare che qualora invece si concatenino dei comandi senza condizionali con l’uso del “. La presenza di un codice di uscita ` molto importante. o dipendenti da funzionalit` specifiche degli script. 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. che invece assume il significato di OR logico. Questo consente di a eseguire in alternativa due comandi. In questo caso si avr` che il comando a successivo all’operatore verr` eseguito soltanto se il precedente ha fallito. La convenzione ` che un valore nullo (cio` e e 0) significa il successo dell’operazione. La terza modalit` prevede che i diversi comandi sulla stessa linea vengano separati dall’opea ratore “||”.”. in genere lo si usa per eseguire le operazioni da effettuare solo in caso di errori.68 CAPITOLO 2.” verr` riportato il codice di uscita a dell’ultimo comando eseguito.” si fosse premuto invio. dove n ` il e ` con un controllo numero del segnale (ed ovviamente il comando viene considerato fallito). In caso di errori la catena a viene immediatamente interrotta. usando il “.32 o La seconda modalit` ` quella in cui i comandi che si vogliono eseguire vengono separati a e dall’operatore “&&”. 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. lo memorizza nella variabile speciale “?”.1. La prima modalit` prevede che i singoli comandi o a siano separati fra di loro tramite il carattere “. sono generalmente poco usate in quanto meno indicate ad un uso interattivo.

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

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

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

separati dalla relativa opzione. varie altre shell interattive. l’uso degli script ci pone di fronte ad alcune sottigliezze u del funzionamento della shell. e Per cui se si vogliono automatizzare una serie di impostazioni per la shell corrente. bench´ il programma sia lo stesso. 1. 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.2. e non per la shell originaria da cui esso ` stato lanciato. dopo il login. -ge. al posto di source. e che deve e pertanto essere in grado di gestire tutte le problematiche relative al controllo di sessione illustrato in sez. con -nt si richiede che il primo sia pi` recente (in termini di tempo di ultima modifica.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.35 cui dare come argomento il nome dello script da cui leggerli. u u e 36 in generale un utente pu` sempre lanciare. 4. Ora ` abbastanza chiaro che. u Una ultima serie di condizioni riguarda l’uso di stringhe e numeri. ` quella di usare . 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. e diverso). usando il comando source. 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. Un’altra modalit` ` quella della shell di login (vedi sez. Per le stringhe invece si possono usare gli operatori “=” e “!=” per indicare rispettivamente uguaglianza e disuguaglianza. in cui essa ` associata ad un terminale. per questi ultimi valgono gli operatori di confronto dei valori come -eq. il sistema comunque ne o provvede una di default. direttamente all’interno della shell corrente. e Oltre ad una sintassi pi` complessa. 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. con -ef si richiede che essi abbiano lo stesso inode. che invece non sono necessarie quando la si invoca per eseguire una script. 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. minore. quello che le contraddistingue ` che nel caso di shell di login viene sempre e cio` un’altra istanza della shell. il cui significato ` banale e (uguale. -lt e -ne. vedi sez.6: Opzioni per le condizioni sui file del comando test. e una sintassi alternativa. 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). Se infatti si lancia uno script esso viene eseguito come tutti gli altri comandi.3). maggiore uguale.4. 1.36 Queste modalit` in realt` came a a biano pochissimo. pi` sintetica ma anche pi` criptica.3. -gt. maggiore.1) u mentre con -ot che sia pi` vecchio (negli stessi termini). che viene eseguito da un altro processo. non si ` pu` pensare di far questo lanciando uno script che contiene i relativi comandi. E per` possibile o o eseguire i comandi di uno script senza usare una subshell. minore uguale. -le. 35 34 . e l’opzione -z serve a verificare se la stringa ` vuota.

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

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

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

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

La dimensione del file ` n. -mmin -5 . numero di link). Il pathname del file (comprese quindi le directory a partire dalla radice) corrisponde al pattern pattern. -atime +15 .8: Principali opzioni di find per la ricerca. trattandosi di una maschera di bit.tex Una spiegazione a parte poi deve essere fatta per l’opzione -perm.1. Il nome del file corrisponde al pattern pattern. il valore di c corrisponde alla lettera usata da ls e riportata in tab. e Seleziona sul tipo di file. nel caso dei tempi. mentre precedendolo con un + si richiede che sia superiore. 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. Come accennato una seconda importante categoria di opzioni ` quella relativa alle azioni. il significato ` diverso.8 con n. e Il gruppo proprietario ` group.allora u mode specifica la maschera dei bit dei permessi che devono essere presenti sul file (i bit nulli cio` vengono ignorati). ` cos` allora che per esempio. far eseguire una . 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.si richiede invece che il valore sia inferiore./ringraziamenti. In questo caso per`. le opzioni -cmin e -mmin eseguono lo stesso controllo rispettivamente con i tempi di ultimo cambiamento e ultima modifica. e supporta i due segni + e . precedendolo con il segno . Prevede anche -ipath per una ricerca case insensitive. Per questo si possono usare le altre due forme. . I permessi corrispondono a mode. mentre con +mode una in cui siano attivi un bit o un altro. e Il file ha n hard link. il cui valore mode deve essere specificato in ottale. Un file acceduto n giorni fa. L’user ID del proprietario ` n. Come prima il valore o e senza segno richiede la corrispondenza esatta. 2. 1. le opzioni u -cnewer e -mnewer eseguono lo stesso controllo rispettivamente con i tempi di ultimo cambiamento e ultima modifica. il comando permette una sintassi molto e potente: specificando solo il numero si richiede una corrispondenza esatta. 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 .2. Un file acceduto pi` recentemente di file. le opzioni -ctime e -mtime eseguono lo stesso controllo rispettivamente con i tempi di ultimo cambiamento e ultima modifica. e Il proprietario ` user. Il group ID del gruppo proprietario ` n. per ogni file che corrisponde al criterio di ricerca specificato. se si usa il segno . In questo modo con -mode si pu` richiedere una e o condizione in cui siano attivi un bit e un altro.come per gli altri valori numerici. ` e e possibile infatti. 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). I COMANDI DEI FILE Opzione -amin n Significato Un file acceduto n minuti fa. si pu` richiedere che un file sia e ı o pi` vecchio o pi` giovane di un dato tempo. che ` stato indicato in tab. Prevede anche -iname per una ricerca case insensitive./shell.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 .

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

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

minuscole. e la loro presenza richiede semplicemente la presenza di un corrispondente carattere nel contenuto su cui si effettua la ricerca.11. maiuscole o minuscole.11: Le classi di caratteri utilizzabili nelle espressioni regolari. ma nel fatto che quest’ultima viene interpretata. attraverso l’uso di alcuni caratteri riservati. alcuni caratteri sono invece riservati per svolgere il ruolo di operatori.80 CAPITOLO 2. Classe [:alnum:] [:alpha:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:] Significato lettere (maiuscole e minuscole. Il carattere “^” viene utilizzato per identificare l’inizio di una riga. Una esprestesto. Tabella 2. punteggiatura. indipendenti dalla localizzazione). caratteri vuoti verticali ed orizzontali (spazi. cifre esadecimali. maiuscole. Anche i caratteri “*” e “?” assumono un significato simile a quello del filename globbing. 2. LA SHELL E I COMANDI utilit` come filtro per selezionare a piacere. 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). mentre il carattere “$” serve ad identificarne la fine. indicato con una sintassi speciale che ` quella delle espressioni e regolari. cio` una struttura e e ordinata di caratteri e stringhe. 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). indipendenti dalla localizzazione) e numeri. e . In maniera analoga ad una espressione matematica una espressione regolare viene costruita combinando delle espressioni elementari attraverso gli opportuni operatori. caratteri di controllo. caratteri stampabili (esclusi gli spazi). Alcune delle espressioni usate nel filename globbing si ritrovano anche nelle espressioni regolari. sulla base delle opportune corrispondenze le righe di a un file. tabulatori. a u sione regolare ` in sostanza una stringa di caratteri che identifica un pattern. 40 41 un buon testo sull’argomento ` [3]. lettere (maiuscole e minuscole. e questo ` spesso causa di confusione ed errori. caratteri stampabili (caratteri vuoti compresi). come un pattern all’interno del file. ritorni a capo). numeri. pertanto si potranno identificare i commenti in un file di configurazione con l’espressione regolare “^#” mentre con l’espressione “^$” si identificheranno le righe vuote. Il carattere “. 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. 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. di cui cercare l’occorrenza in un file eseguendo l’operazione che viene usualmente chiamata pattern matching. 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). Gran parte dei caratteri (tutte le lettere. 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. e i numeri) di una espressione regolare non viene interpretata. Si noti come facendo cos` si possano effettuare ricerche sempre pi` mirate semplicemente ı u concatenando in successione diverse chiamate al comando.” viene invece utilizzato per indicare un carattere qualunque.

12. e non solo si pu` richiedere. \texttt{pluto} e \texttt{paperino} verranno considerati come argomenti che nel . L’espressione precedente deve corrispondere n o pi` volte. o ma si pu` anche usare l’operatore “|” posto fra due raggruppamenti per richiedere la presenza o alternativa di uno di essi. Negli esempi appena mostrati gli operatori di ripetizione sono applicati solo al carattere che li precede. u e Operatore ? * + {n} {n. e all’interno dell’espressione regolare stessa. \texttt{pippo}..”). 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. riportati in tab. o L’espressione precedente pu` corrispondere da zero ad un o qualsiasi numero di volte. ` possibile per` applicarli ad una intera espressione regolare mettendola fra parentesi e o tonde. non necessitando questa di nessun parametro. Questo significato ` di nuovo leggermente diverso da quello presente nel filename globbing.tex opzione mentre. con l’uso degli operatori di ripetizione la presenza multipla di uno stesso pattern.}’ *. Tabella 2. 2. si noti infatti come si sia espressa quest’ultima fra degli apici per bloccare l’interpretazione degli stessi caratteri da parte della shell.2.tex shell. 42 . 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. 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). 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. Per riottenere lo stesso significato precedente con una espressione regolare occorrerebbe usare la stringa “ab. 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.} {n. u L’espressione precedente deve corrispondere fra n e m volte.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.2.*”.m} Significato L’espressione precedente pu` corrispondere zero o una volta. L’espressione precedente pu` corrispondere da uno ad un o qualsiasi numero di volte.. usando quello che viene chiamato un raggruppamento. 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 “. 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. 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. mentre nel secondo caso corrisponde ad una linea che contenga una “a” seguita da un numero qualunque (compreso zero) di “b”.12: Gli operatori di ripetizione nelle espressioni regolari. per cui anche una stringa come “ac” corrisponderebbe. L’espressione precedente deve corrispondere esattamente n volte.

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

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

49 Sezione (1) (2) (3) (4) (5) (6) (7) (8) Significato programmi eseguibili o comandi di shell. Tabella 2. 3. trattata in sez. se si vuole accedere a alla seconda si dovr` richiamarla esplicitamente indicando la sezione con un qualcosa del tipo a man 5 passwd.1. In particolare poi gli sviluppatori di Debian hanno come impegno preciso quello di fornire per ogni pacchetto la relativa documentazione. formati dei file di configurazione. fin qui abbondantemente citate. informazioni generiche su argomenti). 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.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”.1.18: Sezioni delle pagine di manuale. . system call (funzioni fornite dal kernel). 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. secondo la classificazione riportata in tab. giochi. che si accedono con il e comando man.18. che al solito sono descritte in dettaglio nella sua pagina di manuale. Tutti i comandi prevedono una pagina di manuale che si accede semplicemente con la sintassi man comando. 2. Il sistema delle pagine di manuale (torneremo sulla sua configurazione in sez. la fonte primaria delle informazioni relative ai comandi ` nelle pagine di manuale. Ma le pagine di manuale non fanno riferimento solo ai comandi. varie (convenzioni. LA SHELL E I COMANDI solo uno stringato riassunto delle opzioni disponibili. documentazione sui file di /dev. 3. in realt` essa si imposta nella e a configurazione del sistema di gestione delle pagine di manuale.90 CAPITOLO 2. che come per gli altri comandi si accede con man man. o u che stampa l’elenco delle pagine ad esso corrispondenti. ci possono essere altre sezioni specifiche installate insieme a ad alcuni pacchetti come quelle della documentazione del perl (un linguaggio di programmazione). Ciascuna sezione contiene la documentazione relativa ad un certo argomento.5. comandi di amministrazione. il cui numero ` quello che compare fra e parentesi nella prima riga di ciascuna pagina dopo il nome del comando in maiuscolo. Per questo le pagine di manuale sono divise in sezioni.change user password passwd (5) . Con il comando man si richiama la pagina di manuale. 2. cos` ad esempio avremo: ı piccardi@anarres:~/Truelite/documentazione/corso$ whatis passwd passwd (1) . 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. Si tenga presente che il comando man richiama la pagina relativa al nome che si ` passato e come argomento. funzioni di libreria. cercando in sequenza50 nelle varie sezioni e restituendo la prima che trova.5) permette per` di verificare se esistono pi` pagine associate ad uno stesso nome con il comando whatis.18. il sistema infatti origina fin dai primi Unix e prevede la documentazione di tutto il sistema.

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

l’unico altro a comando che usa il process time ` time. e viene impiegato e per tutti i calcoli dello scheduler.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. In genere ` legato alle interruzioni del timer. cio` all’interno delle system call invocate e dal processo (con la sigla sys). ` process time : detto talvolta tempo di processore. e stampa a video.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. Fra queste troverete le versioni pubblicate degli HOWTO e delle FAQ (anche se queste vengono spesso distribuite come documentazione nel sistema. che sono il tempo totale impiegato per l’esecuzione del programma (con la sigla real). ` pertanto il tempo in cui viene misurato il tempo di e esecuzione dei processi. in tempo universale coordinato (o UTC). ad esempio: piccardi@monk:~/Truelite/documentazione$ time ls CVS README corso internet-server ldap lucidi real user sys 0m0. 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. data che viene usualmente indicata con 00:00:00 Jan.3. La descrizione completa del comando (comprese le stringhe usate per l’opzione -f) si trova al solito nella pagina di manuale.000s 0m0. che prende come argomento una riga di comando da e eseguire. o a 2. 1 1970 (UTC) e chiamata the Epoch. onde evitare di ripetere domande u banali che non sarebbero accolte molto amichevolmente. In genere il tempo a cui si fa riferimento ` sempre il calendar time. 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. le principali delle quali sono -o che permette di specificare un file su cui scrivere i risultati al posto dello standard output. E il numero di secondi dalla mezzanotte del primo gennaio 1970. quello di sistema. la prima ` che esistono due orologi. E il tempo usato internamente dal kernel per le sue temporizzazioni. e viene usato ad esempio per indicare le date di modifica dei file o quelle di avvio dei processi. tre valori di tempo espressi in process time. ed il tempo passato nell’esecuzione di codice dentro il kernel. il tempo passato nell’esecuzione di codice in user space (con la sigla user).92 CAPITOLO 2. e -f che permette di specificare un formato per i tempi. Qui si aggiungono ulteriori complicazioni.030s 0m0. Questo tempo viene anche chiamato anche GMT (Greenwich Mean Time) dato che l’UTC corrisponde all’ora ` locale di Greenwich. E il tempo su cui viene mantenuto l’orologio del kernel. alla terminazione dell’esecuzione di quest’ultima. e . Infine l’utilizzo dei motori di ricerca ` un ottimo sistema per recuperare le informazioni e pubblicate su internet. LA SHELL E I COMANDI raccolgono una serie di riposte alla domande pi` ricorrenti.1. 1. secondo le definizioni: ` calendar time : detto anche tempo di calendario.3. Oltre a questi due. Tutti gli altri comandi relativi ai tempi hanno a che fare con la gestione del calendar time. e Il comando prende varie opzioni. 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. gi` trattati in sez.

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. La descrizione di queste stringhe pu` essere o o ` l’orologio che si trova sulla scheda madre. ma il tempo che si voleva impostare e viene comunque stampato a video. tutti gli altri caratteri resteranno a immutati. 53 52 . 2. e tutta la gestione dei fusi orari ` demandata alle applicazioni in user space che. 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.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. con hh l’ora. Purtroppo altri sistemi operativi usano l’ora locale per l’orologio di sistema che coincide con l’orologio hardware. con tutti i problemi che questo comporta quando si deve cambiare fuso orario (con file che possono anche risultare essere stati creati nel futuro). Le principali direttive sono riportate in tab. infine i secondi ss devono essere preceduti da un punto. devono essere in grado di convertirlo nell’ora locale. dato che non si ` l’amministratore. o 1 month. e e il tutto ` fatto attraverso delle opportune funzioni di libreria. u La seconda complicazione ` che il kernel non conosce assolutamente niente dei fusi orari. Se si vuole impostare la data questa deve essere specificata con una stringa nella forma MMDDhhmm[[CC]YY][. Con MM si indica il mese (in numero).19. dove i termini fra parentesi quadra sono opzionali. di specificare l’impostazione dell’orologio di sistema. L’utilit` di queste due opzioni ` a e che la stringa che prendono come parametro pu` essere nelle forma pi` varie. La stringa usa il carattere % per indicare una direttiva di formattazione che verr` sostituita dall’opportuno valore. per`) come 8 day ago.52 Di solito il kernel lo legge all’avvio per impostare il valore e iniziale dell’orologio di sistema e non lo considera pi`. Il comando che permette di leggere ed impostare l’orologio di sistema ` date. 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).3. ALTRI COMANDI 93 usato dal kernel per tutte le sue operazioni. ed ` alimentato della batteria che si trova su di essa. tutte le volte che e leggono un tempo. ed aggiornato via software dal kernel stesso. ma facendo cos` i tempi di sistema sono sempre coerenti. e l’orologio hardware che funziona in maniera del tutto indipendente e che rimane in funzione anche quando la macchina ` spenta. Per e lui il tempo ` assoluto. le principali delle quali sono -d che permette di specificare una data da stampare al posto del tempo corrente. con mm il minuto. e fa sempre riferimento al tempo standard universale (l’UTC appunto). con lo stesso formato. che permettono di eseguire il compito in maniera e trasparente. e non solo riconosce o u tutti i formati standard che si ottengono con le direttive di tab. 2.19.ss]. l’elenco completo ` nella pagina di e manuale. e -s che permette. Se invece l’argomento che si passa inizia con un + esso viene interpretato come una stringa di formattazione per il risultato del comando.2. e soprattutto di incompatibilit` a dei tempi in caso di dual boot. mentre l’anno si indica o con le cifre finali YY o per intero con tanto di secoli come CCYY. con DD il giorno. ma anche descrizioni verbali (solo in inglese. Il comando prende inoltre varie opzioni.

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

3. si potr` usare un comando del tipo: a cat lista | xargs rm -f ovviamente nel far questo occorrer` stare molto attenti. Se non si passa nessun argomento viene usato echo come comando di default. come per la redirezione. che vengono a costituire il principale strumento usato da tutti gli amministratori di sistema. GLI EDITOR DI TESTO 95 ad un successivo comando. a 2. Il comando.4. Il comando non ha nessuna opzione specifica e prende come argomento una stringa. poi con il tempo e l’esperienza ognuno finir` con l’adottarne uno come preferito. a 2. e interpreta letteralmente i vari caratteri (in modo da non interpretare spazi. al solito tutte le opzioni ed i dettagli di funzionamento si trovano nella pagina di manuale.2.1 Introduzione Un’altra delle caratteristica fondamentali di un sistema unix-like `. Il comando xargs prende come argomenti un comando da eseguire e le eventuali opzioni o argomenti iniziali. che ha il semplice compito e (se invocato senza argomenti) di scrivere continuamente sullo standard input una serie di y. cos` come letti dallo standard input. che verr` usata al posto di y. ` a e in grado anche di eseguire la scrittura dei file in append usando l’opzione -a. 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. In questo modo diventa ad esempio possibile applicare un comando qualunque ad una lista di file usando semplicemente cat e xargs. e con -p di richiedere conferma dell’esecuzione sul terminale. e Infatti nonostante stia crescendo la disponibilit` di strumenti che permettono le pi` comua u ni operazioni di amministrazione tramite una interfaccia grafica. Il comando permette di impostare. e per ogni riga ricevuta sullo standard input esegue il comando passandogli gli ` ulteriori argomenti. per le ragioni che tratteremo e in dettaglio in sez. lanciare il comando senza argomenti per verificare che non si stiano facendo degli errori. E possibile proteggere ı la presenza di spazi all’interno degli argomenti cos` come si fa con la shell. accessibile con man e xargs. in modo da ignorare tutto quanto sar` letto dopo. Un ultimo comando usato come ausilio per la redirezione ` yes. separati da spazi. 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.4. usando le virgolette o ı la barra trasversa. e quella degli editor di testo. virgolette. L’elenco completo delle opzioni ` riportato nella pagina di manuale. ` sempre consigliabile infatti. con l’opzione -e una stringa da usare come marcatore per la fine del file. ecc. Per questo motivo lo strumento pi` usati dai professionisti nell’amministrazione u di sistema ` quello dell’editor di testi. quando a e si usa xargs.1.).1.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. 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. 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. Anche in questo caso ` possibile avere ı a e questa funzionalit` usando un comando apposito tee. in questo modo diventa possibile ricevere gli argomenti dall’output di un comando precedente tramite una pipe. Se cio` si vogliono cancellare tutti i file contenuti nel e file lista. 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).

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

2. Nella a prima riga si trova il men` dei comandi. in tal caso si otterr` una finestra come quella mostrata in fig. con il solo problema che se se ne creano troppe non si vedr` a altro che barre di stato. spesso tutt’altro a che intuitive per chi proviene da altri sistemi.1 pu` venire divisa in due). terminato da una barra di stato in cui compaiono varie informazioni (il nome del file. Questo o permette.2. in cui compaiono brevi messaggi (come nell’esempio. qualunque porzione di testo venga e utilizzata da emacs. o forniscono modalit` a a di comando compatibili. con l’eccezione del men` e della barra di stato ` mantenuta in un buffer. Anche il minibuffer ` un buffer.1: Schermata di avvio dell’editor emacs.. che del testo generato automaticae mente nelle operazioni dell’editor (come le liste dei file da scegliere che compaiono quando si usa l’autocompletamento). Inoltre sia emacs.58 o e scrivere del testo. u Uno dei concetti fondamentali di emacs ` quello di buffer. 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. anche operando in console. di lavorare su due o pi` finestre. 2. All’interno di una finestra ci si pu` spostare con le frecce e gli altri tasti di spostamento.. 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). 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.). questo ` una conseguenza che il programma ` nato quando ancora e e le tastiere non avevano n´ frecce n´ altri tasti di funzione. u e sia che si tratti di un file che si ` aperto per lavorarci sopra. ecc. e e 58 . Come per tutti gli editor una sessione di emacs inizia invocando il comando seguito dal nome del file da modificare. con la peculiarit` di essere posizionato e a sull’ultima riga ed essere utilizzato per l’interazione con i comandi. che nacque proprio per questo. 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. se sono state fatte modifiche. GLI EDITOR DI TESTO 97 poi che molti altri editor ne hanno copiato la sintassi e le modalit` d’uso. che il suo cugino xemacs.4.1. u a Figura 2. che riporta la scritta (Updating. dove compare il u testo del file ed in cui ci si muove con le frecce.done)) ed in cui si scrivono gli argomenti dei comandi pi` complessi. dato che ciascuna pu` a u o sua volta essere suddivisa a piacere. ad esso segue la sezione principale. sono editor usabili direttamente anche dall’interfaccia grafica. Nella la riga finale viene tenuto il cosiddetto minibuffer.

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

forse erano due lettere rimaste libere e scelte a caso . presente fin dagli albori dei sistemi Unix ` vi. specie se capita di avere a che fare con una installazione che non ha attivato l’uso delle frecce. Figura 2.63 lasciando libera l’ultima linea. Al solito vi si invoca passando come argomento il nome del file da modificare. 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. dato che con le funzionalit` sono e a di pari passo aumentate anche le dimensioni.62 Deriva dagli editor u e di linea e ne eredita alcune caratteristiche. in particolare il fatto di essere un editor modale. 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. la sua lungheza in righe e caratteri e la posizione del cursore sulla prima colonna della prima riga).3 Un editor di base. 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. dove compare il testo a ed in cui ci si muove con le frecce.2. purtroppo i perch´ di questo nome si sono perse nei meandri del tempo..4.2: Schermata di avvio dell’editor vi. esistono alcune a versioni pi` moderne. Questa caratteristica lo rende senz’altro il meno intuitivo e pi` difficile da usare per il novizio. e Inoltre anche se le funzionalit` del programma originale sono veramente minime. hanno introdotto alcune capacit` avanzate. Succede spesso per` che al primo impatto non u o si riesca neanche ad uscire dall’editor.. u Ma i fan(atici) tendono invece a considerarla una caratteristica utile in quando (secondo loro) con l’abitudine renderebbe pi` veloce le operazioni. GLI EDITOR DI TESTO 99 2. 2. Al contrario di emacs (di cui ` il principale concorrente) vi si usa soltanto per manipolare e file di testo. vi Uno dei editor pi` diffusi.2).4. come vim. il comando apre il file in modalit` comando in una finestra unica (mostrata in fig. in cui cio` i comandi e il loro effetto dipendono dalla modalit` di operazioni corrente in cui si trova e a il programma. come l’evidenziau a zione della sintassi. 62 . usata per dare i comandi o ricevere le informazioni (nel caso il nome del file. 63 le versioni installata in tutte le distribuzioni di Linux se non altro supportano nativamente l’uso delle frecce.

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

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

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

Anche questo ` un editor che mantiene nella e prima riga un riassunto dei comandi principali. ma pi` u leggero (tanto da essere usato nei dischi di avvio di Debian) e con qualche capacit` in pi`. Data la maggiore utilizzabilit` rispetto a vi esso si ` diffuso parecchio.2. anche la composizione della finestra (una cui immagine ` mostrata in e fig. il problema ` che siccome a e e pine non ` software libero. 2.20. 2. per questo ` uno degli editor a u e pi` potenti. sulle quali vengono fatte pure le eventuali richieste di immissione o richieste scelte sulle azioni da compiere. GLI EDITOR DI TESTO 103 Essendo jed in sostanza un clone di emacs non staremo a ripeterne i comandi principali. che viene aperto nella finestra mostrata in fig.5. per cui non staremo a descriverne i dettagli. un client per leggere e e la posta elettronica in console. Essendo un editor leggero ma molto potente. 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`.4. e due righe di aiuto in basso che riportano i comandi disponibili al momento. non lo ` neanche pico. a u Figura 2.4) ` analoga a quella di emacs per cui basta rifarsi quanto detto in precedenza. separando da esso l’editor interno usato per per scrivere le email. u . Un altro editor abbastanza diffuso ` pico. un file manager semigrafico utilizzabile in console che nasce come clone del Norton Commander. Il programma si invoca al solito passando come argomento il nome del file da modificare. questo ` derivato da pine. mentre come gi` accennato sia emacs che xemacs a usati dall’interfaccia grafica mettono a disposizione men` e utilizzo del mouse. pur restando anche facile da usare. anche questo ` un sottoinsieme di un’altro programma e e mc (nome che sta per Midnight Commander. e si trova su varie distribuzioni su dischetto.5: Schermata di avvio dell’editor nano. per questo motivo ` stato realizzato un clone e e e completamente libero chiamato nano identico dal punto di vista dei comandi principali. che sono gli stessi di tab. 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. Esistono infine anche versioni grafiche di alcuni u degli editor precedenti (come gvim per vi). Un altro editor molto usato ` mcedit. 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). Tutti gli editor citati sono in grado di funzionare in un terminale o dalla console. 2. in cui si ha una riga di stato all’inizio.

104 CAPITOLO 2. LA SHELL E I COMANDI .

ed alcuni servizi di base. Si tenga comunque presente che alcuni file di configurazione (in particolare fstab e mtab) sono gi` stati descritti in precedenza (vedi sez. e si user` il file di configurazione di questo.Capitolo 3 La configurazione dei servizi di base 3. a a 105 . Questo vale in generale per tutti i file di configurazione. 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. come illustrato in sez.1 Ci` comporta che e o i formati dei file di configurazione possano essere anche i pi` vari.1 Una panoramica generale A differenza di Windows che tiene tutte le configurazioni in un unico file binario.conf adjtime ad esempio esistono diversi programmi che gestiscono l’invio e la ricezione della posta elettronica. 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 . ma chiaramente se ne installer` uno solo. dipendendo ciascuno dalla u sintassi adottata dal relativo programma.3. per cui tutti i servizi sono forniti da opportuni programmi che non ` affatto detto siano sempre gli stessi anche per uno stesso servizio.2. 1. 1. introducendo alcuni concetti validi in generale per qualunque file di configurazione. il registro. Descriveremo poi direttamente i file di configurazione di alcuni servizi di base.1. e non ` limitato e a quelli che tratteremo nel prosieguo di questa sezione.2.1 I file di configurazione In questa sezione tratteremo la gestione generica dei file di configurazione all’interno di un sistema GNU/Linux. nella directory /etc/ e che sono file di testo.4).. come quelli che controllano il comportamento delle librerie dinamiche e quelli usati per il login.. anche se esistono delle convenzioni generali come ignorare le righe vuote o considerare il carattere # l’inizio di un commento. La ragione di questa frammentazione dei file di configurazione deriva dell’architettura del sistema (illustrata in sez. non ` detto e che esse vengano sempre rispettate.1). 1. Se da una parte tutto questo pu` spaventare. le sole due caratteristiche comuni che potete trovare nei file di configurazione su un sistema GNU/Linux sono che essi sono mantenuti. per cui. a 3.

e abbiamo visto in sez. 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. 3 2 . accessibile usualmente con man nomefile.2 In seguito.3 in modo che non sia necessario reinserirlo tutte le volte all’interno di ciascun programma. Una seconda cosa di cui bisogna tenere conto ` che Linux ` multiutente. 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.2 => /lib/ld-linux. cio` in maniera da includere al suo interno tutto il e codice che altrimenti sarebbe stato disponibile attraverso delle librerie condivise.1 => /lib/librt.2 (0x40000000) libattr. Questo non ` un vero programma a se stante.2. che stampa sullo standard output i nomi delle librerie condivise di o cui esso ha bisogno. Per verificare quali librerie dinamiche sono necessarie per l’esecuzione di un programma si pu` usare il comando ldd. per questo varr` sempre la pena controllare la documentazione.so.1 (0x401ba000) si ricordi quanto detto in sez.so. In genere questi file sono invisibili (iniziano cio` con un “.so.1 (0x40023000) libacl.0 (0x4016a000) /lib/ld-linux. 2. 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. 2.6 => /lib/libc. quelle che in Windows vengono chiamate DLL (da Dinamically Linked Library) e che nei sistemi unix-like sono chiamate shared object. ed eseguire le operazioni di configurazione con un editor qualunque.”) ed hanno lo stesso nome del loro e analogo di /etc/ valido per tutto il sistema.3.1. in maniera trasparente all’utente.1 => /lib/libattr. ad esempio: piccardi@monk:~/Truelite/documentazione/corso$ ldd /bin/ls librt.2. 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.so.0 => /lib/libpthread. Come brevemente accennato in sez.3 come ci siano delle directory specifiche previste dal Filesystem Hierarchy Standard che devono contenere i relativi file. Questo ` il e meccanismo che permette di inserire tutto il codice comune usato dai programmi all’interno di opportune librerie.1 => /lib/libacl. ` E da tenere presente infine che per molti file di configurazione viene installata anche una pagina di manuale che ne spiega il formato.1 (0x40035000) libc. per quelli che prenderemo in esame faremo una descrizione generale. Per` per far s` che detto codice possa essere utilizzato dai singoli programmi occorre una o ı apposita infrastruttura.106 CAPITOLO 3.6 (0x4003c000) libpthread.so.so. che contiene tutti i a dettagli. 1. con man 5 nomefile.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.so. 4 a meno che questo non sia stato compilato staticamente. Il comando prende come argomento il pathname assoluto del programma da analizzare e stampa a video il risultato. 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.6 uno dei compiti fondamentali del sistema.so. 3. quello di mettere in esecuzione i programmi.1.1.so. o nel caso di omonimia con un comando o una funzione di sistema. 2.so.so. viene realizzato attraverso il linkloader. trattando solo le caratteristiche principali.

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

le modalit` con cui queste informazioni vengono ottenute. database o servizi di rete) a su cui queste informazioni sono mantenute.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. 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. delle macchine ecc. come i nomi degli utenti. 12 il sistema ` stato introdotto la prima volta nelle librerie standard di Solaris. 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. ad esempio quelli relativi alla gestione di utenti e gruppi in sez. 3.12 che permettesse di demandare a delle librerie esterne. mentre con -n si pu` passare direttamente sulla linea di o comando una lista di directory dove effettuare la ricerca. 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. Infatti le librerie contenute nelle directory specificate tramite LD_LIBRARY_PATH hanno la precedenza e vengono utilizzate per prime. ma usando l’opzione -f si pu` specificare o un qualunque altro file al suo posto. e come installato su una Debian Sid. cio` con le directory separate da dei “:”. ` il seguente: e # # # # # 8 9 /etc/nsswitch. ` possibile inoltre specificare al sistema anche in e quale ordine utilizzare le varie fonti. 10 ne tratteremo alcuni in seguito. si pu` ricorrere alla variabile di ambiente LD_LIBRARY_PATH. nei casi in cui si vogliano utilizzare solo in forma temporanea delle librerie condivise. nella stessa forma usata per PATH. all’inizio questo veniva fatto introducendo tutta la casistica possibile nell’implementazione delle funzioni stesse. 4. smetterebbero di funzionare praticamente tutti i programmi. un esempio di questo file. per cui il sistema ` pi` lento). 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.conf Example configuration of GNU Name Service Switch functionality. try: info libc "Name Service Switch" for information about this file. le loro password.1.3 e quelli relativi alla rete in sez. Per risolvere il problema venne creata una apposita interfaccia. . 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.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. Tradizionalmente. Le modalit` di funzionamento del Name Service Switch vengono gestite attraverso il suo file a di configurazione che ` /etc/nsswitch.108 CAPITOLO 3.10 I sistemi moderni per` permettono di mantenere queste informazioni o anche in maniera diversa. LA CONFIGURAZIONE DEI SERVIZI DI BASE Il default di ldconfig prevede l’uso di questo file. queste informazioni sono memorizzate in opportuni file di configurazione mantenuti sotto /etc. e di centralizzarle per interi gruppi di macchine tramite opportuni servizi. Infine. 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. e o per l’intero sistema.6. 7. permettendo configurazioni ibride. il a a Name Service Switch. le librerie standard GNU hanno e ripreso lo stesso schema. con degli ovvi problemi di estendibilit` e compatibilit`. i nomi dei gruppi. dato che se si usasse una versione non funzionante di una libreria fondamentale come la glibc.conf/etc/nsswitch.conf. If you have the ’glibc-doc’ and ’info’ packages installed. configurabili in maniera indipendente.

passwd group aliases ethers hosts netgroup networks protocols rpc services Tabella 3.1. alias per la posta elettronica. 4.so. esse si trovano tutte in /lib/ e devono avere il nome a libnss_NOME. 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. corrispondenze fra nome di un servizio e numero di porta. terminata da un “:” indica una classe di informazioni.13 mentre NAME indica il tipo di supporto per quell’informazione (nel caso dell’esempio sar` files. come un sistema di autenticazione basato su qualche altro meccanismo (ad esempio su LDAP). Per ciascuna nuova modalit` deve esistere una opportuna libreria che garantisce l’accesso a alle informazioni con quella modalit`. corrispondenze fra username. le e altre linee indicano una opzione.1. le modalit` con cui queste informazioni vengono fornite. La pagina di manuale contiene una lista completa delle opzioni disponibili. db.0 e 2 per le glibc 2. identificatori di utente e gruppo principale.1: Le diverse classi di corrispondenze definite all’interno del Name Service Switch. 4. la a ricerca dei dati sulle varie fonti sar` eseguita nell’ordine in cui queste sono indicate. le linee vuote o che iniziano per # vengono ignorate. corrispondenze gruppo di rete e macchine che lo compongono. corrispondenze fra nome del gruppo e propriet` dello a stesso.3. corrispondenze fra nome a dominio e numero IP. corrispondenze fra numero IP e MAC address della scheda di rete. ecc. dove X fa riferimento alla versione delle glibc.1. L’elenco a delle classi di informazioni disponibili ` riportato in tab. (vedi sez. ecc.3. shell di default. corrispondenze fra nome di un servizio RPC e relativo numero identificativo.3). shadow password ed altre informazioni sulla gestione delle password (vedi sez. La prima colonna. 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. di seguito vengono elencate. separate da spazi. corrispondenze fra nome di una rete e suo indirizzo IP. . 3. 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 fra nome di un protocollo e relativo numero identificativo. 13 vale 1 per le glibc 2.3).3.X.

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

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

ed in un certo ordine rispetto alle altre. 2. ` il seguente: ı e MANDATORY_MANPATH MANDATORY_MANPATH MANDATORY_MANPATH MANDATORY_MANPATH . 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 . La direttiva MANPATH_MAP indica invece la corrispondenza fra le directory dei comandi e le relative pagine di manuale. si pensi al caso in cui si siano installate diverse versioni di uno stesso pacchetto. il primo indica una directory contenente i comandi.112 CAPITOLO 3.17 una lista di tutte queste directory si pu` stampare con il comando manpath. Un estratto del file manpath. e Infine la direttiva MANDB_MAP serve ad indicare a mandb dove devono essere messi i file degli indici.. 2. serve per aggiornare dinamicamente la lista delle directory in cui cercare le pagine di manuale sulla base delle directory presenti nel PATH (vedi sez.config.4) dell’utente. 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. SECTION. in tal caso le pagine di manuale saranno sotto /usr/local/man ed il sistema deve essere in grado di vederle. La direttiva richiede due parametri. 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.. 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. 17 . 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. indica l’ordine di ricerca delle pagine di manuale nelle varie sezioni. come per gli eseguibili infatti anch’esse possono essere installate in diverse sezioni dell’albero. ad esempio una versione pi` u recente a mano sotto /usr/local.. Se la prima compare nel PATH dell’utente la seconda ` aggiunta al MANPATH in maniera implicita. si noti come in questo caso ci siano altre sezioni oltre a quelle classiche illustrate in tab. la direttiva prende come parametro il pathname alla directory contenente gli originali.. MANPATH_MAP /bin MANPATH_MAP /usr/bin MANPATH_MAP /sbin MANPATH_MAP /usr/sbin MANPATH_MAP /usr/local/bin ..1. e dove devono essere create le pagine temporanee. e deve essere ripetuta per tutte le directory che si vuole siano aggiunte alla lista..18. cos` come installato su una Debian Sid. La configurazione delle directory in cui cercare le pagine di manuale ` una di quelle mantenute e in manpath. il secondo la directory delle corrispondenti pagine di manuale.config.

o che hanno a che fare con la configurazione di comandi di base.18 a 3. Una modalit` alternativa (supportata ad esempio da Debian).d o anche e direttamente in /etc/). e sulla base della presenza della sua shell di login (tratteremo l’argomento in sez. infatti Debian esegue gli script usando lo speciale comando run-parts che.2. In tal caso occorre tenere presente che i file dovranno essere eseguibili. 4. le righe inizianti per # sono considerate commenti. La directory /etc/skel. 4.3. 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. . 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. 3. Esso viene eseguito alla fine della procedura di avvio. in questo modo l’amministratore pu` lasciare all’utente la libert` o a di modificare la propria shell di login.3.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. e il loro nome non dovr` contenere caratteri speciali.2.local e si trova fra gli script di avvio (in /etc/rc.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. 18 .2 trattando i comandi per la gestione degli utenti. 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. ` quella che contiene questo schee letro. anche se connessi alla gestione degli utenti.boot Nella trattazione della procedura di avvio del sistema in sez. come vedremo in sez.3.3) in questo file. lancia tutti gli script presenti in una directory posto che il loro nome sia nel formato adatto.bash_profile e di altri eventuali file di configurazione) possono essere messi in questa directory. compreso in fondo alla stessa. Ogni riga non vuota contiene un solo campo che specifica il pathname completo del programma che pu` essere usato o come shell.2. ALTRI FILE 113 3. e saranno automaticamente copiati nella relativa home alla creazione di ogni nuovo utente. sono /etc/shells ed il contenuto della directory /etc/skel.3.2). Un utente che voglia cambiare la propria shell di default potr` usare solo una shell fra quelle a che sono indicate in questo file. 5.1. 3. Tutti i file e le directory che si vuole siano creati nella home directory dei nuovi utenti (ad esempio una opportuna copia di . ` quella dell’uso della directory a e /etc/rc.local e la directory rc. ` 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.3.1 Il file rc. e le righe vuote sono ignorate.bat del DOS: contiene i comandi che si vogliono e eventualmente dare dopo che tutti i servizi sono partiti.2 La directory /etc/skel ed il file /etc/shells Altri file non classificabili in una specifica categoria. restringendola per` alle shell autorizzate.bashrc. come il nome stesso suggerisce.3. Come vedremo meglio in sez. ed assume un po’ il significato di quello che ` l’autoexec.boot nella quale si possono mettere gli script che si vuole siano eseguiti alla fine della procedura di inizializzazione. Trattandosi di uno script di shell non si tratta propriamente di un file di configurazione. 4. e In genere questo file ` rc. o Il file viene anche usato da alcuni servizi per verificare se un utente ` un utente normale.

20 19 .2 come con locate si possa ricercare la presenza di un file utilizzando un database di tutti quelli presenti creato attraverso il comando updatedb. semplicemente lanciandola come un qualunque altro programma. 2. /etc/updatedb.3. 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. 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. e senza il -.conf.20 in modo da evitare che siano indicizzati file che gli utenti hanno protetto da lettura. 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. quest’ultimo prende una serie di opzioni (in forma estesa. come quelli per l’esecuzione periodica dei comandi. ecc.114 CAPITOLO 3.2. quello che viene fatto ` di impostare queste varibili e di ambiente all’interno di un file. che serve come una specie di file di configurazione del comando. ecc. a o 3. i filesystem virtuali come /proc o quelli di dispositivi estraibili.1). 3.3 I servizi di base In questa sezione prenderemo in esame la configurazione di alcuni servizi di base del sistema.3 Il file /etc/updatedb. 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. gli spool delle a code di stampa e della posta. Oltre alle opzioni il comando utilizza delle omonime19 variabili di ambiente per ottenere le stesse impostazioni. non potr` per` cambiare quella con cui entra nel sistema al login.daily/find: run at this priority -. 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. il sistema di gestione dei log.2.iniziale. come quelli di rete.) e LOCALUSER indica l’utente con i permessi del quale sar` a effettuata l’indicizzazione.higher number means lower priority # (this is relative to the default which cron sets. Allora PRUNEFS indicher` i filesystem da non a indicizzare. PRUNEPATHS indicher` le directory da non indicizzare (quelle dei file temporanei. nel caso nobody. e un utente di servizio che non ha nessun privilegio nel filesystem.conf Abbiamo visto in sez. utilizzato come titolare dei programmi che devono avere accesso solo alle informazioni pubbliche. Dato che normalmente il comando viene lanciato da uno degli script periodici eseguiti da cron (vedi sez. 3.

3. 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. Per questo motivo se necessita la a presenza di altri valori o altre variabili occorrer` inserire in testa al file le relative definizioni. 3. come la creazione del database dei file e l’indicizzazione delle pagine di manuale. u . Il formato del file segue la solita regola di ignorare righe vuote ed inizianti per #. ora (da 0 a a 23). Il demone ha il compito di svegliarsi ogni minuto ed eseguire ogni programma che ` stato programmato per quel momento. a Si tenga presente che siccome il programma specificato nella parte conclusiva della linea viene eseguito direttamente dal demone crond. si tratta del programma vixie-cron. 1. Il primo file controllato da crond per decidere se c’` da eseguire una operazione ` questo. trattati rispettivamente sez. implementato attraverso l’uso del demone crond. preso dal file installato di default su una Debian Sarge. Un esempio del contenuto del file /etc/crontab.3. un intervallo. ` 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. that none of the other crontabs do. i primi cinque indicano la periodicit` con cui il a comando indicato nell’ultimo campo viene eseguito. cos` ad esempio usando */2 nel ı primo campo si intender` chiedere la ripetizione del lavoro ogni due minuti. Thu. L’azione viene specificata da una serie di campi separati da spazi o tabulatori.5. per qiest’ultimo campo sono accettati anche valori tipo Mon. o u specificando gli estremi separati con un “-”. L’utilizzo del carattere * vale da jolly e lo si usa per indicare un valore qualsiasi. 9) pi` usato nel mondo.3. etc. This file also has a username field. Se il tempo corrente corrisponde a tutti i valori specificati nei cinque campi il comando viene eseguito. creato da Paul Vixie. I cinque campi della periodicit` indicano rispettivamente: minuto (da 0 a 60). 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. il sesto campo indica l’utente per conto del quale eseguire il comando scritto nel seguito della riga. giorno del mese (da 1 a 31). dove sia 0 che 7 indicano la domenica). a Per ulteriori dettagli si faccia riferimento alla pagina di manuale del file. Questa funzionalit` viene gestita dal servizio a chiamato cron. il server DNS (vedi sez. mese dell’anno (da 1 a 12) e giorno della settimana (da 0 a 7. e Il file di configurazione principale di crond ` /etc/crontab che contiene l’elenco dei delle e operazioni periodiche generali da eseguire nel sistema.3. 3. essenziale per compiere tutte quelle operazioni che devono essere eseguite a periodi fissi. accessibile con man 5 crontab. noto anche per essere l’autore di bind.1.1 Il servizio cron Una funzionalit` importante presente in qualunque sistema operativo ` quella dell’esecuzione di a e programmi su base periodica. I SERVIZI DI BASE 115 sez. 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.3 e 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.4) che lavorano in background ed il cui comportamento ` controllato dai relativi file di e configurazione.2. 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. non saranno necessariamente definite le usuali variabili di ambiente presenti normalmente quando si esegue una shell.

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

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

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

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

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

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

Questo significa che X Window ` in grado di operare allo stesso modo sia in locale. in questo caso sono dei client remoti (le . e di come gestirlo e configurarlo. L’interfaccia grafica X Window System nasce a met` degli anni ’80 con il progetto Athena a all’MIT. e interfacciandosi direttamente all’hardware grafico della macchina su cui si sta operando. 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. e che pu` essere tranquillamente sostituito da uno strato diverso. Infatti in genere ` il client che viene eseguito localmente per ine terrogare un server remoto che fornisce delle risposte. con l’intento di fornire un ambiente grafico per i sistemi UNIX. 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.org/). illustrata in fig. 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 ). e costituisce probabilmente la prima interfaccia grafica mai realizzata su un sistema operativo. oltre a fornire alle usuali funzionalit` che permettono disegnare e a finestre ed altri elementi grafici su uno schermo. dalla versione finale del protocollo). 3. La caratteristica principale del sistema. gli eventuali errori verranno notificati via e-mail all’amministratore. e che pu` anche essere eliminato o o tutte le volte che non serve (ad esempio sui server). sia attraverso opportuni toolkit grafici che attraverso sistemi a finestre completi come Fresco (http://www. che rende l’intera interfaccia trasparente rispetto alla rete. e non ha nessuna caratteristica privilegiata. in particolare vedremo le caratteristiche principali del sistema X Window System (spesso chiamato per brevit` X11.d. Tutto il sistema grafico in sostanza non ` che un altro strato che viene posto sopra il kernel. 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. a 3. fra client e server. ` che. Si tenga presente per` che in questa architettura in genere client e server hanno posizione o invertita rispetto al solito. Poi si dice di leggere tutto il contenuto della directory /etc/logrotate. 3.122 CAPITOLO 3. inviando attraverso di essa le informazioni per disegnare la grafica di una applicazione su una macchina remota.1 fra una applicazione ed il suo display. sia attraverso l’uso diretto del framebuffer o dell’hardware video. E questa separazione che consente di definire a un protocollo di comunicazione (l’X protocol ).fresco. L’architettura di X Window infatti definisce una relazione client-server. che a tutt’oggi lo distingue dalle pi` diffuse interfacce grafiche presenti u in altri sistemi operativi. 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. ma viene eseguita dal kernel in user space come un qualunque altro programma.4 L’X Window System In questa sezione tratteremo la configurazione dell’interfaccia grafica nei sistemi Unix. sia in rete.1 Introduzione a X Window System Bench´ in realt` esistano diverse alternative per la realizzazione di applicazioni in ambiente e a grafico.4. il sistema ` completamente trasparente rispetto e alla rete.

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

introdotta e dalla parola chiave Section e conclusa dalla parola chiave EndSection. all’interno di queste sezioni dovranno poi essere specificate le opzioni ed i valori delle configurazioni (dipendenti dal tipo di sezione). . u Configurare il server X significa allora creare un opportuno file /etc/X11/XF86Config-4 che lo metta in grado di utilizzare l’hardware. Le informazioni necessarie alla configurazione del server X sono quelle che riguardano le varie componenti utilizzate dallo stesso. Contiene la descrizione di una modalit` video (corrisponde a specificare a risoluzione. permettono di generare automaticamente il file di configurazione. o Il file ` diviso in varie sezioni ciascuna dotata di un suo nome che la identifica. Contiene le specifiche per il Direct Rendering Interface un’interfaccia diretta alle accelerazioni hardware delle schede grafiche. tastiera. 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. Ogni distribuzione ha creato un suo programma dedicato.6. ed alcune di esse devono essere necessariamente specificate.. xf86cfg che opera ad interfaccia grafica e xf86config che opera linea di comando. ne deve essere specificata una per ogni monitor disponibile. Contiene le informazioni di descrizione di un monitor. a Contiene la definizione di uno schermo. Si tenga e presente che fin dall’inizio XFree86 ha sempre supportato la presenza di schermi multipli. combinando una scheda video ed un monitor. una volta inseriti i dati dell’hardware. 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). ma con il pacchetto XFree86 vengono forniti direttamente anche due programmi per la configurazione. con una sintassi generica del tipo: Section "SectionName" SectionEntry . EndSection I nomi delle principali sezioni utilizzate comunemente sono riportati in tab. tavoletta grafica. Indica le opzioni generali che controllano globalmente il comportamento del server. Contiene le informazioni di configurazione di una scheda grafica. Infine si pu` generare uno scheletro del file direttamente con il comando X -configure. ne deve essere specificata una per ogni scheda disponibile. l’elenco completo pu` essere trovato nella pagina di manuale accessibile al solito con man XF86Config-4. 3. frequenza di refresh e profondit` di colore).) ne deve essere specificata una per singolo dispositivo.124 CAPITOLO 3. di norma non viene utilizzato e valgono i valori di default delle stesse. tastiera. LA CONFIGURAZIONE DEI SERVIZI DI BASE trova ricorre al precedente. 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. Module InputDevice Device Monitor Modes Screen ServerLayout DRI Tabella 3. sotto /etc/X11.. ecc. questi programmi. Le o sezioni hanno poi una loro gerarchia. scheda video e monitor. Contiene la configurazione generale del server. e cio` mouse. Contiene la descrizione di un dispositivo di input (mouse.6: I nomi delle varie sezioni del file XF86Config-4.

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

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

3. 1240x1024. e ne deve essere presente almeno una. dove quest’ultima indica il nome del modulo associato al driver che gestisce la relativa scheda grafica. valide per tutti i driver. stringa che identifica il modello del monitor. 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). e ne deve esistere almeno una (ma se ne possono avere diverse in caso di presenza di pi` schede grafiche).. L’X WINDOW SYSTEM 127 La sezione Device serve a specificare le caratteristiche di una scheda grafica. in quanto sbagliandoli ` possibile mandare fuori sincronia lo stesso con il risultato di non vedere pi` nulla. 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). le principali sono: VendorName ModelName HorizSync stringa che identifica la marca del monitor. a da utilizzare in una successiva sezione Screen. 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. ecc. indica la frequenza (o l’intervallo di frequenze) di sincronia orizzontale29 supportato dal monitor. Pu` essere indicato come singola lista di valori separati o da virgole come intervallo separato da un meno. La sezione Monitor serve ad indicare le caratteristiche di un monitor. e o 29 . e prevede le due direttive e obbligatorie Identifier e Driver. espresso di default in Hz. buona parte delle quali sono specifiche del driver della scheda grafica utilizzato e sono descritte nella relativa pagina di manuale. Il formato generale della sezione ` del tipo: e Section "InputDevice" Identifier "nome" direttiva . le restanti direttive servono a specificare le caratterio e stiche del monitor.4.. Come per HorizSync pu` essere indicato sia come o singola lista di valori che come intervallo. Questo valore viene usato dal server X per determinare se un modo video ` compatibile e con il monitor. 30 ` la frequenza con cui pu` essere ridisegnato l’intero schermo. e indica la frequenza (o l’intervallo di frequenze) di aggiornamento verticale30 supportato dal monitor. sono tuttavia specificate direttamente nella pagina di manuale di XF86Config-4. con nomi del tipo di 1024x768. VertRefresh Mode In genere i valori per HorizSync e VertRefresh sono critici per l’uso del monitor. EndSection dove come nei casi precedenti Identifier specifica una stringa identificativa del monitor (che pu` essere qualunque) ed ` obbligatoria. ` 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. In genere non ` necessario e utilizzarla in quanto vengono riconosciuti come predefiniti una serie di modalit` video in standard VESA. Il resto della sezione prevede come nel caso precedente solo delle direttive Option.

SubSection "Display" voci . LA CONFIGURAZIONE DEI SERVIZI DI BASE I monitor recenti supportano comunque un meccanismo di notifica alle applicazione di questi ed altri dati.. detto EDID. a .128 CAPITOLO 3.. Di nuovo ne deve essere presente almeno una. 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. 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).. InputDevice "input device id" .. nella forma generica: Section "ServerLayout" Identifier "nome" Screen "screen id" .. Il formato generale di questa a sezione ` il seguente: e Section "Screen" Identifier "name" Device "device id" Monitor "monitor id" direttive .. ed qualora si specifichino pi` modi. 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. ed ` obbligatoria come le due Device e Monitor che servono a specificare la scheda video ed il e monitor collegati allo schermo. che evita di doversi andare a cercare i rispettivi valori su una qualche oscura pagina del manuale (sempre che si siano scomodati a scriverceli). e definisce le caratteristiche dello “schermo” che verr` utilizzato dal server X. diverse risoluzioni e diverse frequenze di aggiornamento a seconda delle caratteristiche della scheda video e del monitor. 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..31 Una volta definite le schede video ed i monitor presenti. questi vanno collegati fra loro oltre che con il cavo tramite una apposita sezione Screen che identifica l’insieme dei due. EndSection di nuovo la direttiva Identifier serve a fornire una stringa che identifica lo schermo in questione. EndSubSection ... ` 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--. u ` E inoltre obbligatoria la presenza di almeno una sottosezione Display che specifichi la profondit` di colore (tramite la direttiva Depth. che prendono come argomento l’identificatore utilizzato in una delle sezioni omonime. Uno schermo infatti pu` essere utilizzato a diverse profondit` di o a colore. 31 nel caso di Debian per poter utilizzare questo comandi occorrer` installare il pacchetto read-edid..

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

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

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). quando si hanno pi` finestre da gestire.4. quella cio` cui verranno inviati tutti gli eventi in ingresso (ad e esempio quello che si scrive sulla tastiera). o di passare dall’una all’altra. nel quale specificare i valori che all’avvio del server andranno a soprassedere quelli di default. Senza un window manager infatti si avrebbe la grafica ma non la possibilit` di spostare. Un esempio di un file di configurazione delle risorse pu` o essere il seguente: . 34 .34 Infine si tenga presente che il carattere “!” serve ad introdurre una riga di commento. ridimensionare le finestre. si specifica la geometria iniziale ecc.Background: DarkSlateGray . questi ultimi. 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. si limitano solo a disegnare il contenuto delle rispettive finestre. Si noti come la sintassi preveda una riga in cui si specifica il nome della risorsa terminato da “:”. 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). E il window manager che si cura di tutti questi compiti.. ` appunto quello della selezione di u e quella che viene messa a fuoco. 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. 1. Come per` ci si potr` rendere conto ad esempio o a lanciando xinit a mano con una serie di programmi qualsiasi. ecc. e della gestione il mouse per gestire lo spostamento. del disegno degli elementi grafici di contorno. 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. Un compito fondamentale infatti. ciascuno nella sua finestra.3. il passaggio dall’una all’altra.... che ` un po’ l’equivalente del processo in foreground e visto in sez. 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. in cui si modificano le impostazioni dei colori di sfondo e primo piano.Xresources nella propria o home directory. cui segue la stringa che assegna il valore. 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.4. 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. i singoli utenti per` possono cambiare a piacere questi valori tramite l’uso del file . la ridimensionamento e la selezione delle finestre.geometry: 80x28 emacs*BorderColor: DarkSlateGray emacs*fringe. quello che contraddistingue una interfaccia grafica ` la capacit` di poter eseguire vari programmi in e a contemporanea. seguendo la solita filosofia per cui ognuno si cura di eseguire un suo compito ben preciso.3. il loro spostamento. Se le risorse permettono di controllare i vari parametri interni delle singole applicazioni. a ` nascondere. Per usare con profitto una sessione grafica tutto quello che serve ` un window manager. devono essere invece gestiti a parte e non sono compito dei singoli programmi. Il posizionamento delle stesse.

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

3. e Infine l’uso di questa architettura permette anche di utilizzare pi` code di stampa per la u stessa stampante. tramite un e opportuno comando. 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. Il vantaggio di questo sistema ` che la gestione della coda pu` essere esguita indipendene o temente dalla gestione della stampante. Noi faremo riferimento solo a LPRng.5.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. LPRng. le stampe cio` non vengono mai eseguite direttamente. Inoltre con lo schema di fig. facendo riferimento al tutto con il nome del protocollo LPD (acronimo di Line Printer Daemon) che ` pure standardizzato nell’RFC 1179. Per questo esso ` in genere sostituito da una e e implementazione alternativa. e .5. 3. e tutt’ora e ` distribuito insieme a questo sistema operativo. ma immesse.5.2 Il sistema di stampa in stile BSD Uno dei sistemi di stampa storici in ambiente Unix ` quello sviluppato per BSD. sviluppata indipendentemente che ha la stessa interfaccia e le stesse funzionalit` ma supporta anche molte estensioni (in Debian ` fornita dal pacchetto a e lprng). ad esempio diventa possibile inviare la stampa su una coda remota se ` previsto un opportuno meccanismo di comunicazione. ignorando completamente e l’implementazione originale di BSD. 3. E presente un porting anche per GNU/Linux. Una delle caratteristiche fondamentali dei sistemi di stampa in ambiente unix-like ` quella e delle code.4).3. o con diversi privilegi o priorit`. (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.2. Figura 3.2: Schema generico del funzionamento del sistema di stampa. a 3. che uno dei sistemi di stampa di uso pi` comune nelle u distribuzioni GNU/Linux (l’altro ` CUPS che tratteremo in sez. 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. questo consente ad esempio di utilizzare code diverse (con filtri diversi) a seconda del tipo di file che si vuole stampare. IL SISTEMA DI STAMPA 133 tutte le operazioni necessarie (comprese le eventuali conversioni di formato) e di garantire un accesso corretto senza sovrapposizioni.

7: Le principali opzioni del comando lpr. seguendo la nomenclatura inglese. Se invocato senza argomenti esso stampa la lista delle stampe presenti. 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.3. per l’elenco completo al solito si faccia riferimento alla pagina di manuale. 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. a Di default il comando esegue la ricerca delle stampe sulla coda di default. oppure la stampante di default. NPRINTER o NGPRINTER. in particolare i comandi fanno riferimento a questi identificativi come ai job ID e riportano il numero di stampe correnti come numero di job. Per la gestione delle stampe sono disponibili una serie di comandi per controllare lo stato della coda ed eseguirvi sopra delle operazioni.7. il primo di questi ` lpq.134 CAPITOLO 3. che ` la prima definita e in /etc/printcap. (vedi sez. Tabella 3. identificata da una lettera maiuscola a da “A” (pi` bassa) a “Z” (pi` alta). 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. se definito. Si pu` usare l’opzione -a per fare eseguire o le stampe sono spesso chiamate. ne tratteremo la configurazione in sez.5. LA CONFIGURAZIONE DEI SERVIZI DI BASE Come il nome stesso suggerisce. 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. LPDEST. u u associa alla stampa il nome passato come parametro. il valore di una delle variabili PRINTER. 3. Opzione -# -C -J -m -U Significato specifica il numero di copie da stampare. 3. Per richiedere la stampa di un file si deve utilizzare il comando lpr. 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. che prende come argomenti i file da stampare (se non si specifica nulla viene usato lo standard input). permette di specificare (come parametro) l’utente per conto del quale eseguire la stampa (utilizzabile solo dall’amministratore). 3.3).5. specifica la priorit` della stampa. da passare come parametro. a meno di non usare l’opzione -P per selezionare una coda specifica. job. che permette di esaminare e lo stato della coda. 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. 35 . L’opzione principale di lpr ` -P che permette di indicare su quale coda di stampa inviare e il file da stampare.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. se non la si specifica viene usato. le altre opzioni principali sono riportate in tab. in modo che questo venga stampato nell’intestazione (quando questa ` prevista). da passare come argomento.

L’uso di lprm serve a richiedere a lpd la cancellazione delle stampe selezionate.8. questa ` una caratteristica della versione di lprm del pacchetto lpr-ng.5. 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.4). Si pu` invece o o bloccare l’immissione di stampe su una coda con disable e riabilitarla con enable. 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). la si potr` eliminare dalla coda con il comando lprm. che tramite il nome dell’utente ad esse associato. che seleziona tutte le stampe di un utente. 3. Chiude la lista dei programmi ausiliari lpc. seguito da eventuali parametri per lo stesso. 36 . Una volta creata una stampa. 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. Si pu` fermare la stampa con l’uso del comando stop e farla ripartire con start. che serve per controllare lo stato del sistema di stampa.3). con l’opzione -U si pu` richiedere (se si ` root) di operare a nome di un altro o e utente. Entrambe le forme supportano l’utilizzo dei caratteri jolly del filename globbing (vedi sez. L’uso della parola chiave all seleziona tutte le stampe presenti. Pertanto la configurazione della stampante su una macchina che usa questo sistema consiste nel configurare opportunamente lpd. se usato dall’amministratore. da cui questi possono essere specificati. Il primo comando ` help che stampa la lista di tutti quelli e disponibili. per le altre opzioni e per una descrizione dettagliata si pu` fare o riferimento alla pagina di manuale. IL SISTEMA DI STAMPA 135 la ricerca su tutte le code.5. o del sistema. 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). ma un utente potr` rimuovere solo quelle per i quali ha il permesso (per la gestione dei permessi si a veda sez. e permette perci` di trasformare una qualunque stampante presente o sulla propria macchina in una stampante di rete. in cui ` prevista la presenza di una serie di e file di configurazione per i vari compiti eseguiti dal demone.3.5. Per le altre opzioni ed i dettagli di funzionamento del programma si faccia riferimento alla pagina di manuale.1. Con status si ha la stampa dello stato della coda e relativa stampante associata. 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. 3.36 mentre se non si specifica nulla viene selezionata la prima che pu` essere rimossa. al solito l’elenco completo ed i dettagli sono nella e pagina di manuale. 2. al suo posto invece si deve usare semplicemente l’argomento “-”. Nel nostro caso esamineremo la configurazione soffermandoci specificamente sul caso particolare di LPRng. il pacchetto originale del demone di e stampa di BSD non supporta questa opzione. Se non si specificano argomenti il programma si porta su una linea di comando interna. L’elenco dei principali comandi ` riportato in tab. 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.800 Rank Owner/ID Class Job Files epson is ready no entries Size Time 3.

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

prende come valore un pathname. Tabella 3. log file. 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. 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. file di dispositivo su cui ` situata la stampante (o pipe cui e pu` essere inviato il file da stampare). remote machine. mentre con la direttiva include si possono includere altri file. da specificare come valore numerico. lunghezza della pagina in righe. al solito per l’elenco completo ed i dettagli si pu` fare riferimento alla pagina di manuale. da specificare in byte come valore numerico. accessibile con man lpd. indica il filtro da applicare a tutti i file immessi sulla coda prima di inviarli alla stampante. insieme a tutti gli altri file del sistema. line printer. Questa ` la pi` grossa differenza con il sistema di stampa di BSD classico. e l’assegnazione. prende come valore il relativo o pathname. o Campo if Significato input filter. da specificare come stringa. page width. anche . I principali campi del file sono riportati in tab. da specificare come stringa contentente l’hostname o l’indirizzo IP (in notazione dotted decimal). oltre alle modalit` previste per quest’ultimo. larghezza della pagina in caratteri. file su cui viene registrato il rendiconto delle pagine stampate.conf. Il primo file. prende come valore il pathname al programma da usare come filtro. 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. che deve leggere i dati dallo standard input e riemettere il risultato del filtraggio sullo standard output. sopprime la stampa delle intestazioni. spool directory. account file. 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.9.perms che viene utilizzato per il controllo degli e accessi. 3. I parametri hanno gli stessi nomi usati in /etc/printcap. ma dato che tutti i valori sono ad un default corretto di norma questo non deve essere modificato.5. con printcap_path si indica la posizione di default del file printcap. nome della coda di stampa su una macchina remota. usualmente mantenuti. Il secondo file di configurazione di lpd ` lpd.9: I principali campi di /etc/printcap. contiene la configurazione generale del demone. 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. se presente. Si pu` usare questo file per specificare valori di default validi in generale per i parametri di o /etc/printcap. lpd. remote printer. file su cui vengono registrati tutti gli errori del sistema. nome della macchina remota cui inviare le stampe. page lenght.conf.3. dimensione massima della pagina da stampare. prevede anche quella di utilizzare il carattere @ per identificare a un valore logico. questo infatti e u utilizza semplicemente il file /etc/hosts. ` un valroe e logico. prende come valore un pathname. Al solito si rimanda alla pagina di manuale. in /etc/lprng. per i dettagli e l’elenco completo delle direttive. da specificare come valore numerico.lpd (alternativamente viene usato. suppress header. nome della directory dove vengono mantenuti i file da stampare presenti nella coda.

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

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. 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.5. che poi saranno confrontati con le condizioni indicate all’interno di lpd. cupsd. Il servizio ` fornito da un demone. e e cupsd. acronimo di Internet Printing Protocol. Dopo di che viene consentito. code e stampe avviene attraverso l’interfaccia che il servizio mette a disposizione.perms.3. 3. 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. al solito righe vuote o inizianti per un “#” vengono ignorate. 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. Si elimina poi possibilit` di connettersi da a qualunque altra macchina che non sia quella locale. solo a root di controllare il demone con lpc in maniera completa. 3. mentre per chiunque altro viene consentito (con la direttiva LPC) di utilizzare solo i comandi in essa elencati. 38 il server web pi` diffuso.11 si sono riportate le principali chiavi ed il relativo significato. Il file esprime sempre un elenco di condizioni. pu` essere eseguita o direttamente tramite un browser qualunque. che ` controllato da un file di configurazione. estratto dalla versione installata su una Debian Sid.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. che tratteremo in sez. che vengono controllate sequenzialmente. anche se ` possibile usare degli opportuni a e comandi di shell per eseguire gli stessi compiti. come la creazione il controllo e la rimozione di stampe e code di stampa o la configurazione delle stampanti. 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. e il valore viene specificato di e seguito separato da uno spazio. 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. e questa resta la modalit` principale. per un elenco dettagliato si pu` fare o riferimento alla pagina di manuale accessibile con man lpd. con le regole per il servizio “C”.conf. che baster` puntare sulla porta 631 della macchina a da amministrare. IL SISTEMA DI STAMPA 139 Tutte le chiavi partono con un valore nullo. Un esempio di lpd. In tab. che di norma viene installato in /etc/cups.5. quando una di queste viene verificata gli ulteriori controlli vengono evitati.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). ??. o in maniera generica all’amministratore. u . come dicevamo infatti la gestione di stampanti. 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.perms. NomeDirettiva valore dove il nome della direttiva ` composto da normali caratteri.perms.status.

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. indirizzo o rete da cui accettare le richieste di riconoscimento. specifica la porta su cui si pone in ascolto il demone cupsd (il default ` 631). 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. ma con le direttive BrowseAllow e BrowseDeny si possono indicare quali sono le macchine (o le reti) le cui richieste vengono accettate o rifiutate. abilita o disabilita il riconoscimento automatico delle stampanti presenti (prende i valori on o off). indirizzo o rete da cui non accettare le richieste di riconoscimento. e la directory in cui inserire i file temporanei. numero massimo di stampe in coda. il file su cui vengono registrati gli errori. specifica la directory radice per il demone cupsd. 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.cups. ed hanno una forma diversa. richiede come valore il nome del file o la parola chiave syslog che invia le informazioni all’omonimo servizio. la directory radice per i documenti HTTP (come la documentazione) che vengono messi a disposizione attraverso l’interfaccia. indirizzo di broacast cui inviare le richieste di riconoscimento. 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. il default ` 0 e significa nessun limite.140 CAPITOLO 3. richiede come valore il nome del file o la parola chiave syslog che invia le informazioni all’omonimo servizio. Queste direttive sono in genere specificate in coda al file. LA CONFIGURAZIONE DEI SERVIZI DI BASE Con la direttiva Port si pu` specificare la porta su cui il servizio si pone in ascolto. e utente per conto del quale viene eseguito cupsd (di default lp).org/. 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). del tipo: <Location /percorso> . numero massimo di copie che un utente pu` richiedere. gruppo per conto del quale viene eseguito cupsd (di default lpadmin). di default ` /etc/cups. in sostanza lo spool di stampa (di default ` /var/spool/cups/tmp). il default ` 0 e significa nessun limite.12: Principali direttive per il file /etc/cups/cupsd. il default ` 0 e significa nessun o e limite. che usano la sintassi elementare in cui si esprime la corrispondenza di un valore ad una parola chiave. livello dei messaggi da parte del demone. 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. e Tabella 3. 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. u per l’elenco completo con una descrizione sommaria si pu` fare riferimento alla pagina di mao nuale. il file su cui vengono registrati i dati sulle pagine stampata. la directory dove sono mantenuti i dati di CUPS. ServerRoot TempDir User MaxCopies MaxJobs MaxJobsPerUser In tab. cupsd.12 sono riportate le pi` importanti direttive elementari di /etc/cups/cupsd. permette di includere un altro file nella configurazione.conf. e numero massimo di stampe per utente. richiede come valore il nome del file o la parola chiave syslog che invia le informazioni all’omonimo servizio.conf.conf prevede la presenza di direttive con una sintassi pi` complessa. il set di caratteri di default. Oltre alle direttive appena illustrate. Normalmente tutte le richieste vengono accettate. 3.

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

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

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

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

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

LA CONFIGURAZIONE DEI SERVIZI DI BASE .146 CAPITOLO 3.

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

il costo della perdita si riduce semplicemente a quello del ripristino degli stessi da backup. che si devono salvare i contenuti delle directory /etc. Questo comporta che deve essere determinata la frequenza con cui si vogliono effettuare i backup. la frequenza dei backup. che qualora fossero gi` e a assenti alla data dell’ultimo backup disponibile sarebbero irrimediabilmente perduti. occorre stabilire anche il periodo di tempo che si intende coprire con i backup. non si potrebbero recuperare eventuali dati cancellati in precedenza. 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. direttamente o indirettamente. Per quanto riguarda i disastri naturali. o che vi siete dimenticati di inserire nel backup alcune informazioni e essenziali. insieme ai dati personali dei e singoli utenti. in modo da poter essere in grado di ricostruire la situazione dei propri dati ad istanti diversi nel passato. se e non nel caso in cui una reinstallazione da zero non comporti un carico di lavoro eccessivo. come la quantit` di dati che si vogliono mettere sotto controllo. Ci sono infatti parecchie variabili da tenere sotto controllo. ad esempio se servono solo a mantenere una copia di riserva che permetta il recupero di eventuali cancellazioni accidentali passate inosservate. e non della ricreazione da zero degli stessi. Se infatti si avesse un sistema di backup contenente solo le informazioni necessarie a ripristinare la situazione ad un certo istante. Sono senz’altro da salvare tutti i dati di sistema. o se si vuole mantenere una storia completa per ragioni di archiviazione. il periodo che a si intende coprire con il backup. . e la frequenza con cui si effettuano questi ultimi. pi` risorse dovranno essere utilizzate nella u a u manutenzione dei backup. 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). Ovviamente pi` lungo sar` il periodo. Perch´ questa strategia sia efficace comunque occorre che i backup siano effettuati in maniera e appropriata. mentre pu` essere importante salvare delle configurazioni ottenute come risultato finale di parecchie ore o di lavoro. Come accennato. /var e /home. Questo ad esempio vuol dire. avere a disposizione copie multiple dei propri dati rende meno critica la perdita di una di esse. ed eventualit` remote ma completamente distruttive a di ogni tipo. per cui potreste trovarvi senza disco e scoprire che un nastro ` illeggibile. 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. mentre non ` necessario salvare quelli di e /usr. a e Per questo motivo nell’effettuare dei backup il primo punto ` quello di mettere a punto e una opportuna strategia. e quant’altro non ` replicabile in maniera automatica. Una volta determinata la dimensione totale dei dati che si vogliono archiviare. il mezzo utilizzato. AMMINISTRAZIONE ORDINARIA DEL SISTEMA di eventuali azioni dolose che possono causare. nell’ambito di un sistema GNU/Linux. 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. quando invece nella pratica il caso pi` comune di recupero di dati u da un backup ` proprio quello di vecchi dati cancellati inavvertitamente. e non avrebbe senso usare una frequenza maggiore. le modalit` di gestione degli stessi. o che l’unica unit` a nastro in grado di rileggere i vostri backup si ` rotta pure lei. 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. gli archivi della posta e del database e del web. Un altro fattore che incide sulla frequenza ` il tempo che occorre a creare il backup. la distruzione di dati o il danneggiamento dei relativi supporti. Infine la scelta del periodo da coprire con i backup dipende dall’uso degli stessi. mantenere dei backup ` la strategia pi` semplice ed efficace per proteggersi e u dalle molteplici evenienze che possono causare la perdita di dati.

ma non sono adatti come mezzi di backup in quanto stanno nello stesso computer dei dati originali che pu` andare distrutto. chiamato cos` dall’inglese Tape u e ı ARchive dato che il comando ` nato apposta per archiviare i file su nastro magnetico. bench´ funzionali e poco costosi. 4. 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.1. ma soprattutto il fallimento di un backup incrementale render` inutilizzabili tutti quelli successivi basati su di a esso. dato che questa interfaccia ha a dimostrato di mantenersi utilizzabile nel tempo. 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. ` solitamente molto alto. ma questo comporta altri problemi. dato che un backup inaffidabile a e ` assolutamente inutile. Ad esempio pu` non essere troppo a o saggio tenere i propri supporti in un armadio nel corridoio. hanno dei grossi e problemi di stabilit` nel lungo periodo. ma diventa cruciale solo qualora un mezzo troppo manomesso. ae lento rendesse impossibile effettuare i backup con la frequenza necessaria. dovendosi utilizzare dischi estraibili a caldo. 1 . i floppy hanno capacit` ridotta e scarsa affidabilit`. anche in presenza di nuove tecnologia per le schede.2 Il comando tar Il comando pi` usato per la gestione di archivi di file ` tar. per questo qualunque strategia di backup prevede comunque l’effettuazione periodica di backup completi. che funziona per` solo con una vecchia o scheda hardware fuori produzione. fra cui quello del costo che. In genere inoltre si utilizzano unit` a nastro SCSI. Un’altra decisione cruciale nella strategia di backup ` la scelta del supporto da utilizzare e per gli stessi.1. I CD-R infatti. dei backup cio` in cui si archiviano solo a e i file che sono stati modificati rispetto ad un backup precedente. prevedendo anche lo stoccaggio dei nastri in un locale sicuro in una locazione remota. 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. 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). ma occorre invece riflettere su quanto possa essere pericoloso avere uno splendido sistema di backup perfettamente funzionante.4. Al di l` e a del suo uso per la creazione di archivi. Inoltre qualunque sia la modalit` di stoccaggio utilizzata occorre anche prevedere a verifiche periodiche del funzionamento dei backup (effettuando dei ripristini di controllo). danneggiato o o 1 La velocit` ` senz’altro utile. in genere i dischi sono molto affidabili. tar ` anche il programma pi` diffuso per la distribuzione e u ovviamente a questo fanno eccezione i dischi estraibili. la velocit` e l’utilizzabilit`. Oltre alla scelta dei supporti una strategia di backup deve comunque anche prevedere la definizione delle modalit` di conservazione degli stessi. intervallati da backup completi a cadenza settimanale o mensile. Il a a a costo incide direttamente sulla quantit` di dati che si possono salvare. Tenendo conto di tutte queste caratteristiche alla fine i supporti pi` utilizzati per i backup u sono usualmente i nastri. In questo modo ` possibile e ricostruire la situazione ad un dato istante senza dover registrare tutte le volte l’insieme completo dei dati. 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. l’affidabilit`. L’utilizzabilit` viene a spesso data per scontata. per cui ` opportuno avere a e un mezzo poco costoso. archiviando i backup mensili per un periodo di tempo pi` o meno lungo a secondo delle esigenze u “storiche” che si possono avere. Le variabili in gioco sono il costo. L’affidabilit` invece ` fondamentale.2 e e A titolo di esempio una strategia comunemente utilizzata ` quella di effettuare backup incree mentali a frequenza giornaliera. sotto una vecchia tubatura del riscaldamento.

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

corso/ordadmin.~ corso/netbase.. specificando la quale si otterr` invece una a lista in formato esteso..tex ordadmin.tex shell. 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. Si pu` verificare la presenza di un singolo o file o di una lista passando come argomento il nome (o i nomi). di nuovo si a dovr` utilizzare -f per indicare il file contenente l’archivio che in questo caso sar` letto. Inoltre.tex struttura. 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.tex netinter. anche senza la presenza dell’opzione -v. allo stesso modo si potr` archiviare tutta una directory con: a piccardi@anarres:~/Truelite/documentazione$ tar -cvf dispense. analogo a quello di ls -l.tex netbase. Si tenga presente che quando si crea un archivio con -c il file di destinazione viene sovrascritto.tar corso/#ordadmin. si tenga presente per` che in o .tex# e si noti come in questo caso vengano archiviate ricorsivamente anche tutte le directory sottostanti ed il relativo contenuto.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.1./dispense.tex corso/dispense.tex fdl. se si vuole invece aggiungere dei file ad un archivio preesistente occorre usare l’opzione -r.tex config.dia .tar .tar *.tex corso/netinter.4. tar: . not dumped Una volta creato un archivio se ne potr` verificare il contenuto con -t (o --list).eps corso/images/dir_links.~1. il file viene creato nella directory corrente.5.tex advadmin. a meno di non specificare un pathname assoluto.tex e si noti come si sia usata anche l’opzione -v per stampare la lista dei file archiviati.tar: file is the archive.tex corso.tex ringraziamenti.tex. ARCHIVIAZIONE E BACKUP 151 piccardi@anarres:~/Truelite/documentazione/corso$ tar -cvf dispense.tex Struttura.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.

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

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

e usando un insieme di supporti da ruotare settimanalmente. e come dump usa l’opzione -f per indicare il file (ordinario o di dispositivo) da cui recuperare i dati da ripristinare. 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.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. ma si pu` specificare un file ordinario o usare . e saranno u considerati come volumi successivi. Questo significa che un backup di livello 9 salver` sempre solo i file modificati dopo l’ultimo backup precedente. Il comando che permette di recuperare i dati archiviati con dump ` restore. esclude una lista di inode elencati nel file specificato come parametro. in questo caso per` sono consentiti solo backup completi di livello 0 e tutto il contenuto della directory o deve risiedere nello stesso filesystem.1) passati per numero. per l’elenco completo si pu` al solito fare riferimento alla pagina di manuale. Il comando inoltre prevede la necessaria presenza di una serie di opzioni che ne indicano la modalit` di operazione. -i che porta si suppone che prima si sia partiti con un dump di livello 0. e a quale livello. e cio` /dev/st0. 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. 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). e in realt` si pu` anche specificare una directory contenente i file che si vogliono archiviare e non un mount a o point. che esegue e esattamente il compito inverso. Una possibile strategia di backup ` quella riportata nella pagina di manuale.2. si sono riportate le principali in tab. 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. in cui si sono salvati tutti i file. abilita il salvataggio multivolume (in cui si usa -f per specificare pi` di un volume di backup). 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. un passaggio iniziale infatti ` sempre necessario. si possono specificare pi` file separandoli con virgole. u -e -E -f -L -M -u -v Tabella 4. aumenta la prolissit` del comando facendogli stampare a a video pi` informazioni riguardo le operazioni correnti. 4. e esclude dal backup una lista di inode (vedi sez.154 CAPITOLO 4. 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. AMMINISTRAZIONE ORDINARIA DEL SISTEMA Il livello 0 indica un backup completo. 1. 5 4 . e stabilisce un punto di partenza per tutti gli altri livelli.3: Principali opzioni del comando dump.3.per indicare lo e o standard output). a Quindi per fare un esempio. Le principali sono a -C che effettua un confronto fra i file passati come argomento e quelli sul backup. Un livello superiore richiede il salvataggio di tutti i file che sono cambiati dall’ultimo backup effettuato con un livello inferiore. e prende come argomento il mount point del filesystem di cui si vuole eseguire il backup. scrive il backup sul file passato come parametro.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. in cui si fanno backup incrementali giornalieri. usa la stringa passata come parametro come etichetta del backup. ed un algoritmo di tipo torre di Hanoi modificato.

trattato in sez. 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. LA GESTIONE DEI PACCHETTI SOFTWARE 155 in modalit` interattiva (dove possono essere dati una serie di comandi. 4. dato che questi di e norma sono meno occupati del sito originale. 6 . 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`.gz6 dato che il programma di compressione piu usato ` gzip.2. estrae una directory dal backup (o tutto il contenuto). se questa viene passata come argomento. e esegue un confronto fra i file presenti nel filesystem e quelli nel backup. In genere gli archivi vengono pure compressi.4 le pi` rilevanti. in particolare esaminando le funzionalit` di gestione automatizzata a dei pacchetti che permettono di tenere traccia di tutto quello che si ` installato nel sistema. -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. presenta un elenco di file nel backup. estrae il contenuto di una directory.1. se ci sono. 4.4.tar. anche se ` pi` lento). e probabilmente anche pi` “vicini” a voi e quindi u con una maggiore velocit` di accesso.4: Principali opzioni del comando restore. e 4.tar.” al loro interno. Tabella 4.2. 4. stampa una maggiore quantit` di informazione durante a le operazioni.tar. Come dump anche restore prevede numerose opzioni.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.2. In genere il software viene distribuito in forma sorgente in degli archivi compressi chiamati gergalmente “tarball ” in quanto creati con il programma tar.bz2. oltre a quelle brevemente spiegate in precedenza si a sono riportate in tab. Opzione -f -C -i -r -t -x -h -M -v Significato indica il file in cui ` stato memorizzato il backup. Pertanto se il nostro pacchetto software ` pacchetto. abilita il ripristino da un archivio multivolume. descritti nella pagina di a manuale). 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. parecchie delle quali servono a controllare propriet` relative all’uso dei nastri. per l’uso di sistemi obsoleti che hanno problemi coi nomi di file che hanno troppi caratteri “. eventuali mirror. e non di quelle in essa contenute. e -x che effettua il ripristino dal contenuto dell’archivio.1. a ricostruisce un intero filesystem da zero.gz lo si potr` decomprimere con tar e a talvolta abbreviata in tgz.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. a 4. 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. per cui di norna li si trovano distribuiti in file che usano l’estensione . attiva la modalit` interattiva. o di tutto l’archivio se non vengono passati argomenti.2. -r che permette di ricostruire un intero filesystem da zero. nel qual caso l’estensione usata ` . di una directory.

In genere questi sono disponibili nei dischi di installazione come pacchetti con lo stesso nome delle librerie relative.tar. Inoltre se installare ` facile.1. secondo e e le modalit` che vedremo pi` avanti. 2.156 CAPITOLO 4. In questo modo ` possibile installare pacchetti generici. per cui per poterli utilizzare dovete avere le directory di questa gerarchia secondaria nel PATH (vedi sez. non si sono installati u e i file di dichiarazione che sono usati dal compilatore per poter accedere. alle funzioni della stessa. Uno dei problemi pi` comuni ` che. che usa meccanismo molto sofisticato che permette di creare i file nella giusta sequenza. A questo punto con make install si dice allo stesso programma di eseguire le istruzioni di installazione. make.1./configure ha completato con successo le sue operazioni potremo eseguire il secondo comando nella sequenza.gz. e che se installate e una nuova versione dovete verificare che la sovrapposizione non generi problemi. il problema di tutto ci`. quando compila il pacchetto. Il funzionamento di make va al di la di quanto sia possibile affrontare qui. 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: . a u Una volta che . a seconda della potenza della macchina. Si tenga presente che ` la procedura standard prevede di installare i pacchetti e compilati dai sorgenti in /usr/local/. estesi con un -dev. 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). questi non sono necessari./configure) esegue uno script di shell che verifica che nel sistema sia presente tutto quello che serve per compilare il pacchetto. In genere infatti. A questo punto per l’installazione occorre eseguire le relative operazioni. 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. Questo ` il punto pi` critico della e u procedura. 7 . 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. Se qualcosa va storto in questa procedura avete due strade. Questo ` un programma per la costruzione di altri e programmi. e pertanto nella installazione standard di una distribuzione normalmente vengono tralasciati. quando si installano pacchetti binari gi` a compilati. AMMINISTRAZIONE ORDINARIA DEL SISTEMA -xvzf pacchetto. dove e quando. 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. Queste possono essere molto diverse da pacchetto a pacchetto. 3. basti dire quello che si otterr` dal comando ` una lunga serie di linee di uscita da parte del compilatore. pur avendo installato una libreria. nel caso probabilmente non starete a leggere questo manuale).2). ` che dovete ricordarvi di cosa avete installato. oltre al tempo e o perso a compilare i programmi (che per pacchetti piccoli ` forse trascurabile. che di solito ha lo stesso nome del pacchetto. ` pi` problematico disinstallare. 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. dell’ordine delle o ore o dei giorni)./configure make make install Il primo comando (. ma per pacchetti e importanti come il server X pu` essere. a e fino a quando tutte le operazioni saranno completate ed i binari del pacchetto saranno stati creati.4) ed essere in grado di usare le eventuali librerie installate dal pacchetto (secondo quanto vedremo in sez. In questo caso quello che c’` da fare ` installare questi pacchetti con il relativo meccanismo di gestione.

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

diventa cos` ı . in quanto provvede le stesse e a funzionalit`: installa e rimuove pacchetti mantenendo un database dei pacchetti e dei relativi a file installati. al solito le istruzioni complete e tutte le altre opzioni sono descritte nella pagina di manuale. Bench´ ormai anche i . Interroga il database per la presenza di un pacchetto.2. 4. quando un pacchetto dipende da un’altro che a sua volta dipende da una altro che a sua volta . Esso u e ` basato su un programma di gestione dei singoli pacchetti con funzionalit` analoghe a quelle e a di rpm.deb.deb. 4. ma sopra di esso ` stata costruita una infrastruttura molto pi` complessa che rende e u estremamente semplice e funzionale la gestione dei pacchetti. provvede l’esecuzione di script in fase di installazione e rimozione. Ricerca i pacchetti che contengono un file. 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. che permette e di cancellare completamente il problema delle dipendenze. Inoltre con -l viene stampata la lista dei pacchetti installati (se non si specifica nulla. se si specifica un nome viene ricercata la presenza di un pacchetto con quel nome).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. scaricare ed installare i pacchetti mancanti.158 CAPITOLO 4. ed ` piuttosto raro dover usare questo comando per installare e un pacchetto. Stampa informazioni su un . ed e ` sostanzialmente un analogo (in realt` c’era da prima) di rpm. Stampa informazioni su un pacchetto installato. I pacchetti Debian infatti sono organizzati per indicare in maniera coerente da quali altri pacchetti essi dipendono. ` in grado di e accorgersi di eventuali conflitti con pacchetti gi` installati. Stampa il contenuto di un . sia pure in forma non troppo sofisticata (il che porta a e quella situazione che viene chiamata dependency hell. 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). Questo avviene perch´ in realt` dpkg ` solo la parte di basso livello del sistema di e a e gestione dei pacchetti di Debian.6.deb e -r che rimuove un pacchetto dal sistema. 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. Tabella 4. il programma che permette di installare questi pacchetti ` dpkg. I pacchetti Debian sono distribuiti in file con l’estensione .6: Principali opzioni del comando dpkg.. 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. o Le opzioni principali del pacchetto sono -i che esegue l’installazione di un file . a pu` interrogare il database dei pacchetti e ottenere informazione sul loro contenuto. sta all’amministratore trovare..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. 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. Le altre opzioni principali sono riportate in tab. Stampa lo stato di un pacchetto. a Nel caso in questione rpm ` in grado. Stampa i file contenuti in un pacchetto. AMMINISTRAZIONE ORDINARIA DEL SISTEMA gestire le cosiddette dipendenze di un pacchetto da un altro. Rimuove il pacchetto. Opzione -i -r -l -L -S -s -p -I -c Significato Installa il pacchetto.deb ed usano un formato diverso rispetto agli RPM. e delle dipendenze da altri pacchetti.

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

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

3. Le principali opzioni sono riportate in tab. imposta la home directory dell’utente. 4. ma si provvede ad eseguire il comando passwd in un secondo tempo. per cui di norma non si usa mai questa opzione. a Tabella 4. che permette di aggiungere e un nuovo utente al sistema (cio` di creare un account). copia il contenuto di /etc/skel nella home. con tanto di creazione di tutti i file contenuti nella directory /etc/skel (vedi sez. Analogo ad useradd ` groupadd che permette di creare un nuovo gruppo. -g il gruppo iniziale.3. 11 . 4. ma non imposta la password (che resta disabilitata). supportando che deve essere specificata in forma cifrata.4.2.) insieme a tutti i dettagli a sul funzionamento del comando sono disponibili nella pagina di manuale accessibile con man useradd. imposta la shell di default.2). 4.8 per useradd. Per a a questo per` ` disponibile anche il comando usermod. l’elenco completo che comprende anche quelle pi` sofisticate. 12 i valori fra 0 e 99 sono usati normalmente per gli utenti corrispondenti ad alcuni servizi di sistema. legate all’uso delle shadow password che permettono di impostare alcuu ne propriet` delle password (come durata. che ` del tutto analogo all’uso di useradd oe e con l’opzione -D. -m richiede la creazione della home directory. lunghezza minima. a L’omologo di usermod per i gruppi ` invece il comando groupmod che permette di modificare e un gruppo. Infine con -u si pu` impostare un valore specifico per lo user ID. e prende le opzioni elencate in tab.3). ma prima di operare si assicura che l’utente che si va a modificare non sia collegato alla macchina.11 -s la shell. Si tenga presente che di default il comando si limita a creare il nuovo utente. 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.2 I comandi per la gestione di utenti e gruppi Il primo comando di gestione che prendiamo in esame ` useradd. Opzione -b -d -u -p -s -m -g -G -o Significato imposta la home directory. Oltre che a creare un nuovo utente il comando pu` essere anche usato per modificare le o propriet` di un utente gi` esistente. 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.8: Principali opzioni del comando useradd. imposta la password. imposta eventuali gruppi aggiuntivi. in particolare il comando permette di cambiare il group ID usando -g. 3. ecc.8. 4. -G eventuali altri gruppi di appartenenza. Il comando prende come argomento il e nuovo username. specifica un valore numerico per l’user ID. non crea la home directory e non imposta una shell di login. permette di specificare un user ID gi` esistente. ´ 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. 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. nel qual caso deve essere invocato con l’opzione -D.3. 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. imposta il gruppo di iniziale.

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

3). 4. quello che viene memorizzato ` solo il risultato della cifratura della password. 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. 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. Nel file sono mantenute poi anche altre informazioni come la shell di login. 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. in cui si scrivono il nome reale e altri dati relativi all’utente. che permette ad a un utente di cambiare la sua shell di login di (ma solo fra quelle elencate in /etc/shells. la home directory. 4. Quest’ultimo ` uno degli utenti del gruppo cui ` stato dato il compito di amministrare lo e e stesso. in caso di coincidenza si ` ottenuta l’autenticazione. o definire degli utenti amministratori del gruppo con l’opzione -A. quello e che si chiama un hash crittografico. Questo. LA GESTIONE DI UTENTI E GRUPPI 163 Se si specifica anche -r la password presente sul gruppo viene rimossa. Al solito la pagina di manuale riporta la documentazione completa. ` 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.3. il rendere leggibile quest’ultimo a non costituiva un problema. Gli altri comandi per la gestione delle propriet` degli utenti sono chsh. 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. oltre alla capacit` di cambiare la password di un gruppo. 3.3. 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. che deve essere fornita (altrimenti l’operazione non ` consentita). ecc. 4. 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. Al solito si faccia riferimento alle relative pagine di manuale per la descrizione completa. vedi sez. 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. e Se invecee si fa gi` parte del gruppo non ` necessaria nessuna password.3 Il database di utenti e gruppi Come accennato in sez. 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. dato che solo se si ` fornita la password originaria si potr` riottenere lo stesso e a risultato.3. Se usati con l’opzione -c si pu` specificare un comando da eseguire con i diritti o del gruppo o dell’utente richiesto.2. . 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. In realt` queste non a sono memorizzate in chiaro (il testo della password non viene mai scritto da nessuna parte nel sistema). ma solo quando ` stata impostata e una password per il gruppo.2) e chfn che permette di cambiare le informazioni mantenute nel campo chiamato Gecos (vedi sez.2 nelle prime versioni di Unix tutte le informazioni relative ad utenti e gruppi venivano tenute in due soli file. Bench´ questo schema si sia evoluto con l’introduzione e prima delle shadow password e poi di PAM e del Name Service Switch. Solo l’amministratore o l’amministratore del gruppo possono eseguire questo comando.3. 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.4. Questo comando permette infatti di cambiare il proprio group ID assumendo quello di un gruppo. e oltre a poterne cambiare la password ` in grado di aggiungere altri utenti al gruppo e usando il comando gpasswd.

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

in cui invece di tutte le combinazioni si provano solo quelle relative ad un dizionario di possibili password. Oltre alle password sono memorizzate in /etc/shadow una serie di ulteriori informazioni che permettono un controllo molto pi` dettagliato su di esse. • numero di giorni dall’ultimo cambiamento dopo i quali la password scade e deve essere necessariamente cambiata. • giorno in cui l’utente ` stato disabilitato (espresso in numero di giorni dal 1/1/1970). .4. anche se cifrate. • password cifrata. e 16 per i curiosi l’algoritmo originale si chiama DES. 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. come date di scadenza. Tutti trucchetti ampiamente noti che qualunque programma decente di password cracking applicher` alle parole del suo dizionario. • numero dei giorni precedenti quello di scadenza della password in cui gli utenti vengono avvisati. ` comunque piuttosto e semplice (e ci sono un sacco di programmi molto efficienti nel farlo) utilizzare quello che si chiama un attacco a dizionario. • numero di giorni che devono passare dall’ultimo cambiamento prima che la password possa essere cambiata nuovamente. era impraticabile. date in cui u sono state cambiate ecc. espone comunque ad un attacco a forza bruta (cio` alla possibilit` che qualcuno tenti di provarle tutte). Inoltre anche se oggi ` diventato possibile usare altri algoritmi di crittografia e e che rendono pi` difficile un compito del genere. Il formato del file ` analogo a quelli gi` visti. dato che potrebbero essere soggette ad una analisi di questo tipo. • giorno in cui ` stata cambiata password l’ultima volta (espresso in numero di giorni dal e 1/1/1970). E non giovano neanche trucchetti come quello di scrivere le parole alla rovescia. 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. 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. Per cui anche se spesso gli attacchi a forza bruta non sono praticabili. a Per questo motivo non ` comunque molto sicuro lasciare leggibili a tutti le password anche e nalla forma cifrata. ci sono 9 campi separati e a con dei “:”. con la potenza dei computer di oggi a lo ` molto meno. 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. Bench´ l’algoritmo crittografico con cui si calcolano le password sia piuttosto robusto. oggi ` poco usato per la sua debolezza.16 e mantenere leggibili le password. 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.3. Per questo motivo alcuni anni fa. Se nel sistema sono state abilitate le shadow password (in genere lo si fa in fase di installazione. invertire delle lettere o mettere un “3” al posto di una “e” o un “1” al posto di una “i”. nella reimplementazione dei meccanismi di autenticazione. • numero dei giorni successivi a quello di scadenza della password dopo i quali l’utente viene disabilitato. dati i computer dell’epoca. In questo caso. Se quando ` stato creato Unix questa e a e eventualit`. il cui rispettivo contenuto `: e • nome di login (o username). c’` sempre da fare i conti con la pigrizia degli u e utenti che tendono ad usare password come pippo o ciccio e simili.

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

e stampa a video il risultato. Dato che in questo caso la richiesta ` pi` sofisticata il sistema sar` e u a pi` complesso. in quanto le informazioni potrebbero essere mantenute anche altrove. che. cos` che questo ı possa essere. ma anche. 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. in maniera totalmente trasparente ai programmi scelti. pur restando ancora oggi quello pi` diffuso. e soprattutto. 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.:/home/piccardi:/bin/bash admin:x:1003:1003:Utente Amministrativo. ma le informazioni aggiuntive (come i dati sulle scadenze delle password) verranno persi.10.1... in questo caso le password verranno reinserite in /etc/passwd ed /etc/shadow. getent.. Il comando richiede come argomento una delle classi di informazioni gestite dal Name Service Switch fra quelle di tab. piccardi:x:1002:1002:Simone Piccardi.d il cui nome corriponde a quello dell’applicazione stessa (si avranno cio` file come e . Per questo motivo si pu` utilizzare un apposito comando.10.. In questo modo infatti ` molto pi` semplice per le singole applicazioni mantenere un proprio file e u di configurazione. 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. 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 . in breve PAM..3. come accennato all’inizio. La configurazione di PAM pu` essere effettuata in due modi. Per questo motivo esaminare il contenuto di questi file non ` detto sia sufficiente ad e identificare tutti gli utenti di un sistema. ` solo uno dei metodi per mantenere le informazioni riguardo gli account u e degli utenti. 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. illustrate in tab. In questo modo si otterr` la stampa delle informazioni degli utenti nello stesso formato in a cui sono mantenute nel corrispondente file tradizionale.. consente di interrogare il sistema dal Name Service Switch u per richiedere una lista completa.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.d. A questo provvede il a sistema chiamato Pluggable Authentication Method.:/home/admin:/bin/bash 4. sostituito con un altro. dove si sono riportate anche le quattro parole chiave usate nella configurazioni per identificarle. 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. 4. 3. l’uso dei file appena descritti. quella a di permettere la gestione di diverse modalit` per gestire l’autenticazione.3. Si ricordi che. Ogni applicazione che necessita dell’uso del sistema sar` controllata da un apposito file in a /etc/pam. quando le informazioni o sono distribuite su pi` supporti.4. Inoltre il sistema permette a di utilizzare impostazioni diverse per le differenti applicazioni che lo usano. 4. 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. LA GESTIONE DI UTENTI E GRUPPI 167 sistema tradizionale con i comandi pwunconv e grpunconv. introdotto inizialmente su Solaris e poi portato anche su GNU/Linux.

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

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

pare essere cambiata la modalit` di sviluppo del kernel. 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`.kernel. un numero di versione che cambia solo in caso di fondamentali modifiche strutturali dell’infrastruttura. Per questo al momento ` senz’altro pi` opportuno utilizzare l’ultima versione stabile precedente. riscritte parti che non si consideravano soddisfacenti. nei quali sono state introdotte le nuove funzionalit`.x. di sviluppo. Come accennato il sito per la distribuzione delle versioni ufficiali ` e http://www. ecc. la cui lista ` segnalata sulla stessa pagina. ma indica pi` propriamente una serie di u sviluppo.out all’ELF). 3 . a 4 dopo alcuni mesi dal rilascio della nuova serie 2. che avviene solo quando esse sono state abbondantemente verificate.6. usati per le macchine in produzione.x indicavano i kernel sperimentali. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Il primo numero esprime la major version.9).1. per cui si consiglia l’uso di uno dei vari mirror italiani disponibili. Si tenga presente che ogni versione stabile ha in genere un suo mantainer (quello delle versioni di sviluppo finora ` sempre stato Linus). in genere ci vuole sempre un po’ di tempo perch´ le nuove e e versioni stabili maturino e possano sostituire completamente le versioni precedenti. dato a e ı che la nuova serie ` appena nata.x e la 2.x. 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`. che in genere ha molto carico. Questo ci dice che anche se genericamente valida. che ne cura lo sviluppo ed il e rilascio delle nuove versioni. l’indicazione di utilizzare l’ultimo kernel della serie stabile. cosa avvenuta finora una sola volta (nel passaggio dei formati dei binari dall’a. cio` il e u e kernel 2.6. 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.4. 5. integrando anche grossi cambiamenti del kernel. nella direzione delle nuove funzionalit` ed infrastrutture per a quelle di sviluppo. nella direzione della stabilizzazione per le serie pari. che non prevede per il momento la creazione di nuove serie instabili. il passo successivo ` quello di scaricare e i sorgenti e ricompilarli.2. e l’eventuale introduzione di un quarto livello di numerazione per tenere conto di eventuali stabilizzazioni di queste release successive. nati a partire da un precedente kernel stabile.org.170 CAPITOLO 5. La convenzione scelta dagli sviluppatori e ` che un numero pari indica una versione stabile.2 Sorgenti e patch Una volta scelta la versione del kernel da utilizzare. mentre un numero dispari indica la versione e sperimentale. Al momento la major version ` la 2 e non e sembrano esserci all’orizzonte modifiche tali da giustificare una 3.4. in cui vengono introdotte tutte le nuove funzionalit` e le modifiche a infrastrutturali che porteranno alla successiva versione stabile. ma il a passaggio da una versione stabile alla successiva. Per esempio i kernel della serie 2.5.6. mentre i kernel della serie 2.24. e che viene aggiornato periodicamente con il relativo sviluppo. sia pure solo a livello di correzione dei pochi errori restanti. come la 2.4 Questo ci dice che in realt` il nuovo kernel stabile non ` lo poi cos` tanto.0. (nel novembre 2004.1. che ` quella che invece cambia periodicamente. Il secondo numero esprime il cosiddetto patchlevel. o eseguano backporting di codice dalla versione di sviluppo. Al momento della scrittura di queste dispense (gennaio 2004) l’ultimo kernel “stabile” ` il e 2. lo sviluppo dei quali3 ` e volto alla eliminazione dei bug e alla stabilizzazione del sistema. che sono a tutt’ora sviluppate. alla serie 2. a L’ultimo numero di versione ` infine il numero progressivo che identifica i kernel all’interno e di una serie. 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. va presa comunque con prudenza.x indicano i kernel stabili.

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

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

ma nel caso non viene utilizzata la procedura illustrata in sez. Una delle caratteristiche peculiari di Linux (torneremo sull’argomento in dettaglio anche in sez. come quest’ultimo. che ` /lib/modules/‘uname -r‘. A differenza cio` degli altri sistemi unix-like in cui il e e kernel ` un unico programma monolitico. che aggiungono le funzionalit` ulteriori o il supporto per l’uso a di certi dispositivi.7 Sorge allora un problema quando si vogliono ottenere due (o pi`) kernel diversi a partire dagli stessi u sorgenti. Pertanto tutto la procedura ` controllata dal Makefile principale e presente nella base della directory dei sorgenti. e le varie operazioni sono compiute invocando gli opportuni target 6 del comando make. 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. i moduli sono identificati soprattutto per la directory in cui sono a mantenuti. e 7 6 . e e che sono nella forma: VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 23 EXTRAVERSION = -ben1 KERNELRELEASE=$(VERSION). che gli permette una flessibilit` di e u a ´ utilizzo che gli altri kernel non hanno.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. 5. quella che viene mostrata dal comando uname -r. LA GESTIONE DI KERNEL E MODULI 173 sarebbe corretto. come per la maggior parte dei pacchetti o che si installano dai sorgenti. dato che in questo caso la versione sar` la stessa.2.1. 5.5.1. creata dagli stessi sviluppatori. 4.2. ma tutto viene gestito attraverso una procedura di costruzione dedicata. La vere sione del kernel ` indicata dai sorgenti.1 relativamente al funzionamento di questo comando. viene eseguita tramite il comando make. 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. L’uso dei moduli ha pertanto una grande rilevanza e deve essere pianificato accuratamente in fase di compilazione e configurazione. E possibile infatti modularizzare lo sviluppo del kernel separandone le funzionalit`. Questa.1.$(SUBLEVEL)$(EXTRAVERSION) si ricordi quanto accennato in sez. solo quando servono. Questa ` una delle caratteristiche pi` rilevanti di Linux. che sono identificati.4) ` quella di essere modulare. 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. indicare opzioni specifiche per la gestione di un dispositivo in fase di caricamento. in quanto nel caso del kernel non esiste uno script di configurazione.1. 5. 4. a Per risolvere questo problema ` allora possibile definire una versione “personalizzata”. per la relativa versione.4. 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). in realt` come vedremo in sez. accessibile o con man patch. o modificarle senza bisogno di un riavvio (basta rimuovere il modulo e ricaricarlo con le nuove opzioni). Per tutti i dettagli sul funzionamento del comando e sul significato delle opzioni si pu` al solito fare riferimento alla pagina di manuale.1. ed ` codificata nelle prime righe del Makefile principale.$(PATCHLEVEL). per questo esiste l’opzione -N (o --forward) che indica di ignorare i patch che sembrano invertiti o gi` applicati. 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.

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).ko al posto di e . come quello dei programmi ordinari. 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. che serve appunto a specificare un ulteriore identificativo di versione. Si noti allora la presenza.o.x li si ` distinti dai normali file oggetto usando l’estensione . e quali utilizzare come moduli. anche se un po’ particolare. 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. quali mettere direttamente dentro il kernel. o in fase di boot quando mancano le componenti essenziali per l’avvio del sistema. anche se modularizzabile.o (ma si ricordi che l’estensione in Unix ` solo una convenzione. il kernel verr` costruito di conseguenza. 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. della variabile EXTRAVERSION. a Tutto questo viene fatto. il primo passo per la compilazione del kernel ` quello della configurazione. che pu` essere usata per o compilare kernel per una architettura diversa dalla propria (ad esempio un kernel per PowerPC su una macchina Intel). tramite il contenuto del file . in cui per` gli indirizzi non sono stati assegnati. che ` sicuro. questo ` anche quello che si fa quando si produce l’immagine del kernel. tutte le altre configurazioni sono gestite in maniera indipendente. Una volta che si sia specificato quanto voluto. in genere identificato dall’estensione . dal punto di vista della compilazione e della costruzione del kernel. e 10 si chiama cos` un crash fatale del kernel. appositamente predisposta. 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. il che significa che si deve essere in grado di leggere i relativi file oggetto. pena il fallimento dell’avvio con un kernel panic. sempre nella directory base dei sorgenti. molto rari. Per il primo compito occorre il supporto per accedere al dispositivo su cui si trova la radice e quello per il relativo filesystem. quelle attivate non sono commentate ed assegnate al relativo valore. o e essere in vena di sperimentazione). attraverso la modalit` a che vedremo pi` avanti. assai meno rari). in cui si scelgono quali funzionalit` e a attivare e quali no. 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. dovr` comunque a essere inserito permanentemente nel kernel. e le opzioni per le ottimizzazioni del gcc (che ` meglio lasciar stare al e valore di default. per il secondo il supporto per l’uso del formato binario di esecuzione dei programmi.config. dove sono memorizzate tutte le opzioni di configurazione.10 A parte le eventuali modifiche del Makefile per modificare la EXTRAVERSION. Quanto necessario a svolgere questi due compiti. alcune indicano dei vaun file oggetto.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). a meno di non sapere esattamente quello che si sta facendo.174 CAPITOLO 5. che permetta di tenere separati kernel diversi (ad esempio per le opzioni di compilazione che si sono scelte) ottenuti a partire dagli stessi sorgenti. ` un file che contiene il codice compilato di una o pi` e u funzioni. questo pu` avvenire solo per errori fatali durante l’esecuzione dello ı o stesso (in caso di bug particolarmente gravi.6. e l’uso dei moduli e consente di ripetere il procedimento sul codice del kernel che sta girando. in questo modo. o di problemi hardware. 8 . Le uniche altre eventuali (anche se poco probabili) modifiche che si posu sono voler fare al Makefile riguardano la variabile CROSS_COMPILE.8 dato che questi non sono altro che codice. 9 ed infatti a partire dalla serie 2. nel caso conta solo il contenuto).

Pertanto ` oggi praticamente in disuso.1. testuale la prima e grafica la seconda. A partire dal kernel 2.1.config e si voglia essere sicuri di ottenere un file di configurazione coerente.6. Per questo la configurazione viene eseguita invocando make con uno dei target di configurazione. a meno di non sapere esattamente quello che si sta facendo. Di norma e 11 il Native Language Support. questo talvolta fallisce in quanto per la compilazione necessitano le librerie ncurses su cui ` basata l’interfaccia a finestre. a parte per una sua versione e modificata. qualora l’opzione faccia riferimento ad una funzionalit` che pu` essere a o modularizzata.1: Schermata di avvio della configurazione del kernel con make menuconfig. indica la codifica dei vari codici ASCII per le stringhe. Come scritto nell’estratto illustrato in precedenza normalmente . 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. come iso8859-1. sempre accessibile con make xconfig ` basata sulle librerie QT. In genere il programma viene compilato la prima volta che si esegue il relativo bersaglio. accessibile e con make gconfig. Il primo target ` config. mostrata in fig. Eseguendo make menuconfig nella directory dei sorgenti del kernel si otterr` la pagina di a avvio del programma di configurazione. Le due interfacce. Gli altri due target sono menuconfig e xconfig che attivano invece due interfacce utente. con finestre e men` che permettono di selezionare inteu rattivamente le varie opzioni ed effettuare le relative scelte in maniera casuale. senza serializzare le domande. a parte l’apparenza. 5. Questo pu` risultare utile qualora si siano effettuate modifiche a mano o del file . .config non deve essere scritto a mano. 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. per cui tratteremo solo la prima. le risposte alle domande. invocabile con il target oldconfig che si limita a rileggere e riprocessare il file di configurazione precedente ricavando da questo.5. ` basata sulle librerie GTK. o. per cui occorre ricominciare da capo. la seconda. “m”. 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). dato che. invece che dalle nostre risposte sul terminale. sono sostanzialmente equivalenti. la prima. ma opportunamente generato. e Figura 5. si rischia di attivare opzioni incompatibili fra di loro o inconsistenti.x le interfacce grafiche sono diventate 2. Ovviamente eviter` di eseguire ulteriori domande qualora non si attivi una a che le prevede opzione.

La finestra di avvio riporta nella prima riga in alto la versione del kernel. 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. seguito da un breve riassunto dei principali comandi disponibili. Un asterisco indica che la o funzionalit` ` attivata. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA queste vengono installate. che possono essere cambiate con le frecce orizzontali. e questo ci porter` nella finestra di configurazione delle relative a opzioni. per cui ` sempre il caso di usare i relativi pacchetti. 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. 5. qualora a anch’essi fossero assenti). uno spazio vuoto che non ` attivata. premendo la barra si pu` ciclare fra le due opzioni.2.176 CAPITOLO 5. e per Debian sono ncurses e libncurses-dev. 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. 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. 12 . Subito sotto c’` il titolo della sezione in cui ci si trova a e (nel caso ` il men` principale). nel qual caso andr` installato il relativo pacchetto12 (e quelli delle glibc. Dal men` principale ` possibile selezionare una sezione premendo invio (a meno di non aver u e cambiato l’opzione di selezione). uscire dalla finestra corrente e ottenere una finestra di aiuto (contestuale all’opzione selezionata). un esempio della quale ` mostrato in fig. molte di queste opzioni per` servono anche per attivare ulteriori configurazioni o o specificare caratteristiche di un’altra opzione (che pu` anche essere modulare). 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. Nella parte bassa ci sono le tre opzioni principali che permettono di selezionare una opzione. se si ` modificata e la EXTRAVERSION questa dovr` comparire. I valori fra parentesi angolari indicano invece le opzioni relative a funzionalit` che possono a essere anche modularizzate. ma non altrettanto avviene per i file di dichiarazione necessari alla compilazione. I valori delle opzioni sono riportati e all’inizio di ogni riga.2: Schermata di configurazione del kernel con make menuconfig. quelli indicati fra parentesi tonde sono per le opzioni che richiedono un valore generico. nel qual caso o le successive descrizioni appariranno indentate. Figura 5.

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

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

a meno di non avere la radice su un filesystem di rete. SCSI disk support ed il supporto per il proprio controller pu` essere o ` modulare. ISDN subsystem Questa sezione contiene le opzioni per il supporto dei dispositivi ISDN e dei relativi protocolli. Pu` essere inoltre utile abilitare il supporto per l’orologio o in tempo reale (Enhanced Real Time Clock Support). 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. Per poter utilizzare connessioni da remoto (ad esempio con ssh) ` poi e ´ necessario il supporto per gli pseudo-terminali (Unix98 PTY support). 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). E presente una sottosezione per selezionare il supporto per i vari tipi di controller.) e dispositivi virtuali. 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). SLIP. Input core support Questa sezione contiene le opzioni per il supporto per mouse. Se non si ha la radice su un disco SCSI tutto tranne SCSI support. Old CD-ROM drivers Questa sezione contiene le opzioni per il supporto dei vecchi CDROM pilotati direttamente dalla schede audio. detto anche Packet radio. Fusion MPT device support Questa sezione contiene le opzioni di configurazione per una scheda LSI Logic Fusion.1. IrDA (infrared) support Questa sezione contiene le opzioni per il supporto dei dispositivi di comunicazione ad infrarossi (le porte IrDA). Il supporto pu` anche essere modulare. . 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). usato dai radioamatori per la trasmissione dati via radio. tastiere.25. 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). Ampiamente in disuso. pi` il supporto per alcuni protocolli u di comunicazione di basso livello (PPP. 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.5. o Amateur Radio support Questa sezione contiene le opzioni per la configurazione del protocollo AX. Qui pu` essere abilitato il supporto per la stampante su parallela (Parallel o printer support). Character devices Questa sezione contiene le opzioni di configurazione per una serie di dispositivi a caratteri. ecc. IEEE 1394 (FireWire) support Questa sezione contiene le opzioni per il supporto delle interfacce e dei protocolli per il bus Firewire. joystick ed altri dispositivi di interazione (detti Human Interface Device su USB.

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

mentre nella seconda si specifica anche. This file should contain the names of kernel modules that are to be loaded at boot time.4. Inoltre ci sono due parole chiave che si possono specificare al posto del modulo. ` riportato in tab.5. one per line. 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.48. alias alias . Un possibile esempio di questo file `: e # # # # # /etc/modules: kernel modules to load at boot time. questa ha due diverse forme possibili: path=/lib/modules/2. a Infine la direttiva path permette di specificare le directory in cui eseguire la ricerca dei moduli. una etichetta che identifica una classe di moduli (se non specificata si assume il valore misc).. Il formato del file ` sempre e lo stesso.. and everything on the line after them are ignored. anche se non viene caricato niente.5.6 il meccanismo di caricamento dei moduli ` stato completamente riscritto. .*/ path[net]=/lib/modules/‘uname -r‘/net nella prima si indica semplicemente una directory.1.. le linee vuote o che iniziano per # vengono ignorate. se si vuole che queste vengano mantenute si utilizzare la direttiva keep prima di specificare qualunque direttiva path. con off si indica a modprobe di ignorare le richieste di caricare quel modulo. per e l’elenco completo e delle spiegazioni pi` dettagliate si pu` al solito fare riferimento alla pagina u o di manuale.. quando ` stato introdotto il nuovo sistema).0. alias alias alias alias alias alias . con relativa descrizione. con null invece si fa si che la richiesta abbia comunque successo. e che quanto illustrato finora fa riferimento solo alle versioni e precedenti (per essere precisi fino al kernel 2. LA GESTIONE DI KERNEL E MODULI . Si tenga comunque presente che con il kernel 2. 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. Una seconda direttiva ` option. che contiene e la lista dei moduli che si vuole siano caricati all’avvio del sistema. Comments begin with a #.. ogni linea deve contenere il nome di un modulo. e Un altro file utilizzato da Debian per la gestione dei moduli ` /etc/modules. 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.conf. Un elenco delle altre principali direttive.. Alla direttiva si pu` apporre un add che fa si che i parametri specificati vengano aggiunti ad altri o eventualmente gi` presenti. 5. accessibile con man modules. fra parentesi quadre.

188 CAPITOLO 5.4: Principali direttive del file di configurazione modules. definisce un parametro opzionale da passare al modulo quando viene caricato. Un esempio del comando ` il seguente: e e anarres:/home/piccardi# modinfo radeon filename: /lib/modules/2. definisce un comando da eseguire prima di rimuovere il modulo specificato. un esempio di questo comando `: e . per la descrizione completa si pu` fare riferimento alla relativa pagina di manuale. #ide-floppy auto # # I2C adapter drivers i2c-isa i2c-ali15x3 # I2C chip drivers w83781d eeprom Oltre ai comandi per il caricamento dei moduli. 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. 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. la principale delle quali ` la lista dei parametri supportati dal modulo.23-ben1/kernel/drivers/char/drm/radeon. o Infine il comando lsmod permette di ottenere la lista dei moduli caricati in memoria e tutte le informazioni ad essi relative.4. definisce un comando da usare al posto di insmod per caricare il modulo specificato. Tabella 5. definisce un nome da associare a un modulo. definisce un comando da eseguire dopo aver caricato il modulo specificato. Abbiamo visto che molti moduli possono prendere dei parametri che consentono di specificarne il comportamento.conf. mantiene le directory predefinite per la ricerca dei moduli . Keith Whitwell. Il comando e supporta una serie di opzioni che gli permettono di stampare solo alcune delle informazioni disponibili. 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." 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.o description: "ATI Radeon" author: "Gareth Hughes. il pacchetto modutils contiene altri comandi di gestione. others. il comando non prende opzioni (a parte le classiche -h e -V) n´ e argomenti. definisce un comando da eseguire prima di caricare il modulo specificato.

a meno di non usare l’opzione -r di rmmod. delle dimensioni di 512 byte.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. che ` gi` stato trattato in sez. In genere. facendo riferimento ad un determinato piatto nel disco. per passare al partizionamento ed ai relativi programmi. da cui il nome cylinder e la sigla C. La terza colonna indica quante volte ` usato il modulo. Dal disco si pu` sempre o leggere un settore alla volta (e non un singolo byte). e quando se ne vuole identificare le dimensione si indica i rispettivi valori massimi di questi tre parametri (la terna chiamata CHS). Un primo gruppo serviva per indirizzare le testine dei diversi piatti. chiamati settori. e quindi la capacit` del disco. a . lo stesso vale se o il modulo ha altri moduli che dipendono da lui. Il secondo gruppo serviva per muoversi lungo la coordinata angolare all’interno di un piatto. da cui il nome head e la sigla H. mentre la seconda le sue dimensioni. 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. questo viene fatto direttamente dal kernel (o dal BIOS) che dice all’interfaccia hardware di leggere un determinato settore fornendogli l’indirizzo dello stesso. 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). 1. Tratteremo inoltre la gestione dei filesystem per quanto riguarda quelle tutte le operazioni (come creazione. riparazione e modifica dei parametri interni) che non sono direttamente connesse all’uso ordinario (montaggio e smontaggio). da cui il nome sector e la sigla S.2.5. moltiplicando i quali si ottiene il numero totale dei settori.4. infine l’ultimo gruppo indicava come muoversi lungo la coordinata radiale.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. 5. e per questo sono dispositivi a blocchi. e a 5.2. in sostanza vedendo il disco come un cilindro questo parametro indicava la coordinata in altezza lungo l’asse dello stesso. 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. Un modulo il cui conteggio di utilizzo non sia nullo non pu` essere rimosso. lo spazio disponibile sui piatti magnetici di un disco viene suddiviso in blocchi elementari di dati.2. Per questo ancora oggi si parla di geometria di un disco.

Il limite irraggiungibile ` stato per` raggiunto piuttosto presto. ma a questo punto ci si e o ` trovati di fronte al limite non pi` superabile delle restrizioni sui valori massimi di cilindro. 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. e 5. 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. 6 bit per indicare il settore ed 8 bit per la testina. 30 . l’accesso ad un settore veniva eseguito direttamente dall’hardware in maniera trasparente. per un totale di 1024x16x63 settori.4GiB. 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. Dato che il parametro indicante la testina ` e di 8 bit. per accedere ad un certo settore. da cui deriva il famoso problema di non poter accedere a dischi oltre il 1024simo cilindro che affligge i BIOS pi` vecchi. 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. ma pu` essere un problema quando nella prima partizione si ` installato Windows e o e questa ` troppo grossa. pari a 504Mib. la dimensione massima ottenibile con questa interfaccia ` di un totale di 1024x256x64 e settori. dato che ha sempre previsto l’uso di un valore lineare per indicare il settore. 4 per le testine. non appena i dischi han cominciato a superare le dimene sioni massime previste dall’interfaccia IDE originale. Questo ` un problema che in tutti a e i computer moderni ` abbondantemente superato. e u testina e settore. LILO non sar` in grado di leggerlo. Ma per mantenere la compatibilit` con i a sistemi operativi che usavano il BIOS. Tutto questo ` stato superato con l’introduzione del Linear Block Addessing. 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. per cui non risente affatto delle limitazioni del BIOS. 31 il protocollo SCSI non ha mai avuto problemi di geometria. sector e cylinder e coordinate fisiche del settore indirizzato ` andata persa quasi subito. In genere il problema della geometria non si pone assolutamente per Linux. Questi venivano passati tramite il contenuto di alcuni registri del processore. 10 linee servivano per indicare il cilindro. e 6 per i settori. dato che il kernel ` in grado di accedere nativamente all’interfaccia IDE ed indirizzare direttamente l’accesso ai e singoli settori. l’interfaccia di accesso di quest’ultimo ` rimasta invariae ta. 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). indipendentemente dalla geometria reale del disco. ed i sistemi operativi e le vecchie versioni di LILO u che sono in grado di usare soltanto l’interfaccia originaria. anche se poi il BIOS si doveva inventare una geometria per poter usare le sue routine di accesso.2. a lungo considerato un limite irraggiungibile. La corrispondenza diretta fra valori di head.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.30 ed in particolare 10 bit erano utilizzati per indicare il cilindro. Anche il BIOS usava questa suddivisione nella routine di accesso al disco (la INT13). in cui anche e per i dischi IDE l’accesso ` eseguito. che richiedeva. Resta il problema che alcuni sistemi operativi e vari programmi non sono in grado di utilizzare questa nuova interfaccia.190 CAPITOLO 5.2. testina e settore.2) non pu` implementare un suo accesso indipendente. pari a circa 8. ma che si pu` presentare ancora quando si e o mettono dischi nuovi su macchine molto vecchie. una terna di valori indicanti appunto il numero di cilindro. 5.31 specificando semplicemente un e numero di settore che cresce linearmente da 0 al valore massimo. e per loro deve essere usata la vecchia interfaccia. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Il problema ` che nelle prime interfacce IDE c’era una separazione fisica delle linee che e indicavano questi indirizzi.

.2. u Come accennato in sez. Per superare questa limitazione e dell’architettura PC sono state introdotte le cosiddette partizioni logiche o estese. il Master Boot Record.4 le partizioni vengono indicate nel file di dispositivo che si riferisce ad un disco con il relativo numero. ma si pu` usare una o partizione primaria qualunque. e dato lo spazio limitato questa non pu` contenerne o pi` di quattro. Una parte di questo settore costituisce la cosiddetta tabella delle partizioni.2. Un esempio del risultato del comando ` il seguente: e 32 su un PC. o se si vuole effettuare l’operazione manualmente per avere un maggior controllo. 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. PowerPC Apple. testine e settori possono essere modificati anche all’interno del comando). LA GESTIONE DEI DISCHI E DEI FILESYSTEM 191 all’installazione del sistema attraverso il programma di installazione. 5. queste vengono memorizzate nel primo settore di ciascun disco. Quando il comando viene lanciato stampa un messaggio di benvenuto. Prima di entrare nel dettaglio del funzionamento di fdisk e derivati ` comunque oppore tuno dare alcuni cenni sui criteri base del partizionamento. occorre utilizzare un apposito programma. in modo da poterne utilizzare di altre. non tratteremo qui le altre architettura.2) quando il numero dei cilindri ` e maggiore di 1024.5. o Alpha) non hanno questo limite. ma noi e u faremo riferimento solo a questo e alla variante cfdisk. mentre quelle logiche iniziano dal 5. ed il numero di partizioni ` sostanzialmente arbitrario. Partizioni primarie e secondarie possono coesistere. u Il comando che tradizionalmente viene utilizzato per ripartizionare un disco32 ` fdisk. fdisk. che in tutte le distribuzioni pi` recenti ` in grado di eseguire il compito in maniera semi-automatica. Qui vengono memorizzate settore di inizio e di fine delle partizioni. in numero pi` elevato. 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). 1. l’unica opzione che ha senso usare ` -l che si limita a stampare la tabella delle partizioni presente. Le partizioni primarie sono sempre numerate da 1 a 4. cos` ad esempio /dev/hda2 ` la seconda partizione ı e primaria del primo disco del primo canale IDE. dato che ` sempre l` che viene installato e ı il bootloader per l’avvio del sistema. che hanno programmi diversi. le partizioni primarie successive (nel caso la terza e la quarta) non saranno pi` utilizzabili. Quando si installa un u e nuovo disco. quello che viene chiamato. 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. nei termini in cui si usa una partizione primaria per indicare la tabella delle partizioni secondarie. I u Architetture meno obsolete (come SPARC. che vengono chiamate logiche o secondarie. 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). 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). (ad esempio la seconda) tenendo presente per` che si ` utilizzata o e una partizione primaria per indicare le partizioni estese.3. mentre /dev/hdb5 ` la prima partizione logica e del secondo disco del primo canale IDE. In genere questo lo si fa creando tre partizioni primarie ed usando la quarta per le partizioni secondarie. e avvisa di possibili problemi (vedi sez.

but this is larger than 1024. old versions of LILO) 2) booting and partitioning software from other OSs (e. 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. 63 sectors. 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). Il comando t permette di impostare il valore numerico che identifica il tipo di partizione.. ed n per o a crearne una nuova. Cos` se vogliamo una lista dei comandi possibili possiamo premere m. a A questo punto si pu` usare d per cancellare una partizione (ne chieder` il numero). di cui una normale. There is nothing wrong with that. a .g. 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. una per la swap.192 CAPITOLO 5. questa ` quella che ` vista dal kernel.g. ma ` possibile cambiarla (anche se inutile) con una dei comandi delle e funzionalit` avanzate.. Si noti anche come viene riportata una geometria per il disco. nel qual caso prima chieder` se primaria o secondaria e poi il relativo numero. ed in genere coincide e e con quanto visto dal BIOS. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA monk:/root# fdisk /dev/sda The number of cylinders for this disk is set to 2213. 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. questo viene in genere utilizzato per indicare che tipo di filesystem sar` contenuti nella stessa. and could in certain setups cause problems with: 1) software that runs at boot time (e. DOS FDISK.

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

che non ` il massimo dell’eleganza. posta archiviata e tutto quanto in genere si tiene sotto /var) verr` cancellato.2) pu` essere necessario creare o una partizione separata per /boot.2) che permette di unire partizioni34 e dischi fisici diversi in dei volumi logici all’interno dei quali creare i relativi filesystem. Se poi si vuole separare anche quanto strettamente necessario all’avvio dal resto del sistema si pu` mettere anche /usr su una partizione separata. 34 . 1. Inoltre una volta che si sono spostate /home. 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. che ` quella da usare per i volumi e fisici che verranno usati con LVM come componenti di un volume logico. /var e /usr (ed eventualmente /opt) non ` e che resti molto altro. ed un’altra per /var.194 CAPITOLO 5. In questo modo se per qualche motivi si danneggiano file essenziali per il sistema. come quella che di solito si fa sui dischetti. Inoltre se si hanno pi` a u dischi non ` ovviamente possibile mettere tutto su una sola partizione. 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. complicandone la gestione.2. occorrer` anche creare a il filesystem: in Linux infatti la formattazione fisica del dispositivo e la creazione del filesystem. anzitutto u si pu` sprecare inutilmente spazio disco quando una partizione si riempie mentre le altre sono o vuote. 5. 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. Usare varie partizioni (e pi` dischi) ha comunque una serie di controindicazioni. 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. 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.4 come si pu` rendere disponibile il contenuto di un filesystem nell’alo bero delle directory. ma questo non comporta che poi si possa utilizzarlo. 5. e Per questo di solito si preferisce creare almeno una partizione su cui montare /home per i dati degli utenti. non si risolver` mai il a problema di esaurire lo spazio in quelle con la maggior parte dei contenuti. Per questo spesso ad esempio si ` a u e costretti ad usare pi` dischi per le home directory degli utenti. Ha per` lo svantaggio che o se si deve reinstallare il sistema i dati degli utenti e quelli di sistema (come pagine web. Una delle strategie pi` semplici ` quella di creare una partizione unica e mettere tutto quanto su di essa. 5. 6. che non possono essere pi` tenute u u sotto una directory unica. si noti come in fig. e per quanto grandi si possano fare le partizioni.3. per risolverli a alla radice ` disponibile.2.3 compaia appunto una partizione di tipo Linux LVM. Si deve invece eseguirla per i floppy.3 La creazione di un filesystem Abbiamo visto in sez. 1. in modo da strutturare lo spazio disponibile (che sia una partizione o un dispositivo fisico o virtuale) per l’uso.x il sistema del Logical Volume e Manager (che tratteremo in sez. a partire dai kernel della serie 2.2.3. Infine in o certi casi (per il solito problema del 1024 cilindro visto in sez. ma andranno suddivise su path diversi. per evitare di inserire nel backup cose che non c’entrano nulla. In genere per gli hard disk questa operazione non ` pi` necessaria dato che viene eseguita e u direttamente dal fabbricante una volta per tutte. 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.4. quando si installa il sistema per` (o quando si aggiunge un disco) i filesystem o devono essere creati. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA indicazioni su contenuto delle varie directory di sistema illustrate 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. con il comando fdformat. operazione comunemente detta formattazione.

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

57345.196 CAPITOLO 5. 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. 40961. e le dimensioni dei file sono dei multipli interi di questo valore. 39 alcuni filesystem pi` evoluti permettono di cambiare questo parametro anche in un secondo tempo. 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.35-WIP (07-Dec-2003) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 25064 inodes. anche se ` possibile recuperarla in un secondo momento con dumpe2fs.38 Qualora si usi un valore negativo questo viene preso come limite inferiore per la dimensione di un blocco. 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. largefile e largefile4 e assegna o un diverso rapporto fra numero di inode e spazio disco disponibile. Use tune2fs -c or -i to override.2. esistono dei meccanismi automatici che permettono di mettere u il contenuto di diversi file di piccole dimensioni in un solo blocco. 37 per alcuni filesystem pi` evoluti. 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. come e detto in sez. Valori tipici sono 1024. che prende i tre valori news. 8192 fragments per group 1928 inodes per group Superblock backups stored on blocks: 8193. Questi di norma vengono mantenuti e in una sezione apposita del filesystem. Con blocco si indica in genere l’unit` minima di spazio disco che viene a allocata per inserirvi i dati di un file. in genere37 ogni file consuma almeno un blocco. 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. Pertanto ` bene annotarsi la posizione delle varie e copie. whichever comes first. u 36 35 . 38 questo pu` essere indicato tramite l’opzione -T. ogni file ` sempre associato ad un inode).2. Se usato senza specificare altro che il dispositivo35 da formattare il comando si limita a creare ` il filesystem. Un altro parametro importante ` quello del numero di inode da creare (si ricordi che.txt distribuito nella documentazione allegata ai sorgenti del u o kernel. stampando tutta una serie di informazioni ad esso relative. 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. come Reiser. per una spiegazione pi` completa di pu` leggere il file filesystem/ext2. 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. 100000 blocks 5000 blocks (5. le cui dimensioni vengono determinate in sede di creazione del filesystem. 1. Una delle principali ` la dimensione dei blocchi in cui lo spazio disco viene suddiviso.39 Il comando permette.00%) reserved for the super user First data block=1 13 block groups 8192 blocks per group. 73729 Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 37 mounts or 180 days. con l’uso dell’opzione -i di impostare ogni quanti byte di spazio disco deve essere creato un inode. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA anarres:/home/piccardi# mke2fs /dev/hda3 mke2fs 1. da specificare e tramite l’opzione -b. ed ` essenziale per poterlo montare. 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. 2048 o 4096. 24577.

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

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

prende come parametro uno dei valori: continue (continua ignorando l’errore). sovrascrive i parametri del giornale.2. anarres:~# dumpe2fs -h /dev/hda4 dumpe2fs 1.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 .5. Modifica il comportamento del kernel quando viene rilevato un errore sul filesystem. E questo nome (detto anche label ) che pu` essere o usato da vari comandi per indicare il filesystem al posto del dispositivo. o Imposta l’universally unique identifier (UUID) del filesystem.6. prende come parametro un numero di giorni. Imposta la percentuale di blocchi riservati (messi a disposizione dell’utente specificato con -u. Imposta l’intervallo di tempo fra due controlli successivi. 199 -C -e -i -j -J -l -L -m -O -r -u -U Tabella 5.7. un numero (espresso in cifre esadecimali) che identifica il filesystem (in maniera analoga alla label ). Imposta le caratteristiche avanzate del filesystem. di norma l’amministratore). 5. per un massimo di 16 carat` teri. prende come parametro uno dei valori di tab. 5.8: Principali opzioni per il comando tune2fs. remount-ro (rimonta il filesystem in sola lettura). aggiunge un giornale per il filesystem. Modifica il contatore del numero di volte che un filesystem ` stato montato. Imposta il numero di blocchi riservati. prende come parametro un numero. panic (si ferma causando un kernel panic). 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. Imposta il nome del volume. prende come parametro un e numero. Imposta l’utente che pu` usare i blocchi riservati. stampa i contenuti del superblock (come dumpe2fs). prende come parametri uno dei valori di tab. di mesi se si pospone il carattere “m”. di settimane se si pospone il carattere “w”.

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

Il comando supporta le opzioni generiche -a e -r illustrate in precedenza. che sono state mantenute solo per compatibilit`. Nel caso di Linux tutti i filesystem pi` recenti (ReiserFS. -a che cerca di eseguire le riparazioni in modo automatico. se sono citati in /etc/fstab). Se si ` usato un giornale posto su un altro e dispositivo questo deve essere specificato con l’opzione -j. solo che grazie alla prea e senza del giornale questo viene eseguito con grande rapidit`. -l o -L nel qual caso il filesystem viene aperto in scrittura per aggiornare la lista dei settori difettosi. 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. JFS e XFS) supportano nativamente u il journalling. 1. 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). 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. specie se si usa ext3. deve essere specificata come parametro per -t.2. cavi difettosi o bug del kernel possono comunque corrompere le informazioni. In generale comunque. Con l’opzione -l si pu` specificare un file con una lista da aggiungere a quella dei o blocchi difettosi. e come mkfs. In realt` in questo non ` che il procedimento non avvenga. mentre con -n si fa la stessa cosa aprendo il filesystem in sola lettura. 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.5.42 e dando una risposta di “no” a tutte le domande. o e specificandola due volte viene usato il metodo non distruttivo di scansione con scrittura e rilettura.4). ed anche il tradizionale ext2 ha ottenuto questa funzionalit` con la nuova versione a ext3. che nella o gestione dei dati ` identico) come il filesystem pi` diffuso. Per questo motivo ci concentreremo e u sulla versione dei programmi di riparazione e controllo specifici di questo filesystem. Il programma prende come argomenti un elenco di filesystem da controllare (specificati per dispositivo o mount point. 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. senza chiedere l’intervento dell’amministratore. In caso di filesystem pesantemente corrotto si possono poi specificare il superblock da utilizzare con -b e la dimensione di un blocco con -B. Come per mkfs le opzioni disponibili dipendono dallo specifico filesystem. che vengono attivati attraverso l’opzione -t seguita dal nome del filesystem. Il programma generico per il controllo di un filesystem ` fsck (da File System ChecK ) che. Comunque l’uso di un giornale ha un impatto sulle prestazioni del filesystem. mentre con -L il file indica la nuova lista di blocchi difettosi.2. a meno che il sesto campo del file non sia impostato a zero (si ricordi quanto detto in sez. Il programma di controllo e riparazione del filesystem ext2 ` e2fsck. 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. non ` detto e che questo venga sempre utilizzato. 42 . ` comunque opportuno e mantenere un controllo periodico sul filesystem. per cui la diffusione di ext2 ` ancora molto ampia. 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. che prende come argoe mento il dispositivo da controllare. non dovendo effettuare il controllo a completo del filesystem. eccetto il caso in cui si siano specificate le opzioni -c. e -r che invece esegue le riparazioni in modalit` intea rattiva. Per le altre opzioni si pu` fare riferimento alle pagine di manuale dei vari programmi o dedicati di ciascun filesystem. separata da virgole. in quanto errori sul disco. Usando l’opzione -c si pu` richiedere anche la scansione per il rilevamento di settori difettosi. Se si specifica pi` di un filesystem la lista dei u relativi tipi. di solito sono definite due opzioni generiche. non ` altro che un front-end per i singoli programmi specifici di ciascun tipo di e filesystem.

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

49 per il quale si dovrebbe prima passare attraverso il relativo filesystem. ma dipende dall’architettura hardware). dove la velocit` di trasferimento ` maggiore). ` in genere una pessima idea usare un disco vecchio e lento per questo scopo. quando l’uso di questa diventa eccessivo.5. 1.47 Perch´ il kernel possa usare un’area di swap questa deve essere opportunamente inizializzata. 47 in realt` ovviamente tutto questo richiede tempi che sono ordini di grandezza superiori rispetto all’accesso a diretto alla RAM. in questo caso infatti l’accesso al disco ` diretto (` quindi pi` veloce) rispetto al caso. 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.2. 1. 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. comunque possibile. con l’aiuto della MMU (Memory Management Unit) del processore una rimappatura dello spazio degli indirizzi dei processi sulla memoria fisica effettivamente disponibile. Come accennato in sez. dai tempi di accesso a quest’ultima e dalla velocit` di trasferimento a ` dei dati.48 a questo provvede il comando mkswap che prende come argomento il file da usare come area di swap.4.1 e poi approfondito in sez. in modo che altri possano utilizzare la memoria fisica che cos` viene liberata. L’opzione -p permette di specificare come parametro la dimensione delle pagine di memoria (in genere 4096 byte.2. per cui il nulla ` solo teorico. se non lo si specifica viene automaticamente utilizzato tutto lo spazio disponibile. e come se fosse un filesystem. 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.2.1 il kernel gestisce. 5. a partire da esso sono state portate a 32. u a e Il comando prevede (per compatibilit` con le vecchie versioni) un secondo argomento che a specifica la dimensione dell’area di swap. ` E questo lo scopo della cosiddetta area di swap. e o tramite la MMU acceder` ad indirizzo reale della memoria effettivamente disponibile. ı 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. 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. 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). Dato che le prestazioni del sistema della memoria virtuale dipendono direttamente.10.2). un elenco di quelle attive ` visibile in e /proc/swaps. 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. l’elenco delle opzioni ` riportato in tab. a Una delle caratteristiche del meccanismo ` che in questo modo ciascun processo mantiene un e suo spazio di indirizzi separato. LA GESTIONE DEI DISCHI E DEI FILESYSTEM 203 memoria virtuale. il meccanismo con cui il kernel gestisce l’allocazione della memoria fisica ai vari processi. e e u 49 in cui si usa un file normale. una sezione di disco (in genere una partizione. in pratica il programma sar` molto pi` lento. in caso di utilizzo dell’area di swap. 5. ma si pu` usare anche un file) su cui il kernel pu` salvare le pagine di memoria meno utilizzate o o di un processo. 1. Come per mkfs l’opzione -c richiede un controllo della partizione per la presenza di settori difettosi. 46 . cos` che il processo possa proseguire la sua esecuzione come se ı nulla fosse.2. cos` che questo possa eseguire la opportuna sezione del kernel. 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. In genere si usa il comando specificando come argomento un file di dispositivo indicante una partizione appositamente riservata (vedi sez. e Si tenga presente che per i kernel precedenti il 2.3. In questo modo ciascun processo pu` usare un suo spazio di indirizzi virtuale (usando un qualunque valore fa quelli possibili).10 erano possibili fino ad un massimo di 8 aree di swap.

6.3. 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. Tabella 5. 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. che permette di impostare una priorit` (un parametro di e a valore fra 0 e 32767) per l’uso della partizione. 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.204 CAPITOLO 5. 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). ed in questo caso attiver` tutti a i dispositivi che sono marcati come swap all’interno di /etc/fstab. 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). che verr` immediatamente attivata. e Infine si pu` disattivare un’area di swap usando il comando swapoff. 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.10: Opzioni per il comando mkswap. Le e modalit` possono dipendere da tipo e versione di BIOS. usando -p ı e a si pu` forzare la stessa priorit` ottenendo un uso pi` efficace e maggiore velocit`. specifica la versione della formattazione dell’area di swap da utilizzare. 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. 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. anche in questo caso o occorre fornire come argomento il file di dispositivo indicante l’area da disabilitare. In generale per` il comando non viene mai invocato a o direttamente.1 L’avvio del kernel Una volta accesa la macchina ` il BIOS che si incarica di lanciare il sistema operativo. dall’architettura hardware. In a . 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. questo prende come argomento il file da usare coma area di swap. e come si possa intervenire (trattando i vari programmi coinvolti ed i relativi meccanismi di configurazione) a ciascuno stadio di questa procedura. ma chiamato con l’opzione -a negli script di avvio. 5. dettagliando i vari passaggi che portano dall’accensione della macchina al pieno funzionamento del sistema.1. 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.3 La gestione dell’avvio del sistema In questa sezione prenderemo in esame la procedura di avvio del sistema. specifica.1) e passi ad una di priorit` inferiore solo ı a quando quelle di priorit` superiore sono piene. vedi sez. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Opzione -c -f -p -v Significato esegue un controllo per la presenza di settori difettosi. ı 5. cos` come indicate in /proc/swaps e /etc/fstab. forza l’esecuzione del comando anche se si sono dati argomenti sbagliati (come un dimensione dell’area maggiore di quella della partizione).

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

In questo caso per` o di solito non viene usata una immagine di un floppy contenente soltanto il kernel.1. che prende come argomento il file del o su qualunque altro dispositivo si stia utilizzando. o invocandolo come vidmode. In realt` alcuni argomenti di avvio in questo caso possono essere a modificati con il comando rdev. PowerPC. la modalit` video usando l’opzione -v.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. posto e che il CDROM sia stato masterizzato con le opportune estensioni. se si specifica un secondo argomento questo dovr` essere il dispositivo a contenente la nuova directory radice che andr` a sovrascrivere la precedente. e 55 . e Il vantaggio di questo metodo ` che se si crea una immagine compressa del kernel (con la e procedura vista in sez. 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 particolare questo significa che il sistema user` come radice quella in uso quando a viene compilata l’immagine. per quanto riguardo il e kernel. Una volta avviato il kernel effettuer` una serie di operazioni preliminari. a e la dimensione del RAM disk iniziale. In sostanza viene inserita nel CD l’immagine di un floppy e l’avvio viene eseguito alla stessa maniera. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA partizione. In tal caso la procedura di avvio ` spesso gestita direttamente dall’equivalente del BIOS per quell’architettura. 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. ecc. Il caso del floppy ` analogo a quello di un disco. a Il comando permette anche di modificare anche altri due parametri che sono mantenuti nell’immagine del kernel. 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. scompattarlo ed eseguirlo.206 CAPITOLO 5. non ci occuperemo di questi casi. il BIOS legge il primo settore del floppy ed esegue il e programma che c’` contenuto. Le operazioni di avvio. e dei dispositivi il cui supporto ` stato compilato direttamente e nel kernel. 5. Il problema con un disco d’avvio fatto in questo modo ` che non si possono fornire argomenti e all’avvio. si concludono con il lancio di init. Nel caso di un CDROM il meccanismo di avvio ` sostanzialmente lo stesso dei floppy. ma viene utilizzato il programma syslinux per creare una immagine di avvio contenuta in un filesystem FAT. e cos` via. La procedura con cui il BIOS carica in memoria il sistema dipende ovviamente dal supporto da cui lo prende. Sparc. e come SILO per la Sparc. 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. ı Infine si tenga conto che tutto questo si applica solo ai normali PC. Linux per` gira su molo tissime architetture hardware diverse. come Alpha. tutto il resto verr` eseguito da quest’ultimo in user a space. usando l’opzione -r o invocandolo come ramsize. una volta che lo si ` montato. come le inizializzaa zioni delle infrastrutture generiche. il vantaggio di utilizzare un filesystem consente. di accedere direttamente ai contenuti. 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. MILO per le Alpha e OpenFirmware per i Mac. e questo deve ovviamente contenere i dati in un formato adeguato. che di norma ` /sbin/init. Per i dettagli si faccia riferimento alla pagina di manuale. HP-UX. ognuno dei quali ha un suo diverso meccanismo di funzionamento.

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

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

con relativo fallimento. che si utilizzer` ancora la vecchia immagine. pur avendo specificato prompt. viene selezionato come default per l’avvio (e lanciato quando scade il tempo specificato da timeout). questo comporta che si avranno problemi tutte le volte che si installa un kernel al di l` del limite del 1024-simo cilindro. Se non si specifica prompt invece a l’avvio verr` effettuato automaticamente. testina e settore relativi ad una e a geometria diversa a quella vista dal BIOS. fintanto che non si ricrea la boot map e la si reinstalla. usando la INT13 originale. e Un’altra direttiva fondamentale ` root che definisce il dispositivo da cui montare la directory e radice. o Qualora il BIOS non supporti queste estensioni. che prende come e parametro il file che contiene l’immagine del kernel. Questo pu` essere utile in quanto non ` detto o e che Linux ed il BIOS concordino sempre sulla geometria del disco. Specificando un numero con timeout si introduce un tempo massimo (in decimi di secondo) dopo il quale. ma per l’accesso al disco esegue una conversione al vecchio formato. 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. ae si noti che non ` assolutamente detto che questa debba stare sullo stesso disco da cui si lancia il kernel. Usando linear invece l’idea della geometria che ha il kernel viene diventa irrilevante. poi cancellato il file preesistente e assegnato il suo nome al nuovo). si proceder` automaticamente all’avvio. nel nostro esempio /dev/hdb5. Questo significher` nel migliore dei casi.57 dopo il a a numero di decimi di secondo specificato con delay.3. LILO continuer` ad accedere alla a posizione del vecchio file. la direttiva linear mantiene sempre gli indirizzi nella boot map in forma lineare. LILO vi acceder` direttamente usando posizione a di quest’ultima nel disco. 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.5. a e ci si pu` dimenticare di tutti i problemi relativi alla geometria dei dischi. testina e settore. specificando cilindro. e . la direttiva append permette di specificare dei parametri di avvio al kernel. Con la direttiva default si pu` scegliere quale.2. a u Per ciascuna direttiva image vanno poi fornite una serie di ulteriori direttive specifiche da applicare all’avvio di quella immagine. Direttive come lba32 e linear servono ad indicare a LILO quale metodo utilizzare per caricare il kernel. ma pu` essere anche specificata per ciascuna immagine. se si ` fortunati e nessuno ha a e sovrascritto i dati. Di default questi indirizzi sono indicati nella notazione classica. Con i BIOS (e le versioni di LILO) a pi` recenti. La direttiva initrd specifica il file da utilizzare come ram-disk per l’avvio. se questo accade e non si ` usato linear all’avvio LILO user` dei valori per cilindro.58 Di solito la si specifica all’inizio del file per utilizzarla come valore di default per tutti i kernel. e verr` usata la nuova interfaccia di accesso della INT13 estesa.1. o La direttiva che permette di identificare un kernel da lanciare ` image. Una sempre necessaria ` label che definisce l’etichetta e che identifica l’immagine. si deve sempre specificare la direttiva lba32. Si ricordi che bench´ qui essa sia specificata e tramite il pathname del file che la contiene. e sar` LILO ad usare all’avvio la a conversione dell’indirizzo lineare usando la geometria che gli fornisce il BIOS. fra le varie immagini del kernel installate o o gli altri sistemi operativi presenti su altre partizioni. seguito dalle eventuali opzioni che gli si vogliono passare). Questo significa che se si copia su una di queste immagini un altro file (ad esempio per un aggiornamento). 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. 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. essendo questo creato altrove (quando si sovrascrive con cp prima viene creata la copia. senza possibilit` di intervento dell’utente. ed il caricamento del kernel viene utilizzando l’interfaccia classica illustrata in sez. Per farlo basta riferimento all’etichetta che si ` associata con la direttiva label a ciascuna immagine o altro sistema presente. 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). 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). Anche questa direttiva deve essere seguita da una label. al solito si pu` fare riferimento alla pagina di manuale. L’uso di questa direttiva permette di controllare le modalit` con cui si fanno partire le varie a immagini (o i sistemi operativi alternativi). 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). a meno di non fornire la password. Vale la pena per` di ricordarne due. Questo si limita a leggere il suddetto file e a reinstallare il bootloader con i nuovi valori. viene usato per lanciare il successivo. la prima ` -r che permette di specificare una directory o e nella quale eseguire un chroot prima di eseguire il comando. In sostanza poi gli stadi sono due. accessibile con man lilo. Una volta che si sono definite le impostazioni in /etc/lilo. 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. basato su una architettura microkernel. che si presume siano funzionanti. il primo ` un analogo di LILO e viene installato sul bootloader. ed il riavvio fallisce.conf del disco.conf. accessibile con man lilo per o l’elenco completo. a oe 59 . Per questo GRUB non solo non soffre del HURD ` un sistema libero sperimentale realizzato dalla FSF.210 CAPITOLO 5. basta far riavviare la macchina per riavere i valori precedenti. ciascuno dei quali. si pu` attivarle con il o comando lilo. Una direttiva utile per la sicurezza ` password che permette di proteggere con una password e la procedura di avvio. Il comando prende varie opzioni che permettono di soprassedere i valori specificati da lilo. Specificando bypass non viene applicata nessuna restrizione. specificando restricted si impedisce all’utente di passare dei parametri al kernel sul prompt. con e funzionalit` molto avanzate e completamente modulare. 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. cos` a ı se qualcosa non va. come se la si scrivesse direttamente dal prompt. L’elenco completo si trova al solito nella pagina di manuale. attraverso ulteriori direttive da indicare nelle relative sezioni del file di configurazione. il suo sviluppo per` ` ancora all’inizio. 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). 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.conf. 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. come gli omonimi dei razzi.conf. dette e e stadi.3. che poi si incaricher` di effettuare e a tutte le operazioni successive. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA al prompt.3 L’uso di GRUB Il secondo bootloader disponibile per Linux ` GRUB (da Grand Unified Bootloader ). e La seconda opzione ` -R che invece specifica una riga di comando da passare a LILO al e successivo riavvio. specificando mandatory ` necessario fornire la password anche e per avviare la relativa immagine. e il suo unico compito ` quello di lanciare lo stadio successivo. per cui solo il riavvio successivo user` le nuove opzioni. e ripristinare il sistema u e reinstallando il bootloader come se lo si fosse fatto direttamente dal disco originale. Dato che la password ` scritta in chiaro nel file di configurazione. tutte le restrizioni che si applicano ad un e programma che deve stare nell’MBR scompaiono. L’utilit` dell’opzione ` che a e questo avviene una sola volta. 5. La caratteristica principale rispetto a LILO ` che GRUB ` formato da diverse parti.

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

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

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

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

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

216 CAPITOLO 5. altrimenti resteranno attivi. e che predispone tutta l’infrastruttura software con cui ` possibile leggere i dati relativi a dette e interfacce. 5. In questo modo il sistema operativo pu` inviare comandi e scambiare o dati con le singole periferiche. sono necessari e ulteriori modalit` di accesso e controllo per le funzionalit` che non sono comprese in questa a a astrazione. 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. Entrambe queste interfacce definiscono uno standard sia hardware (consistente in piedinatura. 7. come update-rc. in modo da poterne utilizzare le capacit` specifiche. dimensioni.1. al di l` dell’accesso ai dispositivi a finali secondo l’interfaccia classica per cui in un sistema unix-like tutto ` un file. e Si noti come la presenza dei servizi presenti in un determinato runlevel possa dipendere da come si ` arrivati ad esso. 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).3) per le quali. 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. 1. a In Linux il supporto per queste interfacce ` ovviamente fornito direttamente dal kernel. seguendo il criterio fondamentale dell’archietettura di un sistema unix-like per cui tutto ` un file.) 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.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.2. 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). u Una interfaccia di espansione in sostanza non fornisce direttamente delle funzionalit` finali. sono comunque disponibili innumerevoli programmi in grado di automatizzare il compito. 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). Come accennato attivare o disattivare un servizio su un certo runlevel ` semplicemente e questione di creare un link simbolico con l’opportuna sigla iniziale. 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. 5.4.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. per l’uso i quali rimandiamo alle rispettive pagine di manuale. anche se non sono previsti fra quelli che verrebbero avviati se si andasse direttamente in quel runlevel. e poi dialogare con i singoli dispositivi su di esse presenti. potranno e poi essere acceduti attraverso l’interfaccia generica illustrata in sez. a che sono specifiche del singolo dispositivo che si pone su di essa. . e viceversa.d per Debian o chkconfig per RedHat. 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. Questi ultimi.

che pu` essere utilizzata in altre operazioni. La seconda risorsa ` quella dei canali DMA. e rispettivamente ai dispositivi ad essi associati (riportati nell’ultima). eth0 ide2.65 che di norma pu` o essere eseguita a livello di BIOS. 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. 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. 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. 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. usb-uhci. nella seconda colonna sono in senso fisico. aic7xxx PS/2 Mouse ide0 ide1 che mostra l’allocazione degli interrupt. viene alzato un livello su uno dei piedini del processore a questo dedicato. 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. Le risorse fondamentali usate da una interfaccia sono sostanzialmente due gli interrupt e i canali DMA. oggi sono state portate a 15).4. in altre architetture sono 32 o 64. bttv EMU10K1. in realt` questo ` un problema che si ha quasi esclusivamente sui PC intel-compatibili. 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. le seriali e la parallela. ı In genere un processore ha un numero limitato di linee di interrupt (originariamente nei PC erano 8. 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. 65 64 . il cui numero progressivo ` riportato in prima colonna. la loro gestione ` infatti completamente realizzata all’interno del kernel attravere so il codice relativo al loro supporto. I problemi che possono sorgere sono allora quelli dell’allocazione di queste risorse. 5. che saranno poi trasferiti in maniera asincrona. cos` che la CPU sistema possa utilizzare ı i dati disponibili in memoria. In particolare alcuni interrupt sono assegnati staticamente a periferiche presenti sui PC da prima che fosse possibile una allocazione dinamica.5.4. 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. In genere l’uso di un canale DMA si abbina sempre a quello di un interrupt che serve a segnalare la conclusione del trasferimento. ide3. LA GESTIONE DI INTERFACCE E PERIFERICHE 217 Una descrizione dettagliata del funzionamento di queste interfacce va ben oltre lo scopo di queste dispense. come l’interfaccia IDE per i dischi. 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.4).

in particolare gli interrupt che a differenza del pi` recente bus PCI non possono essere condivisi u fra schede diverse. mentre altre devono essere allocate opportunamente quando si inserisce il relativo dispositivo su una interfaccia di espansione.. Analogamente abbiamo: # cat /proc/dma 4: cascade che mostra l’allocazione dei canali DMA.. u o 66 . 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. usata principalmente per modem interni e schede sonore. al giorno d’oggi ` sostanzialmente in disuso. 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. i canali DMA o le porte di I/O da utilizzare. a 67 una descrizione pi` dettagliata pu` essere trovata nel Plug-and-Play HOWTO. 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 . 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. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA riportati il numero di interrupt registrati al momento ed un sommario di questa statistica ` e riportato nelle ultime quattro righe. originariamente prevedeva un bus a 8 bit. L’interfaccia ISA nasce come estensione dei bus dei vecchi PC. Una terza risorsa ` quella delle porte di I/O. che consentivano l’utilizzo di schede di espansione. la situazione corrente dell’allocazione ` riportata dal kernel nel file /proc/ioports. 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.218 CAPITOLO 5. e e si trova soltanto sulle macchine pi` vecchie. Anche in questo caso alcune di queste porte sono allocate staticamente a periferiche standard come le seriali. con conseguente impossibilit` di usare le espansioni. quasi subito portato a 16.66 in cui le precedenti risorse potevano essere allocate dinamicamente dal sistema operativo o dal BIOS ed impostate sulle schede. 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.

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

scarica i valori dei registri interni per ogni scheda e li stampa sullo standard output. Questo significa che in certi casi le informazioni ricavate da pnpdump non sono corrette. Opzione -c Significato tenta di determinare delle impostazioni sicure per i dispositivi. e produce un output direttamente utilizzabile senza necessit` di rimuovere i a commenti. stampa un messaggio di aiuto. Le opzioni principali del comando sono riportate in tab. pertanto ` comune salvare il file e poi o e editarlo per togliere i commenti.13: Principali opzioni per il comando pnpdump. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA che in genere questo file viene prodotto automaticamente grazie al comando pnpdump.220 CAPITOLO 5. -d -h -i -v -o . Il problema ` che in certi casi le informazioni riportate non sono accurate. 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. 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. Si tenga presente per` che se l’allocazione risulta impossibile o il comando pu` bloccarsi indefinitamente nel tentativo di trovare una soluzione. 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. e inizia la scansione per nuove schede a partire dall’indirizzo passato come secondo argomento. e potrebbe essere necessario controllare quali sono le risorse utilizzate sotto Windows per ricavare dati esatti. 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. Pertanto ` sempre opportuno eseguire il comando in single user e mode (vedi sez. riservato alle schede ISA). cui richiedere le informazioni. 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. Tabella 5. ignora gli errori di checksum nel riconoscimento degli indirizzi delle porte di I/O. interrogando in fila tutte le porte di I/O possibili (nell’intervallo fra 0x203 e 0x3ff. ottale (se inizia per 0) o decimale. in alcuni casi questo non ` dovuto a conflitti e porta e a classificare come non valide tutte le porte. contando sull’uso del driver (ovviamente fornito solo per DOS/Windows) per eseguire le impostazioni. 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. stampa la versione scrive il risultato sul file passato come parametro invece che sullo standard output.4). 5.3. Il comando comunque esegue la scansione effettuando vari tentativi di comunicazione con le eventuali schede. 5. ignorandolo si potranno trovare lo stesso le schede presenti. 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). in questo modo ` possibile vedere le eventuali impostazioni e fatte dal BIOS o mantenute di default dalle schede stesse. di default per` tutte le istruzioni sono commentate.13. nel qual caso il programma non esegue la a procedura di ricerca. L’argomento pu` essere specificato a o come valore esadecimale (se inizia con le cifre 0x). direttamente nel formato utilizzato per la configurazione del programma isapnp. per identificare quali di queste corrispondono ad un dispositivo presente sul BUS. si pu` cos` limitare l’intervallo o ı evitando di interrogare schede gi` configurate o non PnP.

4. il tutto compone un numero a 16 bit che viene a costituire l’indirizzo hardware della periferica sul bus PCI. la CPU ` collegata attraverso il cosiddetto host bridge sul bus prine cipale che ` sempre il bus 0. Uno schema della disposizione dei bus pi` comune nelle architetture PC ` in fig. 5.4. fino ad un massimo a u di 256. In un bus PCI ciascuna periferica viene identificata univocamente grazie ad un indirizzo che ` composto da tre numeri: il numero di bus. Figura 5. in genere gli e interrupt vengono associati sulla base dello slot su cui ` inserita la scheda di espansione. 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. u A differenza del bus ISA nel caso di PCI la allocazione delle risorse ` dinamica.5.4: Schema della disposizione del bus PCI e delle varie interfacce di espansione. 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).ids). per cui con una scheda apposita si pu` o controllare un altro bus PCI contenente altre schede. 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. ed in grado di supportare velocit` di trasferimento a dei dati molto superiori al precedente ISA. che possono essere confrontati con un database delle schede prodotte (usualmente mantenuto nel file /usr/share/misc/pci. 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. per una banda passante teorica di circa 1Gbit/s. 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).3MHz. infatti lo standard supporta la possibilit` di avere pi` bus (fisicamente distinti) sulla stessa macchina. 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 numero di bus identifica su quale bus si trova la scheda. che contiene una directory (chiamata con il numero corrispondente per ciascun bus presente nel sistema. pi` il file devices u . Il bus nasce a 32 bit e prevede una frequenza per le operazioni di 33. I computer pi` recenti in genere hanno sempre almeno due bus (uno dei quali viene usato u principalmente per l’AGP). inoltre e il bus supporta la condivisione degli interrupt. 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.

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

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

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

6. invece di diventare segnali elettrici su connettore attaccato ad un controller. quale ` l’interfaccia e e (in genere la scheda col controller. a Le periferiche accedute tramite interfaccia SCSI sono identificate attraverso quattro numeri: il primo ` l’host adapter number che identifica. che identifica ciascun bus (detto anche. compreso l’unit` di controllo. e a cui si collegano le altre periferiche utilizzando gli appositi connettori. L’host adapter number ` un numero progressivo che parte da zero. 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).4. 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. 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. e questi saranno numerati progressivamente a partire da zero. 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). utilizzati direttamente dai u programmi quando accedono ai relativi file di dispositivo. Tutte le periferiche sul bus. detto SCSI ID.5. stanno i driver per le periferiche che si trovano sul bus. che per utilizzare i masterizzatori IDE attraverso un meccanismo di emulazione. come CD.6: Strutturazione del supporto alle interfacce SCSI nel kernel. come il nome stesso indica. 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. 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). che saranno diversi a secondo della scheda SCSI utilizzata. in e altra nomenclatura. Figura 5. in tal caso i comandi del protocollo SCSI. nel qual caso sar` in grado di alloggiare pi` conneto u a u tori. In genere sui dispositivi questo viene stabilito a . Nel caso di Linux il supporto SCSI ` presente fin dalle prime versioni del kernel. nell’ordine u in cui l’adatattore stesso li presenta (che dipender` ovviamente da come ` fatto quest’ultimo). ciascuno dei quali richiede una modalit` d’accesso a distinta. secondo lo schema illustrato in fig. saranno inviati su un bus virtuale fornito dal driver per il supporto di dette funzionalit`. ma dato che e lo standard prevede vari tipi di periferiche a partire dal kernel 2. 5.4 il sistema ` stato organizzato e su tre livelli. Un singolo controller pu` gestire anche pi` bus. nastri o dischi. e Il secondo numero ` il cosiddetto channel number. canale SCSI ) associato ad un host adapter . a e Anche questo ` un numero progressivo che parte da zero. Al livello pi` alto. ma pu` essere anche l’interfaccia di un bus virtuale) con o cui si accede ai dispositivi. LA GESTIONE DI INTERFACCE E PERIFERICHE 225 PCI del computer. vengono identificate attraverso a un indirizzo di identificazione.

o LUN. ID e LUN.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. lun 0 e si noti come in questo caso sia stato rilevato un hard-disk su USB. 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. channel. u e a Infine alcuni dispositivi pi` sofisticati (come le unit` a nastro dotate di libreria. che non hanno pi` periferiche a bordo. 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. un esempio del contenuto del file. u questo ` nullo. ma ` in o e genere preimpostato al valore pi` alto (in genere 7) che ` quello che ha maggiore priorit`. del tipo di: <scsi(_adapter_number).10 ANSI SCSI revision: 02 Rev: 1. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA dall’utente con degli appositi interruttori. SCSI device sda: 241254720 512-byte hdwr sectors (123522 MB) sda: assuming drive cache: write through sda: sda1 Attached scsi disk sda at scsi0. ID e LUN nulli. 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. in particolare nel caso del secondo esempio si avr` (andando a controllare i messaggi di avvio) un risultato del a tipo: . Il kernel mantiene le informazione relative alle interfacce SCSI disponibili nella directory /proc/scsi. 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. di norma sono presenti dei jumper che permettono di impostare le linee corrispondenti. le eventuali partizioni saranno accedute e per numeri crescenti a partire da 1. Qualora invece si abbia a che fare con dei CDROM si avranno dispositivi diversi. 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 ... quest’ultimo dipende dal tipo di dispositivo. e Pertanto una modalit` di indicare le periferiche SCSI ` quella di fornire una quadrupletta di a e numeri che indicano interfaccia. anche se in alcuni confezionamenti sono disponibili dei selettori. nel caso di dischi essi sono tutti nella forma /dev/sdX dove X ` una lettera progressiva a partire da a. in cui l’interfaccia di emulazione viene vista come scsi0. esattamente come per i dischi IDE. 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. id.226 CAPITOLO 5. per la maggioranza dei dispositivi. id 0. canale. ed in particolare nel file scsi. channel 0. Per i controller invece l’identificativo pu` essere modificato dal BIOS di configurazione.

lun 0 227 i CD infatti vengono acceduti con i dispositivi /dev/srN dove N ` un numero progressivo a partire e da 0. funzionalit` che pu` essere utile ı a o qualora si disponga di periferiche hot-swap che possono essere estratte a caldo dal bus76 . a e Le altre informazioni presenti nella directory /proc/scsi sono una directory per ciascuna interfaccia utilizzata. 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. 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. Ovviamente un dispositivo potr` essere rimosso solo se non ` al momento 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. anch’esso utilizzato. u 76 . Una caratteristica speciale del file /proc/scsi/scsi ` che questo pu` essere acceduto anche e o in scrittura. un nome equivalente. I ed L sono la solita quadrupletta di numeri che identifica il dispositivo. lun 0 Attached scsi CD-ROM sr1 at scsi0. channel 0. Un programma storicamente utilizzato per ricavare le informazioni relative ai dispositivi SCSI ` scsi_info. inoltre la presenza di diversi standard sullo stesso bus pu` portare a degrado di prestazioni. 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. C.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. la presenza di due dispositivi con lo stesso ID infatti li e rende entrambi inutilizzabili. id 1. quando utilizziamo oltre al disco fisso anche una penna USB. in cui il nastro non viene riavvolto quando arriva alla fine). ` /dev/scdN. e in quest’ultimo caso. 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.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`. e rimangono sostanzialmente solo dischi e nastri per l’uso professionale).4. (che in Debian fa parte del pacchetto pcmcia-cs). 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. channel 0.5. LA GESTIONE DI INTERFACCE E PERIFERICHE Attached scsi CD-ROM sr0 at scsi0. id 0. contenente un file con nome corrispondente al numero di ciascun host adapter number presente con quella interfaccia. otterremo al suo interno due file. corrispondenti alle due istanze della stessa interfaccia viste come host adapter diversi. Un secondo aspetto da tenere presente nel caso di dispositivi SCSI ` che in genere il cablaggio e degli stessi ` pi` delicato. che ` di norma a carico degli utenti. alcuni bus infatti devono essere opportunamente terminati per cone u sentire una corretta trasmissione dei segnali.0. Infine occorre tenere sotto controllo l’allocazione degli o ID.

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

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

ma USB ` stata progettata con un compromesso fra prestazione e ed economicit`.7 il bus prevede due direzioni per il flusso dei dati.4.1. pertanto le unit` disponibili per le periferiche sono in realt` a a a 127 meno il numero di hub aggiuntivi. 5. 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 . Un bus USB ` costruito in maniera gerarchica ed ` controllato da una unit` di controllo (o e e a host).7: Schema della struttura di un bus USB. ed i dispositivi possono solo rispondere all’unit` e o a di controllo. ed e u ` comunque possibile aggiungerne altri usando schede di espansione) cui sono agganciate 2 o 4 e porte. secondo la struttura mostrata in fig. Il bus prevede fino ad un massimo di a 127 unit` per ciascuna unit` di controllo. dall’host alla altre architetture non hanno queste limitazioni. a cui ` direttamente collegato un concentratore (o hub) radice a cui tutti i dispositivi o e eventuali altri concentratori secondari vanno ad agganciarsi.230 CAPITOLO 5. Come mostrato in fig.79 Figura 5. 5. Il protocollo prevede che le comunicazione siano tutte controllate dall’unit` di controllo. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA zare e poco costosa per la realizzazione di dispositivi semplici (ed in genere portabili. a che ` l’unica che pu` iniziare una comunicazione.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. In genere su un computer ` presente un solo host (anche se alcuni ne hanno pi` di uno. ma si tenga conto che anche essi contano come unit` sul bus. la presenza di hub secondari permette l’utilizzo di un a a maggior numero di periferiche rispetto alle porte presenti sul PC. 5. non ` prevista nessuna possibilit` di comunicazione dei singoli dispositivi fra di e a loro. il quale a sua volta o avr` altre porte cui agganciare altri dispositivi ed hub.

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

medium devsel. VT82xxxxx UHCI USB 1. identificata con la sigla EHCI. mentre per una unit` OHCI si avr`: a a davis:~# lspci -v . ..conf (vedi sez. 82 si ricordi di abilitarne il supporto in caso di ricompilazione del kernel..1. 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).232 CAPITOLO 5. Per questo motivo in genere il o sistema ` in grado di usare un demone dedicato come hotplug.. In questo caso sotto la directory /proc/bus/usb compariranno tante directory quanti sono i bus disponibili (numerate in ordine crescente). (Wrong ID) USB Controller Flags: bus master. Inc. 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.. contenente i relativi dati. latency 32. 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%). Inc. mentre in questo caso il modulo da utilizzare ` ehci-hcd. le specifiche utilizzate sono quelle della Extended Host a Controller Interface. Invece se si dispone di una unit` USB 2. 00:04..4). USB) che possono essere connesse e disconnesse a caldo. 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).. questo ` ormai obsoleto e e sostituito da hotplug che fornisce lo stesso tipo di funzionalit` in maniera generica per tutte le periferiche a (PCMCIA. SCSI. #Int= 0. #Iso= 0 1 Spd=480 MxCh= 6 inizialmente la gestione automatica veniva effettuata tramite il demone usbmgr.2 USB Controller: ServerWorks CSB6 OHCI USB Controller (rev 05) (prog-if 10 [OHCI]) Subsystem: ServerWorks: Unknown device 0220 Flags: bus master.81 che ` in grado di rilevare la e e connessione e la disconnessione di nuove periferiche caricando (e rimuovendo) automaticamente i relativi moduli. medium devsel. in quanto questo compito ` eseguito dal bus stesso. 5. altrimenti gran parte dei programmi di visualizzazione dei dati del bus non funzioneranno. IRQ 9 I/O ports at b400 [size=32] Capabilities: [80] Power Management version 2 . IRQ 5 Memory at fe120000 (32-bit. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA holland:~# lspci -v . In generale la scelta di quale modulo deve essere fatta in sede di installazione. latency 32.. ciascuna delle quali conterr` un file con a nome il numero associato a ciascun dispositivo presente su detto bus. e e pu` essere fissata usando modules.. PCI. o riga del tipo: none /proc/bus/usb usbdevfs defaults 0 0 a /etc/fstab.1 Controller (rev 10) (prog-if 00 [UHCI]) Subsystem: VIA Technologies.2 USB Controller: VIA Technologies. 00:0f. 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. non-prefetchable) [size=4K] .

Per il resto della sintassi si pu` fare riferimento alla Linux o USB Guide disponibile su http://www. Al solito si faccia riferimento alla pagina di manuale per una descrizione completa.6 ehci_hcd Product=VIA Technologies. Inc.01 Manufacturer=Cypress Semiconductor Product=USB2. ogni nuovo dispositivo attaccato ad una porta USB e di caricare in memoria il relativo modulo. Ogni sezione ` e introdotta da una linea che inizia con la lettera T e che indica il posizionamento dello dispositivo all’interno del bus.00 Cls=09(hub ) Sub=00 Prot=01 MxPS= 8 #Cfgs= 1 Vendor=0000 ProdID=0000 Rev= 2. 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. 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).html Per una visualizzazione pi` intelligibile di queste informazioni si pu` usare i programmi u o del pacchetto usbutils. 83 .linux-usb.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. Lev il livello (in termini di passaggi per eventuali hub secondari) Dev il numero progressivo assegnato. tramite questi numeri ed un opportuno database e di corrispondenze.6. infatti per ciascun dispositivo presente sul e bus viene riportata ne file una diversa sezione con tutti i dati ad esso relativi.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 Vendor=04b4 ProdID=6830 Rev= 0. che si cura di identificare. dove Bus indica il numero progressivo del bus. ma che in caso di fallimento possono essere utilizzati per cercare informazioni su internet.org/USB-guide/book1.5.4. informazioni utili relative al dispositivo sono quelle delle stringe fornite dal produttore e mostrate nelle righe inizianti per S.) 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. sono particolarmente importanti. gli identificatori del venditore e del prodotto che vengono utilizzati per selezionare automaticamente83 il modulo da utilizzare per il supporto del dispositivo. Nelle righe successive sono poi riportate altre informazioni relative al dispositivo.06 Manufacturer=Linux 2. 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.) MxPS= 2 Ivl=256ms Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 0 Ver= 2.0 SerialNumber=0000:00:10. USB 2. se si ` installato il demone hotplug. come riportati nella riga iniziante per P.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. Bus 001 Device 001: ID 0000:0000 Il programma pu` comunque stampare la lista anche in forma gerarchica usando l’opzione -t.

AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA .234 CAPITOLO 5.

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

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

il rischio di fallimento hardware si moltiplica per il numero di dischi).3 RAID-4 Bench´ disponibile ` senz’altro il meno usato. a RAID-10 Si suole definire cos` una configurazione in cui si effettua un RAID-0 di pi` array ı u configurati in RAID-1. 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. a I dischi devono essere di dimensioni identiche. richiedendo l’invio su bus di una sola copia. Anche per il RAID-5 sono necessari almeno tre dischi. rispetto al posizionamento (il cosiddetto seek time). 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. o Il RAID-5 presenta inoltre. o dell’ora dine di quelle del RAID-1. Inoltre se si sono inseriti dei dischi di riserva la ricostruzione del disco rotto o indisponibile viene fatta partire immediatamente. 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. ma in questo caso. a Se si rompono due dischi si perderanno invece tutti i dati.6. dato che dati sono comunque distribuiti su pi` dischi. ma quando ci sono molte letture contemporanee e spostamenti sui dati. altrimenti l’array avr` la dimensione a del pi` piccolo di essi. Il tutto al prezzo di un numero molto maggiore di dischi per ottenere la stessa capacit`. 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. Mantiene e e u delle informazioni di recupero su un disco di parit`. Le prestazioni in lettura sono invece migliori.1. ma fintanto che almeno ne resta almeno uno attivo nei u due RAID-1 le informazioni saranno integre. In questo modo si ottiene sia la ridondanza del RAID-1 che l’aumento di prestazioni del RAID-0. Necessita di tre o pi` dischi. queste vengono distribuite su tutti i dischi che fanno parte dell’array. u RAID-5 Come per il RAID-4 anche in questo caso si cercano di ottenere sia vantaggi di affidabilit` che quelli di prestazioni. ed ` il pi` usato quando si hanno pi` di due a e u u dischi da mettere in RAID. Se per` si rompono due dischi i dati sono persi. 3 . l’unico caso di impiego reale ` quello di un disco veloce e affiancato ad un gruppo di dischi pi` lenti. 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. quando richiedono pure le letture necessarie al calcolo delle informazioni di parit`. Rispetto al RAID-5 ha il vantaggio che possono rompersi anche pi` dischi. per evitare il problema del collo di bottiglia. 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. non tanto sulla singola lettura. Questo livello cerca di bilanciare i vantaggi di affidabilit` del RAID-1 con le prestaa zioni del RAID-0. gli u stessi vantaggi nella lettura presentati dal RAID-0. L’UTILIZZO DEL RAID 237 hanno il vantaggio di gestire internamente la replicazione dei dati. In generale comunque le prestazioni aumentano sia in lettura che in scrittura. e le operazioni possono essere anche molto costose. 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`. In tal caso infatti i dati possono essere letti in parallelo da dischi diversi. ed utilizza gli altri in RAID-0. le informazioni di parit`. In scrittura invece le prestazioni sono meno predicibili.

che ` nella sezione ATA/IDE/MFM/RLL support. attivabile nella sezione Multi-device support. cio` di e un controller per i dischi che esegue le operazioni necessarie al suo interno. i cui nomi sono analoghi ai precedenti. Una volta costruiti gli array si potr` accedere ad essi con i file di dispositivo /dev/mdX. ` 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). 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. E cio` possibile far costruire al kernel stesso degli array utilizzando e qualunque tipo di dispositivo a blocchi. Nel primo caso occorre poter disporre di un supporto hardware. un dispositivo tipico di un u array ` sempre nella forma /dev/rd/c0d0 che indica il primo array sul primo canale.3 Il RAID software A parte abilitare il supporto nel kernel (cui abbiamo accennato in sez. AMMINISTRAZIONE AVANZATA DEL SISTEMA backup. In ogni caso Linux supporta vari controller RAID hardware. 6. 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. attraverso e i file di dispositivo generici disposti nella directory /dev/ataraid. e presenta al sistema operativo l’insieme dei dischi come un dispositivo unico. un utente che cancella i dati dal disco. Nel nostro e caso ci concentreremo comunque su questi ultimi. 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. fa si che l’opzione del RAID software nella maggior parte dei casi si riveli estremamente competitiva. o un qualunque incidente che distrugga il vostro array. dato che gli stessi RAID software sono a loro volta dispositivi a blocchi. che supporta la creazione di RAID-0. ma in genere chiede parecchio (specie per gli SCSI) da quelle del portafogli. soltanto che non presentano un numero di canale. /etc/raidtab. una volta attivato il relativo supporto. 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. Per quando non si dispone di un supporto hardware Linux fornisce un supporto software. 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. si avr` cio` ad esempio qualcosa a e del tipo di /dev/ataraid/d0p1. Come accennato i raidtools utilizzano nelle loro operazioni un apposito file di configurazione. RAID-5 e linear. Nel primo caso (i controller SCSI) i vari driver sono disponibili nella sezione Block Devices della configurazione del kernel.2 Il RAID su Linux In generale per poter creare un array di dischi in RAID ci sono due opzioni fondamentali: hardware o software. e pu` funzionare anche senza l’ausilio di a o un file di configurazione (/etc/raidtab) che invece ` necessario per i raidtools. a 6. ` RAID-4. Nel caso di RAID su IDE non ci sono canali. di questi e esistono sostanzialmente due versioni.1. per l’utilizzo del RAID software ` necessario utilizzare anche gli opportuni programmi in user space.1. Il file ` diviso in sezioni che e . un RAID infatti pu` proteggere dal fallimento dell’hardware di un disco.1. Inoltre la superiorit` di prestazioni ` spesso a e solo teorica. 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). 5. Questo. ed i dispositivi sono accessibili. ma non pu` o o nulla contro la corruzione di un filesystem. RAID-1.238 CAPITOLO 6. I singoli array vengono identificati per “canale” (spesso i controller supportano pi` di una singola catena SCSI) e per “disco”. sia SCSI che IDE. che contiene le definizioni di tutti gli array.3).

righe vuote o inizianti per “#” vengono ignorate. A questa segue di solito la direttiva nr-raid-disks che indica il numero di dischi dell’array. a partire da 0). 1. e poi specificati con la direttiva spare-disk.1. anche quando non si pu` accedere ad /etc/raidtab (ad esempio quando o . Alla definizione di una sezione con raiddev devono seguire le altre direttive che specificano di che tipo di array di tratta. che prende come parametro il nome del dispositivo da utilizzare per accedere ad esso. Ad una direttiva device deve seguire una direttiva raid-disk che ne specifica la posizione nell’array (in ordine progressivo. purch´ questo sia gi` stato definito in una precedente sezione di e a /etc/raidtab. preso dalla pagina di manuale. 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. in un apposito blocco di dati. che prende come parametro il numero di livello: i valori e possibili sono 0. il persistent superblock appunto. # 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. La principale ` raid-level. 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.6. 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. detto cos` in quanto in questo modo le informazioni sull’array ı sono sempre disponibili. ogni riga e valida contiene una direttiva seguita da un parametro che ne specifica il valore. ` il seguente: e # # sample raiddev configuration file # ’old’ RAID0 array created with mdtools. o ivi compreso un altro RAID. 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. L’UTILIZZO DEL RAID 239 definiscono i vari array. 4 o 5) oppure linear. Un esempio di questo file. Oltre a queste che sono fondamentali per definire la struttura di una array. Questo pu` essere un qualunque dispositivo a blocchi. Gli eventuali dischi di riserva devono essere anch’essi dichiarati con device. Una volta che si ` definito un array lo si pu` e o riutilizzare (in successive direttive raiddev. esistono una serie di direttive opzionali che permettono di configurare altre caratteristiche del RAID. identificati dalla direttiva raiddev.

I valori possibili sono 1 e 0 che rispettivamente attivano e disattivano l’uso del persistent superblock. poi si crea l’array (di cui fa parte anche detto disco. prende come parametro il relativo file di dispositivo. Tabella 6. dimensione delle strisce (per le modalit` RAID che le a supportano). 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. Infine ` molto utile la direttiva failed-disk che permette di creare un array inserendoci un e dispositivo senza che questo venga effettivamente utilizzato. Riavviando ed usando l’array come radice si potr` successivamente aggiungere all’array il disco usato per a l’installazione. se si ` compilato il relativo supporto del kernel. Il comando rileva anche se i dispositivi scelti sono gi` stati utilizzati per un altro RAID. Questa non ha nessun significato n´ per il RAID-1 n´ per il linear. accessibile con man raidtab. nel a qual caso per forzare l’inizializzazione occorrer` usare l’opzione -R. Si tenga presente che l’operazione distrugge il contenuto dei dischi. Le altre principali direttive di /etc/raidtab sono riassunte in tab. indica la posizione nell’array del precedente dispositivo indicato con device come disco di riserva. che prende come parametro il file di dispositivo /dev/mdX che identifica ciascun array. registra le informazioni sull’array in un apposito settore sui dispositivi sottostanti. 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.1: Principali direttive di configurazione di /etc/raidtab. ma negli altri casi questo dice la dimensione delle strisce in cui vengono divisi i dati inviati su dischi consecutivi. 6. E directory radice un array: prima si installa su un disco normale. AMMINISTRAZIONE AVANZATA DEL SISTEMA si ha la partizione radice sul RAID). Con l’opzione -c si pu` specificare in file di configurazioo ne alternativo. 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. indica la posizione nell’array del precedente dispositivo indicato con device. 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. e legge dal persistent superblock tutte le informazioni necessarie per attivarlo. a meno che questi non siano marcati come failed-disk. in tal caso infatti il kernel riconosce la partizione come componente di un RAID. 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. ad attivare ae e anche l’autorilevamento del RAID all’avvio del kernel. ma come failed-disk) e si copia su di esso tutto il sistema. Un’altra direttiva importante ` chunk-size che dice le dimensioni. indica uno dei dispositivi costituenti l’array. Questa funzionalit` ` essenziale.1. delle stripe e in cui vengono divisi i dati scritti sull’array per i livelli che supportano lo striping.240 CAPITOLO 6. indica il tipo di RAID da utilizzare. in sostanza questa direttiva marca il dispositivo suddetto come rotto. indica il numero di dischi che costituiscono direttamente l’array. indica la posizione nell’array del precedente dispositivo indicato con device come disco rotto. in kilobyte. a . indica il numero di dischi di riserva inseriti nell’array. al solito l’elenco completo ` nella pagina di manuale. facendo fare la sincronizzazione dei dischi al kernel.

... 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.....6... ` possibile aggiungerne uno usando il o e comando raidhotadd. il sistema stia provvedendo alla ricostruzione del secondo..8% (581632/69336448) finish=183. 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 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. Il comando prende come argomenti il dispositivo dell’array seguito da quello del disco da rimuovere. questo e o permetter` ad esempio di sostituire un disco mettendone uno nuovo. .] recovery = md2 : active raid1 hdc3[2] hda3[1] 4490048 blocks [2/1] [_U] 0. L’uso di questo comando pu` servire ad esempio quando si vuole sostituire un disco. Cosi come si pu` rimuovere un disco da un array. per` fintanto che fa parte dell’array sar` possibile sostituirlo. 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] [>... e non appena esso sar` a a 4 ovviamente l’array non deve essere in uso. 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).. sincronizzato e attivo.1. e si vede come il primo array sia integro. In sostanza l’effetto ` lo stesso che si sarebbe e e ottenuto creando l’array con la direttiva failed-disk. ma pu` essere ottenuto in qualunque o momento. 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..7min speed=6232K/sec dove si hanno tre array RAID-1 costruiti con le prime tre partizioni di due dischi. o Anche per questi comandi si pu` utilizzare un file di configurazione alternativo specificabile con o l’opzione -c. per tutti i dettagli si faccia al solito riferimento alla pagina di manuale. ed il terzo abbia un solo disco attivo. se il dispositivo a ` hot-pluggable) senza problemi.. In genere un disco diventa inutilizzabile in caso di problemi hardware. e senza dover fermare l’array (cosa che ad esempio non sarebbe e possibile se su di esso si ` posta la directory radice).. una o volta tolto il disco dall’array infatti lo si potr` rimuovere (anche senza riavviare.. 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.

con il filesystem montato). 6. che lo vanno a costituire. da volume group). quello del gruppo di volumi (indicato in figura con la notazione VG. 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. e a se lo spazio disco sottostante non ` sufficiente baster` comprare un nuovo disco ed agganciarlo al e a volume logico. cos` come mostrato nel secondo esempio a ı del contenuto di /proc/mdstat. che viene a costituire l’interfaccia fra i volumi logici (indicati con LV da logical volume). 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. che da esso si estraggono. fare link e spostare contenuti da un disco ad un altro. all’interno di un “volume logico”.1. Quest’ultimo poi non ` altro che un dispositivo e virtuale creato a partire da un insieme di volumi fisici. dove ` stato riscritto da e zero per migliorare stabilit` e prestazioni. il sistema consiste nell’introdurre un livello intermedio. relative alle diverse possibili strategie di partizionamento. ed i volumi fisici (indicati con PV. e indicate in figura con PE) che poi vengono rimappate5 nei corrispondenti logical extent (indicati con LE) che vanno a costituire un volume logico. a 6 si tenga presente per` che gli snapshot al momento della scrittura di queste note non sono ancora stati portati o a LVM2. 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”. In questo modo se lo spazio disco su un volume logico si esaurisce baster` allargarlo. 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.2. . per espanderne le dimensioni senza doversi preoccupare di ripartizionare. grazie al quale ` possibile creare un filesystem invece che su un disco singolo o su una e partizione. 6.6. 6. da physical volume).242 CAPITOLO 6. Una delle funzionalit` pi` interessanti di LVM ` quella di poter utilizzare il sistema per a u e poter creare degli snapshot.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. Per superare alla radice questo problema ` stato creato il sistema del Logical Volume Mae nager.2. L’uso del Logical Volume Manager permette cio` di evitare alla radiu e ce tutta le problematiche. evidenziate in sez.x. 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. In sostanza il kernel si cura di suddividere un disco fisico in tante piccole sezioni (dette physical extent.2. 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. montare. che vengono opportunamente riuniti dal kernel in modo da presentarsi come un unico disco. 5.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. Lo schema del funzionamento del Logical Volume Manager (da qui in breve LVM) ` riportato e in fig.

3).x il sistema ` stato completamente riscritto.6. ed avere installato gli opportuni programmi in user-space. Nel passaggio dal kernel 2.4.6. se infatti questo dovesse esaurirsi il volume logico originale diverrebbe inusabile. originario. pertanto si potranno avere delle differenze a seconda che e si usi la prima versione (detta anche LVM1) o la seconda (detta LVM2). basta assicurarsi che nel breve tempo necessario a creare lo snapshot non ci siano attivit`.1. l’unico aspetto critico ` quello di assicurarsi di avere allocato e per lo snapshot spazio sufficiente a contenere tutte le modifiche. 5.1: Strutturazione del Logical Volume Manager. 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.x al 2.2. . Per poter utilizzare LVM occorre abilitare il relativo supporto nel kernel (vedi sez. mentre il volume creato come snapshot conterr` i dati cos` a ı come erano al momento della creazione. 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. anche se alcune funzionalit` sono e u a tutt’ora in fase di adeguamento. 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. IL SISTEMA DEL LOGICAL VOLUME MANAGER 243 Figura 6. dopo a di che si potr` eseguire il backup con tutta calma su di esso mentre le operazioni continuano a regolarmente sul volume originale.

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). 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).2. 5.51 GB / 19.reading all physical volumes (this may take a while. con -u si fanno stampare gli UUID presenti. e si avr` a un risultato del tipo: monk:/home/piccardi/Truelite/documentazione/corso# pvscan pvscan -.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. si pu` eseguire una scansione dei dischi presenti per rilevare al loro o interno la presenza di volumi fisici usati da LVM.2 La gestione dei volumi fisici Il primo passo nell’uso di LVM ` quello della inizializzazione dei volumi fisici.52 GB [114334605 secs] / NOT usable 4.) pvscan -.244 CAPITOLO 6. ` e e composto di varie sezioni.ACTIVE PV "/dev/hda3" of VG "vg" [54.2. il primo ` quello di marcare la partizione usata (vedi sez. Il comando pu` essere applicato anche a dischi interi.. 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 --.51 GB free] pvscan -. una marca temporale e una parte casuale per garantire unicit`. 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). nel qual caso occorrer` eliminare la o a tabella delle partizioni (se questa viene rilevata il comando segnala un errore). con -n si stampano solo i volumi fisici che non appartengono ad un volume logico. a 7 . fra cui N riferimento ad un MAC-address per il computer locale. u Con il comando pvscan. Un secondo comando diagnostico ` pvdisplay che stampa a video le caratteristiche di uno e pi` volumi fisici (specificati come argomenti).52 GB] / in no VG: 0 [0] che mostra la presenza di in unico volume fisico completamente utilizzato. Le altre opzioni riguardano aspetti specifici della gestione interna ed al solito rimandiamo alla pagina di manuale per una trattazione pi` dettagliata.52 GB] / in use: 1 [54. questo prevede e due passi. il comando si invoca senza argomenti.2) con il codice 0x8E per e indicare il suo uso come volume fisico e poi inizializzarla con il comando pvcreate. AMMINISTRAZIONE AVANZATA DEL SISTEMA 6.total: 1 [54. con -s si riduce la stessa al minimo. per le altre opzioni si faccia riferimento alla pagina di manuale. Le opzioni del comando controllano sostanzialmente l’informazione che viene stampata a video.Physical volume --PV Name /dev/hda3 VG Name vg PV Size 54. 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..

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

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

IL SISTEMA DEL LOGICAL VOLUME MANAGER 247 monk:~# vgdisplay --.2).6. o con l’opzione -l.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. che deve essere disattivo. 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. 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. per i dettagli si faccia riferimento alla pagina di manuale. e come secondo il gruppo da inglobare nel primo.51 GB 4 MB 13955 8960 / 35 GB 4995 / 19. Al solito per le opzioni (sono solo quelle comuni) ed i dettagli si pu` fare riferimento alla pagina di o manuale. Se invece si vuole spezzare in due un gruppo di volumi si pu` usare il comando vgsplit. che diventer` l’unione a dei due. l’opzione supporta anche la specificazione di altre unit` di misura come kilobyte.2. . 6. 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. definite in fase di creazione del gruppo. gigabyte o terabyte se si aggiunge al numero a passato come parametro l’iniziale (va bene sia maiuscola che minuscola) della misura utilizzata. 6. definendo con l’opzione -i un numero di stripes su cui distribuire 9 le dimensioni sono le stesse dei physical extent sottostanti.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. questo prende come primo argomento il gruppo di destinazione. Il comando richiede come argomento obbligatorio il nome del gruppo di volumi da utilizzare.99 GB 256 1 1 54.9 o con l’opzione -L seguita dalla dimensione in byte.2. megabyte. seguito dai volumi fisici da inserire in quest’ultimo. Una delle funzionalit` di LVM ` che permette di suddividere i dati su pi` volumi fisici in a e u maniera analoga al RAID-0. in questo caso si potr` accedere o a al nuovo volume logico usando come file di dispositivo /dev/vgname/lvname.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. questo pu` o essere fatto in due modi. 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. inoltre deve essere sempre specificata la dimensione del volume fisico che si va a creare. si pu` e o per` specificare un nome qualunque con l’opzione -n lvname. 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. Per le opzioni (che sono sostanzialmente quelle comuni di tab.

6. 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). 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).10 Se si utilizza questa funzionalit` si pu` anche determinare la dimensione delle stripes con l’opzione a o -I. in tal caso occorre usare l’opzione -s e specificare un nome con l’opzione -n.2. Valgono in questo caso le stesse considerazioni viste in sez. 6.248 CAPITOLO 6. importa il numero di settori da leggere in anticipo per migliorare le prestazioni (solo per LVM1).2. 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. Il comando supporta anche l’uso delle stripe (con le stesse opzioni di tab.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. per i dettagli al solito si pu` fare riferimento o alla pagina di manuale. prende il valore r per indicare sola lettura o rw per indicare lettura e scrittura. Un elenco delle opzioni principali del comando ` riportato in tab. Se invece di un normale volume logico si vuole creare uno snapshot occorre usare modalit` a completamente diversa di invocazione del comando. gigabyte o terabyte. imposta la dimensione di un volume fisico per numero (passato come parametro) di logical extent. inoltre gli argomenti obbligatori diventano due: il nome del volume logico da usare come snapshot e quello del volume logico cui fare da snapshot. Si possono per` usare le o stesse opzioni per specificare la dimensione dell’estensione al posto di quella totale. -I -l -L -n -p -r -s Tabella 6. apponendo al valore specificato il carattere “+”.3: Principali opzioni del comando lvcreate. 6. Anche le opzioni sono analoghe e non staremo a ripeterle. il vantaggio ` che qualora si avesse la necessit` di ampliarne le dimensioni si potr` ricorrere al e a a comando lvextend. 6. 6.1 per il RAID-0. Se invece di aumentare le dimensioni di un volume logico le si vogliono ridurre si deve usare lvreduce. Il comando prende gli stessi argomenti ed opzioni di lvextend (esclusi quelli relativi alle stripe). importa i permessi sul volume logico. il comando utilizza anche e molte delle opzioni generali accennate in tab.1. megabyte. imposta la dimensione di un volume fisico specificata in byte. 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`. indica la richiesta di creazione di un volume di snapshot. 10 .3.5) per avere a disposizione lo spazio aggiunto. kilobyte. 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. passato come parametro. AMMINISTRAZIONE AVANZATA DEL SISTEMA i dati. imposta il nome del volume logico. Il comando permette anche di estendere le dimensioni dei volumi di snapshot. 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.

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. 6.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. e stavolta sono permessi per le dimensioni sia il segno “+” che quello “-”. IL SISTEMA DEL LOGICAL VOLUME MANAGER 249 richiedere una riduzione.2. e e . il che comporta degli ovvi problemi se si vuole ridimensionare la directory radice. -p che stampa una percentuale di completamento durante le operazioni. il u o comando prende come argomento uno o pi` volumi da rimuovere. 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). l’unica opzione specifica supu portata ` -f che permette di sopprimere la richiesta di conferma della rimozione dallo standard e input. altrimenti il programma non potr` funzionare. o 13 questo significa che l’argomento non ` necessario in caso di espansione e lo ` in caso di riduzione. e possono e anche essere utilizzati quando di ridimensiona una partizione su un disco con parted.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. XFS. Si tenga presente che il comando non tiene assolutamente in considerazione le dimensioni del dispositivo sottostante. inoltre se si ridimensiona una partizioni occorre avere cura che essa continui ad avere lo stesso cilindro iniziale.2.6. pertanto ` fondamentale ridurre le dimensioni di un eventuale filesystem presente e sul volume logico prima di eseguirne una riduzione. Come accennato ogni filesystem ha normalmente un suo programma per il ridimensionamento. 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. 12 che per` supporta solo accrescimenti. la struttura dei due ` e identica) ` resize2fs. per ridimensionare un filesystem JFS infatti baster` rimontarlo con un comando del tipo: a mount -t jfs -o remount. Il comando che permette di ridimensionare un filesystem ext2 (o ext3.12 JFS) ` dotata di questa funzionalit`. -f che forza le operazioni escludendo alcuni controlli di sicurezza e -F che scarica i dati in cache prima di iniziare. che si ridimensiona con una opzione di mount. Alcuni filesystem per` supportano anche il ridimensionamento a caldo (cio` senza smontare il o e filesystem) se questo avviene per accrescimento. Si tenga presente che i dati presenti nella parte tolta con la riduzione vengono persi. Se non viene specificato un secondo argomento indicante la dimensione da usare il ridimensionamento avviene alla dimensione corrente del dispositivo. fa eccezione JFS. In genee a rale questa operazione pu` essere eseguita solo a filesystem inattivo (cio` senza che questo sia o e montato). Qualora un volume logico non sia pi` utilizzato lo si pu` eliminare usando lvremove.11 La possibilit` di ridimensionare un filesystem dipende dalla presenza di un opportuno proa gramma specifico per ciascun tipo di filesystem. Di nuovo le opzioni sono le stesse. a Il comando prevede l’opzione -d per abilitare il debug (che prende come parametro una bitmask indicante quali informazioni stampare). per cui se si usa una dimensione troppo grande si avranno problemi. Correntemente la gran parte dei filesystem presenti su Linux (ext2/ext3. reiserfs.

3 Le quote disco Una delle caratteristiche avanzate della gestione dei dischi presenti fin dal kernel 2. e dovranno perci` essere impostate separatamente. a scapito pure degli altri utenti. che di entrambi. un meccanismo che consente di limitare la quantit` delle risorse su disco che i a singoli utenti (o gruppi) possono usare. se non si specifica nulla il comando user` la dimensione del a dispositivo sottostante. per avere pi` u informazioni nel corso delle operazioni si deve invece usare -v. 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. L’opzione supporta anche l’uso dei segni “+” e “-” per indicare dei ridimensionamenti relativi (accrescimenti o riduzioni). Tratteremo in questa sezione il loro utilizzo e le relative modalit` di gestione. 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).3. che di un gruppo o e (cio` in base al GID). mentre per XFS la caratteristica deve e essere esplicitamente abilitata dato che ` gestita in modo diverso. uno dei problemi pi` comuni ` infatti quello del riempimento del disco. le due risorse sono completamente indipendenti per cui ` possibile e superare il limite sul numero di file occupati pur avendo ancora spazio disco disponibile. AMMINISTRAZIONE AVANZATA DEL SISTEMA Per ridimensionare un filesystem di tipo reiserfs si deve invece usare il comando resize_reiserfs.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. a 6.0 ` quella e delle quote disco. pertanto ` usuale attivarle sul filesystem su cui si sono piazzate le home degli utenti. 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.3. Nel caso specifico di un sistema unix-like questo ` sempre stato realizzato attraverso le cosiddette quote disco. che pone delle restrizioni alle risorse che un singolo utente pu` utilizzare. 6. e finiscono per e riempire tutto lo spazio disponibile. Del sistema esistono due versioni. entrambe con gli ultimi kernel il supporto ` presente per ext2. 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. e reiserfs. 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). realizzato nel kernel. e questo avviene u e sovente perch´ alcuni utenti non si curano di controllare le risorse che usano. e 14 . Il comando permette anche di specificare con l’opzione -j un dispositivo alternativo su cui mantenere il giornale.250 CAPITOLO 6. La nuova dimensione si specifica con l’opzione -s seguita dal valore (con la solita convenzione per le unit` a di misura). ext3. 6. Le quote sono sempre calcolate per ogni singolo filesystem (che deve supportare il meccanismo14 ). e di forzare le operazioni senza eseguire controlli con -f. o L’idea ` che in questo modo esiste un limite di occupazione delle risorse oltre il quale ogni e utente non pu` andare. passando come argomento il dispositivo contenente il filesystem da ridimensionare. un e meccanismo. In pratica.1 Visione generale Una delle risorse principali che gli amministratori di sistema devono gestire ` quella dello spazio e disco.

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. esegue il controllo anche con il filesystem montato in scrittura se il tentativo di rimontarlo in sola lettura fallisce. prende i valori: vfsold (per la versione 1). forza il controllo delle quote senza rimontare il filesystem in sola lettura. 15 . un esempio di utilizzo di queste opzioni ` il seguente: e /dev/vg/home /home ext3 defaults.user e quota. rpc (per le quote su NFS) e xfs (per le quote su XFS).user e aquota. richiede l’esecuzione del controllo per le sole quote degli utenti.group non sono aggiornate il meccanismo delle quote non funziona in maniera corretta.group se si usa la versione 2. si pu` forzare l’esecuzione se il filesystem non ` montabile in o e sola lettura usando l’opzione -m.4). Il comando costruisce una tabella con dell’uso corrente del disco e la confronta. se infatti le informazioni di aquota. a meno di non usare l’opzione -c (nel qual caso detti file non vengono letti) con i dati memorizzati su aquota. 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.user e aquota. Opzione -a -R -F Significato controlla tutti i filesystem montati. controlla le quote nel formato specificato.user e aquota. E in questi file che sono mantenuti i dati relativi all’uso del disco da parte di utenti e gruppi rispettivamente. riporta lo stato di avanzamento delle operazioni. 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. -u -g -c -v -m -M Tabella 6. questo non ` vero per le quote su XFS. LE QUOTE DISCO 251 supportate per compatibilit`. richiede l’esecuzione del controllo per le sole quote dei gruppi. anche se nei nuovi sistemi ` preferibile usare la pi` recente. 16 alcuni HOWTO indicano di crearli vuoti con il comando touch se non sono presenti. 8.group se si usa la versione 1 del supporto ` o aquota.group.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.usrquota. onde evitare delle variazioni dello spazio occupato durante il calcolo. se trova delle incoerenze aggiorna le informazioni. questo viene fatto utilizzando due opzioni specifiche per /etc/fstab: per le quote gli utenti si usa usrquota mentre per quelle dei gruppi grpquota.4: Principali opzioni del comando quotacheck. vfsv0 (per la versione 2).16 se sono assenti infatti la prima volta e che si usa il comando quotacheck verranno creati automaticamente.6.3. ma questo argomento pu` essere o tralasciato con l’uso dell’opzione -a che controlla tutti i filesystem montati (tranne quelli montati via NFS). In genere il comando necessita di montare il filesystem in sola lettura. se specificata con -a non controlla la radice. In generale non ` necessario creare questi file a mano. in detto filesystem infatti le quote sono mantenute nei metadati e non e su file visibili. 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. non legge i file con i dati delle quote esistenti.

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

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

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.7. e le opzioni servono per lo pi` a controllare le informazioni u che vengono stampate. a riporta maggiori informazioni e stampa anche i dati delle quote anche quando non sono usate. in quanto serve a fornire dei rapporti globali sullo stato delle quote nel sistema. Tabella 6. . non risolve i nomi di utenti e gruppi. 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.254 CAPITOLO 6. a adatta le unit` di misura per spazio disco e inode.7: Principali opzioni del comando repquota. al solito per e l’elenco completo ed i dettagli di funzionamento del comando si pu` fare riferimento alla pagina o di manuale. elenca i dati delle quote utente. 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. elenca i dati delle quote gruppo. 6. stampa le informazioni in modalit` succinta.

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

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

secondo quanto riportato in tab.1. Di norma ` qui che sono e definiti i protocolli di funzionamento dei singoli servizi (telnet. Viene in genere realizzata u connettendo su una backbone o su uno switch centrale diversi hub o switch periferici.7. cos` da avere strade diverse per il flusso dei dati.1. e-mail) che vengono offerti sulla rete. definiti e sincronizzati gli scambi di dati. il pi` famoso dei quali. crea e termina sessioni di comunicazione. per rendere possibile la comunicazione attraverso un cos` variegato insieme ı di mezzi sono stati adottati una serie di protocolli. Si indicano come esempi di questo livello le applicazioni per l’uso di telnet e FTP. la cifratura. Presentazione Il livello di presentazione fornisce le funzionalit` di codifica e conversione dei dati usate a dal successivo livello di applicazione. gli schemi di compressione. tree 257 ` E una rete che integra in forma gerarchica pi` reti a stella. 7. FTP. o i cosiddetti fabric switch. 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. come la rappresentazione dei caratteri. . ` E in genere la modalit` in cui vengono create le reti WAN. a in cui.1. in questo modo ogni protocollo di un certo livello realizza le sue funzionalit` basandosi su a un protocollo del livello sottostante.1: I sette livelli del protocollo ISO/OSI. 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. con un traffico pi` u ı u distribuito.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. video. ` il protocollo TCP/IP. ` E una rete che comporta la presenza di diversi percorsi possibili per la comunicazione. ` a questo livello e che sono impostati. 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. alle comunicazioni via satellite o via radio. 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). si effettuano connessioni incrociate a fra pi` switch. che permette di comunicare con latenze inferiori. per ottimizzare la velocit` di trasmissione. Sessione Il livello di sessione gestisce. strutturato in sette livelli. e Una caratteristica comune dei protocolli di rete ` il loro essere strutturati in livelli sovrape posti. i formati dei dati (audio. alla fibra ottica. immagini). UN’INTRODUZIONE AI CONCETTI FONDAMENTALI DELLE RETI. mesh 7.

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

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

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

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

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

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

pur essendo espresso a sempre come un singolo numero. Per proseguire nell’analogia si pensi alle linee telefoniche interne di una ditta. Questo ` fatto attraverso altrettanti indirizzi IP. solo che in questo caso il numero di cifre (binarie) che e si usano per il prefisso non ` fisso.0.0. 7.255 — 239. e Come per i telefoni ad un numero pu` corrispondere solo un telefono. 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. (riportate tab. .255. che ha delegato la gestione di parte delle assegnazioni ad altre organizzazioni regionali (come INTERNIC.0.168.0 0.255. gli indirizzi di rete erano stati organizzati in classi.0 240. un esempio di questa notazione potrebbe essere qualcosa del ` tipo di 192.0. per consentire dispiegamenti di reti di dimensioni diverse.0.0. e o Per questo motivo. si ` soliti e e esprimere il numero che costituisce l’indirizzo IP usando una apposita notazione che viene chiamata dotted decimal.0.0 Tabella 7. 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. vedremo pi` avanti come ad uno stesso computer (o a una stessa u u interfaccia di rete) possono essere assegnati pi` indirizzi IP. Questo meccanismo significa in realt` che ogni indirizzo su Internet. Originariamente. e che ` lo stesso per tutti i telefoni di quell’area. L’assegnazione degli indirizzi IP ` gestita a livello internazionale dalla IANA (Internet Assie gned Number Authority).255. 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.0 255. Dato che Internet. quando si configura una macchina.168. e pu` anche essere cambiato a seconda dei casi. E attraverso questo numero il vostro computer viene identificato univocamente su Internet. l’indirizzo di rete.111.255 — 247.0.255 — 223. usate per parlare all’interno degli uffici.255.255.11. anche queste devono venire idene tificate.255 — 191.255. quando lo si scrive. visto che scrivere i numeri in formato binario ` poco comprensibile.255.0.0 240. deve essere e completato da tanti zeri quanti sono necessari a raggiungere la dimensione di 32 bit degli indirizzi normali. u Di solito.255. ` un insieme di reti. Classe A B C D E Intervallo — 127. Questa viene espressa con la solita notazione dotted decimal.264 CAPITOLO 7. un possibile indirizzo di rete ad esso relativo potrebbe essere 192.0.0.0 128. il numero IP completo e ` quello che identifica il singolo telefono. la cosa ` vera anche per le reti private non connesse direttamente e ad Internet (come quelle che collegano i computer di un ufficio).3). come dice il nome. usando un numero decimale per ciascuno dei quattro byte che compongono l’indirizzo.0 255.0.0.255.255 Netmask 255.255. ma ad un telefono possono o essere collegati pi` numeri.0. che corrispondono alla parte comune e di tutti gli indirizzi delle macchine sulla stessa rete. e La differenza con i prefissi ` che un indirizzo di rete IP. nei fatti ` composto da due parti. Un prefisso ` l’equivalente dell’indirizzo di rete.255.111.0 192. che prende la parte inferiore del numero e che identifica la macchina all’interno della vostra rete.255. separati da un punto. Come per il telefono di casa ogni computer connesso ad Internet viene sempre considerato come facente parte di una rete.255.0).3: Le classi di indirizzi IP. RIPE NCC e APNIC). La situazione dunque ` ancora analoga a quella di un numero di telefono che ` diviso in e e prefisso e numero locale. 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).0.0.0 224. per venire incontro alle diverse esigenze. per riprendere il precedente esempio di numero IP.255. L’AMMINISTRAZIONE DI BASE DELLE RETI ` un numero binario (quindi espresso con soli 0 e 1) ed ha una dimensione fissa di quattro byte.

7 questo permette di usare direttamente le capacit` di broadcasting di alcune interfacce di rete che supportano a questa modalit` di comunicazione.0.2. che permette di indicare la parte di rete appendendo all’indirizzo l’indicazione del numero di bit riservati alla rete. verso pi` stazioni riceventi. questi indirizzi sono riservati per e ogni rete e non possono essere usati per un singolo host.0.5: Specchietto riassuntivo della struttura degli indirizzi IP. seguendo queste tabelle. 4 . 6 in realt` gli indirizzi disponibili con una classe A sono 254.7 Indirizzo Indirizzo completo Maschera di rete Porzione di rete Porzione del nodo Indirizzo di rete Indirizzo broadcast Esempio 192. ` quello di broadcast. questo perch´ l’indirizzo .11/24. nel caso in esempio si avrebbe allora 192. permettendo cos` di accorpare ı ` pi` classi C su un’unica rete o suddividere una classe B. dato che non ` detto che la rete in questione sia ancora classificabile o e in questo modo. .4: Uno esempio di indirizzamento CIDR.111.4).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. 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. La suddivisione riportata in tab. 7. una rete di classe B comprende 65536 (cio` 216 ) indirizzi e ed ha una netmask pari a 255. la classe D ` destinata all’ancora non molto usato multicast.0. 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.111.11 255. come vedremo fra poco. a 4 . mostrato insieme agli altri visti finora nello specchietto in tab. che lo emette una volta sola. per utilizzare questa comunicazione occorre operare su uno di questi indirizzi. n bit CIDR net Id 32 − n bit host Id Tabella 7. u e e ed alcuni programmi cercano di calcolare automaticamente la netmask a seconda dell’IP che gli date.0 192.0.168. 265 Le classi usate per il dispiegamento delle reti di cui ` attualmente composta Internet sono le e prime tre.0 ` riservato per indicare a e e la rete.255.255.168.255 Tabella 7. mentre la classe E ` e e riservata per usi sperimentali e non viene impiegata. ottimizzando quindi la u trasmissione dati da uno verso molti. IL TCP/IP.111. 7.168. che viene utilizzato da una singola stazione quando vuole inviare un messaggio contemporaneamente a tutti gli altri nodi presenti su quella rete.111.168.168.255.7.0 e una rete di classe C comprende 256 (cio` 28 ) indirizzi e ed ha una netmask pari a 255. con un conseguente enorme spreco di numeri (si passerebbe da 256 a 65536). 5 e questo alle volte pu` creare problemi. 7. in cui si ` riassunta la e struttura di un indirizzo IP di esempio. In ogni rete Internet infatti esiste un indirizzo riservato.5. E stata cos` introdotta anche una nuova u ı notazione. che per convenzione ` sempre ottee nuto mettendo ad 1 tutti i bit della porzione dell’indirizzo riservata all’host.111.255. ma la si trova riportata spesso. mentre l’indirizzo .0 192.0.11 192. Oggigiorno questa divisione in classi non ` e pi` molto usata (perch´ come vedremo fra poco ` inefficiente).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.255. Per concludere questa panoramica sugli indirizzi occorre accennare all’indirizzo di broadcast.255.

0 — 172. cio` e e per realizzarlo si mettevano effettivamente in collegamento elettrico i due telefoni con una serie di selettori.1. di solito le si associa l’indirizzo 127.0. 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).255. anche se poi i programmi usano delle funzionalit` a .168. Classe A B C Intervallo 10.0.168. che anch’essa avr` un suo numero IP.0.0. cio` per le reti interne che e non devono mai essere connesse direttamente ad internet. ed in quello che succede una volta usciti da essa. 7. 16 reti di classe B e 256 reti di classe C. 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. i loro indirizzi sono riportati in tab.255 192.255 172. cio` nella parte relativa o e alla propria rete locale.6.255.16. Si tratta di una interfaccia assolutamente virtuale che effettua la comunicazione in locale facendo passare i dati attraverso il kernel.6: Le classi di indirizzi IP riservate per le reti private. questa ` la e e macchina che nella vostra rete fa da ponte verso l’esterno. per questo quando installate una macchina in una rete locale dovete sempre sapere l’indirizzo del gateway. e In questo caso il problema si pu` sostanzialmente dividere in due. L’argomento del routing ` uno dei pi` complessi nella gestione delle reti. quando un programma che usa i socket TCP/IP deve fare riferimento a se stesso. cio` non e e esiste mai una connessione diretta fra due nodi. in inglese routing. e per questo viene anche usato per indicare la cosiddetta default route.0 che viene usato per indicare un indirizzo e generico non specificato. L’AMMINISTRAZIONE DI BASE DELLE RETI presenti (ad esempio quelli che permettono di scoprire quali sono gli indirizzi realmente attivi). Infine l’RFC 1918 riserva una serie di indirizzi per le reti private.0.2. Lo si usa anche per indicare l’insieme di tutti gli indirizzi possibili.0 che viene associata ad interfaccia di rete virtuale. 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. Infine alcuni indirizzi sono trattati a parte e considerati riservati. si tratta di una rete di classe A. a Una volta usciti dalla rete locale la situazione si complica molto.266 CAPITOLO 7. 7.0.0 — 192. ed in questo caso l’analogia telefonica non ci aiuta. perch´ il collegamento telefonico nasce a commutazione di linea.255.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. ad esempio dalla classe A ` e stata rimossa l’intera rete 127.255 Tabella 7. che viene utilizzato per comunicare.0 — 10.0. interna al singolo nodo.255. senza influenzare la rete. In una rete locale il ruolo del centralino ` svolto dal cosiddetto default gateway. 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. senza doversi indirizzare a ciascuno di essi individualmente. indicata dalla sigla lo.31. occorre infatti sapere anche come poterci arrivare.0.0.0. Un altro indirizzo speciale ` l’indirizzo nullo 0. 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. mentre internet ` progettata per funzionare a commutazione di pacchetto. ma in questo caso deve essere proprio specificato l’indirizzo completo della macchina che fa da ponte. per poter uscire e telefonare all’esterno occorre in qualche modo passare dal centralino. il localhost. cio` la destinazione verso e cui inviare tutti i pacchetti con una destinazione al di fuori della rete locale. Una volta che si sappia la destinazione finale infatti.

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

su cui si pu` trasmettere o ascoltare. mentre quando si vuole leggere una pagina web se ne user` un’altra. come vedremo in sez. e non da una applicazione ad un’altra. ma dal fornitore del servizio telefonico. 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 ). Questo avviene perch´. 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).1.6. la porta 80 al web. per cui in certi casi si potranno avere comunque dei conflitti.3 un elenco che associa un numero di porta ad un servizio noto viene mantenuto nel file /etc/services. Si tenga conto per` che il concetto di porta ` spesso fuorviante. ı 10 9 . ed IP (quello e e dei numeri) serve solo a gestire la trasmissione dei pacchetti attraverso una rete. cio` di un secondo numero che in sostanza permette e di identificare le due applicazioni che stanno usando il protocollo. 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. ed a i client di posta cercano un server sulla porta 25. ` stato e introdotto questo concetto delle porte. in cui oltre all’invio dei pacchetti si cerca di assicurare pure una comunicazione affidabile. mentre con internet potete sia ascoltare che trasmettere. avviando un o demone che si metta in ascolto. se su di essa non c’` un server. TCP/IP ` un insieme di protocolli. ma la standardizzazione ha portato ad associare alcuni numeri a dei servizi specifici (la porta 25 alla posta elettronica. ed un canale alla volta. in quanto con porta si intende o e una qualche forma di accesso permanente che pu` essere aperto o chiuso. ´ E per questo motivo che nei protocolli del livello di trasporto. 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. pari a 216 − 1. 7. che serve solo ad inviare pacchetti da un computer all’altro. alcune di queste porte per` sono state usate tradizionalmente o da altri servizi molto diffusi. Cos` quando si vuole inviare della posta elettronica si comunicher` attraverso una di queste ı a porte.). Dal punto di vista del TCP/IP si potrebbe usare un numero di porta qualsiasi. In un sistema Unix le prime 1024 porte sono dette riservate in quanto solo l’amministratore pu` installarci sopra dei servizi. attraverso l’opportuno protocollo di applicazione. 11 per questo non sar` mai possibile sfondare una “porta” sul vostro computer. 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 un altro telefono. usando uno scambio di a dati specifico che va a costituire l’ultimo livello (quello di applicazione) della struttura mostrata in fig. L’AMMINISTRAZIONE DI BASE DELLE RETI In realt` non ` neanche cos` perch´ nel caso della filodiffusione il segnale non viene da a e ı. Per poter effettuare uno scambio di dati fra due programmi che comunicano via rete. 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. come UDP e TCP.268 CAPITOLO 7. potete solo ascoltare. come spiegato. Al di sopra della porta 1024 qualunque utente pu` mettere un suo servizio. 7. i dati relativi al servizio associato. dato che in genere i browser cercano i siti sulla porta 80. 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. 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. 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. ecc. Bussando ad una porta (o sintonizzandosi su quella frequenza a seconda dell’analogia che si preferisce) si potranno scambiare. se non siete in ascolto. per questo sarebbe pi` chiaro parlare u di frequenza. a e cos` come non possono mandarvi offese sulla radio. da e verso qualunque altro telefono e su quanti canali volete9 in contemporanea.

a Il procedimento per la ricompilazione del kernel ` affrontato in sez. Networking options e Network device support. verso lo stesso IP e la stessa porta di destinazione. nel qual caso dovrete cercare nelle relative sezioni. In questa sezione per` affronteremo solo la configurazione di base della rete.3 La configurazione di base La configurazione della rete ` una materia alquanto complessa e di una vastit` impressionante.1 Il supporto nel kernel Come mostrato fig. sono altrettanto numerose e complesse le configurazioni che si possono affrontare.3 o a meno che non abbiate una gigabit o qualche scheda WAN. . u e ed esamineremo sia i comandi di base con i quali si effettua la configurazione manuale della rete. 7. 7.4. e non dei vari servizi che o possono essere realizzati su di essa. 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. u Nella seconda parte si attivano invece i driver per le varie schede ed i protocolli di basso livello. 7. 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. Questo comporta che ogni client viene sempre contattato (dai pacchetti di risposta) su una porta specifica (quella sorgente). o u Nelle prima delle due opzioni segnalate con un asterisco in fig.1 ` il kernel che fornisce il supporto dei protocolli necessari (per i livelli di e trasporto. e spesso molto complessi. che i file di configurazione usati nel procedimento di avvio per la configurazione automatica dell’interfaccia. che sono la base su cui tutto il resto ` costruito.3. o vi necessiti un protocollo o una funzionalit` non previsti nel kernel corrente vi a occorrer` ricompilare il kernel12 .1. ` necessario intervenire qui solo se si vuole supportare e e un altro protocollo (come IPX o Appletalk).1. o attivare alcune opzioni specialistiche (su cui eventualmente torneremo pi` avanti).7. i servizi che operano sulla rete. In particolare vedremo come effettuare le varie impostazioni relative all’uso e alla gestione dei tre livelli pi` bassi del protocollo TCP/IP.3. 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. 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. 5. e a In particolare essendo numerosissimi. come si pu` vedere dalla schermata del men` di configurazione riportata in fig. LA CONFIGURAZIONE DI BASE 269 stesso IP sorgente. 7. la differenza ` che in genere questa viene scelta automaticamene te dal kernel quando il client crea la connessione. 7. 5. si veda sez. In tal caso la difficolt` maggiore sar` quella di selezionare il modulo che corrisponde alla a a vostra scheda.4 si possono attivare i protocolli di rete di alto livello (sopra il collegamento) necessari. di rete ed il collegamento fisico) per il funzionamento della rete e delle interfacce di comunicazione. In genere tutte le distribuzioni provvedono dei kernel standard che sono gi` predisposti a a supportare tutto quello che serve nei casi pi` comuni. Le sezioni relative alla rete sono due. Di solito per il TCP/IP tutto quello che serve ` attivato di default. 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. Nel caso il vostro hardware non sia u supportato. ma solo sulle opzioni di compilazione che ci interessano. per cui non ci e dilungheremo su questa procedura.

come illustrato in sez.html) che di solito si trova anche nella documentazione allegata con la vostra distribuzione. Il comando che vi consente di fare questo ` ifconfig. 7. 222 potete verificare come la scheda di rete sia una Realtek 8139. | | <M> modularizes features.4: Schermata di configurazione per la compilazione del kernel.3. 5. Se non avete idea di quale sia la scheda che avete sulla macchina.conf. <?> for Help. | | Highlighted letters are hotkeys.4.1.16 Configuration --------------------------------------------------------------------------+------------------------------. Nel caso abbiate optato per un supporto modulare dovrete inoltre configurare opportunamente il file /etc/modules. ma ` senz’altro meglio andare o e a comprarsi una scheda pi` recente u 14 . cos` da specificare in maniera univoca a quale interfaccia viene associata una certa scheda. 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. nell’esempio riportato a pag. che permette anche di e si suppone che abbiate una scheda PCI.4. Press <Esc><Esc> to exit. potete sempre ricorrere al comando lspci14 . <Enter> selects submenus --->.org/HOWTO/Ethernet-HOWTO. 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). <N> excludes. Pressing <Y> includes.tldp.Main Menu -------------------------------+ | Arrow keys navigate the menu. L’AMMINISTRAZIONE DI BASE DELLE RETI Linux Kernel v2. e nel quale ` riportata una lunga lista di e schede supportate. 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. che permette di associare un modulo ad una specifica interfaccia. Inoltre se lo ritenete opportuno potete far caricare i moduli relativi alle interfacce di rete all’avvio della macchina. questo viene fatto indicando i rispettivi nomi nel file /etc/modules. | | 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. le opzioni di configurazione per il supporto di rete sono indicate con un asterisco bile su http://en.270 CAPITOLO 7. per le schede ISA si pu` usare pnpdump.

255.7: Stati riportati nella terza riga del comando ifconfig e relativo significato.168.1.168.0.1 Bcast:192.1. e a L’interfaccia ` in modalit` loopback.168.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. se invece si vuole lo stato di tutte le interfacce esistenti.1 Bcast:192. la terza (lo) ` una interfaccia logica.255 Mask:255.255.255 Mask:255.168.0 b) Interrupt:9 Base address:0x6000 Link encap:Local Loopback inet addr:127. comprese quelle non attive.255. occorre usare l’opzione -a. e a Tabella 7.0 b) TX bytes:0 (0. due di esse (eth0 e eth1) corrispondono a due schede di rete ethernet.2 GiB) TX bytes:1385547296 (1. Se usato senza opzioni e senza specificare una interfaccia il comando mostra lo stato di tutte le interfacce attive.168.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. Tutto quello che serve nella maggior parte dei casi sono soltanto le opzioni che permettono di attivare e disattivare una interfaccia.6 GiB) TX bytes:2524425895 (2.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. e che deve essere sempre attivata anche per i computer non connessi in rete.7. la e cosiddetta interfaccia di loopback che viene usata per le comunicazioni locali. Come si vede nell’esempio sulla macchina sono presenti 3 interfacce di rete.3. e Non ` attivato il protocollo ARP per l’interfaccia. Valore UP NOARP RUNNING MULTICAST BROADCAST POINTOPOINT LOOPBACK Tipo indirizzo L’interfaccia ` attiva.0.255.0.234 Bcast:192.255 Mask:255. Si pu` notare come il comando riporti le varie caratteristiche delle singole interfacce: nella o .0. e L’interfaccia ` in modalit` broadcast.168.168.168. e L’interfaccia sta funzionando.2 GiB) eth1 lo Se si specifica come argomento il nome di una interfaccia il comando mostra lo stato solo dell’interfaccia specificata.255.0.1 Mask:255. Sull’interfaccia ` attivato il multicast.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.3 GiB) Interrupt:10 Base address:0x8800 eth0:0 Link encap:Ethernet HWaddr 00:01:02:2F:BC:40 inet addr:192. e a L’interfaccia ` in modalit` punto-punto. 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).255. Un risultato possibile ` il seguente: e [root@havnor root]# ifconfig eth0 Link encap:Ethernet HWaddr 00:01:02:2F:BC:40 inet addr:192. LA CONFIGURAZIONE DI BASE 271 impostare le varie caratteristiche delle interfacce di rete.0.

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

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

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

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

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

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

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

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

22 .0.0.255 NETWORK=192. il file viene letto dallo script di avvio che usa queste variabili di shell per effettuare la configurazione. e ce n’` uno per interfaccia con un nome del tipo ifcfg-iface.0. o comunque per eseguire una serie di e controlli.168. 7.255.168.1 Il comando ping Una volta configurate le interfacce il primo controllo da effettuare per vedere