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

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

104 CAPITOLO 2. LA SHELL E I COMANDI .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

LA CONFIGURAZIONE DEI SERVIZI DI BASE .146 CAPITOLO 3.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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). . 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). 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. 7. altrimenti resteranno attivi. e poi dialogare con i singoli dispositivi su di esse presenti. 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. al di l` dell’accesso ai dispositivi a finali secondo l’interfaccia classica per cui in un sistema unix-like tutto ` un file. 5. 5.4 La gestione di interfacce e periferiche Tratteremo in questa sezione i programmi e le funzionalit` disponibili per la configurazione di a una serie di interfacce hardware di cui i moderni computer sono dotati (escludendo le interfacce di rete che saranno trattate a parte in sez. e viceversa. dimensioni. potranno e poi essere acceduti attraverso l’interfaccia generica illustrata in sez. sono comunque disponibili innumerevoli programmi in grado di automatizzare il compito. in modo da poterne utilizzare le capacit` specifiche. 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).1.3) per le quali.) che software (i comandi che la CPU deve dare per comunicare con l’interfaccia ed i dispositivi presenti sulla stessa). 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. Questi ultimi. a In Linux il supporto per queste interfacce ` ovviamente fornito direttamente dal kernel. anche se non sono previsti fra quelli che verrebbero avviati se si andasse direttamente in quel runlevel. 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.4.2. specifiche dei segnali elettrici ecc. e che predispone tutta l’infrastruttura software con cui ` possibile leggere i dati relativi a dette e interfacce. per l’uso i quali rimandiamo alle rispettive pagine di manuale. u Una interfaccia di espansione in sostanza non fornisce direttamente delle funzionalit` finali. 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. Entrambe queste interfacce definiscono uno standard sia hardware (consistente in piedinatura. 1.216 CAPITOLO 5. a che sono specifiche del singolo dispositivo che si pone su di essa.d per Debian o chkconfig per RedHat. e Si noti come la presenza dei servizi presenti in un determinato runlevel possa dipendere da come si ` arrivati ad esso. Come accennato attivare o disattivare un servizio su un certo runlevel ` semplicemente e questione di creare un link simbolico con l’opportuna sigla iniziale. come update-rc.1 Gestione delle interfacce di espansione Una delle caratteristiche essenziali dell’architettura hardware dei computer moderni ` quella di e disporre di opportune interfacce di espansione in cui inserire delle schede dedicate che permettono l’uso di nuove periferiche. seguendo il criterio fondamentale dell’archietettura di un sistema unix-like per cui tutto ` un file.

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

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

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

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

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

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

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

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

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

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

e rimangono sostanzialmente solo dischi e nastri per l’uso professionale). otterremo al suo interno due file. funzionalit` che pu` essere utile ı a o qualora si disponga di periferiche hot-swap che possono essere estratte a caldo dal bus76 . I ed L sono la solita quadrupletta di numeri che identifica il dispositivo. channel 0. channel 0. 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.4. in cui il nastro non viene riavvolto quando arriva alla fine). id 1. un nome equivalente. 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. lun 0 Attached scsi CD-ROM sr1 at scsi0.5. si possono cos` rimuovere e aggiungere dispositivi. id 0. Ovviamente un dispositivo potr` essere rimosso solo se non ` al momento utilizzato. anch’esso utilizzato. che ` di norma a carico degli utenti. Un secondo aspetto da tenere presente nel caso di dispositivi SCSI ` che in genere il cablaggio e degli stessi ` pi` delicato. lun 0 227 i CD infatti vengono acceduti con i dispositivi /dev/srN dove N ` un numero progressivo a partire e da 0. a 77 si avrebbe lo stesso risultato nel caso si installassero pi` schede con lo stesso controller. inoltre la presenza di diversi standard sullo stesso bus pu` portare a degrado di prestazioni. (che in Debian fa parte del pacchetto pcmcia-cs).0. LA GESTIONE DI INTERFACCE E PERIFERICHE Attached scsi CD-ROM sr0 at scsi0. 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. u 76 . quando utilizziamo oltre al disco fisso anche una penna USB. C. a e Le altre informazioni presenti nella directory /proc/scsi sono una directory per ciascuna interfaccia utilizzata. 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. Una caratteristica speciale del file /proc/scsi/scsi ` che questo pu` essere acceduto anche e o in scrittura. ` /dev/scdN.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. Un programma storicamente utilizzato per ricavare le informazioni relative ai dispositivi SCSI ` scsi_info. la presenza di due dispositivi con lo stesso ID infatti li e rende entrambi inutilizzabili. contenente un file con nome corrispondente al numero di ciascun host adapter number presente con quella interfaccia. Infine occorre tenere sotto controllo l’allocazione degli o ID. corrispondenti alle due istanze della stessa interfaccia viste come host adapter diversi. e in quest’ultimo caso. con il nome del relativo modulo di kernel. alcuni bus infatti devono essere opportunamente terminati per cone u sentire una corretta trasmissione dei segnali. 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.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 a Uno dei problemi pi` che si possono avere utilizzando altre porte oltre quelle standard ` u e che queste possono non essere configurate correttamente. e prevedono appunto una comunicazione via cavo estremamente semplice (e di breve distanza) basata sull’invio dei dati lungo una linea di trasmissione. il principale ` scsiinfo che permette di interrogare un dispositivo (passato e come argomento) per ricavarne tutta una serie di propriet` (per l’elenco completo e le relative a spiegazioni si consulti la pagina di manuale). Tabella 5.3 Gestione delle interfacce seriali Le interfacce seriali sono una delle prime interfacce create per la comunicazione fra computer. utilizzando i comandi da inviare sul file /proc/scsi/scsi illustrati in precedenza. /dev/ttyS3. IRQ: 3 78 quelli esterni. 5. ` invece da segnalare l’uso dell’opzione -l. usate per lo pi` dai provider per gestire i a u modem). u Data la loro presenza fin dalle origini dell’architettura dei PC. A causa delle limitazioni dell’architettura originale dei PC. 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`.16.228 CAPITOLO 5. Questo prende come primo argomento il file di dispositivo da configurare (o controllare). da fare e senza specificare un dispositivo. Ci` u o non di meno esse restano le interfacce tipiche con cui vengono gestiti i modem. Interrupt 3 4 3 5 Porta I/O 0x3F8 0x2F8 0x3E8 0x2E8 Dispositivo /dev/ttyS0. che riporta quelli presenti. le configurazioni standard di molte schede madri prevedono due interfacce. Un caso e di conflitto pi` comune ` invece quello in cui. .sh che esegue una scansione del bus abilitando nuovi dispositivi eventualmente aggiunti dopo il boot. e sia le porte di I/O che gli interrupt utilizzati per le 4 porte e previste dall’architettura sono riportati in tab. che possono essere estese a 4. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Gran parte dei programmi di gestione dell’interfaccia SCSI sono per` distribuiti con il paco chetto scsitools. Per ovviare a questo problema si pu` o utilizzare il programma di configurazione delle interfacce seriali setserial. /dev/ttyS1. Port: 0x02f8. UART: 16550A. in cui un dato viene trasmesso appunto come una sequenza di singoli segnali che traducono direttamente il valore dello stesso espresso come sequenza di bit.16: Risorse e file di dispositivo usati dalle porte seriali. Infine sempre con il pacchetto scsitools viene anche fornito lo script rescan-scsi-bus.78 ed una delle interfacce pi` semplici per collegarsi a dispositivi esterni come router o switch programmabili. per le quali il kernel ` in grado di supportare la condivisione degli interrupt. 5. l’uso contemporaneo di due porte seriali crea problemi se queste condividono la stessa linea di 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. l’assegnazione delle risorse delle porte seriali ` predefinita. 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. insieme ai file di dispositivo con cui si pu` o accedere ad essi. Le seriali sono presenti da sempre sui PC. come i winmodem. ma pure alcuni di quelli interni. /dev/ttyS2.4. come parte di una scheda ISDN o di un modem-fax u e interno. sia che siano modem reali che modem finti. anche se negli ultimi tempi (per la presenza di nuove interfacce pi` veloci come l’USB) tendono ad essere meno presenti.

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

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

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

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

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

AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA .234 CAPITOLO 5.

1.6. e non le prenderemo neanche in considerazione. L’idea di base ` quella di combinare pi` dischi indipendenti di piccole dimensioni per ottenere o e u prestazioni. a 1 235 .Capitolo 6 Amministrazione avanzata del sistema 6. a o 6. dove si descrivevano varie tipologie di disk array. I u dischi sono semplicemente accodati uno sull’altro.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`. 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`. e se uno dei dischi si rompe si perderanno probabilmente tutti i dati. A queste si ` aggiunta poi la notazione RAID-0 per indicare una configurazione e senza ridondanza.1 Introduzione La tecnologia RAID (acronimo che sta per Redundant Arrays of Inexpensive Disks) nasce con un articolo pubblicato nel 1987 a Berkley. 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. 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. Data la modalit` di scrittura comunque si a perderanno solo i dati presenti nel disco rotto. e Questo livello non assicura nessun tipo di ridondanza. cos` che scrivendo in maniera ı lineare prima verr` riempito il primo e poi i successivi.1 In generale comunque ci si suole riferire a queste configurazioni con il nome di livelli. La dimensione dei singoli a dischi in questo caso ` del tutto irrilevante.1 L’utilizzo del RAID Tratteremo in questa prima sezione l’utilizzo dei sistemi RAID. e qualche forma di recupero potrebbe comunque essere possibile. Oggigiorno alcune delle configurazioni previste nell’articolo non sono pi` supportate (se non u in sistemi specializzati). o affidabilit` o quantit` di spazio disco superiori a quelle ottenibili con un qualunque a a disco SLED (Single Large Expensive Drive). con il kernel 2. 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 In questo modo le prestazioni di lettura e scrittura possono essere notevolmente aumentate. in quanto i dati devono essere scritti in contemporanea su pi` dischi. in questo caso dischi dovrebbero avere e la stessa dimensione (anche se non ` strettamente necessario). blocchi di dati continui pi` lunghi della dimensione di una striscia. pertanto basti che sopravviva anche un solo disco dell’array perch´ i dati siano e intatti. ma in questo caso si operer` su un solo disco. e se i dischi sono u veloci ed in numero sufficiente si pu` facilmente saturare la capacit` del bus. se sono diversi la dimensione dell’array sar` quella del pi` piccolo dei a u dischi. Richiede almeno due dischi e per l’array e l’eventuale presenza di dischi di riserva. a differenza di linear. a Come controparte per l’affidabilit` le prestazioni di scrittura di un RAID-1 sono in a genere peggiori di quelle del singolo disco.236 CAPITOLO 6. AMMINISTRAZIONE AVANZATA DEL SISTEMA Questa configurazione non migliora le prestazioni di lettura o scrittura sulla singola operazione. RAID-0 Questo livello ` anche chiamato stripe mode. per cui basta sostituire un disco rotto e per recuperare l’intera funzionalit` dell’array. poi sul secondo. appunto) di dimensione predefinita2 a che vengono scritte in sequenza su ciascuno dei vari dischi che compongono l’array: una striscia sul primo. dato che in questo caso non esistono. per dare inizio ad una ricostruzione immediata dell’array stesso. in quanto la probabilit` che i a e a dischi falliscano tutti insieme ` ancora minore. in quanto vengono eseguite in parallelo su pi` dischi. In questo caso le e operazioni sull’array vengono distribuite sui singoli 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. Come nel caso precedente questo livello non fornisce nessuna ridondanza. Inoltre i dischi devono essere tutti uguali. In questo caso i controller hardware questa viene di norma definita in fase di creazione dell’array. Gli eventuali dischi di riserva vengono utilizzati in caso di fallimento di un disco dell’array. qualora per un caso fortuito venga eseguiti degli accessi a dati posti su dischi diversi. ecc. I dati vengono scritti in parallelo su tutti i dischi che compongono l’array. Con questo livello di RAID si aumenta l’affidabilit` in quanto la probabilit` di a a fallimento dell’array ` equivalente a quella di un singolo disco divisa per il numero e dei dischi dell’array. RAID-1 Questo ` il primo livello che fornisce della ridondanza. fino all’ultimo per poi ricominciare con il primo. 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. o se o a quest’ultimo ` veloce si pu` ottenere una banda passante totale pari alla somma di e o quella dei singoli dischi. 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. ed ` uno dei parametri fondamentali per le e prestazioni dello stesso. ma quando pi` utenti accedono all’array si pu` una distribuzione del u o carico sui vari dischi. 2 . La rottura di un disco comporta la perdita totale di tutti i dati. in quanto ciascun disco ne ha una copia completa. In realt` poi ` ancora minore. 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 questo modo la capacit` totale resta la somma di quella dei singoli dischi.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

. e le opzioni servono per lo pi` a controllare le informazioni u che vengono stampate. in quanto serve a fornire dei rapporti globali sullo stato delle quote nel sistema. non risolve i nomi di utenti e gruppi. Tabella 6. Opzione -a -u -g -n -q -s -v Significato elenca i dati per tutti i filesystem in cui /etc/mtab riporta l’uso di quote. stampa le informazioni in modalit` succinta. a adatta le unit` di misura per spazio disco e inode. elenca i dati delle quote utente. al solito per e l’elenco completo ed i dettagli di funzionamento del comando si pu` fare riferimento alla pagina o di manuale. 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. un sommario delle principali opzioni ` riportato in tab.254 CAPITOLO 6. a riporta maggiori informazioni e stampa anche i dati delle quote anche quando non sono usate. AMMINISTRAZIONE AVANZATA DEL SISTEMA Un secondo comando per il controllo dello stato delle quote ` repquota che per` ` ad uso e oe esclusivo dell’amministratore.7: Principali opzioni del comando repquota. 6.7. elenca i dati delle quote gruppo.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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