Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Piccola guida
Versione 4.5
4 luglio 2007
1
Lautore non si assumera in alcun caso la responsabilita per eventuali danni diretti o indi-
retti riguardanti luso proprio o improprio del presente, o qualora il suo uso violi gli accordi
sottoscritti con Apple. Scritto a soli fini informativi. Little X Manual e
,c tutti i diritti
riservati. Il logo Dog using an iMac
c e stato disegnato da Nina Mariano.
Documento generato con L TEXA
www.oliviomariano.net
e non e abilitata alla stampa. Se desiderate riceverne una versione stampabile sara necessario
richiederla allindirizzo olivio.mariano@gmail.com.
2
Introduzione
Il Little X Manual giunge finalmente alla versione 4 approfondendo ed espletando i vari temi
abbordati dalle prime edizioni. Questo manuale vuole essere un contenitore didattico nel quale
vengono spiegate le varie caratteristiche del sistema operativo Mac OS X, affrontando -quando
possibile- il confronto con i sistemi operativi Unix fratelli.
Una prima parte, piu argomentata, raccoglie una serie di informazioni per comprendere
pienamente il significato di sistema operativo e le origini di quello che noi tutti chiamiamo sem-
plicemente Unix. Successivamente, procedendo per categorie e microcategorie, spiegheremo,
attraverso esempi pratici, le funzionalita della linea di comando, adattando luso di questultima
a quelle che potrebbero essere le esigenze di un utente comune.
Non me ne vorranno gli utenti piu esperti per luso, talvolta, di termini semplicistici per ren-
dere comprensibile ed accessibile questa piccola guida alla maggior parte dellutenza. Sperando,
come consueto, di aver offerto un buon servizio alla comunita Mac...
Olivio Mariano
3
Indice
1 Il sistema operativo 1
1.1 Laffidabilita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Lhardware 5
2.1 Mainframes Minicomputers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Personal computers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3 Unix 7
3.1 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2 Mac OS, un cuor di Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2.1 A/UX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2.2 NeXTSTEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2.3 Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
II Il sistema 17
4 Kernel e terminali 17
4.1 Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2 Metodi di accesso ad un sistema operativo Unix . . . . . . . . . . . . . . . . . . 17
4.2.1 Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2.2 Dumb terminals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2.3 Smart terminals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.3 Terminale e shells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.4 Il prompt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.5 Uso dei tasti freccia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.6 Logging in e logging out . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.7 Logging in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.8 Il nome utente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4
4.9 La password . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.10 Logging out . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.11 Tipi di login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.11.1 Il superutente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.11.2 Utilizzare il comando sudo . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5
7.4.1 Dove cerca Spotlight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
7.4.2 Ricerche da terminale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
7.4.3 Operatori booleani . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.4.4 Metadata per documenti singoli . . . . . . . . . . . . . . . . . . . . . . . 45
7.4.5 Controllare Spotlight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.5 Comparare: diff, cmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.6 Comandi vari: split, touch, du, wc... . . . . . . . . . . . . . . . . . . . . . . . . . 49
6
8.6.2 Cancellazione parole, righe e altre unita di testo . . . . . . . . . . . . . 65
8.6.3 Cancellazione righe intere . . . . . . . . . . . . . . . . . . . . . . . . . . 67
8.6.4 Cancellazione della parte finale di una riga . . . . . . . . . . . . . . . . . 67
8.6.5 Ripristino righe cancellate . . . . . . . . . . . . . . . . . . . . . . . . . . 67
V I processi 68
11 Il documento passwd 75
11.1 Gestire gli utilizzatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
11.2 Gestione dei gruppi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
VII Le shells 87
7
14 Convenzioni e utilizzo 87
14.1 Variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
14.2 Le espressioni regolari o caratteri joker . . . . . . . . . . . . . . . . . . . . . . 90
14.3 Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
14.4 Redirezione di uscite / entrate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
14.5 Alcuni esempi sulluso delle convenzioni . . . . . . . . . . . . . . . . . . . . . . . 94
14.6 Il comando test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
15 Scripts shell 97
15.1 Istruzioni di strutturazione, if, case, for, while . . . . . . . . . . . . . . . . . . . 99
17 Il TCP/IP 108
17.1 Consultazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
17.2 Test di connettivita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
18 SSH 110
18.1 Sdoppiare i terminali : screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
18.2 Sicurezza in remoto con PAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
19 Samba 115
19.1 Componenti Samba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
19.2 Configurazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
19.3 Sintassi del documento smb.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
19.4 Lan manager e Smb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
8
Parte I
il sistema operativo e una sorta di strato che si pone sopra la macchina fisica
e permette di fare richieste ad una macchina virtuale ma che lutente crede vera;
inoltre il compito del sistema operativo, oltre a quello di controllare lesecuzione degli
altri programmi, consiste nellimpedire alle applicazioni di eseguire dei comandi che
potrebbero rivelarsi dannosi
1
Gestione dei files (file system)
Interprete di comandi
Real time
Sistemi distribuiti
2
Embedded
Sara dunque possibile differenziare i diversi sistemi operativi a seconda delle funzionalita
hardware proposte dal calcolatore su cui girano.
1.1 Laffidabilita
Definendo come qualita di un assieme o di un sistema comunque complesso la sua ri-
spondenza ai criteri di specifica di funzionamento, si definisce affidabilita la capacita
di rispettare le specifiche di funzionamento nel tempo.
3
con diverse modalita operative. Questo, come puo apparire ovvio, e utile e determinante nel
caso siano presenti avarie di diversi sottosistemi (sottoinsiemi). Cio che chiamiamo ridondanza
, corrisponde a porre, dunque, piu elementi in parallelo che, in quanto tali, forniranno al sistema
operativo una maggiore affidabilita.
Vediamo quali sono le modalita operative:
USER MODE (esecuzione di operazioni per un utente. Es. applicativi). La user mode
gestisce i vari processi attribuendo ad ognuno di essi un determinato periodo di tempo
oltre il quale non possono operare.
CP U KernelM ode KernelM ode U serM ode KernelM ode U serM ode
Processo 1 Waiting Ready Ready Waiting Ready
Processo 2 Waiting Waiting Waiting Waiting Waiting
Sistema operativo Ready Ready - Ready -
Da sinistra a destra possiamo osservare come lavvicendarsi delle diverse modalita operative
conserva una certa armonia . Lesistenza di una modalita utente (User Mode) implica un uso
nullo della cpu da parte del sistema operativo. Lesistenza di una modalita kernel (Kernel
Mode) implica un uso -possibilmente- complementare della cpu da parte dei processi e da parte
del sistema operativo.
Linterazione e la cooperazione delle modalita operative permette, dunque, ad una CPU di
dare lillusione allutente di uneffettiva concorrenza tra i vari processi attivi sulla macchina.
In realta cio che noi tutti chiamiamo multitasking e semplicemente il passaggio del controllo
della CPU, ad elevatissima velocita, da un processo allaltro, da un processo(i) al sistema
operativo.
Il turno di ciascun processo viene espletato con luso della priorita e il passaggio tra lo
stato di running e gli altri comporta un cambiamento di stato (di contesto) della CPU (context
switch).
4
Potremmo analizzare in maniera approfondita come ciascun sistema operativo a tuttoggi
presente sul mercato puo implementare in maniera corretta o meno queste funzionalita. Cio
richiederebbe molto piu che un piccolo manuale di duecento pagine... Diremo, sinteticamente,
che la famiglia Unix e i sistemi operativi Windows modelizzano e espletano linterazione tra
i processi tramite un modo del tutto concorrenziale che rende luso efficente delle modalita
operative una priorita per le aziende che ne sviluppano il kernel. Possiamo capire, dunque,
che lefficenza e loperativita di un OS sono direttamente influenzate da queste funzionalita. Il
difficile equilibrio che si raggiunge nella gestione delle modalita operative e funzionali indica
la qualita dellOS scelto. Viceversa, lincapacita di un sistema operativo di saper gestire in
modo elegante le risorse hardware della macchina su cui gira implica quasi sempre una scarsa
affidabilita.
2 Lhardware
Per capire in maniera precisa come classificare il sistema operativo, e necessario conoscere su
quali tipologie di macchina gira o da quale sistema operazionale deriva. Iniziamo con il dire
che tutti i computer digitali moderni sono concettualmente molto simili. Il fatto che abbiano
diverse funzionalita, costi e prestazioni li caratterizza in:
5
Supercomputers
Personal computers
Real-time computers
la multiutenza - ciascun utente possiede un spazio di lavoro dedicato al quale gli altri
utenti non possono accedere
6
Figura 1: Un esempio di mainframe
la memoria protetta - piu processi operanti sulla macchina non interferiscono tra loro
evitando di coinvolgere loperativita dellintero elaboratore se uno di questi va in crash
3 Unix
Una breve rilettura delle concezioni di sistema operativo e hardware ci avra fatto capire una cosa
molto importante: Unix non nasce per essere un sistema operativo personale ; non appartiene,
dunque, a una categoria di OS per il resto di noi ma nasce con il preciso intento di soddisfare
7
Figura 2: LApple II, primo computer personale
OS Azienda
SunOS Sun Microsystems
AIX IBM
IRIX Silicon Graphics
HP-UX Hawlett Packard
Linux -
Open BSD -
Grazie alla semplicita e alla compostezza di sviluppo, Unix ha una struttura molto semplice.
Questa comprende:
8
un kernel incaricato della gestione della memorie, delle entrate/uscite, de lo scheduling
dei processi, dellacceso alle periferiche.
3.1 Linux
Linux e un sistema operativo nato dalla mente del suo creatore Linux Torvalds nel 1991. Lo
sviluppo fu ripreso in seguito dalla comunita open source (Licenza GPL). Questa particolare
filosofia di sviluppo ha permesso a Linux lintegrazione in un numero sempre crescente di imprese
commerciali (IBM, Oracle, Dell, Silicon Graphics, Corel..) e la nascita di vere e proprie aziende
intorno al suo sviluppo (RedHat, Debian..) con lo scopo di vendere il servizio di distribuzione
di questo OS. Il grande successo di Linux e dovuto alla risposta di questo OS a delle particolari
esigenze:
robustezza
sicurezza
funzionalita server
compatibilita Unix
Facendo tesoro di queste caratteristiche, diverse ditribuzioni (piu o meno riuscite) sono dispo-
nibili per lutente in versione Client o Server, gratuite o commerciali, con supporto tecnico o
meno. Queste distribuzioni (RedHat, Fedora, Debian, Ubuntu, Mandrake...) sono carattetiz-
zate da dei numeri di distribuzione facenti appello a diverse evoluzioni del kernel, questultime
caratterizzate a loro volta da un numero di kernel (ad esempio, Ubuntu 6.0 e basato sul kernel
9
2.6). E dunque possibile trovare un kernel Linux comune e normalizzato con integrato in
ciascuna distribuzione dei servizi e delle utilita di amministrazione comuni. Questa normaliz-
zazione del kernel ha permesso di possedere una referenza comune per tutti coloro vogliano
accedere ad un sistema operativo di derivazione Unix. Detto questo, esistono comunque molte
differenze tra le diverse distribuzioni quali larborescenza delle cartelle sistema e gli script di
amministrazione. Nonostante questa eterogeneita i sistemi che installano Linux sono altamente
competitivi a livello di costi di manutenzione (o semplicemente di acquisto) rispetto alle diver-
se versioni di Windows Server per limpiantazione su piccoli server di documenti, stampanti o
anche di piccoli-medi gruppi di lavoro. Tutto questo risultando molto spesso altrettanto com-
petitivi rispetto agli stessi sistemi operativi Unix proprietari quando e linstallazione di servers
Web o basi di dati lobiettivo da raggiungere.
Linux e dunque un ottimo sistema operativo che, per quanto unico nel suo genere ed efficente,
pecca in alcune caratteristiche ed esigenze:
e un sistema nato per essere amministrato. Uno o piu amministratori sono designati
per gestire le macchine. Gli altri utilizzatori definiti non sono tecnicamente autorizzati
e possono realizzare unicamente le azioni previste per essi. A questo si aggiunge anche
il piccolo difetto (riconosciuto e in via di risoluzione) dellinesistenza talvolta di GUI
locali che possano realizzare gli stessi interventi ottenuti via una linea di comando. Esiste,
dunque, un problema principale per chi possiede piccoli reti locali: formare e pagare un
amministratore di sistema e spesso difficile.
Supporto del sistema. A volte risulta aleatorio sia dal punto di vista correttivo (patchs)
che dal punto di vista dellassistenza e dellinstallazione.
Le linee guida di Linux diventano quindi abbastanza difficili da comprendere per un non
esperto. Difficilmente chi ha appena comprato una qualunque macchina di tipo informatico ca-
pira cosa voglia dire, ad esempio, saper scegliere tra diverse interfaccie, una diversa dallaltra,
tutte con funzionalita diverse.
10
Figura 3: Il desktopswitch di Linux, capace di cambiare interfaccia a seconda delle esigenze.
Lutente comune ha quasi sempre bisogno di uno standard, qualunque esso sia - buono
o cattivo, ma UNO standard. Il cambiamento e la liberta di scelta sono ottime cose, ma il
problema non e offrirle alla propria fascia di utenza ma saperle offrire con esattezza ed eleganza
a chiunque senza imporre una conoscenza approfondita al cliente finale.
11
3.2 Mac OS, un cuor di Unix
3.2.1 A/UX
Unix ed Apple, un connubio che non nasce certo con Mac OS X. Apple si era gia avvicinata
a Unix con il poco conosciuto A/UX. A/UX (da Apple Unix) fu limplementazione di Apple
Computer del sistema operativo Unix per alcuni Macintosh dellepoca. Lultima versione di
A/UX data del 1995 (3.1.1) e girava su gran parte dei Macintosh II, Quadra, e Centris. Questo
Unix modificato si basava sul System V 2.2 con alcune caratteristiche aggiunte dal SysV 3 e 4,
BSD 4.2 e 4.3. Compatibile pienamente con i sistemi POSIX e con SVID (System V Interface
Definition), includeva il supporto TCP/IP dalla versione 2 in poi.
Questa prima prova di connubio tra Mac OS e Unix includeva, con successo, uninterfaccia
grafica del tutto simile al consueto Finder. In realta il Finder A/UX era una versione del Finder
7 adattata per essere eseguita come processo Unix e ridisegnata per interagire con il kernel Unix
e il suo filesystem. A/UX includeva anche una CommandShell che offriva -da vero Unix- una
interfaccia a linea di comando e, con particolari layers, poteva supportare in egual misura tutte
le applicazioni del Macintosh System 7.0.1. Al solito Apple, avendo anticipato di gran lunga
12
i tempi, si ritrovo a sviluppare un sistema operativo con una fascia di utenza assai ridotta e
con elevati costi di mantenimento. La storia di A/UX si concluse con una disfatta; anche se
il sistema operativo sviluppato era efficente, Apple non effettuo mai il porting di A/UX sui
PowerPC e prefer addirittura usare una versione modificata dellAIX IBM sui propri server a
meta degli anni 90.
3.2.2 NeXTSTEP
Unix era il destino di Apple. Seppur con un nuovo system in via di sviluppo (stile system 7),
Apple -nel periodo piu nero della sua storia- abort il progetto Copland e si ritrovo a dover
scegliere una base per il suo nuovo sistema operativo del futuro. Una scelta obbligata, poiche
troppo in ritardo rispetto al principale concorrente del momento: il System 7.5.3 si scontra con
il sempre piu efficente e simile al Mac OS, Windows 95. Apple sceglie NeXT e il suo sistema
operativo NeXTSTEP riportando in azienda anche una delle persone piu carismatiche della
storia dellinformatica, Steve Jobs. Il 4 febbraio 1997, Apple Computer acquisisce NeXT e uti-
lizza OpenStep per sviluppare linterfaccia grafica di Mac OS X e portando con se la tecnologia
(in Objective C) Cocoa. NeXTSTEP si basa essenzialmente su un kernel Mach con codice BSD
UNIX che usa il potente Display PostScript per la gestione dellinterfaccia. Flessibile ed elastico
il NeXTSTEP gestiva a livello di oggetti le componenti del SO e comprendeva componentistica
di estrema qualita per lo sviluppo rapido delle applicazioni. La bellezza e leleganza di questo
SO derivano principalmente da queste due caratteristiche che, implementate con uninterfaccia
grafica raffinata, ne facevano un prodotto estremamente innovativo. La sua GUI introduceva il
concetto di dock, luso del 3D, e lutilizzo di componenti che accettavano come ingresso oggetti
grafici. La grafica e il suono erano i campi in cui NeXTSTEP eccelleva integrando una gestione
avanzata dei colori per la tipografia e la trasparenza e un processore DSP Motorola che per-
metteva di gestire i suoni in maniera molto efficente. Oltre a tutto questo NeXTSTEP portava
con se il PDO (Portable Distributed Objects) che permetteva linvocazione remota degli oggetti
contribuendo cos al definitivo successo delle tecnologie orientate oggetti.
Con queste solidi basi e con il ritorno di un protagonista deccezione (Steve Jobs), Apple
ricomincio a credere in un sistema operativo capace di poter sostituire lanziano system 7, che
nelle sua varie incarnazioni (System 6,7,7.1,7.5,... fino al 9.2.2) era fondamentalmente rimasto
lo stesso. Steve Jobs, alla prima presentazione di Mac OS X in forma di Public Beta, disse
che cio che era nato dalle ceneri di NeXTSTEP sarebbe stato il sistema operativo Apple per
13
Figura 6: Linterfaccia di NeXTSTEP
i prossimi 10 anni: di fatto la longevita del nostro OS X oltrepassa molto piu che la decade
poiche NeXTSTEP nacque piu di 16 anni fa.
3.2.3 Mac OS X
Rhapsody. Questo era il nome che internamente Apple usava per indicare cosa stava sviluppan-
do partendo dalleredita di NeXTSTEP. Di fatto, il sistema operativo ideale sarebbe dovuto
nascere dalle librerie OpenStep con accanto una Blue Box capace di emulare le applicazioni
Mac OS Classic. Previsto inizialmente per la fine del 1998, Rhapsody non fu mai commercia-
lizzato. Il principale problema di Rhapsody era una strategia di riscrittura delle applicazioni
alquanto ambiziosa che pretendeva un risviluppo completo delle applicazioni da parte delle
software house. Visti i risultati finanziari disastrori di Apple, Macintosh era un piattaforma
considerata in piena decadenza e la maggior parte degli sviluppatori si rifiuto di continuare a
dar fiducia al Mac OS.
Molto cambio alla World Wide Developer Conference del 1999, quando Steve Jobs inauguro
il progetto Mac OS Ten. Rhapsody avrebbe contribuito con il suo kernel, POSIX e OpenStep
14
a integrare il nuovo Ten con luso delle vecchie API del Mac OS riscritte e rinnovate per
loccasione sotto il nome di Carbon. Le altre valide tecnologie del Mac OS Classic, quali
QuickTime, AppleEvents, AppleScript e ColorSync sarebbero state portate sotto OS Ten per
la gioia di sviluppatori e utenti finali.
Ed eccoci infine al nostro Mac OS X. Il kernel XNU e lo strato BSD sono stati riorganizzati
e redistribuiti in licenza open source (Apple Public Source Licence) sotto il nome di Darwin.
Fornendo un sistema operativo stabile, solido ed efficente, Darwin e in piena competizione con
gli altri sistemi di derivazione Unix, essendo del tutto Made in Apple e avendo abbandonato
tecnologie proprietarie come, ad esempio, il linguaggio PostScript sul quale linterfaccia di
OpenStep si basava. Con estrema precisione e rispettando in pieno le date di sviluppo, Mac OS
X nasce nel 2001 e continua ad essere sviluppato con continui aggiornamenti a cadenza quasi
semestrale (anche se attualmente -con lo scopo di stabilizzare la piattaforma di sviluppo- Apple
ha deciso di allungare i cicli di sviluppo). Ma cio che rende Mac OS uno dei sistemi operativi piu
avanzati al mondo e la sua GUI. Facendo tesoro dellesperienza del Mac OS Classic, linterfaccia
Aqua e considerata una delle migliori ed eleganti. Riuscendo a coniugare questa stupefacente
creativita nello sviluppo delle GUI e la stabilita di un OS Unix, Apple e diventata una delle
compagnie con il maggior numero di installato Unix.
Di fatto, pero lappelazione Based on Unix e da considerare ufficiosa. Apple non ha
mai fatto parte del The Open Group, unorganizzazione nata per certificare lappartenenza
dei SO alla famiglia Unix. Possiamo dunque definire Mac OS X un sistema operativo ibrido;
un abile miscuglio dei migliori prodotti che linformatica e riuscita a produrre durante la sua
storia, dalla nascita di Unix al primo Macintosh.
15
Figura 7: Linterfaccia di Mac OS X Ten 10.0
16
Parte II
Il sistema
4 Kernel e terminali
4.1 Kernel
Il kernel e il core di Unix. Si tratta, principalmente, di un grosso programma caricato nella
memoria quando la macchina viene accesa e controlla lallocazione delle risorse hardware da
quel momento in avanti. Il kernel conosce quali risorse hardware sono disponibili e possiede i
programmi necessari per parlare con le varie periferiche. Per far cio ha bisogno dei controlli
di configurazione e alcune utilita standard. Il kernel Unix e le utilita sono programmi flessibili,
e alcuni aspetti delle loro caratteristiche possono essere controllati cambiando i documenti di
configurazione. Tipico esempio di un file di configurazione e il documenoi di sistema fstab che
comunica al kernel dove trovare i files presenti sul disco rigido. Altro esempio e il documento
di configurazione del system log che comunica al kernel come effettuare la registrazione dei vari
eventi e errori che si possono riscontrare durante la sessione di lavoro.
17
4.2.1 Console
Ogni sistema operativo Unix possiede una console principale connessa direttamente con la
macchina su cui e installata. La console e una particolare tipo di terminale che viene riconosciuto
quando il sistema e in funzione. Alcune operazioni relative al sistema possono essere attuate
da console. E per questo che e molto spesso accessibile solo dagli operatori del sistema e dagli
amministratori.
Alcuni terminali vengono denominati muti poiche possiedono risorse sufficienti solo per man-
dare caratteri come input al sistema e ricevere caratteri come output dal sistema. Molto spesso
i personal computer possiedono programmi di emulazione terminale in modo da potersi con-
nettere ad un sistema Unix in questa modalita. I terminali muti possono essere connessi
direttamente ad una macchina Unix, in remoto, attraverso un modem, un terminale server o
altre connessioni network.
I terminale cosidetti smart, come lX terminal, possono interagire con il sistema ad un livello
piu alto rispetto ai terminali dumb. Questi hanno sufficiente memoria per provvedere un
adeguato supporto alle interfacce grafiche. Linterazione tra un terminale di questo tipo e
Unix puo avvenire attraverso semplici caratteri quali icone, finestre, menu e azioni attraverso
il mouse.
18
puro Unix. In questo modo e possibile inviare comandi al Subsystem BSD che ne riceve le
istruzioni direttamente. Con queste caratteristiche il Terminale diventa uno strumento molto
potente di cui un amministratore puo disporre. Se se ne hanno le capacita e teoricamente
possibile fare di tutto via terminale, usufruendo delle sue enormi capacita di interazione.
4.4 Il prompt
Prima di spiegare il funzionamento di qualsiasi comando della shell bash (default da Mac OS X
Panther) e necessario che si conosca bene limportanza di cio che ci appare a schermo al primo
avvio del terminale. Cio che ci troviamo di fronte allavvio dellapplicazione Terminale.app e il
prompt:
Last login: Tue Mar 4 06:19:35 on console
Welcome to Darwin!
[mistral:~] olivio\%
La parte tra parentesi quadre indica il nome della macchina. Questa informazione risulta
importantissima per chi ha intenzione di cimentarsi con il controllo remoto dellelaboratore.
Ci informa, di fatto, su quale macchina stiamo operando. In successione dopo i due punti
troveremo la directory di utilizzo attuale (in gergo: working directory). Di default Mac OS
X imposta come directory iniziale la home directory indicata dalla tilde. Fuori dalle parentesi
quadre appare il nome utente attualmente operante sul terminale. Tutto cio che si scrive sul
terminale appare sulla destra del nome dellutilizzatore subito dopo il caratterere percento.
19
e intelligente lesecuzione dei vari processi consentendo oltretutto di amministrare in perfetta
sicurezza la propria parte di sistema. Per far cio e necessario che il sistema operativo vi ri-
conosca e dunque vi si chiedera di effettuare unoperazione di login. Vi starere chiedendo a
cosa serve questa operazione dato che allavvio del Terminale il prompt ci dice gia da subito
con quale nome siamo stati loggati. Questo succede perche di default Mac OS X ha abilitato
il login automatico che sara necessario disabilitare se si vuole usufruire della multiutenza. A
login automatico attivo o meno la fase di login sara effettuata comunque nellambiente grafico
e dunque allavvio del terminale saremmo gia autenticati.
Unopzione ancora piu diretta per accedere allinterfaccia testuale e quella di scegliere
Altri... nella finestra di login e scrivere nel campo destinato al nome utente :
>console
4.7 Logging in
Autenticarsi su un sistema operativo Unix richiede due informazioni fondamentali. Un nome
utente e una password. Quando si accede al terminale di Unix, il sistema operativo richiede
queste due informazioni:
Login:
Dopo aver scritto il proprio nome utente e premuto il tasto invio il sistema vi richiedera
una password. In questo caso quando scriverete il sistema non provvedera a visualizzare la
password digitata.
20
4.9 La password
Quando il vostro account sara creato, anche una password sara assegnata al nuovo utente. In
questo caso e utile sapere come cambiare la propria password trovandosi di fronte alla linea di
comando. Dopo essersi loggati e necessario digitare:
% passwd
1. Non usare nessuna parte del proprio nome o il nome di qualcun altro. Ne usare lana-
gramma di alcun nome
2. Non usare un numero facilmente reperibile tipo il proprio numero di telefono, il proprio
indirizzo.
6. Se si hanno diversi account su diverse macchine non usare sempre la stessa password su
ogni macchina.
% exit
21
Dopo aver lasciato il proprio terminale e necessario assicurarsi che venga visualizzata la
prompt di login affinche si abbia lassoluta certezza di essere stati effettivamente deautenticati
dal sistema. Se alcuni processi non sono stati terminati prima del loggin out il sistema richiedera
che questi vengano terminati. La shell di Mac OS X usa anche il comando :
% logout
Per effettuare la deautenticazione. E sempre buona norma cancellare cio che e rimasto
visualizzato sul terminale prima del logout. Potrebbero essere rimaste informazioni importanti
tipo alcune informazioni a proposito di voi o a proposito del lavoro effettuato sul sistema. In
questo caso sara opportuno digitare il comando:
% clear
Superuser Il superutente e denominato anche root. Lutente loggato con questo nome
ha privilegi assoluti su tutti i files e cartelle, comprese quelle del system che possono essere
tranquillamente cancellate da questo tipo di utente.
User Lutente ospite non ha alcun diritto sulle impostazioni della macchina. In
definitiva deve sempre richiedere lautorizzazione allAmministratore per un qualsiasi
cambiamento sulle impostazioni prestabilite.
22
4.11.1 Il superutente
Il cosiddetto super utente (detto anche root) e il carattere che puo tutto in Unix. E utile cono-
scerlo poiche permette la modifica di parametri nei documenti di sistema altrimenti impossibile
con laccount creato da Mac OS X al primo avvio. Per abilitarlo sara necessario utilizzare
lapplicazione Netinfo Manager (vedi in /Applications/Utilities/Netinfo Manager). Utilizzando
questa applicazione possiamo autenticare e assegnare al root una password.
Vediamo la procedura di autenticazione:
In Mac OS 10.2.x e successivi, apriamo NetInfo Manager e scegliamo dal menu Security
lopzione Enable root user.
In Mac OS 10.x.x scegliamo dal menu Domain lopzione Security. Dal sottomenu
scegliamo Enable root user.
Per richiamare questo tipo di utente via terminale sara necessario utilizzare il comando:
[mistral:~] olivio % su
Password:
[mistral:/Users/olivio] olivio#
% sudo
23
Parte III
I comandi terminale
Generalmente un comando Unix si presenta sempre sotto questa forma:
% Nomecomando [-options]
Il nome del comando e il nome del programma che il terminal eseguira. Lopzione ci viene in
genere suggerita dalla shell stessa e altera la funzionalita del comando in base al compito che
lutente vuole che esegua. Largomento possono essere dei documenti, delle cartelle o anche
programmi. Provando a scrivere per esempio:
olivio@mistral:~$ cp
La nostra shell ci verra in aiuto indicandoci quali sono le opzioni possibili per il comando.
olivio@mistral:~$ cp
usage: cp [-R [-H | -L | -P]] [-f | -i | -n] [-pv] src target
cp [-R [-H | -L | -P]] [-f | -i | -n] [-pv] src1 ... srcN directory
Nellutilizzare qualunque comando della shell puo capitare di incappare in errori. Niente
paura. Se si vuole abortire lesecuzione di un comando sara sufficente usare la combinazione di
tasti ctrl + c.
24
Se nome-del-comando e un comando valido (naturalmente la sua man page deve esistere),
viene mostrata la documentazione relativa. Ricordiamo che le man pages non sono solo adibite
alla descrizione dei comandi, ma anche alla descrizione di molti files di configurazione. Se si
scrive:
% man [capitolo] rc
Si otterra la documentazione in linea del file di booting rc. In qualunque caso il valore
capitolo e un numero che indica in quale parte della man page si vuole ricercare linforma-
zione voluta. Omettendo questo valore il comando man mostrera direttamente la prima pagina
del manuale. Il valore capitolo e importante poiche in ambito Unix ci si trova spesso davanti
a frasi del tipo per dettagli vedere nomedelcomando(6), dove il valore tra parentesi corri-
sponde al capitolo delle man pages da consultare. Come regole di consultazione ricordiamo
che per andare avanti nello scorrimento del testo delle man pages e sufficente tener premuto
il tasto invio mentre per sfogliare le pages si puo premere la barra spaziatrice. Chi prende
consiglio dalle man pages molto spesso desidera salvare su disco e tenere sempre a portata di
mano il manuale ricavato. In questo caso si pone un problema. Il testo delle man pages e for-
mattato in maniera particolare. Non possiamo dunque fare un semplice copia e incolla poiche
il testo incollato sarebbe in definitiva poco leggibile. Occorre oltre che filtrare loutput di man
attraverso il comando col anche instradarlo in un file di testo specifico. Usiamo dunque:
5.2 whatis
Dopo lintroduzione del comando man ci sara utile apprendere luso del comando whatis.
Questultimo infatti riporta informazioni sintetiche su un comando, quali le man pages esistenti
e il suo funzionamento in generale. Il comando whatis crea il suo database partendo da man
pages gia esistenti e disponibili sul computer.
25
5.3 apropos
In correlazione con whatis, riporta tutte le ricorrenze del testo inserito. Scrivere:
% apropos cp
trovera tutte le ricorrenze di cp nel database di whatis. Il comando risulta molto comodo
quando si vuole verificare lesistenza di quel comando in piu man pages (in diversi capitoli, ad
esempio).
5.4 Cartelle . e ..
Il singolo punto indica la directory corrente mentre i due punti indicano la directory che contiene
la directory in cui si sta lavorando. Scrivere:
% ./pwd
significa eseguire il programma pwd escludendo con ./ tutte le directory allinfuori di quella
in cui si sta operando. Questo comando e molto importante se sappiamo che sulla nostra mac-
china risiedono programmi con lo stesso nome. Potrebbe capitare di lavorare su un programma
che risiede in tuttaltra directory. E dunque buona norma specificare sempre la directory nella
quale si sa che risiede il programma da eseguire.
26
6 Muoversi nel filesystem
6.1 Dischi e sistemi
Loggati allinterno del sistema e necessario capire come esso opera e in quale direzione ci stiamo
muovendo digitando i diversi comandi. Ovviamente, come linterfaccia grafica, il terminale ha
un suo sistema di documenti che non ricalca sempre quella utilizzato dalla GUI. Allinterno dei
sistemi Unix a linea di comando osserviamo lesistenza di una arborescenza unica di cartelle
impiantata sulla root del disco detta /. In questo modo il sistema ci inganna facendoci
pensare allesistenza di un solo sistema di documenti. In realta, e possibile lunione di piu
alberi corrispondenti a sistemi di documenti diversi situati su dischi o anche macchine diverse.
E dunque possibile il mounting di ciascun albero su una cartella vuota (o meno) di un albero
gia disponibile e creato. In questo caso parliamo di costruzione di unarborescenza logica.
I vantaggi di questa soluzione sono molteplici:
Elasticita
Estensibilita
I sistemi di documenti (filesystems) possono essere cos creati in una partizione, a sua volta
situata su uno o piu dischi (o supporti di immagazzinamento). Unix supporta diversi sistemi
di documenti.; di per se anche Mac OS X lo fa in maniera egregia limitandosi spesso in alcune
sue possibilita usando prevalentemente il filesystem di serie per Mac, lHFS+. Generalmente,
usando un sistema Unix possiamo confidare nel fatto che esso supporti:
umsdos : MsDos esteso per una migliore compatibilita con Unix (nomi lunghi, UID,
GID..)
27
ntfs : NTFS (Windows NT)
olivio@mistral:/etc$ df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/disk0s2 77814832 45281652 32277180 59% /
devfs 1 1 0 100% /dev
fdesc 1 1 0 100% /dev
<volfs> 512 512 0 100% /.vol
olivio@mistral:/etc$
28
il quale file e cartelle sono immagazzinati e organizzati su un dispositivo di archiviazione. In
questo sistema di documenti, Unix ci colloca, al suo avvio, in una working directory . A partire
da questa cartella base ci accorgeremo che lesplorazione avviene tramite una sequenza di
nodi di tipo gerarchico, molto simile ad un albero. Lalbero e piantato nel terreno in un luogo
chamato root(radice) chiamata /. Ogni elemento che troviamo in questo catalogo gerarchico e
o una cartella o un documento. Per specificare un particolare documento o cartella e necessario
che si specifichi anche un percorso per giungerci. Il percorso partira sempre dalla root del
catalogo gerarchico per arrivare al file o cartella voluta. Ogni directory nella sequenza sara
seguita da /. Ricordiamo che il simbolo / indica anche la root directory. Non confondiamo
dunque il carattere / usato ad inizio sequenza per indicare la root directory e il carattere /
usato solamente per separare le cartelle del catalogo gerarchico. Larborescenza di un sistema
Unix e quasi sempre comune a molti OS di tale derivazione. Di seguito forniamo un elenco delle
varie cartelle presenti a livello radice /. Ovviamente questo listing e generale e varia a
seconda delle varie distribuzioni di Unix installate.
/home : Cartelle personali degli utenti (home). Ovviamente a seconda della configura-
zione questa arborescenza puo cambiare
29
/usr : Comandi del sistema
/usr/bin : Comandi del sistema operativo specifici a Linux (ad esempio) e allinstallazione
realizzata. Molto spesso vi si trovano degli alias verso i comandi di /bin.
/usr/doc : Documentazione
/usr/sbin : Demoni del sistema specifici allinstallazione del sistema Unix in question.
/usr/X11R6 : X-Window
/var/mail : Mail
30
e /Developer) ma nascoste. Qui di seguito forniamo una lista dei documenti e cartelle visibili
alla radice del disco (o in altre parti del sistema) legati esclusivamente a Mac OS X:
.DS Store - Documento contenente i settaggi del finder in ogni cartella creata.
.Trashes - Cartella contenente i documenti che sono stati spostati nel cestino.
Developer/ - Cartella delle applicazioni di sviluppo Apple. Presente sul disco unicamente
se i Developer Tools sono installati.
Network/ - Applicazioni via Network. Allo stesso modo Librerie , cartelle Utente via
Network sono usate attraverso luso di questa cartella.
Shared Items/ - Cartella usata da OS 9 per condividere gli elementi tra diversi utenti.
31
Volumes/ - Contiene tutti i volumi montati dal sistema.
cores/ - Se il core dumps e in funzione sara allora creato in questa cartella sotto il nome
di core.pid.
var/ - I documenti di log sono contenuti in questa cartella. Generalmente anche tutti i
documenti modificati piu di frequente.
32
mantenendo una lista dei documenti che non dovrebbero essere visibili nel Finder. Usando poi
i Developer Tools forniti da Apple, il comando :
SetFile -a V documento
SetFile -a v documento
% pwd
cd nome_directory
che significa change directory seguito dal nome della cartella in cui si vuole arrivare. Lar-
gomento puo anche essere un percorso che definisce la directory nella quale si vuole lavorare.
Scrivere semplicemente :
% cd
nel prompt vuol dire chiedere alla shell di reindirizzarci direttamente nella nostra home-
directory. Scrivere:
cd ..
significa chiedere alla shell di scalare di un livello la gerarchia delle directory. Quando si e
nella cartella voluta possiamo chiedere al terminale di dirci cosa vi e dentro scrivendo:
33
% ls
che significa list . In questo caso otterremo il isting dei documenti escludento tutti quelli
che cominciano con .. Piu utile e da usare lopzione del comando -l:
% ls -l
3. Proprietario
4. Gruppo
5. Dimensione
ls si dimostra molto potente. E possibile effetture dei listing molto specifici e dettagliati.
Per esempio scrivendo:
% ls -lR /lib/l*
34
6.7 cp
cp e unutilita di sistema e permette di effettuare una copia del documento o cartella passato
in argomento. Ad esempio:
olivio@mistral:~/Desktop$ rm Stato.txt
olivio@mistral:~/Desktop$
Abbiamo rimosso il documento Stato.txt dalla Scrivania
35
rmdir - cancella una cartella
6.10 ln
ln serve alla creazione di alias materiali o simbolici. Un alias materiale e una referenza a un
documento. In questo caso cio corrisponde a unuguaglianza totale tra tutti gli alias materiali
sullo stesso documento o cartella; cio comporta la distruzione reale di un documento quando
lultimo alias materiale su questultimo viene eliminato. Un alias simbolico e invece una sem-
plice scorciatoia verso un documento: lalias simbolico rimarra attivo nel caso il documento
sorgente venga elimitato.
Ad esempio: se creiamo un alias materiale e 2 simbolici sullo stesso documento otterremo la
soppressione dellalias materiale e di uno dei due alias simbolici. Se sopprimiamo un documento
di destinazione otterremo un errore dallultimo degli alias simbolici.
36
Estensione Servizio/applicazione
.c Documento sorgenti in C
.cpp Documento sorgenti in C++
.h Documento di intestazione in linguaggio C o C++
.o Documento oggetto generato dallapplicazione
.a Biblioteca statica
.so Biblioteca dinamica
.sh Script shell
.gz o .z Documento compresso utilizzando gzip
.bz2 Documento compresso utilizzando bzip2
.jpeg, .jpg, .gif, .png, ... Documento immagine
.txt Documento testo
.tgz Documento in formato tar compresso utilizzando gzip
.deb Pacchetto di installazione debian
.rpm Pacchetto di installazione RedHat
.ns Documenti NeXTSTEP ancora presenti in Mac OS X talvolta
% ls /dev | more
dove | ridirigera luscita del comando allingresso di more. Il risultato sara una schermata
pagingdi 24 righe al termine della quale il comando more mostera a schermo:
--more--
37
attendendo la pressione della barra spaziatrice da parte dellutente per passare alla pagina
successiva. Allo stesso modo il comando:
% less
% cat
espressamente conCATenate , al pari di less e more stampa a schermo il testo del documento
in parametro ma, come suggerisce il nome del comando, cat puo essere in effetti usato per
concatenare e stampare piu file. Nel seguente esempio osserverete come vengono stampati uno
di seguito allaltro (senza interruzione o demarcazione del cambio di file) i file resolv.conf e
rc.shutdown:
Il comando:
% od
Puo essere utile se il documento da esaminare non e di testo ma, per esempio, un file dati.
In questo caso non ha senso cercare di visualizzarlo o editarlo come fosse un file di testo. E
cos possibile effettuare un dump ottenendo una rappresentazione visualizzabile del contenuto
binario. od (propriamente Octal Dump ) senza opzioni produce una visualizzazione ottale
delle parole del documento. Altre opzioni consentono di dividere il file in altre unita (byte
invece che parole)o di darne una rappresentazione decimale o esadecimale o ASCII . Per ottenere
questultima possibilita usare lopzione -c (visualizzazione a byte tentando una rappresentazione
ASCII):
olivio@mistral:~$ od -c q.log
0000000 T h i s i s T e X , V e r
0000020 s i o n 3 . 1 4 1 5 9 2 ( W
38
0000040 e b 2 C 7 . 5 . 5 ) ( f o r
0000060 m a t = t e x 2 0 0 6 . 5 . 4
0000100 ) 2 J U N 2 0 0 6 1 5
0000120 : 2 6 \n * * q \n ( / u s r / l o
0000140 c a l / t e T e X / s h a r e /
0000160 t e x m f . t e t e x / t e x /
0000200 l a t e x / t o o l s / q . t e
0000220 x F i l e i g n o r e d \n )
0000240 \n ! E m e r g e n c y s t o
0000260 p . \n < * > q \n \n *
0000300 * * ( j o b a b o r t e d ,
0000320 n o l e g a l \ e n d f
0000340 o u n d ) \n \n N o p a g e s
0000360 o f o u t p u t . \n
0000373
olivio@mistral:~$
\n
rappresentano, seguendo le convenzioi del linguaggio C, dei < CT RL J > cioe dei < N EW
LIN E > (se questi file sono stati ottenuti manualmente per es. con un editing, questi caratteri
< N EW LIN E > sono stati pero scritti non premendo il tasto < N EW LIN E > (talvolta
indicato con < LF > o < LIN E F EED > sulla tastiera) ma con un < RET U RN >: la
traduzione in < N EW LIN E > avviene automaticamente). Le coppie di caratteri
\0
rappresentano i caratteri nulli. Per esaminare il contenuto binario del direttorio corrente dare
il comando:
Altro esempio di paginazione con od: Visualizzazione in esadecimale del documento /etc/rc.
39
olivio@mistral:/etc$ od -x /etc/rc
0000000 2123 622f 6e69 732f 0a68 2023 6f43 7970
0000020 6972 6867 2074 3931 3739 322d 3030 2034
0000040 7041 6c70 2065 6f43 706d 7475 7265 202c
0000060 6e49 2e63 0a0a 202e 652f 6374 722f 2e63
0000100 6f63 6d6d 6e6f 0a0a 7865 6f70 7472 2d20
0000120 206e 6153 6566 6f42 746f 650a 7078 726f
0000140 2074 6e2d 5620 7265 6f62 6573 6c46 6761
0000160 650a 7078 726f 2074 6e2d 4620 6373 536b
0000200 616c 6873 650a 7078 726f 2074 6e2d 4e20
0000220 7465 6f42 746f 0a0a 6669 5b20 2d20 2064
0000240 532f 7379 6574 2f6d 6e49 7473 6c61 616c
40
stato ancora in grado di indicizzare . E anche largamente obsoleto data la sua lentezza
nelle ricerche.Se proviamo ad effettuare una ricerca del tipo:
il terminale cerchera a partire dalla radice del disco il documento fstab. Alloccorrenza
questa operazione potra rivelarsi abbastanza lunga.
In questo caso ho cercato la catena di caratteri apple in tutti i documenti presenti nella
cartella /etc/
41
Figura 8: Albero di metadati
sono dati che descrivono dati e sono cotenuti nellheader di un qualsiasi file indicizzato. Il
file, di per se, sara rappresentato sotto forma di albero contenente le diverse informazioni.
In questo modo Mac OS X puo identificare molto velocemente il tipo di documento e tutte
le informazioni contenute in esso. La ricerca viene dunque effettuata sullindice e non sul disco
come succedeva nelle precedenti versioni di Mac OS X e soprattutto questo tipo di ricerca e
42
attivabile da qualsiasi applicazione del sistema operativo. La funzione di ricerca dei dati diventa
dunque accessibile ovunque, integrandosi elegantemente con tutte le funzionalita di qualsiasi
processo.
Chi usa la linea di comando per lavorare e cercare i propri documenti, probabilmente usa i
classici comandi locate e find. Come gia spiegato, in entrambi i casi i due comandi hanno pregi
e difetti. Per supplire a questo classici comandi, Spotlight introduce una suite di comandi da
terminale dimostrandosi veloce e specifico nelle sue ricerche se usato correttamente.
Come gia accennato, Spotlight si basa su un database di metadati per effettuare le sue ricerche.
Di per se, Spotlight usa un plugin specifico per ogni applicazione con la quale interagisce. Questo
plugin estrae i dati dal documento dellapplicazione trattata e lo colloca nel suo database. I
cosidetti plug-in importatori sono contenuti in
/System/Library/Spotlight
/Library/Spotlight
Una semplice ricerca da linea di comando con Spotlight puo essere effettuata in questo modo:
mdfind termine
43
mdfind -onlyin
ci sara utile:
mdfind -live
ci permettera di vivere in tempo reale ogni cambiamento effettuato sui documenti ricercati.
Se vogliamo effettuare ricerche avanzate e piu specifiche, un possibile esempio puo essere
questo per la ricerca di un particolare autore nella nostra libreria iTunes:
Come avrete capito passare in argomento piu parole chiave alla shell Unix significa mettere
le parole in questione tra virgolette. Luso di queste convezioni implica una minima conoscenza
degli operatori booleani. Vediamo come funzionano nel caso di Spotlight.
Gli operatori booleani sono del tutto simili a quelli descritti tra le espressioni regolari in questo
tutorial:
il simbolo | indica OR
() crea gruppi
44
1. $ mdfind livio|pino
In questo modo cercheremo tutti i documenti che contengono o livio o pino.
2. $ mdfind livio(-pino)
cercheremo tutti i documenti contenenti livio, ma non pino
Notiamo in ogni caso che se passiamo un solo parametro al comando le doppie virgolette
non saranno necessarie. Se invece anche una simple quote e passata in parametro il comando
mdfind rispondera in questo modo:
$ mdfind laltro
>
Il terminale attende che la virgoletta sia chiusa per cominciare la ricerca. Quindi effettueremo
la nostra ricerca in questo modo in caso siano presenti delle virgolette nel nostro argomento:
$ mdfind laltro
Filtreremo i risultati di Livio con il comando grep che in questo caso sara accompagnato
dallopzione -i affiche sia case sensitive .
Il comando
mdls
45
olivio@mistral:~/Desktop/Music$ mdls Ani\ difranco.mp3
46
kMDItemFSSize = 5583098
kMDItemFSTypeCode = 0
kMDItemID = 479939
kMDItemKind = MP3 Audio File
kMDItemLastUsedDate = 2006-04-11 21:50:41 +0200
kMDItemMediaTypes = (Sound)
kMDItemTotalBitRate = 128
kMDItemUsedDates = (2006-04-11 21:50:41 +0200)
kMDIdem*
Invitiamo il lettore ad una lettura delle appendici per un elenco completo degli attributi dei
metadati e delle loro funzionalita.
Spotlight puo essere in parte personalizzabile. Per configurare Spotlight useremo il comando
mdutil
mdimport.
/Volumes/mistral:
Indexing disabled for volume.
47
2. puo ispezionare le impostazioni su un volume:
# mdutil -s /Volumes/mistral
/Volumes/mistral/:
Status: Indexing Disabled
# sudo mdutil -E /
48
7.6 Comandi vari: split, touch, du, wc...
split - ci permette di dividere un documento testo in piu parti.
olivio@mistral:/$ ls -l hola
-rw-r--r-- 1 olivio admin 13 Oct 29 18:34 hola
olivio@mistral:/$ date
Sun Oct 29 18:44:11 CET 2006
olivio@mistral:/$ touch hola
olivio@mistral:/$ ls -l hola
-rw-r--r-- 1 olivio admin 13 Oct 29 18:44 hola
Osserviamo in questo caso (tramite luso del comando ls- l) come il file hola abbia cambiato
la data di creazione.
49
Parte IV
% nano miodocumento.txt
Nel caso questo documento non esista, nano ne creera uno con tale nome. Nano ha il
vantaggio di essere abbastanza trasparente verso lutente.
Un panoramica di caratteristiche e funzionalita dei due editor di testo citati, e espletata
nelle prossime sezioni.
50
8.1 Avvio
Come gia spiegato in introduzione, per richiamare leditor Vi, sara necessario inserire il comando
vi e successivamente il documento da trattare o da creare.
jobs@mistral:~$ vi documento
Lesistenza o meno del documento passato in argomanto fara si che Vi si comporti in due
modi diversi. Nel primo caso vi aprira il documento in questione proponendone lediting. Nel
secondo Vi creera un documento nuovo. Se il documento passato in argomento e invece gia in
stato di editing in un altro terminale, Vi chiedera allutente le opzioni riportate in figura.
Nel nostro primo utilizzo di Vi, questultimo non e certamente preconfigurato e lo schermo
ci appararira in questo modo:
~
~
~
~
"doc" [New File]
E del tutto normale che leditor non sia preconfigurato. Spiegheremo in uno dei paragrafi
di seguito come configurare correttamente il proprio editor di testo. Le righe che vediamo
rappresentate sotto forma di :
51
~
sono righe di schermo atte a delimitare le zone di testo inseribili; quindi non si tratta di righe
di file, ma essenzialmente, righe oltre l End of File . Lultima riga che precede immediatamente
queste e lultima riga del buffer in questione.
8.2 Modalita
Vi e un editor di testo che funziona secondo la modalita di utilizzo in cui si trova. I due
principali stati o mode sono:
command mode (modalita comandi
i, I, a, A, o, O, s, c
ESC
Essenzialmente, in modlita inserzione, si puo solo inserire del testo o impartire il comando
ESC: per spostarsi nel testo, dunque, avremo bisogno di un particolare set di comandi che
vedremo piu avanti.
52
8.3 Terminare Vi
Per terminare il processo Vi e necessario usare il comando:
ZZ
Ovviamente per attuare il comando sara necessario essere in modalita comandi. In questa
modalita alcune considerazioni possono tornare utili:
<RETURN>
durante la digitazione del comando a schermo non viene presentato niente. Nel caso di
un comando a doppia lettera come ZZ, se digitiamo la prima Z Vi non presentera niente
a schermo.
53
jobs@mistral:~$ vi prova
seguito dal tasto RETURN
i :
passiamo in modalita inserzione aggiungendo un : seguito dal tasto RETURN per
andare a capo.
prova
seguito dal tasto ESC e dal comando ZZ
:
prova
~
~
~
~
-- INSERT --
<DELETE>
e possibile cancellare uno o piu caratteri tra quelli appena battuti, ovviamente in modalit
a inserzione. In Vi il risultato delluso del suddetto tasto puo risultare non proprio chiaro: il
cursore arretra verso sinistra di un carattere ma non cancella dallo schermo il carattere voluto.
Affinche avvenga, in realta, una sostituzione basta premere il carattere che si vuole immettere
al posto di quello preso in esame da Vi nellarretramento.
Inoltre alcune considerazioni sulluso del tasto DELETE in Vi ci sembrano doverose:
il tasto DELETE si puo usare solo in modalita inserzione. Per cancellare testo in modalita
comandi si usano altre combinazioni da tastiera.
54
il tasto DELETE cancella solo i caratteri che sono stati inseriti dopo lultima inserzione
nel buffer o, se vogliamo, dopo lultima richiesta di inserzione.
<CTRL-W>
<CTRL-U>
Questo in caso ci si trovi con il cursore sulla riga effettivamente interessata. Ovviamente
questa combinazione non implica mai la cancellazione di un testo la cui inserzione si avvenuta
prima dellultima operazione effettuata. Se, ad esempio , linserzione del testo e avvenuta
quando una riga e gia stata inserita in precedenza, questa combinazione di tasti non cancellera
tutta la riga, ma solo quella nuova, dunque corrente .
A questo punto, e essenziale parlare delluso dei tasti freccia. I tasti freccia non possono
essere usati in modalita inserzione, poiche alcun comando e compreso da Vi se posto in tale
configurazione. I tasti freccia non fanno parte della tastiera alfanumerica di base e, dunque,
questo genere di tasti equivalgono ad una sequenza di caratteri. Una tale sequenza e chiamata
escape sequence ed inizia sempre con il carattere ESC. Vi, dunque, interpreta luso dei tasti
freccia come un ESC con, in aggiunta, un altro carattere: di conseguenza uscira prima dalla
modalita inserzione e poi cerchera di interpretare il carattere dopo lESC.
Generalmente, il risultato delluso dei tasti freccia, e non voluto o erroneo.
55
insert , maiuscolo in questo caso. Questo comando e equivalente a una coppia di comandi:
<SPAZIO> <TAB>
2. effettua uninserzione di testo allinizio della riga corrente, come se usassimo il tazto i
di inserzione classica
o, O
Questi permettono di inserire una nuova riga tra due altre gia scritte. Se, infatti, in modalita
inserzione si continua a scrivere andando a capo ad ogni fine riga usando il tasto RETURN,
inseriremo un testo su piu righe.
Useremo, dunque, i comandi o oppure O open . Il comando o minuscolo, stipula una
riga sotto quella corrente in maniera del tutto indipendente dalla posizione del cursore su
questultima e, ovviamente, mette Vi in modalita inserzione. Al termine delloperazione si puo
tornare in modalita comandi premendo, al solito, il tasto ESC.
Se invece, l obiettivo, e quello di aprire una nuova riga sopra la corrente possiamo usare il
comando O maiuscolo. Allo stesso modo termineremo loperazione con il tasto ESC.
56
8.5.1 Spostamenti unitari: caratteri o righe
Ad un primo impatto, la scelta di tali lettere per lo spostamento, puo sembrare poco intui-
tiva; potremo osservare, in seguito, come i tasti enunciati sono disposti strategicamente sulla
tastiera e quindi la loro posizione risultera, con il passare del tempo, del tutto naturale.
57
: SP AZIO sposta il cursore a destra di un carattere.
Il comando:
(zero), porta il cursore sul primo carattere della riga corrente. Il comando:
porta al primo carattere che non sia < SP AZIO >< T AB > della riga in questione.
Il comando:
porta il cursore sullultimo cursore sul primo carattere della riga corrente.
Con Vi e possibile portare direttamente il cursorse su un carattere specifico della riga corrente.
E possibile, altres, portarsi anche su una stringa specifica appartenente alla riga corrente. I
comandi presentati di seguito sono:
f - comando find seguito da un carattere portera il cursore sulla prima occorrenza del
carattere sulla riga.
t - molto simile al comando f, ma in questo caso il cursore si sposta sul carattere che
precede quello ricercato.
Alcuni esempi :
58
nel caso si applichi il comando:
fO
sulla stringa di caratteri Mara Olivio Nina, il cursore si portera sulla prima occorrenza
del carattere. Sempre sullo stesso esempio, se il cursore si trova inizialmente su una
delle lettere centrali della stringa, esso proseguira sino a trovare la giusta occorrenza del
carattere specificato.
tF
sempre sulla stessa stringa di caratteri riportata nel precedente esempio, il cursore si
portera sullo
<SPAZIO>
I comandi citati possono essere resi piu potenti, facendoli precedere da un contatore: in
questo modo indicheremo a Vi quante volte deve essere ripetuta la ricerca del carattere in
questione sulla riga.
Ricordiamo inoltre che il comando:
ha come funzione quella di ricercare ancora una volta la ricerca iniziata con uno dei comandi
f o F, usando lo stesso carattere di ricerca sulla stessa riga.
Allo stesso modo, il comando:
effettua le stesse operazioni che il comando ;, ma in questo caso effettua la ricerca in direzione
opposta allultimo comando di ricerca.
59
8.5.4 Spostamenti a parole
Il comando:
e identico a w. In questo caso, pero, la parola e delimitata solo da spazi, TAB e fine
riga.
con il consueto uso, opzionale, di un contatore servono a questo scopo. Il cursore si spsotera,
in generale, sul primo carattere diverso dallo SPAZIO e dal TAB presente sulla riga in questione.
CTRL - *
che consente lo spostamento verso la fine o verso linizio del file a pagina intera di testo o a
mezze pagine .
In sintesi:
60
Combinazione Uso
CTRL-F (forward) avanti di una pagina intera
CTRL-B (backward) indietro di una pagina intera
CTRL-D (down) avanti di mezza pagina
CTRL-U (up) indietro di mezza pagina
In questo caso luso di un contatore non ha lo stesso significato delle precedenti sintassi usate
fin qui. Un contatore che precede le prime due combinazioni descritte indica di quante pagine
ci si deve spostare. Il contatore che precede le ultime due combinazioni nellordine rappresenta
il numero di righe di cui si deve spostare il cursore con il corrente e la prossima occorrenza di
combinazione tastiera che non specifichi contatore.
578G
1G
$G
61
Nel nostro esempio, la riga in questione e la numero 3. Ci possiamo rendre conto che il
metodo per la visualizzazione del numero di riga, cos implementato, non e pratico per chi,
ad esempio, volesse conoscere il numero di linea molto spesso. E allora possibile editare la
configurazione delleditor per implementare questa funzionalita. In modalita comandi:
:set number
o, in maniera concisa:
:se nu
:set nonumber
:se non
Appena viene premuto il suddetto tasto il cursore si porta sullultima riga dello schermo e
lutente sara invitato ad inserire la stringa ricercata. Termineremo la redazione della nostra
stringa con un RETURN .
Vi appare in questo modo, in funzione di ricerca:
pippo
pluto
paperino
~
~
~
/pluto
62
Troveremo il cursore direttamente su pluto, alla fine della ricerca.
Ricordiamo una piccola eccezione alla regola di VI che impedisce di usare comandi seguiti
da un RETURN in modalita comandi. Nel nostro caso specifico, sara sempre necessario usare
il RETURN ogni volta che terminiamo una stringa in modalita ricerca, cosa ovviamente non
necessaria usando altri comandi presenti in Vi.
Un esempio , puo essere lusodi una stringa con caratteri nella nostra stringa di ricerca:
/Steve Jobs
Leditor cerchera una stringa seguita da uno spazio e da unaltra stringa, tutti e tre sulla
stessa riga. La ricerca e, al solito, case sensitive e continua automaticamente dallinizio fino al
raggiungimento del punto di partenza. Se dopo aver effettuato uan riceca su tutto il file, fino
al ritorno al punto corrente, la stringa non e stata trovata. Vi lo segnalera in questo modo:
Una volta impostata la ricerca, la stringa ricercata rimane memorizzata nel corso dellintera
sessione di lavoro. Non sara dunque necessario reimpostare la ricerca ogni qualvolta si vuole
ricominciare la ricerca della stessa stringa: bastera a questo scopo impartire il comando:
abbiamo gia detto che la ricerca va dal punto corrente verso la fine del documento. Volendo,
pero, iniziare la ricerca nellaltra direzione, possiamo usare il comando:
63
al posto del /. Una volta impostate la ricerca con il punto interrogativo il significato dei
comandi n e N sara invertito: n cerchera la prossima occorrenza allindietro, N in
avanti.
La ricerca e, al solito, case sensitive . E possibile, in questo caso, richiedere una ricerca che
non sia case sensitive usando il comando:
:set ignorecase<RETURN>
:set noignorecase<RETURN>
Il comando:
cancella il carattere in trattamento da parte del cursore. E possibile anche cancellare piu
caratteri facendo precedere x con il numero di caratteri da cancellare.
Del tipo:
3x
canacella il carattere alla sinistra del cursore, e come x puo essere preceduto da un contatore.
64
8.6.2 Cancellazione parole, righe e altre unita di testo
Il comando:
sta per delete e si compone di una seconda parte che definisce un comando di movimento. d
realizza la cancellazione della parte di testo che va dalla posizione corrente del cursore fino alla
posizione che il cursore andrebbe ad assumere con il comando di movimento impostato.
Ad esempio:
La catena di caratteri:
usando il comando:
3w
3dw
65
uno due tred
tre quattro cinque sei
2dw
uno
tre quattro cinque sei
il comando:
3dw
avremo:
w, W
b, B
t
f
/
?
66
8.6.3 Cancellazione righe intere
Vi conserva dei registri numerici ; una specie di cache che contiene le parti di testo cancellata
dallutente. In questo modo Vi, tramite il comando:
p
oppure
P
La memorizzazione temporanea nei registri numerici non viene alterata dai comandi di sposta-
mento; cio significa che non solo una riga appena cancellata puo essere ripristinata, ma cio puo
essere fatto in un punto diverso da quello dove le righe si trovavano originariamente.
Il comando p stampa le righe appena cancellate sotto la riga corrente, mentre il comando
P le stampa al di sopra. Nel caso di questi comandi, la funzione contatore classico non esiste.
Al contrario possono essere ripetuti n volte, del tipo:
pppppppp
67
Parte V
I processi
9 Gestione dei processi
I processi su Unix vengono gestiti da una serie di comandi specifici e permettono di interagire
con le applicazioni o i demoni lanciati sulla macchina.
olivio@mistral:~$ ps
PID TT STAT TIME COMMAND
288 p1 S 0:00.17 -bash
395 p1 S 0:00.02 su
olivio@mistral:~$
PID COMMAND %CPU TIME #TH #PRTS #MREGS RPRVT RSHRD RSIZE VSIZE
410 top 6.8% 0:00.56 1 18 20 720K 860K 1.16M 26.9M
406 TextEdit 0.0% 0:01.98 2 103 127 2.34M 8.50M 6.57M 220M
68
401 lookupd 0.0% 0:00.02 2 34 36 372K 1.05M 968K 28.1M
395 bash 0.0% 0:00.01 1 14 17 216K 1.23M 796K 27.1M
394 su 0.0% 0:00.01 1 18 44 172K 1.31M 2.00M 27.2M
358 mdimport 0.0% 0:00.85 4 65 96 1.35M 4.50M 3.35M 65.1M
renice - la priorita del processo viene ri-passata in parametro ad un processo gia attivo.
La gestione dei processi in Unix o comunemente scheduler organizza lesecuzione dei processi in
base ad un certo livello di priorita. Tale priorita viene calcolata dal sistema in base al tipo di
processo, al suo comportamento e ad una variabile additiva che in questo tutorial chiameremo
nice .
I valori correnti di priorita e NICE per i processi possono essere visualizzati con il comando
ps con lopzione -l (si veda la sezione dedicata al comando). Purtroppo non ce uniformita sulla
gamma di valori per queste due variabili. La priorita potrebbe per esempio essere un intero di
due cifre variabile tra 0 e 39 o tra -20 e 20. Lunica certezza e che piu alta e la priorita piu
lentamente viene eseguito il processo. Inoltre la variabile nice viene in qualche modo sommata
nel calcolo della priorita, per cui priorita e NICE elevati implicano esecuzione piu lenta del
processo.
Ad esempio:
Quando viene creato un nuovo processo, alla variabile NICE viene assegnato un valore inter-
medio (20 nel caso di gamma 0/39 o 0 nel caso -20/20) a meno che lutente non richieda una
variazione con il comando nice.
Ad esempio: Se si desidera semplicemente ridurre il peso di un comando sul sistema si
preceda il comando con un nice senza alcuna specificazione numerica mentre se si desidera far
girare un processo alla minima priorita si potranno dare i comandi
69
$ nice -20 gcc titti.c & # Bourne shell
%nice +20 gcc titti.c & # C shell
olivio@mistral:~$ ps
PID TT STAT TIME COMMAND
288 p1 S 0:00.17 -bash
395 p1 S 0:00.03 su
421 p1 S+ 0:00.01 nano
424 p2 S 0:00.03 -bash
olivio@mistral:~$ sudo kill 421
Password:
olivio@mistral:~$ ps
PID TT STAT TIME COMMAND
288 p1 S 0:00.17 -bash
395 p1 S+ 0:00.03 su
424 p2 S 0:00.03 -bash
olivio@mistral:~$
In questo caso osserviamo la terminazione del processo nano con PID 421. Con un secondo ps
osserviamo lassenza di nano tra i processi attivi.
70
Ad esempio:
Supponiamo di voler eseguire una lista di comandi in un momento preciso della giornata.
Scriveremo questi comandi in un documento di testo chiamato ad esempio Programmazione.
date >Stato.txt
who >>Stato.txt
ps >>Stato.txt
olivio@mistral:~$ atq
1 Thu Nov 2 08:15:00 2006
olivio@mistral:~$
Con il comando at assegnamo alle 8:15 lesecuzione dello script Programmazione. Il risultato
sara:
olivio@mistral:~$ atq
1 Thu Nov 2 08:15:00 2006
olivio@mistral:~$ date
Thu Nov 2 08:315:00 CET 2006
olivio@mistral:~$ cat Stato.txt
Thu Nov 2 08:315:00 CET 2006
olivio console Nov 1 19:16
olivio ttyp1 Nov 1 21:17
olivio ttyp2 Nov 1 22:37
71
PID TT STAT TIME COMMAND
288 p1 S 0:00.17 -bash
395 p1 S+ 0:00.04 su
470 p2 S 0:00.02 -bash
493 p2 S+ 0:00.00 -bash
olivio@mistral:~$ atq
olivio@mistral:~$
Ossrviamo che alla data specificata il comando e stato eseguito e che rieseguendo il comando
atq non viene piu mostrato alcun lavoro da eseguire.
Per effettuare una programmazione ci serve un documento di programmazione cron per -ad
esempio- due comandi ripetitivi. Chiameremo questo documento ProgrammazioneCron.
* * * * * date >>/home/olivio/Cronometro.txt
30 12 1 1 * who
In questo caso eseguiamo ogni minuto il comando date con registrazione del risultato di esecu-
zione in un documento testo Cronometro.txt. Al trentesimo minuto della dodicesima ora del
primo giorno di ogni primo mese dellanno vogliamo che venga eseguito questo comando.
72
Su 25 Aug 2006, 08:57:01 (UTC+0200)
Su 25 Aug 2006, 08:58:01 (UTC+0200)
Su 25 Aug 2006, 08:59:01 (UTC+0200)
olivio@mistral:~$
$ gcc titti.c
Dato in questo modo (in foreground) il controllo della shell tornera allutente solo al termine
della compilazione. Per ottenere lesecuzione in background basta terminare il comando in
questo modo:
73
$ ps
PID TT STAT TIME COMMAND
3354 00 S 0:13 -ksh (ksh)
3475 00 S 0:00 gcc titti.c
3482 00 R 0:00 ps
74
Parte VI
olivio@mistral:/$ id
uid=501(olivio) gid=501(olivio) groups=501(olivio), 81(appserveradm),
79(appserverusr), 80(admin)
groups - allo stesso modo groups visualizza i gruppi ai quali appartiene lutilizzatore
attivo.
olivio@mistral:/$ groups
olivio appserveradm appserverusr admin
olivio@mistral:/$ finger
Login Name TTY Idle Login Time Office Phone
olivio olivio *con 10:52 Sun 08:12
olivio olivio p1 Sun 18:09
olivio olivio p2 10 Sun 10:14
olivio olivio p3 2:02 Sun 10:23
11 Il documento passwd
Il documento passwd (collocato in /etc/passwd) si occupa di gestire e di recuperare utilizzatori
e gruppi di entita presenti sul sistema. Questo documento, presente su tutti i sistemi Unix,
non ha alcune effetto su Mac OS X. Chi non sia interessato al suo utilizzo puo passare diret-
tamente alla sezione successiva dove descriveremo la gestione delle sue caratteristiche tramite
altre metodologie. passwd appare in questo modo:
75
nobody:*:-2:-2:Unprivileged User:/:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico
lp:*:26:26:Printing Services:/var/spool/cups:/usr/bin/false
2. password (criptata)
5. descrizione
7. shell
passwd
Infine il comando pwck verifica infine la coerenza dei documenti /etc/passwd e /etc/shadow
76
11.2 Gestione dei gruppi
I gruppi vengono gestiti attraverso tre principali comandi:
Esempio:
In questo esempio nel nostro documento passwd sono state aggiunte queste linee:
fermi:x:1001:1001::/home/fermi:/bin/sh
In /etc/shadow :
fermi:$1$OiUYxLOq$97N3L1zEHtnjalbwceUyl0:13384:0:99999:7:::
In /etc/group :
physiciens:x:1001:fermi
In /etc/gshadow :
physiciens:!::fermi
77
12 Mac OS senza passwd ?
Come gia precisato, Mac OS, pur includendo un documento passwd, questo non e sfruttato dal
sistema se non quando si e in modalita single user. Se si vogliono sfruttare queste funzionalita
bisognera accedere al database NetInfo, un repository delle informazioni della local directory.
La maniera piu semplice di aggiungere un utente o un gruppo al proprio sistema Mac OS e
lutilizzo del comando niload:
Dopo aver creato il nuovo utente (in questo caso mariano), sara necessario settare la pas-
sword. In questo caso useremo il comando ditto per creare la cartella home e settare i privilegi
correttamente:
E successivamente:
78
read (r) - Per un documento, il privilegio lettura permette di leggere il contenuto del
documento. Nel caso di una cartella ne permette lesplorazione.
Quando si hanno tutti e tre i privilegi di accesso la sigla sara rwx e via via per le varie
combinazioni delle tre lettere. Unix permette anche che gli utenti vengano definiti in gruppi, in
modo da rendere la gestione dei privilegi piu semplice e immediata. Le entita presenti nelluso
dei privilegi di accesso sono dunque:
Proprietario - Il proprietario (owner) e quasi sempre lutente che ha creato il file. Quasi
tutti i documenti e cartelle nella propria Home Directory avranno come proprietario
lutente loggato in quel momento.
Gruppo - Gli utenti admin su Mac OS X sono membri di gruppi chiamati admin e
wheel, mentre il super-utente e membro del gruppi chiamati admin e staff. Quasi tutti
i documenti e le cartelle sono assegnati a uno di questi tre gruppi.
Altri - Altri (Others) si riferisce a tutti quegli utenti che non sono ne utenti ne fanno
parte di alcun gruppo.
olivio@mistral:~/Sites$ ls -l
total 8
drwxr-xr-x 5 olivio olivio 170 Jul 3 12:53 images
-rw-r--r-- 1 olivio olivio 5754 Jul 3 12:53 index.html
olivio@mistral:~/Sites$
79
Osserveremo la presenza di dieci caratteri nella prima colonna:
Carattere 1: Otterremo :
1. - : e un documento ordinario
2. d : e una directory
3. l : si tratta di un alias simbolico
4. s : si tratta di un documento speciale
% ls -l /etc/passwd
(rw-) questi tre caratteri descrivono i privilegi relativi al suo possessore. Nel nostro caso
potra dunque leggere e scrivere il file ma non eseguirlo.
(r) questi caratteri descrivono i privilegi per tutti gli utenti appartenenti allo stesso
gruppo del proprietario. Nel nostro caso possibilita di lettura ma non di scrittura ne di
esecuzione.
(r) i restanti caratteri descrivono i privilegi per tutti gli altri utenti. Nel nostro caso
lettura ma non scrittura ne esecuzione.
80
13.1 chmod, chown, chgrp, umask : modificare i privilegi
Il comando che ci permette di cambiare i privilegi e chmod . Il comando chmod richede che gli
venga specificato il nuovo privilegio da assegnare e il documento o cartella al quale assegnarlo.
Per settare il privilegio e necessario che si usi la notazione indicata rwx per specificare il
tipo di privilegio e la cosidetta ugo notation per specificare dove e necessario applicarlo.
Per definire il tipo di cambiamento voluto e necessario usare il segno + per aggiungere un
privilegio, il segno - per rimuovere un privilegio e il segno = per assegnare il privilegio
direttamente. Ad esempio, volendo cambiare i privilegi al documento .shrc nella nostra cartella
personale possiamo usare questa stringa:
In questo esempio stiamo specificando un privilegio di lettura e scrittura per il gruppo senza
possibilita di esecuzione. Possiamo combinare privilegi multipli nei nostri comandi separando
ogni operazione con una virgola, ovviamente non usando alcuno spazio. Ad esempio:
settera i privilegi rwx per il proprietario del documento lollo, mentre assegnera al
gruppo privilegi r-x . I comandi chown , chgrp usano la stessa sintassi che chmod e servono
rispettivamente per cambiare il proprietario e il gruppo. Il comando umask ci servira per
scegliere i privilegi di default di un documento alla sua creazione.
olivio@mistral:~$ ls -l projet.java
-rw-r--r-- 1 olivio olivio 3751 May 8 14:37 projet.java
olivio@mistral:~$ chmod +x projet.java
olivio@mistral:~$ ls -l projet.java
-rwxr-xr-x 1 olivio olivio 3751 May 8 14:37 projet.java
olivio@mistral:~$ chmod -x projet.java
olivio@mistral:~$ ls -l projet.java
-rw-r--r-- 1 olivio olivio 3751 May 8 14:37 projet.java
olivio@mistral:~$
81
In questo caso aggiungiamo i privilegi di esecuzione al documento projet.java e successivamente
annulliamo questa modifica.
olivio@mistral:~$ ls -l projet.java
-rw-r--r-- 1 olivio olivio 3751 May 8 14:37 projet.java
olivio@mistral:~$ chmod 777 projet.java
olivio@mistral:~$ ls -l projet.java
-rwxrwxrwx 1 olivio olivio 3751 May 8 14:37 projet.java
olivio@mistral:~$ chmod 644 projet.java
olivio@mistral:~$ ls -l projet.java
-rw-r--r-- 1 olivio olivio 3751 May 8 14:37 projet.java
olivio@mistral:~$
Configurazione in rwx per il proprietario, il gruppo e tutti gli altri utilizzatori del documento
projet.java. In questo caso osserviamo che i diritti vengono espressi su questa forma:
olivio@mistral:~$ ls -l projet.java
-rw-r--r-- 1 olivio olivio 3751 May 8 14:37 projet.java
olivio@mistral:~$ sudo chown guest projet.java
Password:
olivio@mistral:~$ ls -l projet.java
-rw-r--r-- 1 guest olivio 3751 May 8 14:37 projet.java
olivio@mistral:~$ sudo chown olivio projet.java
olivio@mistral:~$ ls -l projet.java
-rw-r--r-- 1 olivio olivio 3751 May 8 14:37 projet.java
olivio@mistral:~$
olivio@mistral:~$ ls -l projet.java
-rw-r--r-- 1 olivio olivio 3751 May 8 14:37 projet.java
82
olivio@mistral:~$ sudo chown guest:staff projet.java
olivio@mistral:~$ ls -l projet.java
-rw-r--r-- 1 guest staff 3751 May 8 14:37 projet.java
olivio@mistral:~$ sudo chown olivio:olivio projet.java
olivio@mistral:~$ ls -l projet.java
-rw-r--r-- 1 olivio olivio 3751 May 8 14:37 projet.java
olivio@mistral:~$
Modifica del proprietario e del gruppo verso lutente guest e il gruppo staff e inverso.
olivio@mistral:~$ ls -l projet.java
-rw-r--r-- 1 olivio olivio 3751 May 8 14:37 projet.java
olivio@mistral:~$ sudo chgrp staff projet.java
olivio@mistral:~$ ls -l projet.java
-rw-r--r-- 1 olivio staff 3751 May 8 14:37 projet.java
olivio@mistral:~$ sudo chgrp olivio projet.java
olivio@mistral:~$ ls -l projet.java
-rw-r--r-- 1 olivio olivio 3751 May 8 14:37 projet.java
olivio@mistral:~$
Per rendere effettivo lo sticky bit viene utilizzato il comando chmod. Osserveremo che dopo
il carattere dedicato ai privilegi, vi sara il carattere t al posto del classico x per identificare la
sua presenza.
83
olivio@mistral:~/Sites$ ls -l
total 8
drwxr-xr-x 5 olivio olivio 170 Jul 3 12:53 images
-rw-r--r-- 1 olivio olivio 5754 Jul 3 12:53 index.html
olivio@mistral:~/Sites$ chmod 1777 images/
olivio@mistral:~/Sites$ ls -l
total 8
drwxrwxrwt 5 olivio olivio 170 Jul 3 12:53 images
-rw-r--r-- 1 olivio olivio 5754 Jul 3 12:53 index.html
olivio@mistral:~/Sites$ cd images/
olivio@mistral:~/Sites/images$ su guest
Password:
guest@mistral:~/Sites/images$ ls -l
total 12
-rw-r--r-- 1 olivio olivio 2326 Jul 3 12:53 apache_pb.gif
-rw-r--r-- 1 olivio olivio 2829 Jul 3 12:53 macosxlogo.gif
-rw-r--r-- 1 olivio olivio 3698 Jul 3 12:53 web_share.gif
guest@mistral:~/Sites/images$ rm -f apache_pb.gif
rm: Operation not permitted.
In questo caso utilizziamo il comando chmod 1777 su una cartella inserendo lo sticky bit e
le autorizzazioni in controllo totale. Sara poi impossibile allutilizzatore guest di eliminare il
documento per il quale le autorizzazioni lo permettono; questo fino a quando lo sticky bit sara
presente.
84
del firmware (4.1.7 o 4.1.8), disponibile per i modelli di ultima generazione di Mac. Attraverso
questo aggiornamento e possibile specificare una password per lOpenFirmware.
Attenzione! Apple non supporta questa funzionalita, (come viene specificato nel TIL
n 106292). In effetti, il solo modo per eliminare questa protezione, e di portare il
proprio Mac presso un centro di assistenza autorizzato fuori qualunque tipo di ga-
ranzia (anche AppleCare). Anche il reset della PRAM (opzione+command+P+R)
non risolverebbe il problema.
Modalita sicurezza assoluta (full)- che chiede la password ad ogni avvio, prima della scelta
della partizione di boot.
Modalita sicurezza normale (command) - che permette di partire senza alcuna password
sulla partizione scelta, senza permettere alcun altro coman- do a livello di firmware (quindi
alcuna possibilita di cambiare la partizione di boot senza la password)
1. Partire sotto OpenFirmware- Per avviare con OpenFirmware, spegnete la vostra macchi-
na, successivamente riaccendetela tenendo premuto option+command+O+F. Vi ritrover-
te di l a poco in modalita linea di comando con una tastiera di tipo QWERTY.
85
3. Specificare la modalita di sicurezza- Scrivete il comando:
per disattivare tutti i tipi di protezione. Bastera registrare e riavviare per verificare le
modifiche effettuate. Scrivete il comando:
reset-all
86
Parte VII
Le shells
La shell e il programma piu importante in un sistema Unix. La shell e linterfaccia con il sistema
Unix, una sorta di traduttore che interpreta i comandi dellutente e li invia al kernel. Possiamo
definire la shell in questo modo:
La shell e il programma che il kernel fa partire per primo, e in quanto tale e un processo
come lo puo essere qualunque applicazione installata sulla macchina in questione. La
particolarita di tutto cio sta nel fatto che il kenel puo eseguire lo stesso programma
(dunque anche la stessa shell) per ogni utente loggato.
Di fatto su ciascun sistema Unix e possibile aver installati diversi tipi di interpreti (quindi
diverse modalita di esecuzione di un comando). Tra questi ricordiamo sh, bash(ora default
su Mac OS X), csh, tcsh, zsh. Questi interpreti vengono denominati comunemente shells
in ambiente Unix. Fondamentalmente tutte le shell fanno lo stesso identico lavoro (magari
con diversa sintassi) ma alcune sono piu evolute di altre, in sostanza perche sono state
compilate per estendere le capacita delle shells piu anziane.
Qualunque sia la shell utilizzata e importante ricordare che tutte le shells sono case sensiti-
ve e quindi non ci possiamo permettere di usare un comando con lettere maiuscole o minuscole
a nostro piacimento. LS,ls, Ls. LS sono quattro comandi diversi sia che si usi sh, csh, tcsh o
bash.
14 Convenzioni e utilizzo
Come gia detto esistono diversi tipi di shells:
87
sh (Bourne shell)
csh (C shell)
...
Usualmente in Mac OS X la shell di default e bash (da Mac OS 10.2 in poi). Per ciascuna
shell esiste un documento di configurazione comune a tutti gli utilizzatori ,generalmente presente
in /etc, modificabile dallamministratore del sistema e utilizzato ogni volta che la shell e lanciata.
Ogni shell di Mac OS X puo essere lanciata in modalita diverse. A seconda dei casi, una
shell e lanciata automaticamente in una modalita piuttosto che in unaltra. Di per se, quando
accediamo al terminale, la shell e lanciata in modo login . Ma questo stato puo variare quando,
ad esempio, accediamo al terminale tramite la finestra di login:
>console
Queste considerazioni, ci torneranno utili nella sezione di personalizzazione della shell ; esiste la
possibilita di un documento di configurazione, per ognuna shell, per ciscun utilizzatore, presente
alla radice del repertorio di base dellutente, modificabile dallutente stesso e utilizzato dopo il
documento di configurazione comune. Ma vedremo questo piu avanti.
14.1 Variabili
Un variabile e caratterizzata da un nome e un valore allinterno della shell. Per settare
una variabile e utilzzato il comando set. Scrivendo semplicemente set nel nostro terminale
otterremo una lista delle variabili settate di default nella nostra shel, su questa forma:
olivio@mistral:/$ set
BASH=/bin/bash
BASH_VERSION=2.05b.0(1)-release
...
Per designare il valore di una variabile si utilizza il suo nome preceduto dal carattere $
88
olivio@mistral:/$ echo HOSTNAME
HOSTNAME
olivio@mistral:/$ echo $HOSTNAME
cable-xx.xx.xx.xx.coditel.net
olivio@mistral:/$
olivio@mistral:/$ TOTO=1500
olivio@mistral:/$ echo $TOTO
1500
olivio@mistral:/$
PS1 : prompt
89
14.2 Le espressioni regolari o caratteri joker
Le espressioni regolari (in inglese regular expression , termine poi spesso aabbreviato in regexp
regex o RE ) sono una sintassi attraverso la quale si possono rappresentare insiemi di strin-
ghe. Gli insiemi caratterizzabili con espressioni regolari sono anche detti linguaggi regolari (e
coincidono con quelli generabili dalle grammatiche regolari e riconoscibili dagli automi a stati
finiti).
Di fatto la nostra shell Unix si comporta come un automa quando bisogna indicarle gruppi
di documenti o cartelle. Questa tecnica tramite espressioni regolari si rivela molto potente anche
in ambiti piu vasti.
In Unix la sintassi base delle espressioni regolari e ora definita obsoleta dal POSIX, ma
resta ancora molto usata a causa della compatibilita con gli anziani sistemi Unix. La maggior
parte delle utility che usano le espressioni regolari (grep e una di queste) usano in ogni caso il
sistema Unix di default. In ogni sintassi, la maggior parte dei caratteri sono considerati come
letterali : una a corrisponde ad a, la catena di caratteri bc trova sempre bc ... Questa
corrispondenza non e rispettata per alcuni caratteri detti meta:
[ ]
- Trova un singolo carattere contenuto nelle parentesi. Ad esempio, [abc] trova o una a,
b, o c.
[a-z]
- e un intervallo e trova ogni lettere minuscola dellalfabeto. Possono esserci casi misti:
[abcq-z] trova a, b, c, q, r, s, t, u, v, w, x, y, z, esattamente come [a-cq-z]. Il carattere - e
letterale solo se e primo o ultimo carattere nelle parentesi: [abc-] o [-abc]. Per trovare un
carattere [ o ], il modo piu semplice e metterli primi allinterno delle parentesi: [][ab]
trova ], [, a o b.
[^]
- Trova ogni singolo carattere non incluso nelle parentesi. Ad esempio,
[^abc ]
90
trova ogni carattere diverso da a, b, o c.
[^a-z]
trova ogni singolo carattere che non sia una lettera minuscola. Come sopra, questi due
metodi possono essere usati insieme.
$
- Corrisponde alla fine di una riga (o ad una riga, quando usato in modalita multilinea)
^
- Corrisponde allinizio di una riga (o ad una riga, quando usato in modalita multilinea)
\( \)
- Definisce una sottoespressione marcata. Cio che e incluso nellespressione, puo essere
richiamato in seguito.
\n
- Dove n e una cifra da 1 a 9; trova cio che la nesima sottoespressione ha trovato. Tale
costrutto e teoricamente irregolare e non e stato adottato nella sintassi estesa delle regexp.
*
- Unespressione costituita da un singolo carattere seguito da *, trova zero o piu copie
di tale espressione. Ad esempio, [xyz]* trova , x, y, zx, zyx, e cos via. Ad
esempio:
\n*
Dove n e una cifra da 1 a 9, trova zero o piu iterazioni di cio che e la nesima sottoespressione
ha trovato. Ad esempio:
\(a.\)c\1*
91
\( e \)
seguita da * non e valida. In alcuni casi, trova zero o piu ripetizioni della stringa che
lespressione racchiusa ha trovato. In altri casi, trova cio che lespressione racchiusa ha
trovato, seguita da un letterale *.
\{x,y\}
- Trova lultimo blocco almeno x volte e non piu di y volte. Ad esempio,
a\{3,5\}
Alcuni esempi:
.atto
92
14.3 Pipes
Il carattere detto pipe | tra due comandi permette di eseguire il primo comando inviando il
suo risultato di esecuzione (come parametro di entrata) al secondo.
ls | sort
La lista dei documenti della cartella su cui si sta lavorando e inviata al comando sort per una
selezione in ordine alfabetico e successiva visualizzazione.
redirigere i risultati in uscita verso un documento in aggiunta alla fine del documento
usanto i caratteri >> tra il comando e il nome del documento.
Tramite il carattere < si ottengono i dati richiesti verso la tastiera del il comando a
partire dal contenuto del documento.
In questo caso salviamo i risultati del comando date nel documento uscita.txt. Nel secondo
invece aggiungiamo i risultati del comando who alla fine del documento uscita.txt.
Ossevando poi il contenuto del documento uscita.txt tramite il comando cat, osserveremo
che loperazione di redirezione e stata effettuata correttamente :
93
14.5 Alcuni esempi sulluso delle convenzioni
Il carattere speciale per eccellenza e lo spazio. Interpretare lo spazio come nel sistema
operativo grafico porta sotto il terminale sempre ad un errore, specie nellindicare una
directory o un file che ne contengono parecchi. Scrivere:
% cd nuova_cartella
difficilmente portera nella directory nuova cartella. Per far interpretare al terminale il
comando corretto e necessario scrivere:
% cd nuova cartella
oppure
% cd nuova\ cartella
# ps -ax
# ps -ax >lista.txt
non mostrera nulla a video poiche loutput viene trascritto nel file lista.txt nella directory
corrente.
94
14.6 Il comando test
Il comando test serve per la comparazione di espressioni. Questo puo ritornare spesso utile
nelluso quotidiano della shell o quando vengono utilizzati determinate strutture di iterazione
o comando , che vedremo piu avanti in questo tutorial. Elenchiamo qui di seguito con che
modalita e necessario usare il comando e aggiungiamo alcuni esempi di utilizzo.
Operatore
-d E E cartella
-e E E esiste
-r E E leggibile
-s E E di taglia non nulla
-w E E puo essere modificato / scritto
-x E eseguibile
... ...
Operatore
E catena di caratteri non vuota
E1 = E2 E1 uguale a E2
E1 =! E2 E1 diverso da E2
95
Operatore
E catena di caratteri non vuota
E1 -eq E2 E1 uguale a E2
E1 -ne E2 E1 diverso da E2
E1 -ge E2 E1 piu grande o uguale a E2
E1 -gt E2 E1 strettamente piu grande che E2
E1 -le E2 E1 piu piccolo o uguale a E2
E1 -lt E2 E1 strettamente piu piccolo che E2
Operatori booleani :
Operatore
(E) E e vero
!E E e falso
E1 -a E2 E1 e E2
E1 -o E2 E1 o E2
Qualche esempio:
olivio@mistral:~/Scripts$ var1=1000
olivio@mistral:~/Scripts$ test $var1 -eq 1000
olivio@mistral:~/Scripts$ echo $?
0
olivio@mistral:~/Scripts$ test $var1 -gt 1000
olivio@mistral:~/Scripts$ echo $?
1
olivio@mistral:~/Scripts$
96
olivio@mistral:~/Scripts$ test -e /etc/group
olivio@mistral:~/Scripts$ echo $?
0
olivio@mistral:~/Scripts$ test -e /etc/groupp
olivio@mistral:~/Scripts$ echo $?
1
olivio@mistral:~/Scripts$
15 Scripts shell
Uno script shell e un documento contenente dei comandi in linguaggio shell (documento testo
reso eseguibile eseguendo il comando chmod +x script shell, descritto in altra sezione in questo
tutorial).
La sintassi da rispettare nella redazione degli script e:
97
# - per effettuare un commento.
per usare le variabili : var=valore oppure var=valore se questo valore comporta degli
spazi.
per recuperare degli elementi dalla linea di comando si usano i codici 0,1, 2,3, ... nellordine
di scrittura includendo il nome del comando usato.
Esiste, poi, un codice espresso tramite $? che permette il recupero del risultato di esecuzione
dellultimo comando. Il risultato booleano 0 alla fine del comando ci indica unesecuzione
senza anomalie e con uscita valida.
olivio@mistral:~$ who
olivio console Oct 31 08:21
olivio ttyp1 Oct 31 13:55
olivio@mistral:~$ echo $?
0
olivio@mistral:~$
olivio@mistral:~$ rm /etc/
rm: /etc/: is a directory
olivio@mistral:~$ echo $?
1
olivio@mistral:~$
98
15.1 Istruzioni di strutturazione, if, case, for, while
Le istruzioni di strutturazione sono fondamentali non solo negli ambienti Unix; sono una parte
vitale della storia informatica. Nel nostro terminale questo genere di istruzioni sono utilizzate
nativamente (come si puo capire dalle origini C del terminale). Detti anche conditional state-
ments , questi sono delle richieste fatte allelaboratore per effettuare unesecuzione basata su
una precisa condizione. In questo paragrafo ne vedremo le diverse forme seguite da esempi.
if
comando
then
...
else
...
fi
Quando la shell trova un if (dichiarata come parola riservata) attende un dato di compa-
razione (ad esempio x = 0) e valuta la condizione. Se la condizione e vera, la struttura
blocca e esegue le istruzioni sotto la parola chiave then . In caso contrario sceglie le
istruzioni sotto la parola chiave else .
Esempio :
Queste istruzioni indirizzano la lista dei documenti della cartella corrente verso grep alla
ricerca del nome del documento in parametro. Avremo la visualizzazione di uno dei due
99
messaggi a seconda del risultato di grep (che in questo caso sara 0 se trovato, non-0 se
inesistente).
Proviamo ad usarlo ora:
case variabile in
v1 | v2 | ... | vn)
...;;
w1 | w2 | ... | wn)
...;;
esac
Listruzione case si differenzia dalla precedente istruzione poiche permette di scegliere tra
piu di due blocchi di codice. Cio e dettato dal fatto che lespressione condizionale e di
tipo ordinale e quindi si potranno seguire tante strade differenti quanti sono i valori del
tipo ordinale.
Esempio:
100
echo $numero divisibile per 3;;
*)
echo $numero non divisibile per 3;;
esac
olivio@mistral:~$ ./Scriptcase
un numero tra 0 e 9 prego
3
3 divisibile per 3
olivio@mistral:~$ ./Scriptcase
un numero tra 0 e 9 prego
5
5 non divisibile per 3
olivio@mistral:~$
In questo caso la shell risponde correttamente: 3 divisibile per se stesso, 5 non divisibile
per 3.
for
variabile
in
lista
do
...
done
101
for e unistruzione di tipo ciclico come anche while . Sono delle strutture che si diffe-
renziano non poco per quanto riguarda sintassi e logica di esecuzione. Listruzione for
richiede la specificazione del numero di ripetizioni da effettuare. Listruzione for richiede
la specificazione del numero di ripetizioni da effettuare. for assegna inizialmente al conta-
tore il valore specificato ed esegue il blocco di istruzioni incrementando o decrementando
il valore del contatore fino a raggiungere il valore indicato per la fine delle iterazioni.
Esempio:
rm -f $2
for file in $1
do
head -n $3 $file >> $2
done
while
comando
do
...
done
102
Il ciclo while si differenzia dal ciclo for per il tipo di espressione di controllo e per la
valutazione della stessa che avviene allinizio di ogni iterazione. Lespressione di uscita dal
trattamento dellinstruzione comando deve essere di tipo booleano e lesecuzione del codice
prosegue fintanto che lespressione e verificata, ovvero restituisce true . Lesecuzione del
codice termina quando luscita del comando assume valore false .
Esempio:
In pratica lo script si ferma unicamente quando non trovera il documento passato in parametro
Scriptfor. Nellesempio abbiamo soppresso il documento da un altro terminale e abbiamo
ottenuto la disattivazione del nostro script.
103
Parte VIII
eseguibili
biblioteche
documenti di configurazione
documentazione
documenti di dati
esempi
In definitiva questo genere di pacchetto non ha una procedura standard per linstallazione ed
e quasi sempre necessario consultare i documenti ottenuti subito dopo la decompressione. Di
fatto i pacchetti GNU standarizzano questa procedura rendendo la vita piu facile allutilizza-
tore inesperto. Sette passi, generalmente, sono necessari per una corretta installazione di un
pacchetto GNU:
104
restaurazione delle componenti tar
apertura di una shell sulla radice della cartella di restaurazione del passo 3
A titolo di esempio descriviamo linstallazione delle librerie Mesa OpenGL versione 6.5 :
Nel nostro esempio abbiamo tre documenti principali:
1. MesaDemos-6.5.tar.gz
2. MesaGLUT-6.5.tar.gz
3. MesaLib-6.5.tar.gz
olivio@mistral:~/OpenGL$ ls
MesaDemos-6.5.1.tar.gz MesaGLUT-6.5.1.tar.gz MesaLib-6.5.1.tar.gz
olivio@mistral:~/OpenGL$ gzip -d *.gz
olivio@mistral:~/OpenGL$ ls
MesaDemos-6.5.1.tar MesaGLUT-6.5.1.tar MesaLib-6.5.1.tar
olivio@mistral:~/OpenGL$
105
olivio@mistral:~/OpenGL$ ls -l
total 30892
drwxr-xr-x 16 olivio olivio 544 Nov 5 22:23 Mesa-6.5.1
-rw-r--r-- 1 olivio olivio 4372480 Nov 5 22:12 MesaDemos-6.5.1.tar
-rw-r--r-- 1 olivio olivio 2682880 Nov 5 22:13 MesaGLUT-6.5.1.tar
-rw-r--r-- 1 olivio olivio 24576000 Nov 5 22:14 MesaLib-6.5.1.tar
olivio@mistral:~/OpenGL$
olivio@mistral:~/OpenGL$ cd Mesa-6.5.1/
olivio@mistral:~/OpenGL/Mesa-6.5.1$ ls
Makefile Makefile.mgw bin descrip.mms include progs vms
Makefile.DJ Makefile.orig configs docs mms-config. src windows
olivio@mistral:~/OpenGL/Mesa-6.5.1$
olivio@mistral:~/OpenGL/Mesa-6.5.1$ make
106
...
Then type make <config> (ex: make linux-x86)
(ignore the following error message)
make: *** [configs/current] Error 1
olivio@mistral:~/OpenGL/Mesa-6.5.1$
E dunque possibile linstallazione e la compilazione del pacchetto MESA per diverse piatta-
forme. Nel nostro caso sceglieremo darwin-x86ppc. La compilazione occupera a pieno schermo
il nostro terminale effettuando tutte le tappe necessarie. Questa operazione potra prolungarsi
per piu di qualche minuto a seconda della complessita del pacchetto.
107
Parte IX
Unix e le reti
17 Il TCP/IP
Quando ci vogliamo collegare con il nostro terminale o con la nostra GUI a qualunque servizio
di rete, stabiliamo un collegamento a livello di applicazione. Questo livello e detto di trasporto.
A questo livello il protocollo TCP mette in coda i messaggi delle applicazioni (le applicazioni
che accedono ai servizi di rete) e li trasmette sotto forma di pacchetti. A livello di rete il
protocollo IP decide dove instradare i pacchetti per trasmettere effettivamente i messaggi da
un computer allaltro. Il settaggio di questi due protocolli TCP e IP avviene, nel terminale,
tramite una serie di comandi specifici. Vediamo quali.
17.1 Consultazione
ifconfig - permette di consultare la configurazione ip attuale. La risposta a un tale
comando e del genere:
108
Nellesempio abbiamo chiesto quale sia la configurazione dellinterfaccia en0 attuale. Ov-
viamente diverse interfacce sono presenti su ogni macchina; di default ifconfig mostra a
schermo tutte le interfacce se non ne viene specificata una in argomento. In questo caso
osserveremo anche la presenza di uninterfaccia lo0 detta interfaccia di loopback e che ci
permette di visionare il circuito al quale il nostro indirizzo ip e associato.
hostname - ci permette di consultare il nome della macchina sulla quale stiamo operando.
olivio@mistral:/$ hostname
mistral.local
olivio@mistral:/$
109
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 50.591/50.822/51.045/0.190 ms
olivio@mistral:/$
nslookup - permette di inviare delle richieste sul server DNS comfigurato. Per testare ad
esempio il server DNS:
olivio@mistral:/$ nslookup
> powerserver
Server: 192.168.1.1
Address: 192.168.1.1#53
18 SSH
SSH e lacronimo di Secure Shell ed e un protocollo che permette di inviare comandi sicuri e
criptati a unaltra macchina sulla rete. Generalmente e molto utile e potente quando si vuole
controllare una macchina a distanza proprio come se lutente in questione ci stesse davanti. La
sintassi per il suo utilizzo e:
110
olivio@mistral:~$ ssh -l olivio 192.168.2.1
The authenticity of host 192.168.2.1 (192.168.2.1) cant be established.
RSA key fingerprint is 74:ea:09:04:46:e5:8f:50:26:93:9c:38:d9:61:d2:e6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 192.168.2.1 (RSA) to the list of known hosts.
Password:
Last login: Thu Jan 8 18:00:36 1970 from 192.168.2.3
Welcome to Darwin!
stp25-1-82-226-151-135:~ olivio$
Se vogliamo inviare alla macchina remota un singolo comando senza dover effettuare tutta
la procedura di logging in e logging out possiamo usare il comando come da esempio:
In questo caso stiamo eliminando un documento sulla macchina remota. Unaltra sintassi
dello stesso comando puo essere:
111
La funzionalita piu interessante e quella di poter distaccare una sessione lasciandola nello
stato corrente e poterla riattaccare in seguito.
Utilizzare screen e abbastanza intuitivo. Per inizializzare una sessione multipla sara neces-
sario lanciare il gestore di screen attraverso il comando:
Il risultato del comando non sara altro che uno schermo vuoto. In realta screen e attivo e
operante. Per creare un nuovo terminale digiteremo:
CTRL+A c (c sta per create).
Anche in questo caso niente di straordinario apparira sullo schermo. Al fine di permettervi
di vedere qualcosa di concreto provate a digitare il comando ls. In questo caso stiamo chiedendo
il listaggio della directory corrente nel terminale numero due.
A questo punto digitiamo CTRL+A [space]. Questa combinazione ci fara passare al termi-
nale successivo (in questo caso il numero 1). Ci ritroveremo di fronte al nostro primo terminale
completamente indipendente dal terminale numero due creato in precedenza. Volendo ripassa-
re al terminale precedente useremo la combinazione CTRL+A [DELSPACE]. In questo modo
sara facile passare da un terminale allaltro. Non da ultimo eviteremo di aprire piu finestre e di
creare piu processi futili . Ogni terminale creato avra un numero e sara possibile il passaggio da
un terminale allaltro usando il comando CTRL+A [numero del terminale]. Nel nostro esempio
usando la combinazione CTRL+A 1 o CTRL+A 2 passeremo dal terminale 1 al terminale 2 a
seconda delle esigenze.
Quando la nostra utility screen sara attiva potremo distaccarla e lasciarla nello stato voluto.
La combinazione da usare sara CTRL+A d (d sta per detach). Questa combinazione dovrebbe
mostravi il contenuto del terminale nel quale avete lanciato screen e fare apparire un messaggio
del genere confermandovi loperazione:
La nostra sessione e dunque distaccata. Osservando i processi attivi ci renderemo conto che
quelli in esecuzione nella shell virtuale non sono stati terminati. Ad esempio:
112
olivio 5359 0.0 0.8 2964 1364 ? S 13:34 0:00 SCREEN -l
olivio 5360 0.0 1.0 3080 1672 pts/14 S 13:34 0:00 _ /bin/bash
olivio 5374 1.6 1.0 3460 1680 pts/14 S 13:36 0:00 | _ mutt
olivio 5365 0.0 1.0 3072 1644 pts/15 S 13:34 0:00 _ /bin/bash
5359.pts-7.mistral (Detached)
1 Socket in /var/run/screen/S-olivio.
[olivio@mistral] olivio $
In questo caso osserveremo lesistenza di uno screen attivo (ma distaccato). Per poterlo
riattivare useremo il comando:
screen -dR
Questo tipo di approccio puo essere sbagliato e pericoloso, poiche sul nostro Mac OS X sshd
permette di default laccesso basandosi su un autenticazione effettuata
113
dalla configurazione di Directory Access.
Se Directory Access e configurato, ad esempio, sulla Active Directory tutti gli utenti con un
valido account sulla Active Directory potrebbero effettuare un login SSH sul nostro computer.
Come fare allora ad avere accesso al nostro servizio di SSH senza avere piu utenti che lo
usino ? Tanto per cominciare diciamo che Mac OS X - dalla versione 10. 2- usa un architettura
modulare di autenticazione chiamata PAM.
PAM ( (Pluggable Authentication Modules ) gestisce ogni tipo di autenticazione sulla nostra
macchina come peraltro i cambiamenti di password o le autorizzazioni sui file. Le applicazioni,
in questo modo, invece di implementare tutto cio nel loro codice fanno affidamento su dei moduli
PAM configurati dallamministratore della macchina. Per esempio, se vogliamo effettuare un
autenticazione LDAP usando PAM avremo bisogno di usare il modulo
pam_ldap
Questo modulo conosce tutto il necessario sulla autenticazione di ldap; le applicazioni che
usando ldap fanno quindi affidamento su questo modulo che gestira gli account per esse. Mac
OS X integra un modulo chiamato
pam_securityserver
che serve per autenticare ogni servizio presente nella Directory Access. Tra questi anche SSH. Il
servizio SSH (sshd) e compatibile PAM e usa un modulo specifico che troveremo nella directoy
/etc/pam.d/sshd
nano /etc/pam.d/sshd
114
auth required pam_deny.so
account required pam_permit.so
password required pam_deny.so
session required pam_permit.so
Focalizziamoci sui diversi moduli di autenticazione (dunque tutti quelli comincianti per
auth). PAM consultera tutti questi moduli nellordine; si fermera unicamente a seconda della
parola nella seconda colonna del documento (required o sufficent) oppure nel caso il modulo
abbia successo o fallisca.
pam_login
E abbastanza semplice. Avra sempre successo se lesistenza di /etc/nologin sara verificata
(puo essere utile per evitare dei login durante la manutenzione del sistema)
pam_securityserver
Se fallisce questo modulo PAM procedera a
pam_unix
Per evitare dunque questo potenziale pericolo di intrusione mettiamo in commento questa
linea aggiungendo un # allinizio.
in questo modo gli amministratori di sistema avranno ancora accesso al protocollo SSH in
locale grazie alla linea pam-unix, ma gli altri utenti avranno laccesso negato.
19 Samba
Samba e un protocollo (detto anche smb ) che permette la condivisione di file e stampanti e
di ottenere interoperabilita tra Linux, Unix, Mac OS X e Windows. Si tratta di un software
che puo girare su piattaforme che non siano Microsoft Windows, per esempio, UNIX, Linux,
Mac OS X e altri sistemi operativi. Quando correttamente configurato, permette di interagire
115
con client o server Microsoft Windows come se fosse un file e print server Microsoft agendo da
Primary Domain Controller (PDC) o come Backup Domain Controller, puo inoltre prendere
parte ad un dominio Active Directory.
nmbd - demone che permette limplementazione dei servizi Netbios (protocollo TCP/IP)
e l Esploratore di risorse WINS
19.2 Configurazione
Principalmente Samba si basa su un documento di configurazione smb.conf presente nella car-
tella etc. Il documento Samba si presenta sotto la forma di diverse linee che si possono mettere
in commento o attivare a seconda delle esigenze.
- Commento
; - Linea attiva
116
Questo nella sezione contraddistinta da apposita linea di demarcazione:
[global]
## Browsing/Identification ###
....
Nella sezione home definiremo laccesso alle cartelle di base degli utilizzatori.
[homes]
comment = Repertoires de base
browseable = yes
valid users = %S
writable = yes
create mask = 0644
directory mask = 0755
olivio@mistral:~$ testparm
Load smb config files from /private/etc/smb.conf
Processing section "[homes]"
Processing section "[printers]"
117
Loaded services file OK.
Invalid combination of parameters for service homes.
Invalid combination of parameters for service printers.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
# Global parameters
[global]
dos charset = 437
unix charset = UTF-8-MAC
display charset = UTF-8-MAC
server string = mistral
auth methods = guest, opendirectory
passdb backend = opendirectorysam, guest
guest account = unknown
defer sharing violations = No
os level = 8
brlm = Yes
printer admin = @admin, @staff
vfs objects = darwin_acls
[homes]
comment = User Home Directories
read only = No
browseable = No
[printers]
path = /tmp
printable = Yes
browseable = No
olivio@mistral:~$
118
19.4 Lan manager e Smb
Il comando:
mount -t smbfs
ci permettera il mounting delle risorse condivise di un server Lan Manager allinterno del
sistema.
Esistono dei problemi di accesso alle risorse condivise sui server Windows NT, 2000 ou
2003 se questi esigono il trasferimento delle informazioni di login. Sara necessario in questo
caso usare delle strategie specifiche per attivare / disattivare / configurare le entrate relative a
questi aspetti in:
Parametri Windows
Parametri di sicurezza
Strategie locali
Opzioni di sicurezza
Tutto questo sia a livello locale sul server considerato sia a livello di dominio.
119
A Attributi dei metadati
Attributo Descrizione
kMDItemAttributeChangeDate Data e ora dellultimo cambiamento al metadata.
kMDItemAudiences Il pubblico verso il quale il file e orientato
kMDItemAuthors Lautore del documento
kMDItemCity Lorigine del documento
kMDItemComment Commenti
kMDItemContactKeywords Contatti associati al documento
kMDItemContentCreationDate La data di creazione
kMDItemContentModificationDate Data dellultima modifica effettuata
kMDItemContentType Tipo di documento. com.adobe.pdf per i PDF
kMDItemContributors I partecipanti al documento
kMDItemCopyright Copyright
kMDItemCountry Paese di origine del documento
kMDItemCoverage Collocazione geografica
kMDItemCreator Lapplicazione che ha creato il documento
kMDItemDescription Descrizione del documento
kMDItemDueDate Data del documento rappresentato
kMDItemDurationSeconds Durata (in secondi) del documento
kMDItemEmailAddresses Indirizzi e-mail associati
kMDItemEncodingApplications Il nome dellapplicazione che ha codificato il documento
kMDItemFinderComment Commenti Finder del documento
kMDItemFonts I fonts usati nel documento
kMDItemHeadline Sinossi del documento
kMDItemInstantMessageAddresses Nicknames associati al documento
kMDItemInstructions Instruzioni speciali associate al documento
kMDItemKeywords Parole chiave
kMDItemKind Tipo di documento
kMDItemLanguages Lingua
kMDItemLastUsedDate Data e ora di ultima apertura del documento
kMDItemNumberOfPages Numero di pagine
120
Attributo Descrizione
kMDItemOrganizations Organizzazione creatrice
kMDItemPageHeight Larghezza in punti del documento
kMDItemPageWidth Altezza in punti del documento
kMDItemPhoneNumbers Numeri di telefono associati al documento
kMDItemProjects Nome dei progetti associati al documento
kMDItemPublishers Editore del documento
kMDItemRecipients Recipiente del documento
kMDItemRights Link sui diritti del documento
kMDItemSecurityMethod Crittografia usata dal documento
kMDItemStarRating Valutazione (in un doc iTunes sono le stelle)
kMDItemStateOrProvince Stato o provincia di origine
kMDItemTitle Titolo
kMDItemVersion Versione
kMDItemWhereFroms Provenienza del documento (e-mail o numeri di telefono)
121