Corso Linux

March 25, 2018 | Author: ludostek | Category: File System, Linux, Process (Computing), Operating System, Linux Distribution


Comments



Description

Amministrare GNU/LinuxSimone Piccardi [email protected] Truelite Srl http://www.truelite.it [email protected] 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 [email protected]”, 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: [email protected] 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 il kernel space. che ` l’ambiente a disposizione degli utenti. e 1. Prima di addentrarci nei dettagli dell’amministrazione di un sistema GNU/Linux.Capitolo 1 L’architettura di un sistema GNU/Linux 1. consolidatasi in 30 anni di impiego. cui si demanda la gestione delle risorse hardware. conviene fornire un quadro generale per introdurre i vari concetti su cui si basa l’architettura di questo sistema. agli applicativi. in e cui vengono eseguiti i processi. che ` l’ambiente in cui viene eseguito il kernel. ma non per questo non esiste innovazione.1. che a nel caso vanno dai comandi base di sistema. garantendo una corretta distribuzione fra gli stessi della memoria e del tempo di CPU. che ` basata su quella. muri e tetti). Lo scopo del kernel infatti ` solo quello di essere in grado di eseguire contemporaneamente e molti processi in maniera efficiente. come oggi sempre pi` spesso accade. Questo significa che GNU/Linux ha una architettura di sistema che ` stata pensata fin dall’inizio per l’uso contemporaneo da parte di pi` utenti. Questo comporta e u conseguenze non del tutto intuitive nel caso in cui. e I due ambienti comunicano attraverso un insieme di interfacce ben definite e standardizzate. 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`. esso u venga usato come stazione di lavoro da un utente singolo. come tutti gli Unix. come sistema multitasking e multiutente. le periferiche e i processi. ma anche le case hanno da secoli le stesse a basi architetturali (porte. alle interfacce per l’interazione con gli utenti. consolidata e corretta in decenni di utilizzo. Tutto il resto.1 L’architettura di base.1 L’architettura del sistema. GNU/Linux nasce. 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. Il vantaggio della architettura di Unix infatti ` quello di aver fornito una solida base per la costruzione di e sistemi affidabili ed efficienti. 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). dei sistemi di tipo Unix. Questo si traduce in una delle caratteristiche essenziali su cui si basa l’architettura dei sistemi Unix: la distinzione fra il cosiddetto user space. secondo una struttura come quella mostrata in fig. tanto che ormai ` e divenuto comune il detto che chi non usa l’architettura Unix ` destinato a reinventarla.1. 1. viene realizzato usando processi che eseguono gli opportuni programmi. (le unit` di esecuzione dei programmi). la memoria. dall’autenticazione all’interfaccia utente. Contrariamente ad altri sistemi operativi. come la CPU. 1 . 3. in caso di esaurimento della RAM. Una parte del kernel. cos` che sia impossibile che un processo possa accedere alla memoria di un altro processo.2 CAPITOLO 1. u o 4 questa in realt` non ` un unico sottosistema come le precedenti. ed a ` l’unico a poter accedere direttamente alle risorse dell’hardware. (sigla che sta per Virtual Memory) si occuper` invece di gestire l’uso della memoria disponibile.1). che vengono utilizzate attraverso l’interfaccia fornita dalla libreria di sistema (la GNU C library di fig.4 che e lo standard in questo caso si chiama POSIX.1. I normali programmi invece e verranno eseguiti in modalit` protetta.1. ı Una seconda parte. 1. 3 questo viene in genere realizzato con l’ausilio delle MMU (Memory Management Unit) dei microprocessori. indicata in fig. Torneremo brevemente sull’argomento in sez.1 le cosiddette system call. che tratteremo in sez.2 di [1]. 1. l’eventuale spostamento delle pagine di memoria meno usate su uno opportuno spazio disco (lo swap. La ı memoria virtuale si incarica anche di gestire. specifiche a e 1 . 1. l’user space. 1. una descrizione pi` dettagliata del funzionamento della memoria virtuale pu` essere trovata nella sezione 2.1 come scheduler. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX Figura 1. 2 e oggetto di continui rifacimenti. Questa architettura comporta che solo il kernel viene eseguito in modalit` privilegiata. 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 con l’indicazione generica driver. 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).1 come VM. in un ambiente virtuale.5) evitando di fermare l’esecuzione di un processo per una temporanea mancanza di 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. 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. quella indicata in fig.2. in cui essi vedono a se stessi come se avessero piena disponibilit` della CPU e della memoria. Infine c’` un’ultima parte del kernel. quella indicata in fig. in quanto critico per tutte le prestazioni del sistema. 5. ma un insieme di varie parti diverse.1: Schema della struttura del sistema operativo GNU/Linux. 1. ma oltre quelle dello standard Linux supporta alcune system call ulteriori relative a sue estensioni specifiche. e far` partire il primo processo.5 che a sua volta recupera (in genere dal disco) una immagine del kernel che viene caricata in memoria ed eseguita. 3.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. All’accensione del computer viene eseguito il programma che sta nel BIOS. Questo significa ad esempio che il kernel di per s´ non dispone di primitive per tutta una e serie di operazioni. e si leggono le tabelle delle partizioni dei vari dischi) si incaricher` di montare (vedi sez. 3 si incaricher` di accedere alle periferiche per conto dei programmi.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. Fra questi processi ci saranno ad esempio quelli che forniscono i vari servizi di rete. il bootloader. 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. 1. terminata la fase di inizializzazione (in e cui ad esempio si esegue una scansione delle periferiche disponibili. cos` come quelli che si occupano di chiedere nome e ı password dell’utente che si vuole collegare. leggendo l’originale e scrivendo sulla copia. come vedremo meglio a in sez. 1.2. nel caso di Linux per l’architettura PC i due principali sono LILO e GRUB. su cui torneremo in dettaglio in sez. che vedremo in sez. il cui solo compito ` quello di far partire un sistema operativo.4. 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. quelli che eseguono vari compiti di amministrazione. per il tipo di periferica in questione. come la copia di un file.3).3. 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. o dal lanciare un server web che viene eseguito anche quando nessuno ` collegato e al sistema.1. . per vari motivi.2) il filesystem su cui ` situata a e la directory radice (vedi sez. questo dopo aver fatto i suoi controlli interni esegue la procedura di avvio del sistema. 7 questa infatti viene eseguita usando semplicemente le funzioni che permettono di leggere e scrivere il contenuto di un file. Una volta che il controllo ` passato al kernel questo.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. 5. o vengono. che potrebbe essere sia una shell a riga di comando (argomento che tratteremo in dettaglio in cap.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. 5 questo ` un programma speciale. Nei PC tutto ci` viene effettuato caricando dal o dispositivo indicato nelle impostazioni del BIOS un apposito programma.4. Per convenzione questo a processo si chiama init. Questa. 2) che una delle tante interfacce grafiche disponibili (argomento che riprenderemo in sez.4 e sez.3. 5. in genere e e ogni sistema ha il suo.1. torneremo su questo in sez.2. 5.1. 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.3. 6 in realt` se la cosa ` fatta da console i programmi sono due.1. cui spesso si fa riferimento dicendo che in un sistema unix-like tutto ` un file. 1. il primo chiede l’utente e poi chiama il secondo a e che chiede la password. eseguiti all’interno del kernel.4). 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. 3. permette di definire una interfaccia di accesso generica per qualunque dispositivo. 1. L’ARCHITETTURA DEL SISTEMA. Sono in genere queste distribuzioni (come Debian. init. viene chiamato solo “Linux”. Solaris. cos` come sarebbe inutile da solo il motore di una automobile. dato che questo potr` poi lanciare altri programmi. ed ` a seconda e degli ulteriori programmi che init mette in esecuzione (tratteremo l’argomento in sez. e tutto il resto. e 10 si chiamano cos` i sistemi destinati all’esecuzione di compiti specifici. e si avr`. ecc. detto SysV (da System V. senza avere ı le ruote. sia liberi e u che proprietari. o 9 8 . Per avere un sistema funzionante dal punto di vista di un utente normale infatti occorre avere. 1. a seconda di quanto deciso (ed installato) dall’amministratore. 5. e le librerie di base che essi e tutti gli altri programmi usano. dei ı videoregistratori.3. ed ` l’insieme di questi e del kernel che e costituisce un sistema funzionante. i file. un server web. lo sterzo.3 Alcune caratteristiche specifiche di Linux Bench´ Linux stia diventando il pi` diffuso. il kernel. Per questo al kernel vengono sempre uniti degli opportuni programmi di gestione per il sistema e tutta una serie di programmi applicativi. nati nella tumultuosa e complessa evoluzione che dallo Unix originario della AT/T ha portato alla nascita di una miriade di sistemi derivati (BSD. 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.9 E questo che permette l’avvio del sistema eseguendo un unico programma di inizializzazione come init. o anche gruppi di volontari. Di solito i rivenditori. Mandrake. che a loro a volta ne potranno lanciare degli altri ancora. un a server di posta. non tutti hanno la stessa importanza.4 CAPITOLO 1. a e Questo ci porta ad un’altra caratteristica fondamentale dell’architettura dei sistemi unix-like (ci torneremo in dettaglio in sez. HP-UX. e e in rigoroso ordine alfabetico! nel qual caso si dice che il primo processo ` il padre degli altri. la sua unica peculiarit` infatti ` quella di essere lanciato per primo direttamente dal kernel. ed ` per questo che ` pi` corretto riferirsi all’intero sistema come e e e u a GNU/Linux. che bench´ fondamentale non e costituisce da sola un sistema operativo.4 come in casi di emergenza si pu` lanciare al suo posto una shell. una workstation. quelle che si trovano sui CD con i quali si installa quello che. il kernel da solo sarebbe o e assolutamente inutile.3. come quelli dei telefonini. 1. per andare a costruire quella che viene chiamata una distribuzione. Digital Unix.3) che ` quella per cui qualunque processo pu` a sua volta e o ` avviarne di nuovi. 11 vedremo in sez. l’ultima versione ufficiale) e quelli derivati dal codice sviluppato all’universit` di Berkley. con una semplificazione molto brutale. fino a fornire tutte le funzionalit` richieste per il a funzionamento del sistema.4) che alla fine della procedura di avvio ci si trover` davanti ad un terminale a caratteri o ad una a interfaccia grafica.1. Si tenga presente infine che anche se il kernel tratta tutti i programmi allo modo. IRIX.11 in pratica tutti i sistemi Unix usano questo specifico programma per gestire l’avvio del sistema. ecc. solo per citare i pi` noti) che si innestano tutti in due rami principali. Slackware8 ). si preoccupano di raccogliere in forma coerente i programmi necessari. esistono parecchi altri kernel unix-like. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX Tutto ci` ci dice anche che bench´ costituisca il cuore del sistema. anche tutti i programmi che gli permettano di eseguire le varie operazioni con i dischi. La prima caratteristica distintiva di Linux ` che esso ` stato riscritto da zero. derivano dal progetto GNU della Free Software Foundation: ` su di essi che ogni e altro programma ` basato. Nell’esempio appena fatto abbiamo accennato ad un programma particolare. dato che Linux indica solo una parte. le periferiche. detto BSD (da Berkley Software a Distribution). che ha un ruolo privilegiato in quanto ` quello che si occupa dell’inizializzazione e del sistema quando questo viene fatto partire. 5. quelli u derivati dal sistema sviluppato dalla AT/T. 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. come nel caso di Debian. Il gruppo principale di questi programmi. che a loro volta sono chiamati figli. la carrozzeria. RedHat. AIX. oltre al kernel. u In realt` ` sempre possibile costruire un kernel Linux comprensivo di tutti i moduli che a e servono.2 L’architettura dei file Un aspetto fondamentale della architettura di GNU/Linux ` quello della gestione dei file. in maniera completamente trasparente all’utente) ai pi` svariati tipi di filesystem. ma all’interno del sistema questo viene organizzato in maniera tale da permettere il rapido reperimento delle informazioni memorizzate su questi settori. Lo spazio disco grezzo ` normalmente12 suddiviso in settori contigui e di dimensione fissa. ma comporta un maggiore consumo di memoria (dovendo tenere dentro il kernel anche codice non utilizzato). . Dato che essa gioca un ruolo centrale nel sistema.4) inserendo e o a sistema attivo degli ulteriori “pezzi”. e Inoltre. costringendo al riavvio in caso di necessit` di cambiamenti. questo permette di evitare il ritardo nel caricamento dei moduli al momento della richiesta. per cui inserendo gli opportuni moduli nel sistema e diventa possibile accedere con la stessa interfaccia (e. anche quando queste sono essere sparse qua e l` sul disco. si ha cos` quello che l’utente vede come un singolo a ı file. Un’altra delle caratteristiche peculiari di Linux rispetto agli altri kernel unix-like ` quella e di essere modulare. quello che ` e importante tenere presente da subito ` che la disponibilit` di una astrazione delle operazioni sui e a file rende Linux estremamente flessibile.1.2. 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). e u 12 nel senso che le interfacce hardware per i dischi consentono l’accesso diretto al contenuto di questi settori. per cui l’accesso ai file e alle e e periferiche ` gestito attraverso una interfaccia identica. ottenendo quello che viene chiamato un kernel monolitico (come sono i kernel degli altri Unix).1. a partire da u quelli usati da Windows e dal DOS. 1. e da tutte le altre versioni di Unix. Una seconda peculiarit` di Linux ` quella del Virtual File System (o VFS). una variet` di filesystem superiore a quella di qualunque a a altro sistema operativo. dal MacOS. i moduli. Quello che contraddistingue Linux ` che l’interfaccia per la lettura del contenuto del filesye stem ` stata completamente virtualizzata. esso e deriva direttamente da uno dei criteri base della progettazione di tutti i sistemi Unix. 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). ed in maniera nativa. quello espresso dalla frase “everything is a file” (cio` tutto ` un file). 5. ed una flessibilit` nettamente inferiore in quanto si perde la capacit` di a a poter specificare eventuali opzioni al momento del caricamento.2). u in ogni caso non ` possibile utilizzare i moduli nel caso in cui la funzionalit` da essi fornite siano e a necessarie ad avviare il sistema. a seconda dei casi. le e migliori caratteristiche di ciascuno di essi. 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. L’ARCHITETTURA DEI FILE 5 per cui non ` classificabile in nessuno di questi due rami e prende invece. Questi problemi oggi sono sempre pi` rari. il kernel deve anche essere in grado di gestire l’accesso contemporaneo allo stesso file da parte di pi` processi. 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.2. salvo limitazioni della realizzazione. 5. essendo in presenza di un sistema multiutente e multitasking. 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. dato che attraverso di essa ` in grado di supportare con e relativa facilit`. torneremo in dettaglio sull’interfaccia dei file (e di come possa essere usata anche per altro che i file di dati) in sez. 1. Perch´ e i file diventino accessibili al sistema un filesystem deve essere montato (torneremo su questo in sez. in cui il secondo processo pu` scrivere indietro. Il kernel dovr` poter disporre sia delle interfacce per poter parlare al dispositivo fisico (ad esempio il a supporto SCSI. 1.4). ed o il primo leggere. che definisce una serie di operazioni generiche che sono le stesse per tutti gli oggetti gestiti tramite essa. niente verr` salvato su disco. Come accennato nell’introduzione a questa sezione. che non rientrano bene nell’astrazione e sono gestiti in maniera diversa. n´ fra file sequenziali e ad accesso diretto che c’era nel VMS). attraverso dei file speciali detti device file o file di dispositivo. il Virtual File System. 1. a aprendo una fifo un processo pu` scrivervi sopra ed un altro processo legger` dall’altro capo o a quanto il primo ha scritto.1. 1. e e con la sola eccezione delle interfacce ai dispositivi di rete. che ` e uno dei punti di maggior forza della architettura di un sistema Unix. Cos` o ı si pu` suonare una canzone scrivendo su /dev/dsp. a Altri tipi di file speciali sono le fifo ed i socket. Come esempio consideriamo il caso in cui si voglia leggere il contenuto di un CD. I socket fanno la stessa cosa ma consentono una comunicazione bidirezionale. ognuno di questi fornisce e una funzionalit` specifica. 1.1. ma in un altro senso.3. ma passer` tutto attraverso il kernel a a che consente questa comunicazione come attraverso un tubo. e La possibilit` di avere tutti questi tipi di file speciali ` dovuta al fatto che. e non significano nulla per il kernel.1 Il Virtual File System e le caratteristiche dei file. Un elenco e u dei vari tipi oggetti visti come file dal kernel ` riportato in tab.3 i file sono organizzati sui dischi all’interno di filesystem. indipendentemente dal nome e dal contenuto. 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. che quello per poter leggere il filesystem che c’` sopra (ad esempio vfat e per un dischetto Windows e hfs per un dischetto MacOS). 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. leggere direttamente dai settori fisici del disco rigido accedendo a /dev/hda. quando invece per le fifo il flusso dei dati ` unidirezionale. 1. o fare animazioni scrivendo su /dev/fb0 (questo ` molto pi` difficile da fare a mano). sempre descritta in tabella. e e Inoltre le estensioni sono solo convenzioni. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX questo viene fatto usando un disegno specifico nella struttura delle interfacce di accesso. Allo stesso modo se si volessero leggere i dati su un dischetto occorrerebbe sia il supporto per l’accesso al floppy. che di quelle per la lettura dal dispositivo specifico (il e modulo che si interfaccia ai CDROM. ` questo che implementa la filosofia del tutto ` un file. Questi file speciali sono due modalit` per realizzare questa comunicazione. 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.6 CAPITOLO 1. in Linux l’accesso ai file viene eseguito attraverso una interfaccia unificata. che altro non sono che dei canali di comunicazione messi a disposizione dei processi perch´ questi possano parlare fra loro. ad esempio il sistema a pu` accedere alle periferiche. che legge tutti i file di dati alla stessa maniera.1. In realt` il sistema prevede tipi diversi di file. Questo comporta una serie di differenze nella gestione dei file rispetto ad altri sistemi.2.2. IDE o USB). che ` lo stesso che questi siano su SCSI. Come accennato in sez. 13 . 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. 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. se il CDROM ` SCSI). leggere l’output di una seriale direttamente o da /dev/ttyS0. 1: I vari tipi di file riconosciuti da Linux Le principali operazioni sono riportate in tab. legge il contenuto di una directory. in cui compaiono varie propriet` del file. un file speciale che identifica una linea di comunicazione unidirezionale. 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. 1.2. 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. 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. accede alle operazioni di controllo. e il comando mostra l’elenco dei file nella directory corrente. 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 ). Usando l’opzione -l ` possibile e ottenere una lista estesa.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). questa ` la ragione principale della grande flessibilit` di Linux nel supportare i filesystem pi` diversi. un file speciale che identifica una linea di comunicazione bidirezionale. un file che contiene una lista di nomi associati a degli inode. Tabella 1. 7 d l c b p s Tabella 1. legge dal file. Uno dei comandi fondamentali per la gestione dei file ` ls (il cui nome deriva da LiSt file). 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. si sposta all’interno del file. Funzione open read write llseek ioctl readdir Operazione apre il file.2: Principali operazioni sui file definite nel VFS. u . che pi` specialistiche come lo u spostamento all’interno di un file. un file che identifica una periferica ad accesso a blocchi.1. scrive sul file. ogni oggetto del sistema visto attraverso il Virtual File System definisce la sua versione di queste operazioni. Il Virtual File System ` anche il meccanismo che permette al kernel di gestire tanti filesystem e diversi.2. L’ARCHITETTURA DEI FILE Tipo di file regular file file regolare directory symbolic link char device block device fifo socket cartella o direttorio collegamento simbolico dispositivo a caratteri dispositivo a blocchi “coda” “presa” Descrizione un file che contiene dei dati (l’accezione normale di file). quando uno di questi viene montato ` compito il kernel utilizzare per le varie system call e le opportune operazioni in grado di accedere al contenuto di quel particolare filesystem. 1. un file che identifica una periferica ad accesso a caratteri. 2). Una convenzione vuole che i file il cui nome inizia per un punto (“. la dimensione. Il comando ls ` dotato di innumerevoli opzioni. questi ultimi infatti non sono di norma utilizzati dai comandi di shell. e le principali sono riportate in tab. con l’eccezione dei socket. l’elenco completo ` riportato nella pagina di e manuale accessibile con il comando man ls. senza opzioni viene mostrato solo il nome del file (se esiste) o il contenuto della directory specificata. il numero di hard link (che vedremo in sez. 1. usa il tempo di ultimo cambiamento del file.8 CAPITOLO 1.2. usa il tempo di ultimo accesso al file. che gli consentono di visualizzare le varie e caratteristiche dei file. 1.2. ma vengono creati direttamente dai programmi che li usano (il caso pi` comune ` X window). usualmente riportata in byte.2).2).2. a ma solo una convenzione usata e rispettata dai vari programmi in user space. Il sesto campo ` il tempo di ultima modifica del file e l’ultimo campo il nome del file. Il secondo campo indica il numero di hard link al file (su questo torneremo in sez. Si noti infine come in un sistema unix-like non esista un tempo di creazione del file. Il tempo mostrato di default da ls ` il tempo di ultima modifica (o modification time) che e corrisponde all’ultima volta che ` stato modificato il contenuto di un file. Altre caratteristiche sono i tempi di ultimo e accesso. 1. per questo tali file sono detti invisibili. mentre il resto della colonna indica i permessi del file. delle quali il tipo ` solo una.4. scrive il numero di inode (vedi sez. Si badi bene che questo e tempo riguarda solo il contenuto del file. 1.3: Principali opzioni del comando ls. e non segue i link simbolici. Le opzioni sono moltissime.2. 15 . Il comando prende come parametro una lista di file o directory. L’opzione -l permette di mostrare una lista in formato esteso in cui vengono riportate molte informazioni concernenti il file. 1. anche questo secondo la notazione riportata nella terza colonna della stessa tabella.1. Tabella 1.2).2).4. secondo una notazione su cui torneremo in sez. modifica e cambiamento (su cui torneremo fra poco).3. non esiste pertanto un comando u e che permetta di crearne uno in maniera esplicita. 1. si noti come la prima lettera in ciascuna riga indichi il tipo di file. e come il primo carattere della prima colonna indichi tipo di file. 1. Opzione -l -a -i -R -c -u -d Significato scrive la lista in formato esteso.”) non vengano riportati nell’output di ls. Il quinto campo indica la dimensione. 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. 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. esegue la lista ricorsivamente per tutte le sottodirectory. 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). 1. mostra solo il nome e non il contenuto quando riferito ad una directory. 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. le informazioni relative a permessi di accesso e proprietari del file (che vedremo in dettaglio in sez. mostra i file invisibili. 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.4. Abbiamo visto in precedenza un esempio di questa lista. a meno di non richiederlo esplicitamente con l’uso dell’opzione -a. mentre il terzo ed il quarto campo indicano rispettivamente utente e gruppo proprietari del file (anche questo sar` trattato a in sez. Una delle caratteristiche di Linux rispetto agli altri Unix ` quella di e poter supportare.2.2 L’architettura di un filesystem e le propriet` dei file a Come gi` accennato Linux (ed ogni sistema unix-like) organizza i dati che tiene su disco attraa verso l’uso di un filesystem.2: Strutturazione dei dati all’interno di un filesystem. Figura 1. le dimensioni. possiamo esemplificare la situazione con uno schema come quello esposto in fig. Se si va ad esaminare con maggiore dettaglio come ` strutturate l’informazione all’interno di e un singolo filesystem. ognuno dei quali ha a una sua particolare struttura e funzionalit` proprie. sulle quali ` e bene porre attenzione visto che sono fondamentali per capire il funzionamento dei comandi che manipolano i file e le directory. 1. cos` che il kernel ı pu` trattarle in maniera diversa) il cui contenuto ` semplicemente una lista di nomi a ciascuno o e dei quali viene associato un numero di inode che identifica il file cui il nome fa riferimento. le informazioni che il comando ls fornisce provengono dall’inode. L’unica informazione relativa al file non contenuta nell’inode ` il suo nome. i tempi. da cui si evidenziano alcune delle caratteristiche di base di un filesystem. Come mostrato in fig. 1. Le e a directory infatti non contengono i file. infatti il nome di e un file non ` una propriet` del file. ma semplicemente una etichetta associata ad un inode.1).1. L’ARCHITETTURA DEI FILE 9 1. Per questo non entreremo nei dettagli di un a filesystem specifico. utente e gruppo proprietario. una enorme quantit` di filesystem diversi.2.2.2 si possono avere pi` voci in directory diverse che puntano allo u . i permessi di accesso. ed anche tutti i riferimenti ai settori del disco (i blocchi fisici) che contengono i dati. ma daremo una descrizione a grandi linee che si adatta alle caratteristiche comuni di qualunque filesystem usato su sistema unix-like. grazie al VFS. ma sono dei file speciali (di tipo directory. come il tipo (fra quelli di tab. 1. 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. ed il comando ln dar` un errore se si cerca a di creare un hard link ad un file posto in un altro filesystem. dato che o su un altro filesystem lo stesso numero identificher` un inode diverso. Per questo ogni inode mantiene un contatore che indica il numero di riferimenti (detto link count) che gli sono stati fatti. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX stesso inode. e per cui si pu` fare riferimento solo ad un inode nello stesso filesystem della directory. La differenza rispetto a Windows o MacOs ` che in un sistema e unix-like i link sono di due tipi. anche completamente scorrelati fra loro. o symbolic link (quelli pi` simili ai collegamenti di Windows o u agli alias del MacOS). dal valore numerico riportato nel secondo campo. Cos` potremo creare il file hardlink come hard link al file file visto ı in precedenza con il comando: piccardi@oppish:~/filetypes$ ln file hardlink e adesso potremo verificare che: piccardi@oppish:~/filetypes$ ls -l total 1 brw-r--r-1 root root crw-r--r-1 root root drwxr-xr-x 2 piccardi piccardi prw-r--r-1 piccardi piccardi -rw-r--r-2 piccardi piccardi -rw-r--r-2 piccardi piccardi lrwxrwxrwx 1 piccardi piccardi 1. come permessi. Questo limita l’uso degli a hard link solo a file residenti sul filesystem corrente. che di default crea questo tipo di link. in quanto l’accesso avviene per entrambi attraverso lo stesso inode. Siccome uno stesso inode pu` essere referenziato in pi` directory. nell’esempio del precedente risultato di ls. Per superare questa limitazione sono stati introdotti i link simbolici. ad esempio si ` creato il link simbolico link dell’esempio e precedente con il comando: . questo viene mostrato. 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. tempi di accesso o a contenuto permette di distinguerli. nessuna propriet` specifica. o Il problema con gli hard link ` che le directory contengono semplicemente il numero di inode. che vengono creati usando l’opzione -s del comando ln.10 CAPITOLO 1. un file pu` avere pi` o u o u nomi. 1. pari a 2117. 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. Per creare un hard link basta usare direttamente il comando ln (da LiNk file). 1. 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). 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. come il file link mostrato in precedenza. Il comando generico che permette di creare dei link ` ln che prende come argomenti il file e originale ed il nome del link. di tipo symbolic link.2. Il comando rm prende come argomenti una lista di file da cancellare. con un link simbolico questo errore pu` essere corretto in quanto la cancellazione del link simbolico rimuove o quest’ultimo. ma si limita ad eliminare la relativa voce da una directory e decrementare il numero di riferimenti presenti nell’inode. ed ` pertanto e . a in Linux non ` supportata per la sua pericolosit`. come mostrato nell’esempio precedente. ed il cui contenuto ` il percorso (torneremo sulla e notazione che esprime i pathname dei file fra poco) per il file a cui esso fa riferimento. a non cancella affatto i dati del file. che avr` un suo diverso a inode.4: Principali opzioni del comando ln. ma con un hard link non ` pi` possibile fare questa e u distinzione e la rimozione diventa impossibile.1. forza la sovrascrittura del nuovo file se esso esiste gi`. L’ARCHITETTURA DEI FILE 11 piccardi@oppish:~/filetypes$ ln -s file link In questo caso viene creato un nuovo file. e esegue un backup della destinazione se questa esiste gi`. mentre con l’opzione -f si annulla ogni precedente -i ed inoltre non vengono stampati errori per file non esistenti. ma la funzione usata dal e sistema per effettuare questo compito si chiama in realt` unlink ed essa. ` 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. 1. Una seconda caratteristica dei link simbolici ` la possibilit` di creare dei link anche per e a delle directory. Il comando per la cancellazione di un file ` rm (da ReMove file). e non il file referenziato. e fintanto che il processo non avr` finito i dati resteranno.4. La possibilit` di creare dei link alle directory tuttavia ` estremamente utile. 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. Opzione -s -f -i -d -b Significato crea un link simbolico. ma resta attivo un processo che lo utilizza. La lista completa ` riportata nella pagina di manuale accessibile attraverso e il comando man ln. se si usa l’opzione -i il comando chiede di confermare la cancellazione. per cui anche se si cancella un file da una directory. crea un hard link ad una directory (in Linux questa non ` usabile). a richiede conferma in caso di sovrascrittura. piuttosto che dover spostare tutti i file baster` creare un link simbolico e si sar` risolto il problema. sebbene teoricamente possibile anche per gli hard link. E compito del kernel far s` che quando si o ı usa un link simbolico si vada poi ad usare il file che questo ci indica. che a ` questo punto pu` essere in qualsiasi altro filesystem. anche se solo per a lui. a Tabella 1. 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. Solo quando il numero di riferimenti ad un inode si annulla. Oltre a -s il comando ln prende una serie di altre opzioni le principali delle quali sono riportate in tab. come ci dice il nome. ad esempio a causa di un programma che cerca dei file di configurazione in una locazione diversa da quella usuale. Questa capacit` infatti. i dati del file vengono effettivamente rimossi dal disco dal kernel. infatti qualora si a e voglia accedere ai file in una directory attraverso un percorso diverso. disponibili. lo spazio disco non viene rilasciato. Infine l’opzione -R (o -r) permette la cancellazione ricorsiva di una directory e di tutto il suo contenuto. 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. 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). che corrisponder` pertanto al momento in cui il nuovo file ` stato creato. 1. esegue lo spostamento solo se la destinazione ` pi` vecchia e u della sorgente (o non esiste).5: Principali opzioni del comando mv. fintanto che lo spostamento avviene all’interno dello stesso filesystem.17 Pertanto in o quel caso si potr` notare. e anche se come utente non si pu` danneggiare il sistema.5. 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. Opzione -f -i -u -b Significato forza la sovrascrittura del nuovo file se esso esiste gi`. specie se abbinata con -f. Come per e mv il comando pu` prendere come argomenti o due nomi di file o una lista di file seguita da una o directory. 17 il kernel fornisce delle system call che permettono di cambiare i tempi di ultimo accesso e modifica di un file. usando ls -lc. ` comunque molto semplice spazzare o e via tutti i propri dati. che nel caso ` identica a quella di cambiamento del e nome. l’elenco completo ` riportato nella pagina di manuale. Qualora invece si voglia duplicare un file il comando da usare ` cp (da CoPy file). accesso e cambiamento di quest’ultimo corrisponderanno al momento in cui si ` eseguita l’operazione. Quando per` lo spostamento avviene o fra filesystem diversi viene copiato il contenuto e cancellato il file originario. . i tempi dei file non vengono modificati dall’uso di mv. nel secondo copia tutti file della lista nella directory specificata. esegue un backup della destinazione se questa esiste gi`. accessibile con il comando man rm. cancellando quest’ultimo qualora esista gi`. 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. e Infatti fintanto che si “sposta” un file da una directory ad un altra senza cambiare filesystem. i tempi di ultima modifica. ma non ne esistono per cambiare il tempo o di ultimo cambiamento.12 CAPITOLO 1. a richiede conferma in caso di sovrascrittura. pertanto in teoria dovrebbero risultare modificati anche i tempi di ultimo accesso e modifica. Nel primo caso rinomina il primo file nel secondo. Il comando per compiere questa operazione infatti ` unico e si chiama mv. da MoVe file. Qualora invece si debba effettuare lo spostamento ad un filesystem diverso diventa necessario prima copiare il contenuto e poi cancellare l’originale. questa ` una a e e misura di sicurezza che permette sempre di verificare se un file ` stato modificato. Il comando mv ha due forme. nel secondo caso sposta tutti i file della lista nella directory.16 La lista completa delle opzioni ` e riportata nella pagina di manuale. In realt` il comando a provvede ripristinare questi tempi (come le altre caratteristiche del file) al valore del file originario. che questo ` cambiato e corrisponde al momento dello a e spostamento. Come accennato la struttura di un filesystem unix-like comporta anche una diversa concezione dell’operazione di spostamento dei file. a Tabella 1. Dato che il comando funziona copiando il contenuto di un file su un nuovo file creato per l’occasione. e pu` prendere come argomenti o due nomi di file o una lista o di file seguita da una directory. nel primo caso effettua una copia del primo file sul secondo. che il comando mv pu` usare per ripristinare i tempi precedenti. Le principali opzioni sono riportate in tab. a sempre cancellando eventuali file con lo stesso nome presenti in essa. ma non pu` fare nulla per ripristinare il tempo di ultimo cambiamento. accessibile con il e comando man mv. anche se si cerca di nascondere e le modifiche. tex Formato assoluto relativo Tabella 1. Il comando permette a inoltre di creare degli hard link invece che delle copie usando l’opzione -l e dei link simbolici usando l’opzione -s. Si tenga presente poi che nel caso di link simbolici il comando copia il file indicato tramite il link. senza doverne specificare il pathname completo a partire dalla radice.tex gapil/gapil. Quando si entra nel sistema la directory di lavoro corrisponde alla home 20 dell’utente. i pathname relativi. Questo vuol dire che si possono indicare i file presenti in quella directory direttamente.1) ed e indica appunto la directory a partire dalla quale vengono risolti. la questione pi` avanti in sez. Tabella 1. a esegue la copia solo se la destinazione ` pi` vecchia della e u sorgente (o non esiste). che descrive il cammino che occorre fare nell’albero dei file per raggiungere il file passando attraverso le varie directory. combina le opzioni -dpR. 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. copia ricorsivamente tutto il contenuto di una directory. per quel processo. accessibile attraverso il comando man cp. 1. Questa directory ` una propriet` specifica di ogni processo. 1.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`. crea degli hard link al posto delle copie. Una lista delle principali opzioni ` riportata in tab.2. L’ARCHITETTURA DEI FILE 13 dell’utente che ha lanciato il comando. specificando solo dei nomi semplici.7) in maniera assoluta. identico a -r. ma questo dava per scontati alcuni concetti che in realt` non lo sono affatto.2.6.2. abbiamo sempre fatto l’assunto di operare appunto nella directory di lavoro corrente. partendo dalla cosiddetta directory di lavoro corrente.19 o ed indicando tutte le directory che si devono attraversare. se invece si vuole copiare il link stesso occorrer` usare l’opzione -d. l’elenco completo e ` riportato nella pagina di manuale. Finora. e a che viene ereditata dal padre alla sua creazione (questo argomento ` trattato in sez. permessi e proprietari del file. o torneremo sulla struttura dell’albero e sul concetto di radice in sez. copia il link simbolico invece del file da esso indicato. partendo dalla directory radice. 1. segue sempre i link simbolici. a richiede conferma in caso di sovrascrittura. i nomi delle directory sono separati da delle “/”.7: Formato dei pathname assoluti e relativi. Esempio /home/piccardi/gapil/gapil. a La convenzione usata in tutti i sistemi unix-like ` che nomi dei file sono indicati con un e pathname o percorso.1. 1. 1.6: Principali opzioni del comando cp. crea dei link simbolici al posto delle copie. u 19 18 . che risulter` anche il suo proprietario. preserva tempi. Nel primo caso il pathname inizier` con “/”.1 20 ogni utente ha una sua directory personale nella quale pu` tenere i suoi file. che viene chiamata cos` tratteremo o ı. mentre nel a secondo no. 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. esegue un backup della destinazione se questa esiste gi`. Se si vogliono a preservare invece le caratteristiche del file originale occorrer` usare l’opzione -p. o in maniera relativa. e Fino ad ora nel descrivere gli argomenti da dare ai vari comandi che abbiamo trattato. Il percorso pu` essere indicato (vedi tab.3. Negli esempi infatti si sono specificati dei semplici nomi.3. per cui andando su / avremo qualcosa del tipo: ` compito del comando di creazione di una nuova directory far si che esse siano sempre presenti. ad esempio il carattere “~” viene usato per indicare la home dell’utente corrente. Per questo motivo la directory radice viene ad assumere un ruolo particolare. che fa riferimento alla directory in cui l’attuale ` contenuta. che crea la (o le) directory passate come e argomento. se non ` cos` si pu` forzare la creazione di tutte le e ı o directory indicate nel percorso con l’opzione -p. 1. Come per il processo init.”.”) siano invisibili. 1. in forma assoluta o a relativa. e la directory “. All’avvio il kernel monta22 quella che si chiama la directory radice (o root directory) dell’albero. cp.”). cd poi riconosce il carattere “-” che indica il ritorna alla precedente directory di lavoro.”. mentre la si pu` stampare a video con il comando pwd (da o Print Work Directory. mkdir. a meno di non usare l’opzione -R che per` cancella tutto anche il contenuto. ed il filesystem che la supporta deve contenere tutti i programmi di sistema necessari all’avvio (compreso init). anche per la rimozione di e una directory (rm. come su Windows.) riconosce alcuni caratteri speciali.4.1. Come per la creazione ` necessario un comando apposito. usando l’opzione -L si pu` specificare il numero massimo di livelli a cui o scendere.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. che viene indicata con /. Per questo per la creazione di e una directory ` previsto un comando apposito. e come accennato in sez. anche se sono dei file speciali il cui compito ` solo contenere elenchi di nomi di altri file.1. anche la directory radice non ` contenuta in nessuna altra directory23 e. viene montata direttamente dal kernel in fase di avvio. che non ` figlio di nessun altro processo e viene lanciato direte tamente dal kernel. Queste saranno specificate con quello che sar` il loro pathname. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX rectory in cui ci si vuole spostare. tutti i restanti dischi. e sul MacOS o sul VMS. rmdir.1. 23 nel suo caso infatti la directory . il CDROM.. risalendo lo stesso con l’uso della directory “.. 2.2. la shell quando deve passare dei pathname ai comandi che operano su file e directory (come cd.” e “. Un esempio di questa struttura ad albero.2. Si noti come entrambe queste due voci (dato che iniziano per “.4) successivamente in opportune sotto-directory della radice.3. 1. che al contempo ci mostra anche i contenuti delle directory principali. mentre con ~username si indica la home dell’utente username. il floppy ed qualunque altro dispositivo contenente file.. u Come accennato nella sezione precedente le directory sono dei file. pu` essere ottenuto con il comando tree. In questo modo anche con dei pathname relativi si possono fare riferimenti a directory poste in sezioni diverse dell’albero dei file. Di nuovo il comando prende il nome di una o pi` directory vuote da u cancellare. Perch´ il comando abbia successo ovviamente la parte di percorso che deve contenere e la directory che si vuole creare deve esistere. Se chiamato senza parametri o questo comando mostra l’albero completo a partire dalla directory corrente. 2. 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 e che all’inizio di un pathname indica la directory sovrastante quella corrente.. ecc. verranno poi montati (vedi sez. scendendo in tutte le directory sottostanti. Si tenga presente poi che ciascuna directory contiene sempre21 almeno due voci: la directory “. o rimuove solo i file). 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.14 CAPITOLO 1. Se le directory non sono vuote il comando fallisce (vuote significa che non ci deve essere niente a parte le due directory “. e che usata all’inizio di un pathname indica con la directory di lavoro corrente. e e non esistono cio` i vari dischi (o volumi) che si possono trovare in altri sistemi.” che fa riferimento a se stessa. e 22 21 .1. torneremo su questo con qualche dettaglio in pi` in sez. come vedremo in sez. Inoltre. ` identica a . ed indica sempre la radice stessa dato che al di sopra non e c’` niente. ssh-XXBiWARl |-. |-.sbin | |-.root |-.sbin | |-..proc | |-.mnt | ‘-. |-.bin | |-..initrd |-.lib | |-.. |-.vmlinuz -> boot/vmlinuz-2. |-.opt |-.MAKEDEV .usb |-.backups | |-..2.1..1 ..map-2.tmp ‘-.System. |-.var | |-..lib | |-.floppy |-. L’ARCHITETTURA DEI FILE 15 piccardi@oppish:~$ cd / piccardi@oppish:/$ tree -L 2 .GNUstep .2.piccardi |-.boot | |-.4.cdrom |-.bin | |-. |-.src |-. |-..home | ‘-.info | |-.doc | |-.MAKEDEV -> /sbin/MAKEDEV .share | ‘-.spool | ‘-..mail | |-.cache | |-.include | |-.20 .local | |-.lost+found |-...tmp | ‘-.20-idepci .lib | |-.dev | |-..etc | |-.arch ..cpp -> /usr/bin/cpp-2. |-.95 .run | |-..opt | |-.games | |-.log | |-.usr | |-.lock | |-.local | |-.X11R6 | |-. a cui tutte le distribuzioni si stanno adeguando. prevedendo una divisione molto rigorosa che permette una notevole uniformit` anche fra distribuzioni diverse.3. al momento della stesura di questo testo la versione corrente ` la 2.24 Lo standard descrive in dettaglio la struttura dell’albero delle directory e il relativo contenuto.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. 1. 24 . e che pertanto devono essere situati sul filesystem usato per la directory radice. 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). oggi sono usate principalmente per quei sistemi (come gli AMD-64) che supportano diversi formati binari (32 o 64 bit). L’organizzazione dell’albero delle directory ` standardizzata in maniera molto accurata da e un documento che si chiama Filesystem Hierarchy Standard (abbreviato in FHS).8.0 che sono in corso di rilascio. In particolare le directory vengono suddivise sulla base di alcuni criteri fondamentali. 1.3 delle LSB ` utilizzata la e versione 2.2. le /lib alternative sono state usate al tempo della transizione dei programmi dal formato a. file degli utenti.8: Sottodirectory di / obbligatorie per qualunque sistema. /proc filesystem. diversi formati binari). si organizzano cos` in maniera meticolosa ed a ı ordinata dati. dato che essi non sarebbero disponibili se posti in filesystem diversi che possono essere montati solo dopo che il sistema ` partito. file di configurazione. mentre quelle di tab. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX e questo ci mostra il contenuto sommario primi due livelli dell’albero.out ad ELF. 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.9 sono obbligatorie soltanto qualora si siano installati i sottosistemi a cui essi fanno riferimento (utenti. Un elenco delle specifiche delle caratteristiche e del contenuto di ciascuna delle sottodirectory di / ` riportato di seguito. 25 le eventuali /lib<qual> contengono le versioni delle librerie di sistema in formati binari diversi. con un esempio dei file e delle sottodirectory presenti in una distribuzione Debian.9: Sottodirectory di / obbligatorie solo in presenza dei relativi sottosistemi. sono previste delle ulteriori e sottogerarchie che definiscono ulteriori dettagli dell’organizzazione dei file. rilasciato come parte delle specifiche e LSB (Linux Standard Base) 2. e Lo standard prevede che debbano essere necessariamente presenti le sottodirectory di / specificate in 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. per alcune di esse. 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. come /usr e /var.16 CAPITOLO 1. documentazione. programmi. nella attuale versione 1. ecc. /opt/include. o /boot Contiene tutti i file necessari al procedimento di boot (immagini del kernel. la sola parte del filesystem (eccetto /tmp) su cui gli utenti hanno diritto di scrittura.1. Normalmente ` e vuota e deve essere creata direttamente sotto la radice.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 /). che permette di trasferire il contenuto di questa directory su un apposito filesystem virtuale. 5. Cos` se si vogliono ı informazioni sugli interrupt ed i canali di DMA (vedi sez.3. 1. ramdisk. 26 . Pu` essere su qualunque filesystem. e deve essere sullo stesso filesystem della radice. Pu` essere montata su qualunque filesystem.1.3. gli script. 5.1) utilizzati dal sistema si potranno leggere i file /proc/interrupts e /proc/dma. Pu` stare su qualunque filesystem purch´ visibile dal bootloader o e (vedi sez. 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. /etc /home Contiene le home directory degli utenti. 3. nessun file attinente ai pacchetti deve essere installato al di fuori di queste directory. usate dai programmi di /bin e /sbin. 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. o Un pacchetto deve installarsi nella directory /opt/package dove package ` il nome del e pacchetto. Non deve contenere programmi binari e non pu` stare su un filesystem diverso da quello della radice.2. siano presenti le directory /etc/opt (per i pacchetti opzionali). File variabili attinenti ai suddetti pacchetti devono essere installati in /var/opt ed i file di configurazione in /etc/opt. Non deve avere e sottodirectory e non pu` stare su un filesystem diverso da quello della radice. Contiene eventuali pacchetti software aggiuntivi.4. ecc.4) e /etc/sgml (per la configurazione di SGML e XML). su cui torneremo in sez.) eccetto i file di configurazione ed i programmi per l’impostazione del procedimento stesso (che vanno in /sbin). L’ARCHITETTURA DEI FILE /bin 17 Contiene i comandi essenziali del sistema (usati sia dall’amministratore che dagli utenti. I file o possono essere raggruppati a loro volta in directory. Di norma la si mantiene nello stesso filesystem della radice. /mnt /opt ` /proc E il mount point standard del filesystem virtuale proc. /opt/lib e /opt/man. Qualora sia stato installato un kernel modulare (vedi sez. come ls). che permettono l’accesso alle periferiche.6.2). mentre si potranno impostare varie caratteristiche del sistema scrivendo nei file sotto /proc/sys. ` /root E la home directory dell’amministratore.1. 5.4) i moduli devono essere installati in /lib/modules. ad esempio all’avvio o quando si ` in single user mode (vedi sez. o /lib Contiene le librerie condivise essenziali.4). Contiene i mount point (vedi sez. /dev Contiene i file di dispositivo. lo standard prevede solo che. e /opt/doc. 2. che devono essere disponibili anche quando non ci sono altri filesystem montati. qualora siano installati. Deve stare sullo stesso filesystem della radice.bat del DOS. /etc/X11 (per la configurazione di X Window. 5. /opt/info.2. vedi sez. a meno che non si sia installato nel kernel il supporto per il devfs. Contiene i file di configurazione del sistema e gli script26 di avvio. sono un po’ gli equivalenti (come potrebbe esserlo una Ferrari in confronto ad una 500) in ambito Unix dei file . All’amministratore ` riservato l’uso di alcune directory opzionali: /opt/bin. E preferibile montarla in un filesystem separato. ecc. Directory per i dati di spool di varie applicazioni (stampanti. ed i programmi non devono assumere che i file siano mantenuti fra due esecuzioni successive. posta elettronica. /usr include Contiene tutti gli header file usati dal compilatore e dai programmi C e C++. alcune directory non possono essere condivise. Dati variabili relativi ai pacchetti di /usr/local. 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. Dati relativi ai processi in esecuzione. games per i dati statici dei giochi. i file di log. Di solito viene montata su un filesystem separato rispetto a / u e pu` essere montata in sola lettura. Contiene i binari dei giochi. Vanno messi in questa directory solo i programmi essenziali per l’avvio del sistema. File variabili per i pacchetti di /opt. Contiene le utilit` di sistema non essenziali per l’avvio. Deve stare sullo stesso filesystem della radice. File di lock. Contiene i sorgenti dei pacchetti. terminfo per il database con le informazioni sui terminali. i dati transienti e temporanei. /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. lo standard richiede obbligatoriamente le seguenti: bin Contiene i programmi usati dall’utente installati direttamente dal sistema (o dalla distribuzione originale). Prevede una ulteriore gerarchia di directory in cui o i vari file vengono organizzati. Contiene una replica della gerarchia di /usr dedicata ai file installati localmente dall’amministratore. le seguenti directory: X11R6 games src /var Contiene la gerarchia dei file relativi ad X Window (vedi sez. il recupero e la manutenzione dei filesystem. news.4).18 CAPITOLO 1. Viene cancellata ad ogni riavvio. . lib local sbin share mentre sono obbligatorie solo se i relativi pacchetti sono installati. Contiene una gerarchia in cui sono organizzati tutti i dati che non dipendono dalla architettura hardware: man per le pagine di manuale.). ` in modo che /usr possa essere montata in sola lettura. info per i file del relativo sistema di help. 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. doc per la documentazione. File temporanei non cancellati al riavvio del sistema. Non pu` essere ulteriormente suddivisa. o Contiene le librerie relative ai programmi di bin e sbin. ad uso dell’amminia stratore. dict per i dizionari. 3. misc per tutto quello che non viene classificato nelle altre. Contiene i file variabili: le directory di spool. ` E la directory principale che contiene tutti i file ed i dati non variabili che possono essere condivisi fra pi` stazioni. 1.1. disponibile all’indirizzo: http://www. 5. con quell’operazione che si chiama montaggio del disco. Si tenga inoltre presente che alcune di queste directory (ad esempio /proc) devono essere lasciate vuote sul disco. che siano filesystem contenuti in partizioni diverse dello stesso disco o in altri dischi. Anche in questo e caso ` opportuno separarle dalle altre directory. I dettagli come pleti sulla struttura (cos` come le specifiche relative ad i contenuti delle varie directory. u La situazione ` invece del tutto diversa per directory come /home e /var. in modo che il loro contenuto possa essere visto all’interno delle opportune directory. o addirittura montate via rete e condivise fra pi` macchine. posı sono essere reperiti sul documento ufficiale di definizione del FHS. Figura 1. contenendo file comuni di norma identici per le diverse installazioni. e 27 .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. In tal caso infatti occorrer` stabilire quali directory a dovranno andare sul filesystem usato come radice. ` E evidente infatti che alcune directory (come /usr ed /opt) possono essere mantenute su ` partizioni e filesystem diversi rispetto alla directory radice. 1. questo significa (come aca cennato in sez. a parte la directory radice che viene montata dal kernel all’avvio. esse infatti servono solo come riferimento per montare i relativi filesystem virtuali. (si ` mostrata solo una parte delle directory previste). L’ARCHITETTURA DEI FILE 19 In fig. 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. secondo il Filesystem Hierarchy Standard.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.com/fhs/. come illustrato in sez. L’importanza del Filesystem Hierarchy Standard diventa evidente quando si vanno ad esaminare le strategie partizionamento dei dischi.2. 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).2. 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.3 ` riportata una rappresentazione grafica della struttura generale delle directoe ry prevista dal FHS.3: Struttura tipica delle directory.2.pathname.3. e quali altre directory porre su altre partizioni. e come vedremo in sez. Allora. possono essere montate in sola lettura e non inserite nei backup (in quanto ` possibile sempre ripristinarle e dall’installazione). e Non esistendo il concetto di volume o disco come entit` separata. 1.2. 1.3) che i nuovi dischi devono essere inseriti in maniera opportuna all’interno dell’albero. E pertanto utile separare queste due directory che.27 tutti gli altri volumi. evitando che venga usato quest’ultimo quando ` disponibile e il primo. detta mount point. Infine alcune delle opzioni.3) sia stato preventivamente montato.10. Alcune di queste opzioni. Un esempio a del formato del file. 1. ` il seguente: e nodev nodev nodev nodev nodev nodev nodev nodev nodev nodev nodev rootfs bdev proc sockfs tmpfs shm pipefs ext2 ramfs devpts usbdevfs usbfs iso9660 in cui i filesystem virtuali sono marcati dalla parola chiave nodev. Si tenga presente che per poter usare /proc/filesystem occorre che il filesystem virtuale /proc (che abbiamo gi` incontrato in sez. 28 . sono disponibili in generale.10. u users e defaults e relative negazioni. user. e non vengono usati nel procedimento di ricerca automatica appena illustrato. cio` all’interno della quale verr` reso accessibile il contenuto a e a del filesystem. 1. perdendo la relativa informazione. a riportate in tab. Pi` opzioni possono essere specificate simultaneamente u scrivendole tutte di seguito separate da virgole (senza spazi in mezzo). in particolare auto. 29 questo resta utile per provare prima vfat di msdos. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX CDROM.20 CAPITOLO 1. Ciascun filesystem ` dotato di caratteristiche proprie.TYPE.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. e ci torneremo pi` avanti.11. /proc/filesystem per eseguire una prova con tutti quelli ivi elencati. hanno significato solo quando usate nel quarto campo di /etc/fstab (su cui torneremo fra breve). Se il riconoscimento non riesce viene effettuato un ulteriore controllo: prima viene letto /etc/filesystem e. ` possibile comune e que usare anche un meccanismo di ricerca automatico.29 si pu` poi indicare l’uso ulteriore di /proc/filesystem terminando o /etc/filesystem con un asterisco (*). In genere si usa /etc/filesystem se si vuole cambiare l’ordine in cui il controllo viene effettuato. che permette di specificare dei valori delle opzioni che controllano alcune modalit` di funzionamento del filesystem che si va a montare. Il comando che permette di montare un disco ` mount. 1. che di norma si limita ad invocare e la omonima system call del kernel. devono essere montati successivamente. in cui esso verr` montato. 1. se questo non esiste. ed in generale ` possibile gestirle ate e traverso l’opzione -o di mount. l’elenco dei principali filesystem supportati ` riportato in tab. che viene attivato usando auto come tipo di filesystem. 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. ma devono essere usati dei e programmi ausiliari.2. Il comando richiede la conoscenza del tipo di filesystem presente nel dispositivo che si vuole montare. questi vengono lanciati con l’invocazione automatica di un corrispondente programma /sbin/mount. floppy o qualunque altra forma di supporto che contiene un filesystem. 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. altre sono invece specifiche per ciascun tipo di filesystem. 10: Principali filesystem disponibili su Linux e relativi nomi per l’opzione -t di mount. Minix File System. il filesystem usato da vari Unix derivati da BSD (SunOS.2. Second Extended File System (filesystem standard di Linux) in versione journalled. la password di accesso verr` chiesta sul terminale. QNX4 File System.11 l’opzione a -o consente anche di effettuare alcune operazioni speciali. Il filesystem dei CD-ROM. 1. ? File System. Filesystem virtuale che fornisce informazioni sul sistema.iso /cdrom l’interfaccia (detta loopback ) inoltre consente anche di montare un filesystem opportunamente cifrato. filesystem per la condivisione di file attraverso la rete attraverso il protocollo NFS creato da Sun. replicazione e operazioni a disconesse. 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. OpenBSD e MacOS X). il filesystem del sistema operativo Minix. il filesystem di Windows NT. il filesystem del MacOS (non MacOS X). NT File System. Journalling File System. Un’altra opzione molto utile ` loop. se geomorphix. secondo lo standard ISO 9660. il filesystem del sistema operativo RiscOS. Il filesystem Unix File System. NetBSD. ad esempio usando l’opzione remount diventa possibile rimontare al volo un filesystem gi` montato senza smontarlo. filesystem standard di UnixWare disponibile anche su HP-UX e Solaris. filesystem usato per montare le directory condivise di Windows. che consente di montare il filesystem dal contenuto di e un file (ovviamente il file deve contenere un filesystem completo di un qualche tipo).1. Veritas VxFS File System. Hyerarchy File System. ? File System. il filesystem standard di Linux. FreeBSD. Oltre a specificare delle modalit` di funzionamento coi valori riportati in tab.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. Reiser File System un filesystem journalled per Linux. il filesystem del sistema operativo BeOS. Filesystem virtuale contente le informazioni relative al bus USB. per cambiare a alcune delle opzioni precedenti. Filesystem virtuale che fornisce l’accesso ai segmenti di memoria condivisa. Il filesystem FAT usato da Windows 95/98. Compressed ROM File System. un filesystem su ROM per sistemi embedded. filesystem distribuito su rete che supporta funzionalit` evolute come autenticazione. Il filesystem elementare usato dall’MSDOS. a . Network File System. Filesystem virtuale per consentire un accesso efficiente ai terminali virtuali. il filesystem usato da QNX4 e QNX6. Coda? File System. il filesystem di OS/2. Second Extended File System. 21 smbfs Tabella 1. portato dalla SGI su Linux. SMB File System. 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. Cos` ad ı esempio. il filesystem journalled della IBM portato su Linux. il filesystem di IRIX. 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. e dev. 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). il nome utente viene scritto su /etc/mtab e solo lui potr` smontarlo. usa le opzioni di default: rw. Linee vuote o che iniziano per # vengono ignorate.ro. il cui nome e sta per file system table. non aggiorna il valore del tempo di ultimo accesso al file (utile quando si vogliono evitare ulteriori accessi al disco). spostamento e cancellazione di file. atime auto default dev exec noatime noauto nodev noexec nosuid ro rw suid sync dirsync user nouser users Tabella 1. u e Aggiorna il valore del tempo di ultimo accesso ai file presenti sul filesystem (` e il valore di default). dev. esegue in maniera sincrona le operazioni che comportano una scrittura sulle directory (creazione di link. ed e ` composta da sei campi. non consente l’uso di file di dispositivo presenti sul filesystem.11: Valori per l’opzione -o di mount disponibili per qualunque tipo di filesystem. il filesystem deve essere montato esplicitamente (viene ignorato dall’opzione -a). vedi sez. e async. 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).2. e consente che i bit suid e sgid abbiano effetto (` il valore di default). creazione e cancellazione di directory e file di dispositivo).user.errors=remount-ro sw defaults defaults.2). 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. consente l’uso di file di dispositivo presenti nel filesystem (` il valore di default). 1. 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. o e consente a qualunque utente di montare o smontare il filesystem. Come accennato nel funzionamento di mount ` fondamentale il file /etc/fstab. creazione. monta il filesystem in sola lettura. exec. nouser.22 Valore async CAPITOLO 1. monta il filesystem in lettura e scrittura (` il valore di default). solo l’amministratore pu` montare il filesystem (` il valore di default). suid. -v che aumenta la prolissit` dei messaggi. Questo pu` essere visto come una specie di file di configurazione del o comando.noauto defaults.ro.noauto defaults. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX Significato tutto l’I/O sul filesystem viene eseguito in maniera asincrona.noauto rw dump 0 0 0 0 0 0 0 pass 1 0 0 0 0 0 2 . La pagina di manuale man fstab ne spiega i dettagli. 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). a -w e -r che sono abbreviazioni per -o rw e -o ro. e consente l’esecuzione di programmi presenti sul filesystem (` il valore di e default).user.user. auto. L’elenco completo ` riportato nella pagina e di manuale accessibile con man mount. nosuid. se non soprassedute esplicitamente con exec.3) abbiano effetto. 5. Altre opzioni possibili per mount sono -L. mount point / none /proc /floppy /cdrom /mnt/cdrom /boot type ext2 swap proc auto iso9660 iso9660 ext2 options defaults.4. suid. con le stesse restrizioni di user. comporta come restria zioni le opzioni noexec. i campi di ogni e linea sono separati da spazi o tabulatori. Il formato del file ` molto semplice: ogni linea definisce un filesystem da montare. consente anche ad un utente normale di montare il filesystem. non consente che i bit suid e sgid (vedi sez. non consente l’esecuzione di programmi presenti sul filesystem. Infine se si sono usate le etichette per le partizioni si possono usare queste ultime al posto dei nomi di dispositivo. L’ARCHITETTURA DEI FILE /dev/hda1 /dev/hdc4 /mnt/win /mnt/zip vfat auto defaults. e Avendo abilitato il supporto nel kernel ` stato possibile montare anche il filesystem /proc. i vari tipi si sono gi` riportati in tab.1. e o . o Nel caso si usi l’opzione defaults la successiva specificazione di un’altra opzione soprassiede il valore di default.2.10. Deve poi essere specificato il filesystem da usare (o auto se si vuole tentare il riconoscimento automatico). Inoltre con questa sintassi o consente l’uso di mount anche agli utenti normali. e non avendo questo nessun dispositivo (` completamente virtuale) viene montato usando come e dispositivo la parola chiave proc.noauto 0 0 in cui si indica come dispositivo la directory remota da montare. si usa la parola chiave none. come nel caso della partizione di swap (vedi sez. In questo caso occorre identificare qual’` il file di dispositivo da usare e scegliere nel filesystem una directory e su cui montarlo. o un nuovo dispositivo. Dal punto di vista dell’amministrazione base si ha a che fare con /etc/fstab tutte le volte che si aggiunge un disco. 1. Il terzo campo indica il tipo di filesystem che sta sul dispositivo che si vuole montare.5). u Gli ultimi due campi sono relativi alla manutenzione del filesystem. In questo caso ` necessario marcare la riga relativa con l’opzione e auto.1. o si cambiano le partizioni. se attivato con un valore non nullo verranno salvate le informazioni che consentono a dump di eseguire i backup incrementali. Se ci fossero stati dei file montati via NFS (cio` file condivisi e sulla rete) si sarebbero avuti anche righe del tipo: firenze. Il quarto campo indica le opzioni con cui si pu` montare il filesystem. separate da virgole e senza spazi interposti. 5. 1. uno ZIP (/dev/hdc4).user.user.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). e che viene utilizzato nella procedura di avvio del sistema per montare automaticamente tutte le directory del sistema (ad esempio /var.5).11. Se il filesystem non deve essere montato. uno zero indica che il controllo non deve essere eseguito. senza per` consentirgli di modificare il o mount point o le opzioni di montaggio.2. Pi` opzioni vanno specificate in fila.4). 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. 4.linux. un CDROM ed un masterizzatore SCSI (/dev/cdrom e /dev/sr0. L’uso principale di /etc/fstab ` il controllo del comportamento del comando mount -a. Il secondo campo del file indica il mount point cio` la directory dove i file del nuovo dispositivo e saranno resi disponibili. ma viene usato per la swap (vedi sez. riportate in tab. nel caso del CDROM si ` usato un link simbolico).31 i quali potranno montare un dispositivo qualora si siano specificate le opzioni user o users nella riga relativa. per i filesystem che non devono essere montati invece (ad esempio CD-ROM e floppy) si deve specificare l’opzione noauto.user.2.it:/ /mnt/nfs nfs defaults. un floppy (/dev/fd0). 5. 31 l’operazione ` privilegiata e pu` essere effettuata in modo generico solo dall’amministratore. In questo modo si pu` o permettere agli utenti di montare i propri CD e floppy.noauto defaults. 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. /usr e /home) che sono state installate su filesystem separati rispetto alla radice. per maggiori dettagli si faccia riferimento alla pagina di manuale del comando. 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. 30 ` un valore utilizzabile solo per i filesystem (attualmente ext2 e ext3) che supportano il comando di backup e dump (vedi sez. e prima di poterlo estrarre e sostituire. Lo stesso vale per il CDROM e il e masterizzatore.3 L’architettura dei processi In questa sezione prenderemo in esame l’architettura della gestione dei processi.3. Viene usato da alcuni programmi per leggere questa informazione. si pu` e o usare l’opzione -f che forza l’operazione. nelle condizioni in cui ` comunque indispensabile smontare filesystem. e 32 con le ultime versioni di kernel in realt` questo non ` pi` necessario. L’elenco completo delle opzioni del comando ` disponibile nella pagina di manuale. 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.4. In maniera analoga a come lo si ` montato. e non sar` pi` possibile a u accedervi fintanto che questo non viene smontato. e liberare la directory utilizzata per il montaggio per il riutilizzo32 . questo significa e che se si hanno processi che hanno aperto dei file contenuti nel filesystem. dato che non ` detto che il floppy o lo ZIP siamo sempre nel driver. /proc).1) ` ivi contenuta non si potr` smontare il filesystem.11 ` inoltre disponibile un lazy umount. accessibile con man umount. ma viene generato automaticamente e non deve essere modificato. specificando quest’ultimo con l’opzione -t. che contiene l’elenco dei filesystem e montati. in quanto si possono impilare pi` a e u u montaggi sulla stessa directory. che presenter` il contenuto dell’ultimo filesystem u a montato (valendo quanto detto prima per il contenuto dei precedenti). si ricordi quanto detto in sez. In questo modo diventa possibile rimuovere (nel a caso di kernel modulare) le eventuali risorse aggiuntive.2. e come vengono gestiti all’interno del sistema.7. Una sintassi alternativa per il comando ` l’uso dell’opzione -a. che costituiscono l’entit` fondamentale con cui il kernel permette l’esecuzione dei vari programmi. ma si pu` restringere le operazioni a tutti i e o filesystem di un determinato tipo. e pure il controllo dello stato del filesystem. 33 si dice che la n si sia persa nei meandri delle prime implementazioni di Unix. 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). per il quale si ` indicato di rimontare il filesystem in e sola lettura nel caso di errori. Se per` si sono aperti dei file in essa presenti o questi continueranno a funzionare regolarmente (in quanto sono visti attraverso il loro inode. Dal kernel 2. questo potr` essere smontato. Per ovviare a e a questo problema. Un altro file collegato all’uso di mount ` /etc/mtab. Inoltre a partire dal kernel 2.24 CAPITOLO 1.2). che smonta tutti i filesystem e elencati in /etc/mtab (tranne. 1. in questo caso ovviamente non ` necessario indicare quale dispositivo smontare. o la cui directory di lavoro (vedi sez. ` comunque necessario smontare un device rimovibile come il floppy o il CD. e attivabile con l’opzione -l. quando non si ha pi` la necessit` di accedere ad e u a un filesystem. Si tenga presente che fintanto che il filesystem ` utilizzato questa operazione non viene permessa. Si noti inoltre e l’opzione speciale per il filesystem di root.4 diventa possibile impilare pi` operazioni di mount sulla stessa directory. lo si pu` sostituire con un link a /proc/mounts o che mantiene le stesse informazioni. 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. 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. Nel caso di disco fisso andr` poi scelto se montarlo all’avvio o a meno. a partire dalla versione 2. . quali sono caratteristiche e propriet` che ciascuno a di essi porta con s´. e 1. ma si sia disabilitato il montaggio all’avvio. per i quali si ` pure aggiunto l’opzione di montaggio in read-only. 1. Vedremo come i a processi sono organizzati in forma gerarchica. 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. La caratteristica distintiva ` che tutti i processi presenti nel sistema possono essere creati e solo in questo modo. 1.2 una delle caratteristiche principali dell’architettura dei processi in un sistema unix-like ` che qualunque processo questo pu` creare nuovi processi. L’ARCHITETTURA DEI PROCESSI 25 1.1 Le propriet` dei processi a Come accennato in sez. l’unica eccezione ` quella di e init.3. come radice dell’albero. in questa gerarchia init viene a ricoprire nel sistema un ruolo speciale. 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.1. e pertanto tutti i processi avranno un 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 . venendo lanciato direttamente dal kernel all’avvio. il processo iniziale che. mentre i processi da lui creati vengono detti figli. in questo e o contesto il processo originale viene chiamato padre. Questa classificazione pu` essere stampata con il comando pstree o che evidenzia in maniera grafica l’albero genealogico dei processi presenti nel sistema.3. non ` figlio di e nessun altro processo.1. Questa caratteristica permette di classificare i processi in una gerarchia ad albero basata sulla relazione padre-figlio. ` che in e Linux la creazione di un processo e l’esecuzione di un programma sono due operazioni separate. identico al padre. con significati diversi. con una modalit` di funziozamento comune con i server o a di rete. in genere indicate da lettere singole: quelle derivata da SysV devono essere precedute da un -. come sul terminale siano presenti la shell. e ciascuna andr` ripetuta a parte. Specificando l’opzione a verranno visualizzati anche i processi lanciati da altri utenti.34 Il meccanismo per` permette anche. ` 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. derivate dalle varie versioni che del comando sono state realizzate nel tempo. e per ciascuna di esse fa eseguire35 ad un figlio creato appositamente le operazioni necessarie a fornire le relative risposte. o e Si tenga presenta che questa architettura. e o Una seconda differenza rispetto ad altri sistemi multiutente come il VMS o NT. per questo si sono accavallate anche diverse sintassi per le opzioni.3) di specificare pi` opzioni con lettere consecutive dopo il -.bin 22913 pts/0 00:00:00 ps che mostra. pi` l’editor ed il visualizzatore di PDF utilizzati per la realizzazione di queste u dispense. 35 34 . 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 quanto questi potevano essere solo lanciati da un terminale. 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. o ovviamente usando una istruzione condizionale. sia nel formato BSD che in quello SysV. alla radice dell’albero c’` init. Il comando che permette di ottenere la lista dei processi attivi nel sistema ` ps. 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. quelle derivate da BSD non devono essere precedute da un -.ed una forma estesa. il quale va ad usare la seconda per eseguire un altro programma. come dicevamo all’inizio. ci torneremo fra poco. in cui il padre esegue la parte u che si occupa di ricevere le richieste. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX | |-smtpd | ‘-trivial-rewrite |-oafd |-sshd |-syslogd |-wombat |-wwwoffled ‘-xfs dove si pu` notare che.2 di [1]. questo ` uno e e dei comandi fondamentali presenti fin dalle prime versioni di Unix. in cui qualunque processo pu` creare degli altri o processi.36 mentre con l’opzione x si visualizzano tutti i processi non per i dettagli del meccanismo si pu` consultare la sezione 3. In Linux il comando supporta la maggior parte delle opzioni esistenti. 2. essendovi la possibilit` di riconescere se si sta eseguendo il a padre o il figlio. la prima delle quali crea un nuovo processo.26 CAPITOLO 1.1. nell’ultima colonna marcata CMD. di scrivere un programma unico che esegue pi` processi. Si tenga presente che in molti casi viene usata la stessa lettera. Tralasciamo per ora il significato delle altre colonne. gestite da due system call diverse. 36 prima dell’introduzione delle interfacce grafiche questa era la modalit` per vedere i processi interattivi lanciati a dagli utenti. purch´ e facenti riferimento ad un terminale. il comando stesso. u a Il comando non richiede nessun argomento. mostra il nome del terminale di controllo del processo. La seconda colonna.1. E uno specifico processo. che corrisponde ape .3. e questo numero viene assegnato alla creazione del processo. quanto quello di mostrare le loro caratteristiche. essendo queste complementari. marcata TTY. la descrizione del significato di quest’ultime andar` allora di pari passo con la spiegazione a dell’output del comando. 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.conf /sbin/getty 38400 tty1 dato che la combinazione delle opzioni a e x. marcata PID. in realt` lo scopo di ps non ` semplicemente a a e quello di fornire la lista dei processi in esecuzione. 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. 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. Ogni processo interattivo ` sempre associato ad un terminale di controllo. L’uso dell’opzione r permette invece di restringere la selezione ai soli processi in esecuzione effettiva (cio` nello stato R. L’ARCHITETTURA DEI PROCESSI 27 associati ad un terminale. 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. e Come gi` questi primi esempi ci mostrano. mostra il cosiddetto process id del processo. infine l’opzione f permette di mostrare la gerarchia dei processi. che spiegheremo fra poco). La prima colonna dei precedenti esempi.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. insieme ad una serie o di informazioni relative alle risorse da esso utilizzate. Questo ` il numero che il kernel utilizza per identificare univocamente ciascun processo. seleziona tutti i processi attivi nel sistema. 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. 1. Il processo ` in attesa di un risposta dal sistema. in genere per` un processo. l’esecuzione della maggior parte delle system call infatti pu` essere u e o interrotta da un segnale (i segnali saranno trattati in sez. che a e e continuer` a funzionare senza problemi.3. 1. Se il processo non ` interattivo.3. nella colonna STAT si ` riportata la corrispondente e lettera usata dal comando ps nell’omonimo campo. a parte quello di non poter liberare le risorse occupate a dal processo. 1. fossero in stato di sleep. 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 Il processo ` stato fermato con un SIGSTOP. La terza colonna. si ha a disposizione un segnale apposito). per cui se un processo si blocca nell’esecuzione di una di queste esso pu` essere comunque terminato. e e Il processo ` terminato ma il suo stato di terminazione non ` ancora e e stato letto dal padre. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX punto al terminale da cui il processo riceve i dati in ingresso (in genere dalla tastiera) e sul quale scrive il suo output (in genere lo schermo). Si noti allora come nell’elenco precedente tutti i processi. in questo caso se il processo resta e bloccato37 nello stato D non pu` pi` essere terminato se non con il riavvio della macchina. 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).2. pur essendo attivo. Tabella 1. 1. i cui valori sono riportati in tab. 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). Il sistema infatti prevede cinque possibili stati diversi per i processi. torneremo su questo a breve. e Come dettagliato in tab. eccetto lo stesso comando ps axf. Un o u processo in stato D comunque non avr` nessun effetto n´ sugli altri processi n´ sul sistema. o ` tracciato. non ` assolutamente detto o e che sia anche in esecuzione. ma pu` essere e o interrotto da un segnale. contraddistinti dalle lettere S e D. 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). Il processo ` in attesa di un risposta dal sistema (in genere per I/O). Il pi` comune ` il primo.2). 37 . Il caso pi` comune infatti ` quello in cui il programma ` in attesa u e e di ricevere dati da una periferica.28 CAPITOLO 1. in quanto ci permette di spiegare varie caratteristiche dell’architettura dei processi.12 gli stati di sleep sono due. ad esempio se si monta un disco USB e poi si lo si estrae dal bus senza smontarlo e si ha la sventura di farlo in un momento poco opportuno. e e non pu` essere interrotto in nessuna circostanza. come vedremo in sez. 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. marcata STAT.12. riporta un’altra informazione fondamentale: lo stato del processo. Per capire il significato del campo STAT occorrono alcune spiegazioni generali sull’architettura della gestione dei processi.12: Elenco dei possibili stati di un processo in Linux. 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 “?”. Lo stato di stopped ` relativo ai processi la cui esecuzione ` stata fermata per una richiesta e e dell’utente (per fare questo. Come sistema multitasking Linux ` in grado di eseguire pi` processi e u contemporaneamente. e nel caso assegna a questi ultimi init come nuovo padre. tutto quello o e che serve fare per eliminare gli zombie dal sistema ` renderli orfani terminando il processo che e 39 In questo modo essi saranno adottati da init che si curer` immediatamente di li ha generati. tutti i file aperti dal processo vengono chiusi. resta allocata soltanto una voce nella tabella dei processi che contiene le informazioni per riportare lo stato di uscita.3. E pertanto compito di chi scrive programmi che e a ` creano processi figli curarsi della ricezione del loro stato di uscita. 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. per il semplice fatto che lo ` gi`. per gli zombie ` possibile risolvere il problema e far si che essi siano terminati regolarmente e senza dover riavviare il 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. Vedremo fra poco per` che. ad esempio se questa ` stata regolare o ` stata dovuta ad un qualche e e errore. ed infatti i programmi ben scritti non presentano mai questo problema. 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). e lui deve invocare una apposita system call per ricevere lo stato di uscita. in quanto esso non occupa e e (a differenza di un processo bloccato in stato D) nessuna risorsa nel sistema. ma soprattutto il problema ` a chi fare questa notifica. Resta il problema di come notificare l’avvenuta conclusione del processo. la ricezione del loro stato di uscita. Si noti nella lista precedente la presenza di alcuni processi con una lettera aggiuntiva W nella colonna STAT. questi non sono processi effettivamente lanciati da init quanto dei processi interni al kernel (e da 38 si vedr` cio`. il cui significato pu` essere compreso solo ritornando con maggiori e o dettagli sulla relazione fra processo padre e gli eventuali figli. La relazione padre/figlio infatti ` ben definita finch´ entrambi i processi sono attivi nel sistema. cio` un processo che non esiste pi`. la memoria utilizzata viene liberata e con essa tutte le risorse occupate dal processo. e 39 per poterlo fare per` occorre avere un processo in grado di eseguire il comando. e Dato che in un sistema Unix tutto viene fatto con i processi. dato che init ` scritto bene e sa gestire la ricezione dello stato di uscita. Se questo non viene fatto comunque il processo figlio si conclude regolarmente e tutte le risorse che occupava nel sistema vengono rilasciate. e a . durante le operazioni di terminazione di un processo. alla terminazione di questi a a ultimi. Per questo il sistema controlla. e sar` lui che gestir`. cosa non facile da ottenere o se si ` gi` esaurita la tabella dei processi. a e che questo ` diventato 1. Di per s´ la presenza di uno zombie non ` un grave problema. Questo ` quello che e in gergo viene chiamato uno zombie. a differenza dei processi in stato o D. 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. 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. se questo ha dei figli. Perci`. Questo ad esempio ` il meccanismo con cui la shell riceve lo stato di uscita dei comandi che si e sono eseguiti.38 Si dice allora che init adotta i figli dei processi che terminano. a riceverne lo stato di uscita liberando la voce che occupavano nella tabella dei processi. Infine c’` lo stato di zombie. tranne la voce mantenuta nell’output di ps.1. perch´ ` terminato. quando un processo termina al padre viene inviato uno speciale segnale che lo avvisa del fatto. e si dice che il figlio diventa e orfano. o rendendo inutilizzabile il sistema. e u e e ma che mostra una voce con lo stato Z nella lista fornita da ps e che di nuovo non pu` essere o terminato. con un nome del comando fra parentesi quadre e con un PID molto basso. ad una successiva esecuzione di ps con opzioni che permettano di visualizzare il PID del padre. Per` uno zombie occupa comunque una voce nella tabella dei o processi e pertanto se il numero degli zombie cresce si pu` rischiare di saturare quest’ultima. Le altre lettere associate al campo STAT sono “>”. come lo scarico su disco dei buffer. per una e a trattazione si pu` fare riferimento alla sezione 2.3) e la presenza di pagine di memoria bloccate. altre opzioni sono v che stampa informazioni u relative all’uso della memoria virtuale. che permette di selezionare u tutti processi. in tal caso infatti si u avr` come uscita del comando: a parker:/home/piccardi# ps -ef UID PID PPID C STIME root 1 0 0 Aug12 root 2 1 0 Aug12 root 3 1 0 Aug12 root 4 1 0 Aug12 root 5 1 0 Aug12 root 6 1 0 Aug12 root 7 1 0 Aug12 root 43 1 0 Aug12 root 101 1 0 Aug12 daemon 106 1 0 Aug12 root 168 1 0 Aug12 root 171 1 0 Aug12 root 175 1 0 Aug12 root 179 1 0 Aug12 root 203 1 0 Aug12 daemon 214 1 0 Aug12 root 310 1 0 Aug12 postfix 314 310 0 Aug12 root 319 1 0 Aug12 root 322 1 0 Aug12 root 325 1 0 Aug12 root 326 1 0 Aug12 root 327 1 0 Aug12 root 328 1 0 Aug12 root 329 1 0 Aug12 root 330 1 0 Aug12 postfix 2046 310 0 11:13 root 2047 319 0 12:24 piccardi 2049 2047 0 12:24 piccardi 2050 2049 0 12:24 root 2054 2050 0 12:24 root 2087 2054 0 12:34 TTY ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tty1 tty2 tty3 tty4 tty5 tty6 ? ? ? pts/0 pts/0 pts/0 TIME 00:00:03 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:01 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:40 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 CMD init [keventd] [ksoftirqd_CPU0] [kswapd] [bdflush] [kupdated] [kjournald] [kapmd] [eth0] /sbin/portmap /sbin/syslogd /sbin/klogd /usr/sbin/named /sbin/rpc.30 CAPITOLO 1. Ciascun processo infatti mantiene le informazioni riguardanti l’utente che ha lanciato il processo ed il gruppo cui questo appartiene. il che permette di identificarli.7 del secondo capitolo di GaPiL [1]. e s che stampa informazioni sui segnali. Nel caso si usa la lettera W per indicare che i processi non usano memoria in user space. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX esso utilizzati) per la gestione di alcuni compiti interni. Anzitutto notiamo che la u prima colonna. o 40 . ecc. riporta un nome utente. con l’uso di una serie di direttive %X. 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. 1.2. Se invece si usa la sintassi SysV le opzioni pi` usate sono -e. “N” e “L” e indicano rispettivamente una priorit` maggiore o minore di quella standard (torneremo sulla priorit` in a a sez. Infine l’opzione o permette all’utente di specificare un suo formato.40 Le opzioni di visualizzazione di ps sono moltissime.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`. e -f che permette di avere una lista con pi` informazioni. UID. e qui potremo prendere in esame solo le principali. dove X indica quale propriet` del processo si vuole far comparire nella lista (secondo una tabella di a valori riportata nella pagina di manuale). la generazione di eventi dovuti all’inserimento di periferiche (usato da USB e PCMCIA). anche queste quest’ultima ` una caratteristica avanzata che va al di l` di quanto affrontabile in questa sede.3. effective user id del processo. 41 . valore di nice (vedi sez. 42 Linux usa ben quattro gruppi di identificatori diversi per gestire il controllo di accesso.41 Ogni processo in realt` mantiene diverse versioni di questi identificatori. effective group id del processo. 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. e stato del processo.13. 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.3. gli interessati possono trovare una trattazione dell’argomento a e nella sezione 3.43 che invece vengono identificati da sigle come RUSER e RGROUP. process group id (vedi sez. indica il parent process id. 1. non direttamente visualizzabili con ps.42 ma quelle che poi sono significative a sono l’effective user id e l’effective group id. che identificano l’utente che ha lanciato il processo. La quarta colonna. orario dell’avvio del processo.3.4. PPID. Per l’elenco completo delle opzioni. C. in caso di zombie. di identificare il processo responsabile della produzione degli stessi. 1. in un sistema multiprocessore. Un elenco delle a principali informazioni relative ai processi che vengono riportate da ps sono elencate in tab. percentuale della memoria fisica utilizzata dal processo.3 di [1]. real user id del processo. 1. e Tabella 1. indicate sempre in base al nome usato come intestazione della colonna che ne visualizza il valore. Infine ci sono alcune propriet` dei processi. 1. La quinta colonna. SID o session id (vedi sez.3 che esistono casi in cui questo non avviene.3) del processo. effective user id del processo.4) del processo. 1. Questa ci permette anche. indica invece il momento in cui il comando ` stato lanciato. l’ultima CPU usata dal processo. secondo uno schema che va al di l` di quanto ` possibile spiegare qui. tempo totale di CPU utilizzato dall’avvio del processo.4).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). 43 di norma questi coincidono con gli identificatori del gruppo effective. PID (process ID) del padre del processo.2. informazioni e dati visualizzabili con ps si pu` fare riferimento o alla pagina di manuale del comando. ogni processo infatti mantiene il PID del padre.1 il sistema identifica ogni utente e gruppo nel sistema con un numero. effective group id del processo. 1. Come accennato in sez. terminale di riferimento del processo. La seconda colonna del nostro esempio riporta di nuovo il PID di ciascun processo. detti appunto user id e group id.1.4) del processo. STIME.3. che coa munque sono importanti e vanno menzionate. 1. indica. se indicati con il nome o con RUID e RGID se numerici. L’ARCHITETTURA DEI PROCESSI 31 sono mantenute nella forma dei relativi UID (user id ) e GID (group id ).2. linea di comando con cui ` stato lanciato il processo.4. accessibile con man ps. anche questa ` una cae come vedremo in sez. ogni processo ha una directory di lavoro rispetto alla quale risolve i pathname relativi. in modo da poter ricostruire agevolmente la genealogia dei processi. real group id del processo. Le altre e colonne sono analoghe a quelle gi` viste in precedenza per la sintassi BSD. percentuale del tempo di CPU usato rispetto al tempo reale di esecuzione. 1. mentre la terza colonna. ma vedremo in sez. riga di comando con la quale si ` avviato il processo. utilizzati per il controllo di accesso (che vedremo in sez.3. 2 0 824 768 740 S 0.0 0. 85472k used.0 0.3 0. che viene ereditata nella creazione di un processo figlio.3% system. che stampa una lista di processi. nelle ultime due le statistiche di uso della memoria fisica e della swap. ordinati per uso decrescente della CPU (vengono cio` mostrati i pi` attivi).3% user.01 0:00. a meno di non averlo lanciato con l’opzione -b.04.44 numero di utenti e carico medio della macchina.63 0:00. uptime. 8288k buffers Swap: 524280k total.0 0.0 0. le informazioni sui processi.32 CAPITOLO 1.0% nice. 0. in modo da restringere un processo in una sezione o dell’albero dei file.0 0 968 932 836 S 0. 0 zombie Cpu(s): 1. Un esempio di output del comando ` il seguente: e top . a meno di non aver impostato un intervallo diverso con l’opzione -d. 1 running. Per questo motivo ogni processo porta con s´. Per la lista completa delle opzioni si faccia riferimento al solito alla pagina di manuale.04 0:00.06 0:00.3 0 1196 528 504 S 0. load average: 0. nella seconda riga le statistiche sul totale dei processi. Infine l’opzione -p permette di osservare una lista di processi scelta dall’utente.0 0.0 0. oltre alla directory di lavoe ro corrente. infatti bench´ di norma questa coincida con la radice del sistema.57 0:00.13:06:35 up 6:04.98.00 0:49. Se si vuole tenere sotto controllo l’attivit` del sistema non ` pratico ripetere in a e continuazione l’esecuzione di ps. Le informazioni riportate di default sono il PID del processo (colonna omonima).3 0 724 684 636 S 0.0 0. Lo stesso vale per la directory radice. 97.66 0:00. 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. che richiede un parametro nella forma ss. e q che termina u il programma. in tal caso di a solito si usa anche l’opzione -n per specificare il numero di iterazioni volute.0 0. dopo una riga lasciata vuota che serve per gestire l’input in interattivo. A queste informazioni generiche seguono.00 0:00.dd dove ss sono i secondi e dd i decimi di secondo. che deve specificarli tramite una lista di PID. 3352k free. a I pi` rilevanti sono h e ? che mostrano un help in linea dei comandi disponibili.0 0. nella terza le statistiche di utilizzo della CPU. 0 stopped.0 0 0 0 0 S 0.02 0:00. 6 users. 1.4% idle Mem: 256180k total. Per questo ci viene in aiuto il comando top.00 Tasks: 82 total.6 3.2 0 0 0 0 S 0.0 0 0 0 0 S 0. e e .2 0 912 852 836 S 0. Come si pu` notare ps si limita a stampare la lista dei processi attivi al momento della sua o esecuzione. Quando opera in modalit` interattiva il comando permette di inviare dei comandi da tastiera. aggiornandola automaticamente in maniera periodica. essa e pu` essere cambiata con il comando chroot. accessibile con man top.0 0 0 0 0 S 0.3 TIME+ 1:03. consentendo la redirezione dell’output.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. 438808k free.8m 4512 S 1.00 0:00.0 0.73 0:00. 44 cio` il tempo trascorso da quando il sistema ` stato avviato. e rispetto alla quale risolve i pathname assoluti. 81 sleeping.4 0 500 452 436 S 0. che lo esegue in modalit` batch. 0.0 0 0 0 0 S 0. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX ratteristica del processo. anche l’indicazione della directory che considera come radice.0 0. 252828k used.0 19 0 0 0 S 0. Il comando opera normalmente in maniera interattiva.4 0 548 516 516 S 0. 1.0 0. Il comando ristampa la lista ogni secondo.14 0:00.01 0:00.0 0. evidenziando (con la stampa un grassetto) quelli trovati in stato e u runnable.3 0 864 784 756 S 0.0 0.9 0 1124 1124 896 R 1.00 0:02.01 0:01. e questa viene indicata dalla colonna SHR. e a In generale le informazioni riportate nelle colonne stampate da top sono simili a quelle di ps. La memoria usata da un processo ` sostanzialmente suddivisa in due parti. con d cambiare il periodo di aggiornamento si sta usando una descrizione brutalmente semplificata.3) rispettivamente nelle colonne PR e NI. le percentuali di utilizzo di CPU e memoria (colonne %CPU e %MEM). per quelle comuni non presenti in detta tabella si faccia riferimento alle omonime di ps riportate in tab. 1. rappresenta la memoria potenzialmente condivisibile con altri processi. che sar` la somma della parte usata per i dati (indicata da DATA) a e della parte usata per il codice (indicata da CODE). ` stata temporaneamente e parcheggiata su una area di disco a questo dedicata (detta swap) da cui pu` essere ripresa in o caso di necessit`.45 il e codice del programma e i dati usati dallo stesso. 1. 1. ammontare della memoria fisica utilizzata dal processo per i suoi dati.2) mentre con r si pu` cambiare la priorit` (vedi sez.3. la priorit` ed il valore di nice (torneremo su questi a in sez. ammontare della memoria fisica utilizzata dal processo per il suo codice eseguibile. anche in alcuni casi esse vengono indicate diversamente. stato del processo (analogo allo STAT di ps).3. a Ci sar` per` anche una parte di memoria che al momento non ` in uso. per liberare della a o e memoria fisica a favore di altri programmi che devono essere eseguiti. RES e SHR. il cui significato ` analogo a quello gi` visto per ps.14: Propriet` dei processi e nome della relativa colonna nella visualizzazione effettuata da top. in quella occasione abbiamo detto come sia compito del kernel mappare lo spazio (virtuale) degli indirizzi di memoria di un processo nella memoria fisica effettivamente disponibile.13.3. L’ARCHITETTURA DEI PROCESSI 33 l’utente cui esso appartiene (colonna USER). ammontare totale della memoria virtuale usata dal processo include tutto il codice. 1. tempo di CPU utilizzato dall’avvio (analogo al TIME di ps.14. o a Con il comando u si possono selezionare i processi di un utente. i dati e le librerie condivise pi` le pagine che sono state u messe su swap (uguale a SWAP + RES). e a la quantit` di memoria attualmente usata a questo scopo ` quella che ` indicata dalla colonna a e e RES e viene detta residente.1. con c. vedi sez. 1. in quanto non corrisponde a della RAM direttamente accessibile. Propriet` a SHR SWAP CODE DATA RES VIRT Descrizione ammontare della memoria condivisa. che a questo punto ` a e virtuale. che sar` la somma sia della parte residente (quella di RES) che di quella che a ` stata parcheggiata nell’area di swap. ma con granularit` fino al centesimo di secondo). 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) di un processo. a S TIME+ Tabella 1. a Una delle caratteristiche di top ` che se viene usato in modalit` interattiva diventa possibile e a dare una serie di comandi da tastiera. e che. si pu` alternare fra la o stampa del nome comando e della riga completa.1. ` quello espresso e dalla colonna VIRT. per una trattazione dettagliata dell’argomento si pu` o fare riferimento alla sezione 2.2 di [1].3. ad esempio con k si pu` inviare un segnale (di default ` o e SIGTERM. il tempo trascorso dall’avvio del programma (colonna TIME+) ed il comando usato per lanciarlo (colonna COMMAND). Una parte di quest’ultima (ad esempio il codice delle librerie) sar` condivisa con altri processi. Il programma per essere eseguito dovr` avere il codice ed i relativi nella memoria fisica. ammontare della memoria fisica usata dal processo (uguale a CODE + DATA). Allora il totale della memoria vista dal programma. 1.1. Seguono i dati dell’uso della memoria nelle colonne VIRT. ammontare delle pagine della memoria virtuale di un processo. e Come altre informazioni presenti nella stampa di default il comando riporta lo stato del processo (colonna S). Le principali propriet` mostrate di top a sono riportate in tab. 45 . 3. 5.34 CAPITOLO 1. la lista dei segnali disponibili pu` essere ottenuta semplicemente con: o piccardi@oppish:~$ kill -l 1) SIGHUP 2) SIGINT 5) SIGTRAP 6) SIGABRT 9) SIGKILL 10) SIGUSR1 13) SIGPIPE 14) SIGALRM 18) SIGCONT 19) SIGSTOP 22) SIGTTOU 23) SIGURG 26) SIGVTALRM 27) SIGPROF 30) SIGPWR 31) SIGSYS 34) SIGRTMIN+2 35) SIGRTMIN+3 38) SIGRTMIN+6 39) SIGRTMIN+7 42) SIGRTMIN+10 43) SIGRTMIN+11 46) SIGRTMIN+14 47) SIGRTMIN+15 50) SIGRTMAX-13 51) SIGRTMAX-12 54) SIGRTMAX-9 55) SIGRTMAX-8 58) SIGRTMAX-5 59) SIGRTMAX-4 62) SIGRTMAX-1 63) SIGRTMAX 46 3) 7) 11) 15) 20) 24) 28) 32) 36) 40) 44) 48) 52) 56) 60) SIGQUIT SIGBUS SIGSEGV SIGTERM SIGTSTP SIGXCPU SIGWINCH SIGRTMIN SIGRTMIN+4 SIGRTMIN+8 SIGRTMIN+12 SIGRTMAX-15 SIGRTMAX-11 SIGRTMAX-7 SIGRTMAX-3 4) 8) 12) 17) 21) 25) 29) 33) 37) 41) 45) 49) 53) 57) 61) SIGILL SIGFPE SIGUSR2 SIGCHLD SIGTTIN SIGXFSZ SIGIO SIGRTMIN+1 SIGRTMIN+5 SIGRTMIN+9 SIGRTMIN+13 SIGRTMAX-14 SIGRTMAX-10 SIGRTMAX-6 SIGRTMAX-2 la colonna shared veniva usata per indicare la memoria condivisa fra pi` processi. ed allora viene impiegata dai e buffer del kernel (per gestire pi` efficacemente il trasferimento dei dati verso i dispositivi) e per u mantenere dati temporanei.2 I segnali Bench´ i processi siano di norma entit` separate e completamente indipendenti fra di loro. oltre che nella pagina di manuale. e possono essere anche inviati a mano attraverso l’uso del comando kill. questo e ` corretto. 1. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX dei risultati. 1. mentre l’ultimo quello della swap (se questa ` attiva. . In genere i segnali vengono utilizzati per notificare ai processi una serie di eventi (abbiamo accennato in sez. queste possono essere ottenute separatamente tramite il comando free. La forma pi` elementare di e u comunicazione fra processi ` costituita dai segnali.2.3. che mostra un riassunto generale del tipo: piccardi@monk:~/truedoc/corso$ free total used free Mem: 775444 759364 16080 -/+ buffers/cache: 229180 546264 Swap: 498004 34708 463296 shared 0 buffers 213276 cached 316908 La prima riga riporta l’uso della memoria fisica. I dettagli sono al solito nella pagina di manuale accessibile con man free.1 che uno di essi viene utilizzato per notificare la terminazione di un processo figlio). Come dice la parola un segnale ` una specie di avviso che viene inviato ad un processo. e non e contiene nessuna informazione oltre al fatto di essere stato inviato. kilobyte (il default) e megabyte. 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). Si noti che nelle righe iniziali top riporta anche delle statistiche complessive sull’uso della memoria. in quanto non ha senso lasciare inutilizzata la RAM. -k e -m per stampare i dati di utilizzo rispettivamente in byte. torneremo sull’argomento in sez. come riportato nelle colonne buffer e cache.5). la riga centrale ci dice quanto della memoria e viene utilizzata per i buffer. adesso ` obsoleta e deve u e essere ignorata. esistoe a no molti casi in cui ` necessaria una qualche forma di comunicazione. Si noti che in genere la RAM libera ` sempre molto poca. Ciascun segnale ` identificato da un numero e ed un nome simbolico.46 Il comando non ha argomenti e prende come opzioni -b. L’elenco completo. pu` essere stampato a video o con h. 6 del nono capitolo di u o GaPiL.3. Infine e alcuni segnali (come SIGCHLD. 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. altrimenti. SIGFPE. ad esempio il segnale SIGSEGV viene inviato dal kernel per segnalare ad un processo una Segment Violation. Nella maggior parte dei casi l’azione consiste nella terminazione immediata del processo. che pu` eseguire una opportuna funzione al loro o arrivo.1.1. ma si pu` inviare qualunque altro segnale specificandone numero o nome preceduto e o da un . cio` un accesso illegale alla e memoria.4). 1. nella directory di lavoro corrente del processo.come opzione. l’effetto di questo comando ` di terminare senza possibilit` di scampo e a il processo in questione.3. . che hanno un comportamento speciale) possono essere intercettati dal processo. come spiegato in sez. dato che SIGKILL non ` intercettabile e la sua azione di default ` la tere e minazione del processo.4. il default del comando kill. o In generale il comando kill permette di inviare un segnale ad un processo qualunque. Gran parte dei segnali (tutti eccetto SIGKILL e SIGSTOP.2 di [1]. 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. si impedisce cos` ı che un accesso sbagliato possa andare a sovrascrivere la memoria di altri processi. come SIGKILL che causa l’immediata terminazione di un processo. Nel caso specifico. Ad esempio il segnale SIGTERM (che ` quello che il comando kill invia di default) serve e per richiedere la terminazione immediata di un processo. che ` quello che viene usato per notificare al padre la terminazione e di un figlio) di default vengono ignorati. Come accennato il segnale inviato di default ` SIGTERM. Tipici segnali che causano una semplice uscita sono SIGTERM. 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. Oltre a -s a e -l il comando kill accetta le opzioni -L (sinonimo di -l) e -V che ne stampa la versione. Un elenco dettagliato dei segnali. ecc. alcuni di essi vengono generati automaticamente in caso di errori del programma. o con una semplice uscita o con l’uscita eseuita o o insieme alla creazione. ma il segnale pu` essere intercettato o per eseguire delle operazioni di pulizia come ad esempio cancellare dei file temporanei prima dell’uscita.48 altri vengono inviati direttamente dall’utente. 49 nel caso di SIGCHLD non ` proprio il caso di farlo. gli altri sono chiamati real time signal ed hanno un uso specialistico che va al di l` di quello che possiamo affrontare qui. L’ARCHITETTURA DEI PROCESSI 35 I segnali effettivamente usati dal sistema sono i primi 31. cos` come tutti i segnali relativi ad errori e ı di programmazione come SIGSEGV. e SIGINT che ` associato al carattere di interruzione dato dalla tastiera (vedi sez. specificando come parametro il PID di quest’ultimo. Per una descrizione accurata delle opzioni si faccia al solito riferimento alla pagina di manuale accessibile con man kill.3. ci si ritrover` con e a degli zombie. questa pu` per` avvenire in due modi. 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. il sistema se ne accorge ed invia questo segnale che ne causa la terminazione.49 il programma cio` continua ad essere eseguito senza e nessuna conseguenza. 1. un e segnale che invece produce un core dump ` SIGQUIT.47 In a generale ciascuno di essi ha un compito o un significato specifico. del loro significato e delle azioni di default si pu` trovare nella sezione 9. 48 questo ` un’altro dei vantaggi della memoria virtuale. Se un segnale non viene intercettato viene eseguita una azione di default che ` specifica di e ciascuno di essi. quanto il suo valore di nice. Al solito la documentazione completa ` nella pagina di manuale. il valore -1 inoltre u ha il significato speciale di indicare tutti i processi correnti eccetto init ed il processo che esegue il comando. non ` un sistema operativo e a e real-time. I segnali sono un meccanismo di comunicazione elementari fra processi.3. 1. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX processo venga bloccato anche nell’esecuzione della funzione di gestione. 1. il sistema per il log e le esecuzioni periodiche dei comandi. Alcuni segnali (come SIGSTOP e SIGTERM) sono associati al controllo del terminale e vengono inviati attraverso opportune combinazioni di tasti. quello che di norma si pu` modificare a a o non ` tanto la priorit` di un processo. richiede una corrispondenza esatta anche per nomi molto lunghi (il comando controlla solo i primi 15 caratteri). 1. che servono ı a fornire vari servizi. Linux.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. e accessibile con man killall.1 non ` possibile inviare segnali ad un processo in stato D e perch´ non pu` riceverli. Tabella 1. Infine invece del PID si pu` inviare un segnale ad un intero process group (sui process group o torneremo pi` avanti in sez. Le opzioni principali disponibili sono riportate in tab. almeno nella sua versione standard.15: Principali opzioni del comando killall. e o e e a u 51 sono chiamati cos` i programmi che girano in background senza essere associati ad un terminale. come ad esempio i server di rete.52 i processi ordinari (tutti. ed invia il segnale (specificato con la stessa sintassi di kill) a tutti i processi attivi con quel nome. Un comando alternativo a kill.4 quando affronteremo le questioni relative al controllo di sessione. 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. e questo senza alcuna conseguenza per gli altri processi o per il sistema.3. Opzione -g -e -i -l -w Significato invia il segnale al process group del processo. ` cio` possibile utie e lizzarli per dare delle istruzioni (molto semplici. attende la terminazione di tutti i processi cui ha inviato il segnale. torneremo su questo in sez. ` killall che invece di richiedere un u e numero di PID funziona indicando il nome del programma. In realt`. e pi` facile da usare. 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.3 Priorit` a Abbiamo visto in sez. 1. e molti altri. 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.36 CAPITOLO 1. come accennato in tale occasione. Di norma le priorit` statiche vengono utilizzate a a solo per i cosiddetti processi real-time. 1. .4) usando un valore negativo come parametro. 1.1 che una delle propriet` dei processi che si pu` modificare con top ` a o e la priorit`. stampa la lista dei nomi dei segnali .3.3. chiede una conferma interattiva prima di inviare il segnale. che viene utilizzato per dire ai demoni 51 u e di sistema di rileggere il proprio file di configurazione. dato che non ` possie bile intercettare SIGKILL si ha a disposizione un mezzo infallibile50 per terminare un processo impazzito. come quella di terminare l’esecuzione) ad un processo.15. infatti come accennato in sez. ed ` inutile inviarli ad un processo in stato Z perch´ in realt` esso non esiste pi`. 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. Uno dei segnali pi` usati ` ad esempio SIGHUP. 52 questo nome ` in realt` fuorviante. 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. Il comando che permette di modificare il valore di nice di un processo ` appunto nice.3. questo ha una a a o sintassi diversa. del tipo: renice priority [[-p] pid . ed o aumentare cos` la priorit` di un processo. si ricordi (vedi sez.1..4 corrispondono ai comandi eseguiti su una stessa riga di shell) specificandone il process group. 1.. 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. in cui vengono eseguiti nella sequenza in cui sono stati lanciati... i ı a valori di renice sono relativi al valore di nice attuale. e lo scheduler 53 mette sempre in esecuzione.1) che lo scheduler ` la parte di kernel che decide quale processo deve essere posto in e esecuzione. Si ricordi che valori positivi corrispondono ad una diminuzione della priorit`. indicandone il PID. che e deve essere usato quando si lancia un programma. 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.3. nella forma: nice [OPTION] [COMMAND [ARG]. il processo che ha una priorit` dinamica pi` bassa.. e ci si affida al normale procedimento di scheduling. Con l’opzione -p si pu` specificare un processo singolo. 53 . aumentando a o cos` la priorit`.] [[-u] user . Se non e si specifica nulla viene applicato un valore di 10. I valori possibili sono fra 19 e -20. che di default ` nullo. 1. a differenza di nice. non avendo modo di eseguire nient’altro). con l’opzione -u si possono selezionare o tutti i processi di un singolo utente. ed in quel momento altri processi possono essere eseguiti. 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. che ` quello che poi si chiama nice.. 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). 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. secondo quello che appunto ` il meccanismo chiamato a e fairness. infine con -g si possono indicare tutti i processi di uno stesso gruppo (che come vedremo in sez. Se pi` processi hanno la stessa priorit` statica l’ordine di esecuzione dipende u a dalla politica di scheduling scelta. L’amministratore pu` anche usare valori negativi. fra tutti u a quelli in stato runnable.. in cui i processi girano o a turno per un tempo fisso.] [[-g] pgrp . Si tenga conto inoltre che. ı a Il comando nice pu` essere usato solo quando si avvia un programma. Al solito si applica la restrizione che solo l’amministratore pu` applicare valori negativi. pi` un processo viene eseguito. e e u pi` il valore di priorit` dinamica aumenta. se si vuole cambiare o la priorit` di un programma gi` in esecuzione si pu` usare il comando renice.] in cui si fa seguire a nice la linea di comando di cui su vuole cambiare la priorit`. lasciando cos` la possibilit` di ı a interromperlo. e First In First Out. che pu` essere di tipo Round Robin.] 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. L’opzione a principale ` -n che permette di specificare un valore di nice da applicare al programma. Tralasciando i dettagli possiamo dire che le priorit` dinamiche sono caratterizzate da un valore a iniziale..1. 2. (come spedire a la posta. lo standard output e lo standard error. e Comunque ` sempre possibile identificare questi ultimi. con l’introduzione delle interfacce grafiche. come accennato in sez. 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. e per maggiori dettagli riguardo a questa problematica si pu` consultare la sezione 6. Dato che questi sono i primi tre file aperti e lo sono in questa sequenza. che sono immediatamente disponibili. Avendo a disposizione un solo terminale. 55 54 . 1. nel momento in cui lancia un programma. (in sostanza degli identificatori aggiuntivi come il session id ed il process group id e le funzioni per impostarne il valore. si pu` tranquillamente scrivere un programma che si comporta e o in modo diverso. scrivendo e leggendo da un file qualunque. non potendosi pi` basare sulla semplice presenza o meno di un terminale di controllo u perch´. quando ci si poteva collegare solo attraverso un terminale.5.1.2 il sistema mantiene anche una lista dei file aperti dai vari processi. torneremo su questo in sez. se questo fosse stato occupato da un solo processo alla volta. e con l’interfaccia grafica che non fa riferimento ad un terminale. scrive l’output sul secondo. che era l’unica modalit` di interazione con il sistema.55 Convenzionalmente56 un programma legge il suo input dal primo file descriptor. ma l’interfaccia ` rimasta e mantiene comunque una sua utilit`.1 di [1]. In genere questi ultimi sono tradizionalmente chiamati demoni. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX 1.54 Essi sono rispettivamente lo standard input. servire pagine web. e della differenziazione fra processi interattivi e non. o 56 si tenga presente che ` solo una convenzione. che permettesse di lanciare ed usare pi` processi attraverso un solo terminale. questo u problema non c’` pi`. nella colonna TTY). 2. Oggi. esso si limita a mettere a disposizione alcune risorse che possono essere utilizzate per realizzare il controllo di sessione. La shell infatti. e sono programmi utilizzati dal sistema per compiere una serie di compiti di utilit`. non si sarebbero potute sfruttare le capacit` di multitasking del sistema. Essa origina dagli albori del sistema. si possono eseguire anche programmi con cui e ` possibile interagire. 1 e 2. quella delle sessioni di lavoro e del job control. e l’invio dei segnali relativi alla gestione). 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. occorre illustrare una caratteristica fondamentale dell’interfaccia a riga di comando. senza che questi siano associati a nessun terminale. si cura sempre di automaticamente tre file. ad esempio e u e a in presenza di una connessione diretta via modem in cui si ha a disposizione un solo terminale. ad essi vengono assegnati rispettivamente i file descriptor 0. che poi viene realizzato completamente in user space.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. Per questo lavorano come suol dirsi “in background ” e non hanno nessun terminale di riferimento. La gestione delle sessioni di lavoro deriva direttamente dalla procedura di login su terminale. per questo a venne introdotta un’interfaccia. (attraverso di esse). Questo per` ha comportato che la distinzione fra processi interattivi e non non sia pi` cos` o u ı semplice.3.38 CAPITOLO 1. e l’interfaccia dei terminali (cio` quella dei dispositivi di questo e tipo) fa s` che in lettura il terminale fornisca quanto scritto sulla tastiera e che quanto scritto ı sul terminale venga stampato sullo schermo. il cui indice ` appunto un numero chiamato file descriptor. in quanto discenderanno dal processo e che gestisce l’accesso attraverso l’interfaccia grafica. ciascun processo a sua volta ha una lista dei file che ha aperto. e si devono eseguire compiti diversi. Si tenga comunque presente che dal punto di vista del kernel non esiste nessuna differenza fra processi interattivi e non. secondo la modalit` a classica ereditata dai primi Unix. e gli eventuali errori sul terzo. Per capire meglio il significato di tutto questo. con la possibilit` di avere u a pi` console virtuali. ecc. eseguire lavori periodici.) anche quando nessun utente ` e collegato ad un terminale. 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. e vengono o eseguiti insieme. 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 ..1. che fa s` quando si termina una linea di comando con il carattere &.. di nuovo il programma ` sempre lo stesso. e lanciare una shell di e login. Questo ` il processo e che cura in generale la procedura di login.. che viene passato al programma login che si cura di chiedere la password ed effettuare l’autenticazione. che contraddistinguono poi quella che viene appunto chiamata una shell di login e una shell interattiva.bin -name xdvi s 0:02 | \_ gs -sDEVICE=x11 1:07 \_ emacs struttura. xdvi. emacs e lo stesso ps) hanno lo stesso SID. che i processi ı. il comando viene lanciato con le opportune opzioni. Se questa ha successo ` login che si incarica di impostare il valore del session id per il processo e in corso. 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. Tutti i programmi che si sono lanciati dalla nostra shell (xmms. dando l’avvio ad una sessione di lavoro. e gran parte delle distribuzioni usa come shell di default la bash. 2. e identificati pertanto dallo stesso valore della colonna PGID. essi infatti sono stati lanciati in background. Questa ` un’altra funzionalit` e a della shell. creata da gnome-terminal all’interno di una sessione X. sul terminale virtuale pts/2. 1.57 A questo punto si ha a disposizione una riga di comando (torneremo in dettaglio sull’interfaccia a riga di comando in sez. 3.4). Esso stampa un messaggio di benvenuto preso dal file /etc/issue (vedi sez. Poi stampa la linea “login: ” ed attende l’immissione sul terminale di un nome di login.1 si pu` notare come sia presente il processo getty o associato ai sei terminali virtuali (da tty1 a tty6) presenti sullo schermo. cambiare il proprietario dello stesso all’utente che si ` collegato. associata al terminale virtuale pts/1. E inoltre presente un’altra sessione.. 4857 4527 4527 ? 4858 4527 4527 ? 4859 4859 4859 pts/1 . L’ARCHITETTURA DEI PROCESSI 39 Negli output di ps mostrati in sez.. o i vari programmi avviati nell’esecuzione di xdvi) vengono assegnati allo process group. o lanciata come sub-shell all’interno o di una sessione. e per distinguere questo tipo di situazioni. che richiedono comportamenti diversi.1) e tutti processi lanciati tramite la shell saranno identificati dallo stesso session id . ma e una shell pu` essere eseguita anche all’interno di uno script non interattivo.3. le informazioni relative alla sessione possono essere visualizzate con l’opzione -j di ps.1. Come si pu` notare tutti questi comandi fanno riferimento allo stesso terminale..3.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. lanciando il comando dal terminale in cui si sta scrivendo queste dispense otteniamo: piccardi@anarres:~$ ps -je PID PGID SID TTY 1 0 0 ? . 57 . e che ` associato alla combinazione di tasti C-z. verrebbe automaticamente inviato un segnale (rispettivamente SIGTTIN e SIGTTOU) a tutti i processi nello stesso process group. che pu` essere fatto e o 59 Oltre a SIGSTOP.2. 1. 2. Un processo pu` essere riassociato al terminale o (cio` messo in foreground ) con il comando fg. che implementano il Mandatory Access Control e la capacit` di definire in maniera molto pi` a u dettagliata i privilegi di accesso. 2.x. come i seguenti fg e jobs. che deve essere preceduto da un carattere “%”. sottoponendo anche l’amministratore ad ulteriori restrizioni. xdvi e emacs il processo non ha bisogno del terminale (nel caso perch´ sshd e esegue il forwarding la sessione X. come accade per xmms. la cui azione di default ` quella di fermare i processi. per cui l’interazione avviene attraverso l’interfaccia grafica) questi continuano ad essere eseguiti senza accedere pi` al terminale. come quelle di SELinux.3. e alla successiva operazione sulla shell. 60 sono previste estensioni specifiche.1 Utenti e gruppi Essendo nato come sistema multiutente. La struttura di sicurezza tradizionale di un sistema unix-like ` estremamente semplice. che mostra o la lista ed il relativo stato di ciascuno di essi.40 CAPITOLO 1. 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. e ad un terminale di controllo. Quando per` un processo u o in background dovesse tentare di effettuare una lettura o una scrittura sul terminale. avremmo avuto un avviso. L’elenco dei processi in background pu` essere stampato con il comando jobs.4.5. u e 59 58 . incorporate nel kernel a partire dalle versioni di sviluppo 2. Cos` se ad esempio e ı si fosse lanciato in background l’editor jed (che opera solo tramite terminale) questo si sarebbe immediatamente fermato. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX vengano mandati in esecuzione sospendendo momentaneamente l’accesso al terminale. e non corrisponde a nessun e eseguibile su disco. Questo e a ovviamente comporta la necessit` di un meccanismo di controllo degli accessi. Linux ` nato come sistema multiutente e nella sua archia u e tettura ` nativa la possibilit` di avere utenti diversi che lavorano sulla stessa macchina. quando un processo ` associato ripartire in background con il comando bg. Se. questo necessita ovviamente di un bel po’ di lavoro amministrativo in pi` per cui non ` detto che sia sempre utilizzata. questo.4. si possono mandare altri segnali con delle opportune combinazioni di tasti: C-c invia un SIGINT e C-\ invia un SIGQUIT. questo pu` prendere come parametro sia il PID e o del processo (indicato direttamente) che il numero di job stampato da jobs. e e attenzione.1. la notazione ` formalizzata in sez. 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. quando o questo ` realizzato anch’esso come comando interno della shell (come avviene nel caso della e bash). 1.4 Il controllo degli accessi Come gi` detto e ripetuto pi` volte. vedremo la differenza in sez. ` un comando interno della shell. sintassi che pu` essere usata anche per il comando kill.58 questo ferma il processo. 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. 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. 1. non vuole parametri e stampa i gruppi cui questo appartiene. Questo ` nullo per e e l’amministratore e diverso da zero per tutti gli altri utenti. Inoltre ogni utente ` sempre e associato almeno un gruppo. lo user-ID o uid. questo. IL CONTROLLO DEGLI ACCESSI 41 l’amministratore del sistema. Un utente pu` comunque appartenere a o pi` gruppi. 4. accessibile con o man id. ad esempio: piccardi@anarres:~/gapil$ groups piccardi cdrom audio se invece il comando viene usato dall’amministratore pu` prendere come parametro un username. tradizionalmente identificato dall’username root. 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. 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. si evita cos` o ı che utenti diversi possano danneggiarsi fra loro o danneggiare il sistema. quando viene lanciato. Il comando prende molte opzioni che permettono di specificare nei dettagli quali informazioni stampare.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. Si noti il se. sia reali che effettivi ed in forma sia letterale che numerica. 2. che possono cos` venire usati per permettere l’accesso ad una serie di risorse comuni u ı agli utenti dello stesso gruppo. 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 nel caso si nega o concede l’accesso. o invocato da un utente normale.3). impedendo l’esecuzione di tutte le operazioni non consentite. e porre una serie di limitazioni a quello o ı che l’utente pu` fare. 61 .4. Ogni processo. e per questo ` da evitare assolutamente l’uso di root per qualunque compito che non sia strettamente connesso e all’amministrazione del sistema. Entrambi i comandi non hanno opzioni se non quelle standard GNU che vedremo in sez. Gli utenti poi possono venire raggruppati in gruppi. Infine il comando id permette di stampare in generale tutti i vari identificatori associati ad un processo. I controlli vengono effettuati sulla base di questo numero. Il sistema pu` cos` provvedere al controllo degli accessi. detto gruppo di default. eredita dal padre l’informazione relativa all’utente che lo ha creato (e a tutti i gruppi cui questo appartiene). per la documentazione completa. di norma si fa si che questo contenga solo l’utente in questione e abbia nome uguale all’username.1.2. o nel qual caso stampa i gruppi cui appartiene detto utente. e tutti gli altri utenti per i quali invece vengono effettuati vari controlli previsti per le operazioni che li richiedono. Questa nella sua forma pi` elementare u ` fatta dal programma login. per il quale non viene effettuato nessun controllo. sia di gruppi che degli utenti. In genere ogni utente ` identificato con un numero. al solito si pu` fare riferimento alla pagina di manuale. il group-ID o gid. Il comando che permette di verificare chi ` l’utente che lo sta eseguendo (identificando cos` e ı le proprie credenziali) ` whoami. In questo modo una volta entrati nel sistema tutti i programmi verranno eseguiti per conto dell’utente che ha effettuato il login. se ` diverso da zero si verifica se corrisponde a quello per cui la richiesta e ` consentita. ogni gruppo ha un nome (detto group name) ed un relativo identificatore numerico. . • i privilegi del gruppo (indicati con la lettera g.c ElemDaytimeTCPCuncServ. e tre permessi base: • permesso di lettura (indicato con la lettera r.42 CAPITOLO 1.h che ci mostra nella prima colonna i permessi secondo lo schema riportato in fig.c SockRead.c getparam getparam. dall’inglese read ). che ` detto proprietario del file e ad un gruppo. In sostanza per il sistema esistono tre livelli di privilegi: e u • i privilegi dell’utente (indicati con la lettera u. o 62 come le ACL (Access Control List). 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. Nel caso di un programma invece (come il getparam nell’esempio) i permessi di default sono diversi. dall’inglese write). In generale un utente pu` effettuare su un file solo le azioni per le quali ha i permessi. gruppo e altri) e l’assenza del permesso di esecuzione. e cio` e il permesso di scrittura solo per il proprietario.5. esistono estensioni62 e che permettono di renderla pi` sottile e flessibile.c SockWrite.4.c SimpleEchoTCPClient. • permesso di esecuzione (indicato con la lettera x. dall’inglese other ). e Ogni file ` associato ad un utente. 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 ErrCode. ma nella maggior parte dei casi il controllo di u accesso standard ` pi` che sufficiente. dato che e in questo caso il permesso di esecuzione ha il significato che ` possibile attraversare la directory e quando si scrive un pathname. introdotte ufficialmente a partire dai kernel 2. dall’inglese group). il proprietario di un file pu` sempre modificarne i permessi (con il comando chmod.c Makefile ProcInfo. ed il permesso di esecuzione ` abilitato per tutti.c TestRen. dall’inglese user ). • permesso di scrittura (indicato con la lettera w.2 I permessi dei file Anche la gestione dei permessi dei file ` tutto sommato piuttosto semplice. per e e ciascuno dei tre livelli di privilegio (utente. lo stesso vale per le directory.c test_fopen. dall’inglese execute).c ElemEchoTCPServer. quello di lettura per tutti quanti (proprietario.c ForkTest.c SimpleEchoTCPServer.c wrappers.x. • i privilegi di tutti gli altri (indicati con la lettera o. gruppo e altri) ` possibile specificare uno dei tre e permessi. 1.c ElemEchoTCPClient.4.c ElemDaytimeTCPServer. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX 1. il cui significato ` abbastanza ovvio. 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. vedi sez. i primi a nove sono quelli gi` illustrati in fig. una estensione ripresa da SysV.4. che viene attivato impostando lo sgid bit su un file non eseguibile. 1. sgid bit e sticky bit.1.4.3 I permessi speciali Quelli illustrati in sez.2) del file. esistono per` altri tre o permessi speciali. gli altri tre vengono rispettivamente chiamati. 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. In questo modo si pu` far eseguire anche ad un utente normale dei compiti che nel caso o generico sono riservati al solo amministratore.4. 1. 63 .4: Legenda dei permessi dell’output di ls. 1. che quando esegue un programma lo fa con i permessi dell’utente che lo ha lanciato. Ciascun permesso in realt` corrisponde ad un bit in una apposita parola a mantenuta nell’inode (vedi sez. In genere poi ogni distribuzione o fa s` che tutti i file di configurazione ed i programmi installati nel sistema appartengano a root.2. I bit usati per i permessi sono in realt` 12.4. un virus potr` al pi` infettare i file di quell’utente. 1. disattivati.4. Per i file normali tutti questi permessi hanno significato64 solo al caso di programmi eseguibili. dal loro a nome suid bit.5: Schema dei bit dei permessi mantenuti nell’inode. 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. 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. ma solo la propria e fornendo prima quella corrente. che se usato da root non ha restrizioni.2 sono i permessi standard applicati ai file. u 64 con l’eccezione del cosiddetto mandatory locking.4) per allargarli o restringerli (ad esempio i file della posta elettronica normalmente non hanno il permesso di lettura). 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.65 I primi due servono per modificare il comportamento standard del sistema. come misura di sicurezza. IL CONTROLLO DEGLI ACCESSI 43 Figura 1. ma se usato da un utente normale consente si di modificare la password. cosa che rende a u molto pi` difficile la sua diffusione. Questo ad esempio ` il modo in cui funziona il e comando passwd. 65 nel caso si cerchi di attivarli per uno script essi vengono comunque. ı cosicch´ diventa impossibile per un utente normale poter danneggiare (accidentalmente o meno) e gli stessi63 . 1. Data corrispone denza diretta con il contenuto dell’inode. per fifo e file di dispositivo contano solo i permessi di lettura e scrittura. derivata dall’architettura dei e file illustrata in sez. pur non potendone mostrare il contenuto. come vedremo a breve. che spesso lascia perplesso chi si accosta le prime volte ad in sistema unix-like. 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. lo sticky bit assume per le directory un significato particolare: se esso viene attivato pur in presenza di un permesso di scrittura per tutti. a partire dalla meno significativa. serviva nelle prime versioni di e Unix.5. a Al contrario di quanto avviene con i permessi normali. a Si noti come a differenza di altri sistemi operativi (ad esempio il VMS) non esista un permesso specifico per cancellare un file. 68 ed in generale a tutti gli altri file speciali presenti sul filesystem: hanno un significato speciale per` solo per o le directory. che come per i precedenti diventa una T qualora il corrispondente permesso di esecuzione non sia attivo. Lo a sticky bit invece modifica la lettera che indica il permesso di esecuzione per tutti in una t. Se cio` manca il permesso di esecuzione. ma quando attivati cambiano il valore della lettera associata al permesso di esecuzione. gli utenti non possono cancellare i file creati dagli altri. o una S qualora il corrispondente permesso di esecuzione non sia attivo. a privilegiare l’uso della swap mantenendovi permanentemente i programmi usati pi` di frequente. o allo scriverla (per aggiungere nuovi file e directory). Il che comporta che per cancellare un file tutto quello che serve ` il permesso di scrittura sulla directory che lo contiene. 1. Volendo specificare uno dei permessi speciali occorrer` ovviamente usare anche una quarta cifra. non ` immediato capire e cosa possa significare il permesso di esecuzione. secondo lo specchietto di fig. solo gli utenti proprietari di un file potranno cancellarlo. ma quello che ` proprietario della directory stessa.44 CAPITOLO 1. 1. si e potr` leggere il contenuto di una directory.5. e per il proprietario. si potr` a accedere ai file che essa contiene (purch´ se ne conosca il nome. mentre per i link simbolici essi vengono ignorati. ed indica che la directory pu` essere o attraversata nella risoluzione del nome di un file. Questo infatti viene ad assumere un ruolo particolare. in cui tutti possono scrivere ma in cui. corrispondenti ai valori gi` mostrati in fig. per la presenza dello sticky bit. per il gruppo.2. Questa ` un’altra caratteristica. ed considerato il fatto che i gruppi di permessi sono raggruppati naturalmente a gruppi di tre bit. cos` che ogni cifra ı corrisponde. una notazione comune ` quella di indicarli direte tamente con il valore numerico di questa parola espressa in notazione ottale.5.2. e e i permessi del file sono completamente ignorati. ma non si potr` pi` accedere a quello delle eventuali a a u sottodirectory.67 Finora abbiamo parlato di permessi applicati ai file normali.4. dato che ` questa che viene modificata. ai permessi per tutti gli altri. come accennato in precedenza. Ha assunto per`. u o La situazione completa dei bit associati ai permessi ` illustrata in 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 questa consiste solo nella rimozione di un riferimento dalla directory. 67 66 . un significato speciale per le directory. questo ` ad esempio la modalit` in cui viene e a protetta la directory /tmp. Se infatti ` immediato dare un senso al leggere una directory (per mostrare i file che e vi sono elencati). 1. dato che sarebbe intuitivo associare la cancellazione di un file al suo permesso di scrittura. Infine per le directory l’uso dello sgid bit viene utilizzato per far s` che i nuovi file creati in ı una di esse abbiano come gruppo proprietario non quello del processo che li ha creati. e Inoltre. quando memoria e disco erano risorse molto scarse e gli algoritmi per la memoria virtuale poco raffinati. Per cui i permessi di fig. mentre nel caso opposto. Questo permette al gruppo proprietario della directory e di mantenere automaticamente la propriet` dei file in essa creati. i permessi speciali non hanno a disposizione una posizione a parte nell’output di ls. ovviamente). 1. ma gli stessi permessi possono essere anche applicati ad una directory68 nel qual caso essi vengono ad assumere un significato diverso. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX Lo sticky bit ` al giorno d’oggi sostanzialmente inutilizzato. 1. si a possono specificare direttamente con la cifra 640. nella stessa forma mostrata in fig. che tutti gli altri. IL CONTROLLO DEGLI ACCESSI 45 1.1. Per questo motivo il kernel mantiene anche. 69 . si sarebbe dovuta usare una umask di 027. usando le lettere elencate in sez. esaminando con qualche dettaglio in pi` sulle modalit` con cui nuovi file e directory vengono creati. 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. 1. 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). a cancellare dai permessi ad esso assegnati tutti i bit in essa specificati. come nel caso o precedente. Di norma un utente personalizza e questo valore negli script di avvio della shell (vedi sez. cio` un permesso numerico in forma ottale di 666.6).per toglierlo. che viene ereditata nella creazione di un processo figlio.3). nella creazione di un nuovo file o directory. mentre con t si o pu` impostare lo sticky. e = per impostarlo esattamente al valore fornito. esso pu` essere u per indicare o il proprietario (user ). Se ad esempio si fosse voluto cancellare tutti i permessi per gli altri. che serve. Se invocato senza parametri il comando permette di visualizzare il valore corrente. Inoltre per gruppo e proprietario si pu` usare s per impostare i corrispondenti sgid e suid. Un utente pu` comunque modificare il e o valore di questo parametro invocando il comando umask specificando come argomento un nuovo valore69 con qualcosa del tipo: umask 027 Il valore dell’argomento di umask pu` essere specificato sia in forma numerica. che il gruppo. g per indicare il gruppo (group) e o per indicare gli altri (others). dato e o che l’invocazione di un altro programma non servirebbe a nulla.4.4 La gestione dei permessi dei file Inizieremo a trattare il problema della gestione dei permessi dei file. in quanto la system call che esegue l’operazione opera solo sul processo corrente.1.1. Dato che il valore viene ereditato nella creazione dei processi figli ` sufficiente farlo all’inizio e perch´ quanto scelto sia mantenuto anche in seguito.4. e Nella sua forma pi` elementare esso prende come parametri il valore (espresso in forma numerica u ottale) dei permessi seguito dal nome (o dalla lista) del file. a La umask specifica una maschera di bit. nel qual caso si deve specificare quali permessi conservare. pi` il u valore a che indica tutti quanti (da all ). u u L’operatore indica il tipo di modifica che si vuole effettuare. . 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. Ovviamente lasciare aperti i permessi di scrittura a chiunque non ` cosa molto saggia dal e punto di vista della sicurezza.5. per ogni processo. o si tenga presente che questo ` un comando interno della shell (vedremo il significato di ci` in sez. si possono specificare pi` gruppi usando pi` lettere. una propriet` specifica. 2. e pu` essere + per aggiungere o un permesso. 1. 2. I permessi possono anche essere espressi in forma simbolica. per cui il valore corrispondente sarebbe 777. r per la lettura read e x per l’esecuzione execute. Il comando che permette di modificare direttamente i permessi di file e directory ` chmod.2. Per le directory invece e viene attivato anche il permesso di esecuzione. In genere la umask viene impostata negli script eseguiti al login grazie al comando umask. in tal caso essi possono essere espressi nella forma: [gruppo][operatore][permesso] Il gruppo specifica a quale gruppo di permessi si fa riferimento. chiamata umask. 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). e con l’opzione -S si stampa il valore in forma simbolica anzich´ numerica. che in forma simbolica. Quest’ultimo pu` o essere w per la scrittura (write).4. e si disabilita la lettura per tutti gli altri. il primo cambia il proprietario ed il secondo il gruppo. il permesso di scrittura non basta. applicare o rimuovere regole al sistema di firewall. 1. come gi` visto in sez. Una di queste ` la possibilit` di inviare segnali ad un processo. Solo l’amministratore ha la capacit` piena di cambiare a proprietario e gruppo di un file qualunque. o deve cio` esserne proprietario. di posta o un DNS. ma che non ` detto sia presente su tutti gli Unix. Ma e a l’esecuzione generica del comando mount con parametri qualunque pu` essere effettuata soltanto o dall’amministratore. e pu` essere “p” o per indicare una fifo. “b” per indicare un dispositivo a blocchi e “c” per indicare un dispositivo 70 questa ` una caratteristica di sicurezza usata anche da BSD. si tenga e 70 un utente normale non pu` assegnare ad un altro utente i suoi file. Inoltre chown supporta per il nome utente anche la sintassi username. o Altre operazioni privilegiate sono quelle che riguardano la rete (che tratteremo a partire da cap. presente che su Linux o e pu` soltanto cambiare solo il gruppo dei file che gli appartengono. 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. ed in particolare -R esegue dei cambiamenti ricorsivamente su tutto il contenuto di una directory e --reference usa i valori di un altro file. Questo prende come e o parametri il nome del file seguito da una lettera. Solo l’amministratore pu` attivare e disattivare interfacce. Si possono anche combinare pi` u espressioni scrivendole di fila separate da virgole. g+w aggiunge il permesso di scrittura al gruppo e u+s attiva il suid bit. e cio` solo root pu` usare il comando mknod per creare un file di dispositivo. Un’altra operazione riservata. Entrambi prendono come primo argomento l’utente (o il gruppo per chgrp) da assegnare. ed assegnarli soltanto ad o altri gruppi cui egli stesso appartiene.4. Oltre ai permessi pu` essere necessario anche cambiare proprietario e gruppo di un file (o o di una directory). 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).group che permette di cambiare anche il gruppo. Le opzioni sono simili a quelle di chmod.o-r si abilita la ı scrittura per il gruppo. seguito dalla lista dei file su cui operare. e e . esegue la modifica dei permessi ricorsivamente per tutto il tratto di albero dei file contenuto nella stessa. Per questo si usano rispettivamente i due comandi chown e chgrp.5 Altre operazioni privilegiate Oltre all’accesso ai file esistono altre operazioni che devono sottostare al controllo di accesso. Il comando supporta anche l’uso dell’opzione -R che. restrizione che non vale (come tutte le altre) per l’amministratore che pu` inviare segnali a qualunque processo. 7). Ovviamente assegnare utente e gruppo ad un file ` una operazione privilegiata. modificare la tabella di o instradamento dei pacchetti. 1. La versione GNU/Linux del comando supporta anche l’opzione --reference=FILE che permette di prendere i permessi di un altro file. quando lo si applica ad una directory. All’amministratore inoltre ` riservato l’allocazione delle prime 1024 porte usate dai protocolli UDP e TCP. cosa che un utente pu` fare e a o solo con i processi che appartengono a lui. mentre o-r toglie il permesso di lettura per gli altri. Per la descrizione completa del comando e di tutte le opzioni al solito si faccia riferimento alla pagina di manuale accessibile con man chmod.2. Si tenga presente che un utente pu` cambiare i permessi solo dei file che gli appartengono. 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. cos` ad esempio con g+w. a e anche se ` possibile delegare in parte la possibilit` di eseguire questa operazione agli utenti. che indica il tipo di file speciale.4.46 CAPITOLO 1. ` il montaggio dei filesystem. Infine soltanto l’amministratore ` in grado di creare i file speciali relativi ai dispositivi. 1. anche se questi non e possono creare un file di dispositivo. Il comando stampa a video l’elenco dei file. cosa che invece ` regolata dai permessi di quest’ultimo (come file).netadmin.config. Infine alcuni filesystem supportano delle operazioni speciali.tex ----------------. pertanto se lo eseguiamo sui file di queste dispense otterremo qualcosa del tipo: [piccardi@gont corso]$ lsattr *. come ext3 e reiserfs.tex ----------------.tex ----------------. attraverso quelli che vengono chiamati gli attributi.tex ----------------.corso. gli attributi speciali infatti vannno impostati esplicitamente.tex ----------------.tex ----------------. che per l’uso delle opzioni -R.appendici. 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 non rientrano nella normale gestione dei file.tex che ci mostra come nessun attributo speciale sia stato impostato. 75 questo ` il caso normale. 74 queste estensioni sono state introdotte con ext2. 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. 73 come per tutte le altre propriet` di un file.tex ----------------. Pertanto se si ` e e stati poco accorti e si ` permesso agli utenti l’accesso in scrittura a /dev/hda. potrebbe essere qualunque e (anche se poi molti script non funzionerebbero). IL CONTROLLO DEGLI ACCESSI 47 a caratteri.16) al posto del carattere “-”. lsaddr.ordadmin. questo ` il e motivo per cui si ` scelto di trattare questo argomento in questa sezione. i file vengono sempre e creati senza che nessuno di essi sia presente. il nome sotto /dev ` solo una etichetta. 1.ringraziamenti. fornite dai filesystem che le supportano.3. quello che indica al kernel quale dispositivo usare quando si accede a quel file sono questi due numeri. Si tenga presente per` che per un utente ` comunque possibile creare una fifo usando il o e comando dedicato mkfifo.75 Quando uno di essi ` attivo e questo viene indicato nell’elenco dalla presenza della lettera che lo identifica (vedi tab.tex ----------------.advadmin.tex ----------------. Il comando ` analogo a ls sia per l’uso degli argomenti.72 Si noti che creare un file di dispositivo ` una azione diversa dall’accedere al dispositivo e sottostante. che possono essere attivata o meno a per ciascun file.stradmin. ma sono supportate anche dagli altri i filesystem pi` comuni u usati con Linux. 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).tex ----------------.tex ----------------. .shell.4.netinter. per visualizzarli esiste un comando apposito. Qualora si crei un file di dispositivo (che sia a blocchi o a caratteri ` lo stesso) e devono poi essere specificati di seguito il major number ed il minor number 71 che lo identificano univocamente.struttura.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. preceduto dal relativo valore degli attributi speciali.1. 72 per una lista completa delle corrispondenze di questi numeri con i vari dispositivi si pu` fare riferimento al o file devices. che prende come argomento il nome della stessa.netbase. Questi sono una serie di capacit` aggiuntive.txt distribuito con i sorgenti del kernel nella directory Documentation. anche la lista degli attributi attivi viene mantenuta all’interno a dell’inode. potranno comunque scriverci sopra ed ad esempio saranno tranquillamente in grado di ripartizionare il disco.tex ----------------. proprietario.16. u Come accennato alcuni attributi. o segnala che una directory viene indicizzata con gli hash tree (una funzionalit` avanzata trattata in sez. 1. attiva il cosiddetto immutable flag. Il comando supporta anche l’opzione -R per eseguire ricorsivamente le operazioni quando nella lista dei file si ` inclusa una directory.3). esclude il file dalla registrazione dei dati necessari ad eseguire il backup con dump (vedi sez. che potrebbe pertanto essere riletto.48 CAPITOLO 1.4).2.) non possono essere modificate. Solo o l’amministratore pu` attivare o disattivare questo attributo. richiede che il contenuto della directory sia salvato su disco in maniera sincrona. indica che un file compresso ` in uno stato inconsistente (dirty).3. questo prende come prie mo argomento una stringa che identifica quali attributi attivare o disattivare. e Attributo A a Significato blocca l’aggiornamento del tempo di ultimo accesso.3). riportata in e tab. oltre ad impedirne la rimozione dalla directory in cui di trova ` impossibile modificare sia il e contenuto del file che dell’inode. 79 non si sono menzionati nella tabella alcuni attributi sperimentali. permette di accedere direttamente al contenuto di un file compresso disabilitando la decompressione trasparente.1. o 78 in sostanza. o Tabella 1. 80 in genere i file di log sono la prima cosa che un intruso cerca di modificare.79 per attivare un attributo occorrer` farla precedere dal carattere “+”. e l’attributo pu` essere solo letto da lsattr. attiva il cosiddetto append flag. questo pu` essere utilizzato per salvaguardare i file di log (vedi sez. il file non pu` essere cancellao to o rinominato.80 ` cio` possibile aprire un file in scrittura soltato se lo si fa nel cosiddetto append mode. che solo l’amministratore pu` impostare. 78 di default infatti il kernel si limita a marcare i blocchi come liberi.2. ma non cancella il precedente contenuto. 5. Solo l’amministratore pu` attivare o disattivare questo attributo. 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. e come argomenti successivi una lista di file. con la presenza di questo attributo 78 . 5. e l’attributo pu` essere solo letto da lsattr.77 richiede che tutti i contenuti del file siano prima scritti sul giornale (tratteremo il journalling dei filesystem in sez. richiede che alla cancellazione il contenuto del file sia salvato in modo da poterne consentire il recupero. ecc. non si possono creare hard link n´ modificarne il e contenuto. ciascun attributo ` identificato da una lettera. o richiede che quando un file viene cancellato tutti i blocchi che contenevano i suoi dati siano riscritti su disco azzerandone il contenuto.78 richiede che il contenuto del file sia salvato su disco in maniera sincrona. 3. segnala un errore nella compressione quando questa ` stata attivata. o attiva la compressione trasparente del contenuto del file. 4.3) da eventuali o modifiche accidentali o meno. 6 di [1]. il contenuto corrente non pu` essere modificato. per i quali si rimanda alla lettura della pagina di manuale di chattr. 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. l’attributo pu` essere solo letto a o da lsattr.76 che consente la scrittura solo in coda al file. per una trattazione di e e questo argomento si pu` consultare il cap.16: Gli attributi speciali dei file. mentre se si a vuole cancellare un attributo gi` impostato si dovr` usare il carattere “-”. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX Il comando che permette di impostare gli attributi speciali ` chattr. pertanto anche tutte le altre caratteristiche del file (permessi. permettono di o utilizzare delle speciali restrizioni di accesso. come per chmod si a a possono specificare insieme anche pi` attributi. log ----i-----------. Potremo allora attivare alcuni di questi attributi (ad esempio l’append flag per un file di log.log [root@gont corso]# chattr +i /etc/fstab e potremo controllare lo stato degli attributi ottenendo che: [root@gont corso]# lsattr /var/log/auth./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. questo gli viene impedito fintanto che l’attributo non viene rimosso. 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. in questo caso baster` eseguire i comandi: a [root@gont corso]# chattr +a /var/log/auth. o l’immutable flag per /etc/fstab).4. Di nuovo questa funzionalit` a permette di proteggere file essenziali in modo da impedirne ogni forma di modifica. bench´ nelle operazioni ordinarie questo sia e sempre possibile se si hanno i privilegi di amministratore./var/log/auth.log /etc/fstab -----a----------. esistono delle modalit` operative (dette capabilities) in a cui ` possibile cedere questa capacit` e rendere pertanto impossibile una successiva rimozione dell’attributo.1. e a . 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. 50 CAPITOLO 1. L’ARCHITETTURA DI UN SISTEMA GNU/LINUX . dato che 30 anni di storia e migliaia di persone che ci han lavorato sopra per migliorarla. e piuttosto che il coltellino svizzero realizzarono l’equivalente della cassetta degli attrezzi (la “Unix toolbox ”). le opzioni sono limitate a ne abbiamo incontrati gi` diversi nel corso della trattazione delle caratteristiche del sistema in cap. con in testa un criterio fondamentale: che ciascun programma facesse una sola cosa. Ogni comando1 ` progettato per eseguire un compito preciso: ls mostra la lista e dei file. Per` ` molto difficile vedere un professionista usare il coltellino svizzero per il suo lavoro. anche le caratteristiche dell’interfaccia a riga di comando derivano da alcune scelte progettuali precise. e un carpentiere non costruisce una casa con un coltellino svizzero. Un oe professionista ha bisogno di attrezzi professionali. se non addirittura delle semplici telescriventi. Le persone che han progettato l’interfaccia a riga di comando erano appunto dei professionisti. cavatappi. che sapevano bene che anche se fare un programma unico per tutti i compiti poteva essere attraente per l’utente finale. l’interfaccia a riga u di comando resta di fondamentale importanza. ben prima della nascita delle interfacce grafiche. Questa ` la caratteristica fondamentale dei programmi base di un sistema unix-like come e GNU/Linux. Molte persone utilizzano un coltellino svizzero. la hanno resa la pi` potente e flessibile interfaccia u utente disponibile. dato che questo permette di avere in solo oggetto un discreto insieme di attrezzi diversi: coltello. I sistemi Unix nascono negli anni ’70. 2. Per cui da professionisti pensarono ai programmi come a degli attrezzi.Capitolo 2 La shell e i comandi 2. forbici.1 La filosofia progettuale Come per il sistema.1 L’interfaccia a linea di comando. che deve conoscere solo quello. 2. chmod cambia i permessi. I comandi hanno uno scopo preciso e precise funzionalit`. ne a faremo una trattazione sistematica fra breve.1) del pacchetto dei coreutils GNU. cp copia un file.3. 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. seghetto. 1. ps la lista dei processi. Arnold Robbins spiega molto chiaramente questa filosofia in un articolo riportato anche nella pagina info (vedi sez. mantenere e soprattutto estendere. in pratica questo sarebbe stato difficile da scrivere. 1 51 . nel miglior modo possibile. ecc. ma con tanti attrezzi ciascuno dei quali ` specializzato nello svolgere un e compito specifico. 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. cacciavite. che riprenderemo da quell’articolo. man mostra le pagine di manuale.1. e 2 . e chiamata per questo C shell. Questo significa semplicemente che il programma login conclude il suo compito lanciando la shell assegnata all’utente (che come vedremo in sez. concatenando vari comandi. Il passo successivo fu quello di costruire anche un meccanismo che permettesse di combinare insieme i vari programmi. un breve elenco delle varie shell disponibili anche su GNU/Linux ` il seguente: e • Bourne shell e derivate.52 CAPITOLO 2. La Bourne shell ` la shell pi` antica e le sue funzionalit` sono anche state e u a standardizzate dallo standard POSIX.2. ` di norma sostituita e da ksh. rispetto all’approccio del programma universale. riuscendo a compiere compiti complessi con grande velocit` e flessibilit`. o che ` quello di fornire l’interfaccia che permette di lanciare altri programmi. e o ed in effetti nel tempo sono state realizzate diverse shell. ` attraverso di essa che.1. Questo ` il ruolo della shell. La prima shell di Unix. inizia una sessione di lavoro su un terminale. una volta predisposta l’opportuna interfaccia di accesso. – La Bourne-Again SHell.3. 4. in cui il risultato di un comando viene inviato al successivo. il primo deriva dalla prima shell creata. essa ha per` un compito fondamentale. la shell resta un programma come tutti gli altri. a disabilitando le varie estensioni di cui ` dotata. Viene utilizzata con il comando bash. Si ricordi comunque che per il kernel.3 ` specificata dall’ultimo campo di /etc/passwd). essa pu` essere realizzata in diversi modi. in sostanza una shell e rinata. 1. Anche in questo caso ci sono stati due filoni di sviluppo. chiamata cos` dal ı nome del suo creatore. cio` del programma che implementa l’interfaccia a riga di e e comando. Questo aveva il grande vantaggio. a come la storia dei comandi (detta history). realizzata con una sintassi alternativa. Il secondo filone deriva da un’altra shell. Incorpora molte funzionalit` avanzate. in genere utilizzata semplicemente con il comando sh. come il controllo di sessione visto in sez. 1. In GNU/Linux ` sostituita da bash2 u e o da ash. Il e suo nome ` un gioco di parole sul nome della Bourne shell. e spesso fare anche cose che gli a a autori dei singoli programmi neanche si sarebbero immaginati. cosicch´ divenisse possibile eseguire. 1. Oggi con le interfacce grafiche si hanno molte e altre modalit` di accesso ad un terminale (ad esempio attraverso una finestra che contiene un a terminale virtuale). nomi di file e qualunque altra cosa. si pu` costruire l’equivalente di e o una catena di montaggio.4 quando un utente.3. e anche dei compiti che nessuno di essi era in grado di fare da solo. 2.1. 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.3. Inoltre ` sempre la e e shell che permette di usufruire di tutta una serie di ulteriori funzionalit` messe a disposizione a dal kernel. in ogni caso.2. verr` a comunque lanciata una shell. u Ciascuno di questi due filoni ha dato vita a varie versioni con funzionalit` pi` o meno a u avanzate. Dato che la shell ` un programma come gli altri. Sugli altri sistemi che rispettano lo standard POSIX. pi` simile a quella del linguaggio C. la Bourne shell. una volta completata la procedura di autenticazione.1. come accennato a e in sez. con una opportuna combinazione. l’auto-completamento dell’input sulla linea di comando (per comandi.4. secondo la filosofia fondamentale di Unix illustrata in sez. La bash ` la shell di riferimento del progetto GNU.2 Le principali shell La modalit` tradizionale con cui si utilizza l’interfaccia a riga di comando `. LA SHELL E I COMANDI e comunque specifiche allo scopo del comando. e sono descritte dettagliatamente nella relativa pagina di manuale. – La Bourne shell. Non viene praticamente pi` usata. date le opportune che quando viene invocata come sh fornisce esclusivamente le funzionalit` previste dallo standard POSIX. In GNU/Linux non ` disponibile essendo sostituita da tcsh.1. come a il completamento di comandi. ee u – La Z shell. pur essendo disponibile. 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. costrutti di programmazione complessi e molto altro (praticamente di tutto. Il riferimento pi` immediato per il funzionamento della bash ` la sua pagina di manuale. e o che ` la shell utilizzata in praticamente tutte le distribuzioni di GNU/Linux. pu` essere utile per sistemi o dove si fa un grosso uso di script perch´ ` pi` veloce di bash. e Viene usata spesso nei dischetti di installazione o recupero. Non viene usata su GNU/Linux dato che bash ne ha tutte le caratteristiche. tradotto e a u pure in italiano. realizzata in poche decine di kilobye di codice sorgente. Viene utilizzata con il comando ksh. – La C shell. editing di linea. Ha molti comandi integrati. che per` trovate anche nella bash. Viene utilizzata con il comando zsh. u e accessibile al solito con man bash.3 Per questo in seguito faremo riferimento. o • C shell e derivate. ` per` utile conoscerne l’esistenza dato che ` facile e o e trovarla su altri Unix. e poi eseguirlo. e probabilmente e ` anche la pi` potente e flessibile fra quelle disponibili. riconoscere qual ` il programma che e e volete mettere in esecuzione. e ` – La tcsh. Per le funzionalit` pi` avanzate esiste anche un ottimo manuale libero [2]. Un’altra shell avanzata.3 Introduzione alla sintassi della riga di comando Come accennato lo scopo della shell ` quello di implementare l’interfaccia a riga di comando. Pertanto il compito principale della shell ` quello di leggere una riga di comando dalla tastiera. per cui occorre un ulteriore lavoro di configurazione per utilizzarla al meglio. ed in effetti pi` che una pagina ` un manuale! u e . alla quale aggiunge history e editing di linea e varie funzionalit` avanzate. ma ` poco diffusa su GNU/Linux.1. Utilizza una sintassi analoga a quella del linguaggio C. Viene utilizzata con il comando tcsh.2). Qui parleremo per` solo di bash. ed altre funzionalit` avanzate. si vocifera sia anche in grado di fare il caff`). occupa poca RAM e poco spazio disco. quando necessario. ed ha poche funzioni (ma ` conforme allo standard POSIX. 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. 53 estensioni). alle varie sezioni in cui essa ` divisa. nel qual caso probabilmente e e non avete bisogno di leggere questo capitolo. 2. Probabilmente questa ` la pi` lunga fra tutte le pagine di e u manuale. L’INTERFACCIA A LINEA DI COMANDO. Una shell minimale. Offre praticamente le stesse funzioni della Korn shell. – La ash. E una evoluzione della C shell. 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. e Dato che ` il principale strumento di lavoro di un amministratore professionista. la scelta e della shell ` spesso una questione strettamente personale. Ha il grosso difetto che gran parte delle funzionalit` avanzate non vengono attivate di a default. L’unico motivo per volerne usare un e u altra infatti ` solo perch´ siete maggiormente pratici con quella. ricostruire i vari argomenti da passare al programma stesso. Viene utilizzata con il comando csh.2. file e argomenti. Si trova su vari a Unix proprietari. Viene utilizzata con il comando ash. 6 per i curiosi questo argomento ` trattato nei dettagli nella sezione 2. seguito da opzioni ed argomenti.54 CAPITOLO 2. per i programmi che usano queste funzionalit`.7 Questo comporta. 5 qualora si vada a capo su una nuova riga con l’uso della “\” illustrato nella nota precedente. Questa scansione viene eseguita su tutta la riga. In realt` il meccanismo ` un po’ pi` complesso. 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). ` quella in cui l’opzione ` scritta in a e e forma estesa. dato che non tutti i programmi o e fanno ricorso a queste funzionalit`. vengono interpretati dalla shell assumendo significati speciali. in questo caso. e le opzioni vanno specificate prima degli argomenti). e pu` essere compreso a e u o nei dettagli solo con un po’ di nozioni di programmazione. 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. con la possibilit` di distinguere fra opzioni e 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. per cui troveremo anche in seguito svariate eccezioni (ad a esempio in cui l’ordine conta. tutto il contenuto sar` suddiviso a in una lista di stringhe. utilizzando gli spazi vuoti come separatori e senza distinguere fra nome del comando.1. inoltre ` la stragrande maggioo e ranza dei comandi usa nomi scritti esclusivamente in lettere minuscole (si ricordi che un sistema unix-like ` case-sensitive). e 7 la funzionalit` si chiama getopt. LA SHELL E I COMANDI da scrivere sulla stessa riga4 e terminare con la pressione del tasto di invio. la possibilit` di identificare opzioni con a parametri o senza. come vedremo fra breve. Si pu` inoltre dire a o alla shell di utilizzare come separatore caratteri diversi dagli spazi vuoti. .3 di [1]. mostrato appunto nell’esempio precedente. anche il carattere di a capo viene considerato come uno spazio vuoto. gli altri infatti. cui pu` seguire (seo parato o meno da uno spazio) un eventuale valore passato come parametro (non tutte le opzioni lo prevedono. o da un argomento/opzione al successivo. una volta terminata la scansione della lista di stringhe a ottenuta dalla shell. Una forma alternativa per le opzioni. i soli caratteri non alfabetici utilizzati (molto poco) sono il “-” o il “_” e ed eventualmente i numeri. solo quelle contenenti gli argomenti restanti. qualora essa necessiti di un 4 il terminale in genere va a capo da solo o fa scorrere la riga se lo spazio disponibile sullo schermo finisce. la presenza a di un formato della riga di comando abbastanza uniforme.2 di [1]. 1. e permette l’uso di una sintassi standard per le opzioni. indicando quelli da usare con la variabile (tratteremo le variabili di shell pi` avanti) IFS. 2. la GNU C library di fig.3. 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. Si tenga presente per` che questo non ` sempre vero.6 quello che in effetti fa la shell ` e identificare il programma da usare sulla base del nome del comando. per alcune va specificata solo la lettera dell’opzione). La differenza fra opzioni e argomenti ` che le prime attivano funzionalit` o modalit` di e a a operazione specifiche del comando. La presenza cio` di uno (o pi`) spazi o tabulatori5 dice che si sta passando dal nome del comando ad un e u argomento o opzione. e di specificare questi in un ordine a qualunque. 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. per una trattazione pi` dettagliata si pu` fare u o riferimento alla sez. Per questo il nome di un comando non pu` contenere spazi. e poi spezzare l’intera riga in una lista di stringhe che verranno passate al suddetto programma come argomenti iniziali. la capacit` di passare al programma. che poi programma dovr` utilizzare al suo interno. e pertanto di nuovo non possono essere inseriti nel nome del comando. la scansione autoa matica delle stesse indipendentemente dall’ordine in cui le si specificano. e allora viene introdotta da un “--”. 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. mentre i secondi indicano gli oggetti (solitamente dei file) su cui questo opera. si possono inserire una serie di caratteri di controllo (i principali dei quali sono riportati in tab. Alcuni di questi comandi interni.9 e (tratteremo delle variabili di shell poco pi` avanti) nel cui contenuto. Vedremo nel corso delle successive sezioni. quello in cui volete lanciare un comando scrivendo direttamente quest’ultimo con le relative opzioni ed argomenti. a fianco della quale. 55 parametro. 8 . 2. e come il suo utilizzo possa essere modificato attraverso l’uso di opportuni caratteri di controllo. ed oltre PS1 ci sono anche PS2. ad esempio gzip. ma la loro descrizione si trova nella a pagina di manuale. a u Infine occorre sottolineare che quanto appena detto illustra solo il caso pi` elementare della u sintassi usata dalla shell. Quello che viene stampato come prompt ` stabilito da una variabile di shell PS1. che nel caso indicano i file da cancellare. 2. o a impostare propriet` generali che essa deve trasmettere ai programmi che essa a lancia. o dato che nell’esecuzione quest’ultimo potrebbe solo cambiare la directory di lavoro corrente per s´ stesso. nella sezione Shell Variables. pippo. il relativo valore deve essere assegnato con l’uso di un “=” (torneremo su questo in sez.8 le restanti invece verranno analizzate dal programma.1. cio` di quella scritta che compare sulla sinistra della linea di e comando. spezzata nelle cinque stringhe delimitate a dagli spazi. esistono alcune funzionalit` che essa vi fornisce direttamente tramite alcuni comandi interni (detti anche a built-in). quando non avete scritto nulla. pluto e paperino verranno considerati come argomenti. Un esempio classico di questi comandi interni ` cd. 2. a 9 in realt` in tutto le variabili che controllano l’aspetto del prompt sono 4. oltre ai normali caratteri che u saranno stampati inalterati. PS3 a e PS4. La prima stringa contiene il nome del programma e di norma viene ignorata.2. un compressore di file.2. Il primo che prenderemo in esame ` quello e e della visualizzazione del prompt. dettagliare il loro scopo va oltre le possibilit` di questa introduzione.1.3. li abbiamo gi` incontrati in sez. questo comando. 1. come in realt` sulla linea di comando si possano a a effettuare anche altre operazioni. ma non quella della shell. L’INTERFACCIA A LINEA DI COMANDO. cos` -f verr` identificata come opzione mentre.1). pu` essere invocato anche come gunzip (in genere entrambi i comandi sono presenti come o hard link allo stesso file eseguibile) nel qual caso decomprimer` invece di comprimere. lampeggia il cursore e che serve ad avvisarvi che la shell ` in attesa di ricevere dei comandi da eseguire. e Nel caso della bash il prompt ` completamente personalizzabile. che serve a modificare e la directory di lavoro corrente della shell. e che il caso pi` comune sia quello appena illustrato in u cui la shell interpreta la riga di comando per lanciare il programma che le avete chiesto.1) che verranno automaticamente espansi in un determinato valore alcuni programmi invece usano questa stringa per modificare il loro comportamento. altri li vedremo pi` avanti. in cui introdurremo le altre funzionalit` della shell. in questo caso la shell si accorger` che non ` necessario eseguire nessun programma a e a parte ed operer` direttamente sulla base di quanto dite sulla linea di comando. ad esempio quelli relativi e al controllo di sessione.4 Funzionalit` interne della shell a Oltre a quello generico di lanciare programmi. e pu` contenere diverse e o informazioni. 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. Si tenga conto poi che bench´ la filosofia di Unix sia quella di utilizzare un apposito comando e per effettuare ciascun compito specifico. Di norma i a comandi interni sono quelli che servono a eseguire impostazioni relative al funzionamento stesso della shell. ı a non necessitando questa di nessun parametro.4. gi` l’esempio precedente con rm ci mostra come a la shell esegua di per s´ anche molti altri compiti. non pu` essere eseguito con un programma esterno. e 10 . quando invocato con le opportune opzioni. mentre per cancellarne una definita in precedenza si pu` usare il comando11 unset seguito dal nome della variabile. ecc. per u e questo al di l` dell’estetica del prompt. 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. e che produce un prompt del tipo: piccardi@anarres:~/Truelite/documentazione/corso$ o quello di RedHat. lo username dell’utente. in nome della stazione. la posizione nella history del comando. eccezion fatta per l’iniziale del nome. e probabilmente riporterebbe un errore non trovando un programma corrispondente. Due esempi possibili per il prompt sono quello usato da Debian. La shell vi permette cio` di definire e modificare delle variabili. essa fornisce una lunga serie di funzionalit` generiche a a che permettono di rendere pi` efficace l’uso dei comandi. il path completo della directory di lavoro. LA SHELL E I COMANDI (come data. La modifica si effettua o semplicemente assegnando alla variabile il nuovo valore. alla e sezione PROMPTING. L’elenco delle variabili di shell gi` definite (vedremo in sez. Una delle funzionalit` fondamentali u a ` quella delle variabili di shell. qualora infatti si mettessero degli spazi la shell interpreterebbe VARIABILE come il nome di un comando.6 come effettuarne l’impoa stazione al login o quando si lancia un terminale) si pu` ottenere con il comando set. 2. il nome della directory di lavoro. 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. il tempo corrente in formato HH:MM:SS (12h). Opzione \d \H \u \w \W \$ \! \t \T Significato la data in formato tipo: Tue May 26.56 CAPITOLO 2.1. ma in realt` ıe u a ` possibile usare qualunque tipo di lettera ed. si tenga inoltre presente che questo comando viene anche usato. 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. ma ` appunto solo e una convenzione. Come ripetuto pi` volte la vera funzione della shell ` quella di semplificarvi la vita. in realt` oltre alle variabili set stampa anche tutte le funzioni definite nella shell stessa. altrimenti potete farne a meno e risparmiare spazio sulla linea di comando con un valore di PS1 come “\$”. Per convenzione le variabili di shell si scrivono con lettere maiuscole.). anche e qualunque numero ed il carattere “_”. che prevede per PS1 un valore pari a \u@\h:\w\$. 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. un $ per gli altri. il tempo corrente in formato HH:MM:SS (24h). un # per l’amministratore. che usa un valore di [\u@\h \W]\$.10 che o ne stampa a video la lista coi relativi valori. allora vi sar` utile sapere con quale utente state a operando in un certo terminale. su computer diversi. utente. L’elenco completo ` disponibile nella pagina di manuale. per impostare una lunga serie di altre propriet` della shell. Tabella 2. dovuta al fatto che cos` ` pi` difficile confonderle con i comandi.1: Principali caratteri di controllo usati nella visualizzazione del prompt della shell. 11 anche questo. stazione. come il precedente ` un comando interno interno alla shell. Questo avviene perch´ questo compito pu` essere eseguito attraverso l’uso di uno dei tanti comandi e o specialistici della Unix toolbox. La seconda opzione ` -e che attiva l’interpretazione di una serie di caratteri e speciali. la cui espressione. che vengono definite appunto nell’environment.2. una parte di queste e informazioni sono gli argomenti. in tal caso infatti la shell nell’eseguire la scansione della linea sostituir` automaticamente alla variabile il suo contenuto. l’altra parte sono appunto le variabili di ambiente. Un elenco delle principali ` riportato in tab. a seconda del valore) al comando che viene eseguito. come avrebbe fatto per una qualunque altra stringa che potreste aver scritto direttamente sulla linea di comando.3. dato che sul terminale si avrebbe l’interferenza da parte del prompt. La bash definisce di suo (o utilizza qualora siano gi` definite) tutta una serie di variabili a (come IFS. e a . che permettono sia di controllarne il funzionamento a che di accedere ad una serie di informazioni. si trova nella relativa pagina di manuale.13 Lo stesso risultato si pu` ottenere con l’uso del comando interno declare. L’INTERFACCIA A LINEA DI COMANDO.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. 2. insieme a tutti gli altri dettagli relativi al comando. 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. deve ricevere una serie di informazioni da chi lo lancia. 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. 57 La caratteristica delle variabili di shell ` che una volta definite ` possibile recuperarne il e e valore precedendone il nome con il carattere “$”. e passer` questo come argomento (o a a come opzione.1. ` quella dell’ambiente a e (in inglese environment). Se si vuole inserire una variabile nell’ambiente lo si deve fare esplicitamente usando il comando interno export seguito dal nome della variabile. 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`. e Una delle altre funzionalit` che la shell fornisce con l’uso delle variabili.6). che evita e u e la stampa del carattere di a capo alla fine della stringa passata come argomento.1.1. il cui solo compito ` e e stampare in uscita la stringa (o le stringhe) che gli vengono passate come argomento: siccome la shell esegue automaticamente l’espansione delle variabili prima di passare gli argomenti ad un comando. che deve essere gi` definita. con una sintassi del tipo export VAR=val. accessibile con man echo. a o 12 in sostanza quando un programma quando viene lanciato con la opportuna chiamata al sistema (l’argomento ` trattato nel capitolo due di [1]). 2.2. cha abbiamo gi` incontrato). La prima ` -n. In particolare il comando da usare ` echo. Questa ` utile e quando si vuole costruire una riga con pi` invocazioni e la si usa in genere all’interno di uno u script (accenneremo agli script in sez. 13 la bash supporta anche la definizione della variabile nella stessa linea in cui viene esportata nell’ambiente. cos` se nella variabile MAIL mettete la directory ı in cui si trova la vostra posta elettronica. che. 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. dopo di che quest’ultima viene passata come argomento ad echo. altrettanto non accade per la visualizzazione della stessa. 2. e l’elenco completo ` descritto nella sezione Shell Variables della pagina di manuale. a Il comando echo ` uno dei pi` elementari e prende due sole opzioni. esso viene utilizzato per poter utilizzare il valore di alcune variabili di shell anche all’interno dei programmi che questa mette in esecuzione. la stamper` a video. 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. nella classica forma VARIABILE=valore.1. ma con l’uso dell’opzione -x ` del tutto equivalente ad export. con un ambiente modificato rispetto a quello della shell. Il comando prevede diverse opzioni. separata da “:”. La lista delle directory in cui si trovano i comandi. EDITOR che indica quale programma usare come editor predefinito. che serve in generale ad assegnare variabili e funzioni (tratteremo queste ultime in sez. La descrizione del sistema operativo corrente. Le variabili di ambiente sono di grande importanza perch´ sono usate in moltissimi casi per e controllare alcuni comportamenti predefiniti dei programmi. Il numero di comandi da mantenere nella storia dei comandi. che indica il nome dell’utente corrente. Il massimo numero di linee da mantenere nel file della storia dei comandi. Per rimuovere una variabile di ambiente si e utilizza sempre unset. onde evitare di a ottenere risposte non previste quando si esegue il comando in un ambiente che pu` essere stato “manomesso”. da passare come argomento. Se si vuole solo una semplice lista di nomi con relativo valore si pu` usare il comando env. 2. PATH che specifica la lista delle directory dove cercare i comandi.14 mentre con una serie di opzioni -u (o --unset) si possono cancellare altrettante variabili di ambiente (da specificare come parametro per l’opzione). dichiara una variabile intera. dato che molti comandi rispondono ai valori delle variabili di ambiente. o 14 .1. Una lista. inserisce la variabile nell’ambiente. Tabella 2. e si otterr` la lista delle variabili presenti nell’ambiente precedute dalla a dichiarazione declare -x.3. 2. evita che sia stampata la definizione completa delle funzioni. attiva il tracing per la funzione. con l’opzione -i (o --ignore) infatti l’ambiente viene completamente svuotato.58 Variabile HOSTNAME OSTYPE PWD GLOBIGNORE HISTFILE HISTFILESIZE HISTSIZE HOME IFS PATH CAPITOLO 2. o questo in generale permette di eseguire un altro comando. Alcune impostazioni e valori di uso generale vengono allora memorizzati in una serie di variabili che di norma ogni shell deve definire. LA SHELL E I COMANDI Significato Il nome della macchina. TERM che specifica il tipo di terminale su cui si sta operando. La directory di lavoro corrente. Tabella 2. Per visualizzare le variabili di shell presenti nell’ambiente si pu` usare lo stesso export o senza specificare nulla.2: Principali variabili di shell. ecc. stampa tutti gli attributi associati ad una variabile o una funzione. ` in genere una misura di sicurezza e provvedere un ambiente noto e ben definito cancellando preventivamente quanto gi` presente. 2. Se si invoca env senza argomenti il comando si limita a stampare la lista delle variabili di ambiente.6) per ricreare l’ambiente. Il file in cui viene memorizzata la storia dei comandi. Il carattere che separa gli argomenti sulla linea di comando. di nomi di file da ignorare nel filename globbing. riportate in tab. HOME che ne indica la home directory.3: Opzioni del comando interno declare. stampa solo le funzioni. come USER.6) o impostarne gli attributi. Opzione -a -f -i -r -t -x -F -p Significato dichiara una variabile vettoriale. La home directory dell’utente. rende variabile in sola lettura. voi potete sempre scrivere solo il nome del file al posto del pathname completo: se cio` volete leggere una pagina di manuale.17 ./comando La variabile PATH ha la forma di una lista di pathname di directory. un e pathname per accedere al comando. col rischio di guai seri qualora ci` avvenisse per l’amministratore. solo non vengono trovati i relativi programmi. 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./ dove di nuovo si ` usato la capacit` della shell di espandere il valore delle variabili. ecc. In genere15 questo nome deve corrispondere al nome del file che contiene il programma che la shell deve eseguire.1.2. come visto nell’esempio iniziale di sez. Si noti come in e questo caso siano indicate solo le directory che. sia in forma assoluta che relativa. o 16 la shell riconosce questo quando nel nome del comando compare il carattere “/” che indica una directory. 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. contengono i programmi di uso per l’utente. ad esempio perch´ il programma che volete lanciare non ` in una di quelle e e directory e non sarebbe trovato. Se volete evitare questo comportamento.2 per le directory dove sono mantenute le librerie di sistema.. 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. che verrebbe eseguita al posto dell’originale. ` necessario specificare. ma qualcuno potrebbe sempre creare un programma la e aspettarvi al varco per un comune errore di battitura di ls . Si pu` fare cos` perch´ la shell esegue automaticamente una ricerca nel cosiddetto PATH dei o ı e comandi. 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. In sostanza. L’INTERFACCIA A LINEA DI COMANDO. che funziona e a anche all’interno della sintassi usata per assegnare le stesse. ad esempio in sez. separati fra loro da un carattere di due punti. Si tenga conto che PATH ` comunque modificabile dall’utente. sono pertanto assenti18 directory come /sbin. Si noti come una riga del genere non esegua nessun programma. 3.3. 2. 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. che pu` personalizzarla a e o piacere.1. /usr/sbin.2. che usualmente vengono inserite dentro PATH soltanto per l’amministratore. come ad esempio la directory corrente che di norma non vi ` mai inclusa.3. 1. lo reincontreremo spesso.16 per questo in genere per lanciare un comando (o uno script) nella directory corrente si usa la sintassi: piccardi@monk:~/Truelite$ .. ed aggiungere un’altra directory. nel qual caso il nome pu` essere del tutto arbitrario. . cio` del fatto che essa vi permette di associare un nome scritto sulla linea di e comando ad un programma da lanciare. in realt` e a non ` che non funzionano. baster` scrivere man e non sar` necessario e a a specificare /usr/bin/man. 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. ` o e vero che si inserisce la directory corrente in coda a PATH i comandi standard hanno la precedenza. limitandosi ad utilizzare esclusivamente le funzionalit` interne a 15 vedremo a breve come si possono creare dei comandi personalizzati attraverso l’uso degli alias.19 Il dubbio casomai pu` essere sul come farlo senza doversi riscrivere tutto e o da capo il contenuto precedente. 18 questo ` il motivo per cui alcuni comandi “non funzionano” quando chiamati da utente normale.1. 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:. nella standardizzazione del filesystem illustrata in sez. a a Un’altra funzionalit` di grande utilit` fornita della shell ` il cosiddetto filename globbing. 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 ). Per cancellare un alias si pu` usare il comano do unalias seguito dal nome dello stesso. 20 . 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. questa avviene da sinistra a destra nell’ordine in cui le directory sono elencate all’interno di PATH. LA SHELL E I COMANDI della shell. ne stampa a video il pathname assoluto. 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. 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. o type. 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. 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. mentre con altre shell (ad esempio la csh) pu` essere necessario utilizzare un comando apposito come rehash. 21 o un alias. per questo se si vuole capire se si sta usando un comando interno o un programma. nel secondo una abbreviazione per l’uso di ls -l e nel terzo si ridefinisce rm in modo che di default sia richiesta conferma nella cancellazione dei file.20 Se non u viene trovato nessun programma corrispondente non sar` stampato nulla. definire abbreviazioni per quelli pi` usati. o ridefinire lo stesso nome di un comando per u farlo comportare in maniera diversa. Se cio` all’interno di una riga di comando si usa come argomento un nome che contiene e uno di questi caratteri jolly. dato il nome di un programma presente nel path search.21 si pu` usare un altro comando interno. ci permette cos` di ideare nuovi ı comandi.60 CAPITOLO 2. 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 si indica il nome di un comando interno della shell questo non viene considerato. o Come complemento alla gestione del path search la shell fornisce il comando interno which che. 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. tex corso.toc baseadm.tex ringraziamenti. Infine come ultima modalit` di espansione si pu` utilizzare il carattere “~” per indicare la home directory dell’utente a o corrente.pdf Struttura. Ma oltre a queste due wildcard elementari la shell ne supporta di pi` sofisticate. ponendole fra due parentesi quadre. mentre si pu` usare la notazione ~username per indicare la home directory di un altro o utente.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. L’INTERFACCIA A LINEA DI COMANDO. 22 .toc corso.log netadmin.pdf netadmin.tex Si tenga presente che il meccanismo dell’espansione ` quello descritto per cui il risultato della e stessa ` che viene passato al comando come argomento (o come argomenti.tex shell. il carattere “*” indica un numero arbitrario di caratteri qualsiasi mentre il carattere “?” indica un solo carattere qualunque.log ringraziamenti.tex netadmin. la lista dei nomi dei file a corrispondenti all’espansione dei caratteri jolly. 61 directory corrente.pdf corso.pdf baseadm. se sono pi` di uno) e u il nome (o i nomi) del file che corrisponde.tex baseadm. Le alternative possono essere espresse con una lista dei caratteri voluti messi uno di seguito all’altro.2. per cui ad esempio se si fosse eseguita la riga di comando: piccardi@anarres:~/Truelite/documentazione/corso$ ls ??? Entries Repository Root questo significa che al programma sar` passato.log baseadm.tex fdl.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]*. Per capire meglio facciamo alcuni esempi di filename globbing: supposto che per essi venga usata la solita estensione . Si pu` inoltre invertire la selezione dei caratteri specificati fra o parentesi quadre precedendo la lista o l’intervallo con un carattere di “^”.pdf Struttura. invece di un singolo argomento.22 Come nel caso del DOS o del VMS.aux fdl.pdf.log Struttura.toc netadmin.log corso.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.1.toc texput. e se ne trover` di corrispondenti espander` il nome contenente il carattere a a jolly nella lista dei file.tex struttura. mentre si possono specificare degli intervalli (corrispondenti a tutti i caratteri compresi fa i due estremi) usando due caratteri separati da un “-”.tex config.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]*. cos` si possono indicare elenchi di possibili u ı alternative per un singolo carattere. si potranno vedere tutti i documenti PDF presenti in una directory con una riga di comando come: piccardi@anarres:~/Truelite/documentazione/corso$ ls *. 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. secondo la sintassi di ls.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. ` quella che viene chiamata command expansion. la cosiddetta history. usando i tasti di freccia in alto e in . 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 “\\”. ` quello di definire la e stringa racchiudendola fra virgolette (").62 CAPITOLO 2. Il filename globbing e l’uso delle variabili di ambiente sono funzionalit` molto utili. Uno di a questi ` la barra trasversa “\” che anteposta ad un carattere ne disabilita l’interpretazione. Per risolvere questi problemi esistono dei caratteri che permettono di disabilitare del tutto o in parte le capacit` della shell di interpretare in maniera speciale altri caratteri. che permette di accedere. o il carattere “$” usato per referenziare le variabili si avrebbe il problema che la shell cercherebbe di espandere la relativa espressione. in tal caso la stringa sar` interpretata in maniera assolutamente letterale. come se lo si fosse scritto manualmente. Un inconveniente analogo ci sarebbe per i nomi dei file che contengono degli spazi: dato che lo spazio viene usato per separare fra di loro gli argomenti. asterischi ı e punti interrogativi. un tale nome verrebbe spezzato in due con il risultato di passare al comando due argomenti invece di uno. 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. che disabilita il filename globbing e l’interpretazione degli spazi. il contenuto di tale a directory. 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. a Un’altra funzionalit` molto utile della shell che si attiva con una sintassi simile alla specifia cazione delle stringhe. Simile alla command expansion ` la cosiddetta arithmetic expansion che permette di vae lutare delle semplici espressioni aritmetiche. dato che non riporta file di tre lettere. per` a o talvolta presentano degli inconvenienti. quindi ci verr` stampato. si pu` cio` usare come e o e argomento nella riga di comando il risultato di un altro comando. o usando la sintassi equivalente $(comando).tex’: No such file or directory rm: cannot lstat ‘vecchio. e mette il suo output sulla riga di comando. si capisce anche come da questa espansione si possano trarre ulteriori potenzialit` di utilizzo. 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. a L’ultima funzionalit` generica della shell che prenderemo in esame ` quella della storia dei a e comandi. Questo pu` essere fatto in due modi. per farlo si usa una sintassi del tipo di “$(())” all’interno della quale si inserisce l’espressione da calcolare. cos` che al suo interno si possano usare spazi. si pu` eliminare anche questa se al posto delle virgolette si usano gli o apici singoli (’). Il risultato ` questo perch´ l’unico nome di file di tre lettere presente nel caso dell’esempio ` quello e e e della directory CVS. ad esempio se si volesse passare ad un comando come argomento un file il cui nome contiene uno dei caratteri jolly. LA SHELL E I COMANDI si sarebbe ottenuto un risultato forse inaspettato. il o primo. racchiudendo quest’ultimo fra due apici inversi (‘). 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 “$”. In questo caso quello che succede ` che la e e shell esegue il comando racchiuso fra apici inversi. tex 524 which chown 525 ls -l $(which chown) 526 history 527 history si tenga infine conto che il carattere “!”. con il valore che si pu` usare con “!” per richiamarla. 2.3.1 ` appunto quello della redirezione e dell’I/O. in cui o ogni riga ` numerata progressivamente. Come accennato in sez. Nel file vengono salvate fino ad numero di righe massimo specificato attraverso la variabile HISTSIZE. 523 ls [^A-Z]*.23 Diventa cos` possibile non solo rieseguire i comandi precedenti.2. si potr` verificarlo con: a piccardi@anarres:~/Truelite/documentazione/corso$ history . o .. o metterlo in una stringa delimitata da apici singoli. indicandola sia per numero che tramite le prime lettere. e per usarlo in maniera letterale occorre o proteggerlo con la barra rovesciata. 1. 523 ls [^A-Z]*.. come mostrato nel primo esempio viene espanso quando usato nella linea di comando.4 quando la shell lancia un comando uno dei suoi compiti ` aprire e preventivamente 3 file. lo standard input. 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. ma che pu` essere cambiato in qualunque altro o file specificato dalla variabile HISTFILE. La bash infatti mantiene in memoria ogni linea di comando eseguita e poi quando esce salva l’elenco in un apposito file.1. che di default ` e .1.tex 524 which chown 525 ls -l $(which chown) 526 history e richiamare un comando con: piccardi@anarres:~/Truelite/documentazione/corso$ !526 .1. o richiamare con l’uso del carattere “!” una a specifica voce. Con il comando history inoltre si pu` visualizzare l’intero contenuto della history. alle linee di comando eseguite in precedenza. In sostanza il meccanismo che ci permette di costruire quella catena di montaggio cui accennavamo in sez.. navigando avanti ed indietro ı lungo la storia con i tasti di freccia in alto e in basso. 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). permettendoci ee di combinare fra loro i vari comandi. L’INTERFACCIA A LINEA DI COMANDO.bash_history (nella nella home dell’utente). 2. lo standard output e lo standard error. associati ai primi 23 e si pu` anche indicare una dimensione massima del file con HISTFILESIZE. 63 basso.. Per maggiori dettagli riguardo tutto l’argomento si pu` fare riferimento alla sezione HISTORY EXPANSION del manuale della o shell.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. . non proprio intuitivo. ksh(1). e pertanto corrispondono alla tastiera per i dati in ingresso e allo schermo e per i dati in uscita. -t che stampa i tabulatori come ^I. su di esso vengono scritti solo gli eventuali messaggi di errore...25 Usato cos` il comando non ` di grande utilit`. questo (il suo nome. 24 lo standard error non viene. l’utilit` del comando ` relativa. Questi nel caso di shell interattiva sono associati al terminale su cui essa ` eseguita. per cui alla conclusione della riga verr` letto quanto appena scritto. mai usato. e andare avanti e indietro. a meno che questo non sia previsto come argomento).). 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 scrivono i loro dati in uscita sullo standard output. magari pi` sofisticati come more e less. dato che il comando legger` il contenuto e lo riverser` sullo standard output. e non scrivono tutto di file in un colpo solo sul terminale dove poi l’inizio va perso nello scorrimento delle scritte sullo schermo. tutti i comandi unix si aspettano di ricevere i loro dati in ingresso sullo standard input (e non da uno specifico file o dispositivo. come -n che stampa un numero progressivo per ogni riga. 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.64 CAPITOLO 2. Seguendo una convenzione comune. 1 e 2). insieme ai dati in uscita. lo si vedr` 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.profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1). ed essendo quea a st’ultimo collegato al terminale.24 Prendiamo allora come esempio il comando cat. Il comando comunque prende alcune opzioni per facilitare la visualizzazione. in generale. Se non si specifica nessun file come argomento il comando legge di default dallo standard input. PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games" . ash(1). ma questo solo perch´ si ` usato lo stesso file dello standard output. -v che visualizza i caratteri non stampabili. e -E che scrive un $ alla fine di ogni riga.. ad esempio inviando un end-of-file sull’input con C-d. 25 questo avviene in quanto sul terminale si quello che si chiama I/O bufferizzato. per uscire dal comando occorre nel caso indicare che la lettura ` a e conclusa. e e ad esempio quando si redirige lo standard output. per cui i dati in ingresso vengono letti e scritti una riga alla volta. non ` cos` essendo i due file distinti. in caso di operazioni regolari. dato che programmi per visualizzare il a e contenuto del file ce ne sono altri. in genere non serve a molto scrivere qualcosa ı e a sulla tastiera per vederselo ristampare sul terminale ad ogni riga. La descrizione completa si trova al solito nella pagine di manuale accessibile con man cat. 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. Nel caso di shell interattiva questi di nuovo vanno sul terminale e compaiono sullo schermo. che permettono u anche di vedere il file un pezzo alla volta. ed a il comando lo riscriver` sullo standard output. e ı. LA SHELL E I COMANDI tre file descriptor (0. o interrompere il programma con un segnale. . La redirezione dell’output avviene in maniera identica associando lo standard output ad un file. e nel secondo si sarebbe potuto usare cp.. > filecompleto La redirezione dello standard input ` invece molto utile con i programmi che richiedono e l’immissione dei dati da tastiera. . il cui scopo come dice il nome stesso non ` quello di mostrare a e un file. ksh(1). 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. L’INTERFACCIA A LINEA DI COMANDO. Per questo ` e bene essere consapevoli della modalit` con cui il meccanismo funziona. se invece esiste viene prima troncato a zero e poi sovrascritto. specificando il suo numero prima a o dell’operatore. cio` con la redirezione dell’I/O.. 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.profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1). detti appunto di redirezione. Come accennato quando si effettua una redirezione dello standard output il file di destinazione viene sovrascritto.. riscrivendolo sullo standard output. 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. che nel caso ` stato rediretto sul nuovo file.26 Vediamo allora come si usano di questi due operatori. ad esempio si pu` redirigere lo standard error con l’operatore “2>”. La shell e infatti riconosce sulla riga di comando vari operatori.. ` stato rediretto o e dall’operatore “<” sul file /etc/profile. emerge solo quando esso viene unito alla capacit` della shell di modificare i file associati a a standard input. invece di essere associato al terminale.1.). 26 . una modalit` alternativa di stampare a il contenuto di un file con cat. standard output e standard error. 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 .. specie quando questi vengono eseguiti in uno script. e qui emerge anche o la vera utilit` del comando cat. si legge sempre dallo standard input che per` in questo caso. ` utilizzando un comando del tipo: e piccardi@anarres:~/Truelite/documentazione/corso$ cat < /etc/profile # /etc/profile: system-wide . Per`. se infatti si pensasse di a aggiungere dei dati in fondo ad un file con un comando del tipo di: cat file addendum > file in realt` si pu` effettuare la redirezione su un qualunque file descriptor. per e cui quest’ultimo risulter` appunto essere la concatenazione del contenuto di tutti i file passati a come argomenti. dato che nel primo caso si sarebbe potuto stampare direttamente il file. occorre pertanto stare molto attenti a non cancellare dei dati.. I dettagli sulle varie forme di o redirezione possono trovare nella pagina di manuale alla sezione REDIRECTION. ash(1). 65 La vera utilit` del comando. Una volta definiti quali dati sono necessari infatti li si potranno scrivere in un file. in cui invece di leggere un file specificato dalla riga di comando. con cp si pu` solo copiare il contenuto di un file su un altro.2. Fin qui di nuovo niente di particolarmente utile. Si tenga a conto che se il file su cui si effettua la redirezione non esiste viene creato. e farli leggere al programma semplicemente con la redirezione dello standard input. . Per ovviare a questo problema ` disponibile un altro operatore di redirezione. che usa l’operatore “|”. Comprese alcune delle pi` esoteriche a u che permettono di redirigere pi` file. “>>”.1. 2. Questo operatore infatti permette di collegare l’uscita del comando che lo precede con l’ingresso del successivo attraverso una pipe. 1. basta inviare questi ultimi con una pipe al programma sort il cui solo scopo ` quello di effettuare riordinamenti nelle modalit` pi` varie. ma non ` detto che altri e e programmi (o versioni non GNU di cat) siano in grado di farlo. redirige lo standard error : scrive gli errori 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. redirige lo standard output e lo standard error : scrive errori e risultati del comando cmd sul file file. 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. a Vedremo in sez. LA SHELL E I COMANDI si andrebbe incontro ad una sgradita sorpresa.1.27 che come indica il nome funziona appunto come tubo di collegamento fra i due comandi. redirige lo standard output: scrive il risultato del comando cmd sul file file. 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. il cosiddetto pipelining. 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). Questo significa che si pu` fornire come dati o in ingresso ad un comando quelli prodotti in uscita da un altro.4 un riassunto delle principali modalit` di redirezione utilizzate nella shell.4: Principali modalit` di redirezione. u che ` del tutto analoga alle fifo incontrate in sez. ad esempio non ` pi` necessario dover inserire in tutti i comandi una opzione per e u ordinare in maniera diversa i risultati. e poi ci viene scritto sopra il risultato. ma esiste solo come file descriptor accessibile dall’interno dei processi interessati. pipelining: redirige lo standard output del comando cmd1 sullo standard input del comando cmd2. 2. Quello che avviene con la redirezione infatti ` e che prima viene creato o troncato il file.1. redirige lo standard output e lo standard error del comando cmd1 sullo standard input del comando cmd2. per quanto utile. 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. fornendo un risultato per il successivo.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: scrive il risultato del comando cmd accodandolo al contenuto del file file. Nel caso specifico cat ` in grado di rilevare la situazione anomala e stampare un errore. il che comporta che nell’esempio in questione cat alla lettura di file lo troverebbe vuoto. Gi` questo comincia a farci intuire le capacit` intrinseche nel funzionamento della riga di a a comando. solo che in questo caso non ` associata ad un oggetto e e nel filesystem. ` per` marginale rispetto ad una forma e o ` di redirezione molto pi` potente. Cos` si possono lanciare in ı sequenza una serie di comandi in cui ciascuno elabora i risultati del precedente.2. Tabella 2. 27 .66 CAPITOLO 2. concludiamo questa sezione riportando in tab. 1.3. usano proprio degli script di shell per eseguire le loro operazioni. anche se finora ne abbiamo parlato solo come del programma che implementa l’interfaccia a riga di comando. ma che e viene lanciato come parte dalla chiamata al sistema che esegue un nuovo programma. Quello che ` importante sottolineare e e qui ` che la shell non solo pu` essere invocata in maniera interattiva. e il formato ELF. 5. 30 in Linux esistono sostanzialmente due formati binari. ma pu` anche essere lanciata non inteo rattivamente facendole eseguire direttamente quello che appunto si chiama uno script. ecc. dal punto di vista del contenuto del file non cambia assolutamente nulla.2. che permette di utilizzare le librerie condivise e mettere in esecuzione gli altri programmi. le sue carattee ristiche principali si trovano comunque nella sezione SHELL GRAMMAR della pagina di manuale. 1.2. a esattamente come avrebbe fatto se di fosse trattato di un eseguibile compilato. come avveniva per i file .6 Scripting elementare Una delle capacit` fondamentali della shell ` che. quando ` associata ad un e o e terminale ed utilizzata dagli utenti per dare comandi. 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. di avvio del sistema infatti. ed oltre ad eseguirlo a come tale la shell provveder` anche a passargli gli argomenti scritti nella riga di comando. in questo caso la si invoca come un qualunque altro comando. usato nelle serie successive. e poi renderlo eseguibile. 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. 29 questo ` un programma speciale. ` 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. per quanto sia poco a elegante e piuttosto limitato. come il python o il perl. si a e possono inserire delle sequenze di comandi in dei file per farli eseguire direttamente senza doverli riscrivere tutte le volte. 31 renderlo eseguibile in questo caso significa attivarne il permesso di esecuzione con chmod +x. con sintassi del tipo bash script. tanto che.bat del DOS. per la sua immediatezza. L’INTERFACCIA A LINEA DI COMANDO. e prende come argomento il file dello script da eseguire. che usano questa funzionalit` il carattere # indica l’inizio di una riga di commento.3. rispetto quanto avviene sulla riga di comando. ed un ottima risorsa per quanti vogliano approfondirlo ` [2]. u E per questo motivo che la shell. usato nei kernel delle serie fino alla 1. 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. Ma se questo ` pi` o meno tutto quello che si pu` fare con il DOS.4. questo resta un normale file di testo. che vi permette di effettuare anche compiti di notevole complessit`. 28 . 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. che vengono trattati esattamente allo e stesso modo. 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). come richiesto dal FHS trattato in sez. che non costituisce un programma a se (ed infatti sta sotto /lib). viene comunque ampiamente utilizzato. sotto /bin.31 In a questa maniera uno script sar` del tutto equivalente ad un comando binario. 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). dato che ` e essenziale per l’avvio del sistema. Nel caso degli script per`. La descrizione dettagliata del linguaggio della shell non ` affrontabile adesso.1.2. condizionali. per automatizzare una grande quantit` di compiti per i quali non vale la pena ricorrere ad un a linguaggio di pi` alto livello.out. che oltre ad eseguire i programmi nel formato binario standard30 ` in grado di eseguire anche gli script. come vedremo in sez. Dato che per la shell e per tutti i linguaggi di scripting. 67 2. quello chiamato a. 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. usando il “. e u . Una sintassi e delle istruzioni che. Questo consente di a eseguire in alternativa due comandi.3. a Una prima sintassi ` quella che permette di eseguire pi` comandi distinti sulla stessa linea.1. 2.68 CAPITOLO 2. La convenzione ` che un valore nullo (cio` e e 0) significa il successo dell’operazione. sono generalmente poco usate in quanto meno indicate ad un uso interattivo. 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. La prima modalit` prevede che i singoli comandi o a siano separati fra di loro tramite il carattere “. E inoltre da specificare che qualora invece si concatenino dei comandi senza condizionali con l’uso del “. Per questo la shell. 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.” verr` riportato il codice di uscita a dell’ultimo comando eseguito.” 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 “. dove n ` il e ` con un controllo numero del segnale (ed ovviamente il comando viene considerato fallito). 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. e u questo pu` essere fatto in tre modi diversi. La presenza di un codice di uscita ` molto importante. o dipendenti da funzionalit` specifiche degli script. che assume il significato di AND logico.”. in tal caso si tratta semplicemente di scrivere quello che altrimenti si scriverebbe su linee diverse su una riga unica. in genere lo si usa per verificare se un certo file esiste e poi eseguire un comando.” si fosse premuto invio. E automatico su questi valori che vengono prese le rispettive decisioni nell’uso dei operatori “&&” ` e “||” quando la shell concatena dei comandi. per quanto siano utilizzabili in teoria anche sulla riga di 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. LA SHELL E I COMANDI quella elementare illustrata in sez. mentre un valore non nullo (in genere 1) indica che c’` stato un errore. in genere lo si usa per eseguire le operazioni da effettuare solo in caso di errori. la cui terminazione pu` essere resa esplicita con questo metodo. Queste due ultime modalit` fanno riferimento. che invece assume il significato di OR logico. ad una caratteristica comune di tutti i programmi che una volta eseguiti riportano (nel caso specifico alla shell che li ha lanciati) uno stato di uscita che serve ad indicare se le operazioni sono state concluse correttamente. In questo caso si avr` che il comando a successivo all’operatore verr` eseguito soltanto se il precedente ha fallito. per stabilire se un comando ha avuto o meno a successo. La terza modalit` prevede che i diversi comandi sulla stessa linea vengano separati dall’opea ratore “||”. lo memorizza nella variabile speciale “?”. nel ricevere lo stato di uscita di un comando.32 o La seconda modalit` ` quella in cui i comandi che si vogliono eseguire vengono separati a e dall’operatore “&&”. specie per gli script che possono usare e questa informazione per capire se ci sono stati problemi. Questo consente allora di eseguire un secondo comando solo se il primo ha avuto successo. e Al di l` della semplice logica dei due operatori “&&” e “||”. infatti $* nelle istruzioni usate negli script viene a a e considerata come un’unica stringa. cio` condizione di riuscita) o l’istruzione else (se non nullo. o. else comando . Tabella 2. seguito da un altro then e da altri comandi. cio` e e fallimento). fi then dove dopo l’if si esegue il comando specificato. e a e seconda del suo codice di ritorno verranno eseguiti alternativamente i comandi indicati dopo l’istruzione then (se nullo..4) che vi memorizza il valore di e alcuni parametri interni. se non ci sono alternative. Il primo ` quello usato per specificare delle e esecuzioni condizionali ed ` basato sull’istruzione if.. comando . La sintassi pu` essere pi` complessa in quanto si pu` sostituire l’istruzione else con un’istruo u o zione elif che invece di eseguire una serie di comandi ripete un successivo blocco condizionale. 2. queste istruzioni possono essere ripetute fino a chiudere la sequenza con l’istruzione else. queste variabili vengono mantenute direttamente dalla shell stessa (non ha cio` senso assegnarle direttamente come visto in sez. con $2 il secondo. L’INTERFACCIA A LINEA DI COMANDO.2. La lista degli argomenti. La lista degli argomenti. ecc. 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).5: Principali variabili speciali. chiudere definitivamente il blocco condizionale con l’istruzione fi. non esistendo e il file licidi. Il nome della shell o dello script. @ ? $ ! 0 La variabile ? ` una delle variabili speciali (descritte nella sezione Special Parameters e della pagina di manuale). Il pid del programma in background che ` stato eseguito e per ultimo. questo comporta ad esempio che nel caso si usi la prima in una istruzione for si avr` un solo ciclo. Ad esempio quando si lancia uno script con degli argomenti con $# si ` ottiene il numero degli stessi. con $1 il primo. Di questi illustreremo solo i pi` significativi (l’elenco completo ` nella u e sezione SHELL GRAMMAR della pagina di manuale). e Il codice di uscita dell’ultimo comando eseguito. Il pid della shell.5.. Se espansa fra virgolette come "$@" ` equivalente alla lista dei singoli argomenti. che ` quello che specifica la condizione. costituita da tanti elementi quanti sono gli argomenti passati allo stesso. mentre $ viene espansa in una lista. in realt` questa ` fondamentale negli script. la differenza fra $* e $ pu` sembrare non significativa. mentre nel secondo. 2.. E inoltre possibile ottenere una stringa contenente tutti gli argomenti con $*.33 L’elenco delle principali variabili speciali ` riportato in tab. mentre con la seconda si avranno tanti cicli quanti sono gli argomenti. propri di un vero linguaggio u di programmazione.1. Variabile # * Significato Il numero degli argomenti passati ad uno script. e se si stampano le due variabili con echo non se o ne vedr` nessuna. mentre con $@ si ottiene la lista degli stessi.1. la sua forma generica `: e e if comando. no. a 33 . 69 e nel primo caso il comando ` stato eseguito correttamente. prendendo come argomento un altro comando da usare come condizione. la shell provvede anche delle a istruzioni che consentono di creare costrutti sintattici pi` complessi. ecc.70 CAPITOLO 2. Una delle caratteristiche comuni a tutti i linguaggi. anche se in questo caso vengono applicati alla lista dei valori forniti dall’espressione. done (e analogo per until). e la shell non fa eccezione.. secondo uno schema del tipo: while comando. . ` quella della e possibilit` di definire delle funzioni cui fare eseguire compiti ripetitivi.. oltre alla leggibilit`. con una sintassi generica del tipo di: o case expr in valore1) comando . .) e che permette di eseguire comandi diversi a seconda dei valori che detta espressione pu` assumere. . . piuttosto che ai file. esac in cui ogni caso viene terminato da un doppio “. Infine l’istruzione for permette di compiere dei cicli su un numero stabilito di alternative. ed il valore generico ` indicato da un *. 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 i singoli valori con cui viene confrontata l’espressione sono terminati da una parentesi chiusa. do comando done dove var ` la variabile che assumer` per ciascun ciclo ciascuno dei possibili valori risultanti e a dall’espansione dell’espressione lista. Questa capacit` aggiunge a a una ulteriore funzionalit` alla linea di comando in quanto oltre ad eseguire i comandi binari e gli a .. e L’utilit` di case rispetto all’uso di una serie concatenata di if ed elif. 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. 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.. valore2) comando . o che prende come parametro una espressione che possa assumere valori diversi (una variabile. eseguendo ogni volta la lista dei comandi inserita nella sezione seguente delimitata dalle istruzioni do e done. *) comando.. definendo una variabile che pu` essere utilizzata all’interno del ciclo.”.... in questo modo si possono eseguire dei cicli condizionali.. una command expansion. do comando .. Questo consente allora di raggruppare in maniera flessibile valori simili e trattarli con una unica serie di istruzioni. con una sintassi del tipo: o for var in lista ... 2. 2. come illustrato in sez.. Il primo di questi ` seq.6. 2. in tal caso queste vengono espresse scrivendo questi ultimi come argomenti . Il comando pu` eseguire controlli su una enorme serie di diverse condizioni.. 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. e non e nullo altrimenti.2. in questo modo si possono costruire delle condizioni molto complesse. 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.1. a Oltre alle istruzioni interne della shell esistono anche una serie di comandi che sono stati grati proprio per facilitare la scrittura di scritp. e viene utilizzato. Il comando inoltre supporta l’uso di alcuni operatori. 4. equivalente alla condizione falsa e al fallimento del comando. Questo comando ` molto utile quando si vogliono fare dei cicli. e viene introdotta dalla parola e chiave function (ma lo si pu` fare anche a linea di comando. ritornando un valore nullo se la condizione ` verificata. Oltre alle condizioni sui singoli file il comando pu` essere usato per esprimere condizioni o relative a due file. Buona parte delle condizioni verificate da test fanno riferimento alle propriet` dei file. 71 script.1 per indicare che un comando ha avuto successo. cui o e u segue in nome della funzione e il costrutto (). In generale una funzione ` definita all’interno di uno script. Nel caso di true si avr` un valore nullo che nelle condizioni a implica vero. come “!”. che permette di stampare e sullo standard output una sequenza di numeri. } dove ciascuna linea conterr` un comando. comando2. L’INTERFACCIA A LINEA DI COMANDO. Altri due comandi speciali sono true e false. ` solo molto pi` scomodo). in sostanza la forma ` sempre qualcosa del tipo: e function nome () { comando1. infine con tre argomenti il secondo viene usato come valore di incremento nell’intervallo che inizia con il primo e finisce col terzo. che non fanno assolutamente nulla se non fornire alla shell un valore di ritorno. sono riportati in tab.3. che viene raggiunto sempre a passi di uno. specificate attrao verso una opportuna espressione. Se invece si usa false questo restituisce un valore non nullo. partendo da 1 ed incrementando di uno. 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.. che come tale deve essere riconosciuto. non si tratta infatti di una sintassi interna della shell ma di un comando esterno.3) per gli account degli utenti di sistema che non devono avere una shell. e la combinazione logica di due espressioni con l’uso delle opzioni -a e -o (che indicano rispettivamente l’AND e l’OR). che anteposto ad una espressione ne nega il risultato. . Questi due programmi vengono usati spesso come shell di default (vedi sez. specificando due argomenti si indicano il valore iniziale ed il valore finale. o usare un alias per fare riferimento ad un comando. le principali opzioni utilizzate. dopo di che il corpo della funzione ` delimitato e fra parentesi graffe. 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. lo si e pu` infatti usare per generare una lista di numeri da utilizzare con l’istruzione for. i cui valori o possono poi essere utilizzati all’interno del ciclo. ed il relativo significato. 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 ]. in a questo caso la condizione viene espressa con una opzione seguita dal nome del file cui la si vuole applicare. 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. direttamente all’interno della shell corrente. u u e 36 in generale un utente pu` sempre lanciare.6: Opzioni per le condizioni sui file del comando test. u Una ultima serie di condizioni riguarda l’uso di stringhe e numeri. minore uguale. Se infatti si lancia uno script esso viene eseguito come tutti gli altri comandi. e che deve e pertanto essere in grado di gestire tutte le problematiche relative al controllo di sessione illustrato in sez. dopo il login. Un’altra modalit` ` quella della shell di login (vedi sez. pi` sintetica ma anche pi` criptica. maggiore uguale. il sistema comunque ne o provvede una di default. usando il comando source. 1. 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. minore.3). 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). -ge.3. vedi sez. -gt. 4. -le. 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. per questi ultimi valgono gli operatori di confronto dei valori come -eq. in cui essa ` associata ad un terminale. non si ` pu` pensare di far questo lanciando uno script che contiene i relativi comandi. separati dalla relativa opzione.36 Queste modalit` in realt` came a a biano pochissimo. e una sintassi alternativa. che viene eseguito da un altro processo. bench´ il programma sia lo stesso. e diverso). E per` possibile o o eseguire i comandi di uno script senza usare una subshell. 1. il cui significato ` banale e (uguale. 35 34 . Per le stringhe invece si possono usare gli operatori “=” e “!=” per indicare rispettivamente uguaglianza e disuguaglianza. Ora ` abbastanza chiaro che. al posto di source.35 cui dare come argomento il nome dello script da cui leggerli. e Oltre ad una sintassi pi` complessa. e Per cui se si vogliono automatizzare una serie di impostazioni per la 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.1) u mentre con -ot che sia pi` vecchio (negli stessi termini). con -ef si richiede che essi abbiano lo stesso inode. -lt e -ne. quello che le contraddistingue ` che nel caso di shell di login viene sempre e cio` un’altra istanza della shell. l’uso degli script ci pone di fronte ad alcune sottigliezze u del funzionamento della shell.4. e l’opzione -z serve a verificare se la stringa ` vuota. 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.2. ` quella di usare . che invece non sono necessarie quando la si invoca per eseguire una script. Questa ` la modalit` che a e e a viene usata dal programma login quando d` all’utente un accesso al sistema e che in genere a ` alla radice di ogni altro programma lanciato dall’utente. varie altre shell interattive. maggiore. e non per la shell originaria da cui esso ` stato lanciato. con -nt si richiede che il primo sia pi` recente (in termini di tempo di ultima modifica. # see /usr/share/doc/bash/examples/startup-files for examples.4.1. i file .4.bash_profile. ash(1).bash_login e .37 in cui l’amministratore di sistema pu` inserire una serie di impostazioni comuni per tutti gli utenti. ksh(1)..). then PS1=’\u@\h:\w\$ ’ else if [ "‘id -u‘" -eq 0 ]. (questo vale ad esempio per le shell lanciate dentro un terminale sotto X) al posto e ` dei precedenti file viene letto quest’ultimo.4) rispetto al valore impostato per il sistema e si utilizzano le impostazioni personali poste in un altro file.profile. . senza guardare gli altri. Infine viene impostato il valore della umask (vedi sez. ed eseguire un source di questo file all’interno di . E per questo che conviene inserire in esso le proprie personalizzazioni. che pu` essere considerato una sorta di file di configurazione per o la shell. il prompt usando un valore di PS1 che sfrutta le funzionalit` di tab.2. dopo aver letto /etc/profile la bash cerca nella home degli utenti.bashrc. Si noti comunque che nessuno di questi file deve essere eseguibile.bash_profile. L’uso di . poi. in modo da averle disponibile in tutti i casi.bash_profile: executed by bash(1) for login shells. then source ~/.bashrc fi dove sostanzialmente si modifica la umask (vedi sez. PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games" if [ "$BASH" ].login. .bashrc ].. se la shell ` una o e bash. # the files are located in the bash-doc package.profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1). Un esempio `: e questo vale in generale per tutte le shell derivate dalla Bourne shell. ` il seguente (l’esempio ` preso dalla versione installata di default su una Debian): e e # /etc/profile: system-wide . 37 .bash_profile ` il seguente: e # ~/. 1. Per permettere agli utenti di personalizzare la loro shell di login. in quest’ordine. umask 027 # include . ed esegue i comandi nel primo che trova (e per il quale ha il permesso di lettura). 73 letto ed eseguito (all’interno della shell corrente) il contenuto del file /etc/profile. then PS1=’# ’ else PS1=’$ ’ fi fi export PATH PS1 umask 022 in questo caso si pu` notare come prima venga impostato la variabile PATH. altrimenti (supa ponendo una shell generica) vengono usati direttamente i caratteri # e $ a seconda che l’utente sia o meno l’amministratore. 1. 2.1. L’INTERFACCIA A LINEA DI COMANDO. o Un esempio di questo file.bashrc per le impostazioni ` dovuto al fatto che se la shell ` interattiva ma non e e ` di login. Un esempio di e . quelle derivate dalla C shell usano /etc/csh.4).bashrc if it exists if [ -f ~/. per cui ` sufficiente il permesso di lettura. dato che non viene eseguito come script. . # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for examples # If running interactively. ` naturale che la maggior parte dei comandi e e abbia a che fare con le operazioni di manipolazione dei file.bashrc). Abbiamo gi` visto nel cap.bashrc: executed by bash(1) for non-login shells. LA SHELL E I COMANDI # ~/.. 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. then # . In questa sezione affronteremo gli altri comandi che permettono di operare sul contenuto dei file ed eseguire su di essi operazioni pi` complesse. in cui sono mantenute le impostazioni generali scelte dall’amministratore per tutto il sistema. then # don’t put duplicate lines in the history. then: if [ "$PS1" ].. .bashrc. mv. #if [ -f /etc/bash_completion ]. ecc. 1 i a comandi elementari che ci permettono la gestione dei file sul filesystem come cp. e 2. rm. #esac # enable programmable completion features (you don’t need to enable # this.${USER}@${HOSTNAME}: ${PWD}\007"’ # . if it’s already enabled in /etc/bash. /etc/bash_completion #fi fi ed in questo caso quello che si fa ` definire una serie di alias.bashrc per i singoli utenti esiste un equivalente di /etc/profile anche per le shell interattive. ln. #*) # . che ` /etc/bash. e Si tenga conto che oltre a . ed un nuovo prompt. mkdir.74 CAPITOLO 2. See bash(1) for more options # export HISTCONTROL=ignoredups # enable color support of ls and also add handy aliases if [ "$TERM" != "dumb" ].2 I comandi dei file Dato che in un sistema unix-like tutto ` un file. e dato che buona parte di queste vengono u effettuate con la redirezione vedremo anche delle applicazioni di quest’ultima. che si viene dato come valore per l’opzione -p di renice).1. a e o Le opzioni in genere sono di due tipi. Il vantaggio di questo programma ` la sua velocit`. tutti i programmi a infatti prima esaminano le opzioni. ad esempio --tabsize=80. esso infatti non e a ` un’altra delle funzionalit` introdotte dalla sezione delle GNU libc che permette di gestire le opzioni a riga e a di comando. 2. u Il primo fra i comandi usati per cercare i file l’abbiamo gi` incontrato in sez.1 con ps). Invece a a per l’uso del “-” vale la convenzione. serve a localizzare nel filesystem tutti i file che contengono nel loro pathname la stringa passata come argomento. e esistono comunque una serie di caratteristiche comuni. Questa ` comunque solo una convenzione.2 I comandi per le ricerche sui file La ricerca di uno specifico file all’interno del filesystem. il valore dovr` essere specificato di seguito all’opzione. e non ` seguita da tutti i comandi. come anticipato in sez. 2. 2. Questo per` esegue la ricerca solo fra i comandi. 2. I COMANDI DEI FILE 75 2. La principale caratteristica comune a quasi tutti i comandi ` la gestione delle opzioni che avviene come illustrato in sez. Per questo scrivendo “--” prima del nome del file l’interpretazione delle opzioni sar` terminata ed il nome (anche se inizia per “-”) sar` preso come argomento.1 Caratteristiche comuni Bench´. in tal caso questo. ed ` perci` molto diffusa. 38 . Cos` se ad esempio avete in file il cui nome inizia per “-” vedrete che non ` affatto facile ı e cancellarlo con rm. Infine una menzione speciale per due casi particolari. segnalando errori se ne trovano di inesistenti. che ci indica a quale file eseguibile corrisponde un certo comando. o delle a opzioni pi` complesse che.2. quelle pi` e u comuni.2.1. dei semplici switch. 1.3. per quei comandi che prendono come argomento un file. dato che i comandi relativi ai file sono la maggioranza. Se l’opzione estesa deve indicare un valore questo deve essere specificato in forma di assegnazione con un =.2. e --version che stampa il numero di versione. ` una operazione molto comune. e poi trattano gli altri argomenti. 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).1. 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. anche se si applicano in generale a qualunque tipo di comando. permettono u di passare dei valori al comando (come il process ID del processo cui applicare un cambiamento di priorit`. 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. di considerarlo (a seconda del contesto) come sinonimo dello standard input o dello standard output. in genere la combinazione “--” viene utilizzata per indicare di aver completato le opzioni.3) anche una versione estesa delle opzioni. come in maniera analoga ad un cursore o una manopola. Tutti i comandi GNU ad esempio supportano le due opzioni --help che stampa una schermata riassuntiva della sintassi.38 in modo tutti gli argomenti che seguono verranno usati direttamente senza essere considerati una opzione anche se cominciano per un “-”. ogni comando sia specializzato per fare un compito specifico. nel a formato che varier` da caso a caso. facendo una ricerca nel PATH.3 e alcune di esse. le tratteremo qui. o dei file con una certa serie di caratteristiche. in cui queste si possono specificare con parole intere invece che con singole lettere. e non solo a quelli che riguardano i file. a a Inoltre comandi del progetto GNU supportano (come accennato in sez.2. ed ` a e which. 2. (come abbiamo visto in sez. tendono ad essere le stesse. nel qual caso esse iniziano con un “--”. e per questo sono stati sviluppati alcuni comandi molto e flessibili. dato che il comando si lamenter` di una opzione sbagliata. che permettono di effettuare le pi` complesse tipologie di ricerca. che come suggerisce il u e nome.1. o Il comando pi` veloce per cercare un file qualunque ` invece locate.4. alcuni infatti e e usano delle sintassi diverse per eredit` storiche. La prima categoria (descritta nella sezione OPTIONS) contiene le opzioni vere e proprie. Il comando riconosce l’opzione -i. Le altre opzioni e la descrizione completa del comando ` al solito disponibile nella relativa pagina e di manuale accessibile con man locate. se si vuole ricercare su quest’ultimo occorre usare -path. 3. Tabella 2. -path). i vari tempi. gli identificatori. tipo. seguita da un numero di livelli indica il massimo numero di volte che scende in una sottodirectory. ecc. permettono di modificare il comportamento del comando. secondo i vari tempi (-atime. la seconda. ad esempio con l’opzione -name si pu` effettuare o la classica ricerca sul nome del file. Si pu` ridurre il carico comunque facendo effettuare u o la ricerca su sezioni ridotte dell’albero dei file. La ricerca ` effettuata e esattamente sul nome del file cos` come ` scritto nella directory che lo contiene. o ma esegue la ricerca direttamente nel filesystem. si pu` usare il comando find. la quarta (descritta nella sezione OPERATORS) contiene le opzioni che permettono di combinare fra loro diverse selezioni. LA SHELL E I COMANDI effettua la ricerca scandendo il contenuto del disco. che richiede che venga effettuata una ricerca case insensitive. da quelli sul nome del file in varie forme (con -name. resta nel filesystem corrente e non analizza sottodirectory in altri filesystem. ad esempio con -maxdepth si pu` limitare la ricerca ai o primi livelli di sottodirectory. Un elenco delle principali e opzioni di ricerca. -mtime) per tipo di file. Le opzioni generiche. ecc. proprietario. a quelli per u gruppo e utente (con -group e -user).8. descritte da altrettante sezioni della pagina di manuale (accessibile al solito con man find).). filesystem su cui ` il file. con tanto di supporto per le wildcard (che per` vanno o adeguatamente protette per evitarne l’espansione da parte della shell). ma in piccolo database interno che contiene l’elenco di tutti i file presenti nel sistema. le principali delle quali sono riportate in tab.2. 2.7: Principali opzioni generiche di find. che non utilizza un database. il . 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. se non si specifica nulla la ricerca partir` dalla directory corrente. a permessi.7. e -e che richiede che sia verificata l’effettiva esistenza del file.1). ed inoltre ` in grado di cercare o e solo i file gi` inseriti nel database. mentre con -mindepth la si pu` far partire da un certo sottolivello. Il comando inoltre consente l’uso come argomento di espressioni analoghe a quelle usate dalla shell per il filename globbing. 3. o Opzione -follow -mount -maxdepth -mindepth Significato dereferenzia i link simbolici. non sul suo ı e pathname. 2. a Il comando supporta quattro categorie principali di opzioni. -regex. il comando infatti prende come primo argomento la directory da cui iniziare la ricerca. seguita da un numero di livelli indica quanti livelli di directory ignorare prima di iniziare la ricerca. Questo viene in genere creato dal comando updatedb (vedi a sez. (descritta nella sezione TESTS) contiene le opzioni di ricerca che permettono di selezionare i file in base ad una loro qualunque propriet` (nome. 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. che controllano il comportamento di find. la terza (descritta nella sezione ACTIONS) contiene le opzioni che permettono di specificare una azione da eseguire per ciascun file che corrisponde alla ricerca. secondo i permessi (con -perm). per cui se un file ` stato creato da poco non potrete vederlo. e Alcune di queste opzioni vanno chiarite. e Per superare i limiti di locate.3. Per tutte le opzioni che prendono un valore numerico (quelle sui tempi. -ctime. con il relativo significato ` riportato in tab.76 CAPITOLO 2.3) che viene eseguito in genere una volta al giorno (fra i lavori periodici di cron che vedremo in sez. al costo di una notevole attivit` su disco. che verr` eseguita ricorsivamente in tutte le directory a sottostanti. far eseguire una . -mmin -5 . Il nome del file corrisponde al pattern pattern. se si usa il segno . trattandosi di una maschera di bit. e Seleziona sul tipo di file. e Il gruppo proprietario ` group.2.8: Principali opzioni di find per la ricerca. Un file acceduto n giorni fa. Come accennato una seconda importante categoria di opzioni ` quella relativa alle azioni. -atime +15 . il valore di c corrisponde alla lettera usata da ls e riportata in tab. le opzioni -cmin e -mmin eseguono lo stesso controllo rispettivamente con i tempi di ultimo cambiamento e ultima modifica. . In questo caso per`. le opzioni -ctime e -mtime eseguono lo stesso controllo rispettivamente con i tempi di ultimo cambiamento e ultima modifica. mentre con +mode una in cui siano attivi un bit o un altro. mentre precedendolo con un + si richiede che sia superiore. se invece si usa + la richiesta ` ancora pi` debole ed il file corrisponde e e u purch´ almeno uno dei bit di mode sia attivo. Cos` ad esempio se si vuole cercare i file modificati u u ı negli ultimi 5 minuti si dovr` fare: a piccardi@anarres:~/Truelite/documentazione/corso$ find .2.8 con n./shell. il cui valore mode deve essere specificato in ottale. 1. si pu` richiedere che un file sia e ı o pi` vecchio o pi` giovane di un dato tempo. 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). Come prima il valore o e senza segno richiede la corrispondenza esatta. le opzioni u -cnewer e -mnewer eseguono lo stesso controllo rispettivamente con i tempi di ultimo cambiamento e ultima modifica. numero di link).1. Un file acceduto pi` recentemente di file. il significato ` diverso.tex mentre se si vuol cercare quelli non acceduti da pi` di quindici giorni si far`: u a piccardi@anarres:~/Truelite/documentazione/corso$ find . La dimensione del file ` n.tex Una spiegazione a parte poi deve essere fatta per l’opzione -perm.come per gli altri valori numerici. Per questo si possono usare le altre due forme. Il pathname del file (comprese quindi le directory a partire dalla radice) corrisponde al pattern pattern. 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. Il group ID del gruppo proprietario ` n. che ` stato indicato in tab. In questo modo con -mode si pu` richiedere una e o condizione in cui siano attivi un bit e un altro./ringraziamenti.si richiede invece che il valore sia inferiore. L’user ID del proprietario ` n. I COMANDI DEI FILE Opzione -amin n Significato Un file acceduto n minuti fa. nel caso dei tempi. precedendolo con il segno . Prevede anche -ipath per una ricerca case insensitive. I permessi corrispondono a mode. Prevede anche -iname per una ricerca case insensitive. 2. il comando permette una sintassi molto e potente: specificando solo il numero si richiede una corrispondenza esatta. ` e e possibile infatti. per ogni file che corrisponde al criterio di ricerca specificato. e Il file ha n hard link. ` cos` allora che per esempio. e supporta i due segni + e . e Il proprietario ` user.allora u mode specifica la maschera dei bit dei permessi che devono essere presenti sul file (i bit nulli cio` vengono ignorati). -atime +15 -exec mv \{\} old \. Viceversa con -or la seconda opzione viene eseguita solo se la prima ` falsa. un comando. Se non si specifica nulla l’azione di default ` quella di stampare il nome del file. L’elenco delle opzioni principali ` riportato in tab. lo stesso vale per e tutte le azioni. ma si possono anche scrivere i nomi su un file qualunque usando l’opzione -fprint file. una ulteriore modalit` di ricerca ` quella che permette di effettuare a e . Infine -not e nega il risultato di una opzione. stampa il nome del file terminato con un carattere NUL (il valore 0). scrive il nome del file sul file file. LA SHELL E I COMANDI certa azione. che una azione) viene eseguita solo se la prima ` e e vera. 2. se uno non ha successo i successivi non saranno eseguiti. e equivalente alla opzione -print. e falso altrimenti. o Il problema ` che tutti questi caratteri vengono interpretati dalla shell. 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). Tabella 2. diventa meno chiaro quando o si ha a che fare con delle azioni. Qualora si voglia essere sicuri di eseguire tutti i comandi in una lista si pu` usare l’operatore o “. si potr` usare un comando del tipo: a piccardi@anarres:~/Truelite/$ find . per ogni file corrispondente alla selezione. ma si avr` un valore finale corrispondente a all’ultimo della lista. Abbiamo allora visto come find ci permette di trovare un file in base al nome e alle sue caratteristiche generiche.” nel qual caso saranno eseguiti comunque tutti.”. ma cambia profondamente quando ci sono di mezzo delle azioni come -exec. Opzione -exec -print -print0 -fprint file -ok Significato esegue un comando usando come argomento il nome del file. in detta riga si pu` fare riferimento al file che corrisponde con la stringa {}. La e sintassi dell’opzione ` complessa in quanto si deve inserire una riga di comando all’interno di e un’altra. ma quella di gran lunga pi` importante e u ` -exec che permette di eseguire. Per questo ad esempio specificare con -and pi` comandi (o semplicemente scriverne pi` di u u uno.9. o usare vari formati.9: Principali opzioni di find per specificare azioni. Ma se il significato di -and o -or pu` sembrare immediato nel caso di criteri di ricerca.78 CAPITOLO 2. e quando si esegue una selezione il valore ` automaticamente vero. tranne -exec (e derivate come -ok) in cui il valore ` vero se il comando ha uno e stato di uscita nullo. Nel caso si combinino opzioni di ricerca tutto questo ` del tutto ininfluente riguardo il e risultato del comando. 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. Quando si usa -exec tutto quello che segue viene interpretato come una riga di comando fino a che non si incontra un carattere “. In realt` infatti il comando associa un valore logico ad ogni a opzione. e devono quindi essere e adeguatamente protetti. dato che in tal caso il -and ` sottinteso) non significa affatto che essi saranno eseguiti tutti: e lo saranno solo se tutti hanno successo. stampa il nome del file terminato con un a capo. o si inverte la selezione con -not). come -exec ma chiede conferma del comando. Il funzionamento di un operatore come -and (che ` sottinteso se si specificano pi` opzioni) e u ` che la seconda opzione (sia questa di ricerca. allora se ad esempio si vogliono spostare tutti i file non acceduti da pi` u di 15 giorni un una directory old. e ci sono delle convenzioni usate dal comando per passare i valori. che ` quello che ci si aspetta intuitivamente (entrambe le condizioni di e ricerca devono essere soddisfatte per -and o solo una per -or. al solito si rimanda alla pagina di manuale per u una descrizione pi` completa. Di nuovo le opzioni del comando sono moltissime.tex:%% Dispense amministrazione base struttura. interpreta la stringa di ricerca come espressione regolare normale (il default).10 le pi` importanti. se se ne ` indicati pi` di uno) nella quale ha rilevato e u una corrispondenza. indica esplicitamente la stringa di ricerca (serve a proteggere stringhe di ricerca che iniziano con “-”). -r che effettua la ricerca ricorsivamente. dallo standard input e scrive sullo standard output. sopprime la stampa del nome del file in testa a ciascuna riga di output (quando sono pi` di uno).tex:%% Dispense amministrazione base Altre opzioni del comando sono -i che permette di effettuare ricerche case insensitive.2. si sono riportate in tab.tex Struttura. interpreta la stringa di ricerca come espressione regolare in stile Perl. 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.tex:%% Dispense Amministrazione di rete shell.39 L’uso elementare di grep ` banale. 2. sospende la stampa in uscita dopo N corrispondenze.tex:%% Dispense editor e amministrazione di base corso. esegue la ricerca in forma ricorsiva. sono una specie estensione del sistema del filename globbing (che abbiamo illustrato in sez. inverte la selezione. e -v che inverte il risultato della ricerca (cio` stampa le righe e che non corrispondono alla stringa utilizzata). -s -v Tabella 2. Il comando stampa in uscita ogni riga del file (o dei file. Il comando che implementa questa funzionalit` ` grep.tex:%% Dispense amministrazione base baseadm. interpreta la stringa di ricerca come una espressione regolare estesa. ma solo il numero totale delle stesse. qualora non gli sia passato nessun file come argomento. Ad esempio: piccardi@anarres:~/Truelite/documentazione/corso$ grep Dispense *. o sopprime la stampa degli errori al riguardo di file non leggibili o non esistenti. u u .4) in cui.tex:%% Corso Linux : Dispense dei corsi GNU/Linux di Truelite netadmin. o regex. si possono effettuare corrispondenze fra stringhe con un grado di complessit` incredibilmente elevato. stampa il numero di riga del file in testa a ciascuna linea in uscita. ripetendola anche per tutti i file contenuti nelle sottodirectory di quelle passate in ingresso (pu` essere specificata anche come -R). ma permettono anche di effettuare ricerche u estremamente evolute attraverso l’uso delle espressioni regolari. diventa allora evidente la sua 39 le espressioni regolari. 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. attraverso una serie di operatori.1. dall’inglese regular expressions. stampa il nome del file in testa a ciascuna riga di output (anche se si ricerca su un solo file). Come gli altri comandi Unix anche grep legge.10: Principali opzioni del comando 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.2. u non distingue fra maiuscole e minuscole. stampa le linee non corrispondenti. I COMANDI DEI FILE 79 ricerche in base al suo contenuto. 2. questo le rende allo stesso tempo a uno degli strumenti pi` potenti ed uno degli argomenti pi` ostici del mondo Unix. non stampa le righe con le corrispondenze. Alcune delle espressioni usate nel filename globbing si ritrovano anche nelle espressioni regolari. pertanto si potranno identificare i commenti in un file di configurazione con l’espressione regolare “^#” mentre con l’espressione “^$” si identificheranno le righe vuote. 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. e questo ` spesso causa di confusione ed errori. Si noti come facendo cos` si possano effettuare ricerche sempre pi` mirate semplicemente ı u concatenando in successione diverse chiamate al comando. Gran parte dei caratteri (tutte le lettere. caratteri di controllo. 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). cio` una struttura e e ordinata di caratteri e stringhe. indicato con una sintassi speciale che ` quella delle espressioni e regolari.80 CAPITOLO 2. La trattazione dettagliata delle espressioni regolari va ben al di l` delle possibilit` di questo a a 40 in cui ci limiteremo a fornire la descrizione delle funzionalit` pi` elementari. e i numeri) di una espressione regolare non viene interpretata. e . maiuscole o minuscole. punteggiatura. a u sione regolare ` in sostanza una stringa di caratteri che identifica un pattern. caratteri stampabili (esclusi gli spazi). mentre il carattere “$” serve ad identificarne la fine. LA SHELL E I COMANDI utilit` come filtro per selezionare a piacere. In maniera analoga ad una espressione matematica una espressione regolare viene costruita combinando delle espressioni elementari attraverso gli opportuni operatori. Anche i caratteri “*” e “?” assumono un significato simile a quello del filename globbing. 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). 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. di cui cercare l’occorrenza in un file eseguendo l’operazione che viene usualmente chiamata pattern matching. ma nel fatto che quest’ultima viene interpretata. ritorni a capo).” viene invece utilizzato per indicare un carattere qualunque. caratteri stampabili (caratteri vuoti compresi). cifre esadecimali. 40 41 un buon testo sull’argomento ` [3]. Tabella 2. alcuni caratteri sono invece riservati per svolgere il ruolo di operatori. 2. lettere (maiuscole e minuscole. maiuscole. attraverso l’uso di alcuni caratteri riservati. sulla base delle opportune corrispondenze le righe di a un file.11: Le classi di caratteri utilizzabili nelle espressioni regolari. indipendenti dalla localizzazione) e numeri. Il carattere “. Il carattere “^” viene utilizzato per identificare l’inizio di una riga. e la loro presenza richiede semplicemente la presenza di un corrispondente carattere nel contenuto su cui si effettua la ricerca.11. caratteri vuoti verticali ed orizzontali (spazi. Classe [:alnum:] [:alpha:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:] Significato lettere (maiuscole e minuscole. 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). minuscole. come un pattern all’interno del file. indipendenti dalla localizzazione). tabulatori. Una esprestesto. numeri. }’ *. 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.12.. Tabella 2.12: Gli operatori di ripetizione nelle espressioni regolari. Questo significato ` di nuovo leggermente diverso da quello presente nel filename globbing. L’espressione precedente deve corrispondere n o pi` volte. ` possibile per` applicarli ad una intera espressione regolare mettendola fra parentesi e o tonde. e all’interno dell’espressione regolare stessa.”). mentre nel secondo caso corrisponde ad una linea che contenga una “a” seguita da un numero qualunque (compreso zero) di “b”.*”. L’espressione precedente deve corrispondere esattamente n volte. non necessitando questa di nessun parametro. u e Operatore ? * + {n} {n. per cui anche una stringa come “ac” corrisponderebbe..} {n. 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. Negli esempi appena mostrati gli operatori di ripetizione sono applicati solo al carattere che li precede.2. e non solo si pu` richiedere. Un raggruppamento viene a costituire quello che viene chiamato un subpattern. 42 .m} Significato L’espressione precedente pu` corrispondere zero o una volta.2. 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). 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. o L’espressione precedente pu` corrispondere da zero ad un o qualsiasi numero di volte. usando quello che viene chiamato un raggruppamento. L’espressione precedente pu` corrispondere da uno ad un o qualsiasi numero di volte.tex:mentre nel secondo caso corrisponde ad una una linea che contenga una dove appunto si ` richiesto che l’occorrenza della stringa “una ” avvenisse almeno due volte di e fila. si noti infatti come si sia espressa quest’ultima fra degli apici per bloccare l’interpretazione degli stessi caratteri da parte della shell. u L’espressione precedente deve corrispondere fra n e m volte.tex opzione mentre. 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.tex shell. \texttt{pluto} e \texttt{paperino} verranno considerati come argomenti che nel . 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 “. \texttt{pippo}. 2. riportati in tab.. 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. 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. Per riottenere lo stesso significato precedente con una espressione regolare occorrerebbe usare la stringa “ab. con l’uso degli operatori di ripetizione la presenza multipla di uno stesso pattern. o ma si pu` anche usare l’operatore “|” posto fra due raggruppamenti per richiedere la presenza o alternativa di uno di essi. 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... -w e -c.3. ee u u che ` meno soggetto ad errori. ecc. a seconda dell’umore del momento.48 Come accennato in sez. Si pu` far stampare solo il numero di linee.2. per cksum dalla lunghezza e dal nome. ALTRI COMANDI 89 opzioni permettono di controllare le modalit` con cui vengono effettuati confronti: con -i si pu` a o ignorare la differenza fra maiuscole e minuscole. di parole e byte.txt | sort | uniq > elencofinale Una ulteriore serie di comandi sono quelli che possono essere usati per fare dei sommari del contenuto di un file. lo scopo ` quello di avere un file con l’elenco completo in cui e tutte le parole compaiono una volta sola. Altre opzioni. l’opzione -L stampa la lunghezza della linea pi` lunga. 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. segnalando eventuali differenze. u Altri comandi sono cksum e md5sum che stampano delle opportune checksum (delle somme di controllo.3 Altri comandi Dopo aver trattato i comandi che operano sui file.47 o hash che confrontate permettono di verificare l’integrit` di un file). una delle cae a u ratteristiche di un sistema GNU/Linux ` quella di essere fornito di una quantit` impressionante e a di documentazione. e u 48 sigla che sta. elenco2. che permette di specificare un solo parametro. con -s si pu` specificare il numero di caratteri ad inizio riga da non inserire o nel confronto. faremo una panoramica su una serie di altri comandi di varia utilit` che non sono direttamente connessi alla gestione dei file. cio` ` pi` facile avere lo stesso risultato. Si consia deri ad esempio la necessit` di riunire elenchi di parole contenuti in pi` file (supponiamo siano a u elenco1.txt. se ne sono specificate pi` di uno. md5sum usa un’altro algoritmo. per impostare i tempi del sistema.1. che in questo caso sar` a un file che contiene una lista di risultati di precedenti invocazioni del programma. di parole o di byte u o con le opzioni -l. 2. In particolare cksum usa un algoritmo chiamato CRC.4 ciascun comando di norma supporta da suo una opzione --help che permette di visualizzarne brevemente la sintassi. questo pu` essere ottenuto in un batter d’occhio con o un comando come: cat elenco*.). per md5sum solo dal nome. detto MD5. con -d si limita a stampare (senza rimuoverle) le linee duplicate. Inoltre md5sum supporta un’opzione -c. tanto che una delle risposte pi` frequenti alle domande di chiarimento ` u e RTFM. Il pi` semplice ` wc. 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. Diventa cos` possibile a ı effettuare direttamente un controllo di integrit`. Entrambi a prendono come argomenti una lista di file. In genere il comando stampa tutte queste informazioni insieme al nome del file. ma comporta pi` calcoli. 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. (da Word Count) che viene usato per contare le u e parole contenute in un file. a 2. 2. Il comando verr` applicato a ciascuno dei file elencati. 47 . per ciascuno dei quali sar` stampato a video il risultato a del calcolo. l’utilit` di un comando come questo pu` apparire limitata.1 I comandi per la documentazione Bench´ talvolta sia difficile trovare informazione sulle funzionalit` pi` esoteriche.txt. permettono anche selezioni pi` complesse. u Di nuovo considerata a se stante. Al solito se non si specifica nulla i comandi leggono dallo standard input. a o ma basta pensare alle combinazioni con altri comandi per apprezzarne la funzionalit`. ma che a risultano di grande utilit` come quelli per la documentazione. al solito dettagliate nella pagina di manuale. per Read The Fine Manual o Read The Fucking Manual.3. che ` e piuttosto debole. pi` recente. documentazione sui file di /dev.18. ci possono essere altre sezioni specifiche installate insieme a ad alcuni pacchetti come quelle della documentazione del perl (un linguaggio di programmazione). trattata in sez. che si accedono con il e comando man. o u che stampa l’elenco delle pagine ad esso corrispondenti. Con il comando man si richiama la pagina di manuale. il sistema infatti origina fin dai primi Unix e prevede la documentazione di tutto il sistema. Il comando supporta una serie di opzioni di formattazione e per inviare l’output su stampante. se si vuole accedere a alla seconda si dovr` richiamarla esplicitamente indicando la sezione con un qualcosa del tipo a man 5 passwd. che al solito sono descritte in dettaglio nella sua pagina di manuale.18. Tabella 2. formati dei file di configurazione.18: Sezioni delle pagine di manuale. fin qui abbondantemente citate.change user password passwd (5) . 3. cercando in sequenza50 nelle varie sezioni e restituendo la prima che trova.90 CAPITOLO 2. varie (convenzioni.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. system call (funzioni fornite dal kernel). comandi di amministrazione.49 Sezione (1) (2) (3) (4) (5) (6) (7) (8) Significato programmi eseguibili o comandi di shell. 2. Si tenga presente che il comando man richiama la pagina relativa al nome che si ` passato e come argomento.1. LA SHELL E I COMANDI solo uno stringato riassunto delle opzioni disponibili. funzioni di libreria. 50 si tenga presente che la sequenza esatta non ` detto sia quella di tab. 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. che come per gli altri comandi si accede con man man. Ma le pagine di manuale non fanno riferimento solo ai comandi.5. 2. Ciascuna sezione contiene la documentazione relativa ad un certo argomento. secondo la classificazione riportata in tab. il cui numero ` quello che compare fra e parentesi nella prima riga di ciascuna pagina dopo il nome del comando in maiuscolo.1. Tutti i comandi prevedono una pagina di manuale che si accede semplicemente con la sintassi man comando. cos` ad esempio avremo: ı piccardi@anarres:~/Truelite/documentazione/corso$ whatis passwd passwd (1) . In particolare poi gli sviluppatori di Debian hanno come impegno preciso quello di fornire per ogni pacchetto la relativa documentazione. . informazioni generiche su argomenti). 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. 3. giochi.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”. Per questo le pagine di manuale sono divise in sezioni. la fonte primaria delle informazioni relative ai comandi ` nelle pagine di manuale. in realt` essa si imposta nella e a configurazione del sistema di gestione delle pagine di manuale. tldp.). 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. andare all’indice con i. http://www. In questo caso si tratta di una forma alternativa di strutturazione delle informazioni che usa un formato diverso e che aggiunge. tornare al precedente con p. effettuare una ricerca con /. u 51 . disponibili in diversi formati (dal testo puro.linux. la possibilit` di consultare a indici. che e lo considera alternativo rispetto alle pagine di manuale. Una delle risorse pi` usate ` quella degli HOWTO del Linux Documentation u e Project. il kernel. e di norma installati dalle varie distribuzioni insieme all’altra documentazione in /usr/share/doc/HOWTO/. Data le sue caratteristiche evolute info ` il formato raccomandato dal progetto GNU. passare al nodo successivo con n. Una seconda fonte di informazioni ` costituita dal sistema di help on line fornito dal comando e info.2. ALTRI COMANDI 91 piccardi@anarres:~/Truelite/documentazione/corso$ apropos "user password" chage (1) . dato che anche questo servizio ` nato su Unix. come tutta la documentazione dei sistemi di sviluppo. che nella gerarchia internazionale51 sono quelli che si trovano sotto comp. dato che altrimenti si sarebbero passate due stringhe al comando. ecc. Una grande quantit` di informazioni. A questa poi si aggiunge il grande patrimonio degli HOWTO. Molti per` continuano ad utilizzare o quest’ultime per cui alla fine i due sistemi si trovano a convivere. e l’aiuto di altri utenti. ecc. ed infine visualizzare i vari comandi disponibili con ?.org. al PDF) raccolti dal Linux Documentation Project.pluto. dei linguaggi. Grazie a questa struttura info permette anche di accedere a documenti pi` complessi u di una semplice pagina di manuale. comp. che sono continuamente aggiornati sul sito del progetto. rispetto alle pagine di manuale. i gruppi di discussioni sono organizzati e per temi. 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. delle caratteristiche pi` avanzate e molto comode come: la possibilit` di navigare usando link ad altre pagine. tornare al livello precedente premendo u.os. secondo il FHS. e sar` possibile iniziare la navigazione spostandosi con le a freccie.comp. 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 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. 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. una rete internazionale di distribuzione di notizie in cui chiunque (usando il relativo client) pu` lasciare messaggi e ricevere risposte (la filosofia di funzionamento del sistema o ` ripresa da quella delle bacheche pubbliche delle universit`). una serie di documenti sul come fare a riguardo di un certo argomento. e vi si trovano una grande quantit` di manuali di grandissima a importanza. una u a organizzazione gerarchica strutturata ad albero con nodi e sezioni. veri e propri libri su vari argomenti come l’amministrazione di sistema.os per i sistemi operativi. In genere il contenuto delle pagine di manuale ` direttamente accessibile anche con il comando info comando.3.it/. all’HTML.change user password e si noti come si siano usati i doppi apici per effettuare una ricerca su una stringa contenente uno spazio. si trova nella directory /usr/share/doc/nomeprogramma. ecc. In tal caso ` comunque opportuno leggere in anticipo le FAQ (Frequently Asked Question) che e tanto per cambiare. pu` essere trovato sui gruppi di a o discussione di usenet. delle librerie.lang per i linguaggi di programmazione. seguire i link premendo invio.os. Infine quando non si riescono a trovare informazioni nel sistema si pu` ricorrere direttameno te ad internet. mentre quelli della gerarchia italiana stanno sotto it. Qui sono disponibili anche delle guide. ecc.change user password expiry information passwd (1) . la prima ` che esistono due orologi. Fra queste troverete le versioni pubblicate degli HOWTO e delle FAQ (anche se queste vengono spesso distribuite come documentazione nel sistema. il process time viene usato e soltanto dai comandi che riportano le propriet` specifiche dei processi (come ps o top) relative a ai tempi di esecuzione degli stessi. il tempo passato nell’esecuzione di codice in user space (con la sigla user).3. e stampa a video. ` process time : detto talvolta tempo di processore. secondo le definizioni: ` calendar time : detto anche tempo di calendario. in tempo universale coordinato (o UTC). tre valori di tempo espressi in process time. alla terminazione dell’esecuzione di quest’ultima. e viene usato ad esempio per indicare le date di modifica dei file o quelle di avvio dei processi. 1 1970 (UTC) e chiamata the Epoch.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. Tutti gli altri comandi relativi ai tempi hanno a che fare con la gestione del calendar time.3. La descrizione completa del comando (comprese le stringhe usate per l’opzione -f) si trova al solito nella pagina di manuale. cio` all’interno delle system call invocate e dal processo (con la sigla sys). Questo tempo viene anche chiamato anche GMT (Greenwich Mean Time) dato che l’UTC corrisponde all’ora ` locale di Greenwich. ` pertanto il tempo in cui viene misurato il tempo di e esecuzione dei processi.000s 0m0.030s 0m0. onde evitare di ripetere domande u banali che non sarebbero accolte molto amichevolmente.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. e . LA SHELL E I COMANDI raccolgono una serie di riposte alla domande pi` ricorrenti.92 CAPITOLO 2. E il numero di secondi dalla mezzanotte del primo gennaio 1970. e viene impiegato e per tutti i calcoli dello scheduler. data che viene usualmente indicata con 00:00:00 Jan. 1. ed il tempo passato nell’esecuzione di codice dentro il kernel. l’unico altro a comando che usa il process time ` time.1. e Il comando prende varie opzioni. ad esempio: piccardi@monk:~/Truelite/documentazione$ time ls CVS README corso internet-server ldap lucidi real user sys 0m0. o a 2. le principali delle quali sono -o che permette di specificare un file su cui scrivere i risultati al posto dello standard output. quello di sistema. Oltre a questi due. In genere il tempo a cui si fa riferimento ` sempre il calendar time. e -f che permette di specificare un formato per i tempi. 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. 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. E il tempo su cui viene mantenuto l’orologio del kernel. Qui si aggiungono ulteriori complicazioni. Infine l’utilizzo dei motori di ricerca ` un ottimo sistema per recuperare le informazioni e pubblicate su internet. che sono il tempo totale impiegato per l’esecuzione del programma (con la sigla real). gi` trattati in sez. E il tempo usato internamente dal kernel per le sue temporizzazioni. che prende come argomento una riga di comando da e eseguire. In genere ` legato alle interruzioni del timer. mentre l’anno si indica o con le cifre finali YY o per intero con tanto di secoli come CCYY.53 Se ci si pensa questa ` la scelta pi` logica: non solo si evita di inserire una serie di informazioni e u complesse all’interno del kernel. Con MM si indica il mese (in numero). per`) come 8 day ago. u La seconda complicazione ` che il kernel non conosce assolutamente niente dei fusi orari. con lo stesso formato. ad esempio si pu` provare ad impostare l’orologio con: o piccardi@monk:~/Truelite/documentazione/corso$ date 09191854 date: cannot set date: Operation not permitted Fri Sep 19 18:54:00 CEST 2003 e l’operazione fallisce. e -s che permette. e l’orologio hardware che funziona in maniera del tutto indipendente e che rimane in funzione anche quando la macchina ` spenta. ma facendo cos` i tempi di sistema sono sempre coerenti.3. ma il tempo che si voleva impostare e viene comunque stampato a video. dove i termini fra parentesi quadra sono opzionali. ed aggiornato via software dal kernel stesso. dato che non si ` l’amministratore.2. e soprattutto di incompatibilit` a dei tempi in caso di dual boot. 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). ma anche descrizioni verbali (solo in inglese. La stringa usa il carattere % per indicare una direttiva di formattazione che verr` sostituita dall’opportuno valore.19. Purtroppo altri sistemi operativi usano l’ora locale per l’orologio di sistema che coincide con l’orologio hardware. La descrizione di queste stringhe pu` essere o o ` l’orologio che si trova sulla scheda madre. e non solo riconosce o u tutti i formati standard che si ottengono con le direttive di tab.52 Di solito il kernel lo legge all’avvio per impostare il valore e iniziale dell’orologio di sistema e non lo considera pi`. 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. Se si vuole impostare la data questa deve essere specificata con una stringa nella forma MMDDhhmm[[CC]YY][.19. 2. Se invece l’argomento che si passa inizia con un + esso viene interpretato come una stringa di formattazione per il risultato del comando. l’elenco completo ` nella pagina di e manuale. 53 52 . le principali delle quali sono -d che permette di specificare una data da stampare al posto del tempo corrente. con tutti i problemi che questo comporta quando si deve cambiare fuso orario (con file che possono anche risultare essere stati creati nel futuro). Le principali direttive sono riportate in tab. con mm il minuto. e tutta la gestione dei fusi orari ` demandata alle applicazioni in user space che. di specificare l’impostazione dell’orologio di sistema. tutte le volte che e leggono un tempo. devono essere in grado di convertirlo nell’ora locale. Per e lui il tempo ` assoluto. ALTRI COMANDI 93 usato dal kernel per tutte le sue operazioni.ss]. infine i secondi ss devono essere preceduti da un punto. che permettono di eseguire il compito in maniera e trasparente. e fa sempre riferimento al tempo standard universale (l’UTC appunto). tutti gli altri caratteri resteranno a immutati. o 1 month. Il comando che permette di leggere ed impostare l’orologio di sistema ` date. Il comando prende inoltre varie opzioni. ed ` alimentato della batteria che si trova su di essa. con hh l’ora. e e il tutto ` fatto attraverso delle opportune funzioni di libreria. 2. L’utilit` di queste due opzioni ` a e che la stringa che prendono come parametro pu` essere nelle forma pi` varie. con DD il giorno. 23). 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.. Se non si specifica nessuna opzione il comando si limita leggere il valore dell’orologio hardware e a stamparlo sullo standard output.12). secondo la localizzazione. 2. il nome 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. Ad esempio uno dei fraintendimenti pi` comuni riguardo l’uso della concatenazione dei cou mandi ` quello in cui si pensa di usare la pipe per passare come argomenti ad un comando e successivo l’output di un comando precedente.19: Direttive di formattazione per il comando date.6) a partire dalla domenica. LA SHELL E I COMANDI Significato il carattere %. il cui compito o a ` replicare il comportamento della shell. esistono situazioni a in cui il loro uso non ` sufficiente a fornire le funzionalit` necessarie. data e orario. numero di secondi.763201 seconds (risultato che si ottiene anche con l’opzione -r o --show). cui deve seguire un --date che specifichi la data da usare nel formato con cui la si specifica anche per date. nella forma (01. Il comando poi permette di impostare l’orologio hardware con l’opzione --set. Viceversa l’opzione -s (o --hctosys) imposta l’orologio di sistema al tempo di quello hardware.3 I comandi di ausilio per la redirezione Nonostante la grande flessibilit` degli operatori di redirezione della shell. e lo si utilizza attraverso le opzioni.12). che permette di impostare e l’orologio hardware. ora del giorno. trovata solo nelle pagine info del comando. con un risultato del tipo: monk:/home/piccardi/Truelite/documentazione/corso# hwclock Tue Sep 23 15:36:58 2003 -0. secondo la localizzazione. orario nella forma (hh:mm:ss [AP]M) su 12 ore. data. che provengono dalla linea di comando. ` E per` possibile provvedere questa funzionalit` con l’uso del comando xargs. anno abbreviato alle ultime due cifre. il nome del giorno della settimana abbreviato.31)... Il comando non prende argomenti. secondo la localizzazione. il nome del giorno della settimana. orario nella forma (hh:mm:ss) su 24 ore. giorno del mese. nella forma (01. Tabella 2. a Il secondo comando che riguarda la gestione del tempo ` hwclock. che legge la linea di comando e ne estrae gli argomenti. dove si trova anche la trattazione completa tutte le funzionalit`.59). anno completo. giorno della settimana. secondo la localizzazione.3.. mese. nome convenzionale del fuso orario. nella forma (00. Si pu` per` usare l’opzione -w (o --systohc) per impostare l’ora direttamente al tempo o o segnato dall’orologio di sistema. e non ha nulla a che fare con gli argomenti di quest’ultimo. il nome del mese abbreviato. nella forma ( 0. nella forma ( 1. secondo la localizzazione. per questo esistono dei e a comandi che permettono di estendere l’uso della redirezione. accessibili con info date. e Il comando cio` effettua la lettura standard input e ne ricava una lista di argomenti da passare e .. ora del giorno. data nella rappresentazione secondo la localizzazione. nella forma mm/dd/yy).. minuto. nella forma (0. 1. che verr` usata al posto di y. Il comando. Se non si passa nessun argomento viene usato echo come comando di default. poi con il tempo e l’esperienza ognuno finir` con l’adottarne uno come preferito. usando le virgolette o ı la barra trasversa.1 Introduzione Un’altra delle caratteristica fondamentali di un sistema unix-like `. Un ultimo comando usato come ausilio per la redirezione ` yes. che ha il semplice compito e (se invocato senza argomenti) di scrivere continuamente sullo standard input una serie di y. quando a e si usa xargs.4.3. ` a e in grado anche di eseguire la scrittura dei file in append usando l’opzione -a. E possibile proteggere ı la presenza di spazi all’interno degli argomenti cos` come si fa con la shell. che vengono a costituire il principale strumento usato da tutti gli amministratori di sistema. Infine l’opzione -0 richiede che le linee sullo standard input siano terminate da zeri. a 2. GLI EDITOR DI TESTO 95 ad un successivo comando. Il comando permette di impostare. e Infatti nonostante stia crescendo la disponibilit` di strumenti che permettono le pi` comua u ni operazioni di amministrazione tramite una interfaccia grafica. in questo modo diventa possibile ricevere gli argomenti dall’output di un comando precedente tramite una pipe. Un secondo problema ` quello che si ha quando si redirige lo standard output su un file e e si perde cos` la possibilit` di esaminarlo sullo schermo. In questo modo diventa ad esempio possibile applicare un comando qualunque ad una lista di file usando semplicemente cat e xargs. ` sempre consigliabile infatti. virgolette.1. 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). a 2. Lo scopo di questa sezione ` quello di mettere il lettore in grado di e cavarsela con i principali editor disponibili in tutte le distribuzioni.4 Gli editor di testo Si ` preferito mantenere in una sezione separata la trattazione di una classe di programmi. e interpreta letteralmente i vari caratteri (in modo da non interpretare spazi. quella di mantenere le configurazioni dei programmi all’interno di semplici file di testo.2. 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. ecc. accessibile con man e xargs. al solito tutte le opzioni ed i dettagli di funzionamento si trovano nella pagina di manuale. con l’opzione -e una stringa da usare come marcatore per la fine del file. Il comando xargs prende come argomenti un comando da eseguire e le eventuali opzioni o argomenti iniziali. Il comando non ha nessuna opzione specifica e prende come argomento una stringa. come per la redirezione. Anche in questo caso ` possibile avere ı a e questa funzionalit` usando un comando apposito tee. con l’opzione -t inoltre a permette di stampare a video il comando eseguito. e con -p di richiedere conferma dell’esecuzione sul terminale. e quella degli editor di testo. lanciare il comando senza argomenti per verificare che non si stiano facendo degli errori. separati da spazi. Per questo motivo lo strumento pi` usati dai professionisti nell’amministrazione u di sistema ` quello dell’editor di testi. in modo da ignorare tutto quanto sar` letto dopo. si potr` usare un comando del tipo: a cat lista | xargs rm -f ovviamente nel far questo occorrer` stare molto attenti. per le ragioni che tratteremo e in dettaglio in sez. L’elenco completo delle opzioni ` riportato nella pagina di manuale.). Se cio` si vogliono cancellare tutti i file contenuti nel e file lista. cos` come letti dallo standard input. questi in genere mettono a . e per ogni riga ricevuta sullo standard input esegue il comando passandogli gli ` ulteriori argomenti.4. Infine. usare una interfaccia grafica da remoto resta sempre (considerazioni di sicurezza a parte) estremamente lento (e sostanzialmente impossibile senza una buona ADSL). abbellire la visualizzazione. leggere la posta e le news di Usenet. un linguaggio funzionale estremamente potente che consente una enorme espandibilit` del programma. modificare e scrivere su un file di testo. Per questo motivo. Tutto questo ha ovviamente un costo. 57 in un dialetto specifico del lisp. scrivere dispense come queste. la modifica dei file di testo. Inoltre quando un qualche problema sul disco. ed infatti i detraxttori di emacs ne lamentano la pesantezza (di certo non lo troverete sulle distribuzioni su dischetto). giocare (a tetrix o a qualche avventura testuale). La scelta dell’editor ` comunque una scelta personale. a . Nel prosieguo di questa sezione daremo una breve panoramica sull’uso dei pi` comuni editor u di testo. e come per molte altre applicazioni di uso generale ne esistono molte versioni.4. o Escape Meta Alt Control Shift. E quand’anche si usasse una delle tante distribuzioni su CD che sono in grado di fornire un desktop completo. considerato 54 ovviamente. con i nomi pi` pittoreschi. i pi` blasonati fra gli editor di testi). ma i cui comandi si ritrovano ancora in altri editor e pure in programmi come sed. 56 nome che in teoria vorrebbe dire Extensible MACro System. e non danno mai il completo controllo sul comportamento di un programma. 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). comunque non entreremo nei dettagli dell’uso dei singoli editor. ne parleremo. ma l` gli struı menti grafici non saranno disponibili. dentro emacs si pu` davvero fare di e e u o tutto: navigare fra i file e in internet. che si pu` ottenere soltanto operando direttamente sui file di o configurazione. che origina dai tempi dei primi Unix quando i terminali erano delle vere telescriventi. ma data la diffusione e la potenza dello strumento. sar` a a sempre possibile usare una distribuzione su dischetto per rimettere le cose a posto. anche se la diffusione della banda larga riduce il problema. non su quello danneggiato. che genera spesso clamorose guerre di e religione fra le fazioni dei sostenitori dei diversi editor (particolarmente virulente sono quelle fra i sostenitori di emacs e vi. ecc. 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. l’editor. u 2. fare debug. ci limiteremo a esporre quali sono i comandi base per leggere. ma restando nell’ottica dell’amministrazione di sistema tratteremo esclusivamente di editor accessibili da console. che pur svolgendo lo stesso compito di u base.96 CAPITOLO 2. diventa il principale strumento dell’amministraizione di sistema. Qualunque cosa sia possibile fare con del testo con emacs si fa. e la preferenza personale nei suoi confronti. ed anche farsi psicanalizzare dal “doctor ”. anche se questo fosse dotato degli strumenti grafici di amministrazione grafici necessari.57 e per un qualunque compito specifico sono state create delle le estensioni pi` varie in u grado di eseguire operazioni complesse. 55 quello che per questo viene chiamato un editor di linea. e quindi utilizzabili anche attraverso connessioni remote con dei semplici modem. Sicuramente ` il pi` potente.2 Un editor evoluto: emacs o xemacs Per molti emacs56 ` l’editor. gestire automatismi. o il classico rm -fR dato un po’ troppo allegramente da root avr` danneggiato qualche file essenziale o bloccato il sistema all’avvio. LA SHELL E I COMANDI disposizione solo un limitato numero di opzioni.54 le configurazioni sul sistema danneggiato andrebbero comunque effettuate a mano. come emacs che ha una quantit` infinta di funzionalit` diverse e u a a viene paragonato da alcuni esagerati ad un secondo sistema operativo. infatti l’editor ` programe mabile. a u come quelle di ed. questi opererebbero sul sistema corrente. ma ` stato ribattezzato in Eight Megs And e Constantly Swapping. cio` un programma che permetta di leggere file di e testo e modificarne il contenuto. ` stato forse il primo e programma applicativo sviluppato sotto Unix. vanno da quelli dotati solo delle funzionalit` pi` elementari. Dato che l’editor di testi ha sempre avuto questo ruolo fondamentale. Come per tutti gli editor una sessione di emacs inizia invocando il comando seguito dal nome del file da modificare. GLI EDITOR DI TESTO 97 poi che molti altri editor ne hanno copiato la sintassi e le modalit` d’uso. Nella a prima riga si trova il men` dei comandi. con la peculiarit` di essere posizionato e a sull’ultima riga ed essere utilizzato per l’interazione con i comandi. terminato da una barra di stato in cui compaiono varie informazioni (il nome del file. o forniscono modalit` a a di comando compatibili. con il solo problema che se se ne creano troppe non si vedr` a altro che barre di stato. Nella la riga finale viene tenuto il cosiddetto minibuffer. 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.done)) ed in cui si scrivono gli argomenti dei comandi pi` complessi. u a Figura 2.1: Schermata di avvio dell’editor emacs. che nacque proprio per questo. dato che ciascuna pu` a u o sua volta essere suddivisa a piacere. 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. u e sia che si tratti di un file che si ` aperto per lavorarci sopra. All’interno di una finestra ci si pu` spostare con le frecce e gli altri tasti di spostamento.). Anche il minibuffer ` un buffer. in tal caso si otterr` una finestra come quella mostrata in fig. di lavorare su due o pi` finestre. in cui compaiono brevi messaggi (come nell’esempio. e e 58 . ad esso segue la sezione principale. Questo o permette.1. 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. 2.1 pu` venire divisa in due).. spesso tutt’altro a che intuitive per chi proviene da altri sistemi. sono editor usabili direttamente anche dall’interfaccia grafica.. 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). con l’eccezione del men` e della barra di stato ` mantenuta in un buffer. se sono state fatte modifiche.4. questo ` una conseguenza che il programma ` nato quando ancora e e le tastiere non avevano n´ frecce n´ altri tasti di funzione. che il suo cugino xemacs. Inoltre sia emacs. che del testo generato automaticae mente nelle operazioni dell’editor (come le liste dei file da scegliere che compaiono quando si usa l’autocompletamento). u Uno dei concetti fondamentali di emacs ` quello di buffer.2.58 o e scrivere del testo. anche operando in console. 2. dove compare il u testo del file ed in cui ci si muove con le frecce. qualunque porzione di testo venga e utilizzata da emacs. ecc. che riporta la scritta (Updating. provvedendo in ciascun caso diverse serie di combinazioni di tasti e diversi comandi di manipolazione. inoltre in certi casi (come quello della specificazione di un file) la selezione supporta il meccanismo dell’autocompletamento (usando il tasto di tabulazione). C-d in avanti e il tasto di backspace all’indietro.. C-x C-w seguito dal nome del file nel minibuffer (supporta il completamento automatico). C-x spazio marca l’inizio di una regione e si porta in modalit` selezione. C-x C-c. C-h ? poi scegliere nella finestra quello che si vuole. C-r cerca il precedente. C-w una volta selezionata una regione.98 CAPITOLO 2. 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). 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. di creare a automaticamente una lista di selezione in una nuova finestra.61 Molti di questi comandi. C-_. Come gi` visto in sez. a mentre per eliminare tutte le finestre presenti tranne quella dove ` posizionato il cursore si potr` e a usare il comando C-x 1. In questo caso per spostarsi da una finestra all’altra occorrer` usare il comando C-x o (che ripetuto ritorna alla precedente). (un comando) C-g o tre volte ESC. si chiamano cos` i tasti che hanno un effetto solo quando sono premuti in contemporanea ad altri tasti. se ci sono modifiche chiede se salvarle. 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. creare le intestazioni delle sezioni o delle tabelle. per le tastiere che non ce l’hanno. ad esempio tutti quelli che richiedono l’immissione di un nome di file. (ESC) e poi la lettera relativa. 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 C-s.4. il control. In tab. 2. e stampare messaggi. ripetendo si torna ulteriormente indietro nell’annullamento. C-/ o C-x u. a I comandi invece vengono dati con delle combinazioni che prevedono la pressione contemporanea di un tasto modificatore 59 e di una lettera. qualora i completamenti siano multipli. ecc.3. ecc. premendo prima il tasto di o escape. scartarle o cancellare l’operazione. 59 . come ı il tasto per la maiuscole. poi basta posizionarsi nel punto a finale. usano il minibuffer per ricevere i relativi dati.deriva dal fatto che il secondo tasto modificatore viene chiamato “meta” in tutta la documentazione di emacs). 61 ad esempio scrivendo queste dispense con Latex si hanno tutta una serie di comandi per mettere le parole negli indici. C-s seguito dal testo nel minibuffer esegue un ricerca incrementale sul testo specificato. e la capacit`. C-y. In genere il testo viene inserito spostando quanto gi` presente nel file. 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. Data la complessit` e la grande quantit` di a a comandi esistono due modificatori per i comandi. 1. LA SHELL E I COMANDI sempio all’inizio della prima riga in alto a sinistra).20 si ` riportata la lista dei comandi principali che sono attivi in qualunque modae lit`60 si usi emacs. dove la si ` usata senza formalizzarne la definizione. creare riferimenti a tabelle e figure presenti. C-s cerca il successivo. Molti comandi inoltre prevedono l’uso di due combinazioni di tasti eseguite in successione.20: I principali comandi di emacs. il primo ` il classico control e ed secondo ` e e alt il cui uso pu` essere simulato. taglia incolla cancella ricerca help annulla Tabella 2. . dove compare il testo a ed in cui ci si muove con le frecce. purtroppo i perch´ di questo nome si sono perse nei meandri del tempo. GLI EDITOR DI TESTO 99 2. 63 le versioni installata in tutte le distribuzioni di Linux se non altro supportano nativamente l’uso delle frecce. 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. 62 . e Inoltre anche se le funzionalit` del programma originale sono veramente minime.4.2). come vim.. usata per dare i comandi o ricevere le informazioni (nel caso il nome del file. 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. il comando apre il file in modalit` comando in una finestra unica (mostrata in fig.63 lasciando libera l’ultima linea. u Ma i fan(atici) tendono invece a considerarla una caratteristica utile in quando (secondo loro) con l’abitudine renderebbe pi` veloce le operazioni. e non fornisce pertanto nessuna delle funzionalit` pi` evolute di emacs (come a u la possibilit` di fare debug dei programmi all’interno dell’editor facendo riferimento diretto al a codice su cui si sta lavorando) ma resta comunque un editor molto potente. dato che con le funzionalit` sono e a di pari passo aumentate anche le dimensioni.62 Deriva dagli editor u e di linea e ne eredita alcune caratteristiche. 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. in cui cio` i comandi e il loro effetto dipendono dalla modalit` di operazioni corrente in cui si trova e a il programma. in particolare il fatto di essere un editor modale. come l’evidenziau a zione della sintassi.3 Un editor di base. forse erano due lettere rimaste libere e scelte a caso . Questa caratteristica lo rende senz’altro il meno intuitivo e pi` difficile da usare per il novizio. Al solito vi si invoca passando come argomento il nome del file da modificare. esistono alcune a versioni pi` moderne.4. Al contrario di emacs (di cui ` il principale concorrente) vi si usa soltanto per manipolare e file di testo. vi Uno dei editor pi` diffusi. 2. Succede spesso per` che al primo impatto non u o si riesca neanche ad uscire dall’editor.2: Schermata di avvio dell’editor vi. Figura 2. la sua lungheza in righe e caratteri e la posizione del cursore sulla prima colonna della prima riga).2. hanno introdotto alcune capacit` avanzate. LA SHELL E I COMANDI Tutti i comandi di vi sono eseguiti con pressioni di singoli tasti. dd una riga. sovrascriver` a a quest’ultimo. j. si e u tenga presente per` che essi possono essere specificati solo dalla modalit` normale. Anche da questa modalit` si pu` uscire premendo il tasto di escape ESC. se in fatti si ` in modalit` a e a di inserimento i tasti verranno utilizzati per scrivere e non intepretati come comandi. non sapendolo ci si trover` bloccati e a ed incapaci di uscire dal programma. 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. u solo sull’ultima modifica. per le tastiere che non hanno frecce. una volta aperto un file. p inserisce l’ultimo oggetto cancellato.21 si ` riportata la lista dei comandi principali usati per i compiti pi` comuni. spostando il testo gi` presente. ma la possibilit` di dare dei a comandi dipende dalla modalit` in cui si trova l’editor al momento. v. Ma ci sono altri comandi che permettono di entrare in modalit` a inserimento. 2. che si attiva premendo :. :q! le scarta. e si pu` iniziare a scrivere in a o corrispondenza del cursore. accessibile con :h. x cancella un carattere. Una modalit` simile a quella di inserimento ` quella di rimpiazzo. basso. In questa fase molti dei comandi sono dati direttamente con la pressione di uno o pi` lettere. Quando si avvia il programma questo si pone in modalit` normale. ma se ci sono modifiche non esce. nel caso :qw le salva. a ad esempio premendo i si passa in modalit` di inserimento. dw una parola. . ma ` una e estensione esclusiva di vim. in questo di nuovo tutti tasti assumeranno il loro valore letterale. ma vale con questo significato solo con una selezione fatta con vim. / seguito da un testo o una espressione regolare.100 CAPITOLO 2. u ma sullo schermo non viene visualizzato nulla (se non l’effetto del comando). :q. :w nomefile. per cui per abbassarsi di 10 righe si pu` o scrivere qualcosa tipo 10j. in cui si entra con premendo a e R. e poi ci si sposta con i tasti di freccia.21: I principali comandi di vi. ` E allora abbastanza frequente che un utente alle prime armi. 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. ESC annulla un comando. lo spostamento nel file con i tasti h. l che effettuano rispettivamente lo spostamento a sinistra. Come accennato vi supporta. 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. alto e destra. In tab. Un elenco degli altri comandi pu` a a o essere ottenuto con la documentazione interna. 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. 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 quanto si scrive invece di essere inserito in corrispondenza al cursore. La pressione dei tasti corrispondenti ai relativi comandi consente di cambiare modalit`. premuto uno di questi tasti. e in questo caso i tasti vengono a interpretati come comandi. non entra in modalit` di e a inserimento. :w. Tabella 2. se ci si ` posti o a e in modalit` di inserimento prima bisogner` uscirne con ESC. k. d. 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. d seguito da una altra lettera che specifica cosa cancellare. tenti di scriverci e non veda nulla finch´. Figura 2.3.3: Schermata di avvio dell’editor joe. una volta entrati sulla linea infatti si pu` usare il o carattere ! come shell escape. gli affezionati del DOS noteranno che usa la sintassi di e wordstar. l’uscita invece si pu` forzare con e o :q!. GLI EDITOR DI TESTO 101 Una delle caratteristiche che pu` lasciare pi` interdetti con vi ` che non esiste il classico o u e taglia e incolla in cui si seleziona una sezione qualunque del file. L’apertura di nuovi file deve essere fatta sulla riga di comando. Un’altra caratteristica interessante della linea di comando di vi ` che ` possibile dare dei e e comandi di shell senza uscire dall’editor. per questi due comandi esistono anche delle versioni da date in modalit` normale e cio` a e rispettivamente ZZ e ZQ. con X il precedente).2. ed usare i moltiplicatori appena illustrati per cancellazioni multiple. a 2.5. un word processor testuale di quell’epoca. parole o (con dw) e righe (con dd). 2.4 Gli altri editor Un altro editor leggero e potente ` joe. Un’altra funzionalit` presente sulla linea di comando ` quella di sostituzione. mostrata in fig. ma potremo anche usare le espressioni regolari con tutte le funzionalit` che si sono descritte in sez. e si esegue con :ex. 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. ed ` equivalente e al normale comando di uscita con salvataggio che ` :qw. altri comandi che si possono utilizzare sono :w che salva il file e :x che salva ed esce.4. 2. La finestra presenta una riga di stato in testa . ad esempio invocandolo come jmacs user` la sintassi dei comandi di a emacs. si pu` poi incollare quanto appena cancellato (anche pi` volte se si usano i moltiplicatori) con o u p.4. Inoltre di solito il comando si pu` usare in modalit` di emulazione usando le o a sintassi di altri editor. potremo cio` effettuare una sostituzione di e una stringa con il comando “:s/ric/sost/g”. Il comando prende al solito come argomento il nome del file che viene aperto e visualizzato nella finestra principale. che a e ha la stessa sintassi delle espressioni usate da sed.2. E a a ` possibile per` cancellare caratteri singoli (con x per quello corrente. che lo rende piuttosto facile da usare. si potr` cio` usare una sintassi del tipo “:!ls” per ottenere la a e lista dei file. a meno che non usiate vim che definisce una modalit` visual (in cui si entra con v) che implementa questa funzionalit`. LA SHELL E I COMANDI contenente i soliti dati (file. e scompare quando non ` necessaria. posizione. Tabella 2. l’ultima linea viene usata per mostrare i messaggi e per dare i comandi o ricevere le informazioni.102 CAPITOLO 2.22: I principali comandi di joe. C-k d seguito dal nome del file. che ` e e molto pi` leggero di quest’ultimo (ma anche molto meno potente). 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. C-L cerca l’occorrenza successiva. 2. C-k c copia la regione selezionata sulla posizione corrente. Figura 2. C-_. seguita dalla sezione principale in cui compare il testo del file ed in cui ci si muove con le frecce.4: Schermata di avvio dell’editor jed. mentre con C-^ si ripete l’ultima operazione. Fornisce anche un’ampia capacit` di evidenziazione della sintassi in console che con emacs ` disponibile solo a e nell’ultima versione. C-k f seguito da un testo esegue la prima ricerca. C-k x. C-c esce e se ci sono modifiche chiede d eventualmente scarta. ma una volta selezionata una sezione di testo consente solo o di spostarla o di copiarla. Anche in questo a caso il comando non supporta il concetto classico del taglia e incolla. In tab. e utilizzare diverse sintassi per i comandi a seconda del tipo di file. Un’altro editor per la console ` jed. C-k y in avanti e backspace indietro. (un comando) C-c. scritto come reimplementazione di emacs in C. Supporta anch’esso per` un u o linguaggio di programmazione interno. .22 sono riportati i principali comandi per le funzionalit` di base. lunghezza ed il suggerimento per ottenere la schermata di aiuto). C-k x esce e salva. e Operazione aprire un file salvare un file salvare con nome uscire annullare seleziona taglia incolla cancella ricerca annulla Combinazione di tasti C-k e seguito dal nome del file. C-k m muove la regione selezionata sulla posizione attuale. 5: Schermata di avvio dell’editor nano. 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 client per leggere e e la posta elettronica in console. e due righe di aiuto in basso che riportano i comandi disponibili al momento. Anche questo ` un editor che mantiene nella e prima riga un riassunto dei comandi principali. a u Figura 2. non lo ` neanche pico.20. 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`. separando da esso l’editor interno usato per per scrivere le email. anche la composizione della finestra (una cui immagine ` mostrata in e fig. in cui si ha una riga di stato all’inizio. il problema ` che siccome a e e pine non ` software libero. Un altro editor abbastanza diffuso ` pico. Tutti gli editor citati sono in grado di funzionare in un terminale o dalla console. sulle quali vengono fatte pure le eventuali richieste di immissione o richieste scelte sulle azioni da compiere. che sono gli stessi di tab. Data la maggiore utilizzabilit` rispetto a vi esso si ` diffuso parecchio. Esistono infine anche versioni grafiche di alcuni u degli editor precedenti (come gvim per vi). e si trova su varie distribuzioni su dischetto. per cui non staremo a descriverne i dettagli. ma pi` u leggero (tanto da essere usato nei dischi di avvio di Debian) e con qualche capacit` in pi`. un file manager semigrafico utilizzabile in console che nasce come clone del Norton Commander. per questo ` uno degli editor a u e pi` potenti. GLI EDITOR DI TESTO 103 Essendo jed in sostanza un clone di emacs non staremo a ripeterne i comandi principali. 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. questo ` derivato da pine. Un altro editor molto usato ` mcedit.4.4) ` analoga a quella di emacs per cui basta rifarsi quanto detto in precedenza. che viene aperto nella finestra mostrata in fig. Il programma si invoca al solito passando come argomento il nome del file da modificare. pur restando anche facile da usare. Essendo un editor leggero ma molto potente.5.2. mentre come gi` accennato sia emacs che xemacs a usati dall’interfaccia grafica mettono a disposizione men` e utilizzo del mouse. 2. per questo motivo ` stato realizzato un clone e e e completamente libero chiamato nano identico dal punto di vista dei comandi principali. 2. anche questo ` un sottoinsieme di un’altro programma e e mc (nome che sta per Midnight Commander. 2. u . 104 CAPITOLO 2. LA SHELL E I COMANDI . 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.conf adjtime ad esempio esistono diversi programmi che gestiscono l’invio e la ricezione della posta elettronica. Questo vale in generale per tutti i file di configurazione. nella directory /etc/ e che sono file di testo.1 Ci` comporta che e o i formati dei file di configurazione possano essere anche i pi` vari. 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 . 1 root root root root root root root 4096 4096 4172 4096 4096 1660 44 Aug Aug Feb Feb Feb Feb Mar 21 21 15 26 28 26 10 2000 2000 01:27 21:21 23:47 21:21 02:33 CORBA GNUstep Muttrc Net X11 adduser. 1. anche se esistono delle convenzioni generali come ignorare le righe vuote o considerare il carattere # l’inizio di un commento. ma chiaramente se ne installer` uno solo. non ` detto e che esse vengano sempre rispettate.3. le sole due caratteristiche comuni che potete trovare nei file di configurazione su un sistema GNU/Linux sono che essi sono mantenuti. Si tenga comunque presente che alcuni file di configurazione (in particolare fstab e mtab) sono gi` stati descritti in precedenza (vedi sez. come illustrato in sez. dipendendo ciascuno dalla u sintassi adottata dal relativo programma.1 Una panoramica generale A differenza di Windows che tiene tutte le configurazioni in un unico file binario. come quelli che controllano il comportamento delle librerie dinamiche e quelli usati per il login. il registro. 1. Se da una parte tutto questo pu` spaventare. 1.2.1. introducendo alcuni concetti validi in generale per qualunque file di configurazione. ed alcuni servizi di base.1 I file di configurazione In questa sezione tratteremo la gestione generica dei file di configurazione all’interno di un sistema GNU/Linux. La ragione di questa frammentazione dei file di configurazione deriva dell’architettura del sistema (illustrata in sez. a a 105 .4).2..Capitolo 3 La configurazione dei servizi di base 3. Descriveremo poi direttamente i file di configurazione di alcuni servizi di base. per cui. a 3. e non ` limitato e a quelli che tratteremo nel prosieguo di questa sezione.1).. per cui ` molto e e e spesso possibile per ciascun utente scegliere le impostazioni che si ritengono pi` appropriate u per un programma mettendo un ulteriore file di configurazione nella propria home directory.1 => /lib/librt. in maniera trasparente all’utente.so.so. che stampa sullo standard output i nomi delle librerie condivise di o cui esso ha bisogno. ` E da tenere presente infine che per molti file di configurazione viene installata anche una pagina di manuale che ne spiega il formato. 2. per questo varr` sempre la pena controllare la documentazione. 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.2.2 In seguito. trattando solo le caratteristiche principali.2 => /lib/ld-linux. Questo ` il e meccanismo che permette di inserire tutto il codice comune usato dai programmi all’interno di opportune librerie.1 (0x40023000) libacl. o nel caso di omonimia con un comando o una funzione di sistema. per quelli che prenderemo in esame faremo una descrizione generale. 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. ad esempio: piccardi@monk:~/Truelite/documentazione/corso$ ldd /bin/ls librt.1 => /lib/libattr. 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.so. Come brevemente accennato in sez. Una seconda cosa di cui bisogna tenere conto ` che Linux ` multiutente. Per verificare quali librerie dinamiche sono necessarie per l’esecuzione di un programma si pu` usare il comando ldd.6 => /lib/libc. In genere questi file sono invisibili (iniziano cio` con un “. accessibile usualmente con man nomefile.so. che contiene tutti i a dettagli.so. LA CONFIGURAZIONE DEI SERVIZI DI BASE dall’altra ha invece il grande vantaggio che le modifiche ad un singolo file di configurazione non hanno alcun modo di influenzare quelli di altri programmi.1.1 => /lib/libacl. viene realizzato attraverso il linkloader.3.so. Il comando prende come argomento il pathname assoluto del programma da analizzare e stampa a video il risultato.3 come ci siano delle directory specifiche previste dal Filesystem Hierarchy Standard che devono contenere i relativi file. quello di mettere in esecuzione i programmi. 4 a meno che questo non sia stato compilato staticamente. 2.0 (0x4016a000) /lib/ld-linux.2 (0x40000000) libattr. 2. 3.1.6 (0x4003c000) libpthread. 3 2 .so.2 La gestione delle librerie condivise Una delle funzionalit` pi` importanti per l’esecuzione dei programmi in un qualunque sistema ` a u e quello della gestione delle librerie condivise. Per` per far s` che detto codice possa essere utilizzato dai singoli programmi occorre una o ı apposita infrastruttura. ed eseguire le operazioni di configurazione con un editor qualunque.1 (0x401ba000) si ricordi quanto detto in sez.so. quelle che in Windows vengono chiamate DLL (da Dinamically Linked Library) e che nei sistemi unix-like sono chiamate shared object. cio` in maniera da includere al suo interno tutto il e codice che altrimenti sarebbe stato disponibile attraverso delle librerie condivise.so.so.6 uno dei compiti fondamentali del sistema. e abbiamo visto in sez.2. 1.0 => /lib/libpthread.3 in modo che non sia necessario reinserirlo tutte le volte all’interno di ciascun programma.”) ed hanno lo stesso nome del loro e analogo di /etc/ valido per tutto il sistema.so.so. Questo non ` un vero programma a se stante.106 CAPITOLO 3.1.1 (0x40035000) libc. con man 5 nomefile. dove e questa distinzione non esiste. anche se quasi universalmente rispettata.so. ma la libreria installata sar` comunque contenuta in un file con una sua specifica minor version. nel qual caso pu` di nuovo succedere di tutto. 1. Un esempio di questo file. e sar` tranquillamente usabile (attraverso la diversa major version) senza nessun a 7 conflitto. infatti queste vengono sempre cercate per numero di major version. per cui ad esempio avremo o e che: piccardi@monk:/lib$ ls -l librt* -rw-r--r-1 root root lrwxrwxrwx 1 root root 26104 Sep 21 14:56 librt-2. mentre con -N e -X si pu` bloccare rispettivamente o la ricostruzione della cache e dei link. /etc/ld. ed una convenzione vuole che le interfacce pubbliche delle librerie non debbano mai cambiare fintanto che non cambia la major version.1 abbiamo visto come secondo il Filesystem Hyerarchy Standard le librerie possono essere mantenute in diverse directory.so.so un cui si pu` notare come una certa versione specifica di una libreria (la 2. Se invocato con l’opzione -v il comando ldconfig stampa l’elenco di tutte le directory esaminate e delle librerie usate nella ricostruzione. ma di default il comando ldconfig esamina soltanto le directory /lib e /usr/lib.2.3.2) venga rimappata o come prima major version. L’opzione pi` usata ` -v che permette di avere u e una descrizione pi` dettagliata con le informazioni relative alle versioni. 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. In sez. o 7 questo ` il motivo per cui il problema dei conflitti di versione delle librerie tristemente noto su Windows.conf.conf.6 il secondo ` che se e si ha bisogno di una versione vecchia delle librerie non c’` nessun problema. Si noti come le librerie siano file che terminano con l’estensione . Il comando ldconfig permette sia di ricostruire la cache che di ricreare i link alle ultima versione dei file delle librerie. Pertanto se ad esempio si installa una nuova libreria dai sorgenti in /usr/local/lib. major e minor. in modo che il linker dinamico possa utilizzarle. con il risultato che programmi che fino ad allora funzionavano perfettamente si u trovano a riportare errori o a terminare improvvisamente. Questa ` una delle caratteristiche e e pi` utili in un sistema unix-like.1 -> librt-2. ` sostanzialmente assente su GNU/Linux. che di norma non compare in /etc/ld. se ci sono altre librerie condivise in altre directory queste possono essere specificate con un opportuno file di configurazione. 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.2.so. che contiene la lista delle altre directory che contengono le librerie condivise. le altre opzioni al solito u sono descritte nella pagina di manuale del comando. Questo file si chiama /etc/ld. basta installare e anche quella. 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. le librerie cio` sono organizzate sempre con due numeri di u e versione. 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.3. e viene generato (di norma tutte le volte che si installa una nuova libreria) con il comando ldconfig.3.5 Con questo si ottengono due risultati di grande rilevanza. ` il seguente: e /usr/local/lib /usr/X11R6/lib al solito ` una convenzione.cache.3. come DLL hell. ogni tanto qualche programmatore anche e non pi` alle prime armi la viola.2. oltre alle canoniche /lib e /usr/lib. e 5 .so 14 Sep 22 14:44 librt.so (che sta appunto per shared object) seguita da un numero che ` detto major version. a perci` quello che si fa ` creare un link simbolico alla versione effettiva. cos` come ı viene installato su una Debian Sid.so.1. I FILE DI CONFIGURAZIONE 107 ci fa vedere le librerie necessarie all’uso di ls. 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. LA CONFIGURAZIONE DEI SERVIZI DI BASE Il default di ldconfig prevede l’uso di questo file. le modalit` con cui queste informazioni vengono ottenute.conf/etc/nsswitch. nella stessa forma usata per PATH. i nomi dei gruppi. un esempio 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. 7.12 che permettesse di demandare a delle librerie esterne. nei casi in cui si vogliano utilizzare solo in forma temporanea delle librerie condivise. cio` con le directory separate da dei “:”. ma usando l’opzione -f si pu` specificare o un qualunque altro file al suo posto. Per risolvere il problema venne creata una apposita interfaccia.1. e di centralizzarle per interi gruppi di macchine tramite opportuni servizi. 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. mentre con -n si pu` passare direttamente sulla linea di o comando una lista di directory dove effettuare la ricerca. le loro password. Infatti le librerie contenute nelle directory specificate tramite LD_LIBRARY_PATH hanno la precedenza e vengono utilizzate per prime. queste informazioni sono memorizzate in opportuni file di configurazione mantenuti sotto /etc. smetterebbero di funzionare praticamente tutti i programmi. 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. 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. si pu` ricorrere alla variabile di ambiente LD_LIBRARY_PATH. Tradizionalmente. ` 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.6. If you have the ’glibc-doc’ and ’info’ packages installed. per cui il sistema ` pi` lento).108 CAPITOLO 3. 12 il sistema ` stato introdotto la prima volta nelle librerie standard di Solaris. le librerie standard GNU hanno e ripreso lo stesso schema. dato che se si usasse una versione non funzionante di una libreria fondamentale come la glibc. Per le altre opzioni e la documentazione completa si consulti al solito la pagina di manuale disponibile con man ldconfig. permettendo configurazioni ibride.conf Example configuration of GNU Name Service Switch functionality.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.10 I sistemi moderni per` permettono di mantenere queste informazioni o anche in maniera diversa. ` il seguente: e # # # # # 8 9 /etc/nsswitch. e o per l’intero sistema. Le modalit` di funzionamento del Name Service Switch vengono gestite attraverso il suo file a di configurazione che ` /etc/nsswitch. . con l’eccezione per i nomi delle macchine che possono essere forniti anche attraverso l’uso del DNS. e come installato su una Debian Sid. in cui passare una lista8 di o ulteriori directory in cui verr` effettuata la ricerca di altre librerie (questa volta senza usare a l’indicizzazione.3 e quelli relativi alla rete in sez. configurabili in maniera indipendente. ad esempio quelli relativi alla gestione di utenti e gruppi in sez.conf. Infine. all’inizio questo veniva fatto introducendo tutta la casistica possibile nell’implementazione delle funzioni stesse. 10 ne tratteremo alcuni in seguito. delle macchine ecc. con degli ovvi problemi di estendibilit` e compatibilit`. come i nomi degli utenti. 4. database o servizi di rete) a su cui queste informazioni sono mantenute. try: info libc "Name Service Switch" for information about this file. il a a Name Service Switch. corrispondenze fra nome di un servizio RPC e relativo numero identificativo. identificatori di utente e gruppo principale. terminata da un “:” indica una classe di informazioni.so. corrispondenze fra nome del gruppo e propriet` dello a stesso. L’elenco a delle classi di informazioni disponibili ` riportato in tab. separate da spazi. ecc. come un sistema di autenticazione basato su qualche altro meccanismo (ad esempio su LDAP). 4. le linee vuote o che iniziano per # vengono ignorate. le e altre linee indicano una opzione.1. .X. a Di norma non c’` niente da cambiare in questo file a meno che non si aggiunga un ulteriore e supporto. corrispondenze fra nome di un servizio e numero di porta. corrispondenze gruppo di rete e macchine che lo compongono.3). esse si trovano tutte in /lib/ e devono avere il nome a libnss_NOME. La pagina di manuale contiene una lista completa delle opzioni disponibili.3. corrispondenze fra nome di una rete e suo indirizzo IP. 13 vale 1 per le glibc 2.).3). corrispondenze fra nome di un protocollo e relativo numero identificativo. shell di default.0 e 2 per le glibc 2. 3. 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. e Classe shadow Tipo di corrispondenza corrispondenze fra username. alias per la posta elettronica.3. 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.1. la a ricerca dei dati sulle varie fonti sar` eseguita nell’ordine in cui queste sono indicate. le modalit` con cui queste informazioni vengono fornite. dove X fa riferimento alla versione delle glibc. La prima colonna.3. Per ciascuna nuova modalit` deve esistere una opportuna libreria che garantisce l’accesso a alle informazioni con quella modalit`. shadow password ed altre informazioni sulla gestione delle password (vedi sez. corrispondenze fra nome a dominio e numero IP.1. passwd group aliases ethers hosts netgroup networks protocols rpc services Tabella 3. db. corrispondenze fra numero IP e MAC address della scheda di rete. ecc. 4. (vedi sez.13 mentre NAME indica il tipo di supporto per quell’informazione (nel caso dell’esempio sar` files. corrispondenze fra username. di seguito vengono elencate.1: Le diverse classi di corrispondenze definite all’interno del Name Service Switch. 110 CAPITOLO 3. 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. attraverso dei moduli di PAM. ` a e /etc/login.3. se invece si usa ssh (vedi sez. che permettono di stampare alcune informazioni dinamiche.14 In quella occasione abbiamo accennato che il messaggio di presenza stampato sui terminali viene letto da /etc/issue. 3.net che viene usato al suo posto da telnet per i e collegamenti effettuati via rete.4) queste funzionalit` sono state inserite all’interno di questa libreria e gestite a dai relativi file di configurazione. che legge da esso i nomi dei dispositivi di terminale (le tty) dai quali ` consentito l’accesso. 1. Un esempio di questo file ` il seguente: e e # Standard consoles tty1 tty2 tty3 tty4 in genere sono gestiti. Una volta completato il login viene invece mostrato un messaggio di benvenuto.2. Al solito sono considerati commenti le righe che iniziano per # e ignorate le righe vuote. con l’uso di PAM (vedi sez.4. I principali valori sono riportati in tab. ppc.). ma ` possibile e inserire delle direttive. mentre MOTD_FILE permette di specificare un altro file al posto di /etc/motd.3. Questi usano una serie di file di configurazione che provvedono al controllo di alcune funzionalit`. ad esempio con “\s” si inserisce automaticamente il nome del sistema operativo. il nome del file sta per message of the day.4 la procedura di login da terminale ` gestita dai due programmi e getty e login. e scrivere un messaggio in questo file ` una modalit` veloce per mandare un avviso a tutti gli utenti che entrano nel sistema. Il file contiene una serie di specificazioni di parametri. nome del terminale. hostname.3. con “\l” il nome del terminale.2: Principali caratteri di estensione per /etc/issue. ecc. che poi sono spesso riutilizzati anche dagli altri programmi che eseguono la a procedura di collegamento al sistema. e Opzione \d \l \m \n \r \s \t Significato data. come vedremo in sez. versione del kernel. 15 14 .3) detti file vengono ignorati. nome del sistema (Debian. 4. LA CONFIGURAZIONE DEI SERVIZI DI BASE 3.3. 8. Il contenuto del file viene stampato integralmente. Tabella 3. trattate in sez. l’elenco completo ` riportato nella pagina di manuale di getty. ora. Viene o e usato dal programma login. Un altro file di controllo per la procedura di login ` /etc/securetty. e LOGIN_TIMEOUT che indica il numero di secondi o in cui il programma aspetta l’immissione della password prima di cancellare la procedura. che ` mantenuto e nel file /etc/motd. 4.4 I file usati dalla procedura di login Come accennato in sez. attraverso l’uso del carattere “\”.1. 4. che ` un semplice file il cui testo viene stampato sul terminale prima e della stringa “login: ”. e a Uno dei file che controllava15 una serie di funzionalit` relative alla procedura di login. con “\n” il nome della macchina. Questo file contiene la e lista delle console da cui si pu` collegare l’amministratore di sistema (cio` l’utente root). architettura (i486. RedHat.defs (che in realt` ` il file di configurazione del sistema di gestione delle shadow ae password. Analogo a issue ` il file /etc/issue. ecc).3). e la generazione di vari tipi di formati in di uscita. ma lo si pu` anche invocare direttamente. 3.1. questo non ` propriamente un file di configuo e razione. In genere il programma viene invocato periodicamente nelle operazioni giornaliere eseguite da cron (vedi sez. 16 . 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. cos` da poterli recuperare ı velocemente. Per stabilire in quale directory si trovano gli originali delle pagine. Per evitare di ripetere il procedimento della generazione ad una successiva invocazione tutti questi file vengono salvati. l’amministratore pu` creare il file /etc/nologin. indici. la sua presenza serve solo a dire alla procedue ra di collegamento al sistema che solo l’amministratore pu` essere entrare. 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. ogni linea definisce un nome di dispositivo dal quale ` e e possibile il login. 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). 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. dove mantenere gli indici delle pagine presenti e delle parole su cui effettuare le ricerche.1 il comando man supporta anche la possibilit` di generare docua mentazione stampabile. dove devono essere memorizzate le pagine riformattate per la visualizzazione. usualmente sotto /var/cache/man/. ma viene effettuata normalmente tramite il programma mandb. ecc.1.3.16 Infine quando si vuole bloccare temporaneamente l’accesso al sistema degli utenti normali. in generale non ` comunque una buona idea neanche quella di usare telnet. 2. a 3. le linee vuote o che iniziano per # vengono ignorate. il sistema usa il file di configurazione /etc/manpath.3. La pagina di manuale fornisce una descrizione completa.5 La configurazione del sistema delle pagine di manuale Come accennavamo in sez. Questo avviene perch´ in realt` le pagine di manuale non sono scritte e a direttamente nel formato in cui le vediamo su video. per la descrizione u completa delle altre opzioni ed i dettagli sul comando al solito si faccia riferimento alla pagina di manuale. Bench´ sia possibile e consentirlo aggiungendo una riga. in che ordine cercarle. Un secondo aspetto del sistema delle pagine di manuale ` quello dell’indicizzazione dei cone tenuti usata dai comandi whatis e apropos.3.1).config. quindi ` meglio se proprio lasciate e e perdere la cosa. La sua rimozione o ripristiner` l’accesso per tutti gli utenti. che costruisce gli opportuni file con gli indici usati dai precedenti. in una directory catN. fra cui quello del testo mostrato sul terminale ` uno fra i tanti. I FILE DI CONFIGURAZIONE tty5 tty6 # Same as above. chiamato troff. che permette la creazione di sezioni. 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. ma in uno speciale linguaggio di formattazione. dato che il suo contenuto ` ininfluente. dove N corrisponde alla sezione cui appartiene la pagina. non ` assolutamente una buona idea per cui se volete farlo e dovrete studiarvelo da soli. LA CONFIGURAZIONE DEI SERVIZI DI BASE Il primo aspetto della configurazione ` quello della definizione delle directory in cui si trovano e le pagine di manuale.17 una lista di tutte queste directory si pu` stampare con il comando manpath. e Infine la direttiva MANDB_MAP serve ad indicare a mandb dove devono essere messi i file degli indici. si pensi al caso in cui si siano installate diverse versioni di uno stesso pacchetto. 2. e deve essere ripetuta per tutte le directory che si vuole siano aggiunte alla lista. SECTION.config...112 CAPITOLO 3.18. ` il seguente: ı e MANDATORY_MANPATH MANDATORY_MANPATH MANDATORY_MANPATH MANDATORY_MANPATH . in tal caso le pagine di manuale saranno sotto /usr/local/man ed il sistema deve essere in grado di vederle. MANPATH_MAP /bin MANPATH_MAP /usr/bin MANPATH_MAP /sbin MANPATH_MAP /usr/sbin MANPATH_MAP /usr/local/bin .. 17 . serve per aggiornare dinamicamente la lista delle directory in cui cercare le pagine di manuale sulla base delle directory presenti nel PATH (vedi sez. e dove devono essere create le pagine temporanee. 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. ad esempio una versione pi` u recente a mano sotto /usr/local.1. La direttiva MANPATH_MAP indica invece la corrispondenza fra le directory dei comandi e le relative pagine di manuale. 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 . Se la prima compare nel PATH dell’utente la seconda ` aggiunta al MANPATH in maniera implicita. come per gli eseguibili infatti anch’esse possono essere installate in diverse sezioni dell’albero. 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. ed in un certo ordine rispetto alle altre.config. il primo indica una directory contenente i comandi. 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.. cos` come installato su una Debian Sid. indica l’ordine di ricerca delle pagine di manuale nelle varie sezioni. o ed in genere si otterr` qualcosa del tipo: a [piccardi@gont corso]$ manpath /usr/local/man:/usr/share/man:/usr/X11R6/man a meno di non aver definito in maniera diretta la variabile di ambiente MANPATH (nel qual caso sar` semplicemente stampato il suo valore) che permette di soprassedere il valore preimpostato a dal sistema. La direttiva richiede due parametri. 2.4) dell’utente.. Un estratto del file manpath. la direttiva prende come parametro il pathname alla directory contenente gli originali. 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. Come vedremo meglio in sez.3.2. . In tal caso occorre tenere presente che i file dovranno essere eseguibili.2 La directory /etc/skel ed il file /etc/shells Altri file non classificabili in una specifica categoria.local e si trova fra gli script di avvio (in /etc/rc. 4. infatti Debian esegue gli script usando lo speciale comando run-parts che.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.1 Il file rc. restringendola per` alle shell autorizzate. e il loro nome non dovr` contenere caratteri speciali. Trattandosi di uno script di shell non si tratta propriamente di un file di configurazione. 5. 18 . compreso in fondo alla stessa. 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. ` possibile creare uno scheletro del contenuto e della home directory di ogni nuovo utente in modo che questo sia automaticamente disponibile tutte le volte che se ne crea uno. 3.3. 4. e sulla base della presenza della sua shell di login (tratteremo l’argomento in sez. Tutti i file e le directory che si vuole siano creati nella home directory dei nuovi utenti (ad esempio una opportuna copia di .2. 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. Una modalit` alternativa (supportata ad esempio da Debian). La directory /etc/skel.local e la directory rc.bashrc. 4. e saranno automaticamente copiati nella relativa home alla creazione di ogni nuovo utente.3. Ogni riga non vuota contiene un solo campo che specifica il pathname completo del programma che pu` essere usato o come shell. anche se connessi alla gestione degli utenti. Un utente che voglia cambiare la propria shell di default potr` usare solo una shell fra quelle a che sono indicate in questo file. lancia tutti gli script presenti in una directory posto che il loro nome sia nel formato adatto. Esso viene eseguito alla fine della procedura di avvio.2.d o anche e direttamente in /etc/). o Il file viene anche usato da alcuni servizi per verificare se un utente ` un utente normale. ALTRI FILE 113 3.3) in questo file. 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. e In genere questo file ` rc.boot nella quale si possono mettere gli script che si vuole siano eseguiti alla fine della procedura di inizializzazione.2).2 trattando i comandi per la gestione degli utenti. 3.3. in questo modo l’amministratore pu` lasciare all’utente la libert` o a di modificare la propria shell di login.1. e le righe vuote sono ignorate. Il file utilizza il solito formato. ` quella che contiene questo schee letro.3.18 a 3.bat del DOS: contiene i comandi che si vogliono e eventualmente dare dopo che tutti i servizi sono partiti.bash_profile e di altri eventuali file di configurazione) possono essere messi in questa directory. le righe inizianti per # sono considerate commenti.boot Nella trattazione della procedura di avvio del sistema in sez. come vedremo in sez.3. ed assume un po’ il significato di quello che ` l’autoexec. come il nome stesso suggerisce. o che hanno a che fare con la configurazione di comandi di base. ` quella dell’uso della directory a e /etc/rc. 1).) e LOCALUSER indica l’utente con i permessi del quale sar` a effettuata l’indicizzazione.daily/find: run at this priority -. il sistema di gestione dei log.conf Abbiamo visto in sez. utilizzato come titolare dei programmi che devono avere accesso solo alle informazioni pubbliche. Dato che normalmente il comando viene lanciato da uno degli script periodici eseguiti da cron (vedi sez. /etc/updatedb. e senza il -.3 Il file /etc/updatedb.20 in modo da evitare che siano indicizzati file che gli utenti hanno protetto da lettura. Oltre alle opzioni il comando utilizza delle omonime19 variabili di ambiente per ottenere le stesse impostazioni.2. gli spool delle a code di stampa e della posta. non potr` per` cambiare quella con cui entra nel sistema al login. 3.iniziale. 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. ecc.2 come con locate si possa ricercare la presenza di un file utilizzando un database di tutti quelli presenti creato attraverso il comando updatedb. PRUNEPATHS indicher` le directory da non indicizzare (quelle dei file temporanei. ecc. nel caso nobody. 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. a o 3.higher number means lower priority # (this is relative to the default which cron sets. semplicemente lanciandola come un qualunque altro programma.3 I servizi di base In questa sezione prenderemo in esame la configurazione di alcuni servizi di base del sistema. 3. Allora PRUNEFS indicher` i filesystem da non a indicizzare. 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. quello che viene fatto ` di impostare queste varibili e di ambiente all’interno di un file.3.2.114 CAPITOLO 3. i filesystem virtuali come /proc o quelli di dispositivi estraibili. 2. 20 19 . quest’ultimo prende una serie di opzioni (in forma estesa. che serve come una specie di file di configurazione del comando. e un utente di servizio che non ha nessun privilegio nel filesystem. come quelli di rete. 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. come quelli per l’esecuzione periodica dei comandi. 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. o u specificando gli estremi separati con un “-”.3. 9) pi` usato nel mondo. noto anche per essere l’autore di bind. dove sia 0 che 7 indicano la domenica). e Il file di configurazione principale di crond ` /etc/crontab che contiene l’elenco dei delle e operazioni periodiche generali da eseguire nel sistema. 3. accessibile con man 5 crontab. giorno del mese (da 1 a 31). 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. i primi cinque indicano la periodicit` con cui il a comando indicato nell’ultimo campo viene eseguito. Questa funzionalit` viene gestita dal servizio a chiamato cron. a Si tenga presente che siccome il programma specificato nella parte conclusiva della linea viene eseguito direttamente dal demone crond. This file also has a username field.1.3. trattati rispettivamente sez. Il demone ha il compito di svegliarsi ogni minuto ed eseguire ogni programma che ` stato programmato per quel momento. 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. Il primo file controllato da crond per decidere se c’` da eseguire una operazione ` questo. 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.3. 3.5.3. cos` ad esempio usando */2 nel ı primo campo si intender` chiedere la ripetizione del lavoro ogni due minuti. essenziale per compiere tutte quelle operazioni che devono essere eseguite a periodi fissi. Se il tempo corrente corrisponde a tutti i valori specificati nei cinque campi il comando viene eseguito.1 Il servizio cron Una funzionalit` importante presente in qualunque sistema operativo ` quella dell’esecuzione di a e programmi su base periodica. mese dell’anno (da 1 a 12) e giorno della settimana (da 0 a 7. preso dal file installato di default su una Debian Sarge. that none of the other crontabs do. I cinque campi della periodicit` indicano rispettivamente: minuto (da 0 a 60). Thu. 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. u .4) che lavorano in background ed il cui comportamento ` controllato dai relativi file di e configurazione. come la creazione del database dei file e l’indicizzazione delle pagine di manuale. un intervallo. creato da Paul Vixie. In genere si deve intervenire su questo file e e solo quando si vuole cambiare uno degli orari a cui le operazioni vengono eseguite o per inserire una nuova operazione periodica. il server DNS (vedi sez. si tratta del programma vixie-cron. non saranno necessariamente definite le usuali variabili di ambiente presenti normalmente quando si esegue una shell. ora (da 0 a a 23).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. implementato attraverso l’uso del demone crond. Il formato del file segue la solita regola di ignorare righe vuote ed inizianti per #. 1. 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. il sesto campo indica l’utente per conto del quale eseguire il comando scritto nel seguito della riga.3 e 3. etc. Un esempio del contenuto del file /etc/crontab. I SERVIZI DI BASE 115 sez. a Per ulteriori dettagli si faccia riferimento alla pagina di manuale del file. L’utilizzo del carattere * vale da jolly e lo si usa per indicare un valore qualsiasi. 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. /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.daily 7 root test -e /usr/sbin/anacron || run-parts --report /etc/cron. se ` installato le operazioni periodiche vengono eseguite da lui e non ` necessario l’intervento e e di crond.allow.weekly/. e e a Se lanciato senza opzioni il comando prende come argomento il file da usare come tabella. di cui legge il contenuto che deve essere nella forma in cui lo si scriverebbe con l’editor. Occorre comunque fare attenzione. essendo le altre indicazioni tutti * si intende che giorno.3. Se il file non esiste ` possibile vietare l’uso del servizio solo ad alcuni utenti e con la creazione del file /etc/cron. Il contenuto standard di questo file gi` prevede una serie di azioni giornaliere. il quale si incarica anche di eseguire le operazioni che non sono state effettuate perch´ la e macchina era spenta. il carattere di sottolineatura ed il “-” (per i dettagli si consulti la relativa pagina di manuale). per cui il comando non sar` a presente e verr` eseguito invece run-parts.2 Il servizio at Abbiamo visto nella sezione precedente come si pu` programmare l’esecuzione periodica di proo cessi con crontab.monthly/. perch´ run-parts non esegue gli script il cui nome contiene e caratteri diversi da lettere maiuscole e minuscole. in questo caso questi dovr` creare un suo crontab personale a tramite il comando crontab. Per provvedere a questo compito esiste un altro servizio. creando il file /etc/cron. o 3. che e nel caso non ` necessario e non deve essere specificato. mese e giorno della settimana sono qualsiasi. a 24 i file vengono mantenuti in /var/spool/cron/crontabs. detto at. 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.25 Con -r invece si esegue la rimozione completa della tabella corrente. Infine con -u si potr` modificare a (solo da parte dell’amministratore) la tabella dell’utente specificato come parametro.weekly * root test -e /usr/sbin/anacron || run-parts --report /etc/cron. /etc/cron. questo ` un sostituto di crond per le macchine che non ` previsto e e siano sempre accese. allo stesso modo si interpretano le altre due righe.24 Se lo si chiama con l’opzione -e questo invocher` l’editor prea definito (di norma ` vi. .monthly in cui sono riportate le azioni standard che vengono eseguite tutti i giorni alle ore 6:25. settimanali e a mensili che vengono eseguite in maniera automatica. Queste azioni sono eseguite attraverso il comando run-parts23 dagli script presenti nelle directory elencate nell’esempio precedente.22 tutte le domeniche alle 6:27 e tutti i primi giorni del mese alle 6:52. ore 6. 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.daily/. usando “-” si legge direttamente dallo standard input. o a senza che questa debba essere periodica. dato che l’utente ` gi` ben definito. esistono per` anche necessit` di avere una esecuzione differita dei programmi. Si tenga presente che l’amministratore pu` riservare l’uso del servizio cron solo ad alcuni o utenti.116 CAPITOLO 3. nel quale si devono elencare gli username degli utenti che lo possono usare. l’intallazione di default presuppone che la macchina non ne abbia bisogno. in modo da poter riutilizzare l’output del comando direttamente come input per un successivo crontab -. 23 nel file di crontab mostrato nell’esempio viene fatto un controllo preventivo della presenza del comando anacron (installabile dal pacchetto omonimo). Il e formato di questo file ` identico a quello di /etc/crontab con l’eccezione del sesto campo. a meno di non aver impostato diversamente la variabile EDITOR). 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. numeri. 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.deny che di nuovo dovr` contenere la lista degli username a di coloro che non possono usarlo. ` at. Il comando stampa il nome di ciascun programma. 3. l’orario per cui ` stata programmata e l’esecuzione. Se si vuole abilitare la ricezione di messaggi via rete invece occorre utilizzare l’opzione -r.deny. ma in caso di necessit` lo si pu` anche a o lanciare direttamente (ad esempio per poter utilizzare l’opzione -d che attiva la modalit` di a debug). Il demone pu` essere anche lanciato manualmente. La directory di lavoro e l’ambiente del comando che verr` lanciato sono quelli presenti al momento in cui si invoca at. mentre l’amministratore pu` operare su tutti quanti. per questo esiste un demone apposito. il e . Al solito per l’elenco completo si pu` fare riferimento alla pagina o di manuale. per ciascun utente. pi` altre estensioni che permettono di usare anche speciu ficazioni in forma pi` discorsiva come at 1pm tomorrow.3. le linee vuote o che iniziano per # vengono ignorate. Una descrizione completa di queste si u trova nel file /usr/share/doc/at/timespec. che permette di programmare l’esecuzione di un programma ad un dato momento. Il comando vuole come argomento data ed ora in cui il programma specificato e deve essere messo in esecuzione. Di norma il servizio ` attivato automaticamente dagli script di avvio. e prevede o come opzioni -l che permette di impostare manualmente un limite massimo per il carico della macchina. I SERVIZI DI BASE 117 un tempo successivo. syslogd. a a fra cui tutti quelli del comando date. ha senso cambiarlo solo in caso di macchine multiprocessore). Gli utenti possono vedere la lista dei propri programmi in coda con il comando atq. Dato che detti programmi non sono associati ad un terminale non ` loro e possibile scrivere messaggi di avviso o di errore.allow e cron.deny. ed un numero identificativo ad esso associato. al solito accessibile con man syslogd. Il comando cio` e sar` posto in esecuzione solo quando il carico medio della macchina scende sotto un certo valore. o Infine come per l’uso di cron ` previsto un controllo degli accessi al servizio attraverso i e due file /etc/at.allow e /etc/at. Il comando di base. in una opportuna coda. e li manda in esecuzione al tempo stabilito. -b che permette di impostare un intervallo di tempo minimo (il default ` 60 secondi) fra la messa in esecuzione e di due successivi programmi. Il formato del file ` e e sempre lo stesso. dove i vari programmi che devono dire qualcosa possono scrivere i loro messaggi. Il servizio ` realizzato dal demone atd. che come crond viene lanciato dagli script di avvio. il nome di quest’ultimo viene letto dallo standard input o pu` o essere specificato direttamente dalla riga di comando con l’opzione -f. il cui formato e significato sono identici a quello degli analoghi cron. mentre l’amministratore pu` usare lo stesso comando per vedere la lista di tutti o quanti. Un programma pu` essere rimosso dalla coda con il comando atrm. a Il comando supporta una grande variet` di formati per le modalit` in cui si indica la data.3. Ogni regola ` costituita da due campi separati da spazi o tabulatori. ogni linea definisce una regola di registrazione. Il file di configurazione per il demone syslogd ` /etc/syslog. e Il demone controlla la presenza nelle code di programmi in attesa di essere eseguiti. a Una volta programmata l’esecuzione di un programma questo viene messo. a e vari programmi per la gestione della stessa.3. ed ` possibile attivarlo e e e disattivarlo direttamente con l’uso diretto degli stessi. La descrizione completa del comando e di tutte le opzioni ` disponibile nella pagina di e manuale.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. Il servizio comporta diverse modalit` di gestione della esecuzione differita. oltre il quale non saranno i programmi programmati (di default vale il valore preimpostato di 1. 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.conf. Di nuovo un utente normale pu` operare o solo sui propri programmi. che prende come argoo mento l’identificativo dello stesso ottenibile con atq. che si occupa di fornire una sorta di servizio di segreteria telefonica.5. primo campo ` detto selettore. Tabella 3. sinonimo di err.” permette di a elencare una lista di servizi per la stessa priorit`. messaggi interni generati da syslogd. Il servizio identifica una categoria di servizi di sistema per conto dei quali si vuole registrare il messaggio. messaggio informativo. avvertimento. o viceversa una lista di priorit` per un certo a a servizio. e sinonimo di emerg. uso interno. dove sono elencati i servizi standard predefiniti. e viene specificato tramite una delle parole chiave riportate in tab. ma significativa. messaggi dei demoni (at e cron) . un asterisco “*” seleziona o tutti i servizi o tutte le priorit` mentre la parola none li esclude tutti.4 in ordine crescente. messaggi generici a livello utente. a a L’azione usata come secondo campo ` un termine astratto per descrivere come si vuole che e siano registrati i messaggi. deprecato. messaggi dai demoni di gestione della posta elettronica. si deve intervenire immediatamente. Si possono infine associare pi` selettori ad una stessa azione separandoli con il “. una “.3: I servizi standard in cui sono classificati i messaggi del syslog. Priorit` a debug info notice warning warn err error crit alert emerg panic Significato messaggio di debug. e dal segno “!” che permette di escludere una specifica priorit`. messaggi dai servizi di stampa. il e e servizio e la priorit`. Il campo selettore ` costituito da due parti. messaggi del sistema UUCP (Unix to Unix CoPy. messaggi relativi ad autenticazione e sicurezza. 3. identificati dalle parole chiave da local0 a local7 che sono lasciati a disposizione dell’utente per un uso non specifico.118 Servizio auth authpriv cron daemon ftp kern lpr mail mark news security syslog user uucp CAPITOLO 3. che in questo caso esso dovr` u e a . dalla pi` bassa alla a u pi` alta.” mentre u ulteriori estensione di questa sintassi sono date dal segno “=” che permette di registrare solo una specifica priorit`. condizione di errore. Per una descrizione completa di tutti i dettagli si a faccia al solito riferimento alla pagina di manuale. deprecato. separate da un punto. sinonimo di warning. LA CONFIGURAZIONE DEI SERVIZI DI BASE Significato servizio identico a authpriv. messaggi del kernel. I valori delle priorit` invece sono indicati in tab. demoni di sistema che non hanno una categoria di servizio a se stante. il sistema ` inusabile. Questi identificano l’importanza del messaggio. tutti i messaggi di priorit` superiore u a od uguale a quella indicata nella regola verranno registrati. messaggi del servizio di gestione di USENET (la rete dei gruppi di discussione).4: Le varie priorit` dei messaggi del servizio di syslog. sinonimo di auth. il caso pi` comune ` scriverli in un file. servizio FTP (File Transfere Protocol. Tabella 3. un meccanismo di comunicazione precedente internet).3. Oltre a questo ci sono poi una serie servizi ausiliari. il secondo azione. deprecato. 3. situazione normale. deprecato. a Oltre a queste parole chiave syslogd riconosce alcune estensioni. condizione critica. Si possono anche mandare i messaggi a liste di utenti.authpriv.log user.=info. identificati per username e separate da virgole. e questi li riceveranno sul terminale su cui sono collegati. user e uucp vengano salvati su file a parte.* -/var/log/daemon. Vengono poi definiti alcuni file per i messaggi generici come messages in cui si richiede l’invio dei messaggi solo delle priorit` info.=debug. in modo o ı da proteggere i file di log.emerg * In questo caso si noti come tutti i messaggi relativi ai servizi auth e authpriv.\ cron.daemon.err /var/log/mail.log daemon.1). si pu` inserire un “-” opzionale davanti al nome per o impedire che il contenuto del file venga sincronizzato ad ogni messaggio. Se su quella macchina ` stato predisposto un syslogd abilitato all’ascolto via rete questo ricever` e a tutti i messaggi.log mail. dove per ciascuna priorit` viene usato un file a a parte. notice e warn escludendo una serie di servizi i cui a .* /var/log/auth.log # # Logging for the mail system.* /var/log/cron.news. Una delle caratteristiche pi` utili del syslog ` che si possono mandare tutti i messaggi ad una u e macchina remota.none -/var/log/syslog #cron.*.none.authpriv.* -/var/log/kern.none -/var/log/messages # # Emergencies are sent to everybody logged in. # *. che si ` estratto dal file di riferimento e e che viene installato di default su una Debian Sid: auth. kern.* -/var/log/lpr.log kern.\ news. Questo si fa usando il carattere “@” seguito dall’hostname della destinazione. lasciando spazio per la bufferizzazione degli stessi. oppure si pu` mandare l’output su una o console specificando come file quello di un dispositivo a terminale (ad esempio /dev/tty10). La potenza di syslogd ` comunque quella di permettere di effettuare le registrazioni in e maniera estremamente flessibile. Split it up so that # it is easy to write scripts to parse these files.warn mail.*.authpriv.* -/var/log/user. Inoltre sono trattati a parte i messaggi relativi al sistema di posta.=notice.none.err # # Some ‘catch-all’ logfiles. # mail.auth.*. ad esempio se si premette un “|” al nome del file si indica che si sta facendo riferimento ad una fifo (vedi sez.* -/var/log/mail. Si pu` realizzare cos` un macchina dedicata solo a questo servizio. che spesso possono contenere informazioni preziose utili in caso di intrusione (ovviamente detta macchina deve essere molto ben protetta).info mail.\ auth.=warn. daemon.none. I SERVIZI DI BASE 119 essere specificato dal pathname assoluto. 1.conf ` il seguente.* /var/log/uucp.log lpr.3.3. mentre sul file syslog vengono mandati tutti i messaggi eccettuati quelli relativi ad auth e autpriv.log uucp.none -/var/log/debug *.\ mail.\ auth. Un esempio per il file /etc/syslog.2.log *.mail.info -/var/log/mail. # *. infine il carattere “*” fa si che i messaggi siano inviati a chiunque sia collegato. mail.warn -/var/log/mail.authpriv. lpr.none. Infine come per gli altri file di configurazione le linee vuote o che iniziano per # vengono ignorate.) provenienti dai vari servizi. 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 cui si rischia e che finiscano fuori controllo. Il problema con i file di log ` che essi tendono a crescere di dimensione. definibili con la direttiva tabooext (vedi tab. Il formato del file di configurazione prevede la presenza di una direttiva per riga. mentre -f forza il comando ad eseguire una rotazione anche a quando questa non ` in programma. Le altre principali direttive sono riportate in tab. Questo consente ad ogni servizio che gestisce autonomamente i suoi file di log. la descrizione completa di tutte le direttive e del loro significato si trova nella pagina di manuale del comando. lanciato su base periodica.120 CAPITOLO 3. rimozione delle versioni troppo vecchie. In genere si mettono in logrotate. 3. Queste possono essere specificate direttamente nel file e vengono prese come impostazioni globali da ´ applicare in maniera generica a tutti i file.5. In questo modo si fa si che ogni pacchetto che ha bisogno di produrre dei log e ruotarli. LA CONFIGURAZIONE DEI SERVIZI DI BASE messaggi sono archiviati altrove. 26 . e per questo sono di importanza fondamentale per capire le ragioni di eventuali malfunzionamenti. contenente le direttive da applicargli. specificate sempre una per riga. Se si usa l’opzione -v il comando stamper` una serie di a a messaggi durante le operazioni di rotazione. In quasi tutti i casi negli script viene usato come standard il file di configurazione /etc/logrotate. Al solito per l’elenco completo delle opzioni si pu` fare e o riferimento alla pagina di manuale. Il comando deve essere lanciato specificando come argomento un file di configurazione che specifica le modalit` di rotazione. acccessibile con man logrotate. le opzioni specifiche per ciascun servizio vengono messe nella directory /etc/logrotate.5). Una direttiva particolare ` include che permette di includere altri file all’interno della confie gurazione.conf mentre ulteriori file di configurazione di singoli servizi sono mantenuti nella directory /etc/logrotate. Per risolvere questo problema esiste il programma logrotate che. riempiendo la partizione su cui risiede la directory /var/log/ in cui normalmente vengono memorizzati. notifiche. Bench´ sia possibile lanciare il comando a mano. La rotazione pu` essere specificata sia per intervalli temporali (con le direttive daily. sono una e delle caratteristiche pi` utili di un sistema unix-like in quanto vi sono registrati i messaggi u (errori. L’opzione -d permette di eseguire il comando in modalit` di debug (ed implica -v). gran parte delle distribuzioni invocano e logrotate fra le operazioni giornaliere eseguiti da crond. ed e-mail di avviso all’amministratore.d/. con tanto di eventuale compressione. 3.4 Il sistema di rotazione dei file di log I file di log.d/. quando il comando viene invocato viene controllato se la condizione ` soddisfatta e solo in e questo caso (a meno di non aver specificato l’opzione -f) la rotazione viene eseguita. Il contenuto della directory viene poi incluso dall’apposita direttiva presente in logrotate. inserisca in questa directory un opportuno file di configurazione per logrotate quando viene installato. 3.conf cos` che non ci ı sia necessit` di modificare quest’ultimo ogni volta che si installa un altro pacchetto. la cui produzione ` governata dal demone syslogd appena trattato.conf solo alcune opzioni generali. Infine si noti come le emergenze (ad esempio i messaggi di uscita di shutdown) vengano stampati su tutti i terminali attivi.3. etc. weekly o e monthly) che sulla base del superamento di una certa dimensione (con la direttiva size). 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. avvertimenti. a a parte quelli con alcuni caratteri o con certe estensioni che li identificano come copie. u e o in tal caso infatti vengono inclusi tutti i file in essa contenuti26 . di usare un suo file di configurazione con delle impostazioni personalizzate semplicemente scrivendolo in una directory comune. i file vengono ruotati la prima volta che il comando viene eseguito in un certo mese. effettua una rotazione settimanale.5: Le principali direttive usate nel file di configurazione di logrotate.we’ll rotate them here /var/log/wtmp { monthly create 0664 root utmp } /var/log/btmp { missingok monthly create 0664 root utmp rotate 1 } . legge tutti il file passato come parametro.rpmorig.rpmsaa ve.3. M e G). comprime le vecchie versioni dei file di log usando gzip. questi devono essere passati come lista separata da virgole. effettua la rotazione al superamento di una certa dimensione da parte del file di log (invece che su un periodo temporale).rpmnew. permette di definire una lista di estensioni e caratteri vietati nei nomi dei file da includere con la direttiva include. . Un esempio del contenuto di /etc/logrotate.disabled.d # no packages own wtmp or btmp -. se il file di log ` assente non d` errori. i commenti spiegano in e maniera molto chiara il significato delle varie opzioni.v. e a 121 rotate include create tabooext compress missingok Tabella 3.conf ` il seguente. o se trattasi di directory.swp.dpkg-old. . u effettua una rotazione mensile. crea un nuovo file di log vuoto immediatamente dopo aver eseguito la rotazione del precedente assegnandogli un insieme di permessi.dpkg-dist. I SERVIZI DI BASE Direttiva daily weekly monthly size Significato effettua una rotazione giornaliera. tutti i file presenti all’interno di questa che non abbiano nel nome una delle estensioni vietate (tramite la direttiva tabooext). . un file viene ruotato se ` passata e pi` di una settimana dall’ultima rotazione.dpkg-new. . . richiede che si specifichi la dimensione come parametro (supporta i suffissi k. di default questi sono . un proprietario ed un gruppo proprietario. . specifica il numero di copie (da passare come parametro) dei file di log che devono essere mantenute in una successione di rotazioni.3. che devono essere specificati come parametri. . Un carattere + indica di aggiungere la lista ai caratteri gi` esclusi. e ~. 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. . Questo significa che X Window ` in grado di operare allo stesso modo sia in locale. e interfacciandosi direttamente all’hardware grafico della macchina su cui si sta operando. 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 costituisce probabilmente la prima interfaccia grafica mai realizzata su un sistema operativo.4. E questa separazione che consente di definire a un protocollo di comunicazione (l’X protocol ).org/). 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. sia attraverso opportuni toolkit grafici che attraverso sistemi a finestre completi come Fresco (http://www. che rende l’intera interfaccia trasparente rispetto alla rete. ` che. L’interfaccia grafica X Window System nasce a met` degli anni ’80 con il progetto Athena a all’MIT. fra client e server. 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. gli eventuali errori verranno notificati via e-mail all’amministratore. e non ha nessuna caratteristica privilegiata. in particolare vedremo le caratteristiche principali del sistema X Window System (spesso chiamato per brevit` X11. con l’intento di fornire un ambiente grafico per i sistemi UNIX. sia in rete. sia attraverso l’uso diretto del framebuffer o dell’hardware video.122 CAPITOLO 3. dalla versione finale del protocollo).d. e che pu` essere tranquillamente sostituito da uno strato diverso. 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 ). 3.1 Introduzione a X Window System Bench´ in realt` esistano diverse alternative per la realizzazione di applicazioni in ambiente e a grafico. e di come gestirlo e configurarlo. e Il fatto che esistano delle alternative complete per l’uso dell’interfaccia grafica ci mette immediatamente di fronte ad una delle principali differenze che c’` fra un sistema unix-like come e GNU/Linux ed altri sistemi operativi: al contrario di altri sistemi come Windows o MacOS in un sistema GNU/Linux l’interfaccia grafica non fa parte del kernel. 3.fresco. a 3. L’architettura di X Window infatti definisce una relazione client-server. Si tenga presente per` che in questa architettura in genere client e server hanno posizione o invertita rispetto al solito. oltre a fornire alle usuali funzionalit` che permettono disegnare e a finestre ed altri elementi grafici su uno schermo. Poi si dice di leggere tutto il contenuto della directory /etc/logrotate. in questo caso sono dei client remoti (le . il sistema ` completamente trasparente rispetto e alla rete. inviando attraverso di essa le informazioni per disegnare la grafica di una applicazione su una macchina remota. Tutto il sistema grafico in sostanza non ` che un altro strato che viene posto sopra il kernel.4 L’X Window System In questa sezione tratteremo la configurazione dell’interfaccia grafica nei sistemi Unix. illustrata in fig. Infatti in genere ` il client che viene eseguito localmente per ine terrogare un server remoto che fornisce delle risposte. La caratteristica principale del sistema. ma viene eseguita dal kernel in user space come un qualunque altro programma.1 fra una applicazione ed il suo display. che a tutt’oggi lo distingue dalle pi` diffuse interfacce grafiche presenti u in altri sistemi operativi. e che pu` anche essere eliminato o o tutte le volte che non serve (ad esempio sui server). ` e molto probabile che XFree86 resti l’implementazione pi` diffusa ancora per poco. 3.3. A causa di un recente cambiamento di licenza che lo rende incompatibile con la GPL.2 La configurazione del server X Il primo passo per utilizzare l’interfaccia grafica su GNU/Linux ` configurare il server X sulla e propria macchina. creata appunto per questo progetto e poi utilizzata in seguito anche per molti altri. per cui nelle distribuzioni pi` recenti si trova e u al suo posto il file XF86Config-4.org/).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. il formato di questo e file ` stato modificato a partire dalla versione 4. L’X WINDOW SYSTEM 123 Figura 3. Infatti con la u conversione dell’X-Consortium. e varie accelerazioni grafiche) attraverso una architettura modulare. da consorzio di industrie a fondazione aperta. Il server X in genere cerca prima quest’ultimo e se non lo la cosiddetta licenza X11. In realt` a essendo un protocollo standardizzato il cui codice di riferimento ` sempre stato rilasciato con e licenza libera. a quella. 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. almeno per i nomi dei file.xfree86. che non essendo copyleft consente anche l’esistenza di versioni proprietarie. A partire dalla versione 4 il supporto delle varie schede ` stato modularizzato. 27 .org (si veda e a http://www. si ` ripartiti dall’ultima versione di XFree86 e con la licenza originale ed ` gi` stata rilasciata una prima versione del server X.4. Nel caso di GNU/Linux la versione pi` diffusa dell’X Window System ` XFree86. ed e il pacchetto che contiene il server ` uno solo. e noi faremo riferimento. La configurazione del server in XFree86 ` governata dal file XF86Config. disponibile u e su http://www. perch´ questo possa disegnare le finestre e ricevere i dati da tastiera e mouse e (oltre che dai client).27 ne esistono anche varie versioni.org/. il titolare dei diritti dell’implementazione originale di X Window. che fornisce anche numerose estensioni (come il rendering dei font truetype.x. che mantiene la precedente licenza e che ` gi` previsto essere il sostituto e a di XFree86 nelle nuove versioni delle principali distribuzioni.4. Per il momento per` la gran parte o delle distribuzioni continua ad usare la vecchia versione di XFree86. Noi faremo sempre riferimento a questa ultima e versione. . frequenza di refresh e profondit` di colore). tastiera. xf86cfg che opera ad interfaccia grafica e xf86config che opera linea di comando. scheda video e monitor. EndSection I nomi delle principali sezioni utilizzate comunemente sono riportati in tab. combinando una scheda video ed un monitor. l’elenco completo pu` essere trovato nella pagina di manuale accessibile al solito con man XF86Config-4. con una sintassi generica del tipo: Section "SectionName" SectionEntry . Le o sezioni hanno poi una loro gerarchia. ne deve essere specificata una per ogni scheda disponibile. Module InputDevice Device Monitor Modes Screen ServerLayout DRI Tabella 3. ne deve essere specificata una per ogni monitor disponibile. Contiene la descrizione di un dispositivo di input (mouse. di norma non viene utilizzato e valgono i valori di default delle stesse. u Configurare il server X significa allora creare un opportuno file /etc/X11/XF86Config-4 che lo metta in grado di utilizzare l’hardware.6. 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. Contiene le specifiche per il Direct Rendering Interface un’interfaccia diretta alle accelerazioni hardware delle schede grafiche. ecc. LA CONFIGURAZIONE DEI SERVIZI DI BASE trova ricorre al precedente. ed alcune di esse devono essere necessariamente specificate. Contiene le informazioni di configurazione di una scheda grafica. e che nelle versioni pi` recenti sono state inserite pure delle estensioni che permettono di “spalmare” u un desktop su pi` schermi. Contiene la descrizione di una modalit` video (corrisponde a specificare a risoluzione. Contiene le informazioni di descrizione di un monitor.. Indica i moduli aggiuntivi che devono essere caricati dinamicamente (e che forniscono estensioni come le accelerazioni 3D e il rendering dei font truetype). 3.) ne deve essere specificata una per singolo dispositivo. questi programmi. Tutte le distribuzioni mantengono i vari file di configurazione dell’X Window System in una directory separata. a Contiene la definizione di uno schermo. Indica le opzioni generali che controllano globalmente il comportamento del server. Infine si pu` generare uno scheletro del file direttamente con il comando X -configure. sotto /etc/X11. e cio` mouse. all’interno di queste sezioni dovranno poi essere specificate le opzioni ed i valori delle configurazioni (dipendenti dal tipo di sezione). Contiene la configurazione generale del server. Si tenga e presente che fin dall’inizio XFree86 ha sempre supportato la presenza di schermi multipli. una volta inseriti i dati dell’hardware. permettono di generare automaticamente il file di configurazione. tavoletta grafica. introdotta e dalla parola chiave Section e conclusa dalla parola chiave EndSection. tastiera. Nome Files ServerFlags Contenuto Indica i pathname di file o directory contenenti informazioni usate dal server come le directory dei font o i file con le descrizioni dei colori. o Il file ` diviso in varie sezioni ciascuna dotata di un suo nome che la identifica. Le informazioni necessarie alla configurazione del server X sono quelle che riguardano le varie componenti utilizzate dallo stesso. ma con il pacchetto XFree86 vengono forniti direttamente anche due programmi per la configurazione. Ogni distribuzione ha creato un suo programma dedicato.6: I nomi delle varie sezioni del file XF86Config-4.124 CAPITOLO 3. . 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. MHz. in cui si trovano i font usati dal server. separate da virgole. on/off. le parole chiave yes/no. Ciascuna sezione comprende una serie di direttive.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. o delle stringhe. off o false. anch’essi scritti direttamente. 28 . che devono essere espresse inserendole fra virgolette. in modo da diminuire lo spazio disco necessario all’installazione del server o consentire l’utilizzo di font ai cosiddetti dumb terminal non dotati di disco. Un singolo dispositivo di ingresso deve essere descritto in una sezione InputDevice. al solito per l’elenco completo si pu` fare riferimento alla pagina di manuale. e le relative directory verranno o u unite insieme. e ModulePath indica il pathname delle directory in cui verranno cercati i moduli binari che forniscono le estensioni del server. Le altre sezioni sono invece indipendenti.4. che u hanno un formato comune per tutte le sezioni e possono essere di tre tipi diversi: o dei valori numerici interi. mentre apponendo ad un numero uno dei suffissi Hz. indicando le principali direttive previste per ciascuna di esse. qualora non specificato viene utilizzato il valore di default che ` /usr/X11R6/lib/X11/rgb. 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. RgbPath indica il pathname del file contenente il database dei colori RGB. che vanno espresse su una singola riga. veniva utilizzato. La stringa che specifica quest’ultimo viene poi interpretata ed il suo contenuto viene classificato in altrettanti tipo di valore. Inoltre usando il suffisso No nello scrivere il nome di una opzione si specificher` per essa a direttamente un valore logico pari a No. il font server ` un servizio fornito dal programma xfs che permette di mantenere i font su una singola e macchina. kHz. proprie della sezione. i numeri (reali o interi. ecc. espressi direttamente col numero o con un prefisso 0x qualora li si scrivano in esadecimale. il resto verr` interpretato a come stringa (l’elenco completo dei tipi di valori ` comunque riportato nella pagina di manuae le). Un esempio tipico `: e FontPath "unix/:7100" che indica il fontserver sulla macchina locale. o dei valori numerici in virgola mobile. si potranno specificare delle frequenze.3. che comprende una sezione Device che descrive una scheda video ed una sezione Monitor che descrive il monitor ad essa collegato. La sezione o Files contiene la definizione di una serie di pathname che riguardano la posizione di file e directory utilizzate dal server. il primo dei quali ne specifica il nome ed il secondo il valore. o l’identificatore di un font server. questa richiede sempre due parametri di tipo stringa. Qualora non sia specificato nulla u u viene usata di default la directory /usr/X11R6/lib/modules/. secondo il formato visto per i parametri generici) verranno interpretati come tali. e distribuirli via rete ad altre. Le direttive possibili sono le seguenti: FontPath specifica una lista di directory. Inoltre per tutte le sezioni esiste la direttiva generica Options che specifica il valore di una opzione. mentre i dispositivi di uscita devono essere collegati in una sezione Screen. Si pu` usare la direttiva pi` volte. Tratteremo qui solo le principali sezioni. true/false esprimeranno invece dei valori logici. e non dipendono dalle altre. come per la direttiva FontPath si possono specificare pi` directory usando pi` istanze della direttiva. Queste sono introdotte da una parola chiave seguita da uno o pi` valori. La direttiva richiede o un pathname assoluto ad una directory. ecc.. che se viene impostata indica che il relativo dispositivo viene considerato come il mouse principale. che indica un nome cui fare riferimento al dispositivo nelle altre sezioni e Driver. LA CONFIGURAZIONE DEI SERVIZI DI BASE La sezione ServerFlags permette di impostare alcune opzioni generali relative al server. indica. o con l’uso di tavolette grafiche). nel caso di una tastiera. CoreKeyboard Device SendCoreEvents XkbLayout Protocol . Ogni sezione viene specificata nel formato: Section "InputDevice" Identifier "nome" Driver "dispositivo" Option ". cui in genere si usa un mouse USB da affiancare u al touchpad. de. it.. di valore booleano.) indica nel caso di un mouse. indica il file di dispositivo da utilizzare per accedere al relativo dispositivo. la disposizione dei tasti. In particolare Driver permette di indicare se il dispositivo in questione viene usato per il puntamento (con il valore mouse) o per l’immissione di dati (con il valore keyboard) facendo riferimento al caso pi` comune u di entrambe le tipologie.126 CAPITOLO 3. ma se ne possono specificare anche di pi`. 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. fr.. e corrisponde in genere al nome della relativa localizzazione (con valori come us. il modello (ad esempio pc105 per una tastiera da PC a 105 tasti). EndSection dove le direttive Identifier." . nel caso di una tastiera. e normalmente se ne hanno almeno due. la sezione Module ` usata per specificare quali e moduli di estensione del server devono essere caricate. La sezione InputDevice serve a specificare le caratteristiche di un singolo dispositivo di input. devono sempre essere specificate. 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). questa in genere prevede solo la direttiva Load seguita dal nome del modulo.. tolto il lib iniziale e l’estensione. che se viene impostata indica che il relativo dispositivo viene considerato come la tastiera principale. le principali delle quali sono: CorePointer di valore booleano. il protocollo utilizzato (i pi` comuni sono PS/2 u per i mouse ordinari e ImPS/2 per quelli dotati di rotellina). XkbModel indica. in caso di presenza di pi` tastiere (caso non molto comune) o u u di pi` mouse (caso comune invece con i portatili. questo ` lo stesso del file corrispondente che si deve trovare e all’interno del path indicato ModulePath. che ne specifica il tipo. essa contiene solo direttive di tipo Options. una per la tastiera e l’altra per il mouse. Le restanti direttive sono tutte da specificare nella forma di opzioni. indica la frequenza (o l’intervallo di frequenze) di sincronia orizzontale29 supportato dal monitor. 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). le principali sono: VendorName ModelName HorizSync stringa che identifica la marca del monitor. sono tuttavia specificate direttamente nella pagina di manuale di XF86Config-4. In genere non ` necessario e utilizzarla in quanto vengono riconosciuti come predefiniti una serie di modalit` video in standard VESA. e ne deve essere presente almeno una. buona parte delle quali sono specifiche del driver della scheda grafica utilizzato e sono descritte nella relativa pagina di manuale. Il resto della sezione prevede come nel caso precedente solo delle direttive Option. e o 29 . a da utilizzare in una successiva sezione Screen. Il formato generale della sezione ` del tipo: e Section "InputDevice" Identifier "nome" direttiva . 1240x1024. L’X WINDOW SYSTEM 127 La sezione Device serve a specificare le caratteristiche di una scheda grafica. e ne deve esistere almeno una (ma se ne possono avere diverse in caso di presenza di pi` schede grafiche). Questo valore viene usato dal server X per determinare se un modo video ` compatibile e con il monitor. espresso di default in Hz. e prevede le due direttive e obbligatorie Identifier e Driver.3. dove quest’ultima indica il nome del modulo associato al driver che gestisce la relativa scheda grafica.. ` una direttiva speciale da scriversi su pi` linee (chiuse da una direttiva e u EndMode) che permette di specificare una modalit` video cui viene dato il a nome passato come argomento. in quanto sbagliandoli ` possibile mandare fuori sincronia lo stesso con il risultato di non vedere pi` nulla. valide per tutti i driver. che si accede nella sezione 4 usando il nome del driver stesso (ad esempio per una scheda Matrox che si utilizza con il driver mga si potranno ottenere le informazioni con man mga o man 4 mga). Pu` essere indicato come singola lista di valori separati o da virgole come intervallo separato da un meno. stringa che identifica il modello del monitor. e u la frequenza di sincronia orizzontale ` la frequenza a cui il monitor pu` spostare il fascio che disegna una riga e o orizzontale.. 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. Il suo u formato ` identico a quello visto in precedenza per InputDevice. con nomi del tipo di 1024x768. La sezione Monitor serve ad indicare le caratteristiche di un monitor. Alcune opzioni generiche. Come per HorizSync pu` essere indicato sia come o singola lista di valori che come intervallo. ecc. 30 ` la frequenza con cui pu` essere ridisegnato l’intero schermo. e indica la frequenza (o l’intervallo di frequenze) di aggiornamento verticale30 supportato dal monitor. le restanti direttive servono a specificare le caratterio e stiche del monitor. EndSection dove come nei casi precedenti Identifier specifica una stringa identificativa del monitor (che pu` essere qualunque) ed ` obbligatoria.4. InputDevice "input device id" .128 CAPITOLO 3. ` 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--... ed ` obbligatoria come le due Device e Monitor che servono a specificare la scheda video ed il e monitor collegati allo schermo. Di nuovo ne deve essere presente almeno una.. che prendono come argomento l’identificatore utilizzato in una delle sezioni omonime. ed qualora si specifichino pi` modi. a . detto EDID. 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. diverse risoluzioni e diverse frequenze di aggiornamento a seconda delle caratteristiche della scheda video e del monitor. EndSection di nuovo la direttiva Identifier serve a fornire una stringa che identifica lo schermo in questione. Il formato generale di questa a sezione ` il seguente: e Section "Screen" Identifier "name" Device "device id" Monitor "monitor id" direttive . EndSubSection . 31 nel caso di Debian per poter utilizzare questo comandi occorrer` installare il pacchetto read-edid. e definisce le caratteristiche dello “schermo” che verr` utilizzato dal server X. questi vanno collegati fra loro oltre che con il cavo tramite una apposita sezione Screen che identifica l’insieme dei due... 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). nella forma generica: Section "ServerLayout" Identifier "nome" Screen "screen id" . LA CONFIGURAZIONE DEI SERVIZI DI BASE I monitor recenti supportano comunque un meccanismo di notifica alle applicazione di questi ed altri dati. SubSection "Display" voci .... Uno schermo infatti pu` essere utilizzato a diverse profondit` di o a colore..31 Una volta definite le schede video ed i monitor presenti. 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. u ` E inoltre obbligatoria la presenza di almeno una sottosezione Display che specifichi la profondit` di colore (tramite la direttiva Depth.. 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. che evita di doversi andare a cercare i rispettivi valori su una qualche oscura pagina del manuale (sempre che si siano scomodati a scriverceli). in assenza di uno . ad esempio un terminale da cui eseguire gli altri comandi. Per a questo motivo in genere si lancia sempre per ultimo un window manager o un session manager (vedi sez. Per questo usualmente non si specifica nessun programma. e quella che prevede direttamente il login dall’ambiente grafico. quella che prevede a l’avvio del server X e di tutto l’ambiente grafico da console. che non sarebbero in grado di sopportare il carico di tutta l’interfaccia grafica. 3. sfruttando e la trasparenza sulla rete del protocollo X11. a e ` xinit.4.4).4. usando l’identificatore specificato nelle omonime sezioni. terminando il tutto solo alla fine di questo. il programma xterm ` probabilmente il pi` semplice dei programmi ad interfaccia grafica. E quest’ultimo che avvia il server X e poi esegue un eventuale programma client passato come argomento.xinitrc vengono eseo guiti uno dopo l’altro.xinitrc e lo esegue come se fosse uno script di shell. Questo consente di presentare anche su macchine remote.. tranne l’ultimo alla cui uscita terminer` anche la sessione grafica. e ed riutilizzare macchine dotate anche di scarse risorse hardware. chiamando al suo interno i programmi che si intendono lanciare. e questo in realt` non ` altro che una interfaccia semplificata per chiamare un altro programma. mentre Screen e InputDevice servono a referenziare quali schermi e dispositivi di input inserire nel layout. In questo modo ` possibile centralizzare le applicazioni grafiche su un unico server su cui esse saranno eseguite. poich´ in tal caso xinit cerca se e nella home dell’utente esiste un file . L’X WINDOW SYSTEM opzioni . Un vero login manager deve per` essere in grado di fare anche qualcosa di pi`. EndSection 129 di nuovo Identifier indica una stringa di identificazione. 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. lancerebbe semplicemente xterm..xinitrc per inizializzare il proprio ambiente grafico. 32 . integrandosi con la distribuzione in modo da utilizzare gli eventuali window manager o session manager scelti come default. e gestire o u cio` la stessa procedura di autenticazione e di avvio di una sessione pure da remoto. Come accennato usualmente invece di usare direttamente xinit si lancia la sessione usando startx. l’XDMCP (X Display Manager Control Protocol ).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. Nel caso dell’avvio da console il programma utilizzato per lanciare una sessione ` startx.4. attraverso il supporto di un apposito protocollo. solo per il disegno delle finestre attraverso l’installazione del solo X server.3 L’avvio del server Le modalit` per attivare una sessione grafica sono sostanzialmente due. 3.3. che viene lanciato direttamente nella procedura di avvio (tramite gli opportuni script) insieme al programma di gestione del login. per cui se si vuole che vengano eseguiti in maniera concorrente occorrer` a lanciarli in background.. e si limita e u semplicemente a riprodurre dentro una finestra un terminale del tutto analogo a quello che si trova sulla console.xinitrc dell’utente. Questo consente di utilizzare il contenuto di . In questo per` occorre considerare che i programmi indicati in . Altrimenti il secondo. la stessa finestra di login. 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. quest’ultimo infatti permette di definire opportunamente i parametri necessari all’esecuzione del secondo. All’uscita del suddetto programma xinit si incarica anche di terminare il server X. mentre la configurazione ` effettuata tramite le delle opportune risorse (la trattazione di queste ultime ` e e in sez. e ne controlla vari aspetti come il colore delle finestre. Il grande vantaggio di entrambi ` che. attraverso quelle che vengono chiamate risorse. i relativi campi identificano un possibile valore (o una ulteriore risorsa). Entrambi offrono una grafica molto pi` u accattivante di xdm ed un sistema di configurazione molto pi` avanzato (e semplificato). Bench´ si sia trattato pi` in dettaglio xdm. quella distribuita direttamente con l’implementazione di riferimento dell’X-server. Il e programma ha una interfaccia molto spartana. con e un certo nome. 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. I file . ciascuna struttura viene associate al singolo programma.conf per gdm e /etc/kde3/kdm/kdmrc per kdm). ecc.4) che vengono specificate nel file di configurazione /etc/X11/xdm/xdm-config. che tipicamente usa il file . u Infatti bench´ entrambi non necessitino della presenza dei rispettivi ambienti desktop e pose sano essere usati indipendentemente. Il valore di ciascuna risorsa ` specificato da una stringa. il valore ` associato ad un certo campo della risorsa stessa. che permette di attivare e controllare le loro funzionalit` senza dover modificare a mano il file di configurazione.xinit e . dello sfondo.4.xsession nella home directory dell’utente come analogo di . 33 . 3.. ma ` ampiamente configurabile in quanto il suo e comportamento viene governato da una serie di script di shell che eseguono i vari compiti. vengono solitamente installati in corrispondenza a questi. 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. e se questo ha successo il successivo Xsession. il titolo della finestra. Il programma per` onora anche una serie di opzioni. ma queste ultime sono organizzate e in una gerarchia ad albero33 in cui ogni nodo ` identificato dal nome della risorsa. 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. a 3. nelle distribuzioni GNU/Linux di oggigiorno i login manager pi` utilizzati sono altri.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. ` possibile e controllarli e modificarne l’impostazione con un apposito programma di configurazione ad interfaccia grafica (eseguibile anche al loro interno). o che assumono i valori descritti nell’omonima pagina di manuale. una volta terminato con successo il login xdm esegue lo script Xstartup (situato in /etc/X11/xdm) per inizializzare la sessione. dato il suo legame diretto con il sistema di X e u Window. in cui i singoli e nodi della gerarchia sono separati da un “. e come nel caso di startx quando il programma che gestisce la sessione termina. Come accennato il funzionamento di xdm prevede l’uso di una serie di script e programmi.130 CAPITOLO 3. che a loro volta ı possono contenere altre strutture con altri dati. il programma che implementa il login manager ` xdm. Entrambi contengono cio` i programmi da lanciare per gestire la sessione e grafica.” 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.xsession hanno lo stesso scopo e significato. da indicare nel file /etc/X11/xdm/xdm. per cui viene naturale accedere all’insieme di strutture e sottostrutture attraverso una gerarchia ad albero. 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.xinit per lanciare la sessione grafica dell’utente. e controllano il comportamento del programma. pur essendo controllati da un file di configurazione testuae le (rispettivamente /etc/gdm/gdm.4. ecc. ciascuno nella sua finestra.. in cui si modificano le impostazioni dei colori di sfondo e primo piano. 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. nel quale specificare i valori che all’avvio del server andranno a soprassedere quelli di default. ` appunto quello della selezione di u e quella che viene messa a fuoco..4. Un compito fondamentale infatti. E il window manager che si cura di tutti questi compiti. 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. cui segue la stringa che assegna il valore. Se le risorse permettono di controllare i vari parametri interni delle singole applicazioni. devono essere invece gestiti a parte e non sono compito dei singoli programmi. seguendo la solita filosofia per cui ognuno si cura di eseguire un suo compito ben preciso.3. quello che contraddistingue una interfaccia grafica ` la capacit` di poter eseguire vari programmi in e a contemporanea. che ` un po’ l’equivalente del processo in foreground e visto in sez.4. quella cio` cui verranno inviati tutti gli eventi in ingresso (ad e esempio quello che si scrive sulla tastiera).Background: DarkSlateGray . il loro spostamento. a ` nascondere. 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 specifica la geometria iniziale ecc.34 Infine si tenga presente che il carattere “!” serve ad introdurre una riga di commento. i singoli utenti per` possono cambiare a piacere questi valori tramite l’uso del file . Come per` ci si potr` rendere conto ad esempio o a lanciando xinit a mano con una serie di programmi qualsiasi. del disegno degli elementi grafici di contorno. emacs*Background: DarkSlateGray emacs*Foreground: Wheat emacs*pointerColor: LightSteelBlue emacs*cursorColor: LightSteelBlue emacs*bitmapIcon: on !emacs*font: fixed emacs*font: -misc-fixed-*-*-*-*-15-*-75-75-*-*-iso8859-* emacs. Senza un window manager infatti si avrebbe la grafica ma non la possibilit` di spostare. 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). Si noti come la sintassi preveda una riga in cui si specifica il nome della risorsa terminato da “:”. la ridimensionamento e la selezione delle finestre. quando si hanno pi` finestre da gestire. e della gestione il mouse per gestire lo spostamento. 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. questi ultimi... Per usare con profitto una sessione grafica tutto quello che serve ` un window manager.Xresources nella propria o home directory.3. ridimensionare le finestre. Il posizionamento delle stesse.geometry: 80x28 emacs*BorderColor: DarkSlateGray emacs*fringe. 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. 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. Un esempio di un file di configurazione delle risorse pu` o essere il seguente: . o di passare dall’una all’altra. 1. 34 . si limitano solo a disegnare il contenuto delle rispettive finestre. il passaggio dall’una all’altra. Le interfacce grafiche moderne vanno per` al di l` della semplice gestione delle finestre. ICEwm. In generale quello che succede ` che l’accesso alla e stampante ` regolato attraverso un opportuno demone. le stampe e e vengono richieste inviando i file da stampare al suddetto demone. che permette di ottenere i risultati voluti. tuttora in ampio uso da parte di u coloro che sono abituati alla loro interfaccia e non necessitano di funzionalit` pi` avanzate. una porta USB. 3. 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. 3. ma si scontra con una e serie di problemi che lo rendono altamente sconsigliabile. come accade spesso.5 Il sistema di stampa Tratteremo in questa sezione la configurazione delle stampanti sotto GNU/Linux. Per questo in genere le stampanti moderne prevedono un loro linguaggio di stampa come il PostScript (alcune ne supportano anche pi` di uno). Il problema pi` importante ` invece quello relativo al contenuto del file da stampare. ma viene gestito attraverso un opportuno sistema di stampa che si incarica di risolvere questi problemi. ecc. ecc. Per questo un window manager non basta. Questo ` senz’altro possibile. Questo significa che u anche un semplice file di testo debba essere opportunamente trattato prima di essere inviato alla stampante. sono a u Window Maker. u In ciascuno di questi casi il file andrebbe inviato sul relativo dispositivo (nel caso pi` comune. /dev/lp0). questo dovr` essere opportunamente a tradotto. un tempo u e quando si stampavano solo file di testo senza formattazioni il problema non c’era. Inoltre se. u di stampante su porta parallela. oggi per` si o stampano file con contenuti grafici e con formattazioni complesse e font diversi.5. il primo ` che non esiste un dispositivo e univoco che identifichi una stampante. basterebbe identificare il die spositivo specifico e identificarlo con un link simbolico (un po’ come si fa per il CDROM). ` 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. questa pu` essere infatti agganciata ai dispositivi pi` vari o u (e molte stampanti ne supportano pi` di uno). che ` l’unico che ci scrive. in cui si possono passare elementi o dati da una finestra ad un altra (e cio` da una applicazione ad un e altra). il passo successivo ` allora quello dell’uso di un e desktop environment. Per questa serie di motivi in genere il dispositivo della stampante non ` mai accessibile e direttamente ai singoli utenti. come la parallela. che si incarica di eseguire .132 CAPITOLO 3. cio` di una infrastruttura (completa di meccanismi di intercomunicazione) e che definisca non solo la gestione delle finestre. coi relativi dati che si mescolano fra di loro dando luogo risultati tutt’altro che piacevoli nella stampa finale. I pi` comuni. 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. la seriale. LA CONFIGURAZIONE DEI SERVIZI DI BASE applicazioni o avere informazioni sul sistema. Tutto questo non costituirebbe di per s´ un grosso problema. Il terzo problema ` quello di essere in presenza di un sistema operativo multiutente e mule titasking. il che comporta che con l’accesso diretto si possono avere pi` processi che scrivono u in contemporanea sul dispositivo della stampante.1 Introduzione generale Mantenendo la filosofia progettuale di Unix per cui tutto ` un file. per o a definire una infrastruttura che consenta operazioni come il cosiddetto drag and drop. blackbox. i programmi generano le stampe in un formato (principalmente il PostScript) e la stampante non lo capisce. a 3. Lo stesso concetto di e stampa remota pu` essere realizzato in maniera alternativa usando una coda locale ed usando o direttamente il demone di stampa per inviare i file ad un altro demone remoto. 3.4). facendo riferimento al tutto con il nome del protocollo LPD (acronimo di Line Printer Daemon) che ` pure standardizzato nell’RFC 1179. o con diversi privilegi o priorit`. IL SISTEMA DI STAMPA 133 tutte le operazioni necessarie (comprese le eventuali conversioni di formato) e di garantire un accesso corretto senza sovrapposizioni. 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.5.2. Noi faremo riferimento solo a LPRng. ignorando completamente e l’implementazione originale di BSD. Inoltre con lo schema di fig. sviluppata indipendentemente che ha la stessa interfaccia e le stesse funzionalit` ma supporta anche molte estensioni (in Debian ` fornita dal pacchetto a e lprng). LPRng. ad esempio diventa possibile inviare la stampa su una coda remota se ` previsto un opportuno meccanismo di comunicazione. Il vantaggio di questo sistema ` che la gestione della coda pu` essere esguita indipendene o temente dalla gestione della stampante.5. questo consente ad esempio di utilizzare code diverse (con filtri diversi) a seconda del tipo di file che si vuole stampare.3. e .5. che uno dei sistemi di stampa di uso pi` comune nelle u distribuzioni GNU/Linux (l’altro ` CUPS che tratteremo in sez.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. e Infine l’uso di questa architettura permette anche di utilizzare pi` code di stampa per la u stessa stampante.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. ma immesse. Figura 3. 3.2: Schema generico del funzionamento del sistema di stampa. E presente un porting anche per GNU/Linux. (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. e tutt’ora e ` distribuito insieme a questo sistema operativo. 3. Una delle caratteristiche fondamentali dei sistemi di stampa in ambiente unix-like ` quella e delle code. Per questo esso ` in genere sostituito da una e e implementazione alternativa. tramite un e opportuno comando. Si pu` usare l’opzione -a per fare eseguire o le stampe sono spesso chiamate. se definito. Tabella 3. L’opzione principale di lpr ` -P che permette di indicare su quale coda di stampa inviare e il file da stampare. 3. LPDEST. e richiede l’invio di una email all’indirizzo passato come parametro qualora la stampa fallisca. Opzione -# -C -J -m -U Significato specifica il numero di copie da stampare. 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). 35 . job.134 CAPITOLO 3. a meno di non usare l’opzione -P per selezionare una coda specifica. che ` la prima definita e in /etc/printcap. da passare come parametro. identificata da una lettera maiuscola a da “A” (pi` bassa) a “Z” (pi` alta). LA CONFIGURAZIONE DEI SERVIZI DI BASE Come il nome stesso suggerisce. da passare come argomento. 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. il valore di una delle variabili PRINTER. 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. per l’elenco completo al solito si faccia riferimento alla pagina di manuale. Se invocato senza argomenti esso stampa la lista delle stampe presenti.5. seguendo la nomenclatura inglese. (vedi sez. che permette di esaminare e lo stato della coda. specifica la priorit` della stampa.7. oppure la stampante di default. a Di default il comando esegue la ricerca delle stampe sulla coda di default. ne tratteremo la configurazione in sez.7: Le principali opzioni del comando lpr. 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. NPRINTER o NGPRINTER. il primo di questi ` lpq. u u associa alla stampa il nome passato come parametro. Per richiedere la stampa di un file si deve utilizzare il comando lpr. che prende come argomenti i file da stampare (se non si specifica nulla viene usato lo standard input). 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. permette di specificare (come parametro) l’utente per conto del quale eseguire la stampa (utilizzabile solo dall’amministratore). 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. in modo che questo venga stampato nell’intestazione (quando questa ` prevista). 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. le altre opzioni principali sono riportate in tab. 3.3.800 Rank Owner/ID Class Job Files done root@parker+648 A 648 /root/iptables epson is ready and printing root: active [job 543 localhost] /root/iptables 3072 bytes Size Time 2748 16:48:21 altrimenti si pu` specificare come argomento il numero identificativo della stampa (quello riporo tato nella colonna Job) ed il comando riporter` solo le informazioni ad essa relative.5. Per la gestione delle stampe sono disponibili una serie di comandi per controllare lo stato della coda ed eseguirvi sopra delle operazioni. 3. se non la si specifica viene usato. il pacchetto originale del demone di e stampa di BSD non supporta questa opzione. Una volta creata una stampa. per le altre opzioni e per una descrizione dettagliata si pu` fare o riferimento alla pagina di manuale.3. Se non si specificano argomenti il programma si porta su una linea di comando interna.3).5.8. IL SISTEMA DI STAMPA 135 la ricerca su tutte le code. L’uso di lprm serve a richiedere a lpd la cancellazione delle stampe selezionate. Il programma prende come argomenti un comando.36 mentre se non si specifica nulla viene selezionata la prima che pu` essere rimossa. se usato dall’amministratore. da cui questi possono essere specificati. Chiude la lista dei programmi ausiliari lpc. e permette perci` di trasformare una qualunque stampante presente o sulla propria macchina in una stampante di rete. 36 . Entrambe le forme supportano l’utilizzo dei caratteri jolly del filename globbing (vedi sez. seguito da eventuali parametri per lo stesso. 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). o del sistema. questa ` una caratteristica della versione di lprm del pacchetto lpr-ng. al suo posto invece si deve usare semplicemente l’argomento “-”. Il primo comando ` help che stampa la lista di tutti quelli e disponibili. con l’opzione -U si pu` richiedere (se si ` root) di operare a nome di un altro o e utente.5. L’elenco dei principali comandi ` riportato in tab.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. 3.1. Si pu` invece o o bloccare l’immissione di stampe su una coda con disable e riabilitarla con enable. 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. L’uso della parola chiave all seleziona tutte le stampe presenti. Nel nostro caso esamineremo la configurazione soffermandoci specificamente sul caso particolare di LPRng. 2. 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). Si pu` fermare la stampa con l’uso del comando stop e farla ripartire con start. 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. Per le altre opzioni ed i dettagli di funzionamento del programma si faccia riferimento alla pagina di manuale. che tramite il nome dell’utente ad esse associato. che seleziona tutte le stampe di un utente. al solito l’elenco completo ed i dettagli sono nella e pagina di manuale. Con status si ha la stampa dello stato della coda e relativa stampante associata.4).800 Rank Owner/ID Class Job Files epson is ready no entries Size Time 3. che serve per controllare lo stato del sistema di stampa. ma un utente potr` rimuovere solo quelle per i quali ha il permesso (per la gestione dei permessi si a veda sez. Pertanto la configurazione della stampante su una macchina che usa questo sistema consiste nel configurare opportunamente lpd. in cui ` prevista la presenza di una serie di e file di configurazione per i vari compiti eseguiti dal demone. la si potr` eliminare dalla coda con il comando lprm. 3. 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.5. esce dal programma. 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. Il file ` composto da una serie di blocchi. abilita sia l’immissione nella coda che la stampa. prende come argomento il nome della coda o all per indicare tutte le code. prende come argomento il nome della coda o all per indicare tutte le code. Tutti gli altri campi. ` utilizzato principalmente quando un demoe ne termina lasciando dei job sulla coda per riavviarlo. nel qual caso si usa semplicemente e la presenza del rispettivo identificativo. uno per ciascuna e coda che si intende utilizzare. sblocca la sospensione della stampa per una coda o una stampa specifica. seguito da una assegnazione con un “=” se il suo valore ` una stringa o con un “#” se e il valore ` numerico. sospende automaticamente tutte le nuove stampe. ciascun campo inizia sempre per un identificativo di due caratteri. sospende la stampa (su una stampante o per una singola stampa). che come il nome fa supporre. cio` la directory su cui verranno appoggiati temporaneamente i file da stampare. Tabella 3. l’identificativo della stampa e la coda di destinazione. ma ` meglio farlo per compatibilit`.8: I principali comandi di lpc. 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 “|”. che vengono accodate ma non stampate. prende come argomento il nome della coda o all per indicare tutte le code. avvia una stampante.136 Comando disable down CAPITOLO 3. prende come argomento il nome della coda o all per indicare tutte le code. prende come argomento il nome della coda seguito dalla lista degli identificativi delle stampe. prende come argomento il nome della coda o all per indicare tutte le code. abilita l’immissione di nuove stampe su una coda di stampa. a e e a . prende come argomenti la coda di origine. e se la stampante ` locale deve essere specificato il campo lp che indica quale dispositivo usare. enable exit hold holdall move release start status stop topq up Il primo file di configurazione. Il primo campo indica il nome della coda di stampa.37 si tenga conto che l’ultimo campo deve essere anch’esso terminato col carattere “:”. LA CONFIGURAZIONE DEI SERVIZI DI BASE Significato disabilita l’immissione di stampe su una coda di stampa. ` /etc/printcap. usato da tutti i demoni di stampa in stile BSD. disabilita sia l’immissione di nuove stampe in coda che la stampa di quelle presenti. prende come argomento il nome della stampante ed eventualmente l’identificatore del job. sposta una stampa da una coda ad un’altra. che controllano le caratteristiche della coda e della stampante associata. sposta le stampe selezionate in cima alla coda di stampa. un blocco pu` essere scritto su pi` righe terminando ciascuna di esse con la barra o u rovescia “\” come si fa per la shell. Ciascun blocco ` composto da una serie di campi separati dal e carattere “:”. riporta lo stato di una coda e relativa stampante. un terzo tipo di campi ha valore logico. possono essere specificati in ordine qualsiasi. Al solito righe vuote e tutto quello che segue il carattere # viene ignorato. Di questi campi ` fondamentale specificare sempre sd. blocca ogni ulteriore stampa dopo il completamento della stampa corrente. prende come argomento il nome della coda o all per indicare tutte le code. prende come argomento il nome della coda o all per indicare tutte le code. e Il file contiene la definizione delle code di stampa con la assegnazione delle stampanti (e degli eventuali filtri) ad esse associate. indica la e spool directory. prende come argomento il nome della coda ed eventualmente l’identificatore della stampa. 9: I principali campi di /etc/printcap. account file.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. da specificare in byte come valore numerico. accessibile con man lpd. page width. oltre alle modalit` previste per quest’ultimo. page lenght.conf. anche .9. ` quello che permette le conversioni e di formato. prende come valore un pathname. da specificare come valore numerico. lunghezza della pagina in righe. larghezza della pagina in caratteri. file su cui viene registrato il rendiconto delle pagine stampate. da specificare come stringa. prende come valore il relativo o pathname. 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. o Campo if Significato input filter. nome della coda di stampa su una macchina remota. in /etc/lprng. file su cui vengono registrati tutti gli errori del sistema. sopprime la stampa delle intestazioni. se presente. remote printer. file di dispositivo su cui ` situata la stampante (o pipe cui e pu` essere inviato il file da stampare). 3. remote machine. al solito per l’elenco completo ed i dettagli si pu` fare riferimento alla pagina di manuale. log file. contiene la configurazione generale del demone. Questa ` la pi` grossa differenza con il sistema di stampa di BSD classico. da specificare come valore numerico. Si pu` usare questo file per specificare valori di default validi in generale per i parametri di o /etc/printcap. e l’assegnazione. Al solito si rimanda alla pagina di manuale. I parametri hanno gli stessi nomi usati in /etc/printcap. prende come valore un pathname. Il secondo file di configurazione di lpd ` lpd.5. ma dato che tutti i valori sono ad un default corretto di norma questo non deve essere modificato. I principali campi del file sono riportati in tab. insieme a tutti gli altri file del sistema. lpd. dimensione massima della pagina da stampare. nome della macchina remota cui inviare le stampe. spool directory. Il primo file. suppress header. line printer. 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.lpd (alternativamente viene usato. mentre con la direttiva include si possono includere altri file.conf. da specificare come stringa contentente l’hostname o l’indirizzo IP (in notazione dotted decimal). per i dettagli e l’elenco completo delle direttive. indica il filtro da applicare a tutti i file immessi sulla coda prima di inviarli alla stampante. nome della directory dove vengono mantenuti i file da stampare presenti nella coda. Tabella 3. questo infatti e u utilizza semplicemente il file /etc/hosts. prevede anche quella di utilizzare il carattere @ per identificare a un valore logico. prende come valore il pathname al programma da usare come filtro. ` un valroe e logico. usualmente mantenuti. 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 “:”.perms che viene utilizzato per il controllo degli e accessi. che deve leggere i dati dallo standard input e riemettere il risultato del filtraggio sullo standard output. con printcap_path si indica la posizione di default del file printcap. 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. utente da cui proviene la richiesta di accesso.11: Principali chiavi per le restrizioni di accesso in lpd. se si deve usare quest’ultimo carattere in una configurazione lo si deve pertanto proteggere con una barra inversa “\”. che permette di classificare il tipo di richiesta di accesso.perms. il controllo dei permessi viene fatto usando un insieme di chiavi il cui valore viene confrontato con quanto specificato nel file. . la richiesta proviene dalla stessa macchina da cui ` stato inserito la e stampa (definita per le operazioni su stampe esistenti). porta da cui viene effettuata la connessione (indicata alternativamente come PORT). la richiesta proviene dallo stesso utente cui appartiene la stampa (definita per le operazioni su stampe esistenti). i cui valori p[ossibili.138 CAPITOLO 3. 3. richiesta di elencazione delle stampe tramite lpq. Valore REMOTEHOST REMOTEPORT REMOTEUSER SERVER LPC PRINTER USER HOST SAMEUSER SAMEHOST FORWARD Significato lista degli IP da cui accettare connessioni remote (indicato alternativamente come REMOTEIP). richiesta di controllo remoto tramite lpc. come il nome rende evidente.10: Valori del campo SERVICE in lpd. Valore P R C M Q S U X Significato capacit` di inviare alla stampante il contenuto della coda.10.valore]* ]* REJECT [[not] chiave = valore[. u e quando non la si specifica si intende applicare la condizione seguente a qualunque tipo di accesso.equiv) per indicare le macchine da cui ` consentito collegarsi per stampare da remoto. LA CONFIGURAZIONE DEI SERVIZI DI BASE host. l’uso della direttiva DEFAULT serve a stabilre cosa succede quando non sono state specificate condizioni. richiesta di rimozione di una stampa tramite lprm. Tabella 3. e mentre con LPRng nessuno di questi file viene utilizzato. La chiave pi` importante ` SERVICE. utente cui appartiene la stampa richiesta (definita per le operazioni su stampe esistenti). operazione amministrativa di un utente. u Le direttive REJECT e ACCEPT specificano.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). Al solito righe vuote e tutto quello che segue un “#” viene ignorato. se accettare o meno un certo accesso sulla base della condizione espressa di seguito. Il file contiene una serie di direttive tutte nella forma: ACCEPT [[not] chiave = valore[. equivalente a NOT SAMEHOST Tabella 3. richiesta dello stato dello spool di stampa con lpc. 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. connessione remota. macchina da cui ` stato inserito la stampa richiesta (definita per le e operazioni su stampe esistenti).perms. e o u relativo significato sono riportati in tab. questa pu` prendere uno o pi` dei valori identificata da una lettera. a richiesta di lpr da un host remoto. vera quando la richiesta ` locale. Il formato del file ` simile a quello del file di e 38 la maggior parte sono una serie di direttive elementari nella forma: configurazione di Apache.perms. Il servizio ` fornito da un demone. 38 il server web pi` diffuso. Il file esprime sempre un elenco di condizioni.conf. pu` essere eseguita o direttamente tramite un browser qualunque. Dopo di che viene consentito. 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.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). cupsd. che vengono controllate sequenzialmente. come la creazione il controllo e la rimozione di stampe e code di stampa o la configurazione delle stampanti. per un elenco dettagliato si pu` fare o riferimento alla pagina di manuale accessibile con man lpd. 3. u . solo a root di controllare il demone con lpc in maniera completa. che baster` puntare sulla porta 631 della macchina a da amministrare. Un esempio di lpd. e il valore viene specificato di e seguito separato da uno spazio. Questo ` il file configura il servizio nel e suo insieme. mentre per chiunque altro viene consentito (con la direttiva LPC) di utilizzare solo i comandi in essa elencati. e e cupsd. che poi saranno confrontati con le condizioni indicate all’interno di lpd.3. e questa resta la modalit` principale. con le regole per il servizio “C”. 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. Si elimina poi possibilit` di connettersi da a qualunque altra macchina che non sia quella locale. che di norma viene installato in /etc/cups. quando una di queste viene verificata gli ulteriori controlli vengono evitati. 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. 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.perms. In tab. code e stampe avviene attraverso l’interfaccia che il servizio mette a disposizione. anche se ` possibile usare degli opportuni a e comandi di shell per eseguire gli stessi compiti. ` il seguente: e REJECT NOT SERVER ACCEPT SERVICE=C SERVER REMOTEUSER=root ACCEPT SERVICE=C LPC=lpd. o in maniera generica all’amministratore. come dicevamo infatti la gestione di stampanti. che tratteremo in sez. ??. che ` controllato da un file di configurazione. NomeDirettiva valore dove il nome della direttiva ` composto da normali caratteri.status.5.11 si sono riportate le principali chiavi ed il relativo significato. 3. IL SISTEMA DI STAMPA 139 Tutte le chiavi partono con un valore nullo. 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. acronimo di Internet Printing Protocol.5. estratto dalla versione installata su una Debian Sid.perms. al solito righe vuote o inizianti per un “#” vengono ignorate.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. Oltre alle direttive appena illustrate. 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. ServerRoot TempDir User MaxCopies MaxJobs MaxJobsPerUser In tab. indirizzo di broacast cui inviare le richieste di riconoscimento. la directory radice per i documenti HTTP (come la documentazione) che vengono messi a disposizione attraverso l’interfaccia.12 sono riportate le pi` importanti direttive elementari di /etc/cups/cupsd. il file su cui vengono registrati gli errori. il default ` 0 e significa nessun limite. numero massimo di copie che un utente pu` richiedere. gruppo per conto del quale viene eseguito cupsd (di default lpadmin). numero massimo di stampe in coda.12: Principali direttive per il file /etc/cups/cupsd. di default ` /etc/cups. e utente per conto del quale viene eseguito cupsd (di default lp). la directory dove sono mantenuti i dati di CUPS. 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. del tipo: <Location /percorso> . livello dei messaggi da parte del demone. e la directory in cui inserire i file temporanei. permette di includere un altro file nella configurazione. 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.conf prevede la presenza di direttive con una sintassi pi` complessa. 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. e Tabella 3. 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). in sostanza lo spool di stampa (di default ` /var/spool/cups/tmp). LA CONFIGURAZIONE DEI SERVIZI DI BASE Con la direttiva Port si pu` specificare la porta su cui il servizio si pone in ascolto. indirizzo o rete da cui accettare le richieste di riconoscimento. richiede come valore il nome del file o la parola chiave syslog che invia le informazioni all’omonimo servizio.conf. il set di caratteri di default. 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. 3.cups. ma con le direttive BrowseAllow e BrowseDeny si possono indicare quali sono le macchine (o le reti) le cui richieste vengono accettate o rifiutate. il file su cui vengono registrati i dati sulle pagine stampata. e numero massimo di stampe per utente. specifica la porta su cui si pone in ascolto il demone cupsd (il default ` 631). abilita o disabilita il riconoscimento automatico delle stampanti presenti (prende i valori on o off). che usano la sintassi elementare in cui si esprime la corrispondenza di un valore ad una parola chiave. il default ` 0 e significa nessun o e limite. 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. il default ` 0 e significa nessun limite. richiede come valore il nome del file o la parola chiave syslog che invia le informazioni all’omonimo servizio.conf.140 CAPITOLO 3. cupsd. specifica la directory radice per il demone cupsd. indirizzo o rete da cui non accettare le richieste di riconoscimento. ed hanno una forma diversa. u per l’elenco completo con una descrizione sommaria si pu` fare riferimento alla pagina di mao nuale. richiede come valore il nome del file o la parola chiave syslog che invia le informazioni all’omonimo servizio. Normalmente tutte le richieste vengono accettate. Queste direttive sono in genere specificate in coda al file.org/. per l’elenco completo si pu` fare riferimento alla documentazione in o linea di CUPS. Tabella 3.13. ma che sono utilizzabili solo all’interno di una collocazione. prende come valori: Anonymous che disabilita l’autenticazione. Percorso / /admin /classes /classes/name /jobs /printers /printers/name Descrizione Accesso a tutte le operazioni. abilita la cifrature della connessione. System che inoltre richiede che l’utente appartenga al gruppo sys (o a quello specificato con la direttiva SystemGroup).14: Le direttive di accesso usate in una collocazione.2. Accesso alle operazioni sulle classi. 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. Accesso alle operazioni sulle stampanti. che definisce la politica di accesso: se l’accesso ` consentito e . 3. IfRequested. ed espressa appunto con dei “percorsi” a partire da una radice “/” avendo accesso alla quale si diventa in grado di compiere qualunque operazione. nega l’accesso. Group che richiede che l’utente appartenga al gruppo definito dalla direttiva AuthGroupName. Accesso operazioni amministrative (creazione.it o .. prende come valori: Never. prende come valore un numero IP di una singola macchina o di una rete (in notazione CIDR.md5. Required il cui significato ` autoesplicativo. AuthClass AuthType Allow Deny Encryption Una collocazione prevede sempre la presenza di una direttiva Order (posta per chiarezza come prima direttiva al suo interno). prende come valori: None che non effettua a nessuna autenticazione. Accesso alle operazioni sulla stampante name. Specificando un percorso a partire da detta radice si possono definire le propriet` di accesso a per insiemi sempre pi` ristretti di operazioni.Deny in cui si accettano tutte le richieste eccetto quelle negate da un direttiva Deny e Deny. IL SISTEMA DI STAMPA DirettivaAccesso1 valore1 DirettivaAccesso2 valore2 . definisce le modalit` di autenticazione. I principali percorsi utilizzabili in una collocazione u sono illustrati in tab.Allow in cui si accettano solo le richieste consentite con una direttiva Allow. User che richiede utente e password. </Location> 141 Una direttiva Location viene utilizzata per identificare quella che si chiama una collocazione. definisce il livello di autenticazione richiesto. prende come valori: Allow. impostazione e avvio delle stampanti e delle code). consente l’accesso.13: I percorsi per l’accesso alla gestione delle operazioni definibili all’interno di una collocazione. vedi sez. queste ultime devono essere specificate all’interno della collocazione stessa.dominio. Accesso alle operazioni sulla classe name. che hanno una sintassi identica alle direttive elementari viste in precedenza. l’accesso alle varie funzionalit` del sistema di stampa via IPP viene infatti gerarchizzato in una a struttura ad albero analoga a quella dei file. e Tabella 3. Basic che effettua l’autenticazione usando e credenziali standard della macchina. Direttiva Order Significato Definisce la modalit` con cui vengono gestite le autorizzazioni con le direttive Deny e a Allow. specifiche per l’indicazione di regole di accesso. consentendo notazioni del tipo *. usa gli stessi valori appena descritti per Allow. Accesso alle operazioni sulle stampe.2) o un nome a dominio. 7.5. o la parola chiave All. cancellazione. questo viene fatto attraverso una serie di ulteriori direttive. Digest e BasicDigest che utilizzano le credenziali specifiche memorizzate in /etc/cups/passwd.dominio.3..it per indicare tutti le macchine in un dominio. in cui sono illustrate le principali direttive di accesso.conf. In pratica tutte le invocazioni di lpadmin richiedono l’uso di questa opzione.0.Deny.conf.0.0. 3. 39 . o via rete secondo vari protocolli di comunicazione).14. mentre se ` vietato si utilizza il valore Deny.14 per il server. che viene e mantenuta a livello di sistema nel file /etc/cups/client.Allow. I valori utilizzabili per queste direttive sono riportati a in tab. 3.1 </Location> <Location /admin> AuthType Basic AuthClass System Order Deny. che ` quello che si pu` utilizzare e e o per definire le propriet` generali delle stampanti presenti nel sistema.15. il primo di questi ` lpadmin. un breve elenco di possibili valori ` riportato in tab. e ci si limita in sostanza a consentire l’accesso all’interfaccia via rete solo in locale. che indica la modalit` con cui eseguire a una eventuale cifratura della connessione. cio` una stringa nella forma di un e indirizzo simile a quello di un sito web. Oltre alla configurazione lato server ` possibile specificare una configurazione generale sul e lato client (per tutti i programmi cio` che si appoggiano a CUPS per la stampa). e Alla direttiva Order devono poi seguire successive direttive Allow o Deny per indicare le macchine da cui vietare o consentire gli accessi. nome. seriale. estratto (togliendo i commenti) dalla versione installata con il pacchetto cupsys su una Debian Sarge.Allow Deny From All Allow From 127. tranne il caso in cui si usi al suo posto -x che richiede la cancellazione di una stampante logica.1 </Location> In questo esempio gran parte delle opzioni sono lasciate al valore di default. una ı u stampante logica ha una rozza equivalenza alla coda di stampa vista per LPD. richiedendo per l’amministrazione un’autenticazione basata sul corrispondente utente sulla macchina su cui si sta operando. e direttive come AuthType e AuthClass per indicare le eventuali modalit` di autenticazione.0. Il concetto di base ` quello a e 39 cui fare sempre riferimento con l’opzione -p seguita dal di definire delle stampanti logiche. per una descrizione pi` u dettagliata di tutte le direttive e della relativa sintassi si pu` fare nuovamente riferimento alla o documentazione di CUPS. 3. questa prende come argomento quello che la documentazione chiama un device-URI. che indica con quale modalit` ` possibile raggiungere ae la stampante stessa (se sulla porta parallela. Un esempio del contenuto di /etc/cups/cupsd. LA CONFIGURAZIONE DEI SERVIZI DI BASE per default si utilizza il valore Allow. Per creare una stampante logica oltre ad identificarla con -p occorrer` anche definire con a quale dispositivo vi si accede. ` il seguente: e DefaultCharset notused LogLevel info Printcap /var/run/cups/printcap Port 631 <Location /> Order Deny. 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. e le si chiamano cos` in quanto si possono associare pi` stampanti logiche ad una stessa stampante fisica.cupsrc nella propria home directory. e pu` essere personalizzata dal o singolo utente in un file . 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. cosa che si fa attraverso l’opzione -v. USB.142 CAPITOLO 3.Allow Deny From All Allow From 127. stampante di rete raggiungibile con protocollo LPD. Il comando per richiedere una stampa ` invece lp (anche se il sistema supporta l’uso di lpr e . Tabella 3.16: Principali opzioni del comando lpadmin. Oltre a definire come si pu` parlare con la stampante ` necessario anche specificare quale o e “linguaggio” usare. che di nuovo richiedono come argomento il nome della stampante. 3. Le principali opzioni del comando sono riportate in tab.ppd -E -h host Descrizione indica la stampante logica su cui si sta operando. 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. rimuove una stampante logica.ip parallel:/dev/lp0 usb:/dev/lp0 serial:/dev/lp0 Descrizione stampante di rete raggiungibile con protocollo IPP. stampante locale su porta USB. definisce il file di descrizione della stampante da utilizzare.15). abilita una stampante logica rendendola disponibile per la stampa. IL SISTEMA DI STAMPA Nome ipp://remote. e -r che prende come argomento una stringa in cui le motivazioni per cui la stampante ` stata disabilitata (che sar` riportata dai comandi diagnostici). indica il dipositivo da usare per parlare con la stampante (secondo il formato illustrato in tab.5. e che questa ` una e operazione diversa rispetto a quella di accettare o rifiutare l’immissione di nuove stampe sulla relativa coda. se una classe non esiste viene creata all’inserimento della prima stampante.printer. imposta la stampante come stampante di default. stampante locale sulla porta parallela. stampante locale su porta seriale. Indica la macchina remota su far operare il comando. questo si fa con l’opzione -P che associa alla stampante logica il relativo file PPD (PostScript Printer Description) che ne descrive le capacit`. questa seconda operazione viene fatta invece con i comandi accept e reject. 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.3.ip smb://remote. stampante di rete windows raggiungibile tramite Samba. questo ` un po’ l’equivalente a e del filtro di stampa. 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. come per disable anche reject supporta l’opzione -r con lo stesso significato. in quanto serve a definire quali sono le modalit` con cui alla fine i file a vengono stampati.15: Le diverse possibili specificazioni per gli indirizzi del dispositivo associato ad una stampante (device-URI ). rimuove una stampante logica da una classe. se si elimina l’ultima stampante la classe viene cancellata.ip lpd://remote. il comando reject inoltre supporta l’opzione -c che permette di rimuovere tutte le stampe pendenti. 3. inserisce in una classe una stampante logica. in sostanza una classe definisce un gruppo di stampante che pu` essere trattato o come un insieme. Una delle caratteristiche pi` interesanti di CUPS ` quella di permettere di definire delle classi u e di stampanti. cos` che indicando di stampare su quella classe la stampa viene effettuta su ı una delle stampanti che ne fanno parte.printer.printer.16. Opzione -p stampante -x stampante -d stampante -c classe -r classe -v URI -P file. 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. 143 Tabella 3. L’opzione -c richiede la stampa delle informazioni relative ad una classe (o a tutte se non si specifica quale classe). specifica la stampante o la classe da usare. un tempo in formato HH:MM la blocca ad allora.2). LA CONFIGURAZIONE DEI SERVIZI DI BASE con la stessa sintassi vista in sez. mentre se si vuole stampare su una macchina remota specifica occorre specificarla come parametro per l’opzione -h. con valore di default pari a 50). 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).17. specifica una priorit`. Il comando supporta anche l’opzione -h con lo stesso sigificato di lp.. al solito per i dettagli si faccia riferimento alla pagina di manuale. Opzione -E -d -h -i -n -q -H Descrizione forza una comunicazione cifrata col server. con l’opzione -a una stampante o una classe. l’opzione -a riporta lo stato di una coda (e delle eventuali stampe in attesa). specifica la macchina remota cui inviare la stampa. il primo ` lpinfo che permette di vedere i dispositivi fisici ed i supporti per le stampanti disponibili e all’interno di CUPS. e lo invia sulla stampante di default riportando a video un identificatore associato alla stampa in maniera analoga a lpr. o se specificato. direct usb:/dev/usb/lp15 network smb Il secondo comando ` lpstat che riporta le informazioni relative alle singole stampanti. Per cancellare una stampa si pu` invece usare il comando cancel.17: Principali opzioni del comando lp.5.. specifica la stampa su cui operare. entrambe richiedono il nome di . specifica il numero di copie da stampare. il comando richiede una delle opzioni -v o -m per stampare rispettivamente la lista dei dispositivi utilizzabili e quella delle stampanti supportate. per l’elenco completo ed i dettagli si pu` fare riferimento alla pagina di o manuale. 3. 3. specifica quali pagine stampare (passati come lista separate da virgole o intervalli separati da “-”). classi e e stampe attive. nel qual caso saranno cancellate tutte le stampe presenti su di essa.144 CAPITOLO 3. 3. Il comando usa le opzioni -E e -h con lo stesso significato visto in tab. Le opzioni principali sono a riportate in tab. a specifica quando eseguire una stampa: hold la blocca indefinitamente. che prende come argomento il file da stampare. 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. Infine per ottenere informazioni riguardo il sistema di stampa ci sono due comandi. 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. -P Tabella 3. Ad esempio se si vuole ottenere una lista dei dispositivi visibili da riutilizzare con l’opzione -v di lpadmin si pu` eseguire o il comando: monk:~# lpinfo -v network http network ipp network lpd direct parallel:/dev/lp0 direct usb:/dev/usb/lp0 . mentre l’opzione -p riporta lo stato di una stampante.17. che prende come argomento o l’identificatore della stampa. IL SISTEMA DI STAMPA 145 una stampante logica da interrogare. e riportano lo stato di tutte quelle definite se questa non viene specificata.3. Ulteriori dettagli sul comando e l’elenco completo delle opzioni si trovano al solito sulla pagina di manuale .5. LA CONFIGURAZIONE DEI SERVIZI DI BASE .146 CAPITOLO 3. attivit` umane. Tratteremo le modalit` con cui si a possono eseguire i backup sia di file e directory che di interi filesystem. Al contrario dell’hardware l’affidabilit` del software non sembra subire particolari miglioraa menti. per la gestione dei backup e la duplicazione dei dati dei dispositivi. Per questo motivo occorre prendere le a opportune misure per assicurarsi contro questa evenienza.1 Criteri generali per il backup Quella dei backup ` probabilmente la principale attivit` di ogni sistemista.1. e l’uso di utenti distinti pu` essere di aiuto.Capitolo 4 Amministrazione ordinaria del sistema 4. Oggi l’hardware tende ad essere sufficientemente affidabile. ma di nuovo non ` la soluzione al problema di o e eventuali perdite di dati. ciascuna di queste comporta rischi specifici ed opportune contromisure. errori del software e a guasti dell’hardware.1 Archiviazione e backup Una delle attivit` fondamentali della amministrazione di un sistema ` quella dei backup. e la perdita degli stessi significa spesso la perdita di grandi quantit` di ore di lavoro. ed un programma solido. Nel caso dei dischi una possibile assicurazione contro il malfunzionamento ` e e quello dell’uso del RAID (vedi sez. per cui il rischio di malfunzionamento. e In genere in questo caso i dispositivi pi` critici sono gli hard disk. 6. per quanto ridotto. ed il backup ` la principale di queste e misure. affidabile e sicuro ` sempre un caso piuttosto raro. In a e questa sezione prenderemo in esame i programmi per la gestione degli archivi di dati. in generale si tende a classificarle in quattro categorie diverse: disastri naturali. Nel mondo dell’ine a formatica i dati sono il principale prodotto del lavoro svolto. a non ` trascurabile. In questo la struttura di un sistema Unix. 4. Ci possono essere varie ragioni per cui si possono perdere dei dati. 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`. ci` non di meno i guasti contio nuano ad esserci. con la separazione dei privilegi. L’affidabilit` delle persone ` sempre una variabile difficile da quantificare. 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 . ed inoltre e l’affidabilit` di un singolo programma ` relativamente inutile se un altro va a sovrascrivere per a e errore i suoi dati.1). ma questo copre soltanto un caso particolare di guasti dell’hardware. e la sfortuna ` in agguato per farli avvenire nel peggior momento possibile. a e Per questo motivo nell’effettuare dei backup il primo punto ` quello di mettere a punto e una opportuna strategia. se e non nel caso in cui una reinstallazione da zero non comporti un carico di lavoro eccessivo. Per quanto riguarda i disastri naturali. occorre stabilire anche il periodo di tempo che si intende coprire con i backup. e la frequenza con cui si effettuano questi ultimi. per cui potreste trovarvi senza disco e scoprire che un nastro ` illeggibile. /var e /home. mantenere dei backup ` la strategia pi` semplice ed efficace per proteggersi e u dalle molteplici evenienze che possono causare la perdita di dati. AMMINISTRAZIONE ORDINARIA DEL SISTEMA di eventuali azioni dolose che possono causare. e non della ricreazione da zero degli stessi. il periodo che a si intende coprire con il backup. avere a disposizione copie multiple dei propri dati rende meno critica la perdita di una di esse. come la quantit` di dati che si vogliono mettere sotto controllo. 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). che qualora fossero gi` e a assenti alla data dell’ultimo backup disponibile sarebbero irrimediabilmente perduti. come ogni altra cosa del mondo reale infatti essi possono fallire e al solito tenderanno a farlo nel peggior modo e momento possibili. pi` risorse dovranno essere utilizzate nella u a u manutenzione dei backup. Questo ad esempio vuol dire. e non avrebbe senso usare una frequenza maggiore. insieme ai dati personali dei e singoli utenti. Infine la scelta del periodo da coprire con i backup dipende dall’uso degli stessi. 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. ad esempio se servono solo a mantenere una copia di riserva che permetta il recupero di eventuali cancellazioni accidentali passate inosservate. che si devono salvare i contenuti delle directory /etc. . 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. 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. Un altro fattore che incide sulla frequenza ` il tempo che occorre a creare il backup. Ci sono infatti parecchie variabili da tenere sotto controllo. Perch´ questa strategia sia efficace comunque occorre che i backup siano effettuati in maniera e appropriata. nell’ambito di un sistema GNU/Linux. 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. in modo da poter essere in grado di ricostruire la situazione dei propri dati ad istanti diversi nel passato. o che l’unica unit` a nastro in grado di rileggere i vostri backup si ` rotta pure lei. Ovviamente pi` lungo sar` il periodo. Sono senz’altro da salvare tutti i dati di sistema. Questo comporta che deve essere determinata la frequenza con cui si vogliono effettuare i backup.148 CAPITOLO 4. non si potrebbero recuperare eventuali dati cancellati in precedenza. ed eventualit` remote ma completamente distruttive a di ogni tipo. quando invece nella pratica il caso pi` comune di recupero di dati u da un backup ` proprio quello di vecchi dati cancellati inavvertitamente. le modalit` di gestione degli stessi. mentre non ` necessario salvare quelli di e /usr. il costo della perdita si riduce semplicemente a quello del ripristino degli stessi da backup. il mezzo utilizzato. e quant’altro non ` replicabile in maniera automatica. mentre pu` essere importante salvare delle configurazioni ottenute come risultato finale di parecchie ore o di lavoro. direttamente o indirettamente. la distruzione di dati o il danneggiamento dei relativi supporti. la frequenza dei backup. o se si vuole mantenere una storia completa per ragioni di archiviazione. gli archivi della posta e del database e del web. Se infatti si avesse un sistema di backup contenente solo le informazioni necessarie a ripristinare la situazione ad un certo istante. Come accennato. Ad esempio pu` non essere troppo a o saggio tenere i propri supporti in un armadio nel corridoio. la velocit` e l’utilizzabilit`. per questo qualunque strategia di backup prevede comunque l’effettuazione periodica di backup completi. Al di l` e a del suo uso per la creazione di archivi.2 e e A titolo di esempio una strategia comunemente utilizzata ` quella di effettuare backup incree mentali a frequenza giornaliera. In genere inoltre si utilizzano unit` a nastro SCSI.1. ma occorre invece riflettere su quanto possa essere pericoloso avere uno splendido sistema di backup perfettamente funzionante. dovendosi utilizzare dischi estraibili a caldo. bench´ funzionali e poco costosi. ma non sono adatti come mezzi di backup in quanto stanno nello stesso computer dei dati originali che pu` andare distrutto. 1 . fra cui quello del costo che. Le variabili in gioco sono il costo.4. ma diventa cruciale solo qualora un mezzo troppo manomesso. intervallati da backup completi a cadenza settimanale o mensile.1. dei backup cio` in cui si archiviano solo a e i file che sono stati modificati rispetto ad un backup precedente. che funziona per` solo con una vecchia o scheda hardware fuori produzione. ae lento rendesse impossibile effettuare i backup con la frequenza necessaria. L’utilizzabilit` viene a spesso data per scontata. 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. in genere i dischi sono molto affidabili. anche in presenza di nuove tecnologia per le schede. prevedendo anche lo stoccaggio dei nastri in un locale sicuro in una locazione remota.2 Il comando tar Il comando pi` usato per la gestione di archivi di file ` tar. dato che questa interfaccia ha a dimostrato di mantenersi utilizzabile nel tempo. dato che accorgersi che qualcosa ` andato storto nel momento del bisogno non ` molto simpatico. tar ` anche il programma pi` diffuso per la distribuzione e u ovviamente a questo fanno eccezione i dischi estraibili. dato che un backup inaffidabile a e ` assolutamente inutile. L’affidabilit` invece ` fondamentale. per cui ` opportuno avere a e un mezzo poco costoso. ma questo comporta altri problemi. l’affidabilit`. Un’altra decisione cruciale nella strategia di backup ` la scelta del supporto da utilizzare e per gli stessi. danneggiato o o 1 La velocit` ` senz’altro utile. i floppy hanno capacit` ridotta e scarsa affidabilit`. Inoltre qualunque sia la modalit` di stoccaggio utilizzata occorre anche prevedere a verifiche periodiche del funzionamento dei backup (effettuando dei ripristini di controllo). ma soprattutto il fallimento di un backup incrementale render` inutilizzabili tutti quelli successivi basati su di a esso. Tenendo conto di tutte queste caratteristiche alla fine i supporti pi` utilizzati per i backup u sono usualmente i nastri. ma l’affidabilit` dipende anche dal tipo di problema che ci si trova ad e a affrontare. a a a mentre i vari tipi di dischi rimuovibili presentano in genere un costo troppo elevato con capacit` a insufficienti. In questo modo ` possibile e ricostruire la situazione ad un dato istante senza dover registrare tutte le volte l’insieme completo dei dati. e 2 ` rimasto famoso l’esempio di un sistemista coscenzioso che aveva accuratamente pianificato tutta la sua e strategia. Il a a a costo incide direttamente sulla quantit` di dati che si possono salvare. hanno dei grossi e problemi di stabilit` nel lungo periodo. 4. sotto una vecchia tubatura del riscaldamento. ` solitamente molto alto. archiviando i backup mensili per un periodo di tempo pi` o meno lungo a secondo delle esigenze u “storiche” che si possono avere. I CD-R infatti. 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). Oltre alla scelta dei supporti una strategia di backup deve comunque anche prevedere la definizione delle modalit` di conservazione degli stessi. 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. chiamato cos` dall’inglese Tape u e ı ARchive dato che il comando ` nato apposta per archiviare i file su nastro magnetico. e ne esistono molte versioni. e sono illustrate in tab. a meno di non specificare il file con -f il comando usa come default /dev/st0 o il primo dispositivo che riconosce come una unit` a nastri. Di queste ne esistono due di uso comune. Si ` usata la sintassi delle opzioni in forma GNU. a di norma si utilizza anche l’estensione . in questo caso dovr` anche essere specificato con -f il nome del file su cui saranno archiviati i file.1). confronta i membri di un archivio con la controparte sul filesystem e riporta ogni differenza in dimensioni. -c per creare un archivio. estrae i file da un archivio. facendogli stampare a video durante l’esecuzione molte a ´ pi` informazioni (ad esempio la lista dei file inseriti o estratti dall’archivio). Il comando tar supporta una grande variet` di opzioni ed argomenti. mantenendo invariate anche le caratteristiche specifiche dei file (come permessi. aggiunge file in coda all’archivio. proprietari. per a evitare confusione ` pertanto opportuno specificare sempre esplicitamente il nome dell’archivio e con questa opzione. tempi. AMMINISTRAZIONE ORDINARIA DEL SISTEMA di pacchetti di software dai sorgenti (come vedremo in sez. permessi. Oltre alle operazioni tar supporta una enorme quantit` di opzioni che modificano il compora tamento del programma. e la versione GNU ` a e stata dotata di una serie di ulteriori estensioni. cancella i file da un archivio (questo non pu` funzionare o sui nastri). Il comando ha tre operazioni principali. identica a --extract. Per questo anche la versione GNU (la sola che tratteremo) supporta varie sintassi. Opzione --create --extract --list --concatenate --diff Significato crea un nuovo archivio. ecc. aggiunge file in coda all’archivio. e che aumenta la prolissit` del comando.).per specificare una opzione in forma breve. Date queste due opzioni il comando prende come argomenti una lista dei singoli file da archiviare. in generale. mentre si pu` o u o avere un numero qualunque di parametri.tar per identificare questi file. E in genere possibile u aumentare ulteriormente la quantit` di informazioni stampate inserendo la stessa opzione una a seconda volta. aggiunge un archivio in coda ad un altro. In ogni invocazione si pu` specificare non pi` di una operazione. 4. ma tar ` uno e e dei comandi storici di Unix. 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. ed in particolare si pu` sempre fare a meno di o utilizzare il . ma le operazioni sono in totale otto. e -x per estrarlo. Ad esempio si possono archiviare alcuni file con: . -t per verificarne il contenuto.1: Operazioni del comando tar. La seconda ` -f (--file) che serve a specificare il nome del file da usare come archivio da e cui leggere o su cui scrivere. ma solo se sono pi` u recenti della versione gi` presente nell’archivio o non sono a presenti in esso. proprietari e tempi.1 (sia in forma breve che estesa). la prima ` -v (o --verbose).2. elenca i file contenuti in un archivio. se per` fra questi si o inserisce una directory il comando archivier` anche il contenuto di quest’ultima.150 CAPITOLO 4. e di tutte le a directory sottostanti. identica a --diff. -c -x -t -A -d -u --update -r --append --delete --compare --get Tabella 4. 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. Come accennato per creare un archivio il comando necessita dell’opzione --create o -c. 4. tex shell.tex e si noti come si sia usata anche l’opzione -v per stampare la lista dei file archiviati.eps corso/images/dir_links.~1.dia .tex netadmin. 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). anche senza la presenza dell’opzione -v.tex ringraziamenti./dispense.tex corso/netinter.tar .1. 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. Inoltre. corso/ordadmin.tex. il comando ` sufficientemente scale tro da accorgersi di questa situazione ed evitare di inserire nell’archivio che sta creando il file dell’archivio stesso: piccardi@anarres:~/Truelite/documentazione/corso$ tar -cf dispense.tex corso. se si vuole invece aggiungere dei file ad un archivio preesistente occorre usare l’opzione -r.4. il file viene creato nella directory corrente. a meno di non specificare un pathname assoluto.tex struttura.tar: file is the archive.tex netinter.tex netbase.tex corso/dispense.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.tar corso/#ordadmin.tex# e si noti come in questo caso vengano archiviate ricorsivamente anche tutte le directory sottostanti ed il relativo contenuto.tex config. analogo a quello di ls -l. specificando la quale si otterr` invece una a lista in formato esteso. not dumped Una volta creato un archivio se ne potr` verificare il contenuto con -t (o --list). tar: . Si tenga presente che quando si crea un archivio con -c il file di destinazione viene sovrascritto. ARCHIVIAZIONE E BACKUP 151 piccardi@anarres:~/Truelite/documentazione/corso$ tar -cvf dispense.tex ordadmin.~ corso/netbase. di nuovo si a dovr` utilizzare -f per indicare il file contenente l’archivio che in questo caso sar` letto.tex Struttura...tar *.tex advadmin. 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.5.tex fdl. si tenga presente per` che in o . ma ` possibile estrarre un singolo file fornendone il nome (o e se il pathname se questo ` collocato in una sottodirectory). e 4. 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. 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. 2. Come per la creazione e l’uso dell’opzione -v permette di ottenere la lista dei file che vengono estratti dall’archivio. ` quando i file che vengono creati hanno dei tempi situati nel futuro. a per attivare questa modalit` deve essere specificata l’opzione -i o --extract. il programma pu` lamentarsi dell’impossibilit` di ricreare o a questi attributi dei file.152 CAPITOLO 4. quello che si pu` ottenere dalla lista e o fornita dall’opzione -t. utenti e gruppi. vengono considerati validi come caratteri sui quali verificare una corrispondenza anche un “. questo significa anche che vengono mantenuti i permessi e utente e gruppo proprietario del file. Pertanto una invocazione tipica ` qualcosa del tipo: e cpio < lista_file > archivio ` uso comune generare la lista direttamente con l’uso di find. In modalit` copy-out il comando copia i file dentro l’archivio. per il quale ` anche in grado di usare lo stesso formato e usato da tar. ı Per estrarre i dati inseriti in un archivio si deve utilizzare l’opzione --extract o -x. A differenza di tar per` prende sempre come argomento di ingresso una lista di o 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. se non si specifica nessuna opzione tutti i file vengono estratti. cos` da considerare nella corrispondenza anche i file nascosti e intere sezioni ı di pathname. che devono essere sempre indicate ad ogni ina vocazione del programma. 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). Il programma legge una a lista di file dallo standard input e scrive l’archivio risultante sullo standard output. in caso di impostazione sbagliata dell’ora di sistema. Inoltre dato che alcuni filesystem (come il vfat di Windows) non supportano la presenza di permessi. che permette e di estrarre ed inserire file in un archivio. Se non si specifica nessun argomento il comando estrae il contenuto completo dell’archivio. L’estrazione avviene sempre nella directory corrente. 4. per a attivare questa modalit` deve essere specificata l’opzione -p o --pass-through.2). L’archivio viea ne letto dallo standard input.1. il confronto infatti viene eseguito solo nei termini della corrispondenza fra l’argomento ed il nome cos` questo viene visto nell’archiviazione. altrimenti tutti gli argomenti che non sono opzioni vengono considerati come pattern secondo la sintassi3 del filename globbing della shell (vedi sez.1. 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. e qualora si siano archiviate intere directory ne viene ricreata l’intera gerarchia. un altro errore che viene segnalato.” all’inizio del file e il carattere “/”. utente e gruppo che nel sistema corrente possono non esistere o essere del tutto diversi. per a attivare questa modalit` deve essere specifica l’opzione -o o --create. Il comando cpio ha tre modalit` operative. e In modalit` copy-in il comando estrae i file contenuti in un archivio o ne elenca il contenuto.3 Il comando cpio Un comando alternativo per la gestione dell’archiviazione di file e directory ` cpio.4) e vengono estratti solo i file che corrispondono. di nuovo ` necessario specificare l’archivio da cui si estraggono i file con -f. 3 . combinando a in sostanza le due modalit` copy-in e copy-out in un unico passo senza creare un archivio. e come accennato in sez. stampa la lista dei file contenuti nell’archivio. Pertanto una invocazione tipica in questa modalit` a ` del tipo: e cpio < lista directory Il comando. Inoltre per poter utilizzare questa funzionalit` occorre anche montare opportunamente il filesystem. . Il limite di un programma come dump ` che questo funziona solo per un filesystem che ne e supporti le operazioni salvando le informazioni necessarie. il quinto. preserva i precedenti tempi di ultima modifica quando ricrea i file in fase di estrazione. sovrascrive eventuali file gi` esistenti con quelli a dell’archivio senza chiedere conferma.1.. vengono usati per archiviare i file presenti all’interno delle directory specificate.4 I comandi dump e restore I comandi tar e cpio appena illustrati. -1. numerati da 0 a a 9. con a la stampa dei nomi dei file che vengono processati. in cui si sono tralasciate le tre opzioni e principali per selezionare le modalit` di operazione. con -A di aggiungere i file ad un archivio esistente (invece di sovrascriverlo). 4. copia solo i file che non corrispondono al pattern specificato. Opzione -0 Significato prende in ingresso una lista di stringhe terminate dal carattere NUL (generabili con find) per permettere l’archiviazione di file il cui nome contiene un carattere di a capo.2: Principali opzioni del comando cpio.2.. -9). come dump e restore che permettono di effettuare l’archiviazione a livello di un intero filesystem. Questo nel caso di Linux ` vero e solo per il filesystem ext2 e la sua estensione journalled ext3. ı Il funzionamento del programma prevede la possibilit` 10 diversi livelli di dump. -a -d -f -F -m -t -u -v Tabella 4.4. 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. In particolare con -v si richiede una maggiore prolissit` nelle operazioni.4. da specificare con le opzioni omonime (cio` -0. stampa informazioni aggiuntive sui file che vengono processati dal comando (in combinazione con -t viene usato un formato analogo a quello di ls -l). 4. supporta molte a altre opzioni. cos` da permettere dei backup incrementali. . ARCHIVIAZIONE E BACKUP 153 specificata come argomento non opzionale. L’elenco delle principali opzioni ` riportato in tab. ma esistono comandi. e se non specificato viene usato e il livello 9. ripristina il tempo di ultimo accesso sui file appena letti perch´ non risultino tali. e ricrea le directory in cui si trovano i file (altrimenti questi verrebbero creati nella directory corrente). al solito l’elenco completo delle opzioni ` a e disponibile nella pagina di manuale accessibile con man cpio.2. 1. con -t si richiede di stampare la lista del contenuto di un archivio. permette di specificare un nome di file da usare come archivio al posto dello standard input o dello standard output. a parte quelle usate per specificarne la modalit` di operazione. che deve essere inizializzato opportunamente ad un valore non nullo. a per questo il file /etc/fstab prevede un campo apposito.1. Il comando che permette di recuperare i dati archiviati con dump ` restore. si possono specificare pi` file separandoli con virgole. Questo significa che un backup di livello 9 salver` sempre solo i file modificati dopo l’ultimo backup precedente.1) passati per numero. e esclude dal backup una lista di inode (vedi sez. e in realt` si pu` anche specificare una directory contenente i file che si vogliono archiviare e non un mount a o point. 5 4 . abilita il salvataggio multivolume (in cui si usa -f per specificare pi` di un volume di backup). e stabilisce un punto di partenza per tutti gli altri livelli. esclude una lista di inode elencati nel file specificato come parametro.per indicare lo e o standard output). in cui si sono salvati tutti i file. 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. in questo caso per` sono consentiti solo backup completi di livello 0 e tutto il contenuto della directory o deve risiedere nello stesso filesystem. per l’elenco completo si pu` al solito fare riferimento alla pagina di manuale. e cio` /dev/st0. Un livello superiore richiede il salvataggio di tutti i file che sono cambiati dall’ultimo backup effettuato con un livello inferiore. e come dump usa l’opzione -f per indicare il file (ordinario o di dispositivo) da cui recuperare i dati da ripristinare. Una possibile strategia di backup ` quella riportata nella pagina di manuale. scrive il backup sul file passato come parametro. che esegue e esattamente il compito inverso.2. a Quindi per fare un esempio.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.3. Le principali sono a -C che effettua un confronto fra i file passati come argomento e quelli sul backup. usa la stringa passata come parametro come etichetta del backup. e a quale livello. ma si pu` specificare un file ordinario o usare .154 CAPITOLO 4. u -e -E -f -L -M -u -v Tabella 4. 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). 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 prende come argomento il mount point del filesystem di cui si vuole eseguire il backup. un passaggio iniziale infatti ` sempre necessario. e usando un insieme di supporti da ruotare settimanalmente. -i che porta si suppone che prima si sia partiti con un dump di livello 0. in cui si fanno backup incrementali giornalieri. 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. aumenta la prolissit` del comando facendogli stampare a a video pi` informazioni riguardo le operazioni correnti. Il comando inoltre prevede la necessaria presenza di una serie di opzioni che ne indicano la modalit` di operazione. 4. AMMINISTRAZIONE ORDINARIA DEL SISTEMA Il livello 0 indica un backup completo. si sono riportate le principali in tab. e saranno u considerati come volumi successivi.3: Principali opzioni del comando dump.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. 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. ed un algoritmo di tipo torre di Hanoi modificato. 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. 1. estrae il contenuto di una directory. nel qual caso l’estensione usata ` . se questa viene passata come argomento. In genere gli archivi vengono pure compressi. per l’uso di sistemi obsoleti che hanno problemi coi nomi di file che hanno troppi caratteri “. a 4. a ricostruisce un intero filesystem da zero. e -x che effettua il ripristino dal contenuto dell’archivio. 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. parecchie delle quali servono a controllare propriet` relative all’uso dei nastri.tar.bz2. descritti nella pagina di a manuale). attiva la modalit` interattiva.4: Principali opzioni del comando restore. 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. 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. se ci sono. trattato in sez. per cui di norna li si trovano distribuiti in file che usano l’estensione .2. 4.1. 4. LA GESTIONE DEI PACCHETTI SOFTWARE 155 in modalit` interattiva (dove possono essere dati una serie di comandi. stampa una maggiore quantit` di informazione durante a le operazioni.4. e 4. -r che permette di ricostruire un intero filesystem da zero. anche se ` pi` lento).2. Opzione -f -C -i -r -t -x -h -M -v Significato indica il file in cui ` stato memorizzato il backup. 4.2. presenta un elenco di file nel backup. 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`. in particolare esaminando le funzionalit` di gestione automatizzata a dei pacchetti che permettono di tenere traccia di tutto quello che si ` installato nel sistema. -t che verifica se i file passati come argomento sono nel backup o stampa a video il contenuto integrale dello stesso se invocato senza argomenti.2.tar.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. Tabella 4. e probabilmente anche pi` “vicini” a voi e quindi u con una maggiore velocit` di accesso. e esegue un confronto fra i file presenti nel filesystem e quelli nel backup. oltre a quelle brevemente spiegate in precedenza si a sono riportate in tab.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 . Pertanto se il nostro pacchetto software ` pacchetto.4 le pi` rilevanti. eventuali mirror. o di tutto l’archivio se non vengono passati argomenti.gz lo si potr` decomprimere con tar e a talvolta abbreviata in tgz.tar. estrae una directory dal backup (o tutto il contenuto). dato che questi di e norma sono meno occupati del sito originale. Come dump anche restore prevede numerose opzioni. di una directory.” al loro interno. abilita il ripristino da un archivio multivolume.1. e non di quelle in essa contenute. In genere il software viene distribuito in forma sorgente in degli archivi compressi chiamati gergalmente “tarball ” in quanto creati con il programma tar.gz6 dato che il programma di compressione piu usato ` gzip. Queste possono essere molto diverse da pacchetto a pacchetto. In genere infatti. che usa meccanismo molto sofisticato che permette di creare i file nella giusta sequenza.1. In questo caso quello che c’` da fare ` installare questi pacchetti con il relativo meccanismo di gestione. Se qualcosa va storto in questa procedura avete due strade. A questo punto per l’installazione occorre eseguire le relative operazioni./configure ha completato con successo le sue operazioni potremo eseguire il secondo comando nella sequenza. a e fino a quando tutte le operazioni saranno completate ed i binari del pacchetto saranno stati creati. 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). secondo e e le modalit` che vedremo pi` avanti. In questo modo ` possibile installare pacchetti generici. Il funzionamento di make va al di la di quanto sia possibile affrontare qui. Si tenga presente che ` la procedura standard prevede di installare i pacchetti e compilati dai sorgenti in /usr/local/./configure make make install Il primo comando (.156 CAPITOLO 4. oltre al tempo e o perso a compilare i programmi (che per pacchetti piccoli ` forse trascurabile. dell’ordine delle o ore o dei giorni). ` pi` problematico disinstallare. Inoltre se installare ` facile. dove e quando.2). ma per pacchetti e importanti come il server X pu` essere. nel caso probabilmente non starete a leggere questo manuale). che di solito ha lo stesso nome del pacchetto. Questo ` un programma per la costruzione di altri e programmi. pur avendo installato una libreria. questi non sono necessari. estesi con un -dev.tar. 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. In genere questi sono disponibili nei dischi di installazione come pacchetti con lo stesso nome delle librerie relative. il problema di tutto ci`. 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. a seconda della potenza della macchina.gz./configure) esegue uno script di shell che verifica che nel sistema sia presente tutto quello che serve per compilare il pacchetto. A questo punto con make install si dice allo stesso programma di eseguire le istruzioni di installazione. per cui per poterli utilizzare dovete avere le directory di questa gerarchia secondaria nel PATH (vedi sez. basti dire quello che si otterr` dal comando ` una lunga serie di linee di uscita da parte del compilatore.4) ed essere in grado di usare le eventuali librerie installate dal pacchetto (secondo quanto vedremo in sez. AMMINISTRAZIONE ORDINARIA DEL SISTEMA -xvzf pacchetto. alle funzioni della stessa. 3. make. e che se installate e una nuova versione dovete verificare che la sovrapposizione non generi problemi. non si sono installati u e i file di dichiarazione che sono usati dal compilatore per poter accedere. a u Una volta che . e pertanto nella installazione standard di una distribuzione normalmente vengono tralasciati. 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.1. Se il pacchetto usa gli autotool GNU7 o segue la procedura di installazione standard tutto quello che c’` da fare ` di entrare nella directory dove si ` scompattato il e e e contenuto della tarball ed eseguire la sequenza di comandi: . Uno dei problemi pi` comuni ` che. ` che dovete ricordarvi di cosa avete installato. 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. 7 . quando si installano pacchetti binari gi` a compilati. Questo ` il punto pi` critico della e u procedura. quando compila il pacchetto. Le due opzioni pi` semplici sono -i che installa un pacchetto e -e che lo cancella. non specificare nulla usa il primo dei target disponibili. 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. divenendo probabilmente il pi` diffuso sistema di gestione automatizzata dei u pacchetti. 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. che esegue di norma il compito principale. Si pu` anche leggere o il contenuto di un pacchetto non installato con l’opzione -qpf specificando il file dello stesso. come molteplici sono le funzionalit` che e a provvede. se non si specifica altro l’opzione prende un nome di pacchetto di cui verifica l’esistenza. il RedHat Package Manager ` stato introdotto e dalla RedHat nella sua distribuzione. rpm.5. 4. cos` pu` e ı o accorgersi se un pacchetto va in conflitto con altri cercando di installare gli stessi file. gran parte delle distribuzioni utilizzano un sistema di gestione dei pacchetti che permette di tenere traccia di cosa si installa. LA GESTIONE DEI PACCHETTI SOFTWARE 157 purtroppo) provvedono uno speciale bersaglio 8 per make che consente la disinstallazione con make unistall. Il comando tiene traccia di ogni pacchetto installato e di dove ` stato installato. seguito dal nome del pacchetto. Se il pacchetto ` gi` installato si pu` usare -U che esegue l’upgrade. anch’esso caratterizzato dalla estensione . Stampa il pacchetto che contiene un file. che serve a gestire l’installazione e la rimozione dei pacchetti.rpm che contiene il pacchetto. di dove sono messi i file.2 La gestione dei pacchetti con rpm Uno dei primi sistemi di gestione dei pacchetti. Verifica lo stato di un pacchetto. Il comando prende molte altre opzioni. In realt` RPM fa molto di pi` che installare e disinstala u lare. Rimuove il pacchetto. di solito ne esistono anche degli altri. Ma se questo non c’` occorre tracciarsi a mano i file che sono stati installati e e cancellarli. Per questo. 8 . Il RedHat Package Manager si basa su un programma. e a o Inoltre con l’opzione -q ` possibile eseguire una serie di interrogazioni sul database dei e pacchetti installati. Tabella 4. Stampa tutti i pacchetti installati.2. Il comando ` complesso e prende molteplici opzioni. le principali delle quali sono riportate in tab. glii argomenti che di norma si passano a make e che normalmente indicano ı. la descrizione dettagliata del comando con l’elenco completo delle opzioni sono al solito disponibili nella relativa pagina di manuale.5: Principali opzioni del comando rpm. Interroga il database per la presenza di un pacchetto. data la sua efficacia esso ` stato poi adottato da molte e altre distribuzioni. Opzione -i -U -e -q -qa -ql -qf -V -K -v -h Significato Installa il pacchetto. Stampa i file contenuti in un pacchetto.4. Una delle funzionalit` pi` importanti di un gestore di pacchetti ` quella di essere in grado a u e si chiamano cos` dall’inglese target. Esegue l’upgrade del pacchetto. Stampa pi` informazioni nell’esecuzione delle operazioni. Se invece si usa -qf.2. u Stampa una barra di progressione. mentre con rpm -qa si ottengono tutti i pacchetti installati nel sistema. u Nel primo caso deve essere specificato il file . 4. Verifica la firma digitale di un pacchetto. come vedremo nelle sezioni seguenti. quali delle varie sezioni di comandi di costruzione e installazione devono essere usati.rpm. nel secondo caso il nome del pacchetto stesso. per poi permettere una cancellazione pulita del pacchetto quando lo si vuole disinstallare. si stampano i file in essi contenuti. i quali sono distribuiti in file in un apposito formato. deb e -r che rimuove un pacchetto dal sistema. Opzione -i -r -l -L -S -s -p -I -c Significato Installa il pacchetto. che permette e di cancellare completamente il problema delle dipendenze. scaricare ed installare i pacchetti mancanti. Rimuove il pacchetto. Tabella 4. il programma che permette di installare questi pacchetti ` dpkg. 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. ` in grado di e accorgersi di eventuali conflitti con pacchetti gi` installati. 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. Esso u e ` basato su un programma di gestione dei singoli pacchetti con funzionalit` analoghe a quelle e a di rpm. 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. I pacchetti Debian sono distribuiti in file con l’estensione . a Nel caso in questione rpm ` in grado. Ricerca i pacchetti che contengono un file. se si specifica un nome viene ricercata la presenza di un pacchetto con quel nome). e delle dipendenze da altri pacchetti.3 La gestione dei pacchetti di Debian Uno dei pi` grandi vantaggi di Debian ` proprio il suo sistema di gestione dei pacchetti. 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).6: Principali opzioni del comando dpkg..2. al solito le istruzioni complete e tutte le altre opzioni sono descritte nella pagina di manuale.158 CAPITOLO 4. ed e ` sostanzialmente un analogo (in realt` c’era da prima) di rpm. Stampa i file contenuti in un pacchetto. 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. Inoltre con -l viene stampata la lista dei pacchetti installati (se non si specifica nulla. Stampa informazioni su un . ma sopra di esso ` stata costruita una infrastruttura molto pi` complessa che rende e u estremamente semplice e funzionale la gestione dei pacchetti. 4. in quanto provvede le stesse e a funzionalit`: installa e rimuove pacchetti mantenendo un database dei pacchetti e dei relativi a file installati. sta all’amministratore trovare. 4. sia pure in forma non troppo sofisticata (il che porta a e quella situazione che viene chiamata dependency hell. Bench´ ormai anche i .deb.deb risultino piuttosto usati (dato che sono diventate parecchie le e distribuzioni basate su Debian) la loro diffusione su internet come file a se stante ` piuttosto e ridotta. Stampa lo stato di un pacchetto. Stampa informazioni su un pacchetto installato. AMMINISTRAZIONE ORDINARIA DEL SISTEMA gestire le cosiddette dipendenze di un pacchetto da un altro. Il meccanismo per` si limita o a questo. Questo avviene perch´ in realt` dpkg ` solo la parte di basso livello del sistema di e a e gestione dei pacchetti di Debian. a pu` interrogare il database dei pacchetti e ottenere informazione sul loro contenuto. Le altre opzioni principali sono riportate in tab. provvede l’esecuzione di script in fase di installazione e rimozione. Stampa il contenuto di un .6. o Le opzioni principali del pacchetto sono -i che esegue l’installazione di un file ..deb ed usano un formato diverso rispetto agli RPM. I pacchetti Debian infatti sono organizzati per indicare in maniera coerente da quali altri pacchetti essi dipendono. ed ` piuttosto raro dover usare questo comando per installare e un pacchetto. diventa cos` ı . quando un pacchetto dipende da un’altro che a sua volta dipende da una altro che a sua volta .deb. 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. ed installare il tutto. Esegue l’upgrade dei pacchetti aggiornati. con una modalit` che permette il download automatizzato degli stessi. 4. ed in caso di conferma procede alla rimozione completa. e e Qualora si voglia rimuovere un pacchetto il comando ` apt-get remove nome. Una volta impostati i vari repository da cui si vogliono recuperare i pacchetti baster` eseguire a il comando apt-get update per scaricare la lista aggiornata dei pacchetti. 4. Cancella l’archivio dei pacchetti scaricati. che nel 90% dei casi ` comunque tutto quello che c’` da fare. Opzione install remove clean update upgrade dist-upgrade autoclean Significato Installa un pacchetto. Rimuove un pacchetto.list.3. Il comando per` non rimuove mai un pacchetto gi` presente dal o a sistema. In una distribuzione Debian tutto quello che si deve fare ` mantenere una lista degli appropriati repository dei pace chetti nel file /etc/apt/sources. ma apt-get. il comando chiede conferma della volont` di rimuovere anche loro. e modificarne le propriet` ed esamineremo quali sono a . Le opzioni principali di apt-get sono riportate in tab. a o a i principali dei quali sono via HTTP o via FTP). Baster` poter accedere a detta directory (cosa che pu` essere fatta in una molteplicit` di modi. Un repository non ` altro che una directory (locale o e remota) che contiene i vari pacchetti e le relative informazioni organizzati in maniera opportuna. l’elenco completo. a Il programma di gestione principale per i pacchetti non ` allora dpkg.7. 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. una volta scaricati i pacchetti. che e possono essere disinstallati. che serve e appunto da front-end per tutto il sistema dell’Advanced Package Tool. anche quando questo pu` essere stato sostituito da un altro. ma anche di tutti quelli da cui questo dipende. Tabella 4. insieme alla descrizione dettagliata di tutte le caratteristiche del comando. A questo punto sar` possibile installare un pacchetto con il comando apt-get install nome. e di quelli necessari per a soddisfare eventuali dipendenze. LA GESTIONE DI UTENTI E GRUPPI 159 possibile richiedere l’installazione automatica non solo di un singolo pacchetto. Scarica la lista aggiornata dei pacchetti. eliminarli.4.7: Principali opzioni del comando apt-get. Inoltre in Debian ` stato pure creato un sistema generico per la auto-configurazione automae tica dei pacchetti (chiamato debconf ) che permette. se altri pacchetti dipendono da quello che si vuole rimuovere. Inoltre in genere i pacchetti vengono distribuiti direttamente via rete. il programma a si incaricher` di effettuare automaticamente il download dello stesso. ed in questo e caso. Cancella dall’archivio i pacchetti con vecchie versioni. ` al solito disponibile nella relativa e pagina di manuale. Esegue l’upgrade della distribuzione.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. di richiedere all’utente tutte le informazioni necessarie per la configurazione degli stessi. Cos` oltre alla inı stallazione viene anche eseguita la configurazione di base con la creazione dei relativi file. a Infine il sistema consente una estrema facilit` di aggiornamento del sistema. 3.3. come accennavamo in sez.160 CAPITOLO 4.3. ogni utente ha a disposizione una home directory per i propri file. 9 . 1.3. In questo modo ` possibile e mantenere le informazioni ed effettuare i relativi controlli usando i supporti pi` disparati (server u NIS. ma dovranno anche essere identificate le risorse che gli si mettono a disposizione. 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. come visto in sez.4. Come accennato in sez. server LDAP. Dato che questi. 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. Come avviene per una banca. 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. /etc/passwd e /etc/group. i nomi degli utenti e dei gruppi sono informazioni disponibili solo in user-space. che un utente si e a identifichi appropriatamente. che ` il nome che il sistema associa all’utente.1 Una visione generale Dato che GNU/Linux ` un sistema multiutente abbiamo finora dato per scontato la presenza di e utenti che potessero utilizzarlo. in teoria non ci sarebbe nessuna necessit` di programmi specifici per la loro gestione. 4. proprio per la presenza di un sistema di gestione degli stessi.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. a 4. cui abbiamo accennato a pag. non solo occorrer`. 3.4. Questo ci porta ad una delle caratteristiche fondamentali di un qualunque sistema multitutente: il concetto di account. AMMINISTRAZIONE ORDINARIA DEL SISTEMA le modalit` con cui vengono mantenute all’interno del sistema le informazioni ad essi relative. Questo vale in particolare anche. Nelle prime versioni di Unix tutte le informazioni relative agli utenti ed ai gruppi presenti nel sistema erano memorizzate su due file. che dovranno contentere sia le informazioni necessarie all’identificazione degli stessi che quelle relative alle risorse messe loro a disposizione. che ci conceda l’accesso e l’uso delle risorse.1. come accennato in sez. ma come abbiamo abbondantemente ripetuto in sez. In realt` la questione non ` affatto cos` immediata. e non di quello che si vuole riparare. poich´ in quel caso i comandi e andrebbero ad operare sulla configurazione del sistema di recupero. Ovviamente perch´ questo accada. su cui torneremo in sez. per quella procedura di collegamento al sistema che porta ad avere dei processi che vengono eseguiti dal kernel per conto di un certo utente. Tradizionalmente in un sistema unix-like l’autenticazione degli utenti viene fatta utilizzando un username. e quindi non ` pi` possibile andare ad effettuare le e u modifiche a mano con un editor.1. che di PAM (Pluggable Authentication Method ). vari database.1.). dato che a possono essere modificati a mano con un qualunque editor. Tutte queste informazioni sono quelle che vengono mantenute ed utilizzate dai programmi per la gestione di utenti e gruppi.2. 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.1 a a il sistema prevede anche la presenza di gruppi di utenti.4. 1. viene realizzata da appositi programmi. 4. che tratteremo meglio in sez. come riconoscerli e quali risorse assegnargli. ed una password segreta la cui e conoscenza serve a dimostrare l’autenticit` della propria identit`. ecc. compresa quella che permette il riconoscimento e l’accesso agli utenti. per poter utilizzare il sistema si deve avere un “conto” presso di lui. 72). e quando si collega al sistema gli viene messa a disposizione una shell (la shell di login.1 tutta la gestione del sistema.2.3. 1. come tutti i file di configurazione del sistema. sono file di testo.2. 1. 1. Inoltre. 10 cosa che in certi casi ` comunque utile saper fare. che a loro volta vengono identificati9 da altri nomi (i groupname). ad esempio per togliere una password di amministratore e dal sistema contenuto in un disco montato a mano usando un sistema di recupero. -g il gruppo iniziale. imposta la home directory dell’utente. 4. in particolare il comando permette di cambiare il group ID usando -g. ma prima di operare si assicura che l’utente che si va a modificare non sia collegato alla macchina. legate all’uso delle shadow password che permettono di impostare alcuu ne propriet` delle password (come durata. supportando che deve essere specificata in forma cifrata. Le principali opzioni sono riportate in tab. ecc.2). 4. Infine con -u si pu` impostare un valore specifico per lo user ID. imposta eventuali gruppi aggiuntivi. permette di specificare un user ID gi` esistente. 11 . 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. Il comando prende come argomento il e nuovo username.3). che ` del tutto analogo all’uso di useradd oe e con l’opzione -D. con tanto di creazione di tutti i file contenuti nella directory /etc/skel (vedi sez.8.3. lunghezza minima. ma non imposta la password (che resta disabilitata). specifica un valore numerico per l’user ID. ma si provvede ad eseguire il comando passwd in un secondo tempo. ´ 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. Opzione -b -d -u -p -s -m -g -G -o Significato imposta la home directory. per cui di norma non si usa mai questa opzione.8: Principali opzioni del comando useradd. -m richiede la creazione della home directory. a Tabella 4. 4.2. Per a a questo per` ` disponibile anche il comando usermod. 12 i valori fra 0 e 99 sono usati normalmente per gli utenti corrispondenti ad alcuni servizi di sistema. a L’omologo di usermod per i gruppi ` invece il comando groupmod che permette di modificare e un gruppo.4. l’elenco completo che comprende anche quelle pi` sofisticate. Si tenga presente che di default il comando si limita a creare il nuovo utente. -G eventuali altri gruppi di appartenenza. copia il contenuto di /etc/skel nella home.8 per useradd. 4.3. che permette di aggiungere e un nuovo utente al sistema (cio` di creare un account). imposta il gruppo di iniziale. imposta la shell di default.) insieme a tutti i dettagli a sul funzionamento del comando sono disponibili nella pagina di manuale accessibile con man useradd. Analogo ad useradd ` groupadd che permette di creare un nuovo gruppo. non crea la home directory e non imposta una shell di login. imposta la password. 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.3. e prende le opzioni elencate in tab. 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. 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.11 -s la shell. Oltre che a creare un nuovo utente il comando pu` essere anche usato per modificare le o propriet` di un utente gi` esistente. 3. nel qual caso deve essere invocato con l’opzione -D.2 I comandi per la gestione di utenti e gruppi Il primo comando di gestione che prendiamo in esame ` useradd. inoltre l’opzione -d consente di cancellare la password lasciandola vuota. e possono essere utilizzate solo dall’amministratore. gli utenti o normali possono cambiare solo la propria e solo dopo essersi autenticati con la vecchia.3.9: Opzioni del comando passwd per la gestione delle informazioni relative alle shadow password. bench´ sia una funzionalit` poco nota. Oltre ai precedenti comandi generali. I comandi userdel e groupdel permettono invece di cancellare rispettivamente un utente e un gruppo. e di cambiare il nome del a gruppo con l’opzione -n. imposta il numero di giorno per i quali l’utente viene avvertito prima della scadenza della password. esistono una serie di comandi diretti che permettono di modificare i singoli attributi. Le informazioni complete sono disponibili al solito nelle relative pagine di manuale. Nel caso di groupdel il comando non ha nessuna opzione specifica. il pi` comune ` passwd che permette di cambiare la password. nel u e qual caso non ` necessario nessun argomento. se si vuole anche rimuoverne la home directory13 si dovr` usare l’opzione -r che ` l’unica opzione supportata dal comando. Oltre alla semplice operazione di cambiamento della password il comando supporta molte altre funzionalit` di gestione delle stesse. I secondi eseguono la rimozione dell’utente e del gruppo14 seguendo lo schema specificato nel file di configurazione /etc/deluser. 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. ma si tenga presente che solo l’amministratore pu` cambiare la password di un altro utente. rispetto ai corrispondenti programmi base. mentre userdel si limita a cancellare l’utente. passato i e quali l’account sar` disabilitato. dato che di norma non viene impostata) la password per un gruppo. imposta il numero minimo di giorni dopo il quale una password pu` essere cambiata. 13 .162 CAPITOLO 4. dette opzioni con il relativo significato sono riportate in tab. l’eliminazione dei file non contenuti nella home. di cambiare (o mettere.conf. in particolare per la gestione delle caratteristiche delle a shadow password (su cui torneremo in sez. forzando cos` ı l’utente a cambiarla al login successivo.3). secondo quanto specificato nel file di configurazione /etc/adduser. passati i quali l’utente sar` forzato a a cambiarla. u e L’utilizzo pi` comune ` quello di invocare il comando per cambiare la propria password. -n -w -i -e Tabella 4.9. l’utente non potr` modificarla o a prima che siano passati. il comando chieder` la password corrente e poi e a la nuova password per due volte (la seconda per conferma. da specificare come argomento. imposta il numero massimo di giorni per cui viene accettato il login dopo che la password ` scaduta. AMMINISTRAZIONE ORDINARIA DEL SISTEMA sempre l’opzione -o per poter specificare un gruppo gi` assegnato.conf. a fa scadere immediatamente una password. 14 gestendo anche. in tal caso per` chiunque pu` entrare nel sistema o o conoscendo l’username. il comando permette anche. Oltre alle funzioni di gestione delle shadow password il comando permette anche di bloccare e sbloccare l’uso di un account rispettivamente con le opzioni -l e -u. Infine. 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. onde evitare errori di battitura). usando l’opzione e a -g. Se si specifica un argomento questo indica l’utente di cui si vuole cambiare la password. 4. 4. Opzione -x Significato imposta in numero massimo di giorni per cui la password rimane valida. I primi permettono una impostazione automatica di tutti gli attributi di un nuovo utente. richiedendo quando serve le informazioni necessarie come la password ed il nome reale. Al solito la pagina di manuale riporta la documentazione completa.4. ma solo quando ` stata impostata e una password per il gruppo. in caso di coincidenza si ` ottenuta l’autenticazione. Bench´ questo schema si sia evoluto con l’introduzione e prima delle shadow password e poi di PAM e del Name Service Switch. LA GESTIONE DI UTENTI E GRUPPI 163 Se si specifica anche -r la password presente sul gruppo viene rimossa. 4. 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. 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. la home directory. 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. Questo. 3. . ` da qui che normalmente i programmi come e ls o ps ottengono l’username che corrisponde ad un certo user ID. vedi sez. che permette ad a un utente di cambiare la sua shell di login di (ma solo fra quelle elencate in /etc/shells. o definire degli utenti amministratori del gruppo con l’opzione -A. ecc.2. e oltre a poterne cambiare la password ` in grado di aggiungere altri utenti al gruppo e usando il comando gpasswd. 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.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. a permette all’amministratore di aggiungere utenti a un gruppo con l’opzione -M. In realt` queste non a sono memorizzate in chiaro (il testo della password non viene mai scritto da nessuna parte nel sistema). 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.2) e chfn che permette di cambiare le informazioni mantenute nel campo chiamato Gecos (vedi sez. il rendere leggibile quest’ultimo a non costituiva un problema. che deve essere fornita (altrimenti l’operazione non ` consentita).3. oltre alla capacit` di cambiare la password di un gruppo. Nel file sono mantenute poi anche altre informazioni come la shell di login. 4. Al solito si faccia riferimento alle relative pagine di manuale per la descrizione completa.3. 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. Gli altri comandi per la gestione delle propriet` degli utenti sono chsh.2 nelle prime versioni di Unix tutte le informazioni relative ad utenti e gruppi venivano tenute in due soli file. e Se invecee si fa gi` parte del gruppo non ` necessaria nessuna password. quello che viene memorizzato ` solo il risultato della cifratura della password.3 Il database di utenti e gruppi Come accennato in sez. Solo l’amministratore o l’amministratore del gruppo possono eseguire questo comando. 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. 4. Questo comando permette infatti di cambiare il proprio group ID assumendo quello di un gruppo. in cui si scrivono il nome reale e altri dati relativi all’utente. Se usati con l’opzione -c si pu` specificare un comando da eseguire con i diritti o del gruppo o dell’utente richiesto. quello e che si chiama un hash crittografico. dato che solo se si ` fornita la password originaria si potr` riottenere lo stesso e a risultato. Quest’ultimo ` uno degli utenti del gruppo cui ` stato dato il compito di amministrare lo e e stesso.3.3). Il fatto che il file sia leggibile da tutti pu` far sorgere il dubbio di come si possa avere o una cosa del genere per un file in cui sono memorizzate delle password. questo campo ` detto anche Gecos. cos` che la richiesta ı della password venga disabilitata al successivo riavvio. ad esempio se si ` persa la password di root..3.15 La presenza di una x nel secondo campo del nostro esempio indica che sono attive le shadow password. AMMINISTRAZIONE ORDINARIA DEL SISTEMA Bench´ per la gestione normale degli utenti ci siano gli opportuni programmi di shell (che e abbiamo visto in sez. Il significato e e dei sette campi ` il seguente: e • • • • • nome di login (o username). Il formato del file ` molto semplice..1 riguardo le sezioni delle pagine di manuale. su cui torneremo fra poco. piccardi:x:1000:1000:Simone Piccardi.164 CAPITOLO 4. il valore numerico del gruppo (group ID).:/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. 4.. identificatore numerico del gruppo di default (group ID). per ogni utente deve essere presente una riga composta da 7 e campi separati dal carattere “:”. la lista degli username degli utenti appartenenti al gruppo. Posto che per cambiare shell o le informazioni del quinto campo ` opportuno usare i comandi di shell.2) abbiamo accennato come in casi di emergenza pu` essere utile o modificare a mano il file. per questo occorre sapere come vengono mantenute le informazioni. la password del gruppo (si ricordi quanto visto in sez. identificatore numerico dell’utente (user ID). • shell di login. 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 . 15 si ricordi quanto detto in sez. password cifrata (opzionale). 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. . separati da virgole. In questo caso i campi sono soltanto quattro (sempre separati da “:”) ed indicano rispettivamente: • • • • il nome del gruppo (o groupname). non sono ammessi n´ commenti n´ righe vuote. nome e cognome dell’utente ed eventuali altri campi di commento separati da virgole.2).. 4.3.. Analogo a /etc/passwd per mantenere l’elenco dei gruppi c’` il file /etc/group che contiene e le informazioni ad essi relative.3. in modo da poter entrare per ripristinarla. 2. piccardi:x:1000: .admin .. nel qual caso occorrer` far partire il e a computer con un disco di recupero e togliere la x lasciando il campo vuoto. e • home directory dell’utente (pathname assoluto). in caso di emergenza pu` essere necessario modificare e o questo file... Tutti trucchetti ampiamente noti che qualunque programma decente di password cracking applicher` alle parole del suo dizionario. 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. ci sono 9 campi separati e a con dei “:”. • numero di giorni dall’ultimo cambiamento dopo i quali la password scade e deve essere necessariamente cambiata. Oltre alle password sono memorizzate in /etc/shadow una serie di ulteriori informazioni che permettono un controllo molto pi` dettagliato su di esse. • numero dei giorni precedenti quello di scadenza della password in cui gli utenti vengono avvisati. dati i computer dell’epoca. anche se cifrate. 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. . il cui rispettivo contenuto `: e • nome di login (o username). in cui invece di tutte le combinazioni si provano solo quelle relative ad un dizionario di possibili password. era impraticabile. 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. 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. Il formato del file ` analogo a quelli gi` visti. • numero di giorni che devono passare dall’ultimo cambiamento prima che la password possa essere cambiata nuovamente.4. Per cui anche se spesso gli attacchi a forza bruta non sono praticabili. come date di scadenza. Per questo motivo alcuni anni fa. con la potenza dei computer di oggi a lo ` molto meno. 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. e 16 per i curiosi l’algoritmo originale si chiama DES. oggi ` poco usato per la sua debolezza. invertire delle lettere o mettere un “3” al posto di una “e” o un “1” al posto di una “i”. Bench´ l’algoritmo crittografico con cui si calcolano le password sia piuttosto robusto. Se nel sistema sono state abilitate le shadow password (in genere lo si fa in fase di installazione. a Per questo motivo non ` comunque molto sicuro lasciare leggibili a tutti le password anche e nalla forma cifrata. dato che potrebbero essere soggette ad una analisi di questo tipo. • numero dei giorni successivi a quello di scadenza della password dopo i quali l’utente viene disabilitato. ` comunque piuttosto e semplice (e ci sono un sacco di programmi molto efficienti nel farlo) utilizzare quello che si chiama un attacco a dizionario. nella reimplementazione dei meccanismi di autenticazione. Inoltre anche se oggi ` diventato possibile usare altri algoritmi di crittografia e e che rendono pi` difficile un compito del genere.3. E non giovano neanche trucchetti come quello di scrivere le parole alla rovescia. date in cui u sono state cambiate ecc. • giorno in cui ` stata cambiata password l’ultima volta (espresso in numero di giorni dal e 1/1/1970). • password cifrata. c’` sempre da fare i conti con la pigrizia degli u e utenti che tendono ad usare password come pippo o ciccio e simili. Se quando ` stato creato Unix questa e a e eventualit`.16 e mantenere leggibili le password. In questo caso. • giorno in cui l’utente ` stato disabilitato (espresso in numero di giorni dal 1/1/1970). espone comunque ad un attacco a forza bruta (cio` alla possibilit` che qualcuno tenti di provarle tutte). Tutte le distribuzioni recenti installano di default le shadow password. accessibile con man shadow.. 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. e ` E possibile inoltre effettuare anche la conversione inversa.. PASS_MAX_DAYS e PASS_WARN_AGE presi da login. piccardi:$1$KSRp2lZ3$s9/C2ms0Ke9UTaPpQ98cv1:11189:0:99999:7::: . piccardi:x:: . L’utilit` del sistema delle shadow password. Si tenga presente che login. al solito i dettagli sul significato dei campi si trovano nella pagina di manuale. 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.. essendo le password dei gruppi poco utilizzate anche questo comando non ` molto usato..1.. Inoltre il programma usa i valori di PASS_MIN_DAYS. Si noti come per alcuni utenti la password sia sostituita dal carattere * (talvolta viene usato anche !). a Infine dato che anche i gruppi hanno le loro password. Il formato ` sempre lo stesso. 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. tornando dalle shadow password al . 3.. i campi in questo caso sono 4.defs non viene usato se si utilizza PAM e le relative informazioni sono prese direttamente dalla configurazione di quest’ultimo. di impedire che il corrispondente utente possa eseguire un login. questo ` un modo. ` comunque possibie le effettuare una conversione automatica dal sistema tradizionale usando il comando pwconv. ` che questo consente anche di impostare delle a e politiche di gestione delle stesse. Questo prima rimuove da /etc/shadow tutte le voci non presenti in /etc/passwd. anche queste sono state spostate in un altro file. cosa che a lungo andare fa aumentare le possibilit` che essa venga scoperta. Ad esempio si pu` impostare un tempo di scadenza forzando o gli utenti a non utilizzare sempre la stessa password.defs (vedi sez.. dato che detti caratteri non corrispondono ad un valore possibile e per una password cifrata. ma operante sui gruppi (e relativi file /etc/group e /etc/gshadow) ` e grpconv. poi riporta le password presenti in esso all’interno di /etc/shadow.admin .166 • campo riservato.4) per impostare i rispettivi campi di /etc/shadow). /etc/gshadow. Analogo a pwconv. CAPITOLO 4. e soprattutto.3.3. in questo caso le password verranno reinserite in /etc/passwd ed /etc/shadow. che.4. ma le informazioni aggiuntive (come i dati sulle scadenze delle password) verranno persi. In questo modo si otterr` la stampa delle informazioni degli utenti nello stesso formato in a cui sono mantenute nel corrispondente file tradizionale. l’uso dei file appena descritti.. pur restando ancora oggi quello pi` diffuso. introdotto inizialmente su Solaris e poi portato anche su GNU/Linux. quando le informazioni o sono distribuite su pi` supporti. Dato che in questo caso la richiesta ` pi` sofisticata il sistema sar` e u a pi` complesso. piccardi:x:1002:1002:Simone Piccardi. 4. 4. In questo modo infatti ` molto pi` semplice per le singole applicazioni mantenere un proprio file e u di configurazione. in maniera totalmente trasparente ai programmi scelti. La configurazione di PAM pu` essere effettuata in due modi. cos` che questo ı possa essere. Inoltre il sistema permette a di utilizzare impostazioni diverse per le differenti applicazioni che lo usano. ` solo uno dei metodi per mantenere le informazioni riguardo gli account u e degli utenti. ma anche. dove si sono riportate anche le quattro parole chiave usate nella configurazioni per identificarle..d.... 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. 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. Ogni applicazione che necessita dell’uso del sistema sar` controllata da un apposito file in a /etc/pam. Per questo motivo esaminare il contenuto di questi file non ` detto sia sufficiente ad e identificare tutti gli utenti di un sistema. 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. in breve PAM.. 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 . e stampa a video il risultato. 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. getent. Per questo motivo si pu` utilizzare un apposito comando.4 Il Pluggable Authentication Method La necessit` di una maggiore flessibilit` della gestione degli utenti non riguarda soltanto la a a possibilit` di mantenere su diversi supporti i dati loro associati.d il cui nome corriponde a quello dell’applicazione stessa (si avranno cio` file come e . LA GESTIONE DI UTENTI E GRUPPI 167 sistema tradizionale con i comandi pwunconv e grpunconv.10. consente di interrogare il sistema dal Name Service Switch u per richiedere una lista completa. come accennato all’inizio. 3. in quanto le informazioni potrebbero essere mantenute anche altrove.10. quella a di permettere la gestione di diverse modalit` per gestire l’autenticazione.:/home/admin:/bin/bash 4. 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. sostituito con un altro. Il comando richiede come argomento una delle classi di informazioni gestite dal Name Service Switch fra quelle di tab.1. illustrate in tab.:/home/piccardi:/bin/bash admin:x:1003:1003:Utente Amministrativo. Si ricordi che. 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. A questo provvede il a sistema chiamato Pluggable Authentication Method. 11. fornisce il servizio di verifica dell’identit` di un utente. . fornisce i servizi di preparazione per le risorse che devono essere messe a disposizione dell’utente (ad esempio il montaggio della home directory) all’inizio di una sessione di lavoro e quelli relativi alla liberazione delle stesse alla fine della sessione.10). type. login.). Una forma alternativa di configurazione ` quella dell’uso del file /etc/pam. . gli altri eventuali moduli non vengono chiamati.. o la sintassi completa illustrata nella pagina di manuale di PAM. ecc.d ` il nome del file). accessibile con man 7 pam. ed ` e strettamente collegato ad auth. 4. all’ultimo e dei quali. indica (con le parole chiave di tab.conf in cui si e inseriscono tutte le regole di gestione che starebbero dentro i file di /etc/pam. ecc. una regola ` composta da almeno tre campi separati da spazi (o tabulatori). auth password session Tabella 4. questi prevedono una sintassi semplificata. in cui si utilizza direttamente uno dei valori riportati tab. 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. possono seguire altri campi che specificano degli argomenti. la classe di servizi a cui la regola fa riferimento. 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. control. a in genere sulla base di un meccanismo di sfida/risposta (come dare la password). che indica il modulo da utilizzare.. passwd. a differenza delle precedenti queste sono composta da cinque campi separati da spazi. nella forma: service type control module-path [arguments . e .). si pu` a o accedere al servizio..168 CAPITOLO 4. Il secondo campo. 4.10: Le quattro tipologie di servizi forniti da PAM.] Il primo campo. fornisce il servizio di aggiornamento dei meccanismi di autenticazione (come cambiare la password).17 Il file prevede una linea per ciascuna regola ed al solito si ignorano le righe vuote e quelle inizianti per #. ma . 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. ma pu` essere esteso in mao niera generica (permettendo l’uso anche di dispositivi hardware). required sufficient optional Tabella 4.. il fallimento del modulo comporta il fallimento della procedura di autenticazione. su.11: I principali valori per il campo di controllo dei risultati usati nei file di configurazione di PAM.] dove service indica il nome dell’applicazione cui si applica la regola (quello che con /etc/pam. e 17 se quest’ultima ` presente il file viene ignorato.d. nella forma: type control module-path [arguments . e molti. occorre e prendere l’ultima versione stabile. si pu` ricompilare il kernel della propria distribuzione (in o genere tutte forniscono i relativi sorgenti). 2 si chiamano cos` le modifiche. da applicare ai sorgenti tramite ı il comando omonimo. La scelta della versione di kernel da utilizzare ` in linea generale abbastanza semplice. Le esigenze che portano all’installazione di un nuovo kernel sono in genere due.1 In genere infatti le varie distribuzioni installano una propria versione del kernel.kernel. e i file di configurazione e provvedere alla ricompilazione secondo le istruzioni di sez. Nella maggior parte dei casi il kernel viene installato dalla propria distribuzione durante l’installazione.1. a a ma non ancora incluse nel kernel ufficiale. In questo caso si hanno due scelte. Per stabilire di quale versione si tratta basta andare sul sito ufficiale del kernel.1. 5. modificata applicando vari patch 2 che si ritiene migliorino le prestazioni o la stabilit` ed aggiungono funzionalit` reputate rilevanti. l’installazione. 5.Capitolo 5 Amministrazione straordinaria del sistema 5.3. Conviene comunque dare alcune spiegazioni sul significato dei numeri di versione del kernel: essi sono espressi sempre da tre numeri separati da punti.1 La gestione di kernel e moduli Tratteremo in questa sezione la gestione del kernel.org. al tipo di kernel da utilizzare. 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. Se invece si vuole installare un kernel ufficiale (ad esempio per avere le funzionalit` aggiunte nello a sviluppo effettuato nel frattempo) occorre scegliere una versione adeguata. 1 si chiama cos` il kernel pubblicato su http://www. Qualora si scelga il kernel della propria distribuzione c’` solo da procurarsi i relativi sorgenti. od utilizzare un kernel ufficiale. la prima ` e ottimizzare il kernel per renderlo pi` adatto alla propria configurazione hardware.1 Le versioni del kernel Uno dei primi problemi che ci si trova ad affrontare nella gestione del kernel ` quello della scelta e di versione quale usare. la gestione dei moduli. curato dal mantainer ufficiale (lo stesso Linus ı o chi lui ha delegato al compito). 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. non avendo necessit` specifiche (ad esempio la a mancanza di supporto per un qualche dispositivo) evitano di installarne un altro. in tutti i suoi aspetti: dalla scelta delle diverse versioni. per ottenere una nuova versione degli stessi. 169 . l’utilizzo delle patch e tutto quanto attiene la manutenzione dello stesso. la sua ricompilazione. in forma di file prodotti dal programma diff. 1. il passo successivo ` quello di scaricare e i sorgenti e ricompilarli. lo sviluppo dei quali3 ` e volto alla eliminazione dei bug e alla stabilizzazione del sistema. (nel novembre 2004.x e la 2. di sviluppo.6.4 Questo ci dice che in realt` il nuovo kernel stabile non ` lo poi cos` tanto. Come accennato il sito per la distribuzione delle versioni ufficiali ` e http://www.0. dato a e ı che la nuova serie ` appena nata. Il secondo numero esprime il cosiddetto patchlevel. 3 . cosa avvenuta finora una sola volta (nel passaggio dei formati dei binari dall’a. Si tenga presente che ogni versione stabile ha in genere un suo mantainer (quello delle versioni di sviluppo finora ` sempre stato Linus). e l’eventuale introduzione di un quarto livello di numerazione per tenere conto di eventuali stabilizzazioni di queste release successive. sia pure solo a livello di correzione dei pochi errori restanti. che non prevede per il momento la creazione di nuove serie instabili. La convenzione scelta dagli sviluppatori e ` che un numero pari indica una versione stabile. 5. che ne cura lo sviluppo ed il e rilascio delle nuove versioni. e che viene aggiornato periodicamente con il relativo sviluppo. integrando anche grossi cambiamenti del kernel.4. un numero di versione che cambia solo in caso di fondamentali modifiche strutturali dell’infrastruttura. alla serie 2.1. cio` il e u e kernel 2. in genere ci vuole sempre un po’ di tempo perch´ le nuove e e versioni stabili maturino e possano sostituire completamente le versioni precedenti. Al momento della scrittura di queste dispense (gennaio 2004) l’ultimo kernel “stabile” ` il e 2.x indicavano i kernel sperimentali.6. Possono esistere anche delle buone ragioni (macchine con software vecchio che non gira sulle nuove versioni e che non si pu` aggiornare) o motivi di spazio (i nuovi kernel tendono a consumare pi` risorse e a non supportare pi` piatu u taforme hardware particolarmente ‘datate) che spingono a mantenere l’utilizzo di vecchie serie.out all’ELF). che in genere ha molto carico. mentre un numero dispari indica la versione e sperimentale.2. per cui si consiglia l’uso di uno dei vari mirror italiani disponibili. 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.2 Sorgenti e patch Una volta scelta la versione del kernel da utilizzare. usati per le macchine in produzione. che sono a tutt’ora sviluppate. in cui vengono introdotte tutte le nuove funzionalit` e le modifiche a infrastrutturali che porteranno alla successiva versione stabile. a L’ultimo numero di versione ` infine il numero progressivo che identifica i kernel all’interno e di una serie. ma il a passaggio da una versione stabile alla successiva.24. pare essere cambiata la modalit` di sviluppo del kernel. Per questo al momento ` senz’altro pi` opportuno utilizzare l’ultima versione stabile precedente.170 CAPITOLO 5. nella direzione della stabilizzazione per le serie pari. ecc. nei quali sono state introdotte le nuove funzionalit`. Per esempio i kernel della serie 2.5.x. riscritte parti che non si consideravano soddisfacenti. nella direzione delle nuove funzionalit` ed infrastrutture per a quelle di sviluppo. o eseguano backporting di codice dalla versione di sviluppo.x. nati a partire da un precedente kernel stabile. 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`. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Il primo numero esprime la major version.4.6.kernel. 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`. va presa comunque con prudenza.9).x indicano i kernel stabili. l’indicazione di utilizzare l’ultimo kernel della serie stabile. a 4 dopo alcuni mesi dal rilascio della nuova serie 2. che ` quella che invece cambia periodicamente. che avviene solo quando esse sono state abbondantemente verificate. la cui lista ` segnalata sulla stessa pagina. Questo ci dice che anche se genericamente valida. mentre i kernel della serie 2. come la 2.org. ma indica pi` propriamente una serie di u sviluppo. Al momento la major version ` la 2 e non e sembrano esserci all’orizzonte modifiche tali da giustificare una 3. Questo tra l’altro vale sia per il passaggio da una versione di kernel all’altra.tar. anzi. +EXPORT_SYMBOL(local_flush_tlb_all).6 +163.4.tar.000000000 +0200 @@ -163. l’uso e della propria home directory potrebbe anche essere una scelta migliore.000000000 +0100 +++ linux-2.c 2003-05-15 17:12:38.24.24. che verr` a costituire per l’appunto il patch. che permette di ridurre la quantit` a a di dati da scaricare.4. @@ -196.4.bz2 o tar -xvzf linux-2.4.4. registrando le differenze sia per quanto riguarda i vari file che esse contengono.23 si potr` passare al 2. che permette di indicare quali righe sono cambiate dall’uno all’altro e salvare il tutto su un file.20-ben8-xfs-lolat/arch/ppc/kernel/ppc_ksyms. EXPORT_SYMBOL(_outsl_ns). Il comando diff pu` inoltre essere eseguito o ricorsivamente su due intere directory.1. che per l’applicazione di patch relativi all’installazione di funzionalit` aggiuntive che possono interessare.24 scaricando soltanto il file patch-2. Le righe che iniziano per @@ indicano a quale riga nei due file e fanno riferimento i dati riportati di seguito.24. ma che non sono ancora a incluse nei sorgenti del kernel. 5 . EXPORT_SYMBOL(iopa). EXPORT_SYMBOL(flush_icache_page). EXPORT_SYMBOL(__ioremap).4.4.gz (di norma viene a compresso anche questo). A seconda dei casi il comando da usare ` e tar -xvjf linux-2. EXPORT_SYMBOL(flush_dcache_page).bz2 a o linux-2. mentre la seconda la nuova versione.linux-2. in realt` esiste anche una forma di distribuzione tramite il protocollo rsync. Cos` diventa possibile aggiornare alla versione successiva senza dover ı effettuare dei download di enormi dimensioni. EXPORT_SYMBOL(flush_icache_user_range). Un discorso diverso va fatto qualora si vogliano utilizzare i patch. Per questo occorre capire cos’` un patch: questo ` definito sulla base della differenza fra due e e file (in genere dei sorgenti.24 nella directory corrente.24. nel caso 6 righe del primo file a partire dalla 163. Cos` ad esempio una volta che si abbiano i sorgenti del kernel ı 2. un esempio di ` il seguente: a e --.tar.20-ben8/arch/ppc/kernel/ppc_ksyms. si noti che si tratta di un pathname relativo.4. EXPORT_SYMBOL(iounmap).6 +197. la prima riga qui indica il file originale.gz In genere si tende a mettere detti sorgenti in /usr/src ma nella procedura di compilazione ed installazione niente obbliga a questa scelta.7 @@ EXPORT_SYMBOL(_outsw_ns). in modo che sia possibile evitare di riscaricare da capo l’archivio completo tutte le volte. Una volta scaricati gli archivi si dovranno scompattare questi ultimi che creeranno una directory linux-2.c 2002-11-23 10:52:30. 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. EXPORT_SYMBOL(xchg_u32). EXPORT_SYMBOL(ioremap).a quelle tolte.4. e 7 del secondo a partire sempre dalla stessa riga.tar. il cui nome sar` qualcosa del tipo linux-2. +EXPORT_SYMBOL(ioremap_bot). LA GESTIONE DI KERNEL E MODULI 171 che in HTTP) e sono disponibili in tre forme. Cos` si pu` passare da una versione di un programma alla successiva traı o smettendo solo le differenze nel relativo sorgente. dato che non ` necessario usare root per la compilazione. #ifdef CONFIG_ALTIVEC EXPORT_SYMBOL(last_task_used_altivec). che per l’aggiunta o la rimozione di alcuni di essi. ma la cosa vale per qualunque file di testo).5 le prime due sono degli archivi completi in formato tar compressi o con bzip2 o con gzip.5.7 @@ EXPORT_SYMBOL(flush_dcache_range). che ha come origine la directory in cui si trovano i due diversi alberi quando ` stato eseguito il diff.4. Si pu` poi salvare il o tutto su unico file. Le differenze sono mostrate apponendo un + alle righe aggiunte nel secondo file ed un . EXPORT_SYMBOL(_insl_ns). cos` come prodotta dal ı comando diff.gz (il primo ` pi` compresso e si scarica pi` velocemente.24. Il livello 0 usa semplicemente quanto specificato nel patch stesso.24. u Come accennato il comando per applicare un patch ` appunto patch.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. ma proseguire nell’applicazione non a . 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. in modo da convertirlo nella nuova versione. e non e devono quindi essere specificati.4.24 mantiene anche quelli della versione 2. Il meccanismo ` del tutto generale. fintanto che questi non u andranno ad operare esattamente sulle stesse righe degli stessi file eseguendo modifiche incompatibili fra di loro. ma nel caso appena illustrato questo non funzionerebbe. se per` ci si o ponesse direttamente dentro la directory linux-2. se lo desidera. Cos` o ı se chi dispone dei nuovi sorgenti del kernel 2. ignorando le directory presenti nel pathname relativo. Cos` diventa possibile inserire nel kernel anche pi` funzionalit` aggiuntive. in quanto non si sarebbe in grado di trovare il file di destinazione.4. potr` generare un patch delle differenze. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Con il comando patch si pu` invece compiere l’operazione inversa. Se il comando non riesce ad applicare un patch (ad esempio perch´ se ne ` gi` applicato a e e a uno incompatibile. su un intero albero di file e directory. o saltare da una versione di kernel ad un altra che non sia la successiva applicando in successione pi` patch. Si tenga presente per` che se si tenta di applicare lo stesso patch o una seconda volta si avr` proprio questo comportamento.23. nel qual caso avvisa richiedendo il permesso di applicare il patch alla rovescia. 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.4. ed inoltre il comando patch ` sufficientemente intelligente e e da essere in grado di applicare anche pi` patch distinti in successione.172 CAPITOLO 5. a In questo caso per capire il funzionamento del comando occorre rifarsi all’esempio di patch mostrato in precedenza.diff nel qual caso. Per questo motivo di norma bisogna dire al comando. questo pu` essere richiesto esplicitamente con o l’opzione -R (o --reverse). e cio` applicare ad un certo o e file le differenze ottenute con il metodo precedente. ı u a fintanto che queste non interferiscono fra loro.rej e a che contengono le modifiche che ` stato impossibile effettuare. usando l’opzione -p. da quale livello di directory nell’albero dei sorgenti si vuole partire per applicare il patch. ad e esempio si sono scompattati i sorgenti nella directory linux-2. cos` che un utente possa.24. per cui in genere l’applicazione fallir`. per cui occorrer` usare una redirezione. 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. il comando ricerca (a partire dalla directory corrente) il file che considera la vecchia versione e cerca di applicarvi le differenze.23 ma non si ha la directory linux-2. Inoltre patch ` in grado di e e rilevare il caso in cui si prodotto il patch invertendo le versioni. il default di patch ` di utilizzare solo il nome e del file. 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. applicarle senza dover ı scaricare tutto un nuovo albero dei sorgenti. inoltre in questo caso il comando legger` il contenuto del patch a dallo standard input. La cosa pu` essere effettuata anche ricorsivamente.4. che applicato a questi ultimi li trasformer` in quelli a a del 2.diff Si tenga presente che se non si specifica un livello. la nuova versione prender` il posto dell’originale. a meno che non si sia specificata l’opzione -b (o --backup) per richiedere un backup. o si ` sbagliato file) generer` dei automaticamente dei file terminanti in .23 cancellando il primo livello di directory tutti i pathname relativi sarebbero risolti.4. 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. a Per risolvere questo problema ` allora possibile definire una versione “personalizzata”. Pertanto tutto la procedura ` controllata dal Makefile principale e presente nella base della directory dei sorgenti.2. Ci` o comporta che ogni kernel deve avere la sua versione dei moduli.4) ` quella di essere modulare. che aggiungono le funzionalit` ulteriori o il supporto per l’uso a di certi dispositivi. in realt` come vedremo in sez. che sono identificati.1. Un primo aspetto dell’uso dei moduli ` che quando e si usano diverse versioni del kernel devono essere usate anche diverse versioni dei moduli. accessibile o con man patch. che ` /lib/modules/‘uname -r‘. La vere sione del kernel ` indicata dai sorgenti. L’uso dei moduli ha pertanto una grande rilevanza e deve essere pianificato accuratamente in fase di compilazione e configurazione. dette moduli. LA GESTIONE DI KERNEL E MODULI 173 sarebbe corretto. Questa.1. viene eseguita tramite il comando make. 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. 4. in quanto nel caso del kernel non esiste uno script di configurazione. 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). 4. ma nel caso non viene utilizzata la procedura illustrata in sez. A differenza cio` degli altri sistemi unix-like in cui il e e kernel ` un unico programma monolitico.1. 5. e e che sono nella forma: VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 23 EXTRAVERSION = -ben1 KERNELRELEASE=$(VERSION). 5. ed ` codificata nelle prime righe del Makefile principale. o modificarle senza bisogno di un riavvio (basta rimuovere il modulo e ricaricarlo con le nuove opzioni).$(SUBLEVEL)$(EXTRAVERSION) si ricordi quanto accennato in sez. caricato in memoria all’avvio del sistema ed in cui e devono essere inserite tutte le funzionalit` che si vogliono usare. come per la maggior parte dei pacchetti o che si installano dai sorgenti. solo quando servono. ma tutto viene gestito attraverso una procedura di costruzione dedicata. che gli permette una flessibilit` di e u a ´ utilizzo che gli altri kernel non hanno. e le varie operazioni sono compiute invocando gli opportuni target 6 del comando make. Una delle caratteristiche peculiari di Linux (torneremo sull’argomento in dettaglio anche in sez.1 relativamente al funzionamento di questo comando. come quest’ultimo.7 Sorge allora un problema quando si vogliono ottenere due (o pi`) kernel diversi a partire dagli stessi u sorgenti.4.2.$(PATCHLEVEL). Per tutti i dettagli sul funzionamento del comando e sul significato delle opzioni si pu` al solito fare riferimento alla pagina di manuale. per questo esiste l’opzione -N (o --forward) che indica di ignorare i patch che sembrano invertiti o gi` applicati. quella che viene mostrata dal comando uname -r. creata dagli stessi sviluppatori. 5.1.5. i moduli sono identificati soprattutto per la directory in cui sono a mantenuti. dato che in questo caso la versione sar` la stessa. Questa ` una delle caratteristiche pi` rilevanti di Linux. E possibile infatti modularizzare lo sviluppo del kernel separandone le funzionalit`.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. per la relativa versione.1. indicare opzioni specifiche per la gestione di un dispositivo in fase di caricamento. e 7 6 . 6. tutte le altre configurazioni sono gestite in maniera indipendente. come quello dei programmi ordinari. che ` sicuro. Si noti allora la presenza. Quanto necessario a svolgere questi due compiti. che pu` essere usata per o compilare kernel per una architettura diversa dalla propria (ad esempio un kernel per PowerPC su una macchina Intel). questo pu` avvenire solo per errori fatali durante l’esecuzione dello ı o stesso (in caso di bug particolarmente gravi. 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. quelle attivate non sono commentate ed assegnate al relativo valore. 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. Una volta che si sia specificato quanto voluto. o in fase di boot quando mancano le componenti essenziali per l’avvio del sistema. o e essere in vena di sperimentazione). 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. in cui si scelgono quali funzionalit` e a attivare e quali no.o. il kernel verr` costruito di conseguenza. in questo modo. il primo passo per la compilazione del kernel ` quello della configurazione. assai meno rari). a Tutto questo viene fatto.ko al posto di e . 8 . o di problemi hardware. e l’uso dei moduli e consente di ripetere il procedimento sul codice del kernel che sta girando. 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. della variabile EXTRAVERSION. il che significa che si deve essere in grado di leggere i relativi file oggetto. che permetta di tenere separati kernel diversi (ad esempio per le opzioni di compilazione che si sono scelte) ottenuti a partire dagli stessi sorgenti. Per il primo compito occorre il supporto per accedere al dispositivo su cui si trova la radice e quello per il relativo filesystem. tramite il contenuto del file . e quali utilizzare come moduli. ` un file che contiene il codice compilato di una o pi` e u funzioni. e 10 si chiama cos` un crash fatale del kernel. dove sono memorizzate tutte le opzioni di configurazione. a meno di non sapere esattamente quello che si sta facendo. e le opzioni per le ottimizzazioni del gcc (che ` meglio lasciar stare al e valore di default. che serve appunto a specificare un ulteriore identificativo di versione. in genere identificato dall’estensione . dal punto di vista della compilazione e della costruzione del kernel. anche se modularizzabile. attraverso la modalit` a che vedremo pi` avanti.config. sempre nella directory base dei sorgenti.8 dato che questi non sono altro che codice. nel caso conta solo il contenuto). alcune indicano dei vaun file oggetto.9 Questo comporta allora che le funzionalit` del a kernel necessarie ad accedere al supporto su cui si trovano i moduli non possono essere ottenute con l’uso di questi ultimi (e dovranno essere inserite all’interno del kernel in maniera monolitica). pena il fallimento dell’avvio con un kernel panic.x li si ` distinti dai normali file oggetto usando l’estensione . anche se un po’ particolare. 9 ed infatti a partire dalla serie 2. questo ` anche quello che si fa quando si produce l’immagine del kernel. Le uniche altre eventuali (anche se poco probabili) modifiche che si posu sono voler fare al Makefile riguardano la variabile CROSS_COMPILE. appositamente predisposta. in cui per` gli indirizzi non sono stati assegnati.o (ma si ricordi che l’estensione in Unix ` solo una convenzione. per il secondo il supporto per l’uso del formato binario di esecuzione dei programmi. quali mettere direttamente dentro il kernel.174 CAPITOLO 5. dovr` comunque a essere inserito permanentemente nel kernel. 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. molto rari.10 A parte le eventuali modifiche del Makefile per modificare la EXTRAVERSION. 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). a meno di non sapere esattamente quello che si sta facendo. Come scritto nell’estratto illustrato in precedenza normalmente . si rischia di attivare opzioni incompatibili fra di loro o inconsistenti. con finestre e men` che permettono di selezionare inteu rattivamente le varie opzioni ed effettuare le relative scelte in maniera casuale.1. qualora l’opzione faccia riferimento ad una funzionalit` che pu` essere a o modularizzata. questo talvolta fallisce in quanto per la compilazione necessitano le librerie ncurses su cui ` basata l’interfaccia a finestre.config e si voglia essere sicuri di ottenere un file di configurazione coerente.5. ` basata sulle librerie GTK. 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. Le due interfacce. mostrata in fig. “m”.1: Schermata di avvio della configurazione del kernel con make menuconfig. Eseguendo make menuconfig nella directory dei sorgenti del kernel si otterr` la pagina di a avvio del programma di configurazione. Questo pu` risultare utile qualora si siano effettuate modifiche a mano o del file . per cui occorre ricominciare da capo. indica la codifica dei vari codici ASCII per le stringhe. la prima. ma opportunamente generato. accessibile e con make gconfig.x le interfacce grafiche sono diventate 2.6. dato che. a parte l’apparenza. o. Gli altri due target sono menuconfig e xconfig che attivano invece due interfacce utente.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). testuale la prima e grafica la seconda. invocabile con il target oldconfig che si limita a rileggere e riprocessare il file di configurazione precedente ricavando da questo. Il primo target ` config. sono sostanzialmente equivalenti. Ovviamente eviter` di eseguire ulteriori domande qualora non si attivi una a che le prevede opzione. . ma il procedimento ` comunque molto scomodo in quanto non esiste un e meccanismo per correggere una impostazione una volta che si sia fatto un errore. 5. senza serializzare le domande. le risposte alle domande. e Figura 5. A partire dal kernel 2. sempre accessibile con make xconfig ` basata sulle librerie QT. a parte per una sua versione e modificata. invece che dalle nostre risposte sul terminale. Pertanto ` oggi praticamente in disuso. Di norma e 11 il Native Language Support. come iso8859-1. In genere il programma viene compilato la prima volta che si esegue il relativo bersaglio. per cui tratteremo solo la prima. Per questo la configurazione viene eseguita invocando make con uno dei target di configurazione. la seconda.config non deve essere scritto a mano. 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. I valori fra parentesi angolari indicano invece le opzioni relative a funzionalit` che possono a essere anche modularizzate.2. 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. 5. qualora a anch’essi fossero assenti). seguito da un breve riassunto dei principali comandi disponibili. uscire dalla finestra corrente e ottenere una finestra di aiuto (contestuale all’opzione selezionata). 12 . La finestra di avvio riporta nella prima riga in alto la versione del kernel. un esempio della quale ` mostrato in fig. 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. uno spazio vuoto che non ` attivata.176 CAPITOLO 5. quelli indicati fra parentesi tonde sono per le opzioni che richiedono un valore generico. se si ` modificata e la EXTRAVERSION questa dovr` comparire. 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. premendo la barra si pu` ciclare fra le due opzioni. e per Debian sono ncurses e libncurses-dev. I valori delle opzioni sono riportati e all’inizio di ogni riga. 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. Dal men` principale ` possibile selezionare una sezione premendo invio (a meno di non aver u e cambiato l’opzione di selezione). e questo ci porter` nella finestra di configurazione delle relative a opzioni. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA queste vengono installate. Nella parte bassa ci sono le tre opzioni principali che permettono di selezionare una opzione.2: Schermata di configurazione del kernel con make menuconfig. per cui ` sempre il caso di usare i relativi pacchetti. nel qual caso o le successive descrizioni appariranno indentate. Subito sotto c’` il titolo della sezione in cui ci si trova a e (nel caso ` il men` principale). molte di queste opzioni per` servono anche per attivare ulteriori configurazioni o o specificare caratteristiche di un’altra opzione (che pu` anche essere modulare). ma non altrettanto avviene per i file di dichiarazione necessari alla compilazione. Un asterisco indica che la o funzionalit` ` attivata. nel qual caso andr` installato il relativo pacchetto12 (e quelli delle glibc. Figura 5. che possono essere cambiate con le frecce orizzontali. le opzioni “pericolose” vengono ampiamente segnalate nelle relative descrizioni. LA GESTIONE DI KERNEL E MODULI 177 ` optato per la creazione del relativo modulo. 14 13 .5.config.4. u General setup Questa ` la sezione dove si attiva il supporto per le funzionalit` principali del kernel. Processor type and features Questa sezione contiene le opzioni relative alla scelta del tipo di CPU presente.14 questo pu` comportare problemi qualora si vogliano utilizzare moduli compilati a parte o o distribuiti in forma binaria. pertanto ci limiteremo ad una descrizione sommaria del contenuto delle varie sezioni del men` principale. senza il quale non ` possibile lanciare nessun e e programma).config. si pu` o disattivare la seconda. Il supporto per il formato ELF (Kernel support for ELF binaries) deve essere sempre incluso nel kernel (` il formato standard degli eseguibili. Sempre qui vanno attivate le opzioni per l’uso di grandi quantit` di memoria (High Memory a Support) quando si ha pi` di 1Gb. che permettono di salvare i valori della configurazione su.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.1. un file specificabile dalla solita riga di immissione dei dati. e per alcuni servizi interni. per la rete. Loadable module support In questa sezione si attivano le opzioni per abilitare la gestione dei moduli ed il relativo supporto nel kernel. come nel men` principale). e a in particolare per i vari tipi di bus. se invece si ha un “*” la funzionalit` sar` inserita e a a direttamente nel kernel. Questo pu` comunque essere ottenuto o con delle semplici copie del file . cosicch´ le relative e funzioni possono essere chiamate solo all’interno dello stesso kernel. In genere deve essere sempre abilitato il supporto per il bus PCI e per la rete (Networking support e PCI support). o caricarli da. Data la quantit` (alcune centinaia) delle opzioni disponibili non ` possibile commentarle a e tutte. sovrascrivendo un nuovo . il formato degli eseguibili. e a u a e comparir` una finestra che richiede se si vuole che le nuove configurazioni siano salvate o a scartate. Due opzioni specifiche per il men` principale sono poi quelle disponibili separatamente in u fondo allo stesso. se si ` gi` nel men` principale invece si uscir` effettivamente dalla configurazione. Altre due opzioni essenziali (necessarie al funzionamento moltissimi programmi) sono System V IPC e Sysctl support. quelle disponibili con i kernel della serie 2. Le opzioni sono tre e in generale si possono attivare tutte. in realt` ` sempre il caso di attivarla ae in quanto buona parte delle opzioni sperimentali sono ampiamente utilizzate e perfettamente funzionanti. 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. u il meccanismo funziona aggiungendo una checksum a tutti i nomi dei simboli del kernel. Di particolare importanza ` poi l’opzione per il Sime metric multi-processing che consente l’uso di macchine multiprocessore. con le opzioni per il supporto di vari insiemi di istruzioni estese (MTRR (Memory Type Range Register) support). 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. Una u volta che si sono effettuate le proprie scelte selezionando la voce di uscita si pu` tornare al men` o u precedente. alcune di queste sono presenti solo nelle versioni pi` recenti. Packet socket e Unix domain sockets. SCSI support Questa sezione contiene le opzioni per il supporto dei dispositivi SCSI (dischi. Pu` o essere completamente modulare. oltre al supporto per il proprio chipset. 6.) e dei vari chipset. nastri). ecc. CDROM. vari disk-array e RAID hardware. Multi-device support Questa sezione contiene le opzioni per abilitare il supporto del RAID software (vedi sez.178 CAPITOLO 5. ATA/IDE/MFM/RLL support Questa sezione contiene le opzioni per il supporto del bus IDE. RAM disk support e Loopback device support.2). Sono da attivare TCP/IP networking. 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. ed usare questo come ponte fra linea telefonica normale e VoIP. L’opzione SCSI support deve essere abilitata anche se non si hanno dispositivi SCSI in quanto il protocollo viene usato da altri sistemi. ATA and ATAPI Block devices le due opzioni Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support e Include IDE/ATA-2 DISK support. tutto il resto ` pu` essere modulare. di tutti i relativi dispositivi (dischi. 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. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Memory Technology Devices Questa sezione contiene le opzioni relative ai supporti di memoria opzionali come flash. o Networking options Questa sezione contiene le opzioni relative alla rete. e dei vari controller. Inoltre ` utile attivare l’opzione Use PCI DMA by default e when available altrimenti l’I/O su disco risulterebbe estremamente rallentato. o Block devices Questa sezione contiene le opzioni per abilitare il supporto di una serie di dispositivi a blocchi (i floppy. per gli ultimi due ` possibile e farlo anche in maniera modulare. utilizzate prevalentemente nei sistemi embedded. memorie a stato solido ecc. Pu` essere completamente modulare. 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. del relativo protocollo. A meno di non avere la radice su uno di questi dispositivi il supporto pu` essere modulare. CD. 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. che consentono di telefonare direttamente dal computer. Parallel port support Questa sezione contiene le opzioni relative al supporto per la porta parallela. Se si usa dhclient ` altres` necessario il supporto e ı per il Socket Filtering. i RAM disk e il loopback). A meno di non avere la radice su uno di questi dispositivi il supporto pu` essere modulare. come i programmi per la masterizzazione (che usano l’emulazione . ) e del Logical Volume Manager (vedi sez. necessarie per poter utilizzare i dispositivi (ad esempio una stampante) ad essa collegati. SCSI disk support ed il supporto per il proprio controller pu` essere o ` modulare. LA GESTIONE DI KERNEL E MODULI 179 IDE-SCSI) e le chiavi di memoria USB (che usano il protocollo SCSI per vedere la memoria come un disco). E 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). Character devices Questa sezione contiene le opzioni di configurazione per una serie di dispositivi a caratteri. Per poter utilizzare connessioni da remoto (ad esempio con ssh) ` poi e ´ necessario il supporto per gli pseudo-terminali (Unix98 PTY support). joystick ed altri dispositivi di interazione (detti Human Interface Device su USB. ISDN subsystem Questa sezione contiene le opzioni per il supporto dei dispositivi ISDN e dei relativi protocolli.5. Ampiamente in disuso. tastiere. Pu` essere inoltre utile abilitare il supporto per l’orologio o in tempo reale (Enhanced Real Time Clock Support). Old CD-ROM drivers Questa sezione contiene le opzioni per il supporto dei vecchi CDROM pilotati direttamente dalla schede audio.25. 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. Fusion MPT device support Questa sezione contiene le opzioni di configurazione per una scheda LSI Logic Fusion. IEEE 1394 (FireWire) support Questa sezione contiene le opzioni per il supporto delle interfacce e dei protocolli per il bus Firewire. usato dai radioamatori per la trasmissione dati via radio. detto anche Packet radio. ecc. o Amateur Radio support Questa sezione contiene le opzioni per la configurazione del protocollo AX. pi` il supporto per alcuni protocolli u di comunicazione di basso livello (PPP. Se non si ha la radice su un disco SCSI tutto tranne SCSI support. per l’uso del bus AGP (/dev/agpgart (AGP Support)) e per il supporto delle accelerazioni grafiche (Direct Rendering Manager) attraverso la interfaccia DRI di XFree86. Qui pu` essere abilitato il supporto per la stampante su parallela (Parallel o printer support). 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).) e dispositivi virtuali. a meno di non avere la radice su un filesystem di rete. . IrDA (infrared) support Questa sezione contiene le opzioni per il supporto dei dispositivi di comunicazione ad infrarossi (le porte IrDA). Input core support Questa sezione contiene le opzioni per il supporto per mouse. E presente una sottosezione per selezionare il supporto per i vari tipi di controller. SLIP. 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).1. Il supporto pu` anche essere modulare. 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 This file should contain the names of kernel modules that are to be loaded at boot time. Una seconda direttiva ` option..5.1. Inoltre ci sono due parole chiave che si possono specificare al posto del modulo. quando ` stato introdotto il nuovo sistema).. a Infine la direttiva path permette di specificare le directory in cui eseguire la ricerca dei moduli. Il formato del file ` sempre e lo stesso. and everything on the line after them are ignored. Un elenco delle altre principali direttive. fra parentesi quadre.4. Un possibile esempio di questo file `: e # # # # # /etc/modules: kernel modules to load at boot time. se si vuole che queste vengano mantenute si utilizzare la direttiva keep prima di specificare qualunque direttiva path. e Un altro file utilizzato da Debian per la gestione dei moduli ` /etc/modules. ` riportato in tab.. 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. LA GESTIONE DI KERNEL E MODULI . Si tenga comunque presente che con il kernel 2. ogni linea deve contenere il nome di un modulo. one per line.*/ path[net]=/lib/modules/‘uname -r‘/net nella prima si indica semplicemente una directory. con relativa descrizione. con off si indica a modprobe di ignorare le richieste di caricare quel modulo..0. accessibile con man modules. 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. 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. Comments begin with a #. anche se non viene caricato niente.conf. mentre nella seconda si specifica anche. che contiene e la lista dei moduli che si vuole siano caricati all’avvio del sistema. Alla direttiva si pu` apporre un add che fa si che i parametri specificati vengano aggiunti ad altri o eventualmente gi` presenti. alias alias alias alias alias alias . le linee vuote o che iniziano per # vengono ignorate. una etichetta che identifica una classe di moduli (se non specificata si assume il valore misc). per e l’elenco completo e delle spiegazioni pi` dettagliate si pu` al solito fare riferimento alla pagina u o di manuale. 5.5. alias alias .48. . e che quanto illustrato finora fa riferimento solo alle versioni e precedenti (per essere precisi fino al kernel 2. con null invece si fa si che la richiesta abbia comunque successo.6 il meccanismo di caricamento dei moduli ` stato completamente riscritto. questa ha due diverse forme possibili: path=/lib/modules/2... Abbiamo visto che molti moduli possono prendere dei parametri che consentono di specificarne il comportamento. Tabella 5. il comando non prende opzioni (a parte le classiche -h e -V) n´ e argomenti.4: Principali direttive del file di configurazione modules." 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.4.23-ben1/kernel/drivers/char/drm/radeon. Keith Whitwell. per la descrizione completa si pu` fare riferimento alla relativa pagina di manuale. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Opzione path keep option alias pre-install install post-install pre-remove remove post-remove Significato definisce una directory dove cercare i moduli. definisce un comando da eseguire prima di caricare il modulo specificato.188 CAPITOLO 5. definisce un comando da eseguire dopo aver caricato il modulo specificato. definisce un comando da eseguire dopo aver rimosso il modulo specificato. definisce un comando da eseguire prima di rimuovere il modulo specificato.o description: "ATI Radeon" author: "Gareth Hughes. il pacchetto modutils contiene altri comandi di gestione. definisce un comando da usare al posto di insmod per caricare il modulo specificato. Un esempio del comando ` il seguente: e e anarres:/home/piccardi# modinfo radeon filename: /lib/modules/2. #ide-floppy auto # # I2C adapter drivers i2c-isa i2c-ali15x3 # I2C chip drivers w83781d eeprom Oltre ai comandi per il caricamento dei moduli. definisce un parametro opzionale da passare al modulo quando viene caricato. mantiene le directory predefinite per la ricerca dei moduli . others. un esempio di questo comando `: e .conf. definisce un comando da usare al posto di rmmod per caricare il modulo specificato. 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. la principale delle quali ` la lista dei parametri supportati dal modulo. definisce un nome da associare a un modulo. Il comando e supporta una serie di opzioni che gli permettono di stampare solo alcune delle informazioni disponibili. o Infine il comando lsmod permette di ottenere la lista dei moduli caricati in memoria e tutte le informazioni ad essi relative. 1. facendo riferimento ad un determinato piatto nel disco.4. e quindi la capacit` del disco. La terza colonna indica quante volte ` usato il modulo. Un modulo il cui conteggio di utilizzo non sia nullo non pu` essere rimosso. In genere. lo spazio disponibile sui piatti magnetici di un disco viene suddiviso in blocchi elementari di dati.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. per passare al partizionamento ed ai relativi programmi. delle dimensioni di 512 byte. Tratteremo inoltre la gestione dei filesystem per quanto riguarda quelle tutte le operazioni (come creazione. in sostanza vedendo il disco come un cilindro questo parametro indicava la coordinata in altezza lungo l’asse dello stesso. lo stesso vale se o il modulo ha altri moduli che dipendono da lui. da cui il nome sector e la sigla S. Dal disco si pu` sempre o leggere un settore alla volta (e non un singolo byte).5. 5.2. che ` gi` stato trattato in sez. e a 5. e quando se ne vuole identificare le dimensione si indica i rispettivi valori massimi di questi tre parametri (la terna chiamata CHS).2. da cui il nome cylinder e la sigla C. chiamati settori. infine l’ultimo gruppo indicava come muoversi lungo la coordinata radiale. da cui il nome head e la sigla H.2. questo viene fatto direttamente dal kernel (o dal BIOS) che dice all’interfaccia hardware di leggere un determinato settore fornendogli l’indirizzo dello stesso. Il secondo gruppo serviva per muoversi lungo la coordinata angolare all’interno di un piatto. Per questo ancora oggi si parla di geometria di un disco. riparazione e modifica dei parametri interni) che non sono direttamente connesse all’uso ordinario (montaggio e smontaggio). a meno di non usare l’opzione -r di rmmod. moltiplicando i quali si ottiene il numero totale dei settori. mentre la seconda le sue dimensioni. a . mentre l’ultima colonna indica se il modulo ` e e inutilizzato o marcato per la rimozione (fra parentesi tonde) e quali altri moduli dipendono da lui (fra parentesi quadre). Le prime interfacce IDE separavano fisicamente le linee di indirizzamento che consentivano richiedere la lettura di un particolare settore all’interno del disco in tre gruppi.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. Un primo gruppo serviva per indirizzare le testine dei diversi piatti. 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. e per questo sono dispositivi a blocchi. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Il problema ` che nelle prime interfacce IDE c’era una separazione fisica delle linee che e indicavano questi indirizzi.2.31 specificando semplicemente un e numero di settore che cresce linearmente da 0 al valore massimo. e 6 per i settori. pari a 504Mib. in cui anche e per i dischi IDE l’accesso ` eseguito. 31 il protocollo SCSI non ha mai avuto problemi di geometria. pari a circa 8. 4 per le testine. come per i dischi SCSI. e per loro deve essere usata la vecchia interfaccia. la dimensione massima ottenibile con questa interfaccia ` di un totale di 1024x256x64 e settori. LILO non sar` in grado di leggerlo. Ma per mantenere la compatibilit` con i a sistemi operativi che usavano il BIOS. sector e cylinder e coordinate fisiche del settore indirizzato ` andata persa quasi subito. ma che si pu` presentare ancora quando si e o mettono dischi nuovi su macchine molto vecchie. una terna di valori indicanti appunto il numero di cilindro.30 ed in particolare 10 bit erano utilizzati per indicare il cilindro. che richiedeva. Resta il problema che alcuni sistemi operativi e vari programmi non sono in grado di utilizzare questa nuova interfaccia. 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. Questo ` un problema che in tutti a e i computer moderni ` abbondantemente superato.4GiB. ma a questo punto ci si e o ` trovati di fronte al limite non pi` superabile delle restrizioni sui valori massimi di cilindro. per accedere ad un certo settore. per cui non risente affatto delle limitazioni del BIOS. 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. e u testina e settore. Anche il BIOS usava questa suddivisione nella routine di accesso al disco (la INT13). per un totale di 1024x16x63 settori. da cui deriva il famoso problema di non poter accedere a dischi oltre il 1024simo cilindro che affligge i BIOS pi` vecchi. anche se poi il BIOS si doveva inventare una geometria per poter usare le sue routine di accesso. testina e settore. dato che il kernel ` in grado di accedere nativamente all’interfaccia IDE ed indirizzare direttamente l’accesso ai e singoli settori. 30 . Questi venivano passati tramite il contenuto di alcuni registri del processore. 6 bit per indicare il settore ed 8 bit per la testina. Questo per` comporta che la o vecchia interfaccia non ` pi` utilizzabile.190 CAPITOLO 5. a lungo considerato un limite irraggiungibile. La corrispondenza diretta fra valori di head. Il limite irraggiungibile ` stato per` raggiunto piuttosto presto. 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. 5. Dato che il parametro indicante la testina ` e di 8 bit. 10 linee servivano per indicare il cilindro. 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 5. In genere il problema della geometria non si pone assolutamente per Linux.2. l’interfaccia di accesso di quest’ultimo ` rimasta invariae ta. ma pu` essere un problema quando nella prima partizione si ` installato Windows e o e questa ` troppo grossa. non appena i dischi han cominciato a superare le dimene sioni massime previste dall’interfaccia IDE originale. ed i sistemi operativi e le vecchie versioni di LILO u che sono in grado di usare soltanto l’interfaccia originaria. dato che ha sempre previsto l’uso di un valore lineare per indicare il settore. 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.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. il problema invece si pone per un bootloader come LILO che dovendo stare nei pochi byte a disposizione nel Master Boot Record (vedi sez. indipendentemente dalla geometria reale del disco. Tutto questo ` stato superato con l’introduzione del Linear Block Addessing. l’accesso ad un settore veniva eseguito direttamente dall’hardware in maniera trasparente. quello che viene chiamato. 1. o Alpha) non hanno questo limite. dato che ` sempre l` che viene installato e ı il bootloader per l’avvio del sistema. che in tutte le distribuzioni pi` recenti ` in grado di eseguire il compito in maniera semi-automatica. che hanno programmi diversi. u Come accennato in sez. 5.5. 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). Prima di entrare nel dettaglio del funzionamento di fdisk e derivati ` comunque oppore tuno dare alcuni cenni sui criteri base del partizionamento. occorre utilizzare un apposito programma. Per superare questa limitazione e dell’architettura PC sono state introdotte le cosiddette partizioni logiche o estese. in modo da poterne utilizzare di altre. Una parte di questo settore costituisce la cosiddetta tabella delle partizioni. l’unica opzione che ha senso usare ` -l che si limita a stampare la tabella delle partizioni presente. fdisk. Quando il comando viene lanciato stampa un messaggio di benvenuto. 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. mentre /dev/hdb5 ` la prima partizione logica e del secondo disco del primo canale IDE. in numero pi` elevato. le partizioni primarie successive (nel caso la terza e la quarta) non saranno pi` utilizzabili. testine e settori possono essere modificati anche all’interno del comando). Un esempio del risultato del comando ` il seguente: e 32 su un PC. cos` ad esempio /dev/hda2 ` la seconda partizione ı e primaria del primo disco del primo canale IDE. mentre quelle logiche iniziano dal 5. ma noi e u faremo riferimento solo a questo e alla variante cfdisk. ed il numero di partizioni ` sostanzialmente arbitrario. . 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). (ad esempio la seconda) tenendo presente per` che si ` utilizzata o e una partizione primaria per indicare le partizioni estese. LA GESTIONE DEI DISCHI E DEI FILESYSTEM 191 all’installazione del sistema attraverso il programma di installazione. nei termini in cui si usa una partizione primaria per indicare la tabella delle partizioni secondarie. I u Architetture meno obsolete (come SPARC. 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. che vengono chiamate logiche o secondarie.2.2) quando il numero dei cilindri ` e maggiore di 1024. PowerPC Apple. Quando si installa un u e nuovo disco. ma si pu` usare una o partizione primaria qualunque. e dato lo spazio limitato questa non pu` contenerne o pi` di quattro.2. Le partizioni primarie sono sempre numerate da 1 a 4. In genere questo lo si fa creando tre partizioni primarie ed usando la quarta per le partizioni secondarie.4 le partizioni vengono indicate nel file di dispositivo che si riferisce ad un disco con il relativo numero.3. queste vengono memorizzate nel primo settore di ciascun disco. u Il comando che tradizionalmente viene utilizzato per ripartizionare un disco32 ` fdisk. Partizioni primarie e secondarie possono coesistere. non tratteremo qui le altre architettura. il Master Boot Record. Qui vengono memorizzate settore di inizio e di fine delle partizioni. 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). e avvisa di possibili problemi (vedi sez. o se si vuole effettuare l’operazione manualmente per avere un maggior controllo. Il comando t permette di impostare il valore numerico che identifica il tipo di partizione. ma ` possibile cambiarla (anche se inutile) con una dei comandi delle e funzionalit` avanzate. a . questa ` quella che ` vista dal kernel. ed n per o a crearne una nuova.. ed in genere coincide e e con quanto visto dal BIOS. but this is larger than 1024.192 CAPITOLO 5. 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. There is nothing wrong with that. di cui una normale. 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.g. Si noti anche come viene riportata una geometria per il disco.g.. Cos` se vogliamo una lista dei comandi possibili possiamo premere m. DOS FDISK. nel qual caso prima chieder` se primaria o secondaria e poi il relativo numero. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA monk:/root# fdisk /dev/sda The number of cylinders for this disk is set to 2213. and could in certain setups cause problems with: 1) software that runs at boot time (e. 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). questo viene in genere utilizzato per indicare che tipo di filesystem sar` contenuti nella stessa. 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. a A questo punto si pu` usare d per cancellare una partizione (ne chieder` il numero). old versions of LILO) 2) booting and partitioning software from other OSs (e. una per la swap. 63 sectors. 5.2. u Per questo in genere occorre pianificare bene le dimensioni delle partizioni fin dall’inizio. Infatti ogni filesystem viene creato per stare esattamente nelle e dimensioni di una partizione. in quanto il kernel legge la tabella delle partizioni all’avvio e la mantiene in memoria. anche se l’operazione resta complessa e delicata. per questo se si ripartizione un disco in uso occorre riavviare il sistema.1 e 8e per quelle usate per il Logical Volume Manager (vedi sez. per questo occorre tenere ben presenti le e al riavvio successivo. dalla quale ` poi possibile dare tutti i comandi.5).2). Ovviamente il partizionamento di un disco ` una operazione privilegiata.3 ` mostrata la schermata di e cfdisk.2. LA GESTIONE DEI DISCHI E DEI FILESYSTEM 193 Per i filesystem di Linux il valore ` 83 (in esadecimale) e vale per tutti i filesystem. o Un comando alternativo a fdisk ` cfdisk. 5.3: Schermata del comando cfdisk.5. I filesystem e Windows invece usano vari codici diversi a seconda del tipo di filesystem. 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. che pu` compiee o ` re solo l’amministratore. 33 . In fig. disponibile sia nella pagina di manuale. E anche un compito delicato. che permette di ridimensionare un filesystem e restringere le relative partizioni. 6. cio` decidere quante partizioni fare e come assegnarle. Qualunque modifica si effettui sulla tabella delle partizioni non sar` mai registrata effeta tivamente su disco fintanto che non si d` il comando w. parted (per il quale rimandiamo alla relativa documentazione. che per` non salva le modifiche effettuate. Per questo nell’installazione occorre normalmente decidere una strategia di partizionamento. Si esce da fdisk con il comando q. se se ne modificano le dimensioni o la posizione le informazioni del filesystem non saranno pi` utilizzabili. e Figura 5. il quale comunque chieder` conferma a a avvertendo che si possono perdere tutti i dati presenti sul disco.33 a Occorre quindi stare molto attenti ed evitare di salvare le modifiche fintanto che non si ` assolue tamente sicuri di quanto si ` fatto. Esiste comunque un comando molto utile. in quanto se si cambia la tabella delle partizioni cancellando o modificando una di quelle presenti il relativo contenuto andr` perso. che nelle FAQ distribuite con il pacchetto). 6. Il valore 82 ` invece e usato per indicare una partizione destinata all’uso come swap (vedi sez. Altri valori usati da Linux sono fd per indicare le partizioni usate per il RAID software (vedi sez. perch´ modificarle in un secondo tempo comporta quasi sempre la necessit` di dover fare un e a backup dei contenuti. che non possono essere pi` tenute u u sotto una directory unica. Infine in o certi casi (per il solito problema del 1024 cilindro visto in sez. 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. Inoltre se si hanno pi` a u dischi non ` ovviamente possibile mettere tutto su una sola partizione.2.4 come si pu` rendere disponibile il contenuto di un filesystem nell’alo bero delle directory. a partire dai kernel della serie 2. 1. in modo da strutturare lo spazio disponibile (che sia una partizione o un dispositivo fisico o virtuale) per l’uso.2) pu` essere necessario creare o una partizione separata per /boot.3 compaia appunto una partizione di tipo Linux LVM. 5. se l’occupazione cresce oltre la capacit` del pi` grande dei dischi che si hanno. 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. Inoltre una volta che si sono spostate /home. 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. Se poi si vuole separare anche quanto strettamente necessario all’avvio dal resto del sistema si pu` mettere anche /usr su una partizione separata. e e pu` comportare una serie di problemi per i programmi di backup che di norma vengono usati o imponendo di archiviare solo i file presenti sul filesystem corrente. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA indicazioni su contenuto delle varie directory di sistema illustrate in sez. Si tenga presente che questa ` una operazione diversa dalla formattazione fisica del dispositivo e che divide lo spazio sul disco in tracce e settori.194 CAPITOLO 5. per evitare di inserire nel backup cose che non c’entrano nulla.4. Una delle strategie pi` semplici ` quella di creare una partizione unica e mettere tutto quanto su di essa. che ` quella da usare per i volumi e fisici che verranno usati con LVM come componenti di un volume logico.2. 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. In genere per gli hard disk questa operazione non ` pi` necessaria dato che viene eseguita e u direttamente dal fabbricante una volta per tutte. 34 .3. ma questo non comporta che poi si possa utilizzarlo. operazione comunemente detta formattazione. Ha per` lo svantaggio che o se si deve reinstallare il sistema i dati degli utenti e quelli di sistema (come pagine web. ed un’altra per /var. Usare varie partizioni (e pi` dischi) ha comunque una serie di controindicazioni. e per quanto grandi si possano fare le partizioni. In questo modo se per qualche motivi si danneggiano file essenziali per il sistema. 5. Per questo spesso ad esempio si ` a u e costretti ad usare pi` dischi per le home directory degli utenti. non si risolver` mai il a problema di esaurire lo spazio in quelle con la maggior parte dei contenuti.x il sistema del Logical Volume e Manager (che tratteremo in sez. Si deve invece eseguirla per i floppy. come quella che di solito si fa sui dischetti. complicandone la gestione. quando si installa il sistema per` (o quando si aggiunge un disco) i filesystem o devono essere creati.3. che non ` il massimo dell’eleganza. anzitutto u si pu` sprecare inutilmente spazio disco quando una partizione si riempie mentre le altre sono o vuote. con il comando fdformat. 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. ma andranno suddivise su path diversi. 1. per risolverli a alla radice ` disponibile.3 La creazione di un filesystem Abbiamo visto in sez. e Per questo di solito si preferisce creare almeno una partizione su cui montare /home per i dati degli utenti.2. posta archiviata e tutto quanto in genere si tiene sotto /var) verr` cancellato. 6. /var e /usr (ed eventualmente /opt) non ` e che resti molto altro. 5. si avr` sempre a disposizione l’altra partizione con un sistema a pienamente funzionale. occorrer` anche creare a il filesystem: in Linux infatti la formattazione fisica del dispositivo e la creazione del filesystem. mkfs. e Bench´ oggi esistano molteplici alternative (Reiser. Esegue il controllo del dispositivo per eventuali settori difettosi. mkfs. ma perch´ o e la forma generica mkfs -t type funzioni deve essere presente il corrispondente mkfs.5.ext2 Specifica la dimensione dei blocchi. Permette di specificare i parametri per la gestione del file di giornale. In realt` il comando ` solo un front-end.2. Le altre opzioni dipendono dal filesystem scelto.msdos. Associa una etichetta al filesystem (che pu` essere utilizzata per farvi o riferimento al posto del file di dispositivo) . 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.type.5: Le principali opzioni per i comandi di creazione dei filesystem.ext3). anche nelle sezioni seguenti. un comando specifico. accessibile al solito con man mkfs. che a e chiama. Per questo motivo esamineremo. o il suo fratello maggiore ext3. questo prende come parametro il file di dispositivo su cui si vuole creare il filesystem. 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. non pu` essere inferiore alle dimensioni di un blocco. Cos` ad esempio se si vuole ı formattare un filesystem msdos con mkfs -t msdos verr` invocato mkfs.ext3 Identiche a mkfs. 5.type. mke2fs. XFS). Specifica un nome per il volume (11 caratteri). i vari comandi specifici della gestione di questo filesystem (che valgono anche per ext3). che mantiene una identica struttura dei dati e su disco. mentre il tipo di filesystem che si vuole creare si specifica con l’opzione -t. e viene gestito semplicemente in maniera diversa a livello del kernel. il filesystem pi` usato con e u Linux ` ext2. 195 Tabella 5. per ciascun tipo di filesystem. Esegue il controllo del dispositivo per eventuali settori difettosi. La creazione di un filesystem su un dispositivo si esegue con il comando mkfs. mkfs. Forza successivo controllo del filesystem.msdos. o Crea il giornale per il filesystem (equivalente ad invocare il comando come mkfs.ext2. Un elenco delle principali opzioni disponibili con i principali filesystem ` riportato in tab. e possono essere trovate nella relativa pagina di manuale. Specifica un algoritmo di hashing per la ricerca veloce dei file all’interno delle directory. che sono comunque delle operazioni operazioni distinte nonostante alcuni sistemi operativi le eseguano insieme. Specifica ogni quanti byte di spazio disco deve essere creato un inode. vengono sempre tenute separate.5. JFS.msdos Specifica la dimensione della FAT (File Allocation Table).vfat Identiche a mkfs. 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. Specifica un file di dispositivo per il giornale. Specifica la dimensione del giornale. un cui esempio `: e . mkfs. 40961. u 36 35 . 73729 Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 37 mounts or 180 days. 24577. largefile e largefile4 e assegna o un diverso rapporto fra numero di inode e spazio disco disponibile. Una delle principali ` la dimensione dei blocchi in cui lo spazio disco viene suddiviso. Use tune2fs -c or -i to override. 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. ed ` essenziale per poterlo montare. 38 questo pu` essere indicato tramite l’opzione -T. 100000 blocks 5000 blocks (5. 39 alcuni filesystem pi` evoluti permettono di cambiare questo parametro anche in un secondo tempo.38 Qualora si usi un valore negativo questo viene preso come limite inferiore per la dimensione di un blocco. Pertanto ` bene annotarsi la posizione delle varie e copie. come e detto in sez. in genere37 ogni file consuma almeno un blocco. ogni file ` sempre associato ad un inode). 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.txt distribuito nella documentazione allegata ai sorgenti del u o kernel.196 CAPITOLO 5. 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. 8192 fragments per group 1928 inodes per group Superblock backups stored on blocks: 8193. 1. che prende i tre valori news.00%) reserved for the super user First data block=1 13 block groups 8192 blocks per group. Con blocco si indica in genere l’unit` minima di spazio disco che viene a allocata per inserirvi i dati di un file. per una spiegazione pi` completa di pu` leggere il file filesystem/ext2. 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. 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.39 Il comando permette. 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. Valori tipici sono 1024. 57345. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA anarres:/home/piccardi# mke2fs /dev/hda3 mke2fs 1. whichever comes first. 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. 37 per alcuni filesystem pi` evoluti. con l’uso dell’opzione -i di impostare ogni quanti byte di spazio disco deve essere creato un inode. esistono dei meccanismi automatici che permettono di mettere u il contenuto di diversi file di piccole dimensioni in un solo blocco.2.35-WIP (07-Dec-2003) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 25064 inodes. anche se ` possibile recuperarla in un secondo momento con dumpe2fs. da specificare e tramite l’opzione -b. Un altro parametro importante ` quello del numero di inode da creare (si ricordi che. stampando tutta una serie di informazioni ad esso relative.2. e le dimensioni dei file sono dei multipli interi di questo valore. le cui dimensioni vengono determinate in sede di creazione del filesystem. 2048 o 4096. 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. come Reiser. Questi di norma vengono mantenuti e in una sezione apposita del filesystem. Se usato senza specificare altro che il dispositivo35 da formattare il comando si limita a creare ` il filesystem. LA GESTIONE DEI DISCHI E DEI FILESYSTEM 197 media di un file sul disco. Tenere le dimensioni dei blocchi basse riduce lo spreco di spazio per quelli occupati parzialmente. si possono cio` esaurire sia i blocchi liberi che gli inode disponibili (anche se il e primo caso ` di gran lunga quello pi` comune). Il dispositivo che fa da giornale deve essere inizializzato con il mke2fs -O journal_dev. e non pu` o superare 102400 blocchi. Un problema che si pu` avere nella gestione dei dischi ` quello dei settori difettosi. che u specificano la caratteristiche da abilitare. a questa si abbina di solito -J che permette di specificarne delle ulteriori caratteristiche. con il rischio di a esaurirli. 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. con conseguente spreco di risorse. a Si tenga presente che per la gestione dei file in un filesystem blocchi e inode sono due risorse indipendenti.2. ma implica un maggiore lavoro per la gestione (e maggiore spazio per le informazioni relative). si deve utilizzare -j che permette di creare un file apposito per il giornale (affronteremo il tema dei filesystem journalled in sez.2. con ext2 ed ext3.7. un valore troppo basso ne creer` troppi. Qualora non venga utilizzata sono utilizzati i valori di default.5. Altre caratteristiche aggiuntive di un filesystem ext2 possono essere impostate attraverso l’opzione -O.4). Di default vengono attivate le due caratteristiche sparse_super e filetype.0 ` necessario specificare come parametro il e valore none che disabilita tutte le caratteristiche aggiuntive. da specificare in MiB. Nel caso si voglia creare un filesystem di tipo ext3.6: Parametri per l’attivazione delle estensioni dei filesystem ext2 attivabili mediante l’opzione -O di mke2fs. Usare pochi inode permette di risparmiare spazio ed essere pi` veloci nella ricerca. memorizza il tipo di file nelle voci delle directory. permette di impostare un dispositivo esterno per mantenere il giornale. ed ` bene provvedere ad un e ` backup ed alla sua sostituzione.6. un elenco dei parametri specificabili con -J ` illustrato in e tab. 5. 5. crea un filesystem con meno copie del superblock per non sprecare spazio sui filesystem molto grandi. Deve essere un minimo di 1024 blocchi. con relativa spiegazione. per o cui se si deve utilizzare il filesystem con un kernel 2. E comunque possibile. I valori possibili per i parametri di -O sono illustrati in tab. In genere o e l’avvenire di errori di questo indica che il disco si sta degradando. Tabella 5. crea anche il file per il giornale (equivalente all’uso di -j). Parametro size Significato Specifica la dimensione del giornale. 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. creare il filesystem in modo da non utilizzare i blocchi contenenti settori difettosi attraverso l’opzione -c che esegue . richiede che sul dispositivo indicato sia creato un giornale invece di un filesystem. specificare un valore troppo alto creer` pochi inode. ma si corre u il rischio di finirli prima di esaurire lo spazio disco. device Tabella 5. 5. Al posto di un file di dispositivo si pu` specificare una l’etichetta associata al filesystem (con o l’opzione -L). altrimenti questi possono essere specificati nella forma parametro=valore. separata da virgole se sono pi` di uno. e trovarsi cos` nella condizione di non poter pi` e u ı u creare nuovi file.2.7: Parametri per la gestione del giornale di un filesystem ext3 specificabili tramite l’opzione -J di mke2fs. che prende una lista di parametri. che per` non sono compatibili con le implementazioni di ext2 antecedenti i kernel della serie 2. al solito si pu` ottenere l’elenco completo o ed una descrizione dettagliata nella pagina di manuale del comando. Si pu` eseguire questo stesso tipo di test in modalit` non distruttiva o a con l’opzione -n. il metodo ` molto pi` preciso. ottenibili specificando l’opzione -h: . come esempio riportiamo solo la prima parte dell’output 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. 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. per un elenco si faccia al solito riferimento alla pagina di manuale. scrivendo e rileggendo tutto il disco. e si pu` usare -J con le stesse opzioni e o di tab. ma anche il suo consumo e a di memoria. Specificando l’opzione -l invece di eseguire il controllo direttamente su legge una lista di questi blocchi da un file. Le altre opzioni principali sono illustrate in tab. normalmente viene eseguita una lettura dei blocchi per verificare errori. con -w si richiede di eseguire il controllo scrivendo dei dati e poi rileggendoli per verificarne l’integrit`.8. 5.2. per cui in genere ` sempre meglio non usare direttamente e il programma. questo ` ottenibile immediatamente con l’opzione -j. in giorni. Si deve aver cura di specificare con l’opzione -b la dimensione dei blocchi. di norma questo pu` essere o prodotto indipendentemente dal programma badblocks che ` quello che viene eseguito anche e quando di usa -c per effettuare il controllo. in questo caso per a disabilitare una funzionalit` si pu` apporre un carattere “^” al corrispondente parametro.6. o Una volta creato il filesystem.3 il comando dumpe2fs pu` essere usato per recuperare una serie a o di informazioni riguardo ad un filesystem ext2. aumentandolo si accresce la velocit` di esecuzione del comando. 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. Per le rimanenti o opzioni del comando si pu` al solito fare riferimento alla pagina di manuale. Se invocato senza opzioni il comando stampa una lunga lista di informazioni ricavate dal contenuto del superblock e dei group block. Se lo si usa indipendentemente da mke2fs anche badblocks vuole come argomento il file di dispositivo da esaminare.5. con -p che pu` specificare quante volte ripetere la scansione di un blocco prima di decidere che non ci o sono errori.7 per indicare le caratteristiche del giornale. 5. nel qual caso per` il controllo diventa estremamente lento.2. pertanto non pu` essere usato su e o un filesystem montato. 5. o analoga a questa ` -i che specifica l’intervallo massimo. mentre con -o si indica un file su e scrivere i risultati. fra due e controlli. se non ce ne sono si prosegue. Le altre opzioni principali di mke2fs sono riportate nella lista di tab. Con l’opzione -i si indica un file contenente una lista nota di blocchi danneggiati (quella presente nel filesystem ` ottenibile con dumpe2fs). in modo da poter forzare il controllo ad un successivo riavvio. mesi o settimane. Infine ci sono una serie di opzioni per indicare il tipo di test da eseguire. Qualora l’opzione venga specificata due volte il controllo viene eseguito in maniera distruttiva (ed estremamente lenta). inoltre in questo a e u u modo il controllo ` distruttivo in quanto sovrascrive i dati. ma invocarlo tramite mke2fs o e2fsck. 5. L’opzione -c permette di selezionare quanti blocchi vengono controllati alla volta (il default ` 16). quella relativa alle sole informazioni del superblock. come anche mostrato nell’output di mke2fs. L’uso pi` comune di tune2fs ` u e probabilmente quello per trasformare un filesystem ext2 in un filesystem ext3 creando il giornale.198 CAPITOLO 5.4 Controllo e riparazione di un filesystem Come gi` accennato in sez. che dovr` ovviamente a coincidere con quella usata con mke2fs. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA un controllo per verificarne la presenza ed escluderne dall’uso qualora rilevati. 5. ed opzionalmente il blocco di partenza e quello finale del controllo. Con -C si pu` anche modificare a mano il contatore del numero di volte che un o filesystem ` stato montato. si possono modificarne alcune caratteristiche con l’uso del comando tune2fs. 5. ma anche molto pi` lento. anarres:~# dumpe2fs -h /dev/hda4 dumpe2fs 1. di norma l’amministratore). 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.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 . di mesi se si pospone il carattere “m”. 199 -C -e -i -j -J -l -L -m -O -r -u -U Tabella 5. Imposta le caratteristiche avanzate del filesystem.5. 5. E questo nome (detto anche label ) che pu` essere o usato da vari comandi per indicare il filesystem al posto del dispositivo. Imposta il numero di blocchi riservati. sovrascrive i parametri del giornale. prende come parametro un e numero. un numero (espresso in cifre esadecimali) che identifica il filesystem (in maniera analoga alla label ). aggiunge un giornale per il filesystem. panic (si ferma causando un kernel panic). 5. prende come parametro uno dei valori: continue (continua ignorando l’errore). Imposta l’intervallo di tempo fra due controlli successivi. o Imposta l’universally unique identifier (UUID) del filesystem.7. per un massimo di 16 carat` teri. remount-ro (rimonta il filesystem in sola lettura). prende come parametro un numero di giorni. di settimane se si pospone il carattere “w”. Imposta l’utente che pu` usare i blocchi riservati.2. prende come parametro un numero. prende come parametri uno dei valori di tab. Modifica il contatore del numero di volte che un filesystem ` stato montato. prende come parametro uno dei valori di tab. Modifica il comportamento del kernel quando viene rilevato un errore sul filesystem. stampa i contenuti del superblock (come dumpe2fs).6.8: Principali opzioni per il comando tune2fs. Imposta il nome del volume. Imposta la percentuale di blocchi riservati (messi a disposizione dell’utente specificato con -u. o qualcuno inciampa nel cavo di alimentazione del server. 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. Se invece l’interruzione ` avvenuta durante la scrittura nel giornale sar` questo e a ad essere scartato. ed una volta e creati ` praticamente impossibile41 danneggiarli nel corso delle normali operazioni. Di norma in caso di rilevamento di un errore questo viene automaticamente avviato. 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. e a a al successivo tentativo di montaggio. uno sparse file ` un file in e cui non sono state scritte le parti vuote. Questo pu` significare dei tempi che possono diventare ore o addirittura giorni per i o dischi pi` grandi. In generale il funzionamento dei filesystem in Linux ` estremamente stabile. ma il e a giornale sar` coerente e al riavvio baster` utilizzarlo per riprendere la registrazione da dove era a a stata interrotta. (un file apposito a questo dedicato) e poi riportate sul filesystem. che restituisce l’elenco dei blocchi marchiati come danneggiati in un filesystem. e si possa trovare in uno stato incoerente. e e Se c’` stata un’interruzione della corrente questo flag rester` attivo ed il sistema potr` rilevare. in cui l’interruzione ı ` avvenuta durante l’aggiornamento del filesystem. e . 40 per far questo viene creato uno sparse file delle stesse dimensioni del filesystem. che qualcosa ` andato storto. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Le altre opzioni principali del comando sono -b. ed ` anche possibile trovarle. ma il filesystem sar` comunque in uno ı a stato coerente.200 CAPITOLO 5. attivato quando viene montato. Infine -i permette di leggere le informazioni invece che dal filesystem da una immagine create con il comando e2image. In questo caso si pu` avere un danneggiamento della struttura del filesystem. Per un elenco completo e relative spiegazioni si faccia al solito riferimento alla pagina di manuale. che indica che ` in uso. in quanto prevede una serie di controlli accurati per identificare informazioni incoerenti e parziali. Il comando prende come argomenti il dispositivo su cui si trova il filesystem ed il nome del file su cui salvare l’immagine. a Il concetto fondamentale del journalling ` che le operazioni sul filesystem vengono prima e registrate su un giornale. che comportano varie scansioni del contenuto del filesystem. e Quello che pu` succedere in questi casi dipende dal filesystem. In genere ogni filesystem prevede l’esistenza di un flag su disco. Cos` se si ha una interruzione improvvisa si hanno due casi: nel primo. a 41 a meno di non usare kernel sperimentali. che deve essere o riparato. si perderanno cos` le ultime modifiche. questo sar` in uno stato incoerente. -oB per indicare la dimensione dei blocchi (anche questa ` una informazione necessaria solo in caso di e corruzione del filesystem). ` normale che e il filesystem. per questo molti dei filesystem pi` avanzati supportano il cosiddetto journalu u ling. in realt` viene occupato su disco solo lo spazio relativo alle parti non vuote. 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. 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). pari appunto ad o un intero filesystem. nel qual caso si stanno cercando rogne. che permette di evitare questo procedimento e riportare il filesystem in uno stato coerente con grande velocit`. A questo punto occorre usare l’opportuno programma di controllo per verificare lo stato del filesystem ed eventualmente riparare gli errori. Se per` si ha e o un black-out improvviso. pertanto anche se la sua dimensione pu` essere enorme. 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). -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). speo cie per filesystem di grandi dimensioni. dal momento in cui l’aggiornamento dei dati su disco ` stato interrotto brutalmente. In genere la procedura di controllo e riparazione pu` essere molto lunga e complessa. Il programma generico per il controllo di un filesystem ` fsck (da File System ChecK ) che. per cui la diffusione di ext2 ` ancora molto ampia. 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. 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. Per le altre opzioni si pu` fare riferimento alle pagine di manuale dei vari programmi o dedicati di ciascun filesystem. separata da virgole. 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. Per questo motivo ci concentreremo e u sulla versione dei programmi di riparazione e controllo specifici di questo filesystem. di solito sono definite due opzioni generiche. In caso di filesystem pesantemente corrotto si possono poi specificare il superblock da utilizzare con -b e la dimensione di un blocco con -B. In realt` in questo non ` che il procedimento non avvenga. Con l’opzione -l si pu` specificare un file con una lista da aggiungere a quella dei o blocchi difettosi. non ` altro che un front-end per i singoli programmi specifici di ciascun tipo di e filesystem. che sono state mantenute solo per compatibilit`. 42 . 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. Se si specifica pi` di un filesystem la lista dei u relativi tipi. Il programma prende come argomenti un elenco di filesystem da controllare (specificati per dispositivo o mount point. Usando l’opzione -c si pu` richiedere anche la scansione per il rilevamento di settori difettosi. senza chiedere l’intervento dell’amministratore. 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). 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 l’uso di un giornale ha un impatto sulle prestazioni del filesystem.2. in quanto errori sul disco. JFS e XFS) supportano nativamente u il journalling. mentre con -n si fa la stessa cosa aprendo il filesystem in sola lettura. 1. Se si ` usato un giornale posto su un altro e dispositivo questo deve essere specificato con l’opzione -j.4). Nel qual caso prima prova ad eseguire il controllo per il filesystem radice e poi per tutti gli altri in ordine di valore crescente del suddetto campo. non dovendo effettuare il controllo a completo del filesystem. che prende come argoe mento il dispositivo da controllare.42 e dando una risposta di “no” a tutte le domande. -l o -L nel qual caso il filesystem viene aperto in scrittura per aggiornare la lista dei settori difettosi. In generale comunque. solo che grazie alla prea e senza del giornale questo viene eseguito con grande rapidit`. ed anche il tradizionale ext2 ha ottenuto questa funzionalit` con la nuova versione a ext3. se sono citati in /etc/fstab). specie se si usa ext3. Il programma di controllo e riparazione del filesystem ext2 ` e2fsck. che vengono attivati attraverso l’opzione -t seguita dal nome del filesystem. deve essere specificata come parametro per -t. o e specificandola due volte viene usato il metodo non distruttivo di scansione con scrittura e rilettura. che nella o gestione dei dati ` identico) come il filesystem pi` diffuso. e -r che invece esegue le riparazioni in modalit` intea rattiva. Il comando supporta le opzioni generiche -a e -r illustrate in precedenza. e come mkfs. Nel caso di Linux tutti i filesystem pi` recenti (ReiserFS. mentre con -L il file indica la nuova lista di blocchi difettosi. Come per mkfs le opzioni disponibili dipendono dallo specifico filesystem. ` comunque opportuno e mantenere un controllo periodico sul filesystem.5. a meno che il sesto campo del file non sia impostato a zero (si ricordi quanto detto in sez. eccetto il caso in cui si siano specificate le opzioni -c.2. -a che cerca di eseguire le riparazioni in modo automatico. cavi difettosi o bug del kernel possono comunque corrompere le informazioni. non ` detto e che questo venga sempre utilizzato. a Specifica il file con la nuova lista dei blocchi difettosi (sovrascrivendo quella presente). 5. in effetti il programma. ed infine l’opzione -i permette di specificare una immagine creata con e2image. in caso di filesystem pesantemente danneggiato l’opzione -b permette di specificare una dimensione dei blocchi. e 43 .45 Questa infatti ` un problema solo per quei filesystem la cui architettura e ` talmente inadeguata da renderlo tale. nel qual caso esso deve essere comunque montato. e di eseguire su di esso delle operazioni. Qualora anche la riparazione con e2fsck eseguito manualmente fallisca ci si trova di fronte ad un filesystem pesantemente danneggiato. 45 in effetti ci sono alcuni programmi per questa operazione. Il comando permette di aprire anche un filesystem danneggiato. In tal caso di norma il filesystem non ` montato. 5. 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. In genere non c’` necessit` di eseguire direttamente e2fsck.3.43 ma in sola lettura. ma non vengono usati. o Opzione -b -B -c -f -j -l -L -n -t -y Significato Specifica la dimensione dei blocchi.9. In questo caso l’ultima risorsa ` quella di utilizzare e debugfs per provare ad eseguire manualmente la riparazione. ad uso dei cosiddetti filesystem e guru. Nel caso lo di voglia eseguire comunque. per un elenco completo e la relativa documentazione si pu` al solito fare riferimento alla pagina di manuale del comando. l’opzione -s permette di specificare il superblock.202 CAPITOLO 5. 44 per questo occorre una conoscenza dettagliata della struttura di un filesystem ext2. Il comando prende come argomento il dispositivo contenente il filesystem da esaminare. Esegue il controllo rispondendo automaticamente yes a tutte le domande. Specifica il file con una lista di blocchi difettosi da aggiungere a quelli gi` presenti. Specifica il dispositivo di un giornale esterno. come dice il nome.4) e viene richiesto di rieseguire il programma manualmente. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Le altre opzioni principali del comando sono riportate in tab. non ` uno strumento per il controllo quanto per il debugging. 5. Tabella 5. o sia montato in sola lettura. Stampa delle statistiche di esecuzione. 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.2.9: Principali opzioni per il comando e2fsck. in quanto di norma questo viene e a eseguito dagli script di avvio. Esegue il controllo rispondendo automaticamente no a tutte le domande. Infine si tenga presente che per Linux non esistono programmi di uso comune per la deframmentazione del disco. proprio perch´ inutili. a meno che il filesystem danneggiato non sia e la radice. Non ` detto che si riesca e a riparare completamente il filesystem44 . nel qual caso il programma si ferma. Specifica le dimensioni di un blocco. Ci sono casi comunque in cui questo a non ` possibile. In generale un qualunque filesystem unix-like ` in grae e do di gestire la allocazione dello spazio disco in maniera da evitare il sorgere del problema fin dall’inizio. ma si possono tentare delle operazioni di ripulitura che potrebbero portare lo stesso in uno stato riparabile da e2fsck.5 La gestione della swap Come ultimo argomento relativo alla gestione dei dischi affronteremo quello della gestione dello spazio dedicato alla swap. oltre a specificare l’opzione -f occorre assicurarsi che il filesystem relativo non sia montato. e Quando questo avviene durante la procedura di avvio di norma il sistema viene mandato in Single User Mode (si veda sez. Esegue il controllo del dispositivo per eventuali settori difettosi. forza il controllo del filesystem. un elenco di quelle attive ` visibile in e /proc/swaps.48 a questo provvede il comando mkswap che prende come argomento il file da usare come area di swap. in questo caso infatti l’accesso al disco ` diretto (` quindi pi` veloce) rispetto al caso. e come se fosse un filesystem.2).4. si avr` quello che si chiama un page fault 46 a a a questo punto il sistema della memoria virtuale provveder` a recuperare la pagina dall’area di a swap e a rimetterla in memoria. L’opzione -p permette di specificare come parametro la dimensione delle pagine di memoria (in genere 4096 byte. 49 per il quale si dovrebbe prima passare attraverso il relativo filesystem. In questo modo ciascun processo pu` usare un suo spazio di indirizzi virtuale (usando un qualunque valore fa quelli possibili). l’elenco delle opzioni ` riportato in tab. ` E questo lo scopo della cosiddetta area di swap.3. quando l’uso di questa diventa eccessivo. comunque possibile. 1.1 e poi approfondito in sez.10 erano possibili fino ad un massimo di 8 aree di swap. Dato che le prestazioni del sistema della memoria virtuale dipendono direttamente.2. 46 . dai tempi di accesso a quest’ultima e dalla velocit` di trasferimento a ` dei dati.5. ma dipende dall’architettura hardware). in modo che altri possano utilizzare la memoria fisica che cos` viene liberata. 1. e a u 48 dato che l’area deve essere solo utilizzata per copiarci pagine in questo caso non sono affatto necessarie tutte le infrastrutture mostrate in sez. Come accennato in sez. e Si tenga presente che per i kernel precedenti il 2. 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. con l’aiuto della MMU (Memory Management Unit) del processore una rimappatura dello spazio degli indirizzi dei processi sulla memoria fisica effettivamente disponibile. 47 in realt` ovviamente tutto questo richiede tempi che sono ordini di grandezza superiori rispetto all’accesso a diretto alla RAM. In genere si usa il comando specificando come argomento un file di dispositivo indicante una partizione appositamente riservata (vedi sez. LA GESTIONE DEI DISCHI E DEI FILESYSTEM 203 memoria virtuale. a Una delle caratteristiche del meccanismo ` che in questo modo ciascun processo mantiene un e suo spazio di indirizzi separato. 1. a partire da esso sono state portate a 32. cos` che il processo possa proseguire la sua esecuzione come se ı nulla fosse. ` in genere una pessima idea usare un disco vecchio e lento per questo scopo. e e u 49 in cui si usa un file normale. in pratica il programma sar` molto pi` lento. 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). cos` che questo possa eseguire la opportuna sezione del kernel. 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. dove la velocit` di trasferimento ` maggiore). per cui il nulla ` solo teorico. ma si pu` usare anche un file) su cui il kernel pu` salvare le pagine di memoria meno utilizzate o o di un processo. una sezione di disco (in genere una partizione. se non lo si specifica viene automaticamente utilizzato tutto lo spazio disponibile.2. 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. 5.1 il kernel gestisce. e o tramite la MMU acceder` ad indirizzo reale della memoria effettivamente disponibile. in caso di utilizzo dell’area di swap.10. u a e Il comando prevede (per compatibilit` con le vecchie versioni) un secondo argomento che a specifica la dimensione dell’area di swap. 5. ı Chiaramente quando si andr` a rieseguire il processo le cui pagine di memoria sono state salvate a sull’area di swap e questo cercher` di accedere a quelle. E per e questo motivo inoltre che si preferisce usare per l’area di swap l’ultima partizione disponibile (quella che contiene i settori pi` esterni del disco.2. il meccanismo con cui il kernel gestisce l’allocazione della memoria fisica ai vari processi. Come per mkfs l’opzione -c richiede un controllo della partizione per la presenza di settori difettosi.47 Perch´ il kernel possa usare un’area di swap questa deve essere opportunamente inizializzata. cos` come indicate in /proc/swaps e /etc/fstab. 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. e come si possa intervenire (trattando i vari programmi coinvolti ed i relativi meccanismi di configurazione) a ciascuno stadio di questa procedura. ma chiamato con l’opzione -a negli script di avvio. questo prende come argomento il file da usare coma area di swap.3. 5. con il valore passato come parametro la dimensione delle pagine di memoria. e Infine si pu` disattivare un’area di swap usando il comando swapoff. 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). 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. Quando si ha una sola area questo valore non ` e significativo in quanto il kernel si limiter` ad usare la prima sezione libera che trova. anche in questo caso o occorre fornire come argomento il file di dispositivo indicante l’area da disabilitare.1 L’avvio del kernel Una volta accesa la macchina ` il BIOS che si incarica di lanciare il sistema operativo. 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.1) e passi ad una di priorit` inferiore solo ı a quando quelle di priorit` superiore sono piene. Le e modalit` possono dipendere da tipo e versione di BIOS. dall’architettura hardware.1. vedi sez. 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. dettagliando i vari passaggi che portano dall’accensione della macchina al pieno funzionamento del sistema. che verr` immediatamente attivata. che permette di impostare una priorit` (un parametro di e a valore fra 0 e 32767) per l’uso della partizione.204 CAPITOLO 5. 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. 6. 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. specifica.3 La gestione dell’avvio del sistema In questa sezione prenderemo in esame la procedura di avvio del sistema.10: Opzioni per il comando mkswap. forza l’esecuzione del comando anche se si sono dati argomenti sbagliati (come un dimensione dell’area maggiore di quella della partizione). con -v0 usa il vecchio stile (deprecato) con il -v1 usa il nuovo. usando -p ı e a si pu` forzare la stessa priorit` ottenendo un uso pi` efficace e maggiore velocit`. In a . ı 5. ed in questo caso attiver` tutti a i dispositivi che sono marcati come swap all’interno di /etc/fstab. In generale per` il comando non viene mai invocato a o direttamente. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Opzione -c -f -p -v Significato esegue un controllo per la presenza di settori difettosi. 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). specifica la versione della formattazione dell’area di swap da utilizzare. Tabella 5. Un elenco dei principali argomenti ` riportato in tab. anche se BIOS pi` recenti permettono di usare o u anche altri dischi 52 che in questo caso svolge il ruolo della shell. initrd=file root=dev init=command console=dev Tabella 5. per alcuni argomenti. u Per quanto riguarda l’avvio da CDROM e floppy non esiste nessuna configurazione specifica per Linux. 54 nella directory Documentation. se non quella che pu` mettere a disposizione il o bootloader 52 prima di eseguirlo. LA GESTIONE DELL’AVVIO DEL SISTEMA 205 genere comunque tutti i BIOS supportano l’avvio da floppy.5. La procedura prevede che il BIOS legga il primo settore del disco50 scelto per l’avvio51 che viene detto Master Boot Record. disco e CDROM (anche se alcuni dei pi` vecchi non supportano il CDROM). 53 ad esempio i moduli che supportano l’uso di parametri in fase di caricamento (vedi sez. o MBR. in generale questi e a servono a passare valori ad alcuni sottosistemi53 o ad impostare delle funzionalit` usate all’ava vio. ` compito del bootloader interpretare il significato di e file. ed avere un controller SCSI che supporta il boot. solo che in questo caso o non esiste una riga di comando da cui darglieli. specifica il programma da lanciare come primo processo del sistema (di default ` /sbin/init). e specifica un file di dispositivo da usare come console per i messaggi di errore. caricarlo in memoria ed eseguirlo. di fornire una opportuna interpretazione. o il valore ask per fare eseguire una scansione. Questo contiene un programma apposito.11. ottale o esadecimale) o una stringa. occorre semplicemente impostare opportunamente il BIOS perch´ vengano usato tali e dispositivi. u u e oltre che nel Master Boot Record. pu` prendere degli argomenti.3.txt della documentazione allegata ai sorgenti o del kernel54 o nel boot-prompt-HOWTO. 5. specifica un RAM disk iniziale (che verr` usato come radice prova visoria). 50 . imposta la dimensione della memoria da utilizzare. qualora compilati all’interno del kernel possono ricevere in questo modo i valori dei loro parametri. Normalmente non c’` necessit` di passare argomenti specifici al kernel. 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. possono essere installati anche nel settore iniziale di ciascuna si sottintende disco IDE. e deve anche essere in grado. passandogli eventuali parametri di avvio. chiamato bootloader. un elenco dettagliato e pu` essere trovato nel file kernel-parameters. se si vuole usare un disco SCSI occorre comunque impostare il BIOS per l’avvio su SCSI. essi sono sempre nella forma chiave=valore. a Il caso pi` comune ` quello in cui l’avvio viene fatto dal disco rigido. 51 per molti BIOS questo pu` essere solo il primo disco IDE.4). Una delle caratteristiche dei bootloader (tratteremo pi` avanti i due pi` comuni) ` che essi. specifica (in genere col nome del file di dispositivo) il disco (o la partizione) da montare come radice.11: Principali argomenti per la linea di comando del kernel. o una lista di stringe separate da virgole. Il primo su cui si trovano i dati opportuni verr` utilizzato. 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. essendo in fin e dei conti anche questo un programma. veniva utilizzato per soprassedere il malfunzionamento del sistema di autorilevamento del kernel. che si incarica di effettuare il lancio del sistema operativo. dove valore pu` essere un valore numerico o (espresso in notazione decimale. Una delle caratteristiche di Linux infatti ` che.1. ed ` su questo che ci u e e soffermeremo con maggior dettaglio nei paragrafi successivi. 5. Argomento vga=mode mem=size Significato dove mode ` un valore intero che stabilisce la modalit` video in cui e a utilizzare la console. 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.206 CAPITOLO 5. posto e che il CDROM sia stato masterizzato con le opportune estensioni. La procedura con cui il BIOS carica in memoria il sistema dipende ovviamente dal supporto da cui lo prende. e 55 . In questo caso per` o di solito non viene usata una immagine di un floppy contenente soltanto il kernel. In particolare questo significa che il sistema user` come radice quella in uso quando a viene compilata l’immagine. usando l’opzione -r o invocandolo come ramsize. e questo deve ovviamente contenere i dati in un formato adeguato. che di norma ` /sbin/init. Nel caso di un CDROM il meccanismo di avvio ` sostanzialmente lo stesso dei floppy. la modalit` video usando l’opzione -v. In sostanza viene inserita nel CD l’immagine di un floppy e l’avvio viene eseguito alla stessa maniera. il vantaggio di utilizzare un filesystem consente. e come SILO per la Sparc.1. In tal caso la procedura di avvio ` spesso gestita direttamente dall’equivalente del BIOS per quell’architettura. Per i dettagli si faccia riferimento alla pagina di manuale. di accedere direttamente ai contenuti. a Il comando permette anche di modificare anche altri due parametri che sono mantenuti nell’immagine del kernel. 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. 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. Il caso del floppy ` analogo a quello di un disco. e cos` via. si concludono con il lancio di init. 5. per quanto riguardo il e kernel. ma viene utilizzato il programma syslinux per creare una immagine di avvio contenuta in un filesystem FAT. se si specifica un secondo argomento questo dovr` essere il dispositivo a contenente la nuova directory radice che andr` a sovrascrivere la precedente.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. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA partizione. PowerPC. una volta che lo si ` montato. che prende come argomento il file del o su qualunque altro dispositivo si stia utilizzando. non ci occuperemo di questi casi. e dei dispositivi il cui supporto ` stato compilato direttamente e nel kernel. ecc. In realt` alcuni argomenti di avvio in questo caso possono essere a modificati con il comando rdev. ı Infine si tenga conto che tutto questo si applica solo ai normali PC. ognuno dei quali ha un suo diverso meccanismo di funzionamento. come le inizializzaa zioni delle infrastrutture generiche. 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. come Alpha. o invocandolo come vidmode. Pertanto basta l’uso di dd per copiare direttamente l’immagine del kernel su un dischetto con un comando del tipo: dd if=bzImage of=/dev/fd0 per ottenere un floppy di avvio. Il problema con un disco d’avvio fatto in questo modo ` che non si possono fornire argomenti e all’avvio. 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. il BIOS legge il primo settore del floppy ed esegue il e programma che c’` contenuto. scompattarlo ed eseguirlo. Sparc. 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. Linux per` gira su molo tissime architetture hardware diverse. tutto il resto verr` eseguito da quest’ultimo in user a space. a e la dimensione del RAM disk iniziale. HP-UX. Le operazioni di avvio. MILO per le Alpha e OpenFirmware per i Mac. SYS che contiene il programma di avvio.conf ` simile a quello degli altri file di configurazione. (‘/’) # qualora lo si sia richiesto.2). 5. al contrario di quanto o avviene in genere per altri file di configurazione. (in sostanza in fase di installazione viene memorizzato il settore su cui essa si trova) caricarla in memoria.3. e si ricordi infatti che LILO (il bootloader. It can be either a partition. 56 .3.56 Da questo punto in poi il controllo passa al kernel. This is where Lilo installs its boot # block. non quella logica nel filesystem.5. passare tutti gli eventuali parametri di avvio specificati in fase di configurazione.2.CFG che basta inserire nella radice del floppy. quello che sta nell’MBR) conosce solo la posizione fisica del kernel nel disco. e pertanto risente di tutti i limiti che questo pu` avere.3. si pu` caricare in memoria anche l’immagine di un ram-disk. 5. che si affida al BIOS per la lettura del disco. le linee vuote e o che iniziano per # vengono ignorate. in which # case it installs in the MBR. Una volta eseguito (sia direttamente dal BIOS. Un esempio di questo file ` il seguente: e # Support LBA for large hard disks. or the raw device.2 L’uso di LILO Il primo bootloader creato per Linux ` stato LILO. da LInux LOader. che serve come o filesystem iniziale per il kernel. non basta modificarlo perch´ i cambiamenti die ventino effettivi al riavvio successivo. che le direttive che permettono di controllare direttamente il comportamento del bootloader. La configurazione di LILO ` gestita tramite il file /etc/lilo.5. Si deve invece far girare il programma lilo che reinstalla il bootloader con le nuove opzioni. In genere LILO viene installato nell’MBR alla fine della procedura di installazione di una distribuzione. ed a lungo ` stato anche e e ` l’unico presente. e poi eseguirla. installarlo all’interno di e una partizione. che si incarica di tutto il resto. LA GESTIONE DELL’AVVIO DEL SISTEMA 207 dispositivo da inizializzare (in genere /dev/fd0). con la conseguente impossibilit` di lanciare il sistema. Uno di questi problemi o ` che. In generale ` possibile.1. # boot=/dev/hda # Specifies the device that should be mounted as root. # lba32 # Specifies the boot device. che da un altro bootloader ) LILO si incarica di trovare l’immagine del kernel sul disco. ed ` controllato dal file di configurazione SYSLINUX. Si tenga presente per` che. and will overwrite the current MBR. 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. e Per i dettagli si pu` fare riferimento alla pagina di manuale di syslinux al solito accessibile con o man syslinux.conf). alcuni BIOS non e sono capaci di leggere i dischi oltre il 1024-simo cilindro. a Il formato di /etc/lilo. 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. se si dispone di un altro bootloader in grado di eseguirlo. come accennato in precedenza. a Questo mette a disposizione una riga di comando analoga a quella di LILO (vedi sez.conf. E un bootloader con una architettura elementare. In genere si ha a che fare con questo file tutte le volte che si vuole usare un nuovo kernel. Le altre linee indicano una opzione o una direttiva. Infatti per poter lanciare un kernel occorre specificarne la posizione su disco al bootloader in modo che questo possa caricarlo. questo contiene sia le e opzioni passate al kernel in fase di avvio. a causa delle restrizioni ereditate dai primi PC illustrate in sez. Il comando sovrascriver` opportunamente il a settore iniziale del disco e ci copier` un file LDLINUX. Le altre direttive globali pi` usate sono quelle che controllano le modalit` di avvio. che si applicano al comportamento generale del bootloader. nella directory /boot. le direttive che specificano opzioni relative alle singole immagini dei sistemi che si vogliono lanciare. che presentano una interfaccia di avvio semplificata a men` o semplicemente testuale.b # Specifies the location of the map file # map=/boot/map # Specifies the number of deciseconds (0. u In genere tutti questi i file referenziati da queste direttive vengono tenuti. 1. you can uncomment the # following lines. indicato tramite il suo file di dispositivo come /dev/hda. nel caso ` l’MBR del primo disco e IDE. # other=/dev/hda1 label=dos # restricted # alias=3 Le direttive sono divise in tre classi principali: le direttive che specificano opzioni globali. # default=linux image=/boot/vmlinuz-2. See: The ‘boot-prompt-HOWTO’ and ‘kernel-parameters.21 label=linux read-only optional image=/boot/vmlinuz-2.2.1 seconds) LILO should # wait before booting the first image.3. ne possono esistere varie e versioni. # delay=30 # message=/boot/bootmess. Se u a . # # append="" # Boot up Linux by default.txt’ in # the Linux kernel ‘Documentation’ directory. La maggior parte delle direttive ricade nella prima classe. come illustrato in sez.map) che contiene la mappa della posizione su disco delle varie immagini del kernel. e le direttive che permettono di passare delle opzioni al kernel (Linux). La direttiva map specifica il file (di norma boot.20 label=linuxold read-only optional # If you have another OS on this machine to boot. changing the device name on the ‘other’ line to # where your other OS’ partition is.txt prompt # single-key # delay=100 timeout=30 # Kernel command line options that apply to all installed images go # here. di queste forse la pi` importante ` u e boot.208 CAPITOLO 5.2. ad esempio se si volesse installare LILO sulla seconda partizione del primo disco si sarebbe potuto usare /dev/hda2. questa viene definita automaticamente alla installazione del pacchetto e ricostruita tutte le volte che si lancia il comando lilo. Si pu` specificare allo stesso o modo una partizione. che specifica il dispositivo su cui installare il bootloader. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA root=/dev/hdb5 # Installs the specified file as the new boot sector # install=/boot/boot.2. La direttiva install invece specifica qual’` il file che contiene il programma del bootloader. usando la INT13 originale. testina e settore relativi ad una e a geometria diversa a quella vista dal BIOS. pur avendo specificato prompt.5. LILO continuer` ad accedere alla a posizione del vecchio file. Direttive come lba32 e linear servono ad indicare a LILO quale metodo utilizzare per caricare il kernel. si deve sempre specificare la direttiva lba32. essendo questo creato altrove (quando si sovrascrive con cp prima viene creata la copia. senza possibilit` di intervento dell’utente. 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. Per farlo basta riferimento all’etichetta che si ` associata con la direttiva label a ciascuna immagine o altro sistema presente. Questo significa che se si copia su una di queste immagini un altro file (ad esempio per un aggiornamento). Con i BIOS (e le versioni di LILO) a pi` recenti. poi cancellato il file preesistente e assegnato il suo nome al nuovo). ma pu` essere anche specificata per ciascuna immagine. la direttiva append permette di specificare dei parametri di avvio al kernel. o La direttiva che permette di identificare un kernel da lanciare ` image. e Un’altra direttiva fondamentale ` root che definisce il dispositivo da cui montare la directory e radice. a u Per ciascuna direttiva image vanno poi fornite una serie di ulteriori direttive specifiche da applicare all’avvio di quella immagine. con relativo fallimento. Specificando un numero con timeout si introduce un tempo massimo (in decimi di secondo) dopo il quale. Questo pu` essere utile in quanto non ` detto o e che Linux ed il BIOS concordino sempre sulla geometria del disco. Con la direttiva default si pu` scegliere quale. Se non si specifica prompt invece a l’avvio verr` effettuato automaticamente. da usare nella fase di avvio e per la direttiva default.1. ed il caricamento del kernel viene utilizzando l’interfaccia classica illustrata in sez. Usando linear invece l’idea della geometria che ha il kernel viene diventa irrilevante.57 dopo il a a numero di decimi di secondo specificato con delay. specificando cilindro. Una sempre necessaria ` label che definisce l’etichetta e che identifica l’immagine.58 Di solito la si specifica all’inizio del file per utilizzarla come valore di default per tutti i kernel. o Qualora il BIOS non supporti queste estensioni. e verr` usata la nuova interfaccia di accesso della INT13 estesa. L’uso di questa direttiva comunque ha senso solo per i vecchi BIOS che non supportano LBA. questo comporta che si avranno problemi tutte le volte che si installa un kernel al di l` del limite del 1024-simo cilindro. se si ` fortunati e nessuno ha a e sovrascritto i dati. viene selezionato come default per l’avvio (e lanciato quando scade il tempo specificato da timeout). 5. Questo significher` nel migliore dei casi. che si utilizzer` ancora la vecchia immagine.2. fintanto che non si ricrea la boot map e la si reinstalla. 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. testina e settore. mentre in caso di sovrascrittura a l’avvio fallir` (in maniera pi` o meno spettacolare a seconda dei casi). nel nostro esempio /dev/hdb5. a e ci si pu` dimenticare di tutti i problemi relativi alla geometria dei dischi. Di default questi indirizzi sono indicati nella notazione classica. ae si noti che non ` assolutamente detto che questa debba stare sullo stesso disco da cui si lancia il kernel. la direttiva linear mantiene sempre gli indirizzi nella boot map in forma lineare. seguito dalle eventuali opzioni che gli si vogliono passare). La direttiva initrd specifica il file da utilizzare come ram-disk per l’avvio. e . LILO vi acceder` direttamente usando posizione a di quest’ultima nel disco. ma per l’accesso al disco esegue una conversione al vecchio formato. fra le varie immagini del kernel installate o o gli altri sistemi operativi presenti su altre partizioni. Si ricordi che bench´ qui essa sia specificata e tramite il pathname del file che la contiene. 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. se questo accade e non si ` usato linear all’avvio LILO user` dei valori per cilindro. e sar` LILO ad usare all’avvio la a conversione dell’indirizzo lineare usando la geometria che gli fornisce il BIOS. che prende come e parametro il file che contiene l’immagine del kernel. in tal caso gli indirizzi nella boot map u saranno tenuti in forma lineare.3. si proceder` automaticamente all’avvio. accessibile con man lilo. il suo sviluppo per` ` ancora all’inizio. La caratteristica principale rispetto a LILO ` che GRUB ` formato da diverse parti. 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). al solito si pu` fare riferimento alla pagina di manuale. come se la si scrivesse direttamente dal prompt. Il comando prende varie opzioni che permettono di soprassedere i valori specificati da lilo. Una direttiva utile per la sicurezza ` password che permette di proteggere con una password e la procedura di avvio. Per questo GRUB non solo non soffre del HURD ` un sistema libero sperimentale realizzato dalla FSF.3 L’uso di GRUB Il secondo bootloader disponibile per Linux ` GRUB (da Grand Unified Bootloader ). Specificando bypass non viene applicata nessuna restrizione. Anche questa direttiva deve essere seguita da una label. L’utilit` dell’opzione ` che a e questo avviene una sola volta. L’elenco completo si trova al solito nella pagina di manuale. con e funzionalit` molto avanzate e completamente modulare. a oe 59 . la prima ` -r che permette di specificare una directory o e nella quale eseguire un chroot prima di eseguire il comando. ciascuno dei quali. In sostanza poi gli stadi sono due. attraverso ulteriori direttive da indicare nelle relative sezioni del file di configurazione. per cui solo il riavvio successivo user` le nuove opzioni. ed il riavvio fallisce. 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. specificando mandatory ` necessario fornire la password anche e per avviare la relativa immagine. specificando restricted si impedisce all’utente di passare dei parametri al kernel sul prompt. L’uso di questa direttiva permette di controllare le modalit` con cui si fanno partire le varie a immagini (o i sistemi operativi alternativi). il primo ` un analogo di LILO e viene installato sul bootloader. 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). Vale la pena per` di ricordarne due. tutte le restrizioni che si applicano ad un e programma che deve stare nell’MBR scompaiono. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA al prompt. si pu` attivarle con il o comando lilo. come gli omonimi dei razzi. la direttiva read-only fa montare la radice in sola lettura (in genere ` cura degli e script di avvio di rimontarla anche in scrittura).210 CAPITOLO 5. viene usato per lanciare il successivo. e ripristinare il sistema u e reinstallando il bootloader come se lo si fosse fatto direttamente dal disco originale. 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.conf. 5. Questo si limita a leggere il suddetto file e a reinstallare il bootloader con i nuovi valori. Dato che la password ` scritta in chiaro nel file di configurazione. 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. accessibile con man lilo per o l’elenco completo. basta far riavviare la macchina per riavere i valori precedenti. e La seconda opzione ` -R che invece specifica una riga di comando da passare a LILO al e successivo riavvio. essa ` molto utile quando di si avvia e il sistema da un disco di recupero (ad esempio perch´ si ` fatto casino con LILO ed il sistema non e e parte pi`) perch´ permette di correggere i valori nel lilo.conf. dette e e stadi. e il suo unico compito ` quello di lanciare lo stadio successivo.conf. che si presume siano funzionanti. a meno di non fornire la password. basato su una architettura microkernel. che poi si incaricher` di effettuare e a tutte le operazioni successive.3. Una volta che si sono definite le impostazioni in /etc/lilo.conf del disco. cos` a ı se qualcosa non va. 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. ecc. con hd0. Un contenuto tipico di questo file `: e ## default num # Set the default entry to the entry number NUM. e o ma anche via seriale e via rete. # # You can specify ’saved’ instead of a number. il floppy viene sempre identificato con fd0 (nel caso ci siano due floppy ci sarebbe anche fd1) mentre i dischi vengono identificati. il che lo rende molto pi` flessibile. e una serie di stage1_5 che contengono gli stadi intermedi che GRUB utilizza per accedere ai contenuti di vari filesystem (sono supportati tutti i principali filesystem di Linux). in ordine di rilevazione. I comandi di GRUB sono molteplici ed oltre a quelli usati per impostare l’avvio dei vari kernel. Il file device. per cui questo diventa una sorta di file di configurazione. the default entry # is the entry saved with the command ’savedefault’. Si tenga presente che GRUB non distingue i nomi per i dischi SCSI. ed un help on line con il comando help. e la shell di GRUB offre funzionalit` avanzate a ` come l’auto-completamento di comandi e nomi. un esempio di questo file ` il seguente: e piccardi@monk:/boot/grub$ cat device. LA GESTIONE DELL’AVVIO DEL SISTEMA 211 problema del 1024-simo cilindro. Il vantaggio di usare menu.map contiene invece la lista dei dispositivi riconosciuti da GRUB in fase di installazione. GRUB identifica i dispositivi con un nome fra parentesi tonde. dato che non ha bisogno del BIOS per gestire l’I/O. Questa ` disponibile anche da Linux.map viene generato con il comando di installazione di GRUB. In this case. Il comando copia anche nella directory /boot tutti i file di GRUB. e come questi vengono mappati nella notazione interna di GRUB. Numbering starts from 0. ma e o si ha anche a disposizione una micro-shell che consente di navigare attraverso un filesystem ed esplorarne il contenuto. Il comando esegue anche una scansione dei dispositivi e crea device. hd1. ma ` in grado di leggere nativamente i principali filesystem. ce ne sono altri con capacit` di ricerca dei file. e cosicch´ non solo si pu` fare riferimento alle immagini del kernel attraverso un pathname. quindi anche questi verrebbero identificati con la sigla hdN (con N dipendente dall’ordine di rilevamento). a di visualizzazione e confronto del loro contenuto. infatti se avviato normala mente mette a disposizione una specie di shell da cui eseguire i vari comandi interni.map. and # the entry number 0 is the default if the command is not used.map (fd0) /dev/fd0 (hd0) /dev/hda che ci mostra come su questa macchina sia presente un floppy ed un hard disk. se lo si lancia con il comando grub. Inoltre non ` limitato a lanciare il sistema dal primo canale IDE.5. in questa directory si trovano i file stage1 e stage2 che contengono i due stadi standard usati nell’avvio.lst (sempre sotto /boot/grub) o e questi verranno eseguiti automaticamente all’avvio. . la differenza ` che essa ` e e e disponibile anche quando viene lanciato all’avvio. In realt` GRUB non ha un vero e proprio file di configurazione. 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). si pu` dirgli di usare una radice diversa con o l’opzione --root-directory=DIR.3.lst ` che questo permette di creare automaticamente un men` e u semigrafico (in formato testo) dal quale scegliere quale kernel (o altro sistema) avviare. o Tutti i file di GRUB sono mantenuti in /boot/grub. pu` usare uno qualunque dei dischi presenti. E per` possibile inserire una lista di questi comandi nel file menu. Un altro grande vantaggio ` che GRUB pu` ricevere i comandi avvio non solo dalla console. ma. Il file device. u e essendo di nuovo indipendente dal BIOS. grub-install: questo prende come parametro il dispositivo su cui si vuole installare GRUB. a o . I vari kernel sono introdotti da una direttiva title. di montare la directory radice e di lanciare il programma di avvio del sistema. disable all interactive editing # control (menu entry editor and command-line) and entries protected by the # command ’lock’ # e. kernel 2. Nel caso precedente allora si dice di cercare il kernel nella prima partizione del primo disco. before automatically booting the default entry # (normally the first entry defined).212 default CAPITOLO 5. password topsecret # password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/ # password topsecret title root kernel savedefault title root kernel savedefault Debian GNU/Linux.21 root=/dev/hda1 ro single e su Debian si pu` anche usare il comando update-grub.4. che effettua una ricerca dei kernel o presenti in /boot/ e crea automaticamente una le relative voci in menu.g. in SEC seconds.0) /boot/vmlinuz-2. fra cui occorre comunque specificare il dispositivo da montare come radice (nell’esempio con root=/dev/hda1). 60 in realt` passando l’opzione init=. Si tenga presente che questo ` relativo alla partizione stessa (non esiste in concetto di radice e in GRUB). si pu` lanciare un programma qualunque indicandone il path. dopo un tempo di attesa specificato con timeout.21 (recovery mode) (hd0.4.3. nella lista di immagini dichiarate. a e 5. L’elenco completo delle funzionalit` di GRUB ` disponibile nel GRUB-HOWTO. che specifica su quale partizione cercare u il file.21 root=/dev/hda1 ro Debian GNU/Linux. seguita dal pathname del file.lst.0) /boot/vmlinuz-2. ad essa si associa la direttiva root. Al nome del file si devono poi far seguire le opzioni da passare al kernel all’avvio. La direttiva default permette di stabilire quale.3. deve stare nella radice in /sbin. che per tradizione ` /sbin/init. in sostanza /dev/hda1.4.4. in cui si indica fra parentesi tonda il dispositivo.. kernel 2.60 Questo ` uno dei motivi per cui questo programma (come tutti e e quelli essenziali all’avvio. 5. seguito da una virgola e dal numero progressivo della partizione a partire da zero. L’immagine da caricare si specifica con la direttiva kernel. Questa viene indicata con la notazione di GRUB. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA 0 ## timeout sec # Set a timeout.1 una volta lanciato il kernel si cura solo dell’inizializzazione dell’hardware. che specifica una stringa che comparir` a nel men` iniziale. per cui se ad esempio si ` posto /boot su un’altra partizione non ` pi` necessario e e u specificarla nel nome del file. timeout 5 # Pretty colours color cyan/blue white/blue ## password [’--md5’] passwd # If used in the first section of a menu file..21 (hd0. deve essere lanciata se l’utente non interviene.4 Il sistema di inizializzazione alla SysV Come accennato in sez. 3 per l’avvio in console con la rete e 5 per l’avvio in modalit` grafica. Inoltre ` possibile passare da e ` compito di init portare il sistema in un certo runlevel. E possibile selezionare sia quali programmi (ed in che ordine) lanciare in ciascun runlevel. 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. o qualche libreria. a Tutto il procedimento di avvio eseguito viene controllato da /etc/inittab. dato si che tratta e sempre di lanciare gli opportuni programmi. normalmente il runlevel 0 ` usato per fermare il e sistema. Attivare o meno un servizio dipende dall’inserimento o meno (al posto “giusto”) delle opportune righe di avvio all’interno di essi. L’avvio “alla SysV ” avviene sulla base dei cosiddetti runlevel. Per gli altri runlevel le caratteristiche possono variare da distribuzione a distribuzione (con o senza servizi di rete. I principali valori utilizzabili per il campo action sono riportati in tab. e La differenza non ` tanto nel meccanismo di funzionamento del sistema. /etc/inittab. mentre il runlevel 6 per riavviarlo. che dar` origine alla famiglia dei BSD. avvio terminante con il login direttamente da X. sia quale runlevel utilizzare. che poi diventer` a SysV. come al solito le linee vuote o che iniziano per # vengono ignorate. E a questo punto che emerge una delle principali differenze fra i vari sistemi che si ispirano a Unix.3. e quella sviluppata a Berkley. quando nella modalit` in cui questi vengono avviati. I sistemi derivati da SysV usano un sistema pi` complesso. etc. Essa origina dalla divisione che ci fu negli anni ’70. per cui non deriva da nessuna delle due famiglie di Unix. E specificato nel suo file di configurazione. a Nei sistemi derivati da BSD questo viene fatto attraverso l’esecuzione di alcuni script. per la sua maggiore flessibilit`. Il formato di questo file ` molto semplice. fra la versione sviluppata alla AT/T. il runlevel 1 serve per andare nel cosiddetto single user mode. 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).5. Nel caso di Linux solo una distribuzione. e 61 . ha adottato questa modalit`. La gran parte delle distribuzioni di GNU/Linux61 ha adottato e u questo sistema.). la Slackware.12. per questo e in genere si ` cercato di prendere il meglio da entrambe. RedHat usa il 2 per l’avvio in console senza rete. con tutti i servizi disattivati e la directory radice montata in sola lettura. tutte le altre han preferito. o si ` indicato come radice una partizione sbagliata). Una delle differenze a principali fra i due sistemi ` quello del procedimento di avvio. tutto il u ` resto viene effettuato attraverso gli opportuni programmi invocati da init. la modalit` di recupero in cui pu` entrare nel sistema solo l’amministratore e solo a o dalla console. e le altre prevedono quattro campi separati dal carattere “:”. Per Debian da 2 a 5 sono tutti equivalenti. 5. LA GESTIONE DELL’AVVIO DEL SISTEMA 213 Due degli errori pi` comuni. lo stile di avvio di a a SysV. che garantiscono la ` presenza di un certo gruppo di servizi. numerati da 0 a 6. Un esempio di questo file ` il seguente: e GNU/Linux ` stato sviluppato da zero. i dettagli e l’elenco completo si trovano al solito nella pagina di manuale accessibile con man inittab. una sorta di modalit` operative a del sistema in cui vengono lanciati un particolare insieme di programmi. secondo quanto un runlevel all’altro. che comportano l’impossibilit` di proseguire nella procedura di u a avvio. e Una volta lanciato init il kernel non esegue pi` direttamente nessun altro compito. 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). I runlevel validi sono 7. ma che offre maggiore funzionalit` u a e soprattutto ` pi` “modulare”. d/rcS # /etc/init.d/rc 3 l4:4:wait:/etc/init. l0:0:wait:/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/powerfail stop # /sbin/getty invocations for the runlevels. il processo viene eseguito una sola volta all’avvio del sistema. # # The "id" field MUST be the same as the last # characters of the device (after "tty").d/powerfail now po::powerokwait:/etc/init. il campo indicante il programma da eseguire viene ignorato.d/rc 1 l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init. a eseguito quando viene notificato ad init il ritorno della corrente sulla linea elettrica.d/rc 4 l5:5:wait:/etc/init.d executes the S and K scripts upon change # of runlevel. Se il numero del runlevel scelto corrisponde con almeno uno di quelli indicati nel secondo campo viene eseguito il comando . once boot initdefault ctrlaltdel powerwait powerokwait powerfailnow Tabella 5. # This is run first except when booting in emergency (-b) mode. id:2:initdefault:# Boot-time system configuration/initialization script. ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now # What to do when the power fails/returns. # The default runlevel. si::sysinit:/etc/init. pf::powerwait:/etc/init. il processo viene eseguito una volta all’ingresso nel runlevel senza aspettare la sua terminazione prima di proseguire. viene usato in genere per invocare shutdown.d/rc 0 l1:1:wait:/etc/init.214 CAPITOLO 5. eseguito quando viene notificata ad init la caduta della linea elettrica da parte del programma di gestione del gruppo di continuit`. il valore del runlevel viene ignorato. il processo viene eseguito una volta all’ingresso nel runlevel e si aspetta la sua terminazione prima di proseguire. 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/rc 6 # What to do when CTRL-ALT-DEL is pressed.d/powerfail start pn::powerfailnow:/etc/init.d/rc 5 l6:6:wait:/etc/init. esegue il processo specificato quando init riceve un segnale di SIGINT o se si utilizza la combinazione di tasti ctrl-alt-del. indica quale runlevel deve essere utilizzato all’avvio. eseguito quando viene comunicato ad init da parte del programma di gestione del gruppo di continuit` che le a batterie si stanno esaurendo.12: Principali valori delle azioni indicabili nell’omonimo campo di /etc/inittab. 63 dove N corrisponde al numero del runlevel passato come argomento e legge la lista dei file ivi presenti. tutto il procedimento di avvio di SysV viene effettuato. LA GESTIONE DELL’AVVIO DEL SISTEMA 215 indicato nella ultima colonna secondo la modalit` specificata dal terzo campo.d a seconda delle distribuzioni. nella catena di esecuzioni successive il processo rester` sempre lo stesso.d/rc (che.d. ed avviarlo o fermarlo a piacere nei vari runlevel con un semplice link simbolico. Se vediamo il contenuto di queste directory vedremo che esse contengono tutte una serie di link simbolici agli script di /etc/init. grazie alle due cifre. In questo modo i servizi indicati dai rispettivi script vengono fermati o avviati.d/rc. e altre come initdefault impostano proprio il runlevel di default.d. come vedremo fra poco. e nell’ordine stabilito dalle due cifre usate nella sigla. Specificando a come azione wait si richiede che il programma sia eseguito una sola volta.3.d. come accennato. e o Specificando respwan si chiede che il comando sia messo in esecuzione immediatamente. Un seconda azione che si pu` volere modificare (o disabilitare) ` la reazione alla combinao e zione di tasti ctrl-alt-del che nell’esempio ` specificata dall’azione ctrlaltdel. per ogni servizio. per ciascun programma o servizio che si vuole attivare. grazie all’uso dello script /etc/init. 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. 62 . Se invece non ` necessario attendere la conclusione si pu` usare once. init. powerfailnow. nell’esempio ` questo il caso con gli script e /etc/init. per o ciascun runlevel. con un argomento pari al numero dello stesso. Si pu` anche.62 all’uscita dalla shell. Il problema con questo file ` che il significato di queste azioni non ` di immediata comprensioe e ne. 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. reload che fa rileggere la configurazione. di uno specifico script di avvio. Il meccanismo di avvio di SysV si basa infatti sulla presenza. la cui locazione.d. In genere non c’` molto da fare con questo file. con lo stesso nome ma preceduto da una sigla composta da una S od una K seguite da un numero di due cifre.d/rc si limita ad eseguire tutti questi script in ordine alfabetico. passando l’argomento stop a quelli che iniziano per K (che sta per kill ) ed l’argomento start a quelli che iniziano per S. Dopo aver letto la lista dei file presenti /etc/init. che avvia il servizio. Come si pu` notare dall’esempio precedente. da e mettere in /etc/init. ` e in /etc/init. attendendo che esso sia concluso prima di passare all’azione successiva. avere una procedura d’avvio personalizzata. attraverso inittab si possono impostare solo o alcune azioni elementari. Se si va ad analizzare il contenuto di /etc/init. accorgendosi della terminazione del processo. sono quelli usati per avviare e fermare i servizi). in quanto alcune sono indipendenti dal runlevel scelto. ad esempio per passare dal login da console a quello su X (sempre che questo sia previsto dalla distribuzione. senza attendere la sua conclusione per proseguire coi successivi. per RedHat questo significa mettere un 5 al posto di 3. rilancer` di a nuovo getty. Inoltre il campo id pu` dover essere soggetto a restrizioni come nel caso delle righe di getty che richiedono o il numero della console. a 63 direttamente sotto /etc o dentro /etc/init. restart che lo ferma e lo riavvia. Questi script prendono sempre come parametri una serie di comandi: start. si richiede inoltre che esso sia rilanciato automaticamente ogni volta che se ne termina l’esecuzione. ed invoca il e programma shutdown per riavviare il computer. secondo il FHS. Come si pu` notare questo viene invocato. powerokwait. in Debian invece non esiste). come per powerwait.5.d/rc ci si accorger` che questo verifica a la presenza di una directory rcN. 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. stop che lo ferma. In questo modo ` possibile. seguendo il criterio fondamentale dell’archietettura di un sistema unix-like per cui tutto ` un file. specifiche dei segnali elettrici ecc. a In Linux il supporto per queste interfacce ` ovviamente fornito direttamente dal kernel. sono comunque disponibili innumerevoli programmi in grado di automatizzare il compito.3) per le quali.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. in modo da poterne utilizzare le capacit` specifiche. anche se non sono previsti fra quelli che verrebbero avviati se si andasse direttamente in quel runlevel. 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).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. 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). u Una interfaccia di espansione in sostanza non fornisce direttamente delle funzionalit` finali.1. sono necessari e ulteriori modalit` di accesso e controllo per le funzionalit` che non sono comprese in questa a a astrazione. e che predispone tutta l’infrastruttura software con cui ` possibile leggere i dati relativi a dette e interfacce. Questi ultimi. a che sono specifiche del singolo dispositivo che si pone su di essa. come update-rc. 7.2.) che software (i comandi che la CPU deve dare per comunicare con l’interfaccia ed i dispositivi presenti sulla stessa). e Si noti come la presenza dei servizi presenti in un determinato runlevel possa dipendere da come si ` arrivati ad esso. .216 CAPITOLO 5. 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. 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). altrimenti resteranno attivi. 5. 5. dimensioni. per l’uso i quali rimandiamo alle rispettive pagine di manuale. 1. Entrambe queste interfacce definiscono uno standard sia hardware (consistente in piedinatura. 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. In questo modo il sistema operativo pu` inviare comandi e scambiare o dati con le singole periferiche. 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. al di l` dell’accesso ai dispositivi a finali secondo l’interfaccia classica per cui in un sistema unix-like tutto ` un file. e poi dialogare con i singoli dispositivi su di esse presenti. potranno e poi essere acceduti attraverso l’interfaccia generica illustrata in sez.d per Debian o chkconfig per RedHat. e viceversa. Come accennato attivare o disattivare un servizio su un certo runlevel ` semplicemente e questione di creare un link simbolico con l’opportuna sigla iniziale.4. 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. 4). eth0 ide2. viene alzato un livello su uno dei piedini del processore a questo dedicato.4. usb-uhci. 5. nella seconda colonna sono in senso fisico. il cui numero progressivo ` riportato in prima colonna.4. LA GESTIONE DI INTERFACCE E PERIFERICHE 217 Una descrizione dettagliata del funzionamento di queste interfacce va ben oltre lo scopo di queste dispense. in altre architetture sono 32 o 64. btaudio. Le risorse fondamentali usate da una interfaccia sono sostanzialmente due gli interrupt e i 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. In genere l’uso di un canale DMA si abbina sempre a quello di un interrupt che serve a segnalare la conclusione del trasferimento. ı In genere un processore ha un numero limitato di linee di interrupt (originariamente nei PC erano 8. 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. La seconda risorsa ` quella dei canali DMA. che saranno poi trasferiti in maniera asincrona.5.65 che di norma pu` o essere eseguita a livello di BIOS. 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. 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. e rispettivamente ai dispositivi ad essi associati (riportati nell’ultima). come l’interfaccia IDE per i dischi. oggi sono state portate a 15). la loro gestione ` infatti completamente realizzata all’interno del kernel attravere so il codice relativo al loro supporto. bttv EMU10K1. ide3. che pu` essere utilizzata in altre operazioni. 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. 65 64 . le seriali e la parallela. 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. in realt` questo ` un problema che si ha quasi esclusivamente sui PC intel-compatibili. cos` che la CPU sistema possa utilizzare ı i dati disponibili in memoria. aic7xxx PS/2 Mouse ide0 ide1 che mostra l’allocazione degli interrupt. 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. 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. 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. I problemi che possono sorgere sono allora quelli dell’allocazione di queste risorse. In particolare alcuni interrupt sono assegnati staticamente a periferiche presenti sui PC da prima che fosse possibile una allocazione dinamica. che consentivano l’utilizzo di schede di espansione. a 67 una descrizione pi` dettagliata pu` essere trovata nel Plug-and-Play HOWTO. quasi subito portato a 16. mentre altre devono essere allocate opportunamente quando si inserisce il relativo dispositivo su una interfaccia di espansione. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA riportati il numero di interrupt registrati al momento ed un sommario di questa statistica ` e riportato nelle ultime quattro righe. In questo caso era cura del sistemista allocare queste risorse in maniera compatibile fra le varie schede (con le opportune impostazioni sui jumper ). i canali DMA o le porte di I/O da utilizzare. in particolare gli interrupt che a differenza del pi` recente bus PCI non possono essere condivisi u fra schede diverse. un cui esempio `: e e # cat /proc/ ioports 0000-001f : dma1 0020-003f : pic1 0040-005f : timer 0060-006f : keyboard 0070-007f : rtc 0080-008f : dma page reg 00a0-00bf : pic2 00c0-00df : dma2 00f0-00ff : fpu 0170-0177 : ide1 01f0-01f7 : ide0 02e8-02ef : serial(set) 02f8-02ff : serial(set) 0376-0376 : ide1 03c0-03df : vga+ 03f6-03f6 : ide0 03f8-03ff : serial(set) 0cf8-0cff : PCI conf1 5c20-5c3f : ALi Corporation M7101 PMU . u 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. Anche in questo caso alcune di queste porte sono allocate staticamente a periferiche standard come le seriali. 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. con conseguente impossibilit` di usare le espansioni... u o 66 . Analogamente abbiamo: # cat /proc/dma 4: cascade che mostra l’allocazione dei canali DMA. 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. al giorno d’oggi ` sostanzialmente in disuso. 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. 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. usata principalmente per modem interni e schede sonore. Una terza risorsa ` quella delle porte di I/O. e e si trova soltanto sulle macchine pi` vecchie. L’interfaccia ISA nasce come estensione dei bus dei vecchi PC.218 CAPITOLO 5. la situazione corrente dell’allocazione ` riportata dal kernel nel file /proc/ioports.66 in cui le precedenti risorse potevano essere allocate dinamicamente dal sistema operativo o dal BIOS ed impostate sulle schede. originariamente prevedeva un bus a 8 bit. inoltre se il meccanismo fallisce ci si pu` trovare con a o delle schede presenti ma non utilizzabili. ioport e dma che permettono di utilizzare la scheda sapendo quali sono le risorse ad essa allocate. Eseguendo il comando si esegue la configurazione delle schede e l’assegnazione delle risorse secondo quanto specificato nella configurazione. con Linux c’` il problema e che quando la configurazione viene eseguita in un secondo tempo i nuovi valori non vengono salvati nella ESCD. a partire dalla versione 1. Il comando prende come unico argomento il nome di un file di configurazione (che in genere ` e /etc/isapnp. dove vengono mantenute tutte le configurazioni del BIOS) in modo da poter essere riutilizzata al riavvio successivo.71 In genere72 quando il BIOS esegue la configurazione delle schede PnP questa viene salvata nella memoria non volatile (la cosiddetta ESCD. 70 o si pu` dire al BIOS di non farlo specificando che si ha un sistema operativo Pnp enabled che si occuper` o a del compito nella apposita sezione di configurazione. a questo nel caso di Linux significa solo che si dovranno individuare quali sono le risorse assegnate. nel caso di Linux buona parte dei moduli delle schede ISA utilizzano i parametri irq.conf ` piuttosto complesso. nel caso di Linux. LA GESTIONE DI INTERFACCE E PERIFERICHE 219 (in breve CSN) che la identifica e ne vengono rilevate le caratteristiche. ı Il formato di isapnp. accessibile con man isapnp. Le uniche opzioni sono --help e --version il cui significato ` evidente. significa che la configurazione dovr` essere effettuata prima di caricare i moduli a relativi a dette schede. ed esegue le impostazioni secondo le direttive in esso contenute. Se non si fa cos` e ı si corre il rischio.18 si pu` e o usare anche . 72 alcuni BIOS meno evoluti non supportano questa funzionalit`. per indicare una lettura dallo standard input. 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. Sebbene in teoria questo permetta a di evitare la riconfigurazione tutte le volte che si riavvia la macchina. quando viene inserita una nuova scheda Plug’n Play questa verr` riconosciuta a e configurata e la configurazione sar` aggiunta nella ESCD. cos` che al successivo riavvio con Linux queste diventino inutilizzabili. 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. in quanto con Linux non c’` modo di salvare le impostazioni precedenti.4. e presentare il risultato finale al sistema operativo.conf). dopo di che alle varie schede vengono assegnate le risorse da utilizzare in modo che non ci sia conflitto. In questo modo un driver potr` utilizzare la scheda conoscendo i parametri che indicano a quale risorsa utilizzare. 71 questo. almeno fin quando i driver ed il supporto e u sulle schede funzionano correttamente.4. se poi si cerca di riallocare le risorse di una scheda in uso gli effetti possono essere anche peggiori.x. usando Windows (95 o 98) sulla stessa macchina che questo configuri le schede in maniera differente.come nome di file. l’unico modo di eseguire la configurazione era grazie al programma isapnp. Il problema ` che se un modulo viene caricato prima che il PnP abbia eseguito e l’allocazione la scheda non sar` utilizzabile. In genere dovrebbe essere eseguito ad ogni riavvio. a 69 68 .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. e non staremo qui a descriverlo (gli intee ressati possono fare riferimento alla pagina di manuale. 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. Extended System Configuration Data.5.conf) dato con buona probabilit` il blocco completo del sistema.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. Per tutta questa serie di motivi il meccanismo del Plug’n Play finisce con il complicare notevolmente le cose. Per questo motivo con Linux ` in genere preferibile usare le capacit` di configurazione fornite direttamente e a dal sistema. Prima dei kernel della serie 2. direttamente nel formato utilizzato per la configurazione del programma isapnp. stampa un messaggio di aiuto. ignorandolo si potranno trovare lo stesso le schede presenti. 5. Al solito per l’elenco completo ed i dettagli si faccia riferimento alla pagina di manuale. cui richiedere le informazioni. contando sull’uso del driver (ovviamente fornito solo per DOS/Windows) per eseguire le impostazioni. Se per` lo si invoca con l’opzione -c il comando stesso cerca o di determinare le impostazioni pi` sicure e fornisce una versione pronta (cio` senza necessit` di u e a togliere i commenti) del file stesso. Se invocato senza argomenti il comando stampa sullo standard output il risultato della scansione. Tabella 5. Pertanto ` sempre opportuno eseguire il comando in single user e mode (vedi sez. L’argomento pu` essere specificato a o come valore esadecimale (se inizia con le cifre 0x). 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. Questo significa che in certi casi le informazioni ricavate da pnpdump non sono corrette. Si tenga presente per` che se l’allocazione risulta impossibile o il comando pu` bloccarsi indefinitamente nel tentativo di trovare una soluzione. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA che in genere questo file viene prodotto automaticamente grazie al comando pnpdump.3. e potrebbe essere necessario controllare quali sono le risorse utilizzate sotto Windows per ricavare dati esatti. Le opzioni principali del comando sono riportate in tab. ignora gli errori di checksum nel riconoscimento degli indirizzi delle porte di I/O. e produce un output direttamente utilizzabile senza necessit` di rimuovere i a commenti. 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. Il comando comunque esegue la scansione effettuando vari tentativi di comunicazione con le eventuali schede.13: Principali opzioni per il comando pnpdump. ottale (se inizia per 0) o decimale. stampa la versione scrive il risultato sul file passato come parametro invece che sullo standard output.13. nel qual caso il programma non esegue la a procedura di ricerca. o Se il comando viene invocato con un solo argomento questo viene interpretato come il valore minimo della porta di I/O da cui iniziare la scansione sul bus ISA. si pu` cos` limitare l’intervallo o ı evitando di interrogare schede gi` configurate o non PnP. in questo modo ` possibile vedere le eventuali impostazioni e fatte dal BIOS o mantenute di default dalle schede stesse. interrogando in fila tutte le porte di I/O possibili (nell’intervallo fra 0x203 e 0x3ff. 5. Opzione -c Significato tenta di determinare delle impostazioni sicure per i dispositivi. 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). per identificare quali di queste corrispondono ad un dispositivo presente sul BUS. Il problema ` che in certi casi le informazioni riportate non sono accurate. riservato alle schede ISA). 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.4).220 CAPITOLO 5. scarica i valori dei registri interni per ogni scheda e li stampa sullo standard output. -d -h -i -v -o . pertanto ` comune salvare il file e poi o e editarlo per togliere i commenti. 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. Il numero di bus identifica su quale bus si trova la scheda. Uno schema della disposizione dei bus pi` comune nelle architetture PC ` in fig. il numero di dispositivo ed il numero di e funzione. 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 possono essere confrontati con un database delle schede prodotte (usualmente mantenuto nel file /usr/share/misc/pci. inoltre e il bus supporta la condivisione degli interrupt. il tutto compone un numero a 16 bit che viene a costituire l’indirizzo hardware della periferica sul bus PCI.4. per cui con una scheda apposita si pu` o controllare un altro bus PCI contenente altre schede. 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). 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.ids). per una banda passante teorica di circa 1Gbit/s. Il bus nasce a 32 bit e prevede una frequenza per le operazioni di 33. la CPU ` collegata attraverso il cosiddetto host bridge sul bus prine cipale che ` sempre il bus 0. pi` il file devices u .4: Schema della disposizione del bus PCI e delle varie interfacce di espansione. Una caratteristica comune del PCI ` che i bus possono essere collegati in fra di loro e attraverso dei dispositivi appositi detti PCI bridge. Figura 5. I computer pi` recenti in genere hanno sempre almeno due bus (uno dei quali viene usato u principalmente per l’AGP). 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. 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). che contiene una directory (chiamata con il numero corrispondente per ciascun bus presente nel sistema.4. ed in grado di supportare velocit` di trasferimento a dei dati molto superiori al precedente ISA. 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. u A differenza del bus ISA nel caso di PCI la allocazione delle risorse ` dinamica. infatti lo standard supporta la possibilit` di avere pi` bus (fisicamente distinti) sulla stessa macchina. 5. fino ad un massimo a u di 256.3MHz.5. in genere gli e interrupt vengono associati sulla base dello slot su cui ` inserita la scheda di espansione. . Al posto del nome pu` anche essere usato un valore o esadecimale che ne indica la posizione nello spazio dei registri.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 PCI bridge: VIA Technologies. numero di dispositivo e numero di funzione seguito da una descrizione sommaria della periferica relativa. o 73 . AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA in cui sono riportate le informazioni relative a tutte le schede presenti (ed agli eventuali moduli cui sono associate). questa pu` essere sia -s per o usare l’indirizzo che -d) per usare l’identificativo della scheda. nelle versioni pi` vecchie o u u esisteva solo il file /proc/pci.func (il formato della prima colonna del precedente esempio) dove ciascun numero identificativo pu` essere sostituito dal carattere jolly “*”.0 SCSI storage controller: Adaptec AHA-2940U/UW/D / AIC-7881U (rev 01) 00:0f. mentre con o -s si pu` selezionare quali dispositivi guardare.L per indicare che si vuole eseguire l’operazione su un registro di dimensione pari ad un byte. IRQ 23 I/O ports at dc00 [size=256] Memory at dffffe00 (32-bit. che contengono informazioni o controllano vari aspetti del loro funzionamento. VT8363/8365 [KT133/KM133] (rev 03) 00:01.0 Host bridge: VIA Technologies.4 Host bridge: VIA Technologies. passando un parametro che esprime il relativo o indirizzo nella forma bus:slot. RTL-8139/8139C/8139C+ (rev 10) 01:00. 5. attualmente deprecato.: Unknown device 7120 Flags: bus master. con qualcosa del tipo di: 0000:00:12. che pu` essere utilizzato e o per interrogare e configurare i singoli dispositivi presenti sul bus. Inc. a Il comando prende come argomento il nome del registro73 su cui si vuole operare. Un secondo comando utilizzabile per operare sul bus PCI ` setpci. VT82C686 [Apollo Super South] (rev 40) 00:07. non-prefetchable) [size=256] Capabilities: <available only to root> e ripetendo una seconda volta l’opzione si possono avere ancora pi` dettagli. come il tempo massimo che un dispositivo pu` tenere il bus. USB (rev 16) 00:07.3 USB Controller: VIA Technologies.1 IDE interface: VIA Technologies. entrambe usano la stessa sintassi gi` vista in tab. Ltd. 5. VT6102 [Rhine-II] (rev 74) Subsystem: Micro-Star International Co. Inc. Inc.2 USB Controller: VIA Technologies. u Con l’opzione -t si pu` invece avere una stampa della struttura ad albero del bus.. Inc.0 Ethernet controller: VIA Technologies. USB (rev 16) 00:07.0 Ethernet controller: Realtek Semiconductor Co. usando l’opzione -v si pu` avere una descrizione pi` dettagliata comprensiva o u delle risorse utilizzate dalla periferica stessa. Le altre opzioni o principali sono riportate in tab. Ltd. lo standard PCI prevede che tutte le schede debbano avere una serie di registri di configurazione.0 ISA bridge: VIA Technologies. . VT82C586/B/686A/B PIPC Bus Master IDE (rev 06) 00:07. Inc. Indicando solo il nome di un registro ne sar` stampato il valore corrente. e sar` l’unico supportato in futuro). Inc. Inc. 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).B. Il comando necessita sempre di una opzione di selezione per indicare su quale dispositivo operare. medium devsel. una parola (16 bit) o una parola lunga (32 bit).14. e a che contiene una lista descrittiva delle varie schede presenti. con qualcosa del tipo: [root@gont corso]# lspci 00:00. Questo per` vale per le versioni di kernel pi` recenti. per un elenco completo si faccia al solito riferimento alla pagina di manuale del comando.14 per lspci. Inc.W e . Al nome del registro si possono aggiungere i suffissi . VT8363/8365 [KT133/KM133 AGP] 00:07. La lista dei dispositivi presenti sul bus pu` essere ottenuta anche con il comando lspci (nei o nuovi kernel questo ` il metodo canonico.222 CAPITOLO 5. latency 32. bench´ ancora presente per compatibilit`. Il comando non e a prende argomenti e stampa sullo standard output la lista delle schede rilevate sul bus PCI. VT82C686 [Apollo Super ACPI] (rev 40) 00:09. 5.1 ` che nonostante sia possibile e inserire dispositivi diversi su un bus SCSI. collegare pi` PC alla stessa e u interfaccia SCSI. 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. identificativo del produttore del dispositivo. e viene fatto normalmente con sistemi di dischi condivisi.4. un e elenco completo di tutti i nomi definiti ` riportato nella pagina di manuale di setpci (i nomi sono e riportati in maiuscolo. mostra le informazioni relative ad uno o dispositivi che corrispondono ad un certo indirizzo sul bus espresso un parametro nella forma bus:slot.h o o alle specifiche dello standard PCI. anche se alcuni vecchi controller usavano l’interfaccia ISA) e vengono utilizzati tramite esse. 5.5. Registro device_id vendor_id latency_timer Significato identificativo del dispositivo.4.14: Principali opzioni per il comando lspci.func. 223 -d -i Un elenco sommario dei principali registri e del relativo significato ` riportato in tab. ma anche CD e ` infatti possibile.15: Costanti identificative di alcuni registri PCI usate dal comando setpci. l’interfaccia ` utilizzata quasi esclusivamente per e l’accesso a periferiche di stoccaggio di dati (principalmente dischi e nastri.15.2 in quanto anche essa definisce una struttura a bus su cui vengono innestati dispositivi multipli. valore (in sola lettura) che specifica quanto spesso il dispositivo necessita di accedere al bus (in unit` di quarti di microsecondo). 74 .2 Gestione delle interfacce SCSI L’interfaccia SCSI (Small Computer System Interface) potrebbe essere inserita fra le interfacce di espansione generiche trattate in sez. o riporta il valore numerico degli identificatori delle schede invece di usare la descrizione testuale riportata nel database. Tabella 5. riporta la lista degli interrupt per come li vede il bus (con APIC nel kernel vengono rimappati). 5. LA GESTIONE DI INTERFACCE E PERIFERICHE Opzione -v -n -b -t -s Significato aumenta le informazioni stampate (pu` essere ripetuto due volte). a min_gnt max_lat Tabella 5. 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). per il relativo significato si pu` fare riferimento alla dichiarazione delle constati omonime in /usr/include/linux/pci. 5. mostra una schematizzazione ad albero della disposizione dei dispositivi. ma possono essere specificati anche in minuscolo). Una seconda differenza con le interfacce generiche di sez. 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). usa il file passato come parametro come database degli identificativi delle schede PCI.4.4. 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. dei connettori a e dei segnali sono varie il che ha portato ad una discreta confusione.224 CAPITOLO 5. 5. molte delle quali relative alla gestione dei segnali sui cavi ed alla composizione della cablatura stessa (terminazione attiva. Uno dei problemi maggiori con le interfacce SCSI ` che dalla prima definizione dello standard e (SCSI-1. prevedeva la possibilit` di usare un bus per il trasferimento dati a 16 bit (detto wide. Passi successivi sono state a l’introduzione di bus con frequenze sempre maggiori consentendo velocit` di trasferimento sempre a maggiori: Ultra SCSI a 40MiB/s. la frequenza di trasmissione u a era di 5MHz. che in genere si mette sul bus a unica eccezione ancora in uso ` quella degli primi scanner che. il bus prevede l’esistenza e di almeno una unit` di controllo. con una corrispondente velocit` massima di trasferimento di 5MiB/s. 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. segnali differenziali. u a 75 . Lo schema classico di una interfaccia SCSI ` riportato in fig. venivano pilotati da una interfaccia SCSI. Una prima modifica. questo port` allo sviluppo di a o un secondo standard (lo SCSI-2). erano poi a previste 4 linee per gli indirizzi. detto narrow ) raddoppiando anche il numero di periferiche inseribili nel bus.5: Schema della struttura delle interfacce SCSI. la scheda. Ultra160 a 160MiB/s e ultimamente pure Ultra 320 a 320MiB/s. In questo modo si otteneva a parit` di frequenza (con il cosiddetto Fast a Wide SCSI ) un raddoppio della velocit` di trasferimento 20MiB/s. Altre modifiche vennero fatte riguardo la a modalit` di gestione dei segnali sui cavi ed il tipo di cablatura. 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. in a contrapposizione con il precedente.5. del 1986) si sono susseguite molte modifiche (lo SCSI-2. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA masterizzatori) e non all’uso di periferiche generiche. detta controller SCSI. Lo standard prevedeva una lunga serie di estensioni.75 ed il protocollo stesso della trasmissione dei dati sul bus ` dedicato a questo tipo di lavoro. Ultra2 a 80MiB/s. Lo standard originario (SCSI-1) prevedeva un bus basato su un connettore a 50 pin. non essendo all’epoca disponibile una interfaccia e pi` semplice con sufficienti capacit`. di cui 8 (pi` uno di parit`) erano riservati per la trasmissione dei dati. in modo da poterne ottimizzare l’ordine di esecuzione. chiamata Fast SCSI venne fatta aumentando la frequenza del bus a 10MHz per raddoppiare la velocit` di trasferimento. u Figura 5. consentendo fino ad un massimo di 8 periferiche sul bus. ma pu` essere realizzato anche con un insieme di connettori che o collegano fra loro le varie periferiche. nuovi connettori). Infine il bus non ` di solito cablato in soluzione e e unica su una piastra madre. che richiede un connettore diverso a 68 pin. Una delle modifiche principali (detta Wide SCSI ). 4 il sistema ` stato organizzato e su tre livelli. nastri o dischi.6: Strutturazione del supporto alle interfacce SCSI nel kernel. nell’ordine u in cui l’adatattore stesso li presenta (che dipender` ovviamente da come ` fatto quest’ultimo). ma dato che e lo standard prevede vari tipi di periferiche a partire dal kernel 2. quale ` l’interfaccia e e (in genere la scheda col controller. che identifica ciascun bus (detto anche. e questi saranno numerati progressivamente a partire da zero. Tutte le periferiche sul bus. e a cui si collegano le altre periferiche utilizzando gli appositi connettori.6. LA GESTIONE DI INTERFACCE E PERIFERICHE 225 PCI del computer. Un singolo controller pu` gestire anche pi` bus. il numero viene assegnato dal kernel all’avvio a seconda dell’ordine in cui rileva le schede presenti o di quando viene abilitato il supporto per bus virtuali che si utilizzeranno.4. come CD. 5. stanno i driver per le periferiche che si trovano sul bus. utilizzati direttamente dai u programmi quando accedono ai relativi file di dispositivo. ad esempio il protocollo viene utilizzato sia per accedere ai dischi sul bus USB (che siano memorie a stato solido o veri e propri hard disk). e Il secondo numero ` il cosiddetto channel number. a e Anche questo ` un numero progressivo che parte da zero. saranno inviati su un bus virtuale fornito dal driver per il supporto di dette funzionalit`. che saranno diversi a secondo della scheda SCSI utilizzata. in tal caso i comandi del protocollo SCSI. Al livello pi` alto. nel qual caso sar` in grado di alloggiare pi` conneto u a u tori. vengono identificate attraverso a un indirizzo di identificazione. 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). a Le periferiche accedute tramite interfaccia SCSI sono identificate attraverso quattro numeri: il primo ` l’host adapter number che identifica. alcuni controller infatti possono gestire pi` di un bus.5. ma pu` essere anche l’interfaccia di un bus virtuale) con o cui si accede ai dispositivi. compreso l’unit` di controllo. invece di diventare segnali elettrici su connettore attaccato ad un controller. Figura 5. in e altra nomenclatura. In genere sui dispositivi questo viene stabilito a . come il nome stesso indica. 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). Oltre a quest’ultimi per` si situano a questo livello anche tutti i moduli che o consentono di utilizzare il protocollo SCSI per controllare dispositivi posti su altre interfacce. che per utilizzare i masterizzatori IDE attraverso un meccanismo di emulazione. L’host adapter number ` un numero progressivo che parte da zero. Nel caso di Linux il supporto SCSI ` presente fin dalle prime versioni del kernel. canale SCSI ) associato ad un host adapter . 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. secondo lo schema illustrato in fig. ciascuno dei quali richiede una modalit` d’accesso a distinta. detto SCSI ID. 10 ANSI SCSI revision: 02 Rev: 1. 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. SCSI device sda: 241254720 512-byte hdwr sectors (123522 MB) sda: assuming drive cache: write through sda: sda1 Attached scsi disk sda at scsi0. Il kernel mantiene le informazione relative alle interfacce SCSI disponibili nella directory /proc/scsi. le eventuali partizioni saranno accedute e per numeri crescenti a partire da 1. canale. id 0. ID e LUN nulli. u e a Infine alcuni dispositivi pi` sofisticati (come le unit` a nastro dotate di libreria. anche se in alcuni confezionamenti sono disponibili dei selettori.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.. 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. Qualora invece si abbia a che fare con dei CDROM si avranno dispositivi diversi. Per i controller invece l’identificativo pu` essere modificato dal BIOS di configurazione. quest’ultimo dipende dal tipo di dispositivo. ed in particolare nel file scsi. channel 0. o LUN. di norma sono presenti dei jumper che permettono di impostare le linee corrispondenti. 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 . 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. u questo ` nullo. lun 0 e si noti come in questo caso sia stato rilevato un hard-disk su USB. ed dispositivo viene riconosciuto (non essendo qui disponibile un meccanismo di assegnazione degli ID ogni dispositivo verr` associato ad una diversa interfaccia) a con valori del canale. esattamente come per i dischi IDE.226 CAPITOLO 5. 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. ID e LUN. in particolare nel caso del secondo esempio si avr` (andando a controllare i messaggi di avvio) un risultato del a tipo: . per la maggioranza dei dispositivi. nel caso di dischi essi sono tutti nella forma /dev/sdX dove X ` una lettera progressiva a partire da a.. e Pertanto una modalit` di indicare le periferiche SCSI ` quella di fornire una quadrupletta di a e numeri che indicano interfaccia. che non hanno pi` periferiche a bordo. id. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA dall’utente con degli appositi interruttori. un esempio del contenuto del file. ma ` in o e genere preimpostato al valore pi` alto (in genere 7) che ` quello che ha maggiore priorit`. channel. in cui l’interfaccia di emulazione viene vista come scsi0. del tipo di: <scsi(_adapter_number). Infine occorre tenere sotto controllo l’allocazione degli o ID. che ` di norma a carico degli utenti. questo pu` essere fatto con comandi come: o echo "scsi remove-single-device H C I L" > /proc/scsi/scsi echo "scsi add-single-device H C I L" > /proc/scsi/scsi dove H. Un programma storicamente utilizzato per ricavare le informazioni relative ai dispositivi SCSI ` scsi_info.5. channel 0. e rimangono sostanzialmente solo dischi e nastri per l’uso professionale). ` /dev/scdN. (che in Debian fa parte del pacchetto pcmcia-cs). u 76 . 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. un nome equivalente. e in quest’ultimo caso. 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. I ed L sono la solita quadrupletta di numeri che identifica il dispositivo. LA GESTIONE DI INTERFACCE E PERIFERICHE Attached scsi CD-ROM sr0 at scsi0. channel 0. Ovviamente un dispositivo potr` essere rimosso solo se non ` al momento utilizzato. Una caratteristica speciale del file /proc/scsi/scsi ` che questo pu` essere acceduto anche e o in scrittura. 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. id 0. 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. si possono cos` rimuovere e aggiungere dispositivi. funzionalit` che pu` essere utile ı a o qualora si disponga di periferiche hot-swap che possono essere estratte a caldo dal bus76 . quando utilizziamo oltre al disco fisso anche una penna USB. C.4. a 77 si avrebbe lo stesso risultato nel caso si installassero pi` schede con lo stesso controller.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.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`. 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. inoltre la presenza di diversi standard sullo stesso bus pu` portare a degrado di prestazioni. anch’esso utilizzato. in cui il nastro non viene riavvolto quando arriva alla fine). a e Le altre informazioni presenti nella directory /proc/scsi sono una directory per ciascuna interfaccia utilizzata. corrispondenti alle due istanze della stessa interfaccia viste come host adapter diversi. alcuni bus infatti devono essere opportunamente terminati per cone u sentire una corretta trasmissione dei segnali. lun 0 Attached scsi CD-ROM sr1 at scsi0. id 1.0. lun 0 227 i CD infatti vengono acceduti con i dispositivi /dev/srN dove N ` un numero progressivo a partire e da 0. Un secondo aspetto da tenere presente nel caso di dispositivi SCSI ` che in genere il cablaggio e degli stessi ` pi` delicato. otterremo al suo interno due file. con il nome del relativo modulo di kernel. l’assegnazione delle risorse delle porte seriali ` predefinita.228 CAPITOLO 5. . IRQ: 3 78 quelli esterni. /dev/ttyS1.16. che riporta quelli presenti. l’uso contemporaneo di due porte seriali crea problemi se queste condividono la stessa linea di interrupt.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. ma pure alcuni di quelli interni. 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. utilizzando i comandi da inviare sul file /proc/scsi/scsi illustrati in precedenza. Infine sempre con il pacchetto scsitools viene anche fornito lo script rescan-scsi-bus. Le seriali sono presenti da sempre sui PC. se utilizzato senza opzioni viene stampato un breve riassunto delle principali caratteristiche dello stesso: monk:/home/piccardi/truedoc/corso# setserial /dev/ttyS1 /dev/ttyS1. insieme ai file di dispositivo con cui si pu` o accedere ad essi. Port: 0x02f8. e prevedono appunto una comunicazione via cavo estremamente semplice (e di breve distanza) basata sull’invio dei dati lungo una linea di trasmissione. come i winmodem. che possono essere estese a 4. UART: 16550A. Interrupt 3 4 3 5 Porta I/O 0x3F8 0x2F8 0x3E8 0x2E8 Dispositivo /dev/ttyS0.3 Gestione delle interfacce seriali Le interfacce seriali sono una delle prime interfacce create per la comunicazione fra computer. Tabella 5.78 ed una delle interfacce pi` semplici per collegarsi a dispositivi esterni come router o switch programmabili. Questo prende come primo argomento il file di dispositivo da configurare (o controllare). 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. 5. usate per lo pi` dai provider per gestire i a u modem).4. da fare e senza specificare un dispositivo. 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. le configurazioni standard di molte schede madri prevedono due interfacce. 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). A causa delle limitazioni dell’architettura originale dei PC. per le quali il kernel ` in grado di supportare la condivisione degli interrupt. 5. come parte di una scheda ISDN o di un modem-fax u e interno. /dev/ttyS3. Per ovviare a questo problema si pu` o utilizzare il programma di configurazione delle interfacce seriali setserial. u Data la loro presenza fin dalle origini dell’architettura 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`. ` invece da segnalare l’uso dell’opzione -l.16: Risorse e file di dispositivo usati dalle porte seriali. anche se negli ultimi tempi (per la presenza di nuove interfacce pi` veloci come l’USB) tendono ad essere meno presenti. Ci` u o non di meno esse restano le interfacce tipiche con cui vengono gestiti i modem. Un caso e di conflitto pi` comune ` invece quello in cui. sia che siano modem reali che modem finti. /dev/ttyS2. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA Gran parte dei programmi di gestione dell’interfaccia SCSI sono per` distribuiti con il paco chetto scsitools. 16550A. imposta il tipo di chip. e e -b che riporta solo un riassunto della configurazione del dispositivo. o 5. ` riportato in tab. in bit per secondo. a richiede una velocit` personalizzata pari a valore di baud_base diviso a per quello di divisor. al solito per una descrizione dettagliata e su pu` fare riferimento alla pagina di manuale di setserial. (per la lista si faccia riferimento alla pagina di manuale). i principali valori sono 8250. l’output delle informazioni riportate dal a comando ` controllato dalle ulteriori opzioni -a. Opzione port 0xHHHH irq N uart type Significato imposta la porta di I/O. imposta il divisore con cui calcolare una velocit` personalizzata. insieme a quello a degli altri parametri principali. azzera tutti i valori prima di fare le impostazioni. a richiede l’uso di una velocit` di 230400bps (bit per secondo).18: Principali direttive di impostazione del comando setserial. imposta il numero della linea di interrupt. imposta la frequenza delle operazioni di base. gli argomenti successivi al primo permettono di indicare quale parametro del dispositivo deve essere impostato dal comando. 5. 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. 16450.4. che ` il massimo raggiungibile da una seriale e standard. Quando il comando viene utilizzato con l’opzione -g gli argomenti vengono interpretati come un lista di dispositivi di cui stampare le propriet`. a richiede l’uso di una velocit` di 460800bps (bit per secondo). 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. stampa un riassunto della configurazione.17.4. Universal Asynchronous Receiver/Transmitter ) con uart. che fa stampare tutte le informazioni possibili. e Opzione -a -b -G -z Significato stampa tutte le informazioni disponibili. a autoconfig auto_irq baud_base X spd_hi spd_vhi spd_shi spd_warp spd_normal spd_cust divisor N Tabella 5. ma molto semplice ad realiz- . Si pu` o inoltre impostare a mano (qualora non venisse riconosciuta correttamente) il tipo di interfaccia (la UART. Se invocato senza l’opzione -g. richiede l’uso di una velocit` di 57600bps (bit per secondo). in generale soltanto l’amministratore pu` modificare i parametri dell’interfaccia. ma alcuni di questi possono essere impostati o anche da un utente normale. richiede di autoconfigurare anche la linea di interrupt. ecc. infine si pu` controllare o la velocit` della porta seriale con la serie di argomenti spd_* il cui significato.5. 5. con none si disabilita la porta. stampa le informazioni nel formato in cui vengono prese sulla riga di comando. l’elenco delle principali opzioni ` riportato in tab.18. Tabella 5. a richiede l’uso di una velocit` di 38400bps (bit per secondo).17: Principali opzioni per il comando setserial.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. I due parametri principali impostabili dal comando sono port e irq. il cui significato ` ovvio e e che prendono rispettivamente come ulteriore argomento il numero di porta e di interrupt. 16550. in genere vale 115200. a richiede l’uso di una velocit` di 115200bps (bit per secondo). ma si tenga conto che anche essi contano come unit` sul bus. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA zare e poco costosa per la realizzazione di dispositivi semplici (ed in genere portabili.7. Il protocollo prevede che le comunicazione siano tutte controllate dall’unit` di controllo. la presenza di hub secondari permette l’utilizzo di un a a maggior numero di periferiche rispetto alle porte presenti sul PC. non ` prevista nessuna possibilit` di comunicazione dei singoli dispositivi fra di e a loro. Il bus prevede fino ad un massimo di a 127 unit` per ciascuna unit` di controllo. Un bus USB ` costruito in maniera gerarchica ed ` controllato da una unit` di controllo (o e e a host). A ciascuna porta USB si pu` agganciare un dispositivo o un hub.79 Figura 5. 5. In genere su un computer ` presente un solo host (anche se alcuni ne hanno pi` di uno.230 CAPITOLO 5. ed i dispositivi possono solo rispondere all’unit` e o a di controllo.7: Schema della struttura di un bus USB.1. ed e u ` comunque possibile aggiungerne altri usando schede di espansione) cui sono agganciate 2 o 4 e porte. ` 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. pertanto le unit` disponibili per le periferiche sono in realt` a a a 127 meno il numero di hub aggiuntivi. secondo la struttura mostrata in fig. 5.4. a che ` l’unica che pu` iniziare una comunicazione. Come mostrato in fig. 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 quale a sua volta o avr` altre porte cui agganciare altri dispositivi ed hub.7 il bus prevede due direzioni per il flusso dei dati. dall’host alla altre architetture non hanno queste limitazioni. a cui ` direttamente collegato un concentratore (o hub) radice a cui tutti i dispositivi o e eventuali altri concentratori secondari vanno ad agganciarsi. 5. ma USB ` stata progettata con un compromesso fra prestazione e ed economicit`. 80 . alimentati dal bus. a seconda dei casi. almeno fino al 2.5Mbit/s anche in condizioni ideali. mentre prestazioni tipiche sono intorno a ai 2Mbit/s.0) consentiva una banda passante massima di 12Mibit/s.5. Isochronous transfers usata per inviare e riceve dati potendo contare su una quantit` di banda garantita.1.2. Tuttavia l’uso di dispositivi lenti.4. o compatibili con le specifiche Open Host Controller Interface (o OHCI) della Compaq (usata anche nel mondo Mac) o con la specifiche Universal Host Controller Interface della Intel. La seconda versione del protocollo. indicati con downstream e upstream. Inoltre i dispositivi si possono suddividere in autoalimentati.3). usualmente fornita direttamente dal chipset della piastra madre. ma e nella serie 2.0 le unit` di controllo sono a a sostanzialmente di due tipi. ma la seconda specifica richiede hardware a pi` semplice e quindi ` meno costosa. tastiere. viene a usata per i trasferimenti di dati da e verso i dispositivi. Negli ultimi tempi praticamente qualunque PC compatibile viene fornito di interfaccia USB. In ogni caso Linux supporta entrambi i tipi di unit` di controllo (UHCI o OHCI). a per una macchina che ha una unit` UHCI: a che fornisce un massimo di 400 mA. gli interrupt e l’overhaed del protocollo non consentono velocit` superiori a 8. avremo allora. ma ripetuti periodicamente. che devono essere di dimensioni ridotte e trasportati con affidabilit`.) che comunicano al massimo ad 1. basta e infatti usare lspci per verificare il tipo di unit` di controllo.4. ecc. vengono utilizzati come meccanismo di notifica (dato che non esiste un vero e proprio interrupt). Il supporto per USB ` stato introdotto per la prima volta a partire dal kernel 2.2. ma richiede un driver pi` complesso e quindi un maggior u e u carico sulla CPU.7.x il supporto ` molto grezzo. che in genere sono classificati in due tipi diversi. la USB2 permette invece di portare la banda passante ad un massimo teorico 480Mibit/s. In genere ` estremamente facile riconoscere quale delle due interfacce viene utilizzata. La presenza di due direzioni nel flusso di dati si riflette anche sui connettori. LA GESTIONE DI INTERFACCE E PERIFERICHE 231 periferica e viceversa. Bulk transfers usata per trasmettere dati alla massima velocit` possibile in maniera affidabile.80 o entrambi. 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. a utilizzando rispettivamente i moduli usb-uhci e usb-ohci (da selezionare nella relativa sezione di configurazione del kernel. viene usata per configurare i dispositivi e per supportare a i comandi di controllo di base. pena il rischio di non far funzionare nulla per mancanza di potenza. ampliando notevolmente l’utilizzabilit` del bus per a l’utilizzo con dispositivi di stoccaggio esterni (in particolare con dischi rimuovibili).5Mbit/s e quelli veloci che possono usare potenzialmente fino al 90% della banda passante massima. Interrupt transfers simili ai precedenti. usata per trasferimenti real-time (ad esempio i trasferimenti per a video e audio). la richiesta viene ripetuta periodicamente. 5. inoltre vengono specificati quattro tipi di trasferimento: Control transfers utilizzati per inviare pacchetti di controllo. La prima versione del protocollo (USB 1. Le funzionalit` sono le stesse.2. Per quanto riguarda USB 1.x o successivo. quindi attenzione a non sovraccaricare. a seconda che siano rivolti all’unit` di controllo (di tipo A) a o verso una periferica (di tipo B). anche se sono disponibili schede PCI con a bordo delle unit` di controllo. a ma senza affidabilit`.4. Un’altra distinzione fra i dispositivi ` fra quelli lenti (come e mouse.18 in cui sono state portate e indietro parecchie funzionalit` del 2. vedi sez. 2 USB Controller: VIA Technologies. medium devsel.. Per questo motivo in genere il o sistema ` in grado di usare un demone dedicato come hotplug..2 USB Controller: ServerWorks CSB6 OHCI USB Controller (rev 05) (prog-if 10 [OHCI]) Subsystem: ServerWorks: Unknown device 0220 Flags: bus master.4). 00:04. 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). medium devsel.1 Controller (rev 10) (prog-if 00 [UHCI]) Subsystem: VIA Technologies. (Wrong ID) USB Controller Flags: bus master. Invece se si dispone di una unit` USB 2. SCSI. non-prefetchable) [size=4K] . 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.. 5.1. Inc. IRQ 5 Memory at fe120000 (32-bit. In generale la scelta di quale modulo deve essere fatta in sede di installazione. In questo caso sotto la directory /proc/bus/usb compariranno tante directory quanti sono i bus disponibili (numerate in ordine crescente).. e e pu` essere fissata usando modules. altrimenti gran parte dei programmi di visualizzazione dei dati del bus non funzioneranno. 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. VT82xxxxx UHCI USB 1. contenente i relativi dati.. 82 si ricordi di abilitarne il supporto in caso di ricompilazione del kernel. #Int= 0. identificata con la sigla EHCI. latency 32. le specifiche utilizzate sono quelle della Extended Host a Controller Interface.232 CAPITOLO 5. IRQ 9 I/O ports at b400 [size=32] Capabilities: [80] Power Management version 2 . PCI. .. 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%). mentre per una unit` OHCI si avr`: a a davis:~# lspci -v . in quanto questo compito ` eseguito dal bus stesso. ciascuna delle quali conterr` un file con a nome il numero associato a ciascun dispositivo presente su detto bus.81 che ` in grado di rilevare la e e connessione e la disconnessione di nuove periferiche caricando (e rimuovendo) automaticamente i relativi moduli.conf (vedi sez.. latency 32. questo ` ormai obsoleto e e sostituito da hotplug che fornisce lo stesso tipo di funzionalit` in maniera generica per tutte le periferiche a (PCMCIA. 00:0f.. #Iso= 0 1 Spd=480 MxCh= 6 inizialmente la gestione automatica veniva effettuata tramite il demone usbmgr. mentre in questo caso il modulo da utilizzare ` ehci-hcd. 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). o riga del tipo: none /proc/bus/usb usbdevfs defaults 0 0 a /etc/fstab. Inc. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA holland:~# lspci -v . USB) che possono essere connesse e disconnesse a caldo. 00 Cls=09(hub ) Sub=00 Prot=01 MxPS= 8 #Cfgs= 1 Vendor=0000 ProdID=0000 Rev= 2.5. se si ` installato il demone hotplug.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. dove Bus indica il numero progressivo del bus. Lev il livello (in termini di passaggi per eventuali hub secondari) Dev il numero progressivo assegnato. Al solito si faccia riferimento alla pagina di manuale per una descrizione completa.4.0 SerialNumber=0000:00:10. informazioni utili relative al dispositivo sono quelle delle stringe fornite dal produttore e mostrate nelle righe inizianti per S.) MxPS= 2 Ivl=256ms Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 0 Ver= 2. infatti per ciascun dispositivo presente sul e bus viene riportata ne file una diversa sezione con tutti i dati ad esso relativi. gli identificatori del venditore e del prodotto che vengono utilizzati per selezionare automaticamente83 il modulo da utilizzare per il supporto del dispositivo.linux-usb. Nelle righe successive sono poi riportate altre informazioni relative al dispositivo. tramite questi numeri ed un opportuno database e di corrispondenze.06 Manufacturer=Linux 2. come riportati nella riga iniziante per P.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 Vendor=04b4 ProdID=6830 Rev= 0. o mentre si pu` ottenere informazioni molto pi` dettagliate con l’opzione -v. ogni nuovo dispositivo attaccato ad una porta USB e di caricare in memoria il relativo modulo.6 ehci_hcd Product=VIA Technologies. Inc. che si cura di identificare.) 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. Per il resto della sintassi si pu` fare riferimento alla Linux o USB Guide disponibile su http://www. sono particolarmente importanti. Ogni sezione ` e introdotta da una linea che inizia con la lettera T e che indica il posizionamento dello dispositivo all’interno del bus.html Per una visualizzazione pi` intelligibile di queste informazioni si pu` usare i programmi u o del pacchetto usbutils. ma che in caso di fallimento possono essere utilizzati per cercare informazioni su internet. 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. 83 .01 Manufacturer=Cypress Semiconductor Product=USB2. 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. Bus 001 Device 001: ID 0000:0000 Il programma pu` comunque stampare la lista anche in forma gerarchica usando l’opzione -t. 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).0 Storage Device SerialNumber=600000001814 #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 0mA If#= 0 Alt= 0 #EPs= 2 Cls=08(stor. USB 2.org/USB-guide/book1.6. 234 CAPITOLO 5. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMA . quelli che prenderemo in esame sono pertanto: linear In questo livello due o pi` dischi vengono combinati in un singolo dispositivo. Data la modalit` di scrittura comunque si a perderanno solo i dati presenti nel disco rotto. una tecnologia che permette di utilizzare i dischi a gruppi (detti array) per ottenere migliori prestazioni o una maggiore affidabilit`. e non le prenderemo neanche in considerazione. 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. La dimensione dei singoli a dischi in questo caso ` del tutto irrilevante.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`. ne sono poi emerse altre come la combinazione del RAID-0 con il RAID-1 (spesso indicata come RAID-10) o quella definita linear.1.1 Introduzione La tecnologia RAID (acronimo che sta per Redundant Arrays of Inexpensive Disks) nasce con un articolo pubblicato nel 1987 a Berkley.1 L’utilizzo del RAID Tratteremo in questa prima sezione l’utilizzo dei sistemi RAID. e Questo livello non assicura nessun tipo di ridondanza. Oggigiorno alcune delle configurazioni previste nell’articolo non sono pi` supportate (se non u in sistemi specializzati). dove si descrivevano varie tipologie di disk array. con il kernel 2.6. a 1 235 .Capitolo 6 Amministrazione avanzata del sistema 6. cos` che scrivendo in maniera ı lineare prima verr` riempito il primo e poi i successivi. a o 6. L’idea di base ` quella di combinare pi` dischi indipendenti di piccole dimensioni per ottenere o e u prestazioni. A queste si ` aggiunta poi la notazione RAID-0 per indicare una configurazione e senza ridondanza.1 In generale comunque ci si suole riferire a queste configurazioni con il nome di livelli. 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. e qualche forma di recupero potrebbe comunque essere possibile. o affidabilit` o quantit` di spazio disco superiori a quelle ottenibili con un qualunque a a disco SLED (Single Large Expensive Drive). I u dischi sono semplicemente accodati uno sull’altro. e se uno dei dischi si rompe si perderanno probabilmente tutti i dati. e se i dischi sono u veloci ed in numero sufficiente si pu` facilmente saturare la capacit` del bus. Gli eventuali dischi di riserva vengono utilizzati in caso di fallimento di un disco dell’array. in quanto vengono eseguite in parallelo su pi` dischi. a In questo modo le prestazioni di lettura e scrittura possono essere notevolmente aumentate. e non si avr` quindi nessun miglioramento delle prestazioni a a per quanto riguarda i dati che vanno a finire su di esso. dato che in questo caso non esistono.236 CAPITOLO 6. in quanto ciascun disco ne ha una copia completa. appunto) di dimensione predefinita2 a che vengono scritte in sequenza su ciascuno dei vari dischi che compongono l’array: una striscia sul primo. ed ` uno dei parametri fondamentali per le e prestazioni dello stesso. per dare inizio ad una ricostruzione immediata dell’array stesso. ma quando pi` utenti accedono all’array si pu` una distribuzione del u o carico sui vari dischi. Inoltre i dischi devono essere tutti uguali. qualora per un caso fortuito venga eseguiti degli accessi a dati posti su dischi diversi. in questo caso dischi dovrebbero avere e la stessa dimensione (anche se non ` strettamente necessario). RAID-0 Questo livello ` anche chiamato stripe mode. fino all’ultimo per poi ricominciare con il primo. In questo caso i controller hardware questa viene di norma definita in fase di creazione dell’array. e se questi sono molti (e si usa una implementazione u software) facendo passare tante copie si pu` superare il limite di banda del bus su o cui sono posti i dischi abbastanza facilmente. compresi pure quelli sugli altri dischi. In realt` poi ` ancora minore. a differenza di linear. RAID-1 Questo ` il primo livello che fornisce della ridondanza. In questo modo la capacit` totale resta la somma di quella dei singoli dischi. a Come controparte per l’affidabilit` le prestazioni di scrittura di un RAID-1 sono in a genere peggiori di quelle del singolo disco. in quanto i dati devono essere scritti in contemporanea su pi` 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. I dati vengono scritti in parallelo su tutti i dischi che compongono l’array. ecc. In questo caso le e operazioni sull’array vengono distribuite sui singoli dischi. pertanto basti che sopravviva anche un solo disco dell’array perch´ i dati siano e intatti. 2 . La rottura di un disco comporta la perdita totale di tutti i dati. ma in questo caso si operer` su un solo disco. 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. Richiede almeno due dischi e per l’array e l’eventuale presenza di dischi di riserva. Se si scrive un blocco di dati questo verr` suddiviso in strisce (le stripes. Come nel caso precedente questo livello non fornisce nessuna ridondanza. poi sul secondo. o se o a quest’ultimo ` veloce si pu` ottenere una banda passante totale pari alla somma di e o quella dei singoli dischi. blocchi di dati continui pi` lunghi della dimensione di una striscia. 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. per cui basta sostituire un disco rotto e per recuperare l’intera funzionalit` dell’array. AMMINISTRAZIONE AVANZATA DEL SISTEMA Questa configurazione non migliora le prestazioni di lettura o scrittura sulla singola operazione. se sono diversi la dimensione dell’array sar` quella del pi` piccolo dei a u dischi. in quanto la probabilit` che i a e a dischi falliscano tutti insieme ` ancora minore. a I dischi devono essere di dimensioni identiche. L’UTILIZZO DEL RAID 237 hanno il vantaggio di gestire internamente la replicazione dei dati. u RAID-5 Come per il RAID-4 anche in questo caso si cercano di ottenere sia vantaggi di affidabilit` che quelli di prestazioni. gli u stessi vantaggi nella lettura presentati dal RAID-0. Rispetto al RAID-5 ha il vantaggio che possono rompersi anche pi` dischi. dato che dati sono comunque distribuiti su pi` dischi. 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. il rischio di fallimento hardware si moltiplica per il numero di dischi). a RAID-10 Si suole definire cos` una configurazione in cui si effettua un RAID-0 di pi` array ı u configurati in RAID-1. a Se si rompono due dischi si perderanno invece tutti i dati. ma quando ci sono molte letture contemporanee e spostamenti sui dati. 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. Le prestazioni in lettura sono invece migliori. 3 . o Il RAID-5 presenta inoltre. 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. e le operazioni possono essere anche molto costose. rispetto al posizionamento (il cosiddetto seek time). 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. altrimenti l’array avr` la dimensione a del pi` piccolo di essi. ma fintanto che almeno ne resta almeno uno attivo nei u due RAID-1 le informazioni saranno integre. richiedendo l’invio su bus di una sola copia. l’unico caso di impiego reale ` quello di un disco veloce e affiancato ad un gruppo di dischi pi` lenti.1.3 RAID-4 Bench´ disponibile ` senz’altro il meno usato. Inoltre se si sono inseriti dei dischi di riserva la ricostruzione del disco rotto o indisponibile viene fatta partire immediatamente. In questo modo si ottiene sia la ridondanza del RAID-1 che l’aumento di prestazioni del RAID-0. Questo livello cerca di bilanciare i vantaggi di affidabilit` del RAID-1 con le prestaa zioni del RAID-0. ma in questo caso. ed ` il pi` usato quando si hanno pi` di due a e u u dischi da mettere in RAID. queste vengono distribuite su tutti i dischi che fanno parte dell’array.6. 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. In scrittura invece le prestazioni sono meno predicibili. non tanto sulla singola lettura. Mantiene e e u delle informazioni di recupero su un disco di parit`. o dell’ora dine di quelle del RAID-1. Se per` si rompono due dischi i dati sono persi. le informazioni di parit`. Inoltre nel caso di RAID software ` richiesto un discreto e consumo di risorse (sia di memoria che di CPU) per il calcolo delle informazioni di parit`. Il tutto al prezzo di un numero molto maggiore di dischi per ottenere la stessa capacit`. Necessita di tre o pi` dischi. per evitare il problema del collo di bottiglia. Se uno dei dischi in RAID-0 si rompe ` possibile utilizzare le u e informazioni di recupero del disco di parit` per ricostruire i dati in maniera completa. ed utilizza gli altri in RAID-0. In tal caso infatti i dati possono essere letti in parallelo da dischi diversi. In generale comunque le prestazioni aumentano sia in lettura che in scrittura. Anche per il RAID-5 sono necessari almeno tre dischi. quando richiedono pure le letture necessarie al calcolo delle informazioni di parit`. dato che gli stessi RAID software sono a loro volta dispositivi a blocchi. che ` nella sezione ATA/IDE/MFM/RLL support. Nel primo caso occorre poter disporre di un supporto hardware. RAID-1. 5. 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. sia SCSI che IDE. /etc/raidtab.3).1. che supporta la creazione di RAID-0.2 Il RAID su Linux In generale per poter creare un array di dischi in RAID ci sono due opzioni fondamentali: hardware o software. e presenta al sistema operativo l’insieme dei dischi come un dispositivo unico. per l’utilizzo del RAID software ` necessario utilizzare anche gli opportuni programmi in user space. I singoli array vengono identificati per “canale” (spesso i controller supportano pi` di una singola catena SCSI) e per “disco”. AMMINISTRAZIONE AVANZATA DEL SISTEMA backup. Nel caso di RAID su IDE non ci sono canali. una volta attivato il relativo supporto. e pu` funzionare anche senza l’ausilio di a o un file di configurazione (/etc/raidtab) che invece ` necessario per i raidtools. cio` di e un controller per i dischi che esegue le operazioni necessarie al suo interno. 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. Una volta costruiti gli array si potr` accedere ad essi con i file di dispositivo /dev/mdX. Il file ` diviso in sezioni che e .1. i cui nomi sono analoghi ai precedenti. attivabile nella sezione Multi-device support. un utente che cancella i dati dal disco. 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. soltanto che non presentano un numero di canale.238 CAPITOLO 6. che contiene le definizioni di tutti gli array. Inoltre la superiorit` di prestazioni ` spesso a e solo teorica. Questo. un RAID infatti pu` proteggere dal fallimento dell’hardware di un disco. 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. un dispositivo tipico di un u array ` sempre nella forma /dev/rd/c0d0 che indica il primo array sul primo canale. ma in genere chiede parecchio (specie per gli SCSI) da quelle del portafogli. ` 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). 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).3 Il RAID software A parte abilitare il supporto nel kernel (cui abbiamo accennato in sez. In ogni caso Linux supporta vari controller RAID hardware. ma non pu` o o nulla contro la corruzione di un filesystem. RAID-5 e linear. si avr` cio` ad esempio qualcosa a e del tipo di /dev/ataraid/d0p1. ed i dispositivi sono accessibili. Per quando non si dispone di un supporto hardware Linux fornisce un supporto software.1. E cio` possibile far costruire al kernel stesso degli array utilizzando e qualunque tipo di dispositivo a blocchi. o un qualunque incidente che distrugga il vostro array. 6. Nel primo caso (i controller SCSI) i vari driver sono disponibili nella sezione Block Devices della configurazione del kernel. fa si che l’opzione del RAID software nella maggior parte dei casi si riveli estremamente competitiva. 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. di questi e esistono sostanzialmente due versioni. attraverso e i file di dispositivo generici disposti nella directory /dev/ataraid. ` RAID-4. a 6. Come accennato i raidtools utilizzano nelle loro operazioni un apposito file di configurazione. che prende come parametro il numero di livello: i valori e possibili sono 0. preso dalla pagina di manuale. Questo pu` essere un qualunque dispositivo a blocchi. Un esempio di questo file. ogni riga e valida contiene una direttiva seguita da un parametro che ne specifica il valore. 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. 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. e poi specificati con la direttiva spare-disk. esistono una serie di direttive opzionali che permettono di configurare altre caratteristiche del RAID. 1. purch´ questo sia gi` stato definito in una precedente sezione di e a /etc/raidtab. che prende come parametro il nome del dispositivo da utilizzare per accedere ad esso. o ivi compreso un altro RAID. Oltre a queste che sono fondamentali per definire la struttura di una array.6. ` il seguente: e # # sample raiddev configuration file # ’old’ RAID0 array created with mdtools. L’UTILIZZO DEL RAID 239 definiscono i vari array. Ad una direttiva device deve seguire una direttiva raid-disk che ne specifica la posizione nell’array (in ordine progressivo. il persistent superblock appunto. 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. 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. Nel caso di RAID-4 esiste anche la direttiva di specificazione parity-disk che identifica il disco con le informazioni di parit`. Gli eventuali dischi di riserva devono essere anch’essi dichiarati con device. # 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. detto cos` in quanto in questo modo le informazioni sull’array ı sono sempre disponibili. La principale ` raid-level. Una volta che si ` definito un array lo si pu` e o riutilizzare (in successive direttive raiddev. 4 o 5) oppure linear.1. a partire da 0). righe vuote o inizianti per “#” vengono ignorate. Alla definizione di una sezione con raiddev devono seguire le altre direttive che specificano di che tipo di array di tratta. identificati dalla direttiva raiddev. anche quando non si pu` accedere ad /etc/raidtab (ad esempio quando o . A questa segue di solito la direttiva nr-raid-disks che indica il numero di dischi dell’array. in un apposito blocco di dati. indica il numero di dischi che costituiscono direttamente l’array. indica la posizione nell’array del precedente dispositivo indicato con device come disco di riserva. e legge dal persistent superblock tutte le informazioni necessarie per attivarlo. che prende come parametro il file di dispositivo /dev/mdX che identifica ciascun array. dimensione delle strisce (per le modalit` RAID che le a supportano). ma come failed-disk) e si copia su di esso tutto il sistema. Le altre principali direttive di /etc/raidtab sono riassunte in tab. Tabella 6. poi si crea l’array (di cui fa parte anche detto disco. occorre per` anche aver marcato le paro tizioni che fanno parte di un array come di tipo 0xFD. al solito l’elenco completo ` nella pagina di manuale. nel a qual caso per forzare l’inizializzazione occorrer` usare l’opzione -R. indica uno dei dispositivi costituenti l’array. in sostanza questa direttiva marca il dispositivo suddetto come rotto.240 CAPITOLO 6. Questa non ha nessun significato n´ per il RAID-1 n´ per il linear. Infine ` molto utile la direttiva failed-disk che permette di creare un array inserendoci un e dispositivo senza che questo venga effettivamente utilizzato. Questa funzionalit` ` essenziale. ma negli altri casi questo dice la dimensione delle strisce in cui vengono divisi i dati inviati su dischi consecutivi. 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. a meno che questi non siano marcati come failed-disk. ad attivare ae e anche l’autorilevamento del RAID all’avvio del kernel. 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. prende come parametro il relativo file di dispositivo. registra le informazioni sull’array in un apposito settore sui dispositivi sottostanti. I valori possibili sono 1 e 0 che rispettivamente attivano e disattivano l’uso del persistent superblock. facendo fare la sincronizzazione dei dischi al kernel. accessibile con man raidtab. indica il numero di dischi di riserva inseriti nell’array. Il comando rileva anche se i dispositivi scelti sono gi` stati utilizzati per un altro RAID.1. indica il tipo di RAID da utilizzare. AMMINISTRAZIONE AVANZATA DEL SISTEMA si ha la partizione radice sul RAID).1: Principali direttive di configurazione di /etc/raidtab. in kilobyte. indica la posizione nell’array del precedente dispositivo indicato con device. in tal caso infatti il kernel riconosce la partizione come componente di un RAID. Riavviando ed usando l’array come radice si potr` successivamente aggiungere all’array il disco usato per a l’installazione. a . se si ` compilato il relativo supporto del kernel. 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. Con l’opzione -c si pu` specificare in file di configurazioo ne alternativo. 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. 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. 6. Si tenga presente che l’operazione distrugge il contenuto dei dischi. E directory radice un array: prima si installa su un disco normale. delle stripe e in cui vengono divisi i dati scritti sull’array per i livelli che supportano lo striping. indica la posizione nell’array del precedente dispositivo indicato con device come disco rotto. Un’altra direttiva importante ` chunk-size che dice le dimensioni. il sistema stia provvedendo alla ricostruzione del secondo. ed il terzo abbia un solo disco attivo.. ma pu` essere ottenuto in qualunque o momento... 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. sincronizzato e attivo. se il dispositivo a ` hot-pluggable) senza problemi. In genere un disco diventa inutilizzabile in caso di problemi hardware.... 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. e non appena esso sar` a a 4 ovviamente l’array non deve essere in uso.] recovery = md2 : active raid1 hdc3[2] hda3[1] 4490048 blocks [2/1] [_U] 0. Una volta che si ` creato ed attivato un array se ne pu` controllare lo stato sul file /proc/mdstat e o che riporta tutte le informazioni relative ai dispositivi RAID presenti nel sistema... Il comando prende come argomenti il dispositivo dell’array seguito da quello del disco da rimuovere. per` fintanto che fa parte dell’array sar` possibile sostituirlo. per tutti i dettagli si faccia al solito riferimento alla pagina di manuale. 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). 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.1.. un esempio di questo file ` il seguente: e davis:~# cat /proc/mdstat Personalities : [raid1] read_ahead 1024 sectors md0 : active raid1 hdc1[1] hda1[0] 116214080 blocks [2/2] [UU] unused devices: <none> in cui ` presente un solo array in RAID-1. Una 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...8% (581632/69336448) finish=183.. una o volta tolto il disco dall’array infatti lo si potr` rimuovere (anche senza riavviare..6.7min speed=6232K/sec dove si hanno tre array RAID-1 costruiti con le prime tre partizioni di due dischi. questo e o permetter` ad esempio di sostituire un disco mettendone uno nuovo.. ` possibile aggiungerne uno usando il o e comando raidhotadd... e si vede come il primo array sia integro. Cosi come si pu` rimuovere un disco da un array.. L’uso di questo comando pu` servire ad esempio quando si vuole sostituire un disco. .. In sostanza l’effetto ` lo stesso che si sarebbe e e ottenuto creando l’array con la direttiva failed-disk. o Anche per questi comandi si pu` utilizzare un file di configurazione alternativo specificabile con o l’opzione -c.. 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). e a se lo spazio disco sottostante non ` sufficiente baster` comprare un nuovo disco ed agganciarlo al e a volume logico. evidenziate in sez.x.2 Il sistema del Logical Volume Manager Tratteremo in questa sezione il sistema del Logical Volume Manager.6.2.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. all’interno di un “volume logico”.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. il sistema consiste nell’introdurre un livello intermedio. L’uso del Logical Volume Manager permette cio` di evitare alla radiu e ce tutta le problematiche. da physical volume). 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. e indicate in figura con PE) che poi vengono rimappate5 nei corrispondenti logical extent (indicati con LE) che vanno a costituire un volume logico. Quest’ultimo poi non ` altro che un dispositivo e virtuale creato a partire da un insieme di volumi fisici.2. montare. Una delle funzionalit` pi` interessanti di LVM ` quella di poter utilizzare il sistema per a u e poter creare degli snapshot. 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”. da volume group). che viene a costituire l’interfaccia fra i volumi logici (indicati con LV da logical volume). Il vantaggio ` che i volumi logici possono essere ridimensionati a piacere senza necessit` e a di toccare le partizioni o i dischi che stanno al di sotto. In sostanza il kernel si cura di suddividere un disco fisico in tante piccole sezioni (dette physical extent. 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. 6. In questo modo se lo spazio disco su un volume logico si esaurisce baster` allargarlo.2. Per superare alla radice questo problema ` stato creato il sistema del Logical Volume Mae nager. . dove ` stato riscritto da e zero per migliorare stabilit` e prestazioni. 6.242 CAPITOLO 6. ed i volumi fisici (indicati con PV. 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 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. Lo schema del funzionamento del Logical Volume Manager (da qui in breve LVM) ` riportato e in fig. con il filesystem montato). fare link e spostare contenuti da un disco ad un altro. a 6 si tenga presente per` che gli snapshot al momento della scrittura di queste note non sono ancora stati portati o a LVM2. cos` come mostrato nel secondo esempio a ı del contenuto di /proc/mdstat. relative alle diverse possibili strategie di partizionamento. quello del gruppo di volumi (indicato in figura con la notazione VG.1. che da esso si estraggono. per espanderne le dimensioni senza doversi preoccupare di ripartizionare. grazie al quale ` possibile creare un filesystem invece che su un disco singolo o su una e partizione. 5. che vengono opportunamente riuniti dal kernel in modo da presentarsi come un unico disco. 6. In ogni caso la nuova versione ` in grado di riconoscere la presenza di volumi logici creati con la versione precedente e e di riutilizzarli senza problemi ed ` in genere pi` performante. IL SISTEMA DEL LOGICAL VOLUME MANAGER 243 Figura 6.6. ed avere installato gli opportuni programmi in user-space. 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. originario.2. 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).4.x il sistema ` stato completamente riscritto. l’unico aspetto critico ` quello di assicurarsi di avere allocato e per lo snapshot spazio sufficiente a contenere tutte le modifiche. La versione corrente del filesystem sul volume logico originale registrer` tutte le a modifiche nel nuovo spazio allocato. mentre il volume creato come snapshot conterr` i dati cos` a ı come erano al momento della creazione. pertanto si potranno avere delle differenze a seconda che e si usi la prima versione (detta anche LVM1) o la seconda (detta LVM2). .6. dopo a di che si potr` eseguire il backup con tutta calma su di esso mentre le operazioni continuano a regolarmente sul volume originale. 5. Per poter utilizzare LVM occorre abilitare il relativo supporto nel kernel (vedi sez.x al 2.1. Nel passaggio dal kernel 2. anche se alcune funzionalit` sono e u a tutt’ora in fase di adeguamento.1: Strutturazione del Logical Volume Manager. basta assicurarsi che nel breve tempo necessario a creare lo snapshot non ci siano attivit`. se infatti questo dovesse esaurirsi il volume logico originale diverrebbe inusabile. u Con il comando pvscan.2) con il codice 0x8E per e indicare il suo uso come volume fisico e poi inizializzarla con il comando pvcreate. questo prevede e due passi. 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 --. Le opzioni del comando controllano sostanzialmente l’informazione che viene stampata a video.Physical volume --PV Name /dev/hda3 VG Name vg PV Size 54.. il comando si invoca senza argomenti. per le altre opzioni si faccia riferimento alla pagina di manuale. con -u si fanno stampare gli UUID presenti.2. con -n si stampano solo i volumi fisici che non appartengono ad un volume logico. 5.ACTIVE PV "/dev/hda3" of VG "vg" [54. 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).. nel qual caso occorrer` eliminare la o a tabella delle partizioni (se questa viene rilevata il comando segnala un errore).2 La gestione dei volumi fisici Il primo passo nell’uso di LVM ` quello della inizializzazione dei volumi fisici.total: 1 [54.51 GB / 19. una marca temporale e una parte casuale per garantire unicit`.2. 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.52 GB] / in no VG: 0 [0] che mostra la presenza di in unico volume fisico completamente utilizzato. si pu` eseguire una scansione dei dischi presenti per rilevare al loro o interno la presenza di volumi fisici usati da LVM. AMMINISTRAZIONE AVANZATA DEL SISTEMA 6. ` e e composto di varie sezioni. 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).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.reading all physical volumes (this may take a while.51 GB free] pvscan -. fra cui N riferimento ad un MAC-address per il computer locale.) pvscan -.52 GB] / in use: 1 [54.244 CAPITOLO 6.52 GB [114334605 secs] / NOT usable 4. Un secondo comando diagnostico ` pvdisplay che stampa a video le caratteristiche di uno e pi` volumi fisici (specificati come argomenti). con -s si riduce la stessa al minimo. Il comando pu` essere applicato anche a dischi interi. 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. Le altre opzioni riguardano aspetti specifici della gestione interna ed al solito rimandiamo alla pagina di manuale per una trattazione pi` dettagliata. a 7 . Infine (ma solo con la versione di LVM2) con -M si pu` indicare quale versione usare per il formato meta-dati (specificato con il o numero con lvm1 o lvm2). -c che produce un output coi dati separati da un carattere “:” cos` da poterlo usare facilmente all’interno di script. per questo si deve usare il comando vgcreate che crea un nuovo gruppo di volumi assegnandogli il nome specificato come primo argomento. se infatti il comando viene interrotto durante l’esecuzione non c’` nessun problema. Infine con --abort si pu` abortire un precedente tentativo e o di spostamento non completato.2.4). le principali sono: -s che fa stampare solo la dimensione totale del volume. seguito dai volumi sfortunatamente questa funzionalit` non ` stata ancora reimplementata su LVM2 all’interno del kernel stabile. o nel qual caso lo spazio sar` redistribuito automaticamente sui volumi appartenenti allo stesso a gruppo. la prima ` -i che fa stampare una percentuale di e completamento delle operazioni tutte le volte che ` trascorso il numero di secondi passato come e parametro. con -n invece si pu` restringere lo spostamento ai dati relativi al solo volume logico il o cui nome si ` passato come parametro. L’opzione -s permette di definire le dimensioni dei physical extent in cui saranno divisi i volumi fisici. a u L’opzione -l permette di definire un numero massimo di volumi logici che possono essere estratti dal gruppo. un elenco di opzioni comuni o a buona parte dei comandi che operano con i gruppi ed i volumi logici si trova in tab. ed i valori possono spaziare da 4kb a e 16Gb in potenze di due.2. 6. Il comando prende come argomenti il volume fisico sorgente da cui rimuovere i dati e quello di destinazione su cui inviarli.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. 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). mega e gigabyte. da passare come argomento numerico seguito dalle estensioni standard per indicare kilo. La dimensione standard ` di 4Mb. Per i dettagli sulle opzioni (alcune delle quali sono riportate in tab.2. 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). ovviamente la destinazione deve avere spazio libero sufficiente a contenerli. ed il massimo assoluto ` sempre lo stesso. 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. Per ı un elenco completo e i dettagli si pu` fare riferimento alla pagina di manuale. si tenga presente che un volume logico pu` mantenere un massimo di o 64k physical extent che comporta una dimensione massima di 256Gb. Anche per questo comando le opzioni servono a controllare l’informazione riportata. a meno appunto di invocare pvmove --abort.2) si pu` fare riferimento alla pagina di manuale. accessibile con man lvm.2. ed inserendoci tutti i volumi fisici specificati negli argomenti successivi. Si pu` anche evitare di specificare un volume fisico di destinazione. e 8 . perch´ il comando abbia successo tutti i volumi fisici e devono essere stati preventivamente inizializzati con pvcreate. e Una volta creato un gruppo di volumi questo pu` essere espanso aggiungendovi altri volumi o fisici con vgextend. quello di rimuovere un volume da un gruppo. l’elenco completo invece ` riportato nella pagina di manuale dedicata a LVM. o Il lavoro opposto. a e anche se un supporto iniziale ` disponibile nel ramo di sviluppo.6. e baster` reinvocarlo senza parametri per fare ripartire lo spostamento dal e a punto un cui era stato interrotto. con -p invece si imposta il numero e massimo di volumi fisici che possono essere inclusi. 6. viene invece eseguito da vgreduce che al solito prende come primo argomento il nome del gruppo. IL SISTEMA DEL LOGICAL VOLUME MANAGER 245 che ci mostra tutte le caratteristiche di quest’ultimo. 6. Il comando ha tre opzioni principali. che tratteremo in sez. e Per le ulteriori opzioni si pu` fare riferimento alla pagina di manuale. se si ha a disposizione pi` u spazio disco occorrer` usare delle dimensioni pi` ampie per i physical extent. 6. il valore massimo assoluto ` di 256. stampa un messaggio di aiuto.found active volume group "vg" vgscan -. e e cerca di accedere al meglio ai dati quando i gruppi di volumi sono solo parzialmente accessibili. pu` essere ripetuto fino a a o tre volte per aumentare le informazioni stampate a video. Un esempio di questo comando `: e monk:~# vgscan vgscan -.2. pu` essere ripetuto fino a sei o volte per aumentare le informazioni stampate a video.2 per pvdisplay. prende come valore lvm1 o lvm2 (o semplicemente il numero). o di tutti quelli presenti nel sistema se non si specifica nulla.d" successfully created vgscan -. a un esempio di questo comando `: e . dato che in tal caso si rimuoveranno tutti quelli non utilizzati. con vgdisplay si possono elencare le caratteristiche del gruppo passato come argomento. Al solito per i dettagli sul comando e le altre opzioni supportate si faccia riferimento alla pagina di manuale. i dati non vengono a modificati. con l’opzione -a non ` necessario e specificare quali volumi rimuovere. Le opzioni sono le stesse gi` viste in sez. e esegue automaticamente il backup dei metadati quando essi vengono cambiati.. 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.246 CAPITOLO 6. Un secondo comando usato all’avvio del sistema (ma solo per LVM1. prima di poterlo e utilizzare infatti questo deve essere attivato in modo da poter essere utilizzato. (il default ` il primo e non ` il caso di cambiarlo).WARNING: This program does not do a VGDA backup of your volume group Esiste poi un comando analogo di pvdisplay da usare per i gruppi di volumi. imposta il formato dei meta-dati. Il comando al solito prende come argomento il nome del gruppo di volumi. ma se non se ne specifica uno si applica a tutti quelli presenti. in genere gli script di avvio di LVM eseguono sempre un comando del tipo vgchange -a y. Ovviamente perch´ il comando abbia successo tutti i volumi che si e vogliono rimuovere dal gruppo non devono essere utilizzati."/etc/lvmtab" and "/etc/lvmtab. Per questo si usa in genere il comando vgchange il cui scopo ` quello di modificare le propriet` di un gruppo e a di volumi. e e rispettivamente con i parametri “y” e “n”. esegue il comando in modalit` di test. 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. -A -P Tabella 6..) vgscan -. prende come valore y o n.reading all physical volumes (this may take a while. 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). importa il livello di debug. La creazione di un gruppo di volumi ` comunque solo un primo passo. Altre opzioni sono -l che modifica il numero massimo di volumi logici.2: Principali opzioni comuni dei comandi di gestione di LVM. che si vogliono rimuovere. in genere lo si lancia prima di vgchange. L’opzione che ci interessa ` -a che ` quella che permette di attivare o disattivare il gruppo. 6. questa opzione ` disponibile solo su LVM2. 2). IL SISTEMA DEL LOGICAL VOLUME MANAGER 247 monk:~# vgdisplay --. e come secondo il gruppo da inglobare nel primo. Per le opzioni (che sono sostanzialmente quelle comuni di tab. si pu` e o per` specificare un nome qualunque con l’opzione -n lvname. . 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. o con l’opzione -l. che diventer` l’unione a dei due.9 o con l’opzione -L seguita dalla dimensione in byte. Se invece si vuole spezzare in due un gruppo di volumi si pu` usare il comando vgsplit. inoltre deve essere sempre specificata la dimensione del volume fisico che si va a creare. questo prende come primo argomento il gruppo di destinazione. gigabyte o terabyte se si aggiunge al numero a passato come parametro l’iniziale (va bene sia maiuscola che minuscola) della misura utilizzata. 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 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.99 GB 256 1 1 54. questo pu` o essere fatto in due modi. seguita dal numero di logical extent da utilizzare. seguito dai volumi fisici da inserire in quest’ultimo. megabyte. definite in fase di creazione del gruppo.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. Una delle funzionalit` di LVM ` che permette di suddividere i dati su pi` volumi fisici in a e u maniera analoga al RAID-0. che deve essere disattivo. l’opzione supporta anche la specificazione di altre unit` di misura come kilobyte. in questo caso si potr` accedere o a al nuovo volume logico usando come file di dispositivo /dev/vgname/lvname. per i dettagli si faccia riferimento alla pagina di manuale. Al solito per le opzioni (sono solo quelle comuni) ed i dettagli si pu` fare riferimento alla pagina di o manuale.2.51 GB 4 MB 13955 8960 / 35 GB 4995 / 19. 6. definendo con l’opzione -i un numero di stripes su cui distribuire 9 le dimensioni sono le stesse dei physical extent sottostanti. 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. Il comando richiede come argomento obbligatorio il nome del gruppo di volumi da utilizzare.2.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. 6.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.6. 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. Il comando prende gli stessi argomenti ed opzioni di lvextend (esclusi quelli relativi alle stripe). imposta il nome del volume logico. 6. -I -l -L -n -p -r -s Tabella 6. prende il valore r per indicare sola lettura o rw per indicare lettura e scrittura. imposta la dimensione di un volume fisico specificata in byte. 6. passato come parametro.3. 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`. megabyte.1. il comando utilizza anche e molte delle opzioni generali accennate in tab. gigabyte o terabyte. Se invece di un normale volume logico si vuole creare uno snapshot occorre usare modalit` a completamente diversa di invocazione del comando. Valgono in questo caso le stesse considerazioni viste in sez. apponendo al valore specificato il carattere “+”. dopo di che non rester` che ridimensionare il filesystem presente sul volume a logico (vedi sez. 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. Anche le opzioni sono analoghe e non staremo a ripeterle.2. Il comando permette anche di estendere le dimensioni dei volumi di snapshot. kilobyte. indica la richiesta di creazione di un volume di snapshot.5) per avere a disposizione lo spazio aggiunto. importa i permessi sul volume logico. AMMINISTRAZIONE AVANZATA DEL SISTEMA i dati. 6. Se invece di aumentare le dimensioni di un volume logico le si vogliono ridurre si deve usare lvreduce. 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. Si possono per` usare le o stesse opzioni per specificare la dimensione dell’estensione al posto di quella totale. Un elenco delle opzioni principali del comando ` riportato in tab.3) ed inoltre si pu` specificare come argomenti ulteriori una lista di volumi fisici sui quali si vuole che sia o compiuta l’estensione del volume logico. il vantaggio ` che qualora si avesse la necessit` di ampliarne le dimensioni si potr` ricorrere al e a a comando lvextend. 6. 6.10 Se si utilizza questa funzionalit` si pu` anche determinare la dimensione delle stripes con l’opzione a o -I.3: Principali opzioni del comando lvcreate.2. per i dettagli al solito si pu` fare riferimento o alla pagina di manuale.248 CAPITOLO 6. inoltre gli argomenti obbligatori diventano due: il nome del volume logico da usare come snapshot e quello del volume logico cui fare da snapshot. 10 . Il comando supporta anche l’uso delle stripe (con le stesse opzioni di tab.1 per il RAID-0. 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). in tal caso occorre usare l’opzione -s e specificare un nome con l’opzione -n. importa il numero di settori da leggere in anticipo per migliorare le prestazioni (solo per LVM1). Il comando richiede obbligatoriamente come argomento il volume da estendere e la dimensione finale dello stesso che deve essere specificata o con l’opzione -l in numero di logical extent o direttamente con l’opzione -L (con la stessa convenzione di lvcreate). imposta la dimensione di un volume fisico per numero (passato come parametro) di logical extent. Opzione -i Significato indica di utilizzare il numero di stripe passato come parametro per distribuire i dati sui volumi fisici sottostanti. Se non viene specificato un secondo argomento indicante la dimensione da usare il ridimensionamento avviene alla dimensione corrente del dispositivo. Di nuovo le opzioni sono le stesse. reiserfs. il u o comando prende come argomento uno o pi` volumi da rimuovere. per ridimensionare un filesystem JFS infatti baster` rimontarlo con un comando del tipo: a mount -t jfs -o remount. che si ridimensiona con una opzione di mount. Correntemente la gran parte dei filesystem presenti su Linux (ext2/ext3. e e .12 JFS) ` dotata di questa funzionalit`. l’unica opzione specifica supu portata ` -f che permette di sopprimere la richiesta di conferma della rimozione dallo standard e input. XFS. per cui se si usa una dimensione troppo grande si avranno problemi. 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).5 Il ridimensionamento dei filesystem Bench´ non direttamente attinente ad LVM conviene trattare qui i comandi per il ridimensionae mento dei filesystem dato che il loro uso pi` comune ` appunto in combinazione con i comandi u e per ridurre o aumentare le dimensioni dei volumi logici di LVM. 11 questi comandi sono comunque validi qualunque sia il dispositivo su cui ` mantenuto il filesystem. Come accennato ogni filesystem ha normalmente un suo programma per il ridimensionamento.13 La dimensione pu` essere indicata con la convenzione sulle unit` di misura gi` o a a illustrata in precedenza che prevede che queste siano specificate posponendo al numero la relativa iniziale. il che comporta degli ovvi problemi se si vuole ridimensionare la directory radice. In genee a rale questa operazione pu` essere eseguita solo a filesystem inattivo (cio` senza che questo sia o e montato). 6. -f che forza le operazioni escludendo alcuni controlli di sicurezza e -F che scarica i dati in cache prima di iniziare. Qualora un volume logico non sia pi` utilizzato lo si pu` eliminare usando lvremove.2. la struttura dei due ` e identica) ` resize2fs. IL SISTEMA DEL LOGICAL VOLUME MANAGER 249 richiedere una riduzione. altrimenti il programma non potr` funzionare.2. 12 che per` supporta solo accrescimenti. pertanto ` fondamentale ridurre le dimensioni di un eventuale filesystem presente e sul volume logico prima di eseguirne una riduzione. inoltre se si ridimensiona una partizioni occorre avere cura che essa continui ad avere lo stesso cilindro iniziale. Il comando che permette di ridimensionare un filesystem ext2 (o ext3. fa eccezione JFS. e possono e anche essere utilizzati quando di ridimensiona una partizione su un disco con parted. e stavolta sono permessi per le dimensioni sia il segno “+” che quello “-”. 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. Alcuni filesystem per` supportano anche il ridimensionamento a caldo (cio` senza smontare il o e filesystem) se questo avviene per accrescimento. a Il comando prevede l’opzione -d per abilitare il debug (che prende come parametro una bitmask indicante quali informazioni stampare).6.11 La possibilit` di ridimensionare un filesystem dipende dalla presenza di un opportuno proa gramma specifico per ciascun tipo di filesystem. Si tenga presente che il comando non tiene assolutamente in considerazione le dimensioni del dispositivo sottostante. -p che stampa una percentuale di completamento durante le operazioni.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. Si tenga presente che i dati presenti nella parte tolta con la riduzione vengono persi. o 13 questo significa che l’argomento non ` necessario in caso di espansione e lo ` in caso di riduzione. Tratteremo in questa sezione il loro utilizzo e le relative modalit` di gestione. e 14 . 6. per avere pi` u informazioni nel corso delle operazioni si deve invece usare -v. e questo avviene u e sovente perch´ alcuni utenti non si curano di controllare le risorse che usano. Il comando permette anche di specificare con l’opzione -j un dispositivo alternativo su cui mantenere il giornale. AMMINISTRAZIONE AVANZATA DEL SISTEMA Per ridimensionare un filesystem di tipo reiserfs si deve invece usare il comando resize_reiserfs. La nuova dimensione si specifica con l’opzione -s seguita dal valore (con la solita convenzione per le unit` a di misura). passando come argomento il dispositivo contenente il filesystem da ridimensionare. realizzato nel kernel. 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. 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). che di un gruppo o e (cio` in base al GID).3.1 Visione generale Una delle risorse principali che gli amministratori di sistema devono gestire ` quella dello spazio e disco. le due risorse sono completamente indipendenti per cui ` possibile e superare il limite sul numero di file occupati pur avendo ancora spazio disco disponibile.3 Le quote disco Una delle caratteristiche avanzate della gestione dei dischi presenti fin dal kernel 2. e di forzare le operazioni senza eseguire controlli con -f. un e meccanismo.250 CAPITOLO 6. In pratica. mentre per XFS la caratteristica deve e essere esplicitamente abilitata dato che ` gestita in modo diverso. che pone delle restrizioni alle risorse che un singolo utente pu` utilizzare. ext3. 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. uno dei problemi pi` comuni ` infatti quello del riempimento del disco. pertanto ` usuale attivarle sul filesystem su cui si sono piazzate le home degli utenti. 6. e reiserfs. un meccanismo che consente di limitare la quantit` delle risorse su disco che i a singoli utenti (o gruppi) possono usare. se non si specifica nulla il comando user` la dimensione del a dispositivo sottostante. o L’idea ` che in questo modo esiste un limite di occupazione delle risorse oltre il quale ogni e utente non pu` andare. e dovranno perci` essere impostate separatamente. che di entrambi.3.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. L’opzione supporta anche l’uso dei segni “+” e “-” per indicare dei ridimensionamenti relativi (accrescimenti o riduzioni). Nel caso specifico di un sistema unix-like questo ` sempre stato realizzato attraverso le cosiddette quote disco. a 6. entrambe con gli ultimi kernel il supporto ` presente per ext2. a scapito pure degli altri utenti.0 ` quella e delle quote disco. 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. Del sistema esistono due versioni. Le quote sono sempre calcolate per ogni singolo filesystem (che deve supportare il meccanismo14 ). e finiscono per e riempire tutto lo spazio disponibile. 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). se infatti le informazioni di aquota. onde evitare delle variazioni dello spazio occupato durante il calcolo. ma questo argomento pu` essere o tralasciato con l’uso dell’opzione -a che controlla tutti i filesystem montati (tranne quelli montati via NFS). 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. non legge i file con i dati delle quote esistenti. Questo comando deve essere sempre eseguito su un filesystem montato con le opzioni per le quote prima di abilitare le stesse (con un successivo quotaon) in modo da ricostruire lo stato dell’occupazione delle risorse sul disco. questo non ` vero per le quote su XFS.4: Principali opzioni del comando quotacheck.usrquota. 16 alcuni HOWTO indicano di crearli vuoti con il comando touch se non sono presenti. prende i valori: vfsold (per la versione 1). controlla le quote nel formato specificato. riporta lo stato di avanzamento delle operazioni. -u -g -c -v -m -M Tabella 6.user e quota. un esempio di utilizzo di queste opzioni ` il seguente: e /dev/vg/home /home ext3 defaults.group se si usa la versione 1 del supporto ` o aquota.user e aquota. Opzione -a -R -F Significato controlla tutti i filesystem montati.group se si usa la versione 2. questo viene fatto utilizzando due opzioni specifiche per /etc/fstab: per le quote gli utenti si usa usrquota mentre per quelle dei gruppi grpquota.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. LE QUOTE DISCO 251 supportate per compatibilit`. In generale non ` necessario creare questi file a mano.3. esegue il controllo anche con il filesystem montato in scrittura se il tentativo di rimontarlo in sola lettura fallisce.6. rpc (per le quote su NFS) e xfs (per le quote su XFS). 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. forza il controllo delle quote senza rimontare il filesystem in sola lettura.user e aquota. richiede l’esecuzione del controllo per le sole quote degli utenti. In genere il comando necessita di montare il filesystem in sola lettura.4).group. 8. E in questi file che sono mantenuti i dati relativi all’uso del disco da parte di utenti e gruppi rispettivamente. Il comando costruisce una tabella con dell’uso corrente del disco e la confronta.group non sono aggiornate il meccanismo delle quote non funziona in maniera corretta. 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. in detto filesystem infatti le quote sono mantenute nei metadati e non e su file visibili. se trova delle incoerenze aggiorna le informazioni. 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. se specificata con -a non controlla la radice.16 se sono assenti infatti la prima volta e che si usa il comando quotacheck verranno creati automaticamente. richiede l’esecuzione del controllo per le sole quote dei gruppi. anche se nei nuovi sistemi ` preferibile usare la pi` recente. 15 . vfsv0 (per la versione 2). si pu` forzare l’esecuzione se il filesystem non ` montabile in o e sola lettura usando l’opzione -m. un filesystem unix-like ha due tipi di risorse. ma comunque mai al di l` del limite duro. a Il programma che permette di impostare le quote (ovviamente solo all’amministratore) ` e edquota. e le a due opzioni -v e -p hanno lo stesso effetto descritto in precedenza.2.252 CAPITOLO 6. e nella sua forma pi` semplice prende come argomento l’utente di cui si vogliono u modificare le quote. 6. inoltre se si ricorda quanto illustrato in sez. 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. se le si vogliono controllare entrambe va specificata esplicitamente anche l’opzione -u. i secondi al numero di file. Per le altre opzioni ed i dettagli di funzionamento al solito si pu` fare o riferimento alla pagina di manuale.3 Gestione delle quote di utenti e gruppi Una volta attivato il configurato il supporto delle quote. all’interno del quale apparir` a un contenuto del tipo: Quotas for user piccardi: 17 nel caso di Debian lo script ` /etc/init. i primi sono relativi allo spazio disco utilizzabile. solo invocato con un nome diverso). AMMINISTRAZIONE AVANZATA DEL SISTEMA Di default il comando controlla solo le quote utente. 6. uno morbido (detto appunto soft limit) che pu` essere superato per brevi periodi di tempo. al solito di default sono attivate soltanto quelle sugli utenti. L’opzioni -v aumenta la prolissit` del comando stampando a ogni filesystem per il quali si sono attivate le quote. i blocchi e gli inode.1 le quote si applicano in maniera indipendente per ciascun filesystem. Le altre opzioni principali sono riportate in tab.3. e lancia l’editor di default (in genere vi o quello stabilito dalla variabile di ambiente EDITOR). il comando infatti per default agisce sulle quote utente. mentre con -p si stampa solo lo stato delle stesse invece di attivarle. Il comando prende gli stessi argomenti u di quotaon (in realt` si tratta dello stesso eseguibile. se si vuole operare su un gruppo occorre specificare l’opzione -g. La struttura del meccanismo delle quote disco prevede la presenza di due limiti.3. In sostanza per poter utilizzare le quote. 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. una volta modificato /etc/fstab per indicare i filesystem su cui usarle. Una volta che si ` montata una partizione con il controllo delle quote perch´ questo sia e e applicato ` necessaria una attivazione esplicita con il comando quotaon. Il comando prende le opzioni -u e -g con lo stesso significato di quotacheck per attivare le quote su utenti e gruppi. ed uno duro (detto o hard limit) che non pu` mai venir superato. e .17 Il sistema del controllo delle quote pu` anche essere disabilitato utilizzando quotaoff. e attivato lo stesso con i passi appena visti.3. Il comando crea un file di testo temporaneo con la rappresentazione delle quote correnti per l’utente o il gruppo scelto. per l’elenco completo ed i dettagli al solito si faccia riferimento alla pagina di manuale. 5. e su entrambi possono essere applicate delle restrizioni in maniera indipendente. 6. 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. gran parte delle distribuzioni installano automaticamente uno script di questo tipo con l’installazione dei programmi di controllo delle quote.d/quota e fa parte del pacchetto omonimo. durante detto periodo ` ancora e e possibile creare nuovi file o usare spazio disco superando il limite morbido. se si vogliono controllare solo le quote gruppo occorre specificarlo esplicitamente usando l’opzione -g. 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). Il breve periodo di tempo durante il quale ` possibile o e superare il primo limite ` detto periodo di grazia (grace period ). Come accennato in sez.4. per i dettagli e e l’elenco completo si faccia al solito riferimento alla pagina di manuale. si pu` delimitare l’azione del programma ad un solo filesystem specificando quest’ultimo (indicato o per file di dispositivo) con l’opzione -f. specifica un utente di riferimento. 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.6. hard = 1500) 253 le informazioni riguardo l’uso corrente sono riportate solo per riferimento. stampa le informazioni in modalit` succinta. . minutes. LE QUOTE DISCO /dev/hda3: blocks in use: 2594.3.5: Principali opzioni del comando edquota. richiede l’impostazione delle quote per un gruppo. Se non si specifica nulla il comando imposta le quote per tutti i filesystem che le supportano. e una loro modifica verr` ignorata. pu` essere omessa) stampa un resoconto delle o quote utente. 6. se si vuole controllare le quote di gruppo occorre usare l’opzione -g. 6. limits (soft = 5000. richiede i dati delle quote utente. in questo modo ` possibile effettuare una impostazione generale per un singolo e utente senza doverla poi ripetere a mano per tutti gli altri. Infine con l’opzione -t si pu` impostare il periodo di grazia. hard = 6500) inodes in use: 356. 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. Tabella 6. a Tabella 6. hours. per i dettagli 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. un limite pu` essere annullato usando il o valore 0. il cui contenuto a sar` qualcosa del tipo: a Time units may be: days. or seconds Grace period before enforcing soft limits for users: /dev/hda2: block grace period: 0 days. e Un elenco delle principali opzioni del comando edquota ` riportato in tab. in o tal caso di nuovo sar` aperto un file temporaneo all’interno dell’editor di default. riporta solo le quote su filesystem locali. richiede l’impostazione delle quote per un utente. 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.6. 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. imposta il periodo di grazia.6: Principali opzioni del comando quota. il comando con l’opzione -u (il default. Una volta attivare le quote si possono ci sono due comandi che permettono di verificarne lo stato. il primo ` quota che permette ad un utente di verificare le condizioni delle sue quote e disco. limits (soft = 1000. richiede i dati delle quote gruppo.5. Opzione -f -u -g -l -q Significato limita le impostazioni filesystem specificato. modificando invece i valori dei limiti fra parentesi. Le altre opzioni principali di quota sono riportate in tab. Opzione -f -u -g -t -p Significato limita le impostazioni filesystem specificato. 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. e le opzioni servono per lo pi` a controllare le informazioni u che vengono stampate. elenca i dati delle quote gruppo. stampa le informazioni in modalit` succinta.7. non risolve i nomi di utenti e gruppi.7: Principali opzioni del comando repquota. a adatta le unit` di misura per spazio disco e inode. . AMMINISTRAZIONE AVANZATA DEL SISTEMA Un secondo comando per il controllo dello stato delle quote ` repquota che per` ` ad uso e oe esclusivo dell’amministratore. elenca i dati delle quote utente.254 CAPITOLO 6. 6. in quanto serve a fornire dei rapporti globali sullo stato delle quote nel sistema. Tabella 6. un sommario delle principali opzioni ` riportato in tab. 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. al solito per e l’elenco completo ed i dettagli di funzionamento del comando si pu` fare riferimento alla pagina o di manuale. a riporta maggiori informazioni e stampa anche i dati delle quote anche quando non sono usate. 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. a a 255 .Capitolo 7 L’amministrazione di base delle reti 7. fibra.1 Un’introduzione ai concetti fondamentali delle reti. chiamati nodi o stazioni (in inglese host) vengono messi in comunicazione fra di loro in modo da potersi scambiare dati. e la suddivisione per area di estensione si ` diversificata notevolmente. Nel e u corso degli anni sono stati sviluppati molti mezzi (cavo. ed una delle meno precise. e e tanto che attualmente oltre alle due precedenti sono state introdotte una lunga serie di altre tipologie. radio).) che permettessero di far comunicare fra loro computer diversi. che indica in genere una rete una rete cittadina. a partire dai diversi criteri che vengono usati come base per le loro classificazione. u WAN Con il diffondersi dei computer e delle tecnologie di comunicazione. la classificazione era molto semplice e prevedeva soltanto le due tipologie: LAN Local Area Network. in cui varie reti locali vengono integrate preliminarmente fra di loro a livello di area metropolitana. Viene di norma gestita da entit` legate al governo della citt`. In origine. In questa sezione introduttiva esamineremo in breve alcuni concetti di base relativi alle reti. Wide Area Network. ` quella u e per estensione o area.1. anche questa classificazione delle reti si ` evoluta. grazie a delle infrastrutture dedicate. che indica in generale una rete di grande estensione. In generale con il termine di rete si identifica quella serie di meccanismi e metodi di collegamento tramite i quali tanti singoli computer. ma viene gestita in comune e a a da pi` enti o organizzazioni. e a cui in genere si fa riferimento per indicare la struttura che connette varie reti locali. come ad esempio: MAN Metropolitan Area Network. la topologia con cui sono realizzate ed i protocolli di comunicazione usati. IPX.1 L’estensione Una delle forme di classificazione di una rete pi` elementari. estendendosi potenzialmente su tutto il mondo (Internet ` un esempio di WAN). In e questo caso la rete non ` propriet` di una entit` singola. quale l’estensione. di dimensione intermedia fra LAN e WAN. 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. AppleTalk. che indica le reti locali. realizzate su brevi distanze. e molti protocolli (TCP/IP. ecc. 7. 256 SAN CAPITOLO 7. Anche in questo caso per` la rottura di un cavo o di una o stazione comporta l’inutilizzabilit` dell’intera rete. la sola classificazione rilevante ` la prima. PAN DAN In generale comunque. Ciascuna stazione comunica con le stazioni limitrofe. Inoltre usando uno switch i pacchetti vengono smistati direttamente dalla stazione di origine alla destinazione.2 La topologia Una classificazione generale applicabile a qualunque rete ` quella basata sulla sua topologia. Desktop Area Network. ma solo la parte necessaria a e raggiungere la destinazione. In generale sono usate all’interno di singole organizzazioni e non sono da considerarsi propriamente delle reti di comunicazione.1. ring star . ed i messaggi vengono inoltrati lungo l’anello per essere ricevuti dalla stazione di ` destinazione. fino a formare un anello. Inoltre in caso o di rottura del canale tutto il traffico di rete ` totalmente bloccato e l’intera rete non e ` usabile. Le topologie fondamentali sono: bus ` E una rete che utilizza un canale centrale (detto backbone) per connettere fra loro tutti i dispositivi. e pu` essere facilmente saturato. ma la rottura di un cavo non interrompe tutta la rete. a ` E una rete in cui esiste uno snodo centrale (un hub o uno switch) cui vengono connesse le varie stazioni. Richiede normalmente una maggiore estensione della cablatura. 7. L’AMMINISTRAZIONE DI BASE DELLE RETI Storage Area Network. le altre si sovrappongono e spesso fra di loro (come per DAN e PAN) o non hanno a che fare. ma ` efficace solo per un numero a e limitato di stazioni. in genere poi le reti sono costruite con l’interconnessione di reti diverse e possono assumere delle topologie ibride rispetto a quelle qui elencate. in quanto il canale deve distribuire ad ogni nodo tutto il traffico. che fa riferimento alle reti dedicate a fornire un sistema di stoccaggio dati comune ad un insieme di computer. Il canale funziona come collettore cui ogni stazione si collega con un connettore inviandovi tutti i messaggi. a loro volta collegate ad un’altra stazione. come la SAN (e le tecnologie di comunicazione usate per i cluster. che in genere fa riferimento alle reti di comunicazione usate per connettere vari dispositivi periferici ad un computer a brevissima distanza (la scrivania appunto) come le reti ad infrarossi IRDA. La e topologia (dal greco topos) ` una branca della geometria che studia le propriet` delle connessioni e a fra oggetti geometrici. o all’interno dei computer per le varie CPU) con quello che tratteremo in queste dispense. che indica in genere quelle reti di comunicazione usate per connettere computer e dispositivi di uso personale (ad esempio il telefonino). compreso quello destinato agli altri. e si applica pertanto anche alla struttura delle reti. In genere questo tipo di rete ha il vantaggio della facilit` di installazione. La classificazione riportata prevede solo alcune topologie di base. e ` E una rete in cui ogni stazione ha due stazioni vicine. su distanze di pochi metri. ` E la topologia classica delle vecchie reti Ethernet su BNC. Personal Area Network. estraendone i messaggi a lei indirizzati. come il bluetooth. e non si soffre del problema del collo di bottiglia dovuto alla necessit` di trasmettere tutti i dati ad a ogni stazione collegata. E potenzialmente pi` efficiente della struttura a bus in quanto non u ` necessario che il messaggio attraversi tutto l’anello. Ogni stazione pu` osservare tutto il traffico o del canale. e Una caratteristica comune dei protocolli di rete ` il loro essere strutturati in livelli sovrape posti.3 I protocolli Come abbiamo accennato parlare di reti significa parlare di un insieme molto vasto ed eterogeneo di mezzi di comunicazione che vanno dal cavo telefonico. strutturato in sette livelli. che permette di comunicare con latenze inferiori. e-mail) che vengono offerti sulla rete.1. definiti e sincronizzati gli scambi di dati. cos` da avere strade diverse per il flusso dei dati. 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). video. Presentazione Il livello di presentazione fornisce le funzionalit` di codifica e conversione dei dati usate a dal successivo livello di applicazione. . per rendere possibile la comunicazione attraverso un cos` variegato insieme ı di mezzi sono stati adottati una serie di protocolli. ` E una rete che comporta la presenza di diversi percorsi possibili per la comunicazione. alla fibra ottica. si effettuano connessioni incrociate a fra pi` switch. ` E in genere la modalit` in cui vengono create le reti WAN. la cifratura. per ottimizzare la velocit` di trasmissione. crea e termina sessioni di comunicazione. Viene in genere realizzata u connettendo su una backbone o su uno switch centrale diversi hub o switch periferici. 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. come la rappresentazione dei caratteri. 7. ` a questo livello e che sono impostati. UN’INTRODUZIONE AI CONCETTI FONDAMENTALI DELLE RETI.7. 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. immagini). a in cui.1. gli schemi di compressione. mesh 7. o i cosiddetti fabric switch.1: I sette livelli del protocollo ISO/OSI. in questo modo ogni protocollo di un certo livello realizza le sue funzionalit` basandosi su a un protocollo del livello sottostante. 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. Di norma ` qui che sono e definiti i protocolli di funzionamento dei singoli servizi (telnet. il pi` famoso dei quali. ` il protocollo TCP/IP. secondo quanto riportato in tab. i formati dei dati (audio. Sessione Il livello di sessione gestisce. con un traffico pi` u ı u distribuito. tree 257 ` E una rete che integra in forma gerarchica pi` reti a stella. FTP. quello alla base del u funzionamento di internet.1. alle comunicazioni via satellite o via radio. Si indicano come esempi di questo livello le applicazioni per l’uso di telnet e FTP. 7. u Collegamento Dati Il livello di collegamento dati ` quello che fornisce una trasmissione affidabile dei dati e su una connessione fisica. delle schede di rete. dove viene evidenziata anche la e corrispondenza fra i rispettivi livelli (che comunque ` approssimativa). il tipo dei connettori. dato che fu sviluppato dall’agenzia ARPA per il Dipartimento della Difesa Americano. Il modello di quest’ultimo. il TCP/IP (su cui si basa internet) che ` diventato uno standard e de facto. Il nome del modello deriva dai due principali protocolli su cui ` basata internet. Connessione fisica Il livello di connessione fisica si occupa delle caratteristiche materiali (elettriche. nel sistema operativo.2). disattivare e mantenere il collegamento fisico fra diverse reti di comunicazione. ed il Media Access Control (MAC) che gestisce l’accesso al mezzo fisico.258 CAPITOLO 7. viene inserita l’interfaccia di programmazione (i cosiddetti socket) per l’accesso alla rete. Le funzioni dei vari livelli sono le seguenti: . e non attraverso i livelli superiori del protocollo).2: I quattro livelli del protocollo TCP/IP. IGMP) ethernet. 7. le distanze raggiungibili. e l’IP (Internet Protocol ) che copre il livello 2. il TCP e (Trasmission Control Protocol ) che copre il livello 3. SLIP Tabella 7.2. ` sostanzialmente equivalente all’omonimo livello del modello e TCP/IP illustrato pi` avanti. ` sostanzialmente equivalente all’omonimo livello del e modello TCP/IP illustrato pi` avanti. ed ` a questo livello che si definiscono gli indirizzi di rete che identificano macchine e non in diretto collegamento fisico. il Logical Link Control (LLC). detti appunto MAC address. UDP IP. la sequenza dei pacchetti. Sono definiti a questo livello caratteristiche come l’ampiezza e la temporizzazione dei segnali. FTP. Nel frattempo per` era stato sviluppato un altro o protocollo di comunicazione. la massima capacit` a di trasmissione. u Rete Il livello di rete si occupa dello smistamento dei singoli pacchetti su una rete interconnessa.25 per la commutazione di pacchetto. (ICMP. la topologia della rete. Si ` indicato in figura e e anche fra quali livelli. L’AMMINISTRAZIONE DI BASE DELLE RETI Trasporto Il livello di trasporto fornisce la comunicazione tra le applicazioni che girano sulle due stazioni terminali. viene chiamato anche modello DoD (sigla che u sta per Department of Defense). TCP. che gestisce le comunicazioni fra dispositivi all’interno di un singolo collegamento in una rete.1. fisiche. La IEEE ha diviso questo livello in due ulteriori parti. e consente a dispositivi diversi di identificarsi univocamente in una rete: a questo livello sono definiti gli indirizzi fisici. un confronto fra i due modelli ` riportato in fig. Cos` come ISO/OSI anche il modello del TCP/IP ` stato strutturato in livelli (riassunti in ı e tab. 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. Il modello ISO/OSI ` stato sviluppato in corrispondenza alla definizione della serie di protoe colli X. etc. PPP. A questo livello si definiscono caratteristiche come l’indirizzamento dei dispositivi. pi` semplice. definito nello standard IEEE 802. Livello Livello 4 Livello 3 Livello 2 Livello 1 Nome Application Applicazione Transport Trasporto Network Rete Link Collegamento Esempi Telnet. meccaniche) e funzionali per attivare. regola il flusso delle informazioni. secondo il e procedimento che ` illustrato in fig. 259 Figura 7. 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. UN’INTRODUZIONE AI CONCETTI FONDAMENTALI DELLE RETI. il modello ISO/OSI ` pi` e e u teorico e generale. Una volta scaricate in America le varie lettere saranno spacchettate e reimpacchettate per lo smistamento verso la destinazione finale. Qui sar` reimpacchettata a insieme a quelle provenienti dagli altri centri di smistamento ed imbarcata sull’aereo. I protocolli e principali di questo livello sono il TCP e l’UDP. Si occupa dello smistamento dei singoli pacchetti su una rete complessa e interconnessa. realizzando una comunicazione secondo un protocollo che ` specifico di ciascuna applicazione. e data la sua maggiore semplicit`. Per cercare di capire meglio le ragioni di tutta questa suddivisione in livelli consideriamo un’analogia con quanto avviene nella spedizione di una lettera per posta aerea in America.7.1: Confronto fra il modello OSI ed il modello TCP/IP nella loro relazione con il sistema. il modello TCP/IP ` pi` legato alla struttura con cui la gestione della rete ` e u e implementata in un sistema GNU/Linux. Il postino la raccoglier` dalla buca delle lettere per portarla al centro di smistamento. ´ Applicazione E relativo ai programmi di interfaccia con la rete. pu` fornire un o trasporto affidabile. gestendo l’invio e la ricezione dei pacchetti da e verso l’hardware.1. Per questo motivo. Il protocollo su cui si basa questo livello ` IP e (sia nella attuale versione. IPv4. che nella nuova versione. cio` con recupero degli errori o inaffidabile. per lo scambio di messaggi di controllo e per il monitoraggio della rete. e mandata al successivo centro di raccolta. in genere questi vengono realizzati secondo il modello client-server.2. il quale la aprir` e legger` quello che gli avete scritto. Qui un altro postino prender` la vostra e la metter` nella cassetta a a della posta del vostro destinatario. a dove in base alla sua destinazione sar` impacchettata insieme a tutte quelle che devono essere a inviate per posta aerea. ` E responsabile per l’interfacciamento al dispositivo elettronico che effettua la comunicazione fisica. a questo stesso livello operano i protocolli per il reperimento delle informazioni necessarie allo smistamento. a a Questo ` molto simile a quello che succede quando volete spedire dei dati via rete. Voi scrivete la vostra bella lettera su un foglio. 7. che mettete in una busta con l’indirizzo che poi imbucate. Ad ogni passaggio attraverso un livello del protocollo al e Rete Collegamento . IPv6). Quale dei due modelli usare ` spesso una questione di gusti. 2: Strutturazione del flusso dei dati nella comunicazione fra due applicazioni attraverso i protocolli della suite TCP/IP. 7. con la confidenza che questo poi sar` trattato uniformemente da tutti i a nodi della rete. il protocollo1 pi` diffuso. ma di una suite in cui sono inseriti vari protocolli. in modo da a coprire in maniera sostanzialmente completa le pi` varie esigenze di comunicazione.3 negli anni sono stati creati molti tipi diversi di protocolli per la comunicazione via rete. i vari “pacchetti” vengono disfatti (e la relativa intestazione rimossa) solo quando si torna indietro ad un livello superiore. u 1 . si dice cio` che un pacchetto di un protocollo viene “imbustato” nel protocollo successivo. In questa sezione ci limiteremo ad introdurre i concetti fondamentali delle reti IP. Come accennato in sez. ma vengono reimbustati pari pari al livello successivo.2 Il TCP/IP. 7.260 CAPITOLO 7. e A differenza della posta in questo caso i pacchetti con i dati non vengono disfatti ad ogni livello per passare in un pacchetto diverso. la notazione e le terminologie principali. L’AMMINISTRAZIONE DI BASE DELLE RETI Figura 7. quello su cui si basa “Internet”. in realt` non si tratta di un solo protocollo. in queste dispense per` prenderemo in esame soltanto il caso di reti o basate su TCP/IP. nostro pacchetto di dati viene aggiunta una intestazione relativa al protocollo utilizzato in quel livello. Tutto ci` rende facile il o progettare il software in maniera modulare facendo riferimento unicamente a quanto necessario ad un singolo livello. 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.1. e che ormai ` diu e ventato uno standard universale e disponibile su qualunque sistema operativo. che sono quelli che si curano di trasmettere i dati dall’origine alla destinazione. L’interfaccia fondamentale usata dal sistema operativo per la comunicazione in rete ` quella e dei cosiddetti socket. 7.2. svolto da uno (o pi`) protocolli specifici. IPX). il TCP/IP ` la modalit` di comunicazione nativa e e a di GNU/Linux. Cos` se si ` usato uno a ı e stream socket basato sul TCP quest’ultimo si curer` di stabilire la connessione con la macchina a . IL TCP/IP.1. 7. e non solo con l’insieme dei protocolli TCP/IP. e bench´ per compatibilit` siano stati implementati nel kernel anche parecchi e a altri protocolli di comunicazione (come DECnet. questo resta il principale ed il pi` usato. connessione remota) sono realizzati a livello di applicazione usando questa interfaccia. 261 7. posta elettronica.2 i socket fanno da ponte fra il livello di applicazione e quello di trasporto. In fig. una volta inviati su un socket i dati vengono passati (dal kernel) ad uno dei protocolli del livello di trasporto. Con i socket infatti si pu` creare un canale di comunicazione fra due stazioni remote. su 4 livelli.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.3: Panoramica sui vari protocolli che compongono la suite TCP/IP. Dato che il protocollo ` nato su macchine Unix. 7. senza doversi preoccupare di tutto il procedimento di passaggio da un livello all’altro che viene eseguito dal kernel. Come illustrato in sez. nata nel 1983 a Berkley e resa pubblica con il rilascio di BSD 4. La flessibilit` e la genericit` dell’interfaccia consente di utilizzare i socket con i pi` disparati meccanismi a a u di comunicazione. secondo le modalit` specificate dal tipo di socket scelto. Come mostrato in fig. 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. a ciascuno di essi corrisponde un particolare compito. u Figura 7.1 Introduzione. e secondo l’omonimo modello.7. AppleTalk. Tutte le applicazioni che forniscono i principali servizi su internet (pagine WEB.3 l’insieme di protocolli che costituisce il TCP/IP ` strutturato.2. l’autoconfigurazione. e che a seconda dei casi pu` essere una scheda ethernet o l’interfaccia associata al modem. ed un nuovo tipo di indirizzi. I messaggi sono normalmente generati dal software del kernel che gestisce la comunicazione TCP/IP. E un protocollo senza connessione.3 si sono riportati i protocolli principali che costituiscono il TCP/IP. per l’invio di dati a pacchetti. Ha uno spazio di indirizzi ampliato 128 bit che consente pi` gerarchie di indiu rizzi. la ritrasmissione. ma si deve essere consapevoli che nessuna di esse ` mai perfettamente congruente con il comportamento effettivo della rete. Permette alle stazioni remote di notificare ai router che supportano questa comunicazione a quale gruppo esse appartengono.262 CAPITOLO 7. ´ Internet Group Management Protocol. ` Internet Protocol version 6. Usa indirizzi a 32 bit. ` Internet Control Message Protocol. 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). A volte ci si riferisce ad esso come ICPMv4 per distinguerlo da ICMPv6. In queste dispense copriremo solo quelli di utilit` pi` comune. e quelli specifici di IPv6) vengono trasmessi attraverso di esso. tutti gli altri protocolli della suite (eccetto ARP e RARP. gli anycast. Useremo questa ed altre analogie nel seguito. Il protocollo ha cura di tutti gli aspetti del trasporto. E a questo livello che sono definiti gli indirizzi IP che identificano ogni macchina sulla rete. E stato progettato a met` degli anni ’90 per rimpiazzare a IPv4. anche se ICMP pu` venire usato direttamente o da alcuni programmi come ping. i ` timeout. o abbiano un particolare ordine di arrivo. vengano duplicati. Effettua lo stesso servizio di trasmissione dei pacchetti di IPv4 di cui vuole essere un sostituto. ` User Datagram Protocol. E un protocollo orientato alla connessione che provvede un trasporto affidabile per un flusso di dati bidirezionale fra due stazioni remote. ` Trasmission Control Protocol. ritrasmettendo a i pacchetti persi e scartando quelli duplicati. 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. ` Address Resolution Protocol. 7. etc. che consentono di inviare un pacchetto ad una stazione su un certo gruppo. si perdano. 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 ). Il livello finale ` quello dell’interfaccia di rete usata per trasmettere i pacchetti verso l’esterno. E un protocollo di livello 2 usato per il multicasting. 2 Al livello successivo sar` poi IP che curer` l’invio dei singoli pacchetti sulla rete. come l’acknoweledgment. Contrariamente al TCP il protocollo non ` affidabile e non c’` garanzia e e che i pacchetti raggiungano la loro destinazione. e e e mantiene tutte le informazioni di instradamento e controllo per la trasmissione dei pacchetti sulla rete. Ha origine negli anni ’80 e da allora ` la base su cui ` costruita internet. Come ICMP viene implementato direttamente sopra IP. una breve descrizione di quelli riportati in a u figura ` comunque la seguente: e IPv4 ` Internet Protocol version 4. In fig. E usato dalla maggior parte delle applicazioni. E il protocollo che mappa un indirizzo IP in un indirizzo ` hardware sulla rete locale. E usato in reti di tipo broadcast come Ethernet. 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. e . L’AMMINISTRAZIONE DI BASE DELLE RETI remota e garantire l’affidabilit` della comunicazione controllando eventuali errori. E quello che comunemente si chiama IP. ma non serve in connessioni punto-punto. 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. E il protocollo che esegue l’operazione inversa rispetto ad ARP (da cui il nome) mappando un indirizzo hardware in un indirizzo IP. E in protocollo di routing per router su reti interne. ` Serial Line over IP. Authentication Header. ecc. Provvede la cifratura insieme all’autenticazione dell’integrit` e dell’origine di un pacchetto. ` Open Shortest Path First.2. E un protocollo di routing usato per comunicare lo stato fra gateway vicini a livello di sistemi autonomi 3 . EGP ` Exterior Gateway Protocol.2. indirizzi di gateway e nameserver. L’analogia pi` diretta ` quella con il telefono. Viene usato a volte per durante l’avvio per assegnare un indirizzo IP ad una macchina. Essi devono e identificare univocamente un nodo della rete. per poter telefonare occorre avere un numero u e di telefono e conoscere quello di chi si vuole chiamare. Viene implementato direttamente sopra IP. version 6. Viene implementato direttamente sopra IP. E un protocollo complesso con varie componenti. solo che invece che di un numero decimale composto di un numero variabile di cifre 3 vengono chiamati autonomous systems i raggruppamenti al livello pi` alto della rete. come numero di IP. file per il boot via rete. IGMP e ARP. IL TCP/IP.7. controllarne la raggiungibilit` e scambiare informazioni sullo a stato della rete. ` definire i protocolli di rete usati ed incapsulare i pacchetti di dati. RARP ` Reverse Address Resolution Protocol. ` Generic Routing Encapsulation. Encapsulating Security Payload. ICMPv6 Internet Control Message Protocol. E un protocollo generico di incapsulamento che permette di incapsulare un qualunque altro protocollo all’interno di IP. e ` Point-to-Point Protocol. Provvede l’autenticazione dell’integrit` e dell’origine di un a ` una opzione nativa in IPv6 e viene implementato come protocollo a pacchetto. 263 Ring o FDDI che hanno associato un indirizzo fisico (il MAC address) alla interfaccia. svolgono esattamente questo ruolo. u . che ` analogo a quello del numero di telefono o dell’indirizzo di una casa. 7. L’indirizzo IP ` l’equivalente del numero e di telefono. E un protocollo a livello 1 progettato per lo scambio di pacchetti su connessioni punto punto. E s´ su IPv4. Combina per IPv6 le funzionalit` di a ICMPv4. E un protocollo di livello 1 che permette di trasmettere un pacchetto IP attraverso una linea seriale. OSPF GRE AH ESP PPP SLIP DHCP 7. Viene usato per configurare i collegamenti. definiti dall’Internet Protocol visto in sez. ` Dinamic Host Protocol. Gli indirizzi IP.3.2 Gli indirizzi IP Per poter comunicare fra loro due computer in rete devono potersi in qualche modo riconoscere.1. E un protocollo di livello 1 che permette di inviare informazioni di inizializzazione alle stazioni presenti in una LAN. Fa parte della suite di IPSEC che provvede la trasmissione cifrata ed e autenticata a livello IP. che permette a questi ultimi di scambiarsi informazioni sullo stato delle connessioni e dei legami che ciascuno ha con gli altri. e che ` lo stesso per tutti i telefoni di quell’area.0 128.0 240.3).0 255.255. e pu` anche essere cambiato a seconda dei casi.0.0. Questo meccanismo significa in realt` che ogni indirizzo su Internet. che corrispondono alla parte comune e di tutti gli indirizzi delle macchine sulla stessa rete.0.255.0.255.255 — 239. Questa viene espressa con la solita notazione dotted decimal. RIPE NCC e APNIC).168.0.255. 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). (riportate tab. Un prefisso ` l’equivalente dell’indirizzo di rete.111.255 — 191. e Come per i telefoni ad un numero pu` corrispondere solo un telefono.255.255. quando si configura una macchina. quando lo si scrive.255 — 247.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. per riprendere il precedente esempio di numero IP.0 192.255. che prende la parte inferiore del numero e che identifica la macchina all’interno della vostra rete. Dato che Internet.0.0 240.111.264 CAPITOLO 7.0.0.0. la cosa ` vera anche per le reti private non connesse direttamente e ad Internet (come quelle che collegano i computer di un ufficio). 7. per venire incontro alle diverse esigenze.0 224.11. un possibile indirizzo di rete ad esso relativo potrebbe essere 192.3: Le classi di indirizzi IP.0 Tabella 7. Per proseguire nell’analogia si pensi alle linee telefoniche interne di una ditta. L’assegnazione degli indirizzi IP ` gestita a livello internazionale dalla IANA (Internet Assie gned Number Authority). e La differenza con i prefissi ` che un indirizzo di rete IP. pur essendo espresso a sempre come un singolo numero. L’AMMINISTRAZIONE DI BASE DELLE RETI ` un numero binario (quindi espresso con soli 0 e 1) ed ha una dimensione fissa di quattro byte. che ha delegato la gestione di parte delle assegnazioni ad altre organizzazioni regionali (come INTERNIC. si ` soliti e e esprimere il numero che costituisce l’indirizzo IP usando una apposita notazione che viene chiamata dotted decimal.0).255.255.0.168. usate per parlare all’interno degli uffici. usando un numero decimale per ciascuno dei quattro byte che compongono l’indirizzo. il numero IP completo e ` quello che identifica il singolo telefono. Questo ` fatto attraverso altrettanti indirizzi IP.0 0. solo che in questo caso il numero di cifre (binarie) che e si usano per il prefisso non ` fisso.0. Come per il telefono di casa ogni computer connesso ad Internet viene sempre considerato come facente parte di una rete.255.255 Netmask 255.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. un esempio di questa notazione potrebbe essere qualcosa del ` tipo di 192. E attraverso questo numero il vostro computer viene identificato univocamente su Internet. e o Per questo motivo.255. ad ogni indirizzo IP si associa sempre anche quella che viene chiamata una netmask : una maschera binaria che permette di dire quali bit dell’indirizzo sono usati per identificare la rete e quali per il nodo.0. come dice il nome. anche queste devono venire idene tificate.0.255. separati da un punto.255. ma ad un telefono possono o essere collegati pi` numeri. La situazione dunque ` ancora analoga a quella di un numero di telefono che ` diviso in e e prefisso e numero locale.0. vedremo pi` avanti come ad uno stesso computer (o a una stessa u u interfaccia di rete) possono essere assegnati pi` indirizzi IP. nei fatti ` composto da due parti.255.255. per consentire dispiegamenti di reti di dimensioni diverse. gli indirizzi di rete erano stati organizzati in classi. Originariamente. l’indirizzo di rete. ` un insieme di reti. Classe A B C D E Intervallo — 127. visto che scrivere i numeri in formato binario ` poco comprensibile. u Di solito. deve essere e completato da tanti zeri quanti sono necessari a raggiungere la dimensione di 32 bit degli indirizzi normali.0.255 — 223. 0.0 192. con un conseguente enorme spreco di numeri (si passerebbe da 256 a 65536). che viene utilizzato da una singola stazione quando vuole inviare un messaggio contemporaneamente a tutti gli altri nodi presenti su quella rete.111.111. in cui si ` riassunta la e struttura di un indirizzo IP di esempio. verso pi` stazioni riceventi. come vedremo fra poco. che lo emette una volta sola. mostrato insieme agli altri visti finora nello specchietto in tab. Per concludere questa panoramica sugli indirizzi occorre accennare all’indirizzo di broadcast. per utilizzare questa comunicazione occorre operare su uno di questi indirizzi. ottimizzando quindi la u trasmissione dati da uno verso molti. 7.7 Indirizzo Indirizzo completo Maschera di rete Porzione di rete Porzione del nodo Indirizzo di rete Indirizzo broadcast Esempio 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. ma la si trova riportata spesso.255.168.111. che permette di indicare la parte di rete appendendo all’indirizzo l’indicazione del numero di bit riservati alla rete.255.168.0 e una rete di classe C comprende 256 (cio` 28 ) indirizzi e ed ha una netmask pari a 255. La presenza di un indirizzo di broadcast permette il funzionamento di una serie di protocolli ausiliari del TCP/IP che devono poter scambiare e ricevere informazione con tutti i computer il multicast ` una modalit` di comunicazione per consentire la spedizione simultanea di uno stesso pacchetto e a IP da una stazione singola.0. dato che non ` detto che la rete in questione sia ancora classificabile o e in questo modo.11 192.0.0. 265 Le classi usate per il dispiegamento delle reti di cui ` attualmente composta Internet sono le e prime tre.5: Specchietto riassuntivo della struttura degli indirizzi IP.11/24. n bit CIDR net Id 32 − n bit host Id Tabella 7.4).4: Uno esempio di indirizzamento CIDR.255.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.168. mentre l’indirizzo . La suddivisione riportata in tab.111.255.0 ` riservato per indicare a e e la rete. IL TCP/IP. mentre la classe E ` e e riservata per usi sperimentali e non viene impiegata.111. E stata cos` introdotta anche una nuova u ı notazione. 7. che per convenzione ` sempre ottee nuto mettendo ad 1 tutti i bit della porzione dell’indirizzo riservata all’host.7. 5 e questo alle volte pu` creare problemi. la classe D ` destinata all’ancora non molto usato multicast.5. 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.255 Tabella 7. una rete di classe B comprende 65536 (cio` 216 ) indirizzi e ed ha una netmask pari a 255. . ` quello di broadcast. nel caso in esempio si avrebbe allora 192.11 255.168.255.168. u e e ed alcuni programmi cercano di calcolare automaticamente la netmask a seconda dell’IP che gli date.0.0 192. 6 in realt` gli indirizzi disponibili con una classe A sono 254. 7 questo permette di usare direttamente le capacit` di broadcasting di alcune interfacce di rete che supportano a questa modalit` di comunicazione.255. In ogni rete Internet infatti esiste un indirizzo riservato. permettendo cos` di accorpare ı ` pi` classi C su un’unica rete o suddividere una classe B. 4 .2. questi indirizzi sono riservati per e ogni rete e non possono essere usati per un singolo host. a 4 . 7. questo perch´ l’indirizzo . seguendo queste tabelle. Oggigiorno questa divisione in classi non ` e pi` molto usata (perch´ come vedremo fra poco ` inefficiente). 0 — 192.0. senza influenzare la rete.168.0. di solito le si associa l’indirizzo 127. Si tratta di una interfaccia assolutamente virtuale che effettua la comunicazione in locale facendo passare i dati attraverso il kernel.0. interna al singolo nodo. Infine l’RFC 1918 riserva una serie di indirizzi per le reti private. cio` non e e esiste mai una connessione diretta fra due nodi.0 che viene usato per indicare un indirizzo e generico non specificato. che anch’essa avr` un suo numero IP. ed in questo caso l’analogia telefonica non ci aiuta. 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.255. si tratta di una rete di classe A.1. indicata dalla sigla lo. quando un programma che usa i socket TCP/IP deve fare riferimento a se stesso.255.0 — 172. cio` nella parte relativa o e alla propria rete locale.0 — 10. cio` per le reti interne che e non devono mai essere connesse direttamente ad internet. 16 reti di classe B e 256 reti di classe C.0.255.2. cio` e e per realizzarlo si mettevano effettivamente in collegamento elettrico i due telefoni con una serie di selettori.255.0. a Una volta usciti dalla rete locale la situazione si complica molto. ma in questo caso deve essere proprio specificato l’indirizzo completo della macchina che fa da ponte. In una rete locale il ruolo del centralino ` svolto dal cosiddetto default gateway.6: Le classi di indirizzi IP riservate per le reti private. L’argomento del routing ` uno dei pi` complessi nella gestione delle reti. Classe A B C Intervallo 10. 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.0. 7.31. per poter uscire e telefonare all’esterno occorre in qualche modo passare dal centralino. perch´ il collegamento telefonico nasce a commutazione di linea. Infine alcuni indirizzi sono trattati a parte e considerati riservati. anche se poi i programmi usano delle funzionalit` a . e per questo viene anche usato per indicare la cosiddetta default route.168.255 192. e In questo caso il problema si pu` sostanzialmente dividere in due. 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. in inglese routing.6. 7.0. L’AMMINISTRAZIONE DI BASE DELLE RETI presenti (ad esempio quelli che permettono di scoprire quali sono gli indirizzi realmente attivi).0 che viene associata ad interfaccia di rete virtuale. questa ` la e e macchina che nella vostra rete fa da ponte verso l’esterno.255 172.0. Un altro indirizzo speciale ` l’indirizzo nullo 0. 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. ed in quello che succede una volta usciti da essa. i loro indirizzi sono riportati in tab. mentre internet ` progettata per funzionare a commutazione di pacchetto.266 CAPITOLO 7. per questo quando installate una macchina in una rete locale dovete sempre sapere l’indirizzo del gateway.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. occorre infatti sapere anche come poterci arrivare.0. senza doversi indirizzare a ciascuno di essi individualmente.16.0. ad esempio dalla classe A ` e stata rimossa l’intera rete 127. Lo si usa anche per indicare l’insieme di tutti gli indirizzi possibili. il localhost. 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). Una volta che si sappia la destinazione finale infatti.255 Tabella 7. che viene utilizzato per comunicare. cio` la destinazione verso e cui inviare tutti i pacchetti con una destinazione al di fuori della rete locale. 2. e sono in grado di a u far prendere ai pacchetti la strada pi` veloce. una o segreteria telefonica. tenendo conto di eventuali ingorghi. a 7. senza comprendere la quale mancherebbero le basi per poter spiegare il funzionamento di quest’ultimo: quella delle porte. o spedite un pacchetto fuori dal gateway della vostra rete locale. In realt` sono ancora pi` intelligenti. u interruzioni del traffico ecc. e anche lui deve passare attraverso dei “caselli”. u e Ad esempio quando lavoravo per l’INFN mi capitava spesso di dover andare al CERN. su un numero IP possono in realt` rispondere diversi servizi. a Firenze Nord cambiavo sulla Firenze Mare. Per u questo in realt` si potrebbe pensare alle porte come ai canali della filodiffusione. ora quando inviate un pacchetto su internet succede qualcosa di simile. o un altro computer (se c’` attaccato un modem). IL TCP/IP. sia pure in maniera molto parziale. ma questo riguarda solo la parte del protocollo che viene usato per effettuare la trasmissione fra due computer. spezzati in pacchetti passati da un nodo della rete all’altro fino ad arrivare alla loro destinazione finale dove vengono riassemblati. 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.8 cio` a delle a e specie di “frequenze” diverse su cui sintonizzate il vostro telefono. quando arrivate a ı Torino il router vi far` dirottare per il Frejus. si tratta di una specie di radio via telefono. e Allora come su un numero di telefono pu` rispondere una persona (se solleva la cornetta). come dice poi lo stesso nome di instradamento. uscendo a Lucca per fare il raccordo per prendere l’autostrada per Genova. Anche in questo caso l’analogia telefonica ci viene. 267 che permettono di lavorare come se le cose fossero effettivamente cos` ma i dati inviati vengono ı. Occorre perci` introdurre un’altra delle caratteristiche del protocollo TCP/IP. Abbiamo gi` visto che per poter effettuare delle comunicazioni in generale i programmi a necessitano di creare delle connessioni. che usano i protocolli del livello di trasporto.2. relativa stao volta al livello di trasporto. un fax. a u 8 .4 I servizi e le porte. Cos` se il tunnel del Monte Bianco viene chiuso. come TCP ed UDP. da li prenderanno la strada opportuna per arrivare al router del provider a cui ` collegato il computer del vostro interlocutore. e cio` il protocollo IP. sulle quali trovate i contenuti pi` diversi. lo stesso accade e anche per internet.7. dove fatta la circonvallazione prendevo l’autostrada per il traforo del Monte Bianco. come accennato nell’introduzione (si ricordi quanto detto in sez. ma che oggi non esiste praticamente pi`. Come vedete si tratta di un bel percorso complicato. cambiavo di nuovo per Torino. Quello che succede ad esempio quando vi collegate con un modem e iniziate a “chattare” con qualcun’altro. che li mander` a lui. incidenti. da Genova proseguivo per Alessandria. Per farlo prendevo l’autostrada a Firenze Sud. ` che i pacchetti che escono dal vostro computer vengono inviati al router e (l’equivalente del casello) del vostro provider. e per far questo ci sono i socket. u per chi non ha idea di che cosa sia. Da li il raccordo porta sull’autostrada per Ginevra. che comporta il passaggio da diversi caselli. ed illustra pi` chiaramente i concetti del routing ` quella delle reti stradali. 7. un’analogia che pu` spiegare un o po’ meglio le cose. corrispondenti a a forme di comunicazione diversa.3) questo ` solo uno dei protocolli di internet. 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.1. Per questo. 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). Finora infatti abbiamo parlato dei numeri IP come dei numeri di telefono. usata per trasmettere musica quando le radio avevano una pessima qualit`. nella cui periferia sono i laboratori del CERN. e copre soltanto il livello e di rete. in aiuto. Finora abbiamo parlato quasi esclusivamente di IP. se su di essa non c’` un server. 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. ma dal fornitore del servizio telefonico. e un altro telefono. come UDP e TCP. su cui si pu` trasmettere o ascoltare. potete solo ascoltare. 7. come spiegato. dato che in genere i browser cercano i siti sulla porta 80. Si tenga conto per` che il concetto di porta ` spesso fuorviante. in cui oltre all’invio dei pacchetti si cerca di assicurare pure una comunicazione affidabile. 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. Cos` quando si vuole inviare della posta elettronica si comunicher` attraverso una di queste ı a porte. In un sistema Unix le prime 1024 porte sono dette riservate in quanto solo l’amministratore pu` installarci sopra dei servizi. come vedremo in sez. per cui in certi casi si potranno avere comunque dei conflitti. ma la standardizzazione ha portato ad associare alcuni numeri a dei servizi specifici (la porta 25 alla posta elettronica. 11 per questo non sar` mai possibile sfondare una “porta” sul vostro computer.268 CAPITOLO 7. ed a i client di posta cercano un server sulla porta 25. ı 10 9 . ` stato e introdotto questo concetto delle porte. Dal punto di vista del TCP/IP si potrebbe usare un numero di porta qualsiasi. 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. pari a 216 − 1. e non da una applicazione ad un’altra. cio` di un secondo numero che in sostanza permette e di identificare le due applicazioni che stanno usando il protocollo.). 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. ´ E per questo motivo che nei protocolli del livello di trasporto. 7. 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. attraverso l’opportuno protocollo di applicazione.1. usando uno scambio di a dati specifico che va a costituire l’ultimo livello (quello di applicazione) della struttura mostrata in fig. 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. ed IP (quello e e dei numeri) serve solo a gestire la trasmissione dei pacchetti attraverso una rete. che serve solo ad inviare pacchetti da un computer all’altro. 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. ed un canale alla volta. Questo avviene perch´. i dati relativi al servizio associato. avviando un o demone che si metta in ascolto. per questo sarebbe pi` chiaro parlare u di frequenza. Per poter effettuare uno scambio di dati fra due programmi che comunicano via rete. se non siete in ascolto. alcune di queste porte per` sono state usate tradizionalmente o da altri servizi molto diffusi. ecc. 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). mentre quando si vuole leggere una pagina web se ne user` un’altra. in quanto con porta si intende o e una qualche forma di accesso permanente che pu` essere aperto o chiuso.6. a e cos` come non possono mandarvi offese sulla radio. mentre con internet potete sia ascoltare che trasmettere. 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 ). la porta 80 al web. 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. L’AMMINISTRAZIONE DI BASE DELLE RETI In realt` non ` neanche cos` perch´ nel caso della filodiffusione il segnale non viene da a e ı. da e verso qualunque altro telefono e su quanti canali volete9 in contemporanea. TCP/IP ` un insieme di protocolli.3 un elenco che associa un numero di porta ad un servizio noto viene mantenuto nel file /etc/services. si veda sez. 7. 7. 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. nel qual caso dovrete cercare nelle relative sezioni. . 7. sono altrettanto numerose e complesse le configurazioni che si possono affrontare. ` necessario intervenire qui solo se si vuole supportare e e un altro protocollo (come IPX o Appletalk).3. In tal caso la difficolt` maggiore sar` quella di selezionare il modulo che corrisponde alla a a vostra scheda. Nel caso il vostro hardware non sia u supportato. Di solito per il TCP/IP tutto quello che serve ` attivato di default. che i file di configurazione usati nel procedimento di avvio per la configurazione automatica dell’interfaccia. 5.3.4. In genere tutte le distribuzioni provvedono dei kernel standard che sono gi` predisposti a a supportare tutto quello che serve nei casi pi` comuni. e a In particolare essendo numerosissimi. In questa sezione per` affronteremo solo la configurazione di base della rete. 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.3 o a meno che non abbiate una gigabit o qualche scheda WAN. ma solo sulle opzioni di compilazione che ci interessano. u Nella seconda parte si attivano invece i driver per le varie schede ed i protocolli di basso livello. o vi necessiti un protocollo o una funzionalit` non previsti nel kernel corrente vi a occorrer` ricompilare il kernel12 . per cui non ci e dilungheremo su questa procedura. i servizi che operano sulla rete.7. Networking options e Network device support. la differenza ` che in genere questa viene scelta automaticamene te dal kernel quando il client crea la connessione.3 La configurazione di base La configurazione della rete ` una materia alquanto complessa e di una vastit` impressionante. LA CONFIGURAZIONE DI BASE 269 stesso IP sorgente. come si pu` vedere dalla schermata del men` di configurazione riportata in fig. e non dei vari servizi che o possono essere realizzati su di essa.1. di rete ed il collegamento fisico) per il funzionamento della rete e delle interfacce di comunicazione. Le sezioni relative alla rete sono due.1. 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. 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. o attivare alcune opzioni specialistiche (su cui eventualmente torneremo pi` avanti).1 ` il kernel che fornisce il supporto dei protocolli necessari (per i livelli di e trasporto. e spesso molto complessi. verso lo stesso IP e la stessa porta di destinazione. ma il kernel deve essere in grado di poter separare i pacchetti inviati indietro alle due istanze del browser (che potranno leggere contenuti diversi) e per questo dovranno essere usate da ciascuna istanza delle porte sorgenti diverse. Questo comporta che ogni client viene sempre contattato (dai pacchetti di risposta) su una porta specifica (quella sorgente). 7. 5.4 si possono attivare i protocolli di rete di alto livello (sopra il collegamento) necessari. 7. In particolare vedremo come effettuare le varie impostazioni relative all’uso e alla gestione dei tre livelli pi` bassi del protocollo TCP/IP. o u Nelle prima delle due opzioni segnalate con un asterisco in fig. a Il procedimento per la ricompilazione del kernel ` affrontato in sez.1 Il supporto nel kernel Come mostrato fig. u e ed esamineremo sia i comandi di base con i quali si effettua la configurazione manuale della rete. che sono la base su cui tutto il resto ` costruito. Pressing <Y> includes. questo viene fatto indicando i rispettivi nomi nel file /etc/modules.3. 5. <?> for Help. Nel caso abbiate optato per un supporto modulare dovrete inoltre configurare opportunamente il file /etc/modules. ma ` senz’altro meglio andare o e a comprarsi una scheda pi` recente u 14 . Press <Esc><Esc> to exit. cos` da specificare in maniera univoca a quale interfaccia viene associata una certa scheda.org/HOWTO/Ethernet-HOWTO. | | <M> modularizes features. e vi secchi aprire il computer. e nel quale ` riportata una lunga lista di e schede supportate. Inoltre se lo ritenete opportuno potete far caricare i moduli relativi alle interfacce di rete all’avvio della macchina. potete sempre ricorrere al comando lspci14 . 7.4: Schermata di configurazione per la compilazione del kernel. come illustrato in sez.4.tldp.conf. che permette di associare un modulo ad una specifica interfaccia. 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). 222 potete verificare come la scheda di rete sia una Realtek 8139. per le schede ISA si pu` usare pnpdump.4. <Enter> selects submenus --->. che permette anche di e si suppone che abbiate una scheda PCI.html) che di solito si trova anche nella documentazione allegata con la vostra distribuzione.16 Configuration --------------------------------------------------------------------------+------------------------------. L’AMMINISTRAZIONE DI BASE DELLE RETI Linux Kernel v2. | | 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.2 Il comando ifconfig Il primo passo per poter utilizzare la rete ` quello di assegnare ad una interfaccia di rete il e suo numero IP. nell’esempio riportato a pag. | | Highlighted letters are hotkeys. <N> excludes. 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. Se non avete idea di quale sia la scheda che avete sulla macchina. le opzioni di configurazione per il supporto di rete sono indicate con un asterisco bile su http://en.1.Main Menu -------------------------------+ | Arrow keys navigate the menu. Il comando che vi consente di fare questo ` ifconfig.270 CAPITOLO 7. 255. la e cosiddetta interfaccia di loopback che viene usata per le comunicazioni locali.0.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.0 b) Interrupt:9 Base address:0x6000 Link encap:Local Loopback inet addr:127.0.255 Mask:255. Valore UP NOARP RUNNING MULTICAST BROADCAST POINTOPOINT LOOPBACK Tipo indirizzo L’interfaccia ` attiva.3.168.3 GiB) Interrupt:10 Base address:0x8800 eth0:0 Link encap:Ethernet HWaddr 00:01:02:2F:BC:40 inet addr:192. Tutto quello che serve nella maggior parte dei casi sono soltanto le opzioni che permettono di attivare e disattivare una interfaccia. e a Tabella 7.168. Come si vede nell’esempio sulla macchina sono presenti 3 interfacce di rete.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 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.1.6 GiB) TX bytes:2524425895 (2.0. Si pu` notare come il comando riporti le varie caratteristiche delle singole interfacce: nella o .255.168.2 GiB) TX bytes:1385547296 (1.7.1. e che deve essere sempre attivata anche per i computer non connessi in rete.1 Bcast:192.168.1 Mask:255.168.168.255. due di esse (eth0 e eth1) corrispondono a due schede di rete ethernet.255. se invece si vuole lo stato di tutte le interfacce esistenti.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. e Non ` attivato il protocollo ARP per l’interfaccia. 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). e a L’interfaccia ` in modalit` punto-punto. occorre usare l’opzione -a.7: Stati riportati nella terza riga del comando ifconfig e relativo significato.255 Mask:255.0.255. la terza (lo) ` una interfaccia logica. Se usato senza opzioni e senza specificare una interfaccia il comando mostra lo stato di tutte le interfacce attive.255 Mask:255.2 GiB) eth1 lo Se si specifica come argomento il nome di una interfaccia il comando mostra lo stato solo dell’interfaccia specificata. comprese quelle non attive.234 Bcast:192. e L’interfaccia ` in modalit` broadcast. Un risultato possibile ` il seguente: e [root@havnor root]# ifconfig eth0 Link encap:Ethernet HWaddr 00:01:02:2F:BC:40 inet addr:192.0 b) TX bytes:0 (0. e L’interfaccia sta funzionando. Sull’interfaccia ` attivato il multicast.1 Bcast:192.0.168.168.255. LA CONFIGURAZIONE DI BASE 271 impostare le varie caratteristiche delle interfacce di rete. e a L’interfaccia ` in modalit` loopback.0. dando un errore nel caso il supporto nel a kernel non sia attivato. Indirizzo AppleTalk. I valori possibili sono riportati in tab. Qualora invece la si voglia disattivare si potr` usare un comando del a tipo: [root@havnor root]# ifconfig eth0 down utilizzando l’opzione down.8. che indica il protocollo TCP/IP. Valore inet inet6 ax25 ddp ipx Tipo indirizzo Indirizzo IPv4. l’opzione ` indicata come IP aliasing. ad e esempio eth0) ci mostrer` lo stato dell’interfaccia. ` inet. quindi segue una riga che indica lo stato corrente della stessa.272 CAPITOLO 7. Indirizzo IPv6. ` E sempre possibile assegnare pi` indirizzi ad una stessa interfaccia. a 15 nei kernel recenti ` attivata di default.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.8: Valori del parametro aftype del comando ifconfig. Indirizzo Novell IPX. il valore di default. sottinteso quando non si specifica nulla. 7. dato che il caso pi` comune ` relativo all’impostazione e u e di indirizzi IP. 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. nella seconda riga viene riportato il tipo ed il valore dell’indirizzo associato all’interfaccia. 271 ci mostra anche che l’interfaccia eth0 ` come suol e dirsi multihomed .168. Indirizzo AX25. in quanto esse non possono che essere uniche per ciascuna interfaccia.7. Si noti comunque come le statistiche siano riportate solo per la prima istanza. che presentano indirizzi diversi. Tabella 7. e u . e a perch´ quando si assegna un indirizzo IP il valore precedente viene sovrascritto. e l’opzione non compare pi`. identificati in due sezioni separate e introdotte dalle stringhe eth0 ed eth0:0. 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. in cui sono elencate una serie di valori il cui elenco e relativo significato ` riportato e 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. L’AMMINISTRAZIONE DI BASE DELLE RETI prima riga viene scritto il tipo di collegamento fisico usato da ciascuna di esse.100 in cui ` sottintesa l’opzione up in quanto si d` per scontato che assegnare un IP all’interfaccia e a implichi la volont` di utilizzarla. Il comando e ifconfig iface (dove iface ` il nome della singola interfaccia che si vuole controllare. infine sulle righe seguenti vengono scritte una serie di altre informazioni statistiche relative al traffico sostenuto dall’interfaccia. nella sezione Networking e options. purch´ si sia abilitato il u e relativo supporto nel kernel. e se presente per quel tipo di interfaccia anche l’indirizzo fisico. 7. essa cio` compare con due indirizzi diversi.1. Il risultato del comando riportato a pag. Prima di poter configurare una interfaccia ` opportuno verificare che essa non sia gi` attiva. dato che l’indirizzo ` di classe C). 10bao seT. e le opzioni sono quelle riportate in tab. In questo caso si vede che un ruolo particolare ` rivestito e e dalla macchina havnor. che prenderemo come riferimento per i nostri esempi. Se non si specifica nessuna direttiva il comando viene usato per mostrare lo stato corrente della tabella. nel nostro esempio questa dovr` e a . tornando a u all’analogia telefonica. 7. che normalmente vengono lasciate al valore di default. ecc.9: Possibili opzioni del comando ifconfig.7. il e comando appena visto assegna automaticamente all’interfaccia una netmask corrispondente alla classe cui l’indirizzo appartiene secondo la suddivisione tradizionale di tab. di solito viene impostato automaticamente usando il default che ` auto.3 (nel caso sarebbe pari a 255. che permette di aggiungere una voce alla tabella. LA CONFIGURAZIONE DI BASE 273 Si ricordi che ad ogni indirizzo ` sempre associata una rete. per le altre. In realt` quando si ha a che fare con una rete locale le cose sono molto pi` semplici. e. e vediamo come deve essere configurata la tabella di instradamento per le varie macchine di cui la rete ` composta. che ` posta a cavallo fra due reti diverse. 7. attiva e disattiva (con -) il modo promiscuo (in cui tutti i pacchetti vengono ricevuti) per l’interfaccia. tutto quello che dovete fare ` specificare qual’` il numero del centralino e e e quali sono i numeri diretti. Le principali sono elencate in tab. le direttive fondamentali sono sono due: add.9. se non viene specificato esplicitamente. e Il comando prende come argomenti delle direttive che ne specificano le operazioni. normalmente ` selezionato e automaticamente quando si attiva l’interfaccia.). 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. Valore [-]arp media type Significato attiva e disattiva (con -) l’uso del protocollo ARP per l’interfaccia.100 netmask 255. 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. e abilita il multicast sull’interfaccia.255.0. 7. Supponiamo di avere la rete schematizzata in fig. multicast [-]promisc netmask addr Tabella 7. tramite il parametro type (che pu` assumere ad esempio valori come 10base2. 7. imposta la maschera di rete per l’indirizzo.3. e del che ne permette la cancellazione. 7. nel caso specifico per` essa e o sembra non comparire. che si chiama cos` proprio perch´ serve a specificare la strada che i pacchetti possono ı e prendere per arrivare a destinazione.255. e seleziona il tipo di mezzo (in genere il cavo).1. Se non specificato il default ` arp. perch´ sia e e possibile utilizzare la rete occorre anche impostare l’instradamento. si rimanda alla lettura della pagina di manuale. per questo si usa il comando route. questo ` dovuto al fatto che.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.10. 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.168.3. accessibile con man ifconfig.3 Il comando route Avere attivato l’interfaccia ed averle assegnato un numero di IP ` solo il primo passo.0.5. In sostanza dovete avere una segnaletica stradale che vi dice da quale parte svoltare per arrivare a destinazione.0 Oltre ai due argomenti up e down appena illustrati. il comando ifconfig supporta molte altre direttive di configurazione. Ad esempio. 7.4. prende gli stessi valori e usati da ifconfig riportati in tab. Quando ` invocato senza parametri il e e comando vi mostra il contenuto corrente della tabella di instradamento. che invece ` il lavoro svolto dai router. Il primo passo ` sempre quello di controllare la situazione corrente. 7. Figura 7. in maniera completamente trasparente ai livelli superiori. L’AMMINISTRAZIONE DI BASE DELLE RETI Descrizione opera sulla cache di instradamento del kernel. usa gli indirizzi della famiglia passata come parametro (il default ` inet per gli indirizzi IP. e 16 .274 Opzione -C -e -F -n -A CAPITOLO 7.5. 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. 7.10: Opzioni a riga di comando per l’uso di route. non effettua la risoluzione degli indirizzi. o usando direttamente i file con cui questa o viene rappresentata nel filesystem /proc. fare da ponte16 fra le due reti. qui per` o o stiamo parlando semplicemente del passaggio di un pacchetto da una interfaccia ad un altro a livello di rete. usa il formato di netstat (vedi sez.8). o e questo si pu` fare attraverso l’interfaccia del sysctl. 7. passando i pacchetti da una interfaccia ad un’altra.3). esegue le operazioni in maniera prolissa.5 usando route. 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. Linux pu` essere utilizzato anche in questo modo. nel caso illustrato in fig. abilitando l’opportuno supporto nel kernel. -v Tabella 7. ripetuto due volte stampa pi` informazioni. che di default ` disabilitato. u opera direttamente sulla tabella di routing (il default).5: Schema di una rete di prova. perch´ questo e funzioni per` deve essere stato abilitato il cosiddetto IP forwarding. interfaccia verso cui sono inviati i pacchetti.0 192.0. 7.0. e Tabella 7.0 192. 7.11: Nomi della colonna e relativo significati per le varie informazioni riportate nell’uscita del comando route. gestiti di norma dai demoni di routing.0 0. Per tutte queste sottoreti.3. indirizzo del gateway (0.0 255.0. Se non specificato altrimenti il comando tenta anche di risolvere (vedi sez. uno specchietto u delle informazioni mostrate dal comando ` in tab.0. maggiori dettagli sono nella pagina di e manuale. valore iniziale dell’RTT (Round Trip Time) per il protocollo TCP.1 Genmask 255.168. essendo esse accessibili direttamente da una interfaccia locale. il significato delle altre colonne ` associato e agli aspetti pi` sofisticati del routing. 7.3. non esiste un gateway (` come per le telefonate all’interno dell’ufficio.0. 7.7. default per la window size delle connessioni TCP su questa rotta. L’output usa la formattazione appena mostrata in cui la prima colonna identifica la destinazione.168.0.1. 7.1. LA CONFIGURAZIONE DI BASE 275 [root@havnor root]# route -n Kernel IP routing table Destination Gateway 192. numero di verifiche sulla rotta.0. e L’uscita del comando mostra le voci presenti nella tabella di instradamento.0 0. e non c’` bisogno di usare il centralino) e questo ` indicato dall’uso dell’indirizzo generico in e e abbiamo accennato in sez. numero di riferimenti nella tabella di instradamento (non usato nel kernel). la quarta lo stato della rotta e l’ultima l’interfaccia usata per l’invio dei pacchetti.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. che usualmente vengono chiamate anche rotte.0 0.255.0 0.255.0. flag che indica se il l’indirizzo hardware per la rotta in cache ` aggiornato.0.17 che modificano continuamente le rotte presenti nella tabella di instradamento per tenere conto delle condizioni della rete.255. metrica della rotta (distanza dalla destinazione in numero di salti). la seconda il gateway (nella nostra analogia il centralino per quella destinazione).0.3 alla presenza di protocolli usati dai router per scambio delle informazioni.11.255.0.168.0.0 255. 17 .6) i nomi delle macchine e delle reti.255. in contrapposizione alle u rotte dinamiche che vengono impostate dai demoni di routing. Nome Destination Gateway Genmask Flags Metric Ref Use Iface MSS Window irtt HH Arp Descrizione rete o nodo di destinazione.0 0.168.2 abbiamo visto essere multihomed).0 192.255. Nell’esempio mostrato si pu` notare come ci siano tre diverse destinazioni associate a tre o diverse sottoreti. numero di voci ARP e rotte in cache che fanno riferimento allo stessa intestazione hardware.0. default per l’MMS (Maximum Segment Size) delle connessioni TCP su questa rotta. i demoni di routing sono programmi che implementano questi protocolli e aggiornano automaticamente la tabella di instradamento con le informazione ottenute.168.0.12).0 se non impostato). la terza la sottorete coperta dalla destinazione. di cui due fanno capo alla stessa interfaccia (quella che in sez. in generale le rotte impostate con route vengono dette rotte statiche (in quanto una volta impostate non vengono pi` cambiate). netmask della rete di destinazione flag associati alla rotta (vedi tab. in quanto cambiare i contenuti della tabella di instradamento ` una operazione privilegiata. rotta reintegrata da un instradamento dinamico. per passare da una rete all’altra.168.168.0. una volta assegnato l’indirizzo con ifconfig tutto quello che resta da fare ` specificare qual’` il e e default gateway.0. ed invia un pacchetto in uscita sulla .168. rotta bloccata (impedisce l’instradamento per la destinazione specificata). In tutti i casi in l’accesso ad una rete ` condizionato al passaggio da una macchina specifica e che fa da collegamento.0 di usare come gateway la macchina 192. Nel caso di un computer con una sola interfaccia di rete inserito in una LAN singola.168.255.168. Il comando ` mostrato per havnor. e usa un gateway. voce nella cache. in tal caso la destinazione ` indicata dall’indirizzo nullo (che fa le veci della wildcard). installata da addrconf. che non possono accedere direttamente al tratto di rete delle precedenti. L’ultima riga indica invece quello che ` il default gateway.234 che dice ai pacchetti destinati alla rete 192.0 netmask 255. In questo caso infatti i pacchetti. e la rete ` divisa in diverse parti. Per le macchine sulla rete 192.255. e u e Simbolo U H G R D M A C ! Significato la rotta ` attiva.234.168. che.0. si dovr` ı a impostare una rotta statica con: [root@lorbaner root]# route add -net 192.168. devono attraversare havnor.1 che ovviamente deve essere dato da root.0 gw 192. Il problema si pone quando la e struttura della rete ` pi` complicata.168. cio` l’indirizzo cui e e devono essere inviati i pacchetti che non hanno una strada specificata altrimenti. modificata da un demone o una redirezione. che ` posto su una LAN diversa.276 CAPITOLO 7. Allo stesso modo perch´ oppish possa accedere ad hogen (e ad internet e attraverso il router roke) si dovr` impostare una rotta statica con: a [root@oppish root]# route add -net 192.168.255.168. 7. ma dovr` essere e e a ripetuto per tutte le macchine mostrate in fig.0. e In realt` se avete una sola interfaccia.160. cio` l’indirizzo della macchina (di solito un router) che si usa per uscire in e internet. fa da tramite fra i due tratti separati.255. infatti tutte le volte che tirate su una interfaccia la rotta per la rete a cui l’indirizzo ` associato viene inserita automaticamente. si deve specificare esplicitamente una rotta statica che indichi anche quest’ultima come gateway per quella rete. non c’` bisogno di a e chiamare esplicitamente route. cos` se lorbaner vuole accedere a gont.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).5. Tabella 7.0 c’` per` il problema che esse non possono vedere e o direttamente il router. installata dinamicamente da un demone o una redirezione. L’AMMINISTRAZIONE DI BASE DELLE RETI seconda colonna.0 netmask 255. e la destinazione ` un nodo. lo stesso vale per le macchine di quella e LAN. con le sue due interfacce di rete.0 gw 192. questo si fa ad esempio con il comando: [root@havnor root]# route add default gw 192.168. e non uscite dalla rete locale. .. specificare anche la relativa netmask con la direttiva netmask ed eventualmente l’interfaccia da utilizzare con la direttiva dev.d/rc.13.d/rc3.inet1 /etc/rc.3. quando si aggiunge una nuova rotta alla tabella di instradamento.4 La configurazione automatica.d/. /etc/rc. La configurazione della rete all’avvio viene fatta da degli opportuni script di inizializzazione. nel caso si sia indicata una rete. e deve essere seguito dall’indirizzo (di rete o di nodo) della destinazione (sia in forma numerica che simbolica).3.d/. le altre principali direttive utilizzabili sono riportate in tab. Distribuzione Debian Slackware RedHat Suse IP e routing /etc/init.inet2 /etc/rc. in tab.d/rc3.0 ` pi` specifica di default. 7. Gli script usano al loro interno i comandi visti in sez.d/network /etc/rc. LA CONFIGURAZIONE DI BASE 277 prima rotta che comprende nella sua destinazione l’indirizzo cui esso ` destinato..d/rc. In genere.5). per far partire o fermare la rete ` sufficiente lanciare uno di questi script e rispettivamente con il parametro start o stop..dyn.3. la cui locazione dipende dalla distribuzione. Di solito i casi pi` comuni che si presentano sono due: u . 7. Di solito la configurazione dei dati permanenti della rete viene effettuata una volta per tutte in fase di installazione. per impostare gli indirizzi IP sulle interfacce ed il default gateway (o eventuali rotte statiche).d/.. Cos` nella rete e ı di esempio un pacchetto destinato ad oppish verr` instradato (correttamente) su havnor e non a su roke. 7.168.reinstate dev Parametro Nm Gw – M M W I If Descrizione imposta la maschera per rete imposta l’indirizzo del gateway installa una rotta bloccata imposta il valore del campo Metric imposta la Maximum Segment Size del TCP per la rotta imposta la dimensione della advertizing window del TCP per la rotta imposta il Round Trip Time iniziale per la rotta flag diagnostici usati dai demoni di routing imposta l’interfaccia usata per raggiungere la destinazione Tabella 7.d/network Servizi /etc/rc2.14 si sono riportati quelli delle principali distribuzioni. 7.14: Gli script di inizializzazione della rete per varie distribuzioni. 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. In generale la direttiva add prende sempre due opzioni: -net per indicare una voce riferita ad una rete e -host per una stazione singola. Tabella 7.d/networking /etc/rc.13: Direttive del comando route..3. e e u Il comando route. /etc/rc. perch´ la rotta per la rete 192. per le distribuzioni che supportano i run level in stile System V (tutte tranne Slackware). in questo caso basta identificare univocamente la voce che si vuole cancellare perch´ il comando abbia effetto.d/init. dove una opportuna applicazione vi richieder` tutte le informazioni a necessarie che verranno memorizzate negli opportuni file di configurazione (vedi sez. Si deve inoltre. permette di impostare oltre alla destinazione e all’eventuale gateway anche una serie di altre caratteristiche. Le opzioni base (-net e -host) valgono anche per il comando del.7. 7. la differenza fra ` che e mentre con add devono essere specificate interamente le caratteristiche della rotta.2. e Direttiva netmask gw reject metric mss window irtt mod. 14.6. 7. 7. 18 . questo purtroppo ` un errore sciocco. la netmask. uno specchietto degli script usati ` riportato nella seconda colonna di tab. i siti su internet che hanno i numeri che voi avete assegnato alle vostre macchine interne non sarebbero pi` raggiungibili. e che non vengono mai usati per macchine pubbliche su Internet. qual’` il default gateway. e i numeri li dovete decidere da soli. Nel primo caso vi verranno chiesti i dati necessari alla connessione.18 Quasi tutte le distribuzioni hanno dei programmi per configurare la rete locale. che si collega ad internet attraverso un provider (connessione via modem analogico. 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. In particolare vi occorrer` il a numero IP da assegnare alla vostra macchina. in questo caso e l’amministratore di rete siete voi. che a e tratteremo in sez. Come accennato tutte le distribuzioni attivano la rete tramite gli opportuni script di avvio.15: Comandi di configurazione della rete. se non quella di usare DHCP. 7. dopo di che sar` il programma di connessione che si preoccuper` di eseguire le relative operazioni a a per attivare la connessione.5). ad esempio attraverso un modem. nel qual caso non dovrete fornire a nessuna informazione specifica. Nel secondo caso invece ` molto probabile che dobbiate eseguire voi l’impostazione dell’IP e chiedendo all’amministratore di fornirvi una serie di informazioni. che va interamente a vostro scapito. quali IP devono essere assegnati. e l’indirizzo del gateway (oltre alla informazione sul DNS da usare). ADSL). ISDN.6. e ecc. Tutti a a i programmi di configurazione prevedono questa possibilit`. Al pi` ci potr` essere da configurare a mano.1) a utilizzare opportunamente le informazioni che gli vengono fornite dal provider per eseguire le configurazioni opportune. • Un computer connesso in rete locale (con una scheda di rete). in genere attraverso una interfaccia a finestre e campi (che pu` essere grafica o testuale).7. 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. L’AMMINISTRAZIONE DI BASE DELLE RETI • Il computer di casa. vi consiglio caldamente di usare le varie classi riservate per le reti locali di tab. che la IANA ha destinato appositamente a questo uso. Distribuzione Debian RedHat Slackware Comando dpkg-reconfigure etherconf netcfg. u 19 nel caso di Debian non c’` un programma specifico. 7. ma si pu` usare il pacchetto etherconf. ed in genere si tratta di soltanto di specificare i valori richiesti. Se invece nella rete ` disponibile un server DHCP l’indirizzo e non dovr` essere specificato a mano. se con le vostre macchine non accedete mai ad internet potreste anche pensare di usare altri indirizzi.5 I file di configurazione delle interfacce statiche. 7. gli indirizzi dei DNS (torneremo su questo in sez. netconfig netconfig Tabella 7. che vi devono essere forniti dal provider (ad esempio nel caso del modem numero telefonico. 7.3.278 CAPITOLO 7. che usa il sistema e o standard di debconf per effettuare la riconfigurazione. u a per quei pochi provider che non forniscono l’informazione. Questo ` un passo necessario anche se volete creare la vostra rete interna. Una volta infatti che uno di questi computer e dovesse accedere ad internet.19 che permettono di impostare questi valori in maniera semplice.) ed eseguono poi i comandi necessari ad attivare le interfacce ed impostare le rotte statiche. 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). I comandi pi` comuni sono riportati in o u tab. username e password del vostro account.15. ma potr` impostato automaticamente grazie ad esso. la netmask e l’indirizzo del gateway. 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. essendo file di o testo basta usare un editor qualunque. prenderemo in esame due dei casi pi` comuni.234 netmask 255. 21 inet indica l’usuale TCP/IP. il cui formae to ` descritto in dettaglio dalla omonima pagina di manuale.7. ma se si specifica static si devono impostare i relativi parametri nelle righe seguenti. servono a impostare i parametri di ciascuna interfaccia.1 la prima riga. e inet6 per IPv6. dhcp static si richiedono i dati di configurazione ad un server DHCP.21 e le modalit` della a stessa. che verr` eseguito a rispettivamente dopo e prima dell’attivazione e prima e dopo la disattivazione. pre-up.0 gateway 194. farlo a mano pu` servire quando non avete la grafica a disposizione.255. LA CONFIGURAZIONE DI BASE 279 L’uso manuale dei singoli comandi per impostare la rete lo abbiamo gi` discusso nelle sezioni a precedenti. 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. Per ciascuna interfaccia deve essere fornita una riga in cui specificarne il nome. 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.3. Quando si usa la parola chiave iface le righe successive. che di solito si indentano. si assegnano i valori secondo i parametri specificati nelle righe seguenti. 20 . indentate per chiarezza. come nell’esempio. Possono inoltre essere specificati dei comandi da u chiamare contestualmente all’attivazione e alla disattivazione dell’interfaccia. nel caso in esempio si sono indicati l’indirizzo.127. dice quali sono le interfacce attivare automaticamente all’avvio del sistema. Infine ` possibile usare la parola chiave mapping per effettuare una mappatura fra e interfacce logiche e fisiche. che in altrettante righe distinte. specificano le ulteriori opzioni. per maggiore chiarezza. ma se si modifica la configurazione a mano. al successivo riavvio tutti i cambiamenti saranno perduti.177. Debian e RedHat (Mandrake usa gli u stessi file di RedHat). che possono essere specificate sia insieme. cos` come pu` essere diverso il loro ı o formato. Quest’ultimo deve essere specificato una volta sola. come nell’esempio. Anche questi file variano da distribuzione a distribuzione. nel caso compaiano pi` interfacce. introdotta dalla parola chiave auto. 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.255. ma sono possibili anche ipx per IPX. Le due righe seguenti.177. per i primi due non occorre altro. la famiglia di protocolli usata. post-down seguite dal comando. introdotte dalla parola chiave iface. down.127. usando le parole chiave up. queste sono sostanzialmente tre: loopback si usa per l’interfaccia di loopback. 255. Il comando si invoca passando come argomento l’IP della macchina bersaglio. cosa che pu` essere fatta utilizzando un qualunque client (il modo pi` comune o u ` lanciare un browser). di tipo echo reply che ping si incaricher` di ricevere. Nella nostra analogia telefonica questo equivale a telefonare e per sentire se d` il libero. e ce n’` uno per interfaccia con un nome del tipo ifcfg-iface. 7.0 GATEWAY=192. a Il comando ping permette di inviare un pacchetto ICMP (abbiamo accennato a questo protocollo in sez. si pu` usare o anche il nome. ı il cui contenuto sar`: a DEVICE=eth0 BOOTPROTO=dhcp IPADDR= NETMASK=255. Si noti che nel caso si ` scelto.0. il file viene letto dallo script di avvio che usa queste variabili di shell per effettuare la configurazione. cos` ad esempio avremo un file ifcfg-eth0 relativo alla prima interfaccia ethernet. 7. 22 .168.1) di tipo echo request. se invece si fosse voluto assegnare un IP fisso si sarebbe dovuto utilizzare il valore BOOTPROTO=static ed impostare il relativo numero IP definendo IPADRR. ma vengono configurate a parte dagli script di avvio della connessione. RedHat i file di configurazione delle interfacce sono dentro /etc/sysconfig/networking/devices. il protocollo prevede che la macchina che riceve un pacchetto di questo tipo debba rispondere con l’emissione di un altro pacchetto ICMP. o comunque per eseguire una serie di e controlli. 23 il nome e la terminologia derivano dall’analogia con gli impulsi usati dai sonar. ed IPADRR non viene definita.168.4.280 CAPITOLO 7.1 Il comando ping Una volta configurate le interfacce il primo controllo da effettuare per vedere se la rete funziona ` “pingare”23 un’altra macchina.0 USERCTL=no ONBOOT=yes Il contenuto di ciascun file ` sempre nella forma di assegnazione di un valore ad una e variabile22 il cui significato ` espresso in maniera evidente dal relativo nome per gran e parte di esse.4 I comandi diagnostici Una volta eseguita la configurazione di base il primo passo ` in genere controllare il funzionae mento del tutto.168. 7. dove iface ` il nome e e dell’interfaccia da configurare. sono comunque disponibili una serie di comandi ad uso diagnostico da utilizzare per stabilire il buon funzionamento della rete.0. In caso di malfunzionamento. usando BOOTPROTO=dhcp di assegnare e l’IP attraverso un server DHCP.255.0. mostrando anche il tempo intercorso fra l’invio e a la risposta.255 NETWORK=192. ma in tal caso oltre al collegamento verso la macchina bersaglio deve funzionare in effetti si tratta proprio di questo. L’AMMINISTRAZIONE DI BASE DELLE RETI Si tenga presente che in generale le interfacce temporanee relative all’uso di PPP non vengono mai menzionate in questo file.2.254 BROADCAST=192. ciascuno di questi contiene poi i relativi parametri. in quello che in gergo viene chiamato un hop.168. 7. Il comando sfrutta una caratteristica del protocollo IP che prevede nelle informazioni associate a ciascun pacchetto un campo chiamato TTL. Un esempio di uso del comando ` il seguente: e [piccardi@havnor corso]$ ping 192.192. Quando lo fermate (con C-c) vi stampa anche una statistica riassuntiva. e che. le principali. Solo root pu` usare ı o questa opzione che carica pesantemente la rete. insieme al loro significato. Se per` va tutto bene potete se non o altro concludere che la rete ` attiva e funzionante ed evitare di mettervi a controllare se avete e attaccato il cavo. incluso il fatto che la macchina che volete controllare pu` o essere spenta. o che qualche router nel mezzo non funziona. sono riportate in tab.20 ping statistics --3 packets transmitted.10 PING 192.7 ms Il comando invia un pacchetto al secondo.168. Il comando e e prende una serie di opzioni.7. da un errore di configurazione o ad aver usato un indirizzo sbagliato.6.168.168. e Questo ci dice che la macchina con IP 192. Invia i pacchetti alla velocit` con cui tornano indietro. si possono specificare fino a 16 byte con cui riempire il contenuto del pacchetto. 24 .10 ` attiva ed ` raggiungibile. come dice il nome.3 ms 64 bytes from 192. Tabella 7. 0% packet loss round-trip min/avg/max = 0.168.168. per le altre si pu` fare riferimento alla pagina di manuale.2 Il comando traceroute Un secondo comando che permette di controllare il funzionamento di un collegamento ` traceroute. 7. 3 packets received.24 perch´ se per qualche motivo non riusciste a risolvere il nome non otterreste e nulla anche se il resto della rete fosse a posto. cos` da visualizzare le perdite.168.168. a stampando un .20: icmp_seq=1 ttl=255 time=0. o Opzione -c count -f Significato Invia solo count pacchetti e poi esce stampando la statistica senza bisogno di interruzione esplicita.4.168. Aspetta wait secondi invece di uno fra l’invio di un pacchetto ed il successivo.168.20: icmp_seq=0 ttl=255 time=0. sopprime tutte le stampe eccetto le statistiche finali.16: Opzioni del comando ping.2). Si usa questa opzione per diagnosticare eventuali problemi di corruzione dei dati.16.168. e nel caso riceve sempre risposta riportando il tempo che ci ` voluto. I COMANDI DIAGNOSTICI 281 quello con il DNS.7 ms 64 bytes from 192.3/0. Invia pacchetti di dimensione size invece dei 56 byte di default.168.168. -i wait -n -p pattern -q -s size Si tenga presente che quello che si pu` effettuare con ping ` solo un controllo preliminare. Il valore pattern deve essere specificato come numero esadecimale.3 ms --. ma esso deve essere scritto in /etc/hosts (vedi a o sez. 7.20: icmp_seq=2 ttl=255 time=0.168. non effettua la risoluzioni di nomi e indirizzi. Quando il valore in realt` si pu` usare anche il nome pure in assenza di DNS. o e se non ricevete risposta il motivo pu` dipendere da molti fattori. serve a tracciare la strada che fanno i pacchetti per arrivare alla destinazione indicata. o 100 al secondo. che viene decrementato ogni volta che il pacchetto attraversa un router. per ogni pacchetto inviato ed un backspace per ogni pacchetto ricevuto.20): 56 data bytes 64 bytes from 192.168.4.168.20 (192.4/0. 817 ms 275.83. u mtr.225 (151.857 ms 222. Il comando traceroute prende come argomento l’indirizzo (numerico o simbolico) di cui si vuole tracciare la rotta.211.908 ms 9 sircore1-ext.587 ms 694.190 (80.17. ha senso solo quando ci sono pi` indirizzi sulla stessa macchina. L’AMMINISTRAZIONE DI BASE DELLE RETI si annulla il protocollo richiede25 che il router scarti il pacchetto ed invii un messaggio ICMP (di tipo time exceeded ) al mittente. al solito si sono riportate le principali in tab. 38 byte packets 1 10.956 ms 6 80. con spreco di banda.225) 209.880 ms 561. cos` da ricevere un ICMP time exceeded da ogni router attraversato per giungere a destinazione.139. usa l’indirizzo source come indirizzo sorgente dei pacchetti inviati.828 ms 464. La caratteristica di mtr ` inoltre quella di utilizzare vari tipi di protocolli per i pacchetti di e prova. insieme con una serie di statistiche relative al loro inoltro. 7.99.234.107) 293.26 visualizzando dove si fermano sulla strada verso la destinazione. ed opzionalmente una dimensioni dei pacchetti da usare.99.linux.66.17: Opzioni del comando traceroute.17. e Imposta il numero di secondi time da attendere per ricevere una risposta.99.828 ms 156.793 ms 190.859 ms 2 213.linux. per le restanti si faccia riferimento alla pagina di manuale. che permettono di impostare varie caratteristiche dei pacchetti inviati.211.16. Il comando traceroute invia una serie di pacchetti UDP con TTL crescente a partire da 1.177. u non effettua la risoluzioni di nomi e indirizzi.219 (151.842 ms 228.98.107).mix-it.86.282 CAPITOLO 7.it (62.interbusiness.227) 365.880 ms 296.194) 70.1. Tabella 7.977 ms Cos` se per un qualche motivo non riuscite a raggiungere il vostro indirizzo di destinazione ı potete verificare se questo ` dovuto al fatto che la strada che prendono i vostri pacchetti ` e e interrotta da qualche parte.177. Il comando supporta anche numerose opzioni.854 ms 125. 26 sempre che qualche amministratore di rete troppo zelante ed un po’ ignorante non si sia messo a filtrare anche i pacchetti di controllo usati dal protocollo. Imposta il valore del TTL del primo pacchetto.it (62.377 ms 64.29. che presenta anche una interfaccia grafica.194 (62.838 ms 191.162 (213.it (62.774 ms 310.1.54) 404.34. Un esempio del o funzionamento del comando ` il seguente: e piccardi@oppish:~/temp/video/riserva$ traceroute www. mentre traceroute usa pacchetti UDP.net (217.818 ms 363.162) 295.177.619 ms 62.838 ms 8 62.16.99.940 ms 7 r-ge10-vl2.190) 477.75.83.234.it (195. Invia i pacchetti con l’indirizzo dell’interfaccia iface.35) 417. utile per verificare la presenza di un routing asimmetrico.990 ms 5 151.1) 67.linux. e 25 questo viene fatto per evitare che i pacchetti persi nei routing loop continuino a circolare sulla rete.168 ms 217.17.006 ms 3 interbusiness-mix. cos` spesso mtr riesce a funzionare anche quando ı traceroute fallisce poich´ i pacchetti di prova vengono bloccati dai firewall.781 ms 120.opb. Opzione -l -f first -i iface -n -I -s source -m -w time Significato stampa anche il TTL dei pacchetti ricevuti come risposta. ı In questo modo si pu` avere tracciata tutta la strada fatta da un pacchetto. Del comando esiste una versione pi` moderna.139. unificando le funzionalit` dei due comandi traceroute e a ping.publinet.86.219) 157.it traceroute to picard. .906 ms 67.767 ms 10 picard.96.98. 30 hops max.0. che mostra dinamicamente lo stato della strada percorsa dai pacchetti.31.118 ms 217.54 (10.75.735 ms 271.789 ms 4 151.34. imposta il valore massimo del TTL usato (il default ` di 30 hop). invia pacchetti ICMP invece che UDP. firenze:imaps ESTABLISHED che mostra una connessione attiva verso un server di posta. che sono usati da vari programmi come meccanismo di intercomunicazione. in realt` a oltre a questi esistono anche tutti i socket per i quali non ci sono connessioni.4.27 mostra le informazioni relative alle interfacce di rete (equivalente all’uso di ifconfig senza argomenti). questi si possono vedere solo se si usa l’opzione -a. e Opzione -r -g -i -M -s Significato mostra le informazioni relative alle tabelle di intradamento (equivalente all’uso di route senza argomenti). per cui il risultato precedente diventa: [piccardi@gont piccardi]$ netstat -at Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address tcp 0 0 *:printer *:* tcp 0 0 *:5865 *:* tcp 0 0 *:webcache *:* tcp 0 0 *:tproxy *:* tcp 0 0 gont.2. Il comando prevede che la prima opzione indichi il tipo di informazione da mostrare. Quando viene usato con le opzioni di default il comando mostra le informazioni riguardo a tutti i socket aperti. anche a se lo scopo per cui viene usato per lo pi` ` quello di visualizzare tutte le connessioni attive sulla ue macchina (un po’ come potrebbe fare il quadro di un centralino che mostra tutti i collegamenti in corso). in questo modo il router potr` reinviarle i pacchetti di a multicast ricevuti per esso. I COMANDI DIAGNOSTICI 283 7. ma che sono in ascolto di connessione.7. mostra delle statistiche sommarie sull’uso dei vari protocolli di rete. mostra le informazioni relative alle connessioni mascherate dal firewall (funziona solo con i kernel della serie 2. Invocato in questa maniera il comando riporta solo i dati relativi ai socket attivi.:32798 serverone.18: Opzioni del comando netstat per il controllo del tipo di informazioni da visualizzare.earthsea. ` netstat. .3 Il comando netstat Un altro comando diagnostico molto utile che permette di visualizzare una grande quantit` di a informazioni relative alla rete. Un possibile esempio del risultato di netstat ` allora il seguente: e [piccardi@gont piccardi]$ netstat -t tcp 0 0 ppp-42-241-98-62. che non hanno nulla a che fare con la rete. ma se non se ne indica nessuna viene assunto il e comportamento di default che ` quello di mostrare la lista di tutti i socket aperti nel sistema.ea:domain *:* tcp 0 0 localhost:domain *:* tcp 0 0 *:ssh *:* tcp 0 0 *:ipp *:* tcp 0 0 *:nntp *:* tcp 0 0 *:smtp *:* tcp 0 0 ppp-42-241-98-62. l’elenco di quelle disponibili ` riportato in tab. mostra le informazioni relative ai gruppi di multicast di cui si fa parte.4. anche i socket locali. Il comando ` piuttosto complesso dato che permette di e e ottenere informazioni riguardo a tutte le funzionalit` del sistema concernenti la rete rete. che sono quelli che riguardano le connessioni con la rete esterna.x).18.firenze:imaps 27 State LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN ESTABLISHED per poter utilizzare una comunicazione in multicast una macchina deve registrarsi presso il router per segnalare appunto a quale gruppo di multicast intende aderire. 7.:32798 serverone. Per questo motivo ` d’uopo e specificare le opzioni -t per richiedere di visualizzare solo i socket TCP o -u per vedere quelli UDP. Tabella 7. o si deve inviare il pacchetto altrove passando attraverso un gateway.4.Y ” dove X. da un qualunque indirizzo o esterno.X.X a Y. queste hanno la tipica forma “devi dire chi ` e X. mostra i dati relativi sia ai socket attivi che a quelli in ascolto. Lo stato ESTABLISHED indica le connessioni stabilite ed attive.Y ` quello e e 28 una trattazione completa ` in [4]. nel caso ce ne sono vari corrispondenti a servizi come la posta.X. Il campo Proto riporta il protocollo della connessione. Opzione -t -u -n -c -e -l -a Significato mostra i dati relativi ai socket TCP. non esegue la risoluzione di indirizzi e porte. 7. Lo stato LISTEN indica la presenza di un programma in ascolto sulla vostra macchina in attesa di connessione. u In realt` il protocollo viene utilizzato tutte le volte che il kernel deve inviare un pacchetto a IP verso l’esterno su una rete di tipo ethernet (o con funzionalit` equivalenti. TIME_WAIT.19: Opzioni principali del comando netstat. 7. gli indirizzi sono di norma non specificati in quanto la connessione pu` essere effettuata su uno qualunque degli indirizzi locali.2. Il campo State indica lo stato della connessione.Y. o si deve comunicare con un indirizzo IP nella stessa a sottorete.6). cio` richieste che vengono e ricevute da tutte le schede su una stessa LAN. I campi Local Address e Foreign Address indicano gli indirizzi locale e remoto della stessa. u mostra i dati relativi ai socket in ascolto (di default non vengono mostrati). la stampa via rete. Il protocollo viene usato per mandare delle richieste in broadcast.Y. mostra i dati relativi ai socket UDP. e riporta nei campi degli indirizzi i due capi della connessione. come il token ring a o l’FDDI). ed Y. Il comando riporta una tabella con le indicazioni relative a ciascuna connessione. L’AMMINISTRAZIONE DI BASE DELLE RETI Infine usando l’opzione -n i risultati verranno stampati con tutti gli indirizzi ed i numeri delle porte espressi in forma numerica. stampa informazioni addizionali.1 il protocollo ARP viene usato (dal kernel) per associare ad un indirizzo fisico presente sulla rete locale (quello che per gran parte delle reti ` il cosiddetto MAC e address) al corrispondente indirizzo IP.4 Il protocollo ARP ed il comando arp Come accennato in sez.X. nel qual caso si invier` il pacchetto direttamente al destinatario tramite l’indirizzo a fisico della sua scheda di rete.18 sono a riportate in tab. Le possibilit` sono sempre due. 7. e richiede una trattazione approfondita a del protocollo TCP/IP.284 CAPITOLO 7. cosicch´ il kernel possa sapere a quale scheda (ethernet e nel caso pi` comune) mandare i pacchetti. che nel caso di socket su internet sono nella forma: indirizzo:porta dove un asterisco indica un indirizzo o una porta qualunque. una sintesi si pu` trovare nelle appendici di [1].X ` l’indirizzo IP che si vuole risolvere. senza che ne sia effettuata la risoluzione (vedi sez.19. Altri stati che possono essere riportati sono FIN_WAIT. 7. le news. Tabella 7. e si riferiscono a connessioni che si stanno chiudendo. ripete continuamente il comando ogni secondo. Una spiegazione dettagliata del significato dei vari campi va di nuovo al di l` delle a possibilit` di questo corso (specie per il campo State). 7. pu` essere ripetuto due volte per avere o ancora pi` informazioni.X. Le altre principali opzioni di controllo non rientranti in quelle gi` illustrate in tab.Y.28 Delle varie righe quelle che meritano attenzione sono quelle relative agli stati LISTEN ed ESTABLISHED.Y. nel qual caso dalla tabella di routing si avr` l’indirizzo IP di quest’ultimo che sar` a a usato per ricavare il MAC address della scheda cui inviare il pacchetto. e o . il DNS. 7.6. ı a Ovviamente questa ` una soluzione provvisoria.earthsea.20: Opzioni del comando arp. il contenuto e tipico di /etc/ethers sar` cio` qualcosa del tipo: a e 08:00:20:00:61:CA 129.X. non effettua la risoluzioni di nomi e indirizzi. che a cos` li ricever` anche senza aver impostato su tutte le macchine una opportuna rotta statica.earthsea. ad esempio possiamo cancellare la voce relativa ad oppish con il comando: arp -d oppish mentre si pu` inserire una voce in pi` con il comando: o u arp -s lorbaner 00:48:54:AA:9A:20 le altre opzioni principali sono riportate in tab. e rinnovate solo dopo che sono scadute. usata quando si divide in due una rete che prima era unica. o Il formato dei MAC address ` quello solito di sei byte esadecimali separati da ":". Opzione -a host -f file -n -s host val -d host Significato mostra le voci relative al nodo host. se non specificato mostra tutte le voci.1. Dato che il router non trasmette i pacchetti a livello di collegamento fisico si fa s` che alle richieste ARP per gli IP della nuova rete posti ı al di l` del router venga comunque risposto fornendo l’indirizzo della scheda del router. inserisce una voce nella cache. se chiamato e senza opzioni il comando mostra il contenuto della cache.168. Questo contiene delle corrispondenze nella forma: e MAC-address numero-IP anche se al posto del numero IP si pu` anche specificare un nome.ea havnor. posto che questo sia risolvibile. cos` che la macchina la cui ine ı terfaccia ha l’IP X. e introducendo un router a separarle i due rami. Ad esempio una tecnica o comune ` quella del proxy ARP.X. che come tutte le soluzioni provvisorie ha la e brutta abitudine di diventare spesso definitiva. In certi casi pu` essere utile esaminare e modificare la ARP cache.X pu` rispondere direttamente con un messaggio del tipo “X. 7. 7.X. Quest’ultimo viene automaticamente identificato dato che il suo MAC address ` riportato come indirizzo sorgente nel pacchetto di richiesta.X ` o e NN:NN:NN:NN:NN:NN ” trasmettendo il suo MAC address direttamente al richiedente. che nel caso ` /etc/ethers. cancella la voce relativa al nodo host. Come per la risoluzione dei nomi (vedi ad esempio sez. I COMANDI DIAGNOSTICI 285 del richiedente.245 .4. Per evitare di oberare la rete di richieste le corrispondenze trovate vengono mantenute per un certo tempo in quella che viene chiamata la ARP cache del kernel. ad esempio se eseguiamo il comando da gont avremo: [root@gont corso]# arp Address oppish. associando al nodo host l’indirizzo val.ea HWtype ether ether HWaddress 00:48:54:3A:9A:20 00:48:54:6A:4E:FB Flags Mask C C Iface eth0 eth0 Le due operazioni fondamentali sono la cancellazione (con l’opzione -d) e l’inserimento (con l’opzione -s) di una voce nella cache. legge i valori da immettere nella cache dal file file.6) ` possibile anche specificare un e certo numero di corrispondenze manualmente usando un opportuno file di configurazione.X.20. Il comando che permette di esaminare e modificare la ARP cache del kernel ` arp. Tabella 7. In questo modo una macchina pu` interrogare le sue vicine sulla stessa LAN e costruire un o elenco di corrispondenze. e per una spiegazione completa si pu` fare o ricorso alla pagina di manuale con man arp. . che corrisponde al servizio standard telnet. 8. Trying 127.1. non specificando nessuna porta il comando si collega sulla porta 23. a e e Se invece tentiamo di collegarci ad un servizio su cui non ` attivo nessun server otterremo e qualcosa del tipo: piccardi@oppish:~$ telnet localhost 80 Trying 127.5 I client dei servizi di base Una volta che se ne sia completata la configurazione e verificato il funzionamento. 220 oppish. la presenza della riga Connected indicher` che la connessione ` riuscita ed ` attiva.286 CAPITOLO 7.ea ESMTP Postfix (Debian/GNU) in questo caso lo si ` usato per connettersi alla porta 25 della propria macchina.0. Il comando supporta varie opzioni..1. qui ci limiteremo a descrivere il funzionamento dei programmi client usati per usufruire del servizio. L’AMMINISTRAZIONE DI BASE DELLE RETI 7..0. e In ogni caso il comando telnet continua ad esistere. mostrando (qualora si attivo il relativo server) una schermata di login. a Il comando prende come argomento la macchina cui collegarsi ed opzionalmente la porta (specificata per numero o per nome del servizio).0. Connected to localhost. 7. ed oggi ` essenzialmente sostituito dal comando ssh che vedremo in sez.5. In generale i servizi di base sono forniti tutti secondo un’architettura client-server.1 Il comando telnet Uno dei servizi di base un tempo pi` utilizzato sulla rete ` quello del telnet. dato che questo uso ` assolutamente sconsigliabile non le riportiamo neanche. Escape character is ’^]’. per u oe verificare la funzionalit` dei servizi. e u Il protocollo permette di prelevare od immettere file su un server FTP. Dato che tutti i dati vengono trasmessi in chiaro sulla rete.earthsea. per verificare che e il relativo servizio SMTP (cio` il server per la ricezione e la trasmissione della porta) sia attivo: e si noti che si ` poi anche ottenuta la risposta del server che nal caso in questione ` Postfix ).0. Un suo uso pi` interessante per` ` quello diagnostico.5.. affronteremo pi` avanti la configurazione u dei server (la maggior parte dei server corrispondenti ai client qui descritti viene fornita attraverso uno dei superdemoni descritti in sez. telnet: Unable to connect to remote host: Connection refused 7. Di norma si u usa il comando indicando semplicemente un indirizzo ed una porta.2. previa autenticazione . e pu` essere usato su una rete locale o sicura o quando non esiste una versione di SSH per la macchina in questione (ad esempio se si ha a che fare con un vecchio VAX). 8. Anche se non si riceve nessuna risposta (ad esempio perch´ il servizio e interrogato necessita di una richiesta prima di rispondere).. nato per eseguire delle u e connessioni con cui poter operare via rete su un terminale su una macchina remota. e i pi` curiosi possono consultare la pagina di manuale accessibile con man telnet.2 Il comando ftp Il protocollo FTP ` uno dei pi` vecchi protocolli che consentono lo scambio di file su internet. con qualcosa del tipo di: piccardi@oppish:~$ telnet localhost 25 Trying ::1.. per lo pi` relative alle modalit` di gestione della sessione di u a terminale remota. questo uso ` assolutamente e da evitare. e e Con la stessa sintassi si pu` usare il comando per verificare la presenza e l’attivit` dei servizi o a sulle relative porte. password comprese. l’utilizzo della rete avviene attraverso l’uso dei servizi che su di essa vengono forniti.3.1). Nel caso ci viene notificato l’hostname effettivo del server e ci viene richiesto un nome di login che di default corrisponde al nostro username. ma il comando originale usato per lanciare il client testuale ` ftp. unica eccezione ` la modalit` e a anonima in cui non c’` autenticazione che ` tutt’oggi una delle modalit` pi` efficaci per distribuire e e a u pubblicamente file. e capacit` aggiuntive.it. Qualora si necessiti di un meccanismo per lo scambio di file via rete fra i vari utenti sono disponibili alternative come l’uso di scp o sftp29 che tratteremo in sez. Using binary mode to transfer files. Un esempio di uso generico del comando `: e e piccardi@oppish:~$ ftp ftp. ed anche la stessa risposta. 220 (vsFTPd 1. Si tenga inoltre presente che non tutti i comandi possono essere supportati dal server.linux. 8. ` meglio non e usarlo in quanto l’autenticazione verrebbe eseguita in chiaro. Oggi esistono molti client per il protocollo FTP. come telnet.it Connected to vlad-tepes.7. La lista completa ` al u e solito disponibile nella pagina di manuale. i pi` importanti di questi si sono riportati in tab. e di norma consente solo il prelievo dei file).21: Comandi del protocollo FTP. 30 questa ` la risposta data dal comando ftp che si trova su Debian Woody. non prevede alcuna cifratura dei dati. a Fatto questo ci si ritrova con un prompt ftp> dal quale sar` possibile inviare i vari comandi a del protocollo.30 e vanno verificate facendo riferimento alla relativa pagina di manuale.3. a 29 . il completamento dei nomi. e Si noti come nell’uso generico sia sufficiente indicare la macchina cui ci si vuole collegare.5. Remote system type is UNIX.21. dipendono in genere dalla versione del comando che si ` installata. I CLIENT DEI SERVIZI DI BASE 287 analoga a quella del login o dell’accesso con telnet. alternative possono essere client pi` evoluti come lftp o ncftp che supportano la history dei u comandi. Una sua forma particolare ` il cosiddetto e FTP anonimo in cui il servizio viene utilizzato per distribuire i file posti in un server (in questo caso il servizio non richiede autenticazione. Comando ls cd lcd pwd ascii binary pasv get file put file mget files* mput files* open host quit Significato stampa la lista dei file (sul server) cambia directory (sul server) cambia directory (sul client) stampa la directory corrente (sul server) modalit` di trasferimento di file ascii a modalit` di trasferimento di file binari a abilita i trasferimenti in modo passivo scarica il file file dal server invia il file file sul server scarica i file che corrispondono alla wildcard files* invia i file che corrispondono alla wildcard files* apre una connessione verso il server host chiude la sessione Tabella 7. Avendo contattato un FTP anonimo l’utente da usare ` anonymous specificato il quale ci viene richiesta una password. sia grafici che testuali. Password: 230 Login successful. derivato dall’originale programma e nato con BSD. ftp> eventuali opzioni. Ad sftp ` un programma che ha esattamente la stessa sintassi di ftp. che nel caso ` ininfluente e e (qualunque cosa si scriva ci sar` garantito l’accesso).it:piccardi): anonymous 331 Please specify the password.linux.1. Have fun. Dato che il protocollo. 7. ma consente l’uso di una connessione e cifrata attraverso il protocollo SSH.3) Name (ftp.bofh. dove agiva solo sulla macchina locale. mentre i comandi ascii e binary non hanno nessun significato a su sistemi unix-like. L’AMMINISTRAZIONE DI BASE DELLE RETI esempio il comando pasv. No Plan. e come si vede il programma mostra una serie di informazioni riguardo l’utente franci. In questo modo si poteva consentire agli altri utenti di sapere chi era collegato alla macchina. oggi si tende sempre di pi` a non attivare questo servizio u sulla rete. ` il seguente: e [piccardi@gont piccardi]$ finger franci Login: franci Name: Francesco Piccardi Directory: /home/franci Shell: /bin/bash Home Phone: 0XX-XX000XX Last login Tue Jun 17 21:22 (CEST) on :0 No mail. In genere lo si utilizza quando si cercano informazioni sulla registrazione dei domini. o Dato che il comando fornisce delle informazioni che potrebbero essere utili per attivit` non a troppo benevole o per violare la privacy degli utenti (ad esempio l’uso dell’indirizzo di posta elettronica per inviare dello spam). Questo servizio viene utilizzato per mantenere un database dei titolari dei domini su internet.288 CAPITOLO 7. Un possibile esempio di uso del comando. per i dettagli si pu` fare riferimento alla pagina di manuale. non legate o alla presenza di specifici utenti sulla macchina. Talvolta per` esso viene utilizzato per pubblicare delle informazioni. questi pu` aggiungervi ulteriori informazioni creando un file . 7.5. e per il contatto dei relativi proprietari. la connessione avviene sempre da parte del client sulla porta 21 del server. il modo passivo fa s` che sia sempre il client a creare la nuova connessione anche ı per i dati.4 Il comando whois Il comando whois viene usato per contattare il servizio whois.31 ` eseguibile solo se il server supporta e questa modalit` di operazione. Il comando prende come argomento un nome utente che viene confrontato sia con lo username che con il nome reale dello stesso memorizzato su /etc/passwd.5.pgpkey nella home directory degli stessi). Dato che normalmente i firewall bloccano le connessioni entranti. 31 . Ad esempio avremo che: il protocollo FTP prevede l’uso di due porte. fatto in locale.plan nella sua home directory.3 Il comando finger Il comando finger viene usato fin dalle origini di Unix. per riportare informazioni relative agli utenti di un sistema. ma possono averlo per altri sistemi come il VMS o il DOS. che abilita il modo passivo. 7. quando si richiede l’invio di file questo viene effettuato dal server con una seconda connessione che contatta il client sulla porta 20. Il servizio ` stato trasferito sulla rete. come eventuali recapiti e contatti. ma su di essa vengono solo inviati i comandi. Se invocato senza argomenti mostra l’elenco o degli utenti collegati e relativo terminale come: [piccardi@gont corso]$ finger Login Name Tty piccardi Simone Piccardi *:0 Idle Login Time Office Jul 21 21:55 Office Phone altre due opzioni utili sono -s che mostra una lista semplice come questa e -l che mostra una lista lunga come la precedente. e ed il client funziona sia in locale che in remoto (nel qual caso si eseguir` una richiesta con un a parametro del tipo nome@host. oppure per distribuire le chiavi GPG degli utenti (usando un file . che verr` o a mostrato all’esecuzione del comando. qualora si voglia eliminare quest’ultimo confronto si pu` usare l’opzione -m. 7.6. LA RISOLUZIONE DEI NOMI 289 [piccardi@gont piccardi]$ whois truelite.it domain: truelite.it x400-domain: c=it; admd=0; prmd=truelite; org: Simone Piccardi descr: Via Xyxyxyx, 8 descr: 50100 Firenze (FI) admin-c: SP1700-ITNIC tech-c: SP1700-ITNIC tech-c: TS7016-ITNIC postmaster: SP1700-ITNIC zone-c: TS7016-ITNIC nserver: 195.110.99.23 ns1.register.it nserver: 213.246.4.72 ns2.register.it mnt-by: REGISTER-MNT created: 20020819 expire: 20030819 changed: [email protected] 20020815 source: IT-NIC person: address: address: address: address: phone: e-mail: nic-hdl: changed: source: person: address: address: phone: fax-no: e-mail: nic-hdl: notify: mnt-by: changed: changed: source: Simone Piccardi Simone Piccardi Via Xyxyxyx, 8 50100 Firenze (FI) IT +39 055 NN000NN [email protected] SP1700-ITNIC [email protected] 20020819 IT-NIC Technical Services Register.it Italy +39 035 3230400 +39 035 3230312 [email protected] TS7016-ITNIC [email protected] REGISTER-MNT [email protected] 20011016 [email protected] 20030423 IT-NIC e come si pu` notare si ottengono tutta una serie di informazioni relative alla gestione (e al o relativo titolare) di un nome a dominio. 7.6 La risoluzione dei nomi Tratteremo in questa sezione la configurazione del servizio di risoluzione dei nomi, che permette di identificare una macchina invece che per il numero IP attraverso un nome simbolico. Vedremo come questa funzionalit` sia provvista direttamente dalle librerie del sistema e quali sono i relativi a file di configurazione. 7.6.1 Introduzione Finora abbiamo parlato della configurazione di base della rete, che riguarda principalmente l’assegnazione degli indirizzi e delle rotte per lo smistamento dei pacchetti, cio` il livello pi` e u basso del protocollo TCP/IP, che in genere viene gestito direttamente dal kernel. 290 CAPITOLO 7. L’AMMINISTRAZIONE DI BASE DELLE RETI Quando per` vi collegate ad internet ` piuttosto raro che dobbiate usare un numero IP, per o e questo uno dei servizi di base per il funzionamento di internet ` quello della risoluzione dei nomi e con il quale potete identificare un sito o una macchina sulla rete attraverso un nome che poi sar` a risolto nel relativo numero IP. Su internet il servizio di risoluzione dei nomi ` realizzato principalmente attraverso il coside detto Domain Name Service, o DNS, che tratteremo in cap. 9. Il servizio DNS ` in sostanza un e enorme database distribuito che associa ad un nome letterale (quello dei nomi di dominio, che identifica i siti internet) ad un indirizzo IP, e che pu` essere interrogato da tutti i programmi o che necessitano di questa risoluzione. In generale ogni singolo programma viene poi a costituire, tutte le volte che vuole accedere ad un nodo attraverso il suo nome invece che con il numero, un client per questo servizio. Dato l’interesse generale per una grande quantit` di programmi diversi (ad esempio tutti a i client di servizi di rete), all’interno di un sistema unix-like il servizio di risoluzione dei nomi viene effettuato da una serie di funzioni, fornite dalle librerie standard del C, che vanno a costituire quell’insieme di funzionalit` che viene chiamato “resolver ” e che permette di ottenere a delle associazioni fra nodi della rete e identificativi associati agli stessi. Per questo prima di trattare del DNS in quanto servizio fornito sulla rete, prenderemo in considerazione i file di configurazione usati dalle routine del resolver, che sono quelle che svolgono in maniera generica il servizio di risoluzione dei nomi, e che non necessariamente eseguono questo compito rivolgendosi ad un server DNS. Se restiamo nella nostra analogia telefonica, il sistema del resolver ` in sostanza il meccanismo e che ci porta dal sapere il nome del destinatario all’avere il numero del telefono. Come per il telefono questo pu` avvenire in pi` modi, si pu` andare a cercare sulla rubrica, che nel caso ` o u o e realizzata dal file /etc/hosts, si pu` cercare nell’elenco del telefono, oppure ci si pu` rivolgere o o ad un server DNS, che ` pi` simile al servizio “12”. L’uso del DNS ha anche il vantaggio (come il e u servizio 12 rispetto ad una rubrica) che qualora una associazione fra nome e numero IP dovesse cambiare questa viene aggiornata automaticamente. Per questo motivo quando configurate la rete con i programmi di interfaccia creati dalle varie distribuzioni, una delle informazioni che di norma vi vengono richieste ` l’indirizzo IP (numerico e ovviamente) di un server DNS (ogni provider ne mette a disposizione almeno una) da contattare per la risoluzione dei nomi quando navigate su internet. 7.6.2 I file /etc/hosts e /etc/hostname Normalmente, a meno di una diversa impostazione nei vari file di configurazione che esamineremo pi` avanti, il primo file utilizzato dal resolver per effettuare una corrispondenza fra numeri IP u e nomi simbolici ` /etc/hosts. Questo file contiene un elenco di nomi di macchine, associati al e relativo numero IP. Lo si usa quindi come un’agenda del telefono per specificare gli indirizzi delle macchine per le quali si ha una mappa statica degli indirizzi (ad esempio le macchine di una rete privata che non vanno su internet, ma che volete risolvere col nome che gli avete assegnato). Il formato del file ` molto semplice, le righe vuote od inizianti per una # sono ignorate, le e altre righe devono contenere, separati da spazi o caratteri di tabulazione, il numero di IP, il nome completo (in termini di dominio, quello che viene detto FQDN, Fully Qualified Domain Name) ed un nome breve. Un possibile esempio di questo file ` il seguente: e # private nets 192.168.168.10 192.168.168.11 gont.gnulinux.it oppish.gnulinux.it gont oppish che associa agli IP delle macchine che in fig. 7.5 sono sulla rete secondaria di havnor i relativi nomi. Ovviamente usare questo file ` la maniera pi` semplice per identificare una macchina su una e u rete locale, lo svantaggio ` che in una rete questo file dovrebbe essere presente su ogni macchina, e 7.6. LA RISOLUZIONE DEI NOMI 291 e quando il numero di nodi coinvolti aumenta, diventa sempre pi` complicato il lavoro di tenerli u tutti aggiornati e coerenti fra loro. Per questo vedremo in sez. 9.2.4 come fare lo stesso lavoro attraverso il DNS. Bench´ il file faccia riferimento ad delle caratteristiche tipiche dell’uso della rete, esso deve e comunque essere presente anche quando la macchina non ` in rete, in quanto esiste comunque e l’interfaccia locale, e molti programmi fanno riferimento a questo file per la risoluzione del nome di quest’ultima. Un caso particolare di gestione dei nomi ` quello che riguarda il nome che contraddistingue la e macchina stessa, comunemente detto hostname, che ` quello che viene stampato da vari comandi e non soltanto relativi alla rete (come uname, il prompt della shell o le schermate di avvio). Bench´ e questo abbia di solito pi` significato quando si ` collegati in rete, il nome di una macchina ` u e e una propriet` del tutto indipendente dalla presenza in rete della stessa, e viene perci` impostato a o attraverso l’uso del comando hostname. Di norma buona parte delle distribuzioni chiedono il nome in fase di installazione e lo memorizzano nell’omonimo file /etc/hostname (in alcune viene invece usato /etc/HOSTNAME) che viene usato negli script di avvio per leggere il nome della macchina quando questo viene impostato con il comando hostname. Perci` si deve essere consapevoli che cambiare il contenuto di o questo file non cambia il nome della macchina fintanto che non si chiama direttamente anche hostname o si rieseguono gli script di avvio. 7.6.3 Gli altri file per i nomi di rete Oltre alle associazioni fra numeri IP e nome simbolico di una macchina, esistono una serie di altre informazioni relative ad una rete, di norma identificate nei protocolli da valori numerici, ai quali per` viene assegnato un corrispondente nome simbolico come facilitazione mnemonica. o Come accennato in sez. 7.2.4 le corrispondenze fra servizi, identificati da nomi simbolici, e numeri delle porte loro assegnate viene mantenuta nel file /etc/services. Di norma questo non ` un file che sia necessario modificare, ma ` utile per avere un riferimento. Il formato del e e file ` molto semplice, un elenco di numeri a ciascuno dei quali ` associato un nome simbolico che e e individua il servizio ad esso associato dalle convenzioni internazionali. Un estratto del file `: e ... ftp-data 20/tcp ftp 21/tcp fsp 21/udp ssh 22/tcp ssh 22/udp telnet 23/tcp # 24 - private smtp 25/tcp # 26 - unassigned time 37/tcp time 37/udp whois 43/tcp re-mail-ck 50/tcp re-mail-ck 50/udp domain 53/tcp domain 53/udp mtp 57/tcp bootps 67/tcp bootps 67/udp bootpc 68/tcp bootpc 68/udp tftp 69/udp gopher 70/tcp gopher 70/udp fspd # SSH Remote Login Protocol # SSH Remote Login Protocol mail timserver timserver nicname # Remote Mail Checking Protocol # Remote Mail Checking Protocol # name-domain server # deprecated # BOOTP server # BOOTP client nameserver nameserver # Internet Gopher 292 rje finger www www ... 77/tcp 79/tcp 80/tcp 80/udp CAPITOLO 7. L’AMMINISTRAZIONE DI BASE DELLE RETI netrjs http # WorldWideWeb HTTP # HyperText Transfer Protocol Come per buona parte dei file di configurazione, righe vuote e tutto quello che segue un # viene considerato un commento e ignorato; ogni riga ha il formato: nome numero/protocollo alias dove nome ´ l’identificativo simbolico del servizio, numero ` il numero di porta ad esso assegnato, e e protocollo indica se si tratta di UDP o TCP, mente alias ` la lista di eventuali altri nomi e ` associati allo stesso servizio. E in questo file che i vari programmi attinenti alla rete, quando devono identificare un determinato servizio attraverso un numero di porta possono utilizzare il relativo nome simbolico al posto del valore numerico. Un altro file che mantiene corrispondenze fra numeri e nomi ` /etc/networks, che ` l’analogo e e di /etc/hosts per quanto riguarda le reti. Anche queste, come le singole stazioni, possono essere identificate da un nome, e di nuovo le corrispondenze statiche fra nome e indirizzo IP della rete vengono mantenute in questo file, il cui formato ` analogo a quello di /etc/hosts. e Il formato del file, come descritto dalla pagina di manuale accessibile con man networks, ` e composto da tre campi separati da spazi; il primo campo indica il nome simbolico della rete, il secondo il suo indirizzo, nella notazione dotted decimal (tralasciando opzionalmente gli eventuali .0 finali), il terzo un eventuale alias (questo campo ` opzionale). Al solito le righe vuote e tutto e quello che segue un # viene ignorato. Un esempio del contenuto di questo file potrebbe essere: localnet 192.168.1.0 questo file viene utilizzato da comandi come netstat o route per mostrare i nomi simbolici al posto dei valori numerici; si tenga conto per` che con questo file viene supportata solo la o corrispondenza con reti espresse nella notazione tradizionale per classi di tipo A, B o C, e che l’indirizzamento CIDR non funziona. Oltre ai nomi delle reti, i vari comandi di sistema possono avere altre necessit` di usare nomi a simbolici al posto dei valori numerici; un esempio di questo ` nella corrispondenza fra numeri e di porta e servizi illustrata in sez. 7.2.4, che viene mantenuta in /etc/services. Un altro file usato per questo tipo di corrispondenze ` /etc/protocols, che associa al numero usato a livello e di IP per identificare il protocollo di trasporto usato nello strato successivo (si ricordi quanto detto in sez. 7.1.3) ad un identificativo. Il formato di questo file ` identico a quello di /etc/networks: sono supportati tre campi e divisi da spazi, in cui il primo identifica il nome simbolico, il secondo il valore numerico che identifica il protocollo ed il terzo un alias. Un esempio di questo file ` il seguente (l’estratto ` e e preso da una Debian): ip icmp igmp ggp ipencap st tcp egp pup udp hmp xns-idp rdp 0 1 2 3 4 5 6 8 12 17 20 22 27 IP ICMP IGMP GGP IP-ENCAP ST TCP EGP PUP UDP HMP XNS-IDP RDP # # # # # # # # # # # # # internet protocol, pseudo protocol number internet control message protocol Internet Group Management gateway-gateway protocol IP encapsulated in IP (officially ‘‘IP’’) ST datagram mode transmission control protocol exterior gateway protocol PARC universal packet protocol user datagram protocol host monitoring protocol Xerox NS IDP "reliable datagram" protocol 7.6. LA RISOLUZIONE DEI NOMI iso-tp4 29 xtp 36 ddp 37 idpr-cmtp 38 ipv6 41 ipv6-route 43 ipv6-frag 44 idrp 45 rsvp 46 gre 47 esp 50 ah 51 skip 57 ... ISO-TP4 XTP DDP IDPR-CMTP IPv6 IPv6-Route IPv6-Frag IDRP RSVP GRE IPSEC-ESP IPSEC-AH SKIP # # # # # # # # # # # # # ISO Transport Protocol class 4 Xpress Transfer Protocol Datagram Delivery Protocol IDPR Control Message Transport Internet Protocol, version 6 Routing Header for IPv6 Fragment Header for IPv6 Inter-Domain Routing Protocol Reservation Protocol General Routing Encapsulation Encap Security Payload Authentication Header SKIP 293 Al solito le righe vuote e tutto quello che segue un # viene ignorato; la descrizione completa del file ` riportata nella pagina di manuale accessibile con man protocols. e Un’altra informazione usata da parecchi programmi che hanno a che fare con la rete e non solo ` il nome della macchina su cui ci si trova. Questa ` in genere una informazione indipendente dal e e fatto di essere in rete, e viene gestita attraverso il comando hostname che serve sia per impostare che per mostrare il nome della stazione su cui ci si trova. In generale la gran parte delle distribuzioni usano un file che ` /etc/hostname o /etc/HOSTNAME e nel quale scrivere il nome della macchina; questo poi viene usato per impostare l’hostname (in genere negli script di avvio). Di solito si usa lo stesso comando hostname che con l’opzione -F permette di impostare il nome della macchina leggendolo da un file. Anche in questo caso le righe vuote e tutto quello che segue un # viene ignorato. Un secondo comando relativo all’hostname ` dnsdomainname che invece permette di ottenere e il nome di dominio in cui si trova la macchina. In questo caso per` non ` possibile usare questo o e comando per modificarne il valore, in quanto questo viene determinato dal resolver sulla base della configurazione di quest’ultimo. 7.6.4 Il file /etc/nsswitch.conf In generale oltre alla risoluzione dei nomi associati alle singole stazioni esiste la necessit` di poter a effettuare altra associazioni, come quelle fra numero di porta e nome del servizio, fra user-id e nome di login dell’utente, ecc. Siccome questo tipo di corrispondenze possono essere mantenute in diversi modi, con dei file come /etc/hosts o /etc/protocols, ma anche su database, con LDAP, o su un server DNS, le librerie del C GNU prevedono una modularizzazione di questi servizi attraverso il cosiddetto Name Service Switch. Questo ` un insieme di librerie dinamiche che permettono di mantenere le varie corrispone denze fra nomi e numeri in maniera generica su vari tipi di supporti. Il loro comportamento ` e regolato dal file /etc/nsswitch.conf che serve, per ciascuno dei servizi gestiti dal Name Service Switch, a indicare su quale supporto si trovano, ed in quale ordine cercarle, le informazioni di corrispondenza. Per il file valgono le solite convenzioni per cui quello che segue un # e le righe vuote vengono ignorate. Il formato richiede un nome di servizio seguito da due punti, ed una lista di possibili supporti nell’ordine in cui verranno esaminati. Un estratto del file ` il seguente: e ... hosts: networks: protocols: services: ethers: rpc: files dns files db files db files db files db files 294 CAPITOLO 7. L’AMMINISTRAZIONE DI BASE DELLE RETI netgroup: nis ed ad esempio nel caso di risoluzione dei nomi la riga che interessa ` quella relativa a hosts che ci e dice che prima si dovr` andare a risolvere i nomi usando i file locali standard (cio` /etc/hosts) a e e poi il DNS. Se si volessero mettere le corrispondenze fra macchine locali e nomi su un server LDAP si potrebbe modificare questa linea come: hosts: files ldap dns nel qual caso prima di interrogare il DNS si effettuerebbe una ricerca su LDAP. 7.6.5 Il file /etc/resolv.conf ` E nel file /etc/resolv.conf che vengono memorizzate le informazioni principali relative alla risoluzione dei nomi, come il dominio locale e l’IP del nameserver che vengono di solito indicati in fase di installazione o configurazione iniziale della rete. In sostanza ` in questo file che dovete e dire qual’` il numero di telefono del servizio “12” a cui vi rivolgete; di solito ogni provider ha il e suo, e voi potete creare anche il vostro DNS locale. Anche questo file controlla il comportamento delle funzioni del cosiddetto resolver, di norma contiene il nome del dominio e la lista degli IP dei nameserver; il formato ` molto semplice, una e serie di righe nella forma direttiva valore con le righe vuote e quelle che iniziano per # che vengono ignorate. Un possibile esempio ` il seguente: e nameserver 127.0.0.1 search firenze.linux.it nameserver 195.110.99.218 La direttiva nameserver serve ad indicare la specificazione del numero IP di un nameserver, la risoluzione di un nome verr` eseguita nell’ordine in cui esse sono state specificate. Normalmente a si possono specificare fino ad un massimo di 3 diversi nameserver, l’indirizzo deve sempre essere fornito in forma numerica. La direttiva search specifica una lista di domini in cui cercare i nomi; di norma contiene solo il dominio locale, cos` quando si specifica un nome gli viene aggiunto automaticamente quel ı dominio. In questo modo si pu` specificare solo l’hostname del computer, e la ricerca assumer` o a che esso si trovi nella lista dei domini qui elencati. Un elenco delle opzioni principali ` riportato in tab. 7.22; la descrizione pi` dettagliata di e u tutte le opzioni si pu` trovare nella pagina di manuale ottenibile con man resolv.conf. o Direttiva nameserver search domain Significato definisce l’IP di un server DNS da utilizzare per la successiva risoluzione dei nomi lista dei domini su cui effettuare una ricerca preventiva nome del dominio locale, se assente viene determinato sulla base di quanto specificato con /etc/hostname Tabella 7.22: Direttive del file di con resolv.conf. Se siete su una rete locale dovete impostare questi valori manualmente (in genere questo viene fatto dal programma di configurazione della rete, che, quando vi chiede dominio e DNS, va a creare automaticamente questo file). Se invece usate un collegamento punto-punto con un modem o una ADSL sono i programmi che lanciano la connessione (cio` pppd o l’eventuale e interfaccia a quest’ultimo) che usano le informazioni ottenute dal provider durante la fase di negoziazione del collegamento, e riscrivono al volo questo file; in questo caso vi pu` servire di o aggiungerci al volo qualche altro DNS (ce ne sono di pubblici) qualora quello del vostro provider avesse problemi. 7.7. IL PROTOCOLLO PPP 295 7.6.6 Il file /etc/host.conf Il file /etc/host.conf controlla le modalit` di funzionamento delle routine che eseguono la a risoluzione dei nomi (il resolver ). Al solito le righe vuote od inizianti per # sono ignorate, le altre devono contenere una parola chiave che esprime una direttiva seguita o meno da un valore. Un esempio comune del contenuto di questo file ` il seguente: e order hosts,bind multi on la prima direttiva controlla la sequenza in cui viene effettuata la risoluzione dei nomi, e dice che deve prima essere usato il file hosts di sez. 7.6.2, e poi le interrogazioni ai DNS esterni. La seconda permette di avere indietro tutti gli indirizzi validi di una stazione che compare pi` volte u in hosts, invece di avere solo il primo. Direttiva nospoof spoofalert reorder Significato attiva il controllo antispoofing, chiedendo la risoluzione inversa dell’IP ricevuto e fallendo in caso di mancata corrispondenza. se nospoof ` attivo inserisce un avviso degli errori rilevati nei log di e sistema. riordina gli indirizzi in modo da restituire per primi quelli locali. Tabella 7.23: Direttive del file di con host.conf. Oltre a queste due le principali direttive ed il relativo significato ` riportato in tab. 7.23, e tutte le direttive ivi riportate prendono come argomenti on ed off che attivano e disattivano il comportamento richiesto, se non esplicitamente richiesto inoltre il comportamento di default ` equivalente ad off. Per i dettagli completi si pu` consultare la pagina di manuale con man e o host.conf. 7.7 Il protocollo PPP Come accennato in sez. 7.2.1 il PPP ` uno dei protocolli del livello di rete su cui si innestano tutti e i protocolli dei livelli successivi. Nel caso specifico PPP ` un protocollo generico che permette e di inviare dati su diversi collegamenti seriali punto-punto. Il protocollo si compone di tre parti, un metodo generico per incapsulare dati su collegamenti seriali, un protocollo estensibile per il controllo del collegamento (Link Control Protocol o LCP) ed una famiglia di protocolli (Network Control Protocols o NCP) per stabilire e configurare le connessioni coi protocolli di livello superiore. In generale esso fa riferimento ad un qualche meccanismo sottostante di trasmissione (che sia un modem analogico, ISDN o ADSL) sopra il quale costruisce uno strato ulteriore che gli permette di incapsulare gli altri protocolli. L’uso pi` tipico ` comunque quello con i modem u e analogici. 7.7.1 Il demone pppd Delle tre parti cui ` composto il protocollo PPP, la incapsulazione ` gestita dal kernel, il resto e e ` affidato ad un demone apposito, il pppd, che si cura di fornire il controllo del collegamento, e l’autenticazione, e l’NCP che riguarda la configurazione e la gestione del protocollo IP su PPP. La sintassi generica con cui si pu` chiamare il programma, come riportata dalla pagina di o manuale, ` la seguente: e pppd [ ttyname ] [ speed ] [ options ] ttyS0). dal file /etc/ppp/options. che vengono passati allo script /etc/ppp/ip-up nelle variabili di ambiente DNS1 e DNS2 ed usati per la creazione di un file resolv. o.296 CAPITOLO 7. si potrebbe usare il comando: pppd /dev/ttyS0 115200 connect "/usr/sbin/chat -v -f /etc/chatscripts/provider" dove l’opzione connect viene usata per specificare il comando da usare per far impostare correttamente la linea seriale prima di far partire la connessione. Aggiunge una rotta di default alla tabella di routing usando l’IP ricevuto sulla connessione. per quelle che sono impostabili da un normale utente. in cui il primo indica quello che ci si attende di sentire dal e dispositivo ed il secondo quanto scrivere in risposta. debug Una volta lanciato il demone stabilisce una connessione sulla linea indicata tramite le opzioni. Un esempio di file di chat potrebbe essere il seguente: . 7. Usa lo script script (di norma chat) per preimpostare la linea. esse di norma a e vengono lette all’avvio del demone dal file /etc/ppp/options. per far partire la connessione con un modem attaccato alla prima seriale. Attiva il controllo di flusso hardware sulle porte seriali. ad e e esempio se si ha un modem occorrer` che questo effettui la chiamata telefonica ed attivi la a connessione. Una forma diversa di chiamata del demone pu` essere attraverso l’opzione call.ttyNAME (nel caso options. Di norma perch´ questo avvenga ` necessario che la linea venga opportunamente preparata. cos` ı se /etc/ppp/peers/adsl contiene le opzioni per chiamare il provider con un modem ADSL. Tabella 7. e -v che permette di registrare i risultati della comunicazione a scopo di controllo. Crea la connessione a richiesta quando vede del traffico. speed la velocit` di comunia cazione dello stesso in baud e options indica tutte le altre opzioni. Le restanti opzioni possono essere trovate nella pagina di manuale accessibile con man chat. Il comando usa uno script di chat con il quale gestisce la comunicazione iniziale con il modem. ` utile per avere pi` informazioni quando la e u connessione non funziona. L’AMMINISTRAZIONE DI BASE DELLE RETI dove ttyname specifica il dispositivo da usare per la comunicazione. u la descrizione e l’elenco completo delle varie opzioni sono disponibili nelle pagine di manuale accessibili con man pppd.24. che pero mette di personalizzare le opzioni in base al service provider che si vuole utilizzare.24: Opzioni del demone pppd. Le opzioni pi` significative sono -f che permette di indicare un file per lo script u di chat. Abilita il debugging. le opzioni verranno prese. in questo infatti caso le opzioni saranno lette da un file posto nella directory /etc/ppp/peers. Di solito questo si fa attraverso l’uso del comando chat. esso ` composto da coppie di valori. Questo ultimo viene lanciato da pppd con l’opzione connect. Nel nostro caso chat verr` solo usato per dare le istruzioni al modem e verificare la riuscita a della chiamata. Se si ` specificato a riga di e comando un particolare dispositivo (come /dev/ttyS0 nell’esempio). Direttiva call name connect script crtscts defaultroute lock demand usepeerdns Significato Usa le opzioni contenute nel file name in /etc/ppp/peers.conf che li usi come nameserver. Chiede alla connessione gli indirizzi di due server DNS. se esiste. In realt` non ` necessario specificare nessuna opzione a riga di comando. dal file . che esegue un qualunque programma o script da usare per inizializzare la connessione. potremo attivare la connessione con un comando del tipo di: pppd call adsl Le opzioni pi` comuni si sono riportate in tab. insieme ad una loro breve descrizione. Crea un file di lock per la seriale.pppdrc nella home dello stesso. Ad esempio. d. Si noti come si inizi non aspettandosi niente (questo il significato della stringa vuota ) cui si risponde con il comando ATZ del modem. come nell’esempio. Il secondo procedimento e ı invece prevede l’invio da parte del server di una sfida nella forma di un pacchetto che contiene il nome del server. tenendo a conto che basta una corrispondenza parziale della risposta. si ` cos` esposti ad una eventuale intercettazione telefonica.7. 7. dopo di che l’interfaccia di rete viene disattivata. cos` che il client pu` rispondere con un pacchetto che contenga un hash ı o crittografico del pacchetto di sfida cui si ` aggiunto il valore di un segreto condiviso (la password) e cos` da comprovare la conoscenza del segreto senza inviarlo sulla linea. il che pu` comportare ad esempio la presenza di o ulteriori linee del tipo di: ogin: username ssword: password o quel che sar` necessario a seconda della risposta dell’altro server (di norma appunto un login: a cui va risposto con l’username. Alla risposta OK si esegue il comando ATDT055507979 che esegue la telefonata. Allo stesso modo. Inoltre viene lanciato lo script /etc/ppp/ip-up a che si cura eseguire una serie di azioni programmate relative alla presenza di una nuova connessione (come far scaricare la posta e le news). In generale questo script si limita ad eseguire tutti gli script posti in /etc/ppp/ip-up. il Password Authentication Protocol (noto o come PAP) ed il Challenge Handshake Authentication Protocol (noto come CHAP).7. Se la connessione viene stabilita regolarmente.7. il demone si incarica di creare una nuova interfaccia di comunicazione ppp0 (in generale pppN a seconda di quante connessioni PPP si sono stabilite) sulla quale passer` il relativo traffico.d.). IL PROTOCOLLO PPP ABORT BUSY "" ATZ OK ATDT055507979 CONNECT \d\c 297 in cui le direttive ABORT definiscono le condizioni in cui viene abortita la connessione (possono essere BUSY. Si tenga presente che in certi casi ` necessaria una procedura di login prima che l’altro capo e attivi il suo demone pppd sulla connessione. VOICE. cui seguir` password: a cui rispondere con la password). Un esempio di uno questi file ` il seguente: e # INBOUND connections # UserIDs that cannot use PPP at all. Alla risposta CONNECT lo script finisce e il controllo passa direttamente a pppd che a questo punto si suppone sia in grado di parlare con il corrispettivo dall’altra parte.2 I meccanismi di autenticazione Al di l` della possibile necessit` di autenticarsi per l’accesso alla linea seriale (come mostrato a a nell’esempio riguardante chat) il demone pppd prevede una sua procedura di autenticazione diretta. quando la connessione viene chiusa viene lanciato lo script /etc/ppp/ip-down che esegue quelli presenti in /etc/ppp/ip-down. ı Le informazioni di autenticazione usate dal demone vengono mantenute rispettivamente in due file: /etc/ppp/pap-secrets ed /etc/ppp/chap-secrets che hanno lo stesso formato. Il primo ` pi` elementare e prevede che il client invii un username ed una password in chiaro e u sulla linea. Check your /etc/passwd and add any # other accounts that should not be able to use pppd! guest frijole "*" master frijole "*" root frijole "*" support frijole "*" - . Questa pu` avvenire secondo due protocolli. NO DIALTONE ecc. Se la password inizia per @ si indica che essa ` contenuta nel file specificato di seguito. per questo i file contengono sia le informazioni per o essere autenticati presso gli altri che per autenticarli. I nomi di client e server possono contenere caratteri qualunque. si possono e indicare delle sottoreti in notazione CIFS ed usare un “!” iniziale per negare la selezione. il terzo il segreto condiviso. . il secondo il nome del server. si deve solo essere autenticati. ma si limita a rispondere a quelle che gli vengono fatte. L’AMMINISTRAZIONE DI BASE DELLE RETI Il file prevede quattro campi separati da spazi. ma gli spazi e gli asterischi devono essere protetti scrivendoli fra virgolette.298 stats frijole "*" # OUTBOUND connections piccardi * password CAPITOLO 7. e Dato che il collegamento ` punto-punto il procedimento di autenticazione ` simmetrico: ogni e e demone pu` chiedere all’altro di autenticarsi. il quarto. per questo il default ` che pppd non esegue richieste di e autenticazione. il primo campo indica il l’username usato dal client. a meno di non gestire un o provider. una lista degli IP da cui ` possibile effettuare il collegamento (un “-” indica nessun IP). opzionale. Di norma per`. il valore * indica un nome qualsiasi e fa da wildcard. d/inetd. che non vale la pena di mantenere in memoria. o SSH non vengono u utilizzati in questo modo. anche se i due principali sono il tradizionale inetd.conf. e lancia il relativo programma solo quando qualcuno effettua una connessione.Capitolo 8 La gestione dei servizi di base 8. che non vengono effettuati da altrettanti demoni perennemente attivi. perch´ questa interposizione di un altro programma avrebbe effetti e negativi sulle prestazioni. Il programma viene di norma lanciato dagli script di avvio. come echo o discard.1 La gestione dei servizi generici In genere su ogni macchina in rete viene installata una serie di piccoli servizi generici. ma attraverso un apposito programma che viene chiamato superdemone. ed ` qui che si specifica su quali porte il e e demone deve porsi in attesa e quali programmi lanciare. per i quali non ` necessario lanciare nessun programma. Ma l’aspetto interessante ` e e che inetd ` in generale in grado di associare ad una porta un programma qualunque. come il web.1. Di norma i servizi pi` importanti ed usati. mentre con -q si pu` importare la profondit` della coda a o a delle connessioni in ingresso per cui si sta in ascolto. E attraverso questo programma che di norma vengono lanciati invece alcuni fra i servizi pi` semplici e meno usati.conf: see inetd(8) for further informations. spesso attivi solo per uso di test. il cui risultato sar` a inviato via rete. il cui compito ` un po’ quello della segretaria.1 Il superdemone inetd Tradizionalmente la gestione dei servizi generici ` sempre stata effettuata tramite il programma e ` inetd. ed il pi` moderno xinetd. che riceve le telefonate sul centralino e poi passa e ciascuna di esse all’ufficio competente. discard o daytime. In questo caso ` inetd che e si mette in ascolto sulle rispettive porte. u 8. nel qual caso si pu` usare l’opzione -d o o per farlo partire in modalit` di debug. cos` ad esempio si pu` attivare il ı o servizio netstat semplicemente facendogli lanciare l’omonimo programma. ed al solito pu` essere controllato o manualmente con il relativo script che di norma ` /etc/init. In caso di necessit` lo e a si pu` eseguire anche direttamente a riga di comando. Inoltre esistono vari programmi in grado di svolgere questo compito. la posta. Quello che e succeder` ` che in occasione di una connessione di rete esso eseguir` il programma collegando sia ae a lo standard input che lo standard output dello stesso al socket. u come telnet o ftp. che ancor oggi viene usato dalla gran parte delle distribuzioni. # # Internet server configuration database # 299 . il DNS. Un esempio di questo file ` il seguente: e # /etc/inetd. Il file di configurazione di inetd ` /etc/inetd. Il programma inoltre fornisce direttamente alcuni servizi elementari come echo. 300 CAPITOLO 8. news and uucp services. e che permette di identificare l’utente proprietario del processo che ha una certa connessione.group. Come si pu` notare nell’esempio sono abilitati solo due servizi.1. (come raw. ma dovranno essere preceduti dall’argomento iniziale (che la riga di comando costruisce automaticamente. se si vuole specificare anche un gruppo diverso da quello di default. il secondo ` il servizio ident. nntp stream tcp nowait #:INFO: Info services ident stream news /usr/sbin/tcpd /usr/sbin/leafnode tcp wait identd /usr/sbin/identd identd come si vede il formato ` relativamente semplice. il primo ` un server news o e gestito tramite il programma leafnode. 8. una tabella in cui ogni riga ` relativa ad un e e servizio da lanciare. senza questo il risultato sarebbe stato che all’esecuzione di /bin/netstat nome del processo . tramite il suo valore simbolico cos` come e ı viene indicato in /etc/services. il nome del programma netstat. e Eventuali argomenti dovranno essere specificati di seguito. questi non potranno essere specificati normalmente riprendendo quanto si scriverebbe su una riga di comando. LA GESTIONE DEI SERVIZI DI BASE # <service_name> <sock_type> <proto> <flags> <user> <server_path> <args> # #:INTERNAL: Internal services #echo stream tcp nowait root internal #echo dgram udp wait root internal #chargen stream tcp nowait root internal #chargen dgram udp wait root internal #discard stream tcp nowait root internal #discard dgram udp wait root internal #daytime stream tcp nowait root internal #daytime dgram udp wait root internal #time stream tcp nowait root internal #time dgram udp wait root internal #:MAIL: Mail. ma si possono indicare tutti i tipi di socket supportati con Linux. un utile programma di sicurezza che permette di controllare gli accessi ai servizi di rete. rdm. (ma si pu` specificare un qualunque nome valido riportato in /etc/protocols) che o in pratica corrispondono rispettivamente ai tipi stream e dgram. Il quinto campo indica l’utente per conto del quale viene eseguito il programma. Il terzo campo indica il protocollo usato: di norma si tratta di tcp o udp. come vedremo in sez. dato per` che inetd usa direttamente o il resto della linea per invocare la funzione exec. Il successivo campo indica il tipo di socket: i due tipi pi` u comuni sono stream o dgram. per cui non viene mai specificato). o la parola chiave internal se quel servizio ` fornito direttamente da inetd. or seqpacket). Il servizio da lanciare ` identificato dal primo campo. prima dei parametri -ant.3. e indica se il server ` in e e e grado di trattare altri pacchetti mentre sta rispondendo (nel qual caso si imposta nowait) o meno. al solito righe vuote e iniziate da # sono ignorate. nel qual caso si deve aspettare la fine del processo corrente prima di rilanciare il programma. ed i campi sono separati da spazi o tabulatori. lo si pu` fare scrivendo il campo nella forma user. che indica il nome del programma lanciato. per gli altri socket deve essere nowait. Il quarto campo ` applicabile solo quando si ` usato un socket dgram. Si noti anche come nel caso di leafnode questo non sia stato lanciato direttamente ma invocato attraverso tcpd. definito dall’RFC 1413. o Il quinto campo deve indicare il pathname completo del comando che verr` eseguito in caso a di connessione. Se vogliamo provare ad abilitare un nuovo servizio netstat possiamo aggiungere al file una riga del tipo: netstat stream tcp nowait nobody /bin/netstat netstat -ant e si noti come si sia specificato. 0. ma oltre a questo ha una serie di funzionalit` ulteriori come la possibilit` di mettere a disposizione a a i servizi in orari determinati.1:32944 Connection closed by foreign host. Questo significa che si pu` lanciare attraverso inetd un programma qualsiasi.0.0.0.0.1.0. dei meccanismi di redirezione delle connessione.0:* tcp 0 0 0.0. ı standard output e standard error siano comunque associati al socket su cui ` stata aperta la e connessione..1:32778 62.0. come se lo si fosse eseguito o sulla nostra macchina.1:53 0. Questo ha fatto s` che noi la ricevessimo sul socket creato ı dalla connessione effettuata con telnet.1:15 127. o avremo allora che: [piccardi@gont corso]$ telnet localhost netstat Trying 127.. Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address tcp 0 0 0. A questo punto si pu` verificare il funzionamento del nostro nuovo servizio usando telnet.0:884 0. Questa ` una caratteristica generale del comportamento di inetd.2 Il superdemone xinetd Il programma xinetd nasce come estensione di inetd per eseguire lo stesso compito: far partire i server appropriati in caso di connessione al relativo servizio.18:993 tcp 0 0 127.1.0.0:22 0.0.0:* tcp 0 0 0.0.0.168.0:631 0. La cosa ` applicabile in generale a qualunque comando di shell per cui potremmo e definire un servizio di rete ps (assegnandogli una porta in /etc/services) che ci fornisce l’elenco dei processi.124.0.0:15 0. che ` stato automaticamente chiuso alla terminazione e del processo.0.8.0.1.0.1:32777 195.0.1:15 tcp 0 0 192.0.0.0. Il superdemone infatti ` e e in grado di eseguire un programma qualsiasi. a a Nell’esempio appena mostrato quello che ` successo ` che ` stato eseguito il programma e e e netstat sul server remoto che come al solito ha prodotto la lista dei socket attivi scrivendola sullo standard output.1.168.0.0. mentre le opzioni sarebbero state perse.0:* tcp 0 0 192.0.0:444 0. delle capacit` di a logging estese.1.0.0.0:* tcp 0 0 0.0:* tcp 0 0 0.110. o quello che vogliamo.0.177.1:32944 127. State LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN ESTABLISHED ESTABLISHED ESTABLISHED ESTABLISHED ESTABLISHED e come si pu` notare si ottiene il risultato del comando netstat.0.0.0. 8.0.0:* tcp 0 0 0.168. ma inetd quando lancia il programma fa s` che standard input.0:* tcp 0 0 0. per poi terminare.0:25 0.168.1.0.0.0.0.0.0.0:* tcp 0 0 127.168:5901 tcp 0 0 127.0:709 0. Escape character is ’^]’.0:119 0.0.0:111 0.107:5223 tcp 0 0 192. e o questo accetter` l’input dal socket e su di esso scriver` il suo output. delle capacit` di limitare a il numero di istanze del server lanciate.1.0.0.0:* tcp 0 0 0. Rispetto ad inetd esso supporta nativamente il controllo di accesso come per i TCP wrapper. per resistere agli attacchi di denial of service.0.0. in generale sar` compito del programma eseguito a gestire la connessione di rete.1.0.0:* tcp 0 0 0.0.0.0.1:53 0. LA GESTIONE DEI SERVIZI GENERICI 301 (come ottenibile attraverso il comando ps) sarebbe risultato -ant.0. dei meccanismi di protezione nei confronti dei portscan.0.0.1.1:32772 192.0.168.0. evitando di lanciare e tenere in memoria dei programmi che resterebbero dormienti per la gran parte del tempo.0.0:* tcp 0 0 192. Connected to localhost. .0. . e poi /etc/inetd. This logs to a file that is specified. comunque il comando supporta una opzione -inetd_compat che gli permette di operare in modalit` di compatibilit` con inetd. LA GESTIONE DEI SERVIZI DI BASE Le maggiori funzionalit` comportano ovviamente il prezzo di una maggiore complessit` di a a configurazione. # PID logs the pid of the server processing the request.. per il e resto per ciascun servizio che si vuole attivare ` necessario specificare una voce (nel caso baster` e a scrivere un file che la contenga in /etc/xinetd. log_on_failure = HOST RECORD Same options as above # The maximum number of connections a specific IP address can # have to a specific service.. instances = 25 # The type of logging. # Another option is: FILE /var/log/servicelog log_type = SYSLOG auth # What to log when the connection succeeds. che contiene i valori di e default delle opzioni. il che permette di poter attivare in maniera indipendente ciascun servizio con la semplice installazione di un file in tale directory. la sintassi generica di tale voce ` del tipo: e service <nome_servizio> { <attributo> <operatore> <valore> <valore> .conf. e Il file principale di configurazione di xinetd ` /etc/xinetd. # USERID logs the remote user (using RFC 1413) # EXIT logs the exit status of the server.d) che inizia con la direttiva service.d in questo caso ci si ` limitati a dichiarare la sezione speciale defaults.. # HOST logs the remote host’s ip address. da applicare per tutti i servizi per i quali essi non sono stati esplicitamente specificati. per_source = 5 } includedir /etc/xinetd. .d). log_on_success = HOST PID # What to log when the connection fails. . come nel caso.conf facendo partire i servizi definiti in quest’ultimo (questa ` la configurazione standard di Debian). Al solito le righe vuote e il cui primo carattere non di spaziatura ` # vengono ignorate. In tal caso infatti il programma prima a a legge i suoi file di configurazione. La riga finale con la riga includedir ci dice poi di includere automaticamente nella configurazione il contenuto di tutti i file contenuti nella directory specificata (di norma. ma che pu` essere anche += per aggiungere e -= per togliere dei valori agli o attributi che lo supportano. un esempio tipico del suo e contenuto ` il seguente: e # Simple configuration file for xinetd defaults { # The maximum number of requests a particular service may handle # at once. # DURATION logs the duration of the session. } dove <nome_servizio> indica il servizio che si vuole fornire. con un operatore di assegnazione che nella gran parte dei casi ` =. e gli attributi permettono di specificarne le caratteristiche. e con significato ovvio. si usa /etc/xinetd.302 CAPITOLO 8. la durata della connessione (con DURATION) ed il numero del processo (con PID). Lista degli host da cui ` impossibile accedere. ed un argomento intero per specificare il numero di secondi da aspettare prima di accettare nuove connessioni una volta superato il limite. CIDR o simbolica. che permette di specificare le modalit` con cui viene efe a fettuato il logging. i due attributi only_from e no_access per` sono in grado di specificare o direttamente le stesse condizioni all’interno del file di configurazione di xinetd. Un argomento decimale per indicare il limite sulle connessioni al secondo. Numero massimo di connessioni per IP sorgente. log_on_success permette anche di registrare lo stato di uscita del server (con EXIT). Uno o pi` fra HOST. permettono di specificare cosa scrivere nei log in caso rispettivamente di successo e fallimento di una connessione. Indirizzi in forma dotted e decimal. I due attributi successivi. Opzioni FILE o SYSLOG. In questo caso le sintassi supportate sono sia le forme dotted decimal (interpretando gli zeri finali come indirizzi di rete). Valore di nice da applicare ai demoni lanciati. LA GESTIONE DEI SERVIZI GENERICI 303 Come mostrato nell’esempio precedente. Cosa registrare per le connessioni riuscite. Un argomento decimale. o SYSLOG per specificare l’uso del syslog. indicando poi con l’ulteriore parametro auth quale facility utilizzare (` possibile anche specificare di seguito una priority. ma esso ` negato dai TCP wrapper.conf. su file o tramite syslog. Un elenco degli attributi che possono essere specificati nella sezione defaults. Un argomento intero. sia quelle espresse con indirizzi simbolici. Intervallo temporale nel quale ` possibile accedere ai servizi. Cosa registrare per le connessioni fallite. per cui se si abilita l’accesso con queste direttive.1. queste possono essere FILE per specificare a seguire un file su cui salvare direttamente i dati. DURATION. che quelle CIDR. o Il secondo attributo ` log_type. Attributo instances log_type log_on_success log_on_failure per_source only_from no_access access_times cps Descrizione Numero massimo di processi lanciati per ogni servizio. 8. HOST. questi ultimi avranno la meglio. e 1 . l’elenco completo pu` essere trovato nelle pagine di manuale accessibili con o man xinetd. che di utilizzare quelli eventualmente specificati tramite i file di controllo dei TCP wrappers 1 (vedi sez. ??). Un argomento intero. con la relativa descrizione. USERID. CIDR o simbolica. Rate massimo di accesso. Si tenga presente che l’uso dei TCP wrapper ha di norma la precedenza sul controllo interno. anche la direttiva default prende degli attributi. in genere questi sono attributi generali che possono a loro volta essere rispecificati in maniera diversa per i singoli servizi. Le indicazioni HOST e USERID sono comuni ad entrambi e permettono di registrare rispettivamente l’IP e l’utente (se ` disponibile il servizio identd secondo l’RFC 1413) relativi alla connessione e da remoto. Intervallo e temporale nella forma HH:MM-HH:MM. u ATTEMPT. Indirizzi in forma dotted e decimal. Carico massimo oltre il quale la macchina smetta di accettare connessioni. Infine l’ultimo attributo. EXIT.1: Attributi specificabili in generale per tutti i servizi gestiti attraverso il superdemone xinetd. Un argomento intero. ` rie portato in tab. Lista degli host da cui ` possibile accedere. u USERID. Metodologia di registrazione dei log.8. Uno o pi` fra PID. se e diversa dal default info). per_source. Nel nostro caso il primo attributo ` instances che permette di porre e un limite massimo al numero di istanze di uno stesso server che il programma pu` lanciare. log_on_success e log_on_failure. permette di stabilire un numero massimo per le connessioni da un singolo IP (una forma per limitare eventuali denial of service). nice max_load Tabella 8. Come accennato il programma ` in grado di implementare direttamente dei controllo di e accesso.1. o no. Dato che il servizio ` previsto e . passando i relativi argomenti con server_args. Inoltre con socket_type si ` specificato il tipo di socket da usare. a certe condizioni. 8. ripeteremo e allora quanto visto con inetd definendo un nuovo servizio netstat. mentre user indica che verr` eseguito per conto dell’utente e a root.168. LA GESTIONE DEI SERVIZI DI BASE Come gi` accennato ciascun servizio che si vuol lanciare con xinetd deve essere specificato a con la direttiva service seguita dal nome dello stesso. Oltre ai due servizi interni si ` abilitato anche il servizio di news. si sono riportati i principali attributi utilizzabili in tab. devono comunque essere specificati. la prima contenente quelli che. avendo disable impostato su yes. Si ricordi che anche i precedenti argomenti visti in tab.168. Inoltre nel caso si ` ristretto e l’accesso al servizio alle macchine della sottorete 192. Si ` invece specificato il programma da usare come e e server con server. entrambi sono disabilitati.0/24 con only_from e negli orari di ufficio usando access_times. Al solito nelle pagine di manuale ` riportato un elenco completo di tutti gli e argomenti presenti e la descrizione dettagliata di ciascuno di essi. mentre non esistendo il servizio news su UDP e non ` stato necessario importare protocol. e cio` il servizio e time su TCP e UDP.2.0/24 access_times = 08:00-17:00 } In questo caso si sono definiti due servizi gestiti direttamente da xinetd. Il campo type dice e che il servizio ` fornito internamente. la seconda quelli che sono sempre opzionali. Anche con xinetd ` possibile creare un proprio servizio usando i comandi di shell.304 CAPITOLO 8.0.0. Infine il campo wait indica se il servizio pu` essere fornito in maniera concorrente (con o molte connessioni contemporanee) senza attendere la conclusione di una connessione. un esempio possibile ` il seguente: e service time { disable = yes type id socket_type protocol user wait } service time { disable type id socket_type protocol user wait } = = = = = = INTERNAL time-stream stream tcp root no = = = = = = = yes INTERNAL time-dgram dgram udp root yes service nntp { socket_type = stream wait = no user = news server = /usr/sbin/leafnode server_args = -v only_from = 192. Li si sono poi suddivisi in due sezioni. socket_type e user (anche se per quest’ultimo si ` usato l’utente news).1 possono essere utilizzati e saranno applicati solo al servizio in questione. e con protocol il relativo protocollo. Oltre a quelli appena illustrati. in questo caso restano e specificati con lo stesso significato precedente gli argomenti wait. 8. Si noti come siano stati differenziati attraverso la presenza di un argomento id. una volta riavviato xinetd.1. e Indica se si deve attendere o meno la conclusione del server per lanciare un’altra istanza. Pathname del programma server da lanciare. in /etc/services solo per TCP possiamo attivarlo creando in /etc/xinetd. Protocollo usato (analogo di tcp ed udp per inetd. Tipo di servizio. Prende i valori yes e no. Con l’espandersi della rete e la possibilit` di accessi non voluti o maliziosi. Analogo dello stesso parametro in inetd. 8. potremo verificarne come prima il funzionamento. Prende gli stessi valori (stream. nati in un periodo in cui internet era una rete costituita principalmente da istituzioni ed enti e l’accesso era molto limitato.conf). ecc. e permettono a chiunque di collegarsi.8.2: Attributi specificabili per un servizio gestito attraverso il superdemone xinetd. per questo Wietse Wenema. Deve essere specificata se si ` e specificato un servizio non riportato in /etc/services. da qualunque macchina si trovi. Deve essere un nome valido in /etc/protocols. Si pu` specificare un eventuale gruppo con l’attributo o group. Consente di redirigere il servizio ad un’altra macchina. 305 server wait protocol port type server_args disable id bind redirect Tabella 8. Pu` assumere i valori e o yes e no. non provvedono nessun tipo di controllo degli accessi. ha creato un insieme di librerie e programmi.conf. Non necessita di specificare l’argomento iniziale come per inetd. Identificatore aggiuntivo qualora si tratti di servizi diversi con lo stesso nome. Prende l’IP ad essa associato. Eventuali argomenti da passare al programma server quando viene lanciato. Deve essere presente e in /etc/passwd. Indica se attivare il servizio. LA GESTIONE DEI SERVIZI GENERICI Attributo socket_type user Descrizione Tipo di socket. il default ` disattivo. Prende l’indirizzo IP e la porta verso quale redirigere tutto il traffico.3 I TCP wrappers In generale la gran parte dei demoni di rete.conf. Porta su cui ascoltare le connessioni.d un nuovo file con un contenuto del tipo di: service netstat { socket_type wait user server server_args } = = = = = stream no root /bin/netstat -ant e.1.) dell’analogo parametro in inetd. chiamati appunto TCP wrappers che permettono di specificare un controllo degli accessi che consente il collegamento a certi servizi . ` diventato sempre a e pi` importante poter effettuare un controllo degli accessi. Utente per conto del quale ` lanciato il servizio. Pu` assumere i valori INTERNAL (per servizi gestiti o internamente) e UNLISTED per servizi non presenti in /etc/services. Consente di specificare l’interfaccia su cui fornire il servizio. con un telnet sulla porta 15. Va sempre specificato se il servizio non ` gestito internamente. dgram. un esperto u di sicurezza. 0.1 rquotad: 127.0. Esso viene di norma utilizzato attraverso il demone inetd come illustrato in sez. l’accesso ` consentito. Le modalit` con cui si possono utilizzare le capacit` di filtraggio dei TCP wrappers sono a a sostanzialmente due.deny ` il seguente: e # /etc/hosts. ` quello del contenuto di hosts.1 lockd: 127.1 per lanciare altri programmi.0. a Sono esempi di questa modalit` servizi come SSH. pi` significativo del precedente.0.deny.txt.deny e se una regola corrisponde l’accesso ` negato.168. gli altri sono i . Se entrambi e i file sono vuoti quindi.168.0. che deve essere collegato alle stesse.1.txt.0.allow e e hosts. Si tenga presente che il funzionamento dei TCP wrappers ` tale che prima viene controllato e hosts.306 CAPITOLO 8. 192. il secondo quelle che lo consentono. Nell’esempio indicato si sono indicati tre servizi. 192. e se una regola corrisponde l’accesso ` garantito ed il controllo finisce qui. La prima ` quella pi` semplice che vede l’uso del programma tcpd. hosts. come suggerisce il nome. che fa da involucro all’esecuzione di altri programmi.gz 192. LA GESTIONE DEI SERVIZI DI BASE solo da parte di certe stazioni o reti. il primo ` la secure shell. il secondo ` il e e servizio che permette di tenere un server di news in locale (a scopo di caching).0.1 list of hosts that are allowed to access the system.1. ogni riga poi ha la forma: lista dei server: lista dei client : comando shell dove la terza parte (: comando shell) ` opzionale e pu` essere omessa. 192. che contengono le regole di accesso.1. La seconda modalit` ` quella che prevede l’uso delle librerie di controllo all’interno del demoae ne.1 mountd: 127. in modo da poterne usare direttamente le funzionalit`.gz # ALL: ALL la sintassi delle regole si intravede gi` in questo esempio.0.0. da e u cui deriva appunto il nome.allow. 8. effettua un controllo e se l’accesso ` consentito lancia il demone specificato come e argomento. e In genere allora quello che si fa ` negare tutti gli accessi in hosts.168. Per questo l’esempio tipico di hosts. elenca le regole che negano l’accesso. LDAP o NFS.0. 192.1. (insomma.1 portmap: 127. Il primo file.1. dopo di che vengono eseguiti i vari controlli che prevedono.1 statd: 127. a In entrambi i casi le connessioni ai servizi controllati vengono archiviate tramite syslog in modo da lasciare traccia di eventuali tentativi non autorizzati di accesso.deny e consentire poi solo e quelli voluti in hosts.allow u e riportato di seguito: # /etc/hosts.allow: # # # sshd: ALL leafnode: 127.deny: list of hosts that are _not_ allowed to access the system. secondo una sintassi specifica che ` riportata e per esteso nella pagina di manuale accessibile con man 5 hosts_access. che permette un e collegamento sicuro da remoto.168.0. # See the manual pages hosts_access(5). altrie menti viene controllato hosts.allow. See the manual pages hosts_access(5). hosts_options(5) and /usr/doc/netbase/portmapper. una specie di filtro telefonico alla rovescia che impedisce che ci possano chiamare da certi numeri). e o Un altro esempio.0. hosts_options(5) # and /usr/doc/netbase/portmapper. che ` gestita come server dal programma sshd. Il controllo di accesso implementato dai TCP wrappers ` gestito attraverso due file.168.1. al solito righe vuote e tutto quello che a segue un # viene ignorato. In generale per lista dei server si intende il nome (o i nomi.allow e hosts.deny. se se ne vuole indicare pi` di u uno) del programma che gestisce lo specifico servizio. trovando che questo ` consentito dalla riga e 14 del file hosts. Il comando eseguir` una scansione delle regole e riporter` i risultati. line 15: apt-proxy: no such process name in /etc/inetd. si pu` anche specificare una netmask con un indirizzo del tipo: o 131.4. perch´ il nome ` e e quello del programma che fornisce il servizio. Occorre fare attenzione.8. servizi che non sono riconosciuti.155.ea client: address 192.72. accessibili con man 5 hosts_access. a Per una migliore gestione dei TCP wrapper il relativo pacchetto fornisce anche dei programmi di utilit` che permettono di verificare la configurazione effettuata ed effettuare dei controlli di a accesso. argomenti o opzioni non validi.1). Il comando richiede due parametri.1. a partire da un uso scorretto di wildcard e indirizzi.allow e hosts. Per le reti in genere si usa la notazione sia numerica che alfabetica. non quello del servizio indicato in inetd. Il comando riporta tutti gli eventuali problemi rilevati.deny nella directory corrente invece che sotto /etc usando l’opzione -d.conf warning: oppish: hostname alias warning: (official name: oppish.ea) client: hostname oppish. e si pu` usare una * come wildcard o per raggruppare indirizzi.168. Il formato e la lista completa delle funzionalit` che sono controllabili tramite questi file ` a e riportato nella pagina di manuale ad essi associate. Il comando permette di controllare gli hosts.allow line 14 access: granted che controlla l’accesso al servizio SSH (si noti che si deve specificare il nome del programma che esegue il servizio) da parte della macchina oppish. Il primo programma ` tcpdchk che esegue un controllo delle regole di accesso impostate e con hosts.0 e specificare la lista degli indirizzi usando un file dando il pathname assoluto dello stesso. Il comando rileva anche che il servizio non ` lanciato attraverso inetd e e quale ` l’IP effettivo della macchina.168 server: process sshd matched: /etc/hosts.1.earthsea.allow. LA GESTIONE DEI SERVIZI GENERICI 307 vari server necessari al funzionamento di NFS (si veda sez. e Il secondo comando di controllo ` tcpdmatch che permette di verificare il comportamento dei e TCP wrapper per una specifica richiesta da un servizio. e .0/255. l’accesso a NFS per la rete locale. Cos` ad esempio ı potremo avere: [root@gont corso]# tcpdchk warning: /etc/hosts.254. ecc. mentre si pu` specificare un diverso file per inetd. e l’uso del server di news solo tramite il localhost. confrontandole anche con i servizi attivati in inetd. 8.allow.conf.conf o con l’opzione -i. la documentazione completa ` al solito disponibile con man tcpdchk.conf. Si tenga comunque conto che alcuni servizi (NFS per esempio) supportano solo un sottoinsieme delle funzionalit` definite in generale.255.earthsea.conf in corrispondenza ad una regola di accesso rimasta aperta per un servizio che in seguito ` stato e rimosso. il primo che specifichi il servizio che si vuole controllare ed il secondo la stazione da cui si intende effettuare l’accesso. Ad a a esempio potremo richiedere: [root@gont corso]# tcpdmatch sshd oppish warning: sshd: no such process name in /etc/inetd. Nella lista dei client si indicano invece gli IP o le reti a cui si vuole consentire l’accesso. L’esempio consente l’accesso ad ssh. in modo da ottenere poi l’immagine del sistema che verr` caricata in memoria ed eseguita. ma prevede anche la richiesta del nome di un file da usare come sistema operativo e dell’indirizzo di una macchina a cui rivolgersi per ottenere quest’ultimo. a 8. esegue il compito inverso rispetto al protocollo ARP gi` visto in sez. Rispetto al precedente RARP ` basato su IP e e UDP (e non direttamente sul collegamento fisico) ed non si limita alla ricerca di un numero IP da assegnare automaticamente ad una scheda di rete. che ` il motivo per cui lo abbiamo citato. Il protocollo nasce principalmente per fornire un meccanismo con cui macchine senza disco possano eseguire un avvio del sistema via rete. che e implementa un meccanismo elementare. Il secone do.2. Per chi si trovasse in situazioni in cui per compatibilit` con vecchi a sistemi viene ancora usato questo metodo per l’assegnazione degli indirizzi. BOOTP e DHCP In questa sezione tratteremo vari protocolli utilizzati prevalentemente per la assegnazione automatica dei numeri IP. ` definito nell’RFC 951 e nasce come protocollo e per gestire l’avvio automatico delle macchine. il BOOTP.308 CAPITOLO 8. LA GESTIONE DEI SERVIZI DI BASE 8. il DHCP. Il protocollo ` implementato direttamente a a e livello di collegamento fisico (cio` nella maggior parte dei casi su ethernet) e serve ad ottenere.2 Il protocollo BOOTP Il protocollo BOOTP (da Bootstrap Protocol ). 2 . come il nome stesso indica. In questo caso ` compito del BIOS della macchina implementare la parte client del protocollo (sia e di BOOTP che di TFTP. mentre l’ultimo. in presenza di altri protocolli pi` sofisticati in grado di eseguire sia questo che o u altri compiti. ci limitiamo a citare la possibilit` compilare il kernel per utilizzare questo supporto.2 I protocolli RARP. ha solo interesse storico (considerato anche che sono assai pochi ormai i sistemi operativi che lo supportano). Nel caso di GNU/Linux il supporto per la parte server del protocollo ` disponibile con e il programma bootpd (su Debian il pacchetto ` bootp) che implementa tutte le funzionalit` e a il Trivial File Transfer Protocol ` un protocolllo elementare per il trasferimento di file basato su UDP. ` un protocollo e elementare. il Reverse Address Resolution Protocol ` stato il primo protocollo e usato a questo scopo. 8. 7. l’indirizzo IP ad esso associato. Il primo. ricomprende tutte queste esigenze all’interno di un unico servizio.4. ottenendo questo ultimo (in genere tramite l’uso del protocollo TFTP. Lo scopo del protocollo era principalmente quello di provvedere un meccanismo automatico per l’assegnazione di un numero IP ad una macchina in fase di avvio. nasce principalmente invece per distribuire via rete immagini di avvio. ed ` sostanzialmente in disuso essendo sostituito dagli altri due. e dato un MAC address sulla rete. se poi viene usato quest’ultimo). cos` da essere utilizzabile in programmi estremamente semplificati come ı quelli che sono contenuti nel BIOS di una macchina. definito nell’RFC 903 che. Tutto ci` oggi. a Come sottoinsieme delle funzionalit` del protocollo c’` ovviamente anche quella della assea e gnazione automatica di un numero IP (il trasferimento dell’immagine del sistema avviene sempre con un altro protcollo che necessita di IP). questa esegue (posto che il kernel disponga del relativo supporto) una richiesta RARP ed utilizza il numero IP fornito come risposta (la cosa presuppone la presenza del relativo server).1 Il protocollo RARP Il protocollo RARP (sigla che sta per Reverse Address Resolutoin Protocol ). Di nuovo e qualora questa funzionalit` fosse necessaria all’avvio di un sistema GNU/Linux (ad esempio per a l’avvio di un sistema con la directory radice su NFS) occorrer` compilare il kernel con il relativo a supporto (analogamente a quanto si farebbe per l’uso di RARP).2 anche se possono essere usati altri protocolli) da un opportuno server.2.4. e al solito l’elenco completo e tutti i dettagli sono nella pagina di manuale. un esempio ` il seguente: e e # # Sample configuration file for ISC dhcpd for Debian # # option definitions common to all supported networks. quest’ultimo contiene a e tutte le definizione dei vari parametri da usare per ciascun client nella forma: hostname:tg=value. . lista dei server DNS. il protocollo prevede la possibilit` da parte di una a singola stazione di effettuare delle richieste in broadcast sulla rete locale. alla ricerca di un server al quale chiedere quale indirizzo IP utilizzare. Il server ` controllato da un e file di configurazione che di norma ` /etc/dhcpd.3 per ciascuna delle macchine. option domain-name "earthsea. che pu` essere o omesso nel qual caso verr` utilizzato il default che ` /etc/bootptab. 8.2. in manier` compatibile all’ina dietro.3: Etichette dei parametri assegnabili in bootptab..3. home directory per il file di avvio. pathname della directory da montare come radice. In genere il servizio viene avviato tramite inetd. ed inserire anche dei limitati meccanio ı smi di controllo sulle macchine presenti in rete.3 Il protocollo e la configurazione di un server DHCP Il protocollo DHCP. indirizzi del server TFTP da usare. indirizzo fisico (MAC address) della macchina. .. directory radice per il server TFTP. IP da assegnare. o a Il comando prevede come argomento il file da cui leggere le impostazioni.conf. ma pu` essere eseguito anche in modalit` standalone. sulla base dei MAC address delle varie schede. Un elenco delle etichette dei principali parametri usati da bootptab ` riportato in tab. lista dei gateway. quindi il controllo effettuabile ` relativo. Tag bf dn ds gw ha hd hn ip rp sa sm td Descrizione file di avvio.. maschera di rete della macchina. BOOTP E DHCP 309 definite nell’RFC 951 e pure le estensioni dei successivi RFC 1532 e RFC 1533. 8. e e Oltre per` al servizio di assegnazione dinamica degli indirizzi IP il protocollo provvede anche o i servizi previsti dal precedente BOOTP.8. :tg=value. La descrizione completa del protocollo ` ottenibile nell’RFC 2131 e che ne definisce tutte le caratteristiche. I PROTOCOLLI RARP. evitando di doverlo specificare con la procedura vista in sez. In questo modo l’indirizzo IP pu` essere assegnato o dinamicamente.. separata con l’uso del carattere “:”. del quale implementa. Si tenga comunque presente che ` sempre possibile assegnare un IP anche senza passare dal server e DHCP. tutte le funzionalita..2. sigla che sta per Dynamic Host Configuration Protocol. il programma dhcpd. 7. e che ` possibile falsificare i MAC address.. Si pu` cos` centralizzare l’assegnazione dei numeri IP. che si incarica di ascoltare le richieste e fornire le risposte.. dove hostname indica il nome associato ad un client cui seguono le assegnazioni dei parametri che sono identificati da una etichetta di due caratteri.. :tg=value. hostname da inviare al client. Tabella 8. ` un protocollo e per la configurazione automatica delle reti.ea". nome del dominio. Dal lato server il protocolle DHCP viene implementato da un apposito demone. default-lease-time 600. .conf che all’interno di dichiarazioni. 8. Imposta la netmask per la rete associata all’indirizzo assegnato. come il dominio di riferimento o il nameserver. 7. fixed-address oppish. option subnet-mask 255.4.0. 8. } Il formato del file ` relativamente semplice.ea. Un esempio di specificazione di parametri sono le righe iniziali che nel caso sono utilizzate per impostare alcuni parametri globali. option broadcast-address 192. } host oppish { hardware ethernet 08:00:07:26:c0:a5. mentre un esempio di dichiarazione ` quello relativo alla definizione delle sottoreti e degli host.4.. ed ` a e seguita dall’indirizzo della rete e dalla specificazione della relativa netmask. 3 di norma una volta assegnato un numero IP il server mantiene l’associazione con la macchina cui l’ha assegnato (identificata dal MAC address) per un certo tempo.168.4) delle macchine sulla stessa rete locale.168. .0 netmask 255.) ` riportato in tab.2. nel nostro caso baster` usarne una.255.32 192. e Un elenco delle principali opzioni impostabili come parametri (nella forma option name valore.ea.. LA GESTIONE DEI SERVIZI DI BASE option domain-name-servers gont. a queste vanno aggiunte le dichiarazioni dirette dei paramee tri come quelle relative ai tempi massimi per cui vengono mantenute le corrispondenze3 come max-lease-time e default-lease-time che sono specificati in secondi. All’interno della dichiarazione poi si pu` indicare l’intervallo di indirizzi assegnati con il parametro range. subnet 192.310 CAPITOLO 8. cosa che provocherebbe delle interferenze con le cache ARP (vedi sez. e Vale la solita regola che linee vuote e tutto ci` che segue un # viene ignorato. } come mostrato per le due dichiarazioni relative una rete ed una stazione mostrate nell’esempio a pag.1. Specifica una lista di nameserver (anche questo per l’impostazione automatica dei relativi campi in resolv.2). option routers gont.ea. Si possono anche rispecificare (cambiandole rispetto a quelle generali impostate all’inizio del file) le varie opzioni di tab. onde evitare di riassegnare immediatamente l’IP ad un’altra macchina in caso di assenza temporanea della prima. Le opzioni possono essere inserite sia direttamente nel corpo principale di dhcpd. max-lease-time 7200. la specificazione di parametri e le e dichiarazioni.4.255. Imposta il default gateway per la rete associata all’indirizzo assegnato.168.1.earthsea.63. Imposta l’indirizzo di broadcast per la rete associata all’indirizzo assegnato.0 { range 192.255. Il contenuto o ` divisibile sommariamente in due categorie di direttive.conf).255. La parola chiave subnet specifica una sottorete. ed il o relativo router.255.1. 309.conf.earthsea.conf). Distribuzione domain-name domain-name-servers Comando Specifica il nome di dominio in cui ci si trova (ad uso dell’impostazione automatica di resolv. Si noti come il protocollo consenta di dividere gli IP restituiti alle stazioni in sottoreti.earthsea.168. subnet-mask broadcast-address routers Tabella 8.4: Opzioni impostabili nel file dhcpd. Queste ultime sono sempre nella forma keyword { parameter value.1. e assomiglia a quello di named (vedi sez. 9. 2. Il servizio ascolta di default sulla porta 22. i pi` comuni e u diffusi sono pump e dhclient.1 Il server sshd Il servizio SSH viene fornito dal demone sshd. L’uso di questi programmi ` estremamente semplice la sintassi ` e e rispettivamente: pump -i eth0 oppure: dhclient eth1 eth2 Di norma in fase di configurazione della rete si pu` sempre specificare che l’indirizzo di una o interfaccia deve essere ottenuto dinamicamente. 8. nel qual caso ` compito degli script di avvio e della rete chiamare autonomamente uno di questi programmi. 8.3 Il servizio SSH La sigla SSH sta a significare Secure SHell. identificata dal MAC address (specificato dal parametro hardware ethernet). che permette di assegnare ad una macchina. la configurazione del server ` data dal file sshd_config. anch’essa mostrata e nell’esempio a pag. IL SERVIZIO SSH 311 Infine un’altra dichiarazione utile ` quella relativa ad una stazione singola. 8.4 Uso del servizio DHCP dal lato client Per poter usufruire dei servizi di un server DHCP esistono vari programmi. In genere i file di configurazione del servizio vengono mantenuti in /etc/ssh/. da cui il nome del servizio.3. introdotta dalla parola chiave host e dal nome della stazione. 8. Bench´ sia possibile e utilizzare il canale in maniera generica con qualunque tipo di servizio. un cui estratto e ` riportato di seguito: e # What ports. IPs and protocols we listen for Port 22 Protocol 2 # HostKeys for protocol version 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key # Lifetime and size of ephemeral version 1 server key KeyRegenerationInterval 3600 ServerKeyBits 768 # Logging SyslogFacility AUTH LogLevel INFO # Authentication: LoginGraceTime 600 PermitRootLogin yes StrictModes yes RSAAuthentication yes PubkeyAuthentication yes .conf. Come per gli altri demoni esso di norma viene lanciato automaticamente dagli script di avvio creati in fase di installazione del pacchetto. Per una lista completa dei parametri si pu` fare riferimento alla pagina di manuale del file o di configurazione accessibile con man dhcpd. un indirizzo fisso (specificato dal parametro fixed-address).2. l’uso principale di SSH ` e quello di fornire una shell remota per l’amministrazione. ma in realt` identifica un protocollo di comunicazione a che permette di creare un canale di comunicazione cifrato fra due macchine.8.3.3. Deve essere impostata a 2. ma un gruppo di programe matori indipendente ` riuscito. Si tenga presente inoltre che sshd onora la presenza del file /etc/nologin non consentendo. cio` la possibilit` e a di esportare il display di X e le finestre da una macchina all’altra attraverso il canale cifrato. il programma ssh originale infatti. ed il relativo significato. il che comporta la necessit` di collegarsi e a come utente normale e poi usare su. ` in quanto le precedenti versioni sono insicure.5. dopo essere stato rilasciato per un certo tempo con licenza libera. ma si consiglia a energicamente di aggiornare i client.shosts files IgnoreRhosts yes # For this to work you will also need host keys in /etc/ssh_known_hosts RhostsRSAAuthentication no # similar for protocol version 2 HostbasedAuthentication no # To enable empty passwords. Permette il login diretto all’amministratore. ` diventato proprietario. LA GESTIONE DEI SERVIZI DI BASE # rhosts authentication should not be used RhostsAuthentication no # Don’t read the user’s ~/.312 CAPITOLO 8. Opzione Protocol Significato La versione del protocollo. 8. che l’utilizzo dei TCP wrappers. che nel frattempo ` stato standardizzato. Abilita il forwarding delle sessioni X11. si sono descritte solo le opzioni che ` pi` probabile che un amministratore e u si trovi a dover modificare. quando esso esiste. la connessione ad utenti che non siano l’amministratore. Per default ` disabilitato.5: Principali opzioni di configurazione per il demone sshd usate nel file sshd_config. a creare una e implementazione completa del protocollo. Al solito per una descrizione completa delle varie opzioni si pu` fare riferimento alla pagina di o manuale disponibile con man sshd_config.rhosts and ~/. partendo dalla ultima versione libera disponibile. tramite il programma sftp. cos` da non creare conflitti con gli ı altri display eventualmente presenti in locale. e Le opzioni principali usate nel file di configurazione. sono state riportate in tab. i valori delle altre sono di norma impostati in fase di installazione. Assegna al display X fatto passare attraverso il canale cifrato un offset di 10. E possibile abilitarle solo a fine di compatibilit`. PermitRootLogin X11Forwarding X11DisplayOffset Subsystem Tabella 8. change to yes (NOT RECOMMENDED) PermitEmptyPasswords no # To disable tunneled clear text passwords. Permette di abilitare l’accesso alla macchina con una sintassi simile a FTP. . change to no here! PasswordAuthentication yes # Use PAM authentication via keyboard-interactive so PAM modules can # properly interface with the user PAMAuthenticationViaKbdInt yes X11Forwarding yes X11DisplayOffset 10 PrintMotd no KeepAlive yes Subsystem sftp /usr/lib/sftp-server Si tenga presente che nel nostro caso si fa riferimento alla implementazione del protocollo realizzata dal pacchetto OpenSSH. la pi` semplice.aes256-cbc # EscapeChar ~ Esempi delle possibili opzioni impostabili sono riportati direttamente nell’esempio. Non specificando command si avr` una shell remota. dalla quale inviare comandi come da a un qualunque terminale. che deve essere e specificato. non ` necessario impostare niente di diverso dai default.3. la sintassi ` analoga a quella del comando cp. un estratto del quale ` riportato di seguito. IL SERVIZIO SSH 313 8. attraverso l’uso del comando sftp.cast128-cbc.3.ssh/id_rsa # IdentityFile ~/. se non corrisponde a quello con cui si sta lavorando. solo che un e file pu` essere indicato in forma generica da un identificativo del tipo utente@macchina:file o dove utente ` l’username con il quale ci si vuole collegare alla macchina remota.1 # Cipher 3des # Ciphers aes128-cbc.ssh/id_dsa # Port 22 # Protocol 2. come nell’esempio. mentre macchina ` l’indirizzo e (numerico o simbolico) di quella macchina.ssh/identity # IdentityFile ~/.8.3des-cbc. /etc/ssh_config.blowfish-cbc.2 I comandi ssh ed scp I due comandi principali di utilizzo di SSH dal lato client sono ssh e scp utilizzati rispettivamente per il collegamento su una macchina da remoto. Il comando generico del client ` ssh. al solito l’elenco completo. `: e ssh [-l login_name] hostname | user@hostname [command] in cui in sostanza ci si pu` collegare ad un computer remoto con un username e password o (quest’ultima viene richiesta da terminale). che serve per e u ottenere una shell remota (o eseguire un comando specifico). altrimenti si pu` specificare un qualunque comando che sar` eseguito o a sulla macchina remota. usando sempre il canale cifrato. Per le altre opzioni si rimanda di nuovo alla pagina di manuale del comando che ` accessibile con man ssh. e file il pathname (assoluto o relativo alla home dell’utente usato) del file in questione su quella macchina. permettendo di ricevere sul proprio desktop le finestre delle applicazioni lanciate in remoto.arcfour. L’ammie nistratore pu` per` voler imporre delle restrizioni nell’accesso a certe macchine (in particolare o o si pu` disabilitare la possibilit` del forwarding delle sessioni X). Prima di entrare nei dettagli dei vari comandi occorre precisare che anche i client sono controllati da un file di configurazione.aes192-cbc. Una opzione interessante ` la possibilit` di specificare l’opzione -X. e Con il comando scp si pu` invece copiare un file da una macchina ad un’altra attraverso la o rete. Per scp ` di norma e disponibile anche un front-end con comandi simili a quelli di FTP. che e a abilita il forward della sessione X11. e di norma. La sintassi ha due forme. e per la copia dei file. la spiegazione delle stesse e i loro possibili valori sono riportati nella pagina di manuale accessibile con man ssh_config. Cos` se si vuole copiare un file da una macchina remota si potr` eseguire un comando del ı a tipo: . o a # Host * # ForwardAgent no # ForwardX11 no # RhostsAuthentication no # RhostsRSAAuthentication no # RSAAuthentication yes # PasswordAuthentication yes # HostbasedAuthentication no # BatchMode no # CheckHostIP yes # StrictHostKeyChecking ask # IdentityFile ~/. che possono essere sia di tipo RSA che e DSA.it:netadmin. Per maggiore sicurezza questa a chiave viene cambiata periodicamente (secondo quanto specificato per il server con il parametro di configurazione KeyRegenerationInterval). la cui sintassi.it:public_html/ che copia ricorsivamente il contenuto della directory gapil nella directory public_html della mia home sul server (che ` quella pubblicata su web tramite Apache). che ` quello che garantisce l’autenticit` e e a dell’identit` dell’utente. e Il comando richiede ovviamente l’immissione da terminale della password relative all’utente delle macchine a cui ci si collega.linux. come la possibilit` di creare delle sessioni in cui. in modo che solo chi possiede l’altra. dopo di che i due si potranno scambiare in maniera cifrata una chiave di sessione con cui sar` crittato tutto il successivo scambi di dati. la possibilit` a di utilizzare una autenticazione basata su chiavi crittografiche. Questo permette una serie di semplificazione dell’uso dei comandi. rispetto alla classica u e autenticazione con password identica a quella ottenibile su un terminale classico. dopo di che effettua la copia. diventa possibile evitare di riscriverla tutte le volte che si utilizza uno dei comandi ssh o scp. il pacchetto OpenSSH mette a disposizione un apposito programma per la creazione e la gestione delle chiavi. L’uso di chiavi asimmetriche permette il riconoscimento univoco di un utente. 8. una volta che questo dimostri di essere in possesso della chiave privata associata alla chiave pubblica usata del server come identificatore dello stesso. mentre l’opzione -r esegue una copia ricorsiva di intere directory. Per questo in genere si distribuisce una delle due chiavi della coppia.314 CAPITOLO 8. la chiave pubblica. l’opzione -p permette di preservare i tempi ed il modo del file originale. ciascun capo della connessione fornisce all’altro la propria chiave pubblica. LA GESTIONE DEI SERVIZI DI BASE scp piccardi@firenze. ssh-keygen. come risulta dalla pagina di manuale. mentre per effettuare un trasferimento in direzione opposta si potr` usare: a scp -r gapil [email protected] . Nel caso specifico il protocollo prevede comunque l’uso di chiavi simmetriche in fase di negoziazione della connessione via SSH.pdf dalla mia home sul server alla directory corrente. solo il reinvio del segreto decifrato ` garanzia che il client conosce la chiave privata. Nel caso di autenticazione a chiave quello che succede ` che il server invia al client un segreto e cifrato con la chiave pubblica dell’utente cui si vuole garantire l’accesso.3. che copia il file netadmin. ` la e seguente: ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment] [-f output_keyfile] ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile] ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile] . La trattazione della crittografia a chiave simmetrica va al di l` di quanto sia possibile affrontare in questo contesto. La tecnica utilizzata ` quella delle chiavi asimmetriche. la chiave privata possa decifrare i messaggi creati con la prima.3 Autenticazione a chiavi Una delle caratteristiche pi` interessanti del protocollo ` quella di consentire. Al solito per i dettagli su tutte le altre opzioni si pu` fare riferimento alla pagina di o manuale accessibile con man scp. basti sapere che le chiavi asimmetriche a sono generate in coppie e che un messaggio cifrato con una delle due chiavi pu` essere decifrato o solo dall’altra. data una a password all’inizio.linux. a Per poter utilizzare questa modalit` di autenticazione occorre anzitutto generare una coppia a di chiavi. che non pu` essere o letta senza di essa. e poi mantiene la chiave privata sbloccata in memoria. Per far questo occorre inserire la chiave pubblica della persona a cui si vuole dare l’accesso nel file . un comando del tipo: cat id_dsa. tutto quello che serve ` la presenza della e e coppia di chiavi. in formato codificato ASCII. dsa per chiavi DSA e rsa1 per il formato di chiavi RSA usato dal vecchio protocollo (la versione 1. la pubblica per l’utente che concede l’accesso.3. che deve essere fornita tutte le volte che la si deve usare. Si pu` specificare un nome diverso anche a riga o di comando usando l’opzione -f seguita dal nome del file. 4 . che di default ` nella directory . Questo ` imposto dallo stesso comando. con un nome che pu` essere id_dsa o e o id_rsa a seconda del tipo della chiave (o identity per le chiavi del vecchio protocollo). all’inizio di una sessione di lavoro. A questo punto per` ci si potrebbe chiedere l’utilit` di tutto questo armamentario. come accennato. Essa comunque deve essere protetta sia da lettura che da scrittura da parte di estranei.it Dunque la protezione della chiave privata ` essenziale. l’utilit` sta nel fatto che ` possibile usare un altro programma. per cui le singole righe sono di norma molto lunghe. che si o cura di aggiungere adeguatamente la chiave nell’authorized_keys di una macchina destinazione con: ssh-copy-id piccardi@oppish. dato che o a invece di una password per il login bisogna comunque inserire una passphrase per sbloccare la chiave pubblica. ed infine una passphrase che serve a proteggere l’accesso alla chiave privata.ssh/authorized_keys (si suppone di essere nella home dell’utente che da l’accesso) dove id_dsa ` la chiave dell’utente e che deve poter accedere. Il comando crea anche la rispettiva chiave pubblica.8. con lo stesso nome usato per quella privata ma con un . le chiavi sono mantenute una per riga. che non ha nessun uso nel protocollo. Il file pu` a o 4 per cui si deve effettuare l’aggiunta con contenere un numero imprecisato di chiavi pubbliche. esso viene di solito inizializzato alla stringa user@host e pu` essere cambiato con o l’opzione -c.pub terminale. e la privata per quello che deve accedere. Se non si specifica nient’altro il comando chiede il file in cui salvare la chiave.ssh nella home directory dell’utente. Si tenga presente che. e questo ` il motivo e e per cui essa viene protetta con una passphrase. ssh-agent. Il procedimento pu` essere eseguito direttamente con il comando ssh-copy-id. I dettagli sul funzionamento del comando e le restanti opzioni e u sono accessibili nella pagina di manuale con man ssh-keygen. a e che permette di sbloccare la chiave una sola volta. alla chiave o ` pure associato un commento. in questo caso essa viene effettuata solo sulla base della corrispondenza fra una chiave pubblica ed una chiave privata. per eseguire la creazione di una nuova coppia di chiavi occorre infatti specificare almeno il tipo di chiave con l’opzione -t. permettendone il successivo riutilizzo senza che sia necessario fornire di nuovo la passphrase.truelite. non ` necessario che il nome dell’utente sia lo stesso. Se si vuole cambiare la passphrase in un secondo tempo si pu` usare l’opzione -p. il valore di default. che si rifiuta di usare (stampando un clamoroso e avvertimento) una chiave privata leggibile da altri rispetto al proprietario. adesso in disuso perch´ e insicura). i possibili tipi di chiavi sono tre: rsa per chiavi RSA. chiunque ne venga in possesso e possa e utilizzarla ottiene immediatamente tutti gli accessi a cui essa ` abilitata. IL SERVIZIO SSH 315 Se invocata senza nessuna opzione il comando stampa un messaggio di aiuto.pub >> . Con l’opzione -l invece si pu` stampare la fingerprint della chiave (a scopo di o verifica). ` pi` che adeguato.ssh/authorized_keys posto nella home dell’utente per conto del quale si acceder`. 1024. Una volta creata la coppia di chiavi diventa possibile utilizzarla per l’autenticazione. e serve solo da identificativo e della chiave. infine l’opzione -b permette di specificare la lunghezza della chiave (in bit). mentre lo si deve lanciare esplicitamente nel caso di login da terminale.config le seguenti opzioni: CONFIG_NFS_FS=m CONFIG_NFS_V3=y CONFIG_NFSD=m CONFIG_NFSD_V3=y accessibili con make menuconfig dal men` File system nel sotto men` Network File System. Di norma ssh-agent viene lanciato automaticamente all’avvio delle sessioni grafiche. che permette ai processi di accedere a dei servizi (nella forma di chiamate a procedure esterne) in maniera trasparente rispetto alla rete. che per le sue peggiori prestazione ` comunque da e evitare.4 Il protocollo NFS Il protocollo NFS. ed ` basato sul sistema delle RPC (Remote Procedure e e Call ). Per poterlo usare occorre aggiungere una chiave privata con il comando ssh-add. a Per poter poter comunicare con ssh-agent i vari programmi usano la variabile di ambiente SSH_AUTH_SOCK che identifica il socket locale su cui esso ` in ascolto. sigla che sta a significare Network File System.316 CAPITOLO 8. in ascolto su una porta generica: un programma che lo voglia utilizzare deve prima rivolgersi al cosiddetto portmapper che registra i servizi attivi ed ` in grado di indicare la porta e su cui sono forniti. La variabile ` definita dallo stesso ssh-agent quando viene lanciato e (che la stampa anche sullo standard output). Si ricordi per` che le variabili di ambiente defininte o da un processo vengono viste soltanto nei processi figli (per questo la shell prevede il comando export). dopo di che tutti i e comandi verranno lanciati come client di esso cosicch´ questi possano interrogarlo tutte le volte e che ` necessario compiere una operazione con la chiave privata. pertanto quandi si lancia ssh-agent in console. LA GESTIONE DEI SERVIZI DI BASE L’idea ` che ssh-agent dovrebbe essere lanciato all’inizio di una sessione. in modo da non dover mai comunicare verso l’esterno la chiave privata. a 8. a a inviandola all’agent che da quel momento in poi potr` utilizzarla. Ciascun servizio ` fornito da un apposito e demone. questo chieder` la passphrase della chiave privata e la sbloccher`. fornendo ai richiedenti i risultati ottenuti. a ma fintanto che non si inserir` manualmente la variabile SSH_AUTH_SOCK nell’ambiente. ` stato creato da Sun per e permettere montare dischi che stanno su stazioni remote come se fossero presenti sulla nostra macchina.4. 8. La sola scelta che si pu` dover fare ` fra l’uso del supporto nel kernel o l’uso di una implementazioo e ne realizzata completamente in user-space.1 Il server NFS In genere tutte le distribuzioni prevedono i pacchetti per l’installazione di un server NFS. Si tenga presente che all’avvio il programma non ha nessuna chiave privata. passando solo attraverso la rete. cosa che vale in genere per i kernel a standard di tutte le distribuzioni. un meccanismo di intercomunicazione generico basato sui protocolli di trasporto (TCP e UDP). Per questo occorrer` avere abilitato il supporto nel kernel. e si pu` utilizzare un o o filesystem anche su una macchina senza dischi. non a potr` essere utilizzato. Sar` comunque ssh-agent ad e a eseguire le operazioni necessarie. Qualora si ricompili un kernel da soli occorrer` verificare che a siano abilitate in . In questo modo si pu` assicurare un accesso trasparente ai file. questo rester` attivo in background. u u Il protocollo NFS ` piuttosto complesso. . se questa non ` definita e e anche se il programma ` attivo l’autenticazione a chiavi non funzioner` (e si passer` direttamente e a a alla autenticazione normale). i campi successivi definiscono chi e come pu` utilizzarla. Di norma viene e e lanciato da rpc. 6 questa opzione ` disabilitata di default. il formato generale di una riga ` il seguente: a e /path/to/directory machine1(option11. /home/piccardi/share 192. il primo campo specifica la directory da condividere. e ` il demone che gestisce. ed utente sul client potr` avere accesso ai file solo qualora questi a corrispondano.statd rpc. Le opzioni principali riguardanti il comportamento del server sono quelle che permettono di impostare le modalit` di accesso ai file. oltre a portmap. la 111. Bench´ complicato da descrivere dal punto di vista funzionale un server NFS ` in genere e e molto semplice da configurare.option12) machine2(option21. quando sono attivate. realizzando le funzioni di accesso e al contenuto dei file. quando questo ` abilitato. IL PROTOCOLLO NFS 317 Il servizio del portmapper ` realizzato dal demone portmap. rw e ro. Fra parentesi tonde poi si possono specificare le modalit` di accesso. permessi. ` l’unico cui viene assegnata e e una porta definita. a rpc. utilizzando rispettiı vamente i relativi uid e gid.lockd ` il demone che svolge la gran parte del lavoro. come nell’esempio. concorrono ben altri cinque demoni: rpc. che a indicano rispettivamente lettura/scritture e sola lettura. che corrisponde al servizio chiamato sunrpc.statd.0/24(rw) Il file prende una serie di campi separati da spazi o tabulazioni.nfsd rpc.8. avvisando che sar` usata sync e a di default. Deve essere lanciato dopo che ` stato attivato portmap. ad esempio non ` desiderabile o e attenzione quindi a non specificare le opzioni inserendo uno spazio fra il nome della macchina e le parentesi che le delimitano. sia una singola stazione.168.rquotad ` il demone che permette. Deve essere e lanciato dopo che sono stati attivati rpc. e ecc.4. e ` il demone che gestisce le caratteristiche dei file come tempi di accesso. di gestire le quote sul filesystem e di rete. un esempio del file ` il seguente: a e # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. infatti il protocollo associa i file agli utenti ed ai gruppi cos` come sono impostati sul server.option22) dove il separatore ` costituito dallo spazio.nfsd in caso di necessit`. In alcuni casi per` occorrono delle eccezioni. in tal caso infatti esse verrebbero considerate come un nuovo indirizzo. Deve essere lanciato dopo che ` stato attivato portmap. e quelle che ne governano la risposta in reazione a richieste di scrittura. come sync che richiede che la scrittura dei dati su disco sia completata prima di concludere una risposta.5 e Le opzioni sono suddivise in due gruppi: quelle generali.6 Quando si esporta una directory si pone il problema dell’accesso ai file. che una rete (usando la notazione CIDR) si possono usare anche indirizzi simbolici (che in questo caso devono poter essere risolti) nel qual caso si possono usare i caratteri wildcard “*” e “?” per esprimere i nomi. il file locking.1. 5 . See exports(5). e tutto quello che c’` da configurare ` il file /etc/exports e e che definisce su ciascuna macchina quali sono le directory da esportare verso l’esterno e chi ha la facolt` di utilizzarle. Si pu` o o specificare. in quanto in caso di crash del server le modifiche andrebbero perse. Infatti di norma il servizio viene avviato automaticamente dagli script di avvio installati dai pacchetti. e Il comando exportfs notifica se nessuna di queste due opzioni ` stata impostata. rpc.nfsd e rpc.nfsd e rpc. ed async che permette una risposta immediata con una scrittura dei dati asincrona.statd. Al funzionamento di NFS. relative al funzionamento del server e quelle di mappatura degli utenti.mountd ` il demone che gestisce le richieste di montaggio del filesystem. Deve essere lanciato dopo che sono stati attivati rpc. Infine con l’opzione -u si pu` rimuovere uno dei filesystem esportati. per abilitare in /etc/hosts. l’elenco completo delle opzioni ` riportato nella pagina di manuale accessibile con man exports... impostare sempre una politica di accesso negato di default per tutti i demoni.] -r [-v] [-av] -u [client:/path . quindi onorano le restrizioni descritte in sez.1. come descritta dalla pagina di manuale `: e /usr/sbin/exportfs /usr/sbin/exportfs /usr/sbin/exportfs /usr/sbin/exportfs [-avi] [-o options. Si tenga conto infine che i vari demoni che forniscono il servizio hanno il supporto per i TCP ` wrapper.6.318 CAPITOLO 8. invece di indicare un dispoe sitivo baster` indicare l’indirizzo (simbolico o numerico) del server seguito da : e dalla directory a che si vuole montare (che dovr` essere presente e accessibile nel file /etc/exports del server).3.allow gli accessi alle stesse macchine riportate in /etc/exports..6: Possibili opzioni per le directory esportate tramite NFS nel file /etc/exports.2 NFS sul lato client Per poter utilizzare NFS sul lato client occorrer` avere il supporto nel kernel. Inoltre si deve avere una versione sufficientemente recente del comando mount che sia in grado di montare un filesystem NFS. La o sintassi del comando. LA GESTIONE DEI SERVIZI DI BASE che l’amministratore di un client sia trattato come root anche nell’accesso ai file del server. Per questo motivo di default ` attiva l’opzione root_squash che rimappa gli uid e gid 0 usati e dall’amministratore (root) sul valore 65534 (−2). Montare un filesystem NFS ` comunque estremamente semplice. I o dettagli si trovano al solito nella pagina di manuale. 8.4. mentre con -o si possono cambiare le opzioni. ed oltre a portmap a dovranno essere attivi i due demoni rpc. 8..] [client:/path . in quanto con l’installazione dei relativi pacchetti tutte le distribuzioni si curano che siano avviati tutti i servizi necessari.lockd. I nomi delle opzioni principali ed il relativo significato sono riportati in tab. accessibile con man exportfs. Come per il lato server di norma l’utilizzo ` molto semplice e si esaurisce nel montare il e filesystem remoto sulla directory prescelta. visto la delicatezza del servizio fornito.statd e rpc. qualora si modifichi /etc/exports si pu` usare il comando exportfs -r per o sincronizzare la tabella dei filesystem esportati con i contenuti del file. e Opzione rw ro async sync root_squash no_root_squash all_squash anonuid anongid Significato accesso in lettura e scrittura accesso in sola lettura abilita la scrittura asincrona sul server esegue le scritture in maniera sincrona rimappa l’uid ed il gid 0 non rimappa l’uid ed il gid 0 mappa tutti gli uid e i gid imposta l’uid usato per l’accesso anonimo imposta il gid usato per l’accesso anonimo Tabella 8. Per controllare i filesystem che si sono esportati si pu` usare il comando exportfs. corrispondente rispettivamente a nobody e nogroup. 8. E buona norma. a Se si vuole eseguire il comando a mano baster` eseguire mount con una sintassi del tipo: a [piccardi@hogen]# mount -t nfs havnor:/home/piccardi/share /mnt/nfs Si pu` poi definire un mount point permanente in /etc/fstab aggiungendo una riga del o tipo: .] [-v] Di norma vengono esportati tutti i filesystem elencati in /etc/exports con il comando exportfs -a. noauto 0 0 319 dove la differenza con un filesystem su disco ` l’uso di nfs come filesystem type e l’indirizzo della e directory da montare al posto del file di dispositivo. Per ulteriori dettagli riguardo il protocollo e le opzioni pi` avanzate si possono consultare le u pagine di manuale dei vari comandi e file di configurazione. la risoluzione dei nomi. prevede pertanto permessi e proprietari dei file. Pertanto se sul client l’utente relativo non esiste o ha un user-id diverso (cosa possibile.5 La condivisione dei file con Samba La suite Samba ` un insieme di programmi che permette ad una macchina Unix di utilizzare e il protocollo di comunicazione SMB (Service Message Block ) dei server Windows. La sintassi ` quella dei file e . smbd che e implementa la condivisione dei file e delle stampanti e nmbd che implementa i servizi NetBIOS (cio` il riconoscimento della presenza di server sulla rete. e L’avvio del servizio ` generalmente curato dagli opportuni script di avvio creati in fase di ine stallazione del pacchetto.conf. preso dalla installazione di una Debian. a a Pertanto l’uso di NFS richiede una certa cura nella gestione di utenti e gruppi. ed attualmente ` e e implementato direttamente su TCP/IP.d/samba.exec. ma viene supportata pure la sintassi dei commenti inizianti per # di Unix. ecc. che ciascuna distribuzione inserisce all’interno del proprio meccanismo di boot.ini di Windows.5.5. Si tenga infine conto di un problema che pu` sorgere con l’uso di NFS. e Entrambi di demoni vengono configurati tramite il file smb. ` il seguente: e [global] # Do something sensible when Samba crashes: mail the admin a backtrace panic action = /usr/share/samba/panic-action %d printing = bsd printcap name = /etc/printcap load printers = yes guest account = nobody invalid users = root security = user workgroup = WORKGROUP server string = %h server (Samba %v) socket options = IPTOS_LOWDELAY TCP_NODELAY SO_SNDBUF=4096 SO_RCVBUF=4096 encrypt passwords = true passdb backend = tdbsam unixsam dns proxy = no unix password sync = false [homes] comment = Home Directories browseable = no read only = yes create mask = 0700 directory mask = 0700 [printers] . a questo livello il protocollo ormai ` in disuso. Il protocollo supporta o un filesystem di rete di tipo Unix.).8. 8.1.1 La configurazione di Samba come server L’implementazione dei servizi SMB ` realizzata da Samba attraverso due demoni. il problema ` e che i proprietari dei file sono riconosciuti sulla base degli user-id definiti sul server. Un estratto di questo file.1:/home/piccardi/temp /mnt/nfs nfs user. e si avranno problemi. LA CONDIVISIONE DEI FILE CON SAMBA 192. Nel caso di Debian ad esempio questo ` gestito dallo script /etc/init.168. Originariamente il servizio veniva fornito attraverso il protocollo proprietario NetBIOS usato da Windows come protocollo di trasporto. se non si sono creati gli utenti nella stessa sequenza) la titolarit` dei file non corrisponder`. 8. conf. La sezione [printers] ha lo stesso scopo della sezione [homes]. I client infatti (come semplici client Windows) non sono in grado di inviare password con un hash in formato UNIX. In caso di connessione prima vengono controllate le altre sezioni definite. ad esempio si e potr` inserire in coda al file mostrato in precedenza una ulteriore sezione del tipo: a [foo] path = /home/bar browseable = yes read only = no in questo modo gli utenti potranno accedere ad uno share denominato foo corrispondente alla directory /home/bar. ma servono ad impostare alcune funzionalit` generiche. ed ` pertanto impossibile eseguire e un confronto diretto con il contenuto di /etc/passwd.320 comment = All Printers browseable = no path = /tmp printable = yes public = no writable = no create mode = 0700 CAPITOLO 8. se non viene trovata una sezione esplicita corrispondente alla stampante cercata. La sezione [global] permette di impostare i parametri che si applicano al server nel suo insieme. Se l’utente esiste ed ` stata data una e password corretta viene creato al volo il corrispondente share con le caratteristiche impostate in questa sezione. di norma nel file fornito dai pacchetti di installazione. ciascuna delle e quali descrive una risorsa condivisa attraverso SMB (quello che viene chiamato uno share). [homes]. Le opzioni fondamentali sono workgroup che definisce il nome del dominio NT in cui figurer` la macchina e security che definisce le modalit` di accesso al server (e pu` assumere i a a o valori user. Una spiegazione dettagliata va al di l` dello scopo di questo corso. altrimenti diventa necessario creare l’opportuno supporto perch´ Samba possa e mantenere gli utenti e relative password. In tab. 8. Gli altri due valori servono quando si vuole dirottare la richiesta di autenticazione. a meno che non si a sia indicata una ulteriore riga del tipo guest ok = yes. ma vale per le stampanti. L’accesso richieder` un username ed una password. nel qual caso sar` consentito l’accesso a . LA GESTIONE DEI SERVIZI DI BASE Il file ` diviso in sezioni distinte introdotte da un nome in parentesi quadra. All’interno di una sezione i a vari parametri sono impostati con direttive del tipo parola chiave = valore. 8. L’elenco completo di tutti i parametri ` e descritto in dettaglio nella sezione PARAMETERS della pagina di manuale di smb. nel qual caso ` il server ad operare il confronto. e qualora non sia stata trovata nessuna corrispondenza la sezione richiesta viene trattata come un username da controllare sul file delle password locali. nel qual caso si pu` usare share) si utilizza come valore user che richiede che esista un utente Unix o per ciascun utente che si collega al server. Sono per` previste tre sezioni speciali. di norma (a meno di non avere un accesso anonimo. share. e [printers] che non corrispondono a o degli share. Tutto questo funziona in maniera immediata solo quando si ` impostato il parametro encrypt e password a false.5.2. Torneremo e sull’autenticazione degli utenti in sez. Viene comunque usata l’autenticazione degli accessi appena esposta. server e domain). viene esaminato il file /etc/printcap per verificare se contiene una stampante con il nome richiesto.7 sono riportati le altre opzioni principali. ed in caso positivo viene creato al volo il relativo share. la cosa diventa possibile solo quando la password viene inviata in chiaro. Per aggiungere uno share ` pertanto sufficiente definire una nuova sezione. vengono impostati valori ragionevoli adatti agli usi pi` comuni. [global]. u a La sezione [homes] quando dichiarata permette di creare al volo degli share corrispondenti alle home degli utenti. Specifica l’utente utilizzato per l’accesso ospite (cio` sene za autenticazione). Di norma si specifica sempre root. In ogni caso gli effettivi permessi disponibili su /home/bar saranno quelli previsti dal sistema per l’utente con cui ci si ` connessi. Di norma si usa nobody che non ha nessun privilegio (in certi casi questo non consente l’uso delle stampanti). ad esempio abbiamo visto in sez. Il comando smbstatus inoltre permette di controllare lo stato delle connessioni. Quando il server ` usato per la risoluzione dei nomi.5. Se specificato il server tenta di sincronizzare le password UNIX quando si ` cambiata nel file smbpasswd. passa e le richieste non risolte al DNS. L’uso della direttiva browseable = yes permette di far apparire il nuovo share nella lista pubblica mostrata dal Network Neighborhood di Windows. Se attivato necessita la presenza dell’autenticazione basata sul file smbpasswd. senza password. il server non pu` in nessun caso garantire maggiori permessi e o di quelli forniti dal sistema.7: Significato dei parametri globali per Samba. con l’utente specificato da guest user. Definisce il gruppo di lavoro di cui il server far` para te (quello che ` il nome di dominio NT. l’impostazione di default ` true in quanto corrispondente e al rispettivo default di Windows 98 e NT. 8. o Per maggiori informazioni si pu` consultare il Samba-HOWTO. Il pacchetto Samba mette comunque a disposizione alcuni programmi di controllo come testparms. 8. ad esempio impostando read only = yes. detto anche e workgroup name).conf. pu` invece ridurli.2 L’impostazione degli utenti Abbiamo gi` accennato come uno dei servizi forniti da Samba sia quello della autenticazione a degli utenti. questo si sovrappone in maniera spesso non banale con lo stesso servizio fornito dal sistema di autenticazione nativo di Linux. Indica un server per la risoluzione dei nomi NetBIOS usati dal protocollo. Indica la lista delle stazioni da cui ` possibile connettersi e al server. Specifica la lista dei supporti vengono mantenute le password.1 riguardo la necessit` di inviare in chiaro le password. se si vuole che l’autenticazione degli share creati a automaticamente nelle home directory degli utenti sia eseguita contro il file /etc/passwd. Il a valore di default ` user che richiede un username ed una e ` password per garantire l’accesso.5.conf. E necessaria la presenza di un corrispondente utente sulla macchina. pertanto ` opportuno abilitare e e . che esegue una rapida analisi del file di configurazione per rilevarne eventuali errori. come impostati nella sezione [globals] di /etc/smb. Specifica delle opzioni relative al comportamento del sistema nei confronti della rete. LA CONDIVISIONE DEI FILE CON SAMBA Parametro security Significato Il parametro stabilisce le modalit` di accesso al server. e Indica se supportare la risoluzione dei nomi NetBIOS di NT. Utilizza una autenticazione basata su password cifrate. tutti i dettagli della confio gurazione sono documentati nella pagina di manuale di smb. 321 workgroup encrypt passwords guest account invalid users socket options passdb backend dns proxy unix password sync wins support wins server host allow Tabella 8. Una lista di utenti che per conto dei quali non si pu` o utilizzare il servizio.8. Inviare password in chiaro sulla rete non ` mai una buona cosa.5. che dovr` semplicemente cercare fra le risorse di rete i servizi messi a disposizione dal a server Samba. La suite per` comprende anche alcuni programmi per poter utilizzare da GNU/Linux i servizi o presenti su un server Windows (o un’altro server Samba. La sintassi del comando come riportata dalla pagina di manuale. questo per` comporta che sia il server a dover effettuare da o solo l’autenticazione. anche se in questo caso sarebbe pi` u opportuno utilizzare le applicazioni native Unix). che permette di connettersi ad un server SMB con una ine terfaccia simile a quella di FTP. Il primo programma ` smbclient. Pertanto a l’amministratore dovr` inserire i singoli utenti a mano con comandi del tipo: a smbpasswd -a utente il comando chieder` la nuova password (due volte per evitare errori di battitura) ed aggiunger` a a l’utente. Al solito l’elenco completo delle opzioni (il a comando consente pure di cambiare la propria password su un server remoto e quella sul LDAP) ` disponibile nella pagina di manuale. `: e smbclient servicename [ password ] [ -b <buffer size> ] [ -d debuglevel] [ -D Directory ] [ -U username ] [ -W workgroup ] [ -M <netbios name> ] [ -m maxprotocol ] [ -A authfile ] [ -N ] [ -l logfile ] [ -L <net. L’opa zione -a che permette di aggiungere un utente. identificati da lettere fra parentesi quadra e infine la data di ultima modifica della password. all’interno dell’opportuno supporto. che viene u e abilitato specificando come valore del parametro di configurazione passdb backend il valore smbpasswd. il pi` semplice ` l’uso del file smbpasswd. nel qual o caso dovr` comunque fornire quella precedente. che in macchine con e molti utenti permette di velocizzare notevolmente le operazioni di scansione. LA GESTIONE DEI SERVIZI DI BASE sempre l’uso delle password cifrate. ed i singoli utenti devono essere aggiunti al sistema. per questo dovr` essere in a grado di mantenere un elenco di utenti e password in maniera indipendente da quello del sistema ospite. il primo campo specifica il nome utente ed il secondo il suo uid. possono essere usate solo dall’amministratore. I supporti per l’autenticazione sono vari.tdb e si dovr` indicare per passdb backend il valore a ` tdbsam. che devono corrispondere agli analoghi in passwd. il formato del file ` analogo a quello di passwd. e 8. Un secondo supporto possibile ` quello di un piccolo database binario. Questo file contiene gli hash in formato Windows delle password di ciascun utente che cerca di collegarsi al server. che deve essere gi` presente nel sistema. L’utente normale pu` usare lo stesso comando per modificare la sua password. con un protocollo compatibile con Windows. E infine usare come supporto LDAP. seguono due hash crittografici in formato diverso. in tal caso i dati verranno memorizzati nel file passdb. accessibile con man smbpasswd. Lo stesso vale per -n che permette di impostare una password nulla.bios name> ] [ -I destinationIP ] [ -E ] [ -c <command string> ] . Il formato ` descritto in dettaglio nella pagina di e manuale accessibile con man 5 smbpasswd. cos` come l’opzione -x che lo cancella. nel qual caso il valore da usare ` ldapsam.3 L’uso di Samba dal lato client L’uso principale di Samba ` permettere la condivisione di file e stampanti su una macchina e Unix da parte di client Windows. e -e e ı -d che rispettivamente lo abilitano e disabilitano temporaneamente. Non essendo infatti possibile ricavare la password degli stessi dall’hash mantenuto in /etc/passwd non esiste una modalit` di “replicazione” automatica dei contenuti di quest’ultimo. poi dei flag per l’account.322 CAPITOLO 8. e Di norma la creazione del file di supporto per l’autenticazione deve essere eseguita esplicitamente dall’amministratore di sistema. una riga per e ogni utente con campi separati da ":".5. Da questo punto di vista Samba ` completamente trasparente e all’utente. a L’opzione principale ` -U che permette di specificare il nome utente (relativo al server) e con il quale ci si vuole connettere al servizio. che riporta anche vari esempi. mentre il mount point ` una qualunque directory locale. . Richiede il supporto nel kernel del filesystem SMB (di solito presente in tutte le distribuzioni standard. Per i dettagli relativi alle altre opzioni si pu` o fare riferimento alla pagina di manuale. service si specifica nella stessa forma //server/service usate e per smbclient. l’opzione pi` importante ` username che permette di specificare. Un o analogo comando smbumount permette di smontare un filesystem smbfs.5. e comunque attivabile nella sezione Network filesystem dei men` di configurazione). che permette di montare uno share di Windoe ws all’interno del filesystem di Linux. Per i dettagli si pu` consultare la pagina di manuale accessibile o con man smbmount. accessibile con man smbclient. Le opzioni sono sempre e nella forma keyword=valore. La sintassi del comando `: u e smbmount service mount-point [ -o options ] ma lo si pu` invocare indirettamente attraverso mount specificando l’opzione -t smbfs. u e nella forma user/work-group%password. utente.8. LA CONDIVISIONE DEI FILE CON SAMBA 323 [ -i scope ] [ -O <socket options> ] [ -p port ] [ -R <name resolve order> ] [ -s <smb config file> ] [ -T<c|x>IXFqgbNan ] dove in generale servicename ` specificato nella forma //server/service e la password pu` e o essere omessa nel qual caso sar` richiesta all’esecuzione del comando. Un altro comando importante ` smbmount. La sintassi ` molto semplice. workgroup e relativa password con la quale accedere allo share di Windows. LA GESTIONE DEI SERVIZI DI BASE .324 CAPITOLO 8. in corrispondenza a ciascun livello. sempre nella cache.it il server si dovr` rivolgere a quelli che e e a sono chiamati i root DNS. e come gi` accennato e a in sez. . 9. la risoluzione dei nomi era fatta scaricando su ogni macchina un singolo file che conteneva tutte le corrispondenze fra numeri IP ed nomi. il cui scopo era quello e di poter distribuire il compito di associare un indirizzo simbolico ad uno numerico. passandole attraverso una gerarchia di server.it) ecc. o e Il meccanismo con il quale viene eseguita la risoluzione di un nome a dominio. distribuito su un gran numero di nameserver a (si chiamano cos` i server che rispondono alle richieste del protocollo). 7. nel qual caso risponde immediatamente.1. ı Alle origini. altrimenti va a cercare. Col crescere della rete questo approccio ` rapidamente divenuto insostenibile.it n´ per . ecc. in cui o non sa a chi chiedere n´ per . descrivendone le caratteristiche generali ed una serie di programmi diagnostici usati appunto per eseguire interrogazioni su questo servizio. se ha l’indirizzo di uno dei server che gli pu` rispondere. La ricerca avviene quindi ricorsivamente. e non tanto e non solo per le dimensioni crescenti del file.com. ad esempio sources. truelite.it. e di eseguirlo in maniera veloce ed efficiente. e sa per` qual’` il server del livello successivo a cui reinviare la richiesta. Nella peggiore delle ipotesi. Il funzionamento del DNS ` sostanzialmente basato su un meccanismo chiamato delegazione: e si sfrutta la suddivisione gerarchica dello spazio dei nomi. Per questo ` stato creato il protocollo del DNS. con una scansione dell’albero dei domini: alla radice si contatter` un root DNS chiedendogli chi ` il server responsabile per il dominio di a e primo livello . . ` il seguente: quando ci si rivolge ad un nameserver (ad esempio quello e del provider) questo controlla anzitutto se ha in cache la risposta.Capitolo 9 Il servizio DNS 9. che permettono di risolvere i domini di primo livello. per distribuire il carico delle richieste di risoluzione. A e 325 . quando internet era piccola e le macchine erano poche.1 Il funzionamento del servizio DNS In questa prima sezione ci occuperemo di introdurre i meccanismi di funzionamento del servizio DNS.6 si tratta in realt` di un enorme database. salendo lungo la gerarchia dei domini.org.truelite. La lista degli indirizzi IP di questi server ` pubblicata ed aggiornata periodicamente ed ogni server DNS deve e sempre essere in grado di contattarli. in domini di primo livello (i . I domini di primo livello sono definiti a livello internazionale dalla cosiddetta naming authority.it. in cui.truelite.1 Introduzione Il DNS ` uno dei protocolli fondamentali per il funzionamento di internet.) di secondo livello (google. e la lista dei relativi nameserver ` mantenuta direttamente nei root DNS. un server che non ` in grado di rispondere alla richiesta.org.com. quanto per la quasi impossibilit` di a mantenerlo aggiornato. softwarelibero.it. Ovviamente questo ha u anche un costo. Tipo A NS CNAME SOA PTR MX TXT AAAA SRV Descrizione una corrispondenza nome – indirizzo IP un nameserver per la zona nome alternativo (un alias ad un altro nome) inizio zona per il quale si ha autorit` a una corrispondenza indirizzo – nome un server di posta un commento o altro testo una corrispondenza nome – indirizzo IPv6 la locazione di un servizio noto Tabella 9.2 I comandi host e dig Il comando host permette di interrogare un nameserver. evitando di ripetere pi` volte le stesse operazioni. in quanto alla fine ` il e responsabile di ciascun dominio finale a dover mantenere un DNS che contenga le informazioni relative alle sue macchine. In tutti questi passaggi il server DNS che avete interrogato memorizzer` le varie informazioni nella sua cache.truelite.it. in modo da evitare una ulteriore richiesta ai a root DNS se ad esempio volete risolvere www. a seconda che provengano direttamente dal nameserver che ha l’autorit` per quella a richiesta o dalla cache di un qualche altro server. e questi a loro volta a quelli di secondo livello e cos` via. o con tempi pi` o meno rapidi a seconda di quanto impostato.truelite.it.1: Descrizione ed identificativo per alcuni tipi di record usati dal protocollo DNS.it al DNS di primo a livello appena trovato.1. le informazioni che dicono se esistono altri nameserver per domini di livello inferiore. sar` in grado di indicarvi qual’` il server DNS responsabile per . Per questo motivo esistono vari tipi di record che possono essere gestiti inseriti in un DNS.truelite.it. come il server che riceve la posta inviata ad un dominio.326 CAPITOLO 9. Per questo tutte le informazioni del DNS sono corredate da un tempo di scadenza. la risposta a richieste come sources. IL SERVIZIO DNS questo punto la scansione proseguir` ripetendo la richiesta per . in quanto se viene eseguito un cambiamento in una associazione nome-indirizzo questo non verr` visto dagli altri server fintanto che c’` un’altra associazione valida nella loro a e cache. un elenco dei principali tipi ` e riportato in tab. da impostare opportunamente a seconda delle frequenze con cui esso pu` cambiare. 9. In generale i server di livello pi` alto non conoscono.it a cui chiedere la a e risoluzione di sources. ı Questo meccanismo introduce anche una distinzione fra le risposte. perch´ delegano l’autorit` per e a le varie zone di cui ` composto il dominio ad altri server. che sono dette autoritative o meno. Si tenga presente inoltre che il protocollo DNS permette di inserire in questo database distribuito vari tipi di informazione. a meno che questa non sia nella u loro cache. Cos` i root DNS delegano l’autorit` per i domini ı a di primo livello ai relativi nameserver. Il concetto fondamentale del protocollo del DNS ` quello delle cosiddette zone di autorit`. ecc. che permettono. La sintassi del comando. e a cio` delle parti dello spazio dei nomi di dominio per i quali un singolo nameserver ha una risposta e diretta.softwarelibero. corrispondenze con indirizzi diversi da quelli IP (ad esempio indirizzi IPv6).1. Inoltre il meccanismo del caching dei risultati permette di aumentare l’efficienza della ricerca. Questo meccanismo permette di distribuire in maniera efficace il compito di fornire le risposte e di mantenere aggiornata la corrispondenza fra nomi ed indirizzi IP. di propagare i cambiamenti su tutta u la rete. essendo compito di questo server conoscere tutti quelli di secondo livello. un elenco completo si pu` trovare nella pagina di manuale del comando o host. cos` come ` ı e riportata nella pagina di manuale ` la seguente: e . 9. che a loro volta possono effettuare e ulteriori delegazioni per quanto loro assegnato.truelite. 107 e si noti come in questo caso il nome riportato sia picard.linux.linux.linux.1.it serverone. Ad esempio se vogliamo vedere chi riceve la posta nel dominio firenze.107 che ci dice che l’indirizzo www.linux.it www..linux.18 si ottiene di nuovo lo stesso numero.conf).it picard. o e In genere l’uso pi` comune del comando ` per verificare che l’impostazione della configurau e zione del resolver funzioni davvero.177. dato che la macchina che ospita il sito dell’Associazione Software Libero ` la stessa.it A 62. relativo al nome richiesto. che ci reinvia al nome principale della macchina.linux. un esempio del comando `: e [piccardi@havnor piccardi]$ host www.9.1.it ` un alias (infatti il tipo di record ` CNAME) al e e precedente. Accade spesso infatti che la rete funzioni.] host [options] -X server [name .firenze.124. che ` diverso da www.it firenze..linux.107.] e come si pu` notare il comando ` in grado di effettuare diversi tipi di interrogazione.linux.linux.110.it.it MX 5 mail.softwarelibero.softwarelibero.prato. In realt` si possono avere anche a pi` nomi associati allo stesso indirizzo..linux.1.linux.it A 195.110.linux.it CNAME serverone.it A 195.124.it possiamo usare: [piccardi@havnor piccardi]$ host -t MX firenze.linux.1.linux.firenze.linux.it www.107 Name: picard.linux.it www.1.firenze. ad esempio se cerchiamo: u [piccardi@havnor piccardi]$ host www. e L’output del comando mostra anche il tipo di record restituito.linux.it firenze. ad esempio anche interrogando con: [piccardi@havnor piccardi]$ host www. ma non si riesca a fare nulla perch´ gli indirizzi simbolici non vengono risolti (ad esempio si ` sbagliato ad indicare e e il nameserver in resolv. si pu` cio` trovare l’indirizzo simbolico a partire da quello numerico con: o e [piccardi@havnor piccardi]$ host 62. in cui per querytype si possono usare i tipi mostrati in tab.it Address: 62.firenze.177. nel caso un record di tipo CNAME.it .. ed un record di tipo A per quest’ultimo che lo associa al relativo indirizzo.linux.firenze.it CNAME picard.linux.177. e in quanto riporta una macchina specifica all’interno del dominio. Si tenga presente che ad un solo IP possono essere associati diversi nomi relativi a domini completamente scorrelati.1. Il comando funziona anche alla rovescia.it ` risolto come corrispondente all’IP 62.18 vediamo che l’indirizzo www.it MX 666 lorien.it. e Il comando host permette di richiedere esplicitamente anche gli altri tipi di record usando l’opzione -t querytype per indicare il tipo di record voluto.177. 9.firenze. IL FUNZIONAMENTO DEL SERVIZIO DNS host host host host host [-v] [-v] [-v] [-v] [-v] [-a] [-t querytype] [options] name [server] [-a] [-t querytype] [options] -l zone [server] [options] -H [-D] [-E] [-G] zone [options] -C zone [options] -A host 327 host [options] -x [name . Oltre ai domini il programma ` in grado di elencare tutti i record relativi ad una determinata zona. 9. che possono essere utilizzati per avviare e fermare il servizio con i soliti parametri standard. 9.d/rc.inet2 Tabella 9. il servizio del DNS viene fornito attraverso un opportuno demone. e mantenuto dall’Internet Software Consortium. se si vuole lasciare il programma attivo.2. che indicano i server di posta del dominio. ` la seguente: e named [-d debuglevel] [-p port#] [-(b|c) config_file] [-f -q -r -v] [-u user_name] [-g group_name] [-t directory] [-w directory] [config_file] per una descrizione delle opzioni si pu` consultare la stessa pagina di manuale. Distribuzione Debian RedHat Slackware Comando /etc/init. come riportata dalla pagina di manuale.328 CAPITOLO 9.d/named /etc/rc.2 La gestione di un server DNS In questa sezione prenderemo in esame la gestione di un server DNS. quella di bind.conf. per cui restituisce l’elenco dei root DNS. scritto u e e originariamente da Paul Vixie.d/init. Il comando dig ha sostanzialmente le stesse funzionalit` di host. ` attualmente e giunto alla versione 9. e La differenza con host ` che il comando restituisce l’output completo inviato dal nameserver. usando ANY come tipo (o direttamente l’opzione -a) si avranno tutti i record di quel dominio.. A livello internazionale (si ricordi quanto detto in sez. inoltre dig pu` essere usato in batch (cio` in forma non interattiva) o e con l’opzione -f file per permette di effettuare le ricerche leggendo i comandi da un file.1 Il server named Essendo un protocollo implementato a livello di applicazione. 9. di norma ` o e sufficiente lanciare il programma senza opzioni.2: Script di avvio del server DNS nelle varie distribuzioni. Il programma ` parte del pacchetto bind. Nei casi in cui.d/bind /etc/rc. Il server DNS pi` diffuso ` il programma named. come riportata a dalla pagina di manuale `: e dig @server name type dove server indica il server DNS da interrogare name il nome della risorsa che si vuole cercare e type il tipo di record da cercare (al solito con i valori di tab.1). la sintassi. che detiene comunque la quasi totalit` a delle installazioni dei server DNS su tutta internet. riportati in tab. Di norma viene anche automaticamente inserito in tutti i runlevel e lanciato all’avvio dal sistema di inizializzazione di System V. 9.4) ` e stato assegnato al protocollo la porta 53 (sia UDP che TCP) per rispondere a delle interrogazioni. concentrandoci in particolare su una implementazione particolare. Il programma e viene lanciato dagli opportuni script di avvio. la sintassi. e e non solo il campo richiesto. il tipo ` A e ed il nome ` . IL SERVIZIO DNS che ci risponde restituendo i record MX. 7. per effettuare delle prove. Se non si fornisce nessun argomento il comando sottintende che i server sono quelli specificati in resolv.2. nel qual caso saranno usate le configurazioni standard. si pu` usare l’opzione -f che evita che vada o . i dettagli e sono riportati nella pagina di manuale.2. L’installazione del pacchetto bind ` prevista da tutte le maggiori distribuzioni. si vuole lanciare a mano il programma. include "/etc/bind/named. usandole entrambe si avr` o a tutta la diagnostica a schermo invece che in un file di log. ` necessario avere i privilegi di e e amministratore. // reduce log verbosity on issues outside our control logging { category lame-servers { null.conf. Conviene inserirla in un file a parte (ad esempio in Debian ` mantenuta in e /etc/bind/named. che ne indica la conclusione. ` riportato di seguito: e // // // // // // This is the primary configuration file for the BIND DNS server named. che nel corso delle ulteriori operazioni non sono pi` necessari. permette di impostare alcune propriet` generali del server ed i default per le altre a direttive.conf.conf. LA GESTIONE DI UN SERVER DNS 329 in background. senza privilegi speciale. Un esempio dell’inizio del file named. o altre configurazioni) e mantenere separatamente le varie parti. ripreso dal file installato dal pacchetto bind su una distribuzione Debian Sid. definisce le modalit` con cui le varie informazioni vengono inviate sui file di log o al a sistema del syslog. dopo aver effettuato l’inizializzazione dello server1 per le normali operazioni del DNS. si tenga presente che le due direttive logging e options possono comparire soltanto una volta. *BEFORE* you customize this configuration file. 9. che permette di usare un utente dedicato. In questo modo diventa possibile dividere le varie configurazioni (ad esempio le zone per diversi domini. ma viene utilizzata anche la sintassi del C e del C++ con blocchi delimitati da /* */ o inizianti per //.options".2 Il file named. L’utente dipende dalla distribuzione e dall’installazione che si ` e effettuata.options) da includere con include. options logging zone la lista completa e i vari dettagli relativi a ciascuna direttiva possono essere trovati nella pagina di manuale accessibile con man named. mentre con -d si pu` impostare il livello di debug. Una lista dei principali comandi che si possono utilizzare all’interno di named. Please read /usr/share/doc/bind/README.2. }. di solito si trova questo file in /etc/named o e in /etc/bind/ (se non direttamente sotto /etc) a seconda delle distribuzioni. che a loro volta possono contenere blocchi di ulteriori sottocomandi racchiusi fra parentesi graffe. viene usata per definire una zona del DNS e le modalit` con cui vengono utilizzate a le relative informazioni. che ` una delle porte riservate.9. come se questo fosse stato scritto direttamente dentro named.conf. Anche i e commenti possono essere introdotti dalla usuale #. dovendo porsi in ascolto sulla porta 53.conf e del loro significato generico ` la seguente: e include include il contenuto di un altro file di configurazione. ogni comando ` terminato da un . Il file ha una sintassi abbastanza complessa e simile a quella dei programmi in C.2.conf.1 and later.2.conf. il file contiene una serie di comandi. Una zona serve ad identificare una parte di nomi di dominio per il quale il server deve eseguire delle azioni specifiche. u 1 .Debian for information on the structure of BIND configuration files in Debian for BIND versions 8.conf Il file di configurazione di named ` named. Di norma il programma viene lanciato usando l’opzione -u. questo viene fatto dal comando options. in questo caso si ha una zona di tipo hint che dice semplicemente a chi richiedere le informazioni relative a quella zona.2. oltre alla zona per i root DNS.. avremo che: . In generale. La modalit` pi` semplice ` quella di un a u e caching DNS.net/domain/named.conf una zona apposita. i file di configurazione sono preimpostati per la risoluzione del localhost. 9.2) o o scaricato direttamente all’indirizzo ftp://ftp. In questo caso il file ` /etc/bind/db. anche questa pu` variare o a seconda della distribuzione. in questo caso il comando definisce una zona per la radice (che nel sistema dei nomi di dominio ` indicata da un ".root. Le zone possono essere di vari tipi. che specifica la directory rispetto nella quale il server cerca i vari file. affronteremo qui solo a u quelle relative al suo uso all’interno di una rete locale. questo pu` essere ottenuto con il comando dig (vedi sez. }. }. I file preimpostati nell’installazione standard gi` prevedono una sezione e a di questo tipo.. . come specificato dal sotto comando type. La direttiva file specifica il file da cui prendere le informazioni.internic. se da un terminale si esegue una o richiesta ad un indirizzo fino ad allora non usato. }." { type hint.3 La configurazione base Le modalit` di utilizzo di un server DNS possono essere le pi` svariate. 9. si avr` pertanto una sezione del tipo di: a options { directory "/var/cache/bind". fra ". . CAPITOLO 9. quando tratteremo la configurazione del nameserver per la risoluzione di un dominio locale.330 category cname { null."). questo pu` essere o indicato in forma assoluta.root che e contiene l’elenco dei root DNS. Vedremo il resto del file in seguito. A questo punto si pu` provare a verificarne il funzionamento. dal nome della zona a cui si fa riferimento e da un ulteriore blocco di direttive che specificano le caratteristiche della zona.2.1. }. Anzitutto andranno impostate le opzioni generali per il server.. usando una sezione del tipo di: zone ". cio` di usare il server come un proxy per evitare di ripetere ogni volta le richieste e di risoluzione dei nomi su internet. in relazione a diverse configurazioni. IL SERVIZIO DNS si noti come in questo caso viene incluso un file a parte che contiene l’impostazione delle opzioni con il comando options. La sintassi generale del comando zone prevede che esso sia seguito. Il primo passo da fare ` quello di far sapere al server dove pu` trovare i root DNS . Di norma l’installazione standard prevede da sola tutto quello che serve per un caching DNS. o in forma relativa rispetto alla directory definita dalla direttiva directory del comando options. 9. e poi viene usato il comando logging per bloccare la scrittura nei log di alcuni tipi di messaggi. quando si installa il pacchetto di bind. file "/etc/bind/db. come nell’esempio.root". Vedremo i dettagli al riguardo in sez. questo e o viene fatto inserendo in named..4. org.2..consumattori.1. ADDITIONAL: 0 .org.168. .net.2. questo si fa aggiungendo alla sezione options le specifiche per l’uso di altri server come forwarders. global options: printcmd .1.. .162.2 <<>> www. ANSWER SECTION: www. global options: printcmd .168.net.1. consumattori.net.241.. QUERY: 1. <<>> DiG 9. Got answer: .gandi.1) WHEN: Tue Mar 25 21:42:25 2003 MSG SIZE rcvd: 103 e come si vede la richiesta viene soddisfatta in 698 msec. .. .. .. Got answer: .168.1..org . QUESTION SECTION: . IN A 3600 IN A 80. Query time: 698 msec SERVER: 192. custom2.org..consumattori.org.2 <<>> www. ...gandi. id: 56592 . .1) WHEN: Tue Mar 25 21:42:30 2003 MSG SIZE rcvd: 103 con i tempi che si riducono drasticamente a 3 msec.9... flags: qr rd ra. ANSWER: 1.opcode: QUERY. ma se subito dopo si ripete la richiesta otterremo: [piccardi@gont piccardi]$ dig www.org.128 900 900 IN IN NS NS ns7. AUTHORITY: 2. IN A 3595 IN A 80.consumattori. 9. .consumattori. custom2. ADDITIONAL: 0 . LA GESTIONE DI UN SERVER DNS 331 [piccardi@gont piccardi]$ dig www. .org.. id: 32914 . Questo ci mostra che il nostro caching nameserver sta funzionando.www.org .241. ANSWER: 1.www.1#53(192.. ->>HEADER<<...consumattori. Query time: 3 msec SERVER: 192. aggiungendo una sezione del tipo: options { .gandi. AUTHORITY SECTION: consumattori. .consumattori. QUESTION SECTION: . .consumattori. <<>> DiG 9..net. ->>HEADER<<.org . flags: qr aa rd ra. status: NOERROR..org.2.1. AUTHORITY: 2...org . .162. consumattori.128 895 895 IN IN NS NS ns7.opcode: QUERY. status: NOERROR. . AUTHORITY SECTION: consumattori...1#53(192.gandi.consumattori.. ANSWER SECTION: www. QUERY: 1..168.1. possiamo limitare ulteriormente le richieste che escono dalla nostra rete usando il nameserver del provider per effettuare la scansione per conto nostro. Con questa impostazione per` ` il nostro nameserver che si incarica di effettuare il procedimento di scansione ricorsiva o e che abbiamo illustrato in sez.org. in-addr.192.168.130.1. file "/etc/bind/db.132. 9. dovremo aggiungere quindi al file di configurazione le due sezioni: // // Add local zone definitions here. il che di norma comporta la presenza dentro il named. a Per far questo dovremo definire la relativa zona. 213.234. earthsea. IL SERVIZIO DNS ed in questo modo uscir` solo una richiesta verso i server che sono dichiarati nella direttiva a forwarders. Esso infatti viene interpretato comunque come un nome di dominio separato da punti. da includere o dal file principale con il solito comando include.0).192. file "/etc/bind/db.arpa" { type master. Si noti come sempre si debbano definire due zone.2. riservato a questo scopo.ea. per la risoluzione dei nomi delle macchine interne di una LAN. CAPITOLO 9.4 La configurazione di un dominio locale.ea" { type master. }. seguito dal numero IP del quale si vuole effettuare la risoluzione. per cui il livello pi` generale di risoluzione ` dato dalla parte u e pi` significativa del numero.127".211. u Inoltre nella installazione standard ` prevista la configurazione per la risoluzione in locale e del localhost. entrambe di tipo master. }.local". }. una per la risoluzione diretta.332 forwarders { 213.arpa. .168. }. file "/etc/bind/db. che per una migliore organizzazione pu` essere sensato mantenere in un file a parte.earthsea".conf di default di due zone del tipo: zone "localhost" { type master.arpa" { type master. zone "1. espresso in forma dotted decimal in ordine rovesciato.128.in-addr. anche in questo caso il tipo di zona ` di tipo master in quanto ` sempre il nostro server ad essere e e il responsabile della risoluzione di questo nome. }. Vediamo ora come configurare un dominio locale. zone "earthsea. Per la risoluzione inversa si usa sempre il nome di dominio speciale in-addr. }.168.1". ed una per la risoluzione inversa degli indirizzi privati che stiamo usando (nel nostro caso si suppone di aver usato la rete 192. zone "127. per semplicit` prenderemo un dominio completamente astratto. relativa al nostro dominio.234. file "/etc/bind/db. la sintassi generale ` la seguente: e e {<domain>|@|<blank>} [<ttl>] [<class>] <type> <rdata> [<comment>] Il primo campo indica il nome di dominio che viene ricercato. D. altrimenti si sarebbe dovuto a e specificare il nome del dominio completo nella forma localhost. racchiudendoli fra u parentesi tonde. sono usate u nella replicazione dei dati fra nameserver primari e secondari: una funzionalit` avanzata del a . infine segue il campo (o i campi) rdata che contiene i dati da inviare in risposta alle richieste relative al record. Refresh 86400 . e corrisponde ad una settimana. ma ` convenzione specificare sempre e e per primo un SOA che dichiara che il nostro server ` autoritativo per quel dominio (di nuovo si e ricordi quanto detto in sez. scritte all’inizio.". 9. esistono altre classi ma non sono usate. Il formato dei vari record ` simile. dato che non ce ne pu` essere pi` di uno per file. cio` il tempo massimo di validit` del record nella cache di e a un nameserver (si ricordi quanto detto al proposito in sez. Serial 604800 . Normalmente viene usata solo $TTL.9." finale in quanto i nomi vanno dichiarati in forma assoluta (facendo riferimento alla radice che ` appunto ". in genere uno per riga. Negative Cache TTL localhost. esso pu` essere immesso o esplicitamente. Questo o u significa anche la necessit` di un file separato per ogni dominio che si vuole definire. che permette di impostare.1). Si prosegue a poi con la dichiarazione dei record di tipo NS che definiscono i nameserver per il dominio in questione. che impostano dei valori di default. in quanto di solito si usa la direttiva $TTL per specificarlo una volta per tutte. root. nel nostro caso usando indirizzi internet sar` a sempre IN per tutti i vari tipi di record. per tutti i record seguenti. inserite fra parentesi per poterle dividere su pi` righe. che viene detta origine.localhost.2." al posto della "@" (nel caso la posta andr` a root@localhost). che contengono e i dati.. Alle direttive seguono poi i vari record.0.1). che illustra il contenuto generico di uno di questi file: $TTL @ 604800 IN SOA localhost. con il ". Infine si possono inserire commenti ovunque precedendoli con il carattere ". la e-mail del responsabile. ma se il campo ` vuoto (cio` blank) viene usato l’ultimo nome immesso. che viene automaticamente espanso nel nome della zona o indicato dal comando zone che fa riferimento al file. giorni e settimane. Il campo class indica la classe dei dati del record. La prima colonna di un record SOA ` il nome del dominio per il quale si dichiara di avere e autorit`. detti resource record (in breve RR) che il server deve fornire quando interrogato. L’ordine in cui di dichiarano i record non ` essenziale. formati da campi separati da spazi o tabulazioni. 127. Nel caso di un record SOA i dati prevedono il server che far` da a nameserver principale per il dominio. a cui fanno seguito gli altri tipi di record. nella forma solita ma con un ".") e segue la classe IN ed il tipo SOA. altrimenti viene considerato blank.1 . LA GESTIONE DI UN SERVER DNS 333 Vediamo allora quale ` il formato dei file di configurazione delle singole zone. Segue il campo type che deve essere sempre specificato e definisce il tipo di record. Il primo campo deve iniziare dal primo carattere della riga. formati alternativi prevedono l’uso dei suffissi H.0. 9. Se necessario si possono specificare i campi su pi` righe. ( 1 . Il campo ttl viene di norma omesso. nel nostro esempio il tempo ` e stato specificato in secondi.1. @ @ IN IN NS A I file possono contenere alcune direttive generali.1. W per indicare rispettivamente ore. il cosiddetto time to live. infine e e si pu` usare il carattere speciale "@". a Le restanti informazioni. Expire 604800 ) . nel caso in esempio si ` usato il carattere speciale @. Retry 2419200 . Cominciamo col mostrare quello usato per il localhost. ea.0.17 karegoat IN A 192. l’informazione sar` passata u a nelle richieste di risoluzione.earthsea. in e a questo caso il nameserver ` la macchina gont.168.1.168. Nel caso si ` e e specificato un solo nameserver. .ea.earhsea. retry after 1 hour 604800 . tutto e quello che occorre infatti ` usare un nome che corrisponda ad un record di tipo A. per cui o si usa questa notazione o si specifica il nameserver semplicemente con gont.ea. per dare un esempio di come e si possono scrivere le cose in maniera pi` compatta. Indirizzi . su un server di riserva (detto appunto secondario) che entra in azione solo quando il primario fallisce.1. refresh after 3 hour 3600 . .earthsea.gont. e cio` sempre earthsea.ea. Tornando all’esempio. gont IN A 192. .ea. IL SERVIZIO DNS protocollo che consente di mantenere delle repliche automatizzate dei dati di un nameserver.1.1 ns IN CNAME gont www IN CNAME gont hogen IN A 192.168.168.19 oppish IN A 192. Di questa l’unica da modificare ` quella identificata come serial che indica un numero seriale (crescente) da aggiornare tutte e le volte che si effettua una modifica alla zona. anch’essa identificata dal suo nome e di dominio assoluto. @ IN NS gont. aggiornate secondo quanto stabilito da questi parametri.ea.168.ea. Si ` scelto il dominio earthsea. non si ` dichiarato il dominio (che essendo u e blank corrisponde a quello precedente. e come per il precedente.earthsea. non lo si ` definito con l’indirizzo IP ad esso corrispondente.1.2 lorbaner IN A 192.earthsea il cui contenuto `: e $TTL 100000 @ IN SOA gont.0. .: si noti che di nuovo. Mail server ..earthsea. i due record successivi dichiarano rispettivamente (il record NS) la macchina nel dominio che fa da nameserver (nel caso quella identificata dal nome del dominio stesso) e l’indirizzo del dominio (il record A).ea. serial 10800 . su come a u impostare un nostro dominio locale per risolvere i nomi della macchine di una rete locale. expire after 1 week 86400 ) . MX 10 gont MX 20 oppish . serve a definire a quale macchina viene inviata la posta per il dominio earthsea. minimum TTL 1 day .ea. cio` gont. Nel caso l’esempio ` tratto dalla mia configurazione della rete di casa. Il secondo record definisce il nameserver.168 localhost IN A 127. ( 2 . e si ` indicato gont senza o e . di tipo MX. Name server .ea.1. ma se ne possono definire pi` di uno. Vista la particolarit` del dominio localhost vediamo un esempio pi` significativo. Si tenga conto che se non si usa il nome assoluto al nome viene sempre aggiunta l’origine della zona. di nuovo si ` specificato gont.earthsea. che potranno essere rivolte ad uno qualunque dei server della lista. L’amministratore della macchina sono io per cui la posta sar` inviata a a me con l’indirizzo piccardi@gont. ma stavolta. e e i cui dati sono mantenuti nel file db. piccardi. Il record successivo. si ` tralasciata la classe IN e e che essendo quella di default pu` non essere specificata esplicitamente.1 Di nuovo si ` cominciato con un record di tipo SOA che dichiara l’autorit` per earhsea.334 CAPITOLO 9. ea. . serial 10800 .9.ea. Per quanto visto finora il formato di questi record ` evidente. ed i record di tipo CNAME che definiscono dei nomi alternativi per le stesse macchine.earthsea.ea. LA GESTIONE DI UN SERVER DNS 335 usare il nome assoluto.192. @ IN NS gont. Si deve definire anche il nameserver per questo dominio inverso. che ` bene pertanto e escludere onde evitare comportamenti inattesi. 2 IN PTR hogen. retry after 1 hour 604800 . Il valore inserito 10 inserito prima del nome indica la priorit` del server a di posta.earthsea. ` possibile infatti specificare pi` di un server di posta. questo ` e fatto tramite il file db.earthsea. . Di nuovo si comincia con un record di tipo SOA. in modo che e u verr` sempre contattato per primo quello con il valore pi` basso.earthsea. passando ai successivi solo in a u caso di fallimento dei precedenti. e Una volta definito il nostro dominio occorre anche definire la risoluzione inversa. Anche se ` possibile associare u e due nomi allo stesso IP molti sistemi non sono preparati a questa evenienza. Completati i nostri file possiamo riavviare il servizio. minimum TTL 1 day .1. (qui specificare gont non avrebbe e funzionato.ea.2. con valori diversi. Name server .ea.ea. piccardi.earthsea. 19 IN PTR lorbaner. expire after 1 week 86400 ) . ( 2 . e a Seguono infine i record di tipo PTR che contengono il nome delle singole macchine.ea.168. Al solito usiamo dig per interrogare il nostro server: . il cui contenuto ` il seguente: e $TTL 100000 @ IN SOA gont. 1 IN PTR gont. che ovviamente ` sempre gont. sostanzialmente identico al precedente dato che nameserver e amministratore sono gli stessi. l’indirizzo assoluto invece funziona in quanto il dominio ` stato gi` definito prima). . 168 IN PTR oppish.earthsea.earthsea. Si tenga presente che anche questi record ` opportuno facciano e riferimento a nomi associati a record di tipo A.earthsea.earthsea. in questo caso per` gli indirizzi devono corrispondere ad un solo nome.ea. quello canonico e contrariamente o a prima non si possono associare pi` nomi allo stesso indirizzo.gont. Indirizzi . refresh after 3 hour 3600 . e controllare i risultati. Infine si sono inseriti i vari record di tipo A contenenti gli indirizzi. 17 IN PTR karegoat.ea. ..ea.1#53(192. QUERY: 1.2.earthsea.ea. 2 10800 3600 60480 100000 IN NS gont. QUERY: 1.ea.. . ADDITIONAL SECTION: gont... <<>> DiG 9.. 100000 IN A 192. IN A 100000 IN A 192.ea.. Got answer: ..earthsea..lorbaner..1 Query time: 16 msec SERVER: 192. . 100000 IN A 192. piccardi.168.168. .earthsea.168. id: 24592 .. status: NOERROR. id: 56071 .ea.opcode: QUERY.ea .2..ea .1. . . ADDITIONAL SECTION: gont.. earthsea..2 <<>> any earthsea.1#53(192.earthsea.1.gont. ricordiamoci che in questo caso dig vuole l’opzione -x.earthsea.168. status: NOERROR.1 Query time: 2 msec SERVER: 192.1.ea.. flags: qr aa rd ra. ..1) WHEN: Wed Mar 26 21:41:06 2003 MSG SIZE rcvd: 123 ed otteniamo il risultato voluto.ea . flags: qr aa rd ra. global options: printcmd .ea.earthsea. ed otterremo: .opcode: QUERY. ->>HEADER<<.17 100000 IN NS gont. ANSWER: 1. .1. ->>HEADER<<. ADDITIONAL: 1 ... IN ANY 100000 100000 IN IN NS SOA gont.ea . . QUESTION SECTION: .ea. AUTHORITY SECTION: earthsea.168.earthsea.ea.earthsea. ANSWER SECTION: lorbaner.. ... AUTHORITY: 1.ea.ea. Got answer: .1.1) WHEN: Wed Mar 26 21:42:36 2003 MSG SIZE rcvd: 89 ed infine proviamo con la risoluzione inversa.336 CAPITOLO 9.ea.ea.. ANSWER: 2. QUESTION SECTION: . <<>> DiG 9. global options: printcmd .2 <<>> lorbaner. .earthsea.earthsea.1.earthsea.168..1.. ADDITIONAL: 1 . AUTHORITY SECTION: earthsea. . IL SERVIZIO DNS [piccardi@gont piccardi]$ dig any earthsea. gont.ea. ANSWER SECTION: earthsea. AUTHORITY: 1. . . adesso possiamo provare a risolvere un’altra macchina: [piccardi@gont piccardi]$ dig lorbaner.168..earthsea. che ha una . la gestione delle delegazioni.. 9.1.3 Configurazioni avanzate Tratteremo in questa sezione le configurazioni pi` avanzate di BIND.arpa.earthsea.1 Query time: 2 msec SERVER: 192.ea.9.ea.arpa. ADDITIONAL: 1 .17. CONFIGURAZIONI AVANZATE 337 [piccardi@gont anime]$ dig -x 192. la versione 4 infatti non usa named. .1. <<>> DiG 9.. . 100000 IN .1 La delegazione di una zona Come accennato una delle caratteristiche fondamentali del funzionamento del DNS ` la capacit` e a di delegare la risoluzione di parti dell’albero dei nomi ad altri server. status: NOERROR. Chiuderemo la sezione con un breve accenno alla configurazione della versione precedente (bind 4) del demone.1.1.1. QUESTION SECTION: . 9. ANSWER: 1.3. IN NS gont. AUTHORITY: 1.3. 100000 . PTR karegoat..in-addr.earthsea.conf ma un file named.1) WHEN: Wed Mar 26 21:52:09 2003 MSG SIZE rcvd: 112 e di nuovo ` tutto a posto.3.1. ed le varie tipologie di controllo degli accessi disponibili nel programma.1.arpa.. come l’impostazione di u eventuali secondari.168. . Il cambiamento principale (a parte la struttura interna del server stesso) ` stato quello nei file e di configurazione.168.1#53(192.168.168. Il passaggio da questa alle successive ha visto un grosso cambiamento del server. ANSWER SECTION: 17. ->>HEADER<<... id: 30928 . global options: printcmd .192.192.17 .. ADDITIONAL SECTION: gont.168.3 La configurazione con bind4 Bench´ ormai la gran parte dei server sia passata alle versioni pi` recenti di bind (la versione e u 8 o la 9) esistono ancora un certo numero di server che mantengono la vecchia versione 4.2 La gestione di un secondario Una delle caratteristiche del DNS ` quella di consentire in maniera naturale la distribuzione e di carico e la ridondanza attraverso la possibilit` di gestire dei DNS secondari cui trasferire in a maniera automatica tutte le informazioni di una certa zona..ea.2 <<>> -x 192. 100000 IN A 192.3..168..in-addr.2.opcode: QUERY. .168. flags: qr aa rd ra. AUTHORITY SECTION: 1... 9. ed in particolare della sua configurazione. QUERY: 1. in modo da distribuire sia il carico di rete che quello amministrativo.in-addr. e 9.boot.168. IN PTR .earthsea.17 .192. Got answer: . boot. .192.130 cache .1 La direttiva directory specifica la directory di lavoro corrente del server. Un possibile esempio di file named. Imposta i DNS a cui reinviare le richieste. Direttiva domain <nome> directory <path> primary <dominio> <file> secondary <dominio> <lista> <file> cache <dominio> <file> forwarders <list> options <opzione> Significato Imposta il nome di dominio di default. Bind v4 configuration file .127 primary localhost db. ` il seguente: e . Tabella 9. La direttiva primary permette di definire un dominio per cui si ` DNS primario. cos` che tutti ı i pathname relativi impiegati in seguito faranno riferimento ad essa.root . l’elenco completo delle opzioni si e pu` trovare nella pagina di manuale di named. la cui lista ` a seguire.192. IL SERVIZIO DNS sintassi completamente diversa. ed i file che definiscono le zone sono sostanzialmente immutati.128.3: Opzioni impostabili nel file named. La direttiva forwarders permette. Infine la direttiva cache permette di ottenere le informazioni e su un dominio da un file (` analoga ad una zona di tipo hint di bind8) e nel caso permette di e specificare la lista dei root DNS.earthsea primary 1. directory /etc/bind forwarders 213.132. Imposta una opzione.in-addr. L’elenco delle direttive principali ` riportato in tab. type domain file primary 0.boot. Specifica la directory di lavoro del server.234.arpa db.168. le differenze per fortuna si fermano qui.ea db. come l’analoga opzione di bind8.234. con una configurazione che ` sostanzialmente e equivalente a quella vista nei paragrafi precedenti. zone definitions . Definisce un dominio per cui si ` DNS primario.3. dalla lista dei server primari e dal file su cui salvare i dati.in-addr. deve essere seguita dal nome del e dominio e dal file in cui sono contenute le informazioni sui relativi resource record. di reinviare le richiesta ad altri server DNS. e Definisce un dominio per cui si ` DNS secondario. insieme alla documentazione di bind4. La direttiva secondary invece permette di definire un dominio per cui si ` DNS secondario. 9. e Definisce un file di cache per un dominio.338 CAPITOLO 9.0.boot.arpa db. db. deve essere e seguita dal nome del dominio.211 213.168.local primary earthsea.127. o . DIRECTORY Tabella A.... cat [OPTION] [FILE]. SOURCE. rm [OPTION].. Comando cat less tail head Significato e sintassi Concatena i file stampandoli sullo stadanrd output.. mv [OPTION].. ls [OPTION].. head [OPTION] [FILE]...... DIRECTORY Copia i file.Appendice A Sinossi dei comandi principali A... less [FILE]. SOURCE DEST mv [OPTION]... SOURCE... Crea un link. ln [OPTION].... SOURCE DEST cp [OPTION]. TARGET [LINK_NAME] ln [OPTION].. Tabella A... TARGET.1: Principali comandi di base per i file. Sposta e rinomina i file... 339 . Visualizza i file stampandoli sullo stadanrd output.[FILE]. Visualizza l’ultima parte di un file.. Visualizza la prima parte di un file.1 Comandi per la gestione dei file Comando ls mv cp rm ln Significato e sintassi Mostra il contenuto di una directory..[FILE].2: Principali comandi per il contenuto dei file. tail [OPTION] [FILE].. DIRECTORY Cancella file e directory.. cp [OPTION]..... ..5: Principali comandi per la gestione dei permessi dei file. SINOSSI DEI COMANDI PRINCIPALI A. Comando chmod chown chgrp Significato e sintassi Cambia i permessi di accesso ai file. Tabella A..4 Comandi per la localizzazione dei file . a nice [OPTION] [COMMAND [ARG]. kill [ -signal | -s signal ] pid . w sta per write Permessi di esecuzione.3: Principali comandi per la gestione dei processi.2 Comandi per la gestione dei processi Comando ps top kill killall nice Significato e sintassi Riporta una fotografia dei processi in corso. ps [OPTIONS] Mostra i processi in corso sul sistema.340 APPENDICE A. o sta per other Permessi di lettura. Uccide i processi per nome. killall [OPTIONS] process Lancia un programma con priorit` modificata.. chmod [OPTIONS] Cambia proprietari e gruppi ai file.4: I permessi dei file. top [OPTIONS]... Manda un segnale ad un process. chown [OPTIONS] Cambia il gruppo proprietario ai file. g sta per group Privilegi di tutti gli altri. r sta per read Permessi di scrittura. A.3 I permessi dei file Nome u g o r w x Significato e sintassi Privilegi dell’utente. A. x sta per exexute Tabella A. u sta per user Privilegi del gruppo. chgrp [OPTIONS] Tabella A. .6 Comandi per la gestione dei tempi Comando date hwclock Significato e sintassi Mostra o configura data e orario.A. find [PATH] espressione Mostra le opzioni di un comando.5. gzip [OPTIONS] file Programma di archiviazione.7 Comandi di archiviazione e compressione Comando tar gzip bzip2 Significato e sintassi Programma di archiviazione.. comando -help Tabella A. bzip2 [OPTION] file1 file2 .7: Principali comandi per la documentazione. COMANDI PER LA DOCUMENTAZIONE Comando locate whereis which find updatedb Significato e sintassi Elenca i file del database che si adattano col nome cercato.9: Principali comandi per di archiviazione.. . Tabella A. sorgente e pagina di manuale per un comando. which [OPTION] file Cerca file in una gerarchia di directory. 341 A.5 Comandi per la documentazione Comando man whatis apropos find comando -help Significato e sintassi ` E un’interfaccia ai manuali di riferimento in linea. locate [OPTIONS] file Cerca i file di tipo binario. Comprime e scomprime file. [FORMAT] Mostra e configura l’orologio hardware. man [OPTIONS] file Mostra le descrizioni delle pagine di manuale. date [OPTION].. updatedb [OPTIONS] Tabella A. find [PATH] espressione Aggiorna il database con l’elenco dei file presenti sul sistema. tar [OPTION] file1 file2 . A. whatis [OPTIONS] nome Ricerca nei nomi e nelle descrizioni delle pagine di manuale. apropos [OPTION] parol chiave Cerca file in una gerarchia di directory.6: Principali comandi per la localizzazione dei file. A. hwclock [OPTIONS] Tabella A.8: Principali comandi per la gestione dei tempi. whereis [OPTIONS] file Individua la posizione di un comando. A. A.8 Gestione dei pacchetti Comando apt-get rpm Significato e sintassi Gestore di pacchetti di Debian GNU/Linux.10 I client dei servizi base Comando telnet ftp finger whois Significato e sintassi Interfaccia utente al protocollo Telnet.11: Principali comandi diagnostici. rpm [OPTIONS] Tabella A. whois [OPTIONS] keyword Tabella A. ftp [OPTIONS] host porta Client per il controllo delle informazioni degli utenti. telnet [OPTION] host porta Client del protocollo File Transfer Protocol.10: Principali comandi per di archiviazione.342 APPENDICE A. netstat [OPTIONS] Tabella A.12: Principali client dei servizi base. SINOSSI DEI COMANDI PRINCIPALI A. . finger [OPTION] user Client per il servizio di whois. ping [OPTIONS] host Mostra i passaggi da un host ad un altor.9 I comandi diagnostici Comando ping traceroute netstat Significato e sintassi Invia ICMP ECHO REQUEST agli host sulla rete . traceroute [OPTIONS] host Mostra le connessioni sulla ret. apt-get [OPTIONS] Gestore di pacchetti di RedHat. 2.2 1.1. 1.5 e 2.1 1.1 sez.2.102.6 1.1 sez. 1. 2.3 sez.5 1.2 sez.4.1 1. 1.2.1 e 5. 5. 5. 2.2 e 5. 5.104. 5.3 sez. monitor.4.4. 3. 3.2.Appendice B Indice degli argomenti per LPI B.7 1.103.2.2.3. and kill processes Modify process execution priorities Search text files using regular expressions Perform basic file editing operations using vi Create partitions and filesystems Maintain the integrity of filesystems Control mounting and unmounting filesystems Managing disk quota Use file permissions to control access to files Manage file ownership Create and change hard and symbolic links Find system files and place files in the correct location Install e Configure XFree86 Setup a display manager Install e Customize a Window Manager Environment 343 Riferimento sez.110. 3.4. 6. 4.4 Titolo Configure Fundamental BIOS Settings Configure Modem and Sound cards Setup SCSI Devices Configure different PC expansion cards Configure Communication Devices Configure USB devices Design hard disk layout Install a boot manager Make and install programs from source Manage shared libraries Use Debian package management Use Red Hat Package Manager (RPM) Work on the command line Process text streams using filters Perform basic file management Use streams.4.2 sez.5 1.2 1. 5. 2.3 e 1.2 sez.2 sez.2.2.2.4.7 1. 5.101. 5.2.104.4. 5.104.103. 1. pipes.3 sez. and redirects Create.3 sez.101.3 1.1 Argomenti LPI 101 Topic 1.104.5 1.4 .103.8 1.110.3 sez.104.103.1.2 sez.102.6 1. 4.4.1 sez.101.4.4 1.102. 3.2 sez.103.1 sez.101. 1.103.104.2. 1.3 1.4 sez.4.2.2 1.3 sez.102.7 1.4. 1.2.4 1.2 1.1 1.102. 2.4. 5.2 sez.2.103. 1.101.3 e 5.2 sez.6 1.3.3.3 1.6 1.4 1.1 sez.2 e 4.2 sez.3 sez.104. 5.3 sez.2 sez.8 1. 2.5 sez.110. 5.4. 2 sez.3 sez.4.103.4 1.4.101.3 e 1.5 1.4 sez. 2.3 sez.102.104.1 1.2. 4.3 1.4 sez.1 1.4.2. 7.111.107.3.4 1.3 e 3. 3.2 e 5. 1.2 e 4. ?? sez.1 sez.4 1. 4.1.112.3 sez. and install a custom kernel and kernel modules Boot the system Change runlevels and shutdown or reboot system Manage printers and print queues Print files Install and configure local and remote printers Use and manage local system documentation Find Linux documentation on the Internet Notify users on system-related issues Customize and use the shell environment Customize or write simple scripts Manage users and group accounts and related system Tune the user environment and system environment variables Configure and use system log files to meet administrative and security needs Automate system administration tasks by scheduling jobs to run in the future Maintain an effective data backup strategy Maintain system time Fundamentals of TCP/IP TCP/IP configuration and troubleshooting Configure Linux as a PPP client Configure and manage inetd.1.3.105.5 1.4 sez. 3. sez.2.111.114.6 sez. 3.5 sez.3 1.6.4 pag.3 sez.1 1. 9.1 1.4 1.108.5 1. 7.108.3.3 e 5.5 sez.107.111.111.1 1.1.4 sez.3 sez.4 sez.3 sez. 3.4 e 8.1 1. ?? sez.1.1 e 3.3. sez. xinetd. 6. 8. build.1 2.1 e 5.2 e 9.109.2 sez. 3. 72 e ss.113.108.6 7. 5. 2. 2.111.2 1. smb.6 1.2 1. 5.1 sez. and related services Operate and perform basic configuration of sendmail Operate and perform basic configuration of Apache Properly manage the NFS.5.2 7.112.3 1.2 1. 3.3.1 sez. INDICE DEGLI ARGOMENTI PER LPI B.3 .2. 8.7 1.106.1.3 1.3 1. sez.1 1.5.4.3. sez.107.3.1.1.2 1. 2.5.106.3 e 7.2 sez.113.1.2 Argomenti LPI 102 Topic 1.2 1. and nmb daemons Setup and configure basic DNS services Set up secure shell (OpenSSH) Perform security administration tasks Setup host security Setup user level security Riferimento sez.1 1.113.3 sez.2. ?? sez. 3.7.5 1.1 sez.113. 4.2.114.5.113.3. 5.2 8.1 7.3.109. sez. 5.1 1.4 sez.114.111.6.105.112.3.3 Titolo Manage/Query kernel and kernel modules at runtime Reconfigure.2 1.1 sez.3.1.1 1.2 1. 5.4 1. sez.344 APPENDICE B.113.2 1. 3. Inc. because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. regardless of subject matter or whether it is published as a printed book. 59 Temple Place. if the Document is in part a textbook of mathematics.1 Applicability and Definitions This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License.1. The “Document”. March 2000 Copyright c 2000 Free Software Foundation. which is a copyleft license designed for free software. (For example. a Secondary Section may not explain any mathematics. A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. this License preserves for the author and publisher a way to get credit for their work. Boston. Preamble The purpose of this License is to make a manual. It complements the GNU General Public License. while not being considered responsible for modifications made by others. textbook. We recommend this License principally for works whose purpose is instruction or reference. We have designed this License in order to use it for manuals for free software. below.) The relationship could be 345 . Secondarily. But this License is not limited to software manuals. either commercially or noncommercially. MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document. either copied verbatim. it can be used for any textual work. This License is a kind of “copyleft”. but changing it is not allowed. or other written document “free” in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it. C. or with modifications and/or translated into another language. with or without modifying it. which means that derivative works of the document must themselves be free in the same sense. Suite 330. and is addressed as “you”.Appendice C GNU Free Documentation License Version 1. refers to any such manual or work. Any member of the public is a licensee. A “Modified Version” of the Document means any work containing the Document or a portion of it. The “Cover Texts” are certain short passages of text that are listed. A Texinfo input format. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. L TEX input format. and Back-Cover Texts on the back cover. GNU FREE DOCUMENTATION LICENSE a matter of historical connection with the subject or with related matters. plus such following pages as are needed to hold. Copying with changes limited to the covers. and the license notice saying this License applies to the Document are reproduced in all copies. you may accept compensation in exchange for copies. Examples of suitable formats for Transparent copies include plain ASCII without markup. For works in formats which do not have any title page as such. as being those of Invariant Sections. either commercially or noncommercially. you must enclose the copies in covers that carry.3 Copying in Quantity If you publish printed copies of the Document numbering more than 100. Opaque formats include PostScript. and that you add no other conditions whatsoever to those of this License. and the Document’s license notice requires Cover Texts. You may also lend copies. A “Transparent” copy of the Document means a machine-readable copy. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. the material this License requires to appear in the title page. C. PDF. can be treated as verbatim copying in other respects. the copyright notices. clearly and legibly. as long as they preserve the title of the Document and satisfy these conditions. legibly. A copy that is not “Transparent” is called “Opaque”. The “Invariant Sections” are certain Secondary Sections whose titles are designated. C. SGML or XML for which the DTD and/or processing tools are not generally available. in the notice that says that the Document is released under this License. and standard-conforming simple HTML designed for human modification. “Title Page” means the text near the most prominent appearance of the work’s title. preceding the beginning of the body of the text. all these Cover Texts: Front-Cover Texts on the front cover.346 APPENDICE C. philosophical. The front cover must present the full title with all words of the title equally prominent and visible. ethical or political position regarding them. provided that this License. However. commercial. You may add other material on the covers in addition. proprietary formats that can be read and edited only by proprietary word processors. Both covers must also clearly and legibly identify you as the publisher of these copies. the title page itself. or of legal. whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor. and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. in the notice that says that the Document is released under this License. The “Title Page” means. . SGML or XML using a publicly available DTD. for a printed book. represented in a format whose specification is available to the general public. If you distribute a large enough number of copies you must also follow the conditions in section 3. as Front-Cover Texts or Back-Cover Texts.2 Verbatim Copying You may copy and distribute the Document in any medium. and you may publicly display copies. under the same conditions stated above. and the machine-generated HTML produced by some word processors for output purposes only. C.4. MODIFICATIONS 347 If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general networkusing public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. C.4 Modifications You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: • Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. • List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five). • State on the Title page the name of the publisher of the Modified Version, as the publisher. • Preserve all the copyright notices of the Document. • Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. • Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. • Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice. • Include an unaltered copy of this License. • Preserve the section entitled “History”, and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. 348 APPENDICE C. GNU FREE DOCUMENTATION LICENSE • Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. • In any section entitled “Acknowledgements” or “Dedications”, preserve the section’s title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. • Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. • Delete any section entitled “Endorsements”. Such a section may not be included in the Modified Version. • Do not retitle any existing section as “Endorsements” or to conflict in title with any Invariant Section. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles. You may add a section entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties – for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. C.5 Combining Documents You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled “History” in the various original documents, forming one section entitled “History”; likewise combine any sections entitled “Acknowledgements”, and any sections entitled “Dedications”. You must delete all sections entitled “Endorsements.” C.6. COLLECTIONS OF DOCUMENTS 349 C.6 Collections of Documents You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. C.7 Aggregation With Independent Works A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an “aggregate”, and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document’s Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate. C.8 Translation Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail. C.9 Termination You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. C.10 Future Revisions of This License The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License or any later version applies to it, you have the option of following the terms and conditions either of that specified version or of any 350 APPENDICE C. GNU FREE DOCUMENTATION LICENSE later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. Indice analitico broadcast, 265 arithmetic expansion, 62 broadcast, 262, 265, 284 command expansion, 62 fifo, 6, 7, 46, 47 filename globbing, 60–62, 76, 80, 81, 135, 152 hash, 89, 163, 195 history, 62 kmod, 183 login manager, 129 mount point, 17, 20, 23, 24 multicast, 262, 265, 273, 283 path search, 59 pipelining, 66 pipe, 66, 95 prompt, 55 standard error, 63, 65 standard input, 63–65, 75 standard output, 63, 65, 75 swap, 2, 23, 44, 192, 193, 202–204 system call, 2, 3, 7, 28 window manager, 131 backup, 147–149 canale DMA, 217 comando addgroup, 162 adduser, 162 apropos, 90 apt-get, 159 atq, 117 atrm, 117 at, 117 badblocks, 198 batch, 117 cancel, 144 cat, 64 cfdisk, 193 chattr, 48 chfn, 163 chgrp, 46 chmod, 45 351 chown, 46 chroot, 32 chsh, 163 cksum, 89 cpio, 152 cp, 12 crontab, 116 cut, 84 date, 93 delgroup, 162 deluser, 162 depmod, 185 diff, 171 dig, 328 dpkg, 158 dump, 153 e2fsck, 201 e2image, 200 echo, 57 edquota, 252 env, 58 expand, 86 exportfs, 318 false, 71 fdformat, 194 fdisk, 191 find, 76 finger, 288 fmt, 86 fold, 86 free, 34 fsck, 201 ftp, 287 getent, 167 getty, 39 gpasswd, 163 grep, 79 groupadd, 161 groupmod, 161 groups, 41 grpconv, 166 grpunconv, 167 352 grub-install, 211 head, 83 history, 63 hostname, 291 host, 326 hwclock, 94 id, 41 ifconfig, 270 info, 91 init, 212 insmod, 183 isapnp, 219 killall, 36 kill, 34 ldconfig, 107 ldd, 106 less, 83 lilo, 207 ln, 10 locate, 75 login, 39 logrotate, 120 lpadmin, 142 lpc, 135 lpd, 135 lpinfo, 144 lpq, 134 lprm, 135 lpr, 134 lpstat, 144 lp, 143 lsaddr, 47 lsmod, 188 lspci, 222 lsusb, 233 ls, 7 lvcreate, 247 lvdisplay, 248 lvextend, 248 lvreduce, 248 lvremove, 249 lvresize, 249 lvscan, 248 make, 156 mandb, 111 manpath, 112 man, 90 md5sum, 89 mkdir, 14 mke2fs, 195 INDICE ANALITICO mkfifo, 47 mkfs.msdos, 195 mkfs, 195 mknod, 46 mkreiserfs, 195 modinfo, 188 modprobe, 184 more, 82 mount, 20 mtr, 282 mv, 12 netstat, 283 newgrp, 163 nice, 37 nl, 86 parted, 193 passwd, 162 paste, 85 patch, 172 ping, 280 pnpdump, 220 pr, 85 pstree, 25 ps, 26 pvcreate, 244 pvdisplay, 244 pvmove, 245 pvscan, 244 pwconv, 166 pwd, 14 pwunconv, 167 quotacheck, 251 quotaoff, 252 quotaon, 252 quota, 253 raidhotadd, 241 raidhotremove, 241 raidstart, 241 raidstop, 241 rdev, 206 renice, 37 repquota, 254 resize2fs, 249 resize_reiserfs, 250 restore, 154 rmdir, 14 rmmod, 186 rm, 11 route, 273 rpm, 157 INDICE ANALITICO run-parts, 116 scp, 313 scsiinfo, 228 sed, 86 seq, 71 setserial, 228 sg, 163 smbclient, 322 smbmount, 323 sort, 88 source, 72 split, 84 ssh-add, 316 ssh-copy-id, 315 ssh-keygen, 314 ssh, 313 startx, 129 su, 163 swapoff, 204 swapon, 204 syslinux, 206 tac, 88 tail, 83 tar, 149 tcpdchk, 307 tcpdmatch, 307 tcpd, 306 tee, 95 telinit, 214 telnet, 286 test, 71 time, 92 top, 32 touch, 88 traceroute, 281 tree, 14 true, 71 tr, 85 tune2fs, 198 umount, 24 unexpand, 86 uniq, 88 update-grub, 212 updatedb, 114 useradd, 161 usermod, 161 vgchange, 246 vgcreate, 245 vgdisplay, 246 vgextend, 245 vgmerge, 247 vgreduce, 245 vgscan, 246 vgsplit, 247 vidmode, 206 wc, 89 whatis, 90 which, 60 whoami, 41 whois, 288 xargs, 94 xf86cfg, 124 xf86config, 124 xinit, 129 xrdb, 131 xterm, 129 yes, 95 configurazione .bash_login, 73 .bash_profile, 73 .bashrc, 73 .profile, 73 .xinitrc, 129 /etc/X11/XF86Config-4, 124 /etc/X11/xdm/xdm-config, 130 /etc/X11/xdm/xdm.options, 130 /etc/apt/sources.list, 159 /etc/bootptab, 309 /etc/cron.allow, 116 /etc/cron.deny, 116 /etc/crontab, 115 /etc/cups/cupsd.conf, 140 /etc/dhcpd.conf, 309 /etc/ethers, 285 /etc/exports, 317 /etc/fstab, 22 /etc/gdm/gdm.conf, 130 /etc/group, 164 /etc/gshadow, 166 /etc/host.conf, 295 /etc/hostname, 291 /etc/hosts.allow, 306 /etc/hosts.deny, 306 /etc/hosts, 290 /etc/inetd.conf, 299 /etc/inittab, 213 /etc/isapnp.conf, 219 /etc/issue.net, 110 /etc/issue, 110 /etc/kde3/kdm/kdmrc, 130 353 57 export. 197 interrupt. 137 /etc/lprng/lpd.conf. 167 /etc/passwd. 71 if. 69 for. 57 fg. 52 tcsh. 294 /etc/samba/smb. 110 /etc/logrotate. 217 /proc/interrupts. 299 kdm. 196. 186 /etc/modules. 103 pico. 107 /etc/ld. 136 /etc/profile. 87 filesystem /proc /proc/dma. 212. 2. 163 /etc/printcap.conf. 319 /etc/securetty. 111 /etc/modules.conf. 103 vi. 301 directory radice. 130 xinetd. 60 bg.so. 315 INDICE ANALITICO sshd. 40 . 53 zsh. 217 inode. 302 menu. 206.local. 217 istruzione case.conf. 110 /etc/mtab. 102 joe. 53 ksh. 201. 33. 120 /etc/lprng/lpd. 99 espressioni regolari. 174.354 /etc/ld. 168 /etc/pam. 291 /etc/shadow.cache.conf. 207 /etc/login. 35. 113 /etc/resolv. 79–81.conf. 115 dhcpd.d. 292 /etc/pam.lst. 117 xdm.conf. 69 then.defs. 130 lpd. 40 jobs. 308 crond. 117 /etc/updatedb. 53 built-in alias. 317 smbd. 319 ssh-agent. 313 /etc/ssh/sshd_config. 107 /etc/lilo. 53 sh.conf. 13–24. 292 /etc/raidtab. 70 function. 211 named.perms.conf. 40 cd.so. 32. 13 declare.config.conf. 165 /etc/shells. 73 /etc/protocols. 328 nmbd. 101 nano. 187 /etc/motd. 70 elif. 110 /etc/services. 130 inetd. 329 demone anacron. 69 else. 319 portmap. 69 until. 114 /etc/xinetd. 113 /etc/ssh/ssh_config. 137 /etc/manpath. 113 /etc/skel. 7–12. 53 bash. 116 atd. 203 shell ash. 69 fi. 3. 24 /etc/networks. 70 while. 311 syslogd. 238 /etc/rc. 70 memoria virtuale.conf. 137 named.conf. 309 gdm. 213 editor emacs. 117 bootpd. 96 jed. 52 csh. 311 /etc/syslog. 58 LD_LIBRARY_PATH. 316 TERM. 28–29. 72 socket. 112 PAGER. 64. 73 interattiva. 72. 82 HOME. 56–57 HISTFILESIZE. 69 zombie. 58. 54 PS1. 31. 58 USER. 35 355 . 56 di login. 60 unset.INDICE ANALITICO set. 55 speciali. 63 HISTSIZE. 56 type. 63 HISTFILE. 60 umask. 57 di shell. 108 MANPATH. 63 IFS. 45 unalias. 58–60 SSH_AUTH_SOCK. 82 PATH. 57 EDITOR. 7 variabili di ambiente. 356 INDICE ANALITICO . 357 . R.tldp. Volume 1. [2] M. http://www. F. 1997. vol. Piccardi.org/LDP/abs/. the protocols.it. http://gapil. Friedl. Cooper. Advanced Bash-Scripting Guide. [4] W. 2000. [3] J.truelite. TCP/IP Illustrated. Mastering regular expression. E. Addison Wesley. 2001. Stevens.Bibliografia [1] S. Guida alla Programmazione in Linux. O’Reilly. 1. 1994.
Copyright © 2024 DOKUMEN.SITE Inc.