Nicola D'Agostino (.net) - Articoli, traduzioni, grafica, web

Hacking through OS X – Filesystem e dintorni

Molti degli aspetti di OS X funzionano in modo diverso da prima, ma anche diverso dai sistemi Unix tradizionali: vediamone alcuni.

di Nicola D’Agostino

È cosa risaputa che l’attuale sistema operativo di Apple abbia un ‘motore’ Unix, per la precisione una versione di BSD 4.4 chiamata Darwin.
Viene da chiedersi il perché della nascita di una nuova variante di *nix, come se non ce ne fossero già abbastanza in giro. Il motivo è che le fondamenta di [Mac] OS X sono in realtà un mosaico, composto da varie tessere.
Fondamentale è l’apporto dell’esperienza di NeXT (da cui insieme a Steve Jobs provengono anche molti dei progettisti di OS X). A questo bisogna sommare l’aggiornamento del Mac OS "classico" sotto forma delle librerie Carbon, così come le nuove aggiunte e adattamenti prese da altre implementazioni di BSD come FreeBSD, NetBSD e OpenBSD.
Il risultato è che Mac OS X è un sistema pieno di sorprese, non solo per l’utente tipico Macintosh, ma anche per chi viene, ad esempio, da Linux.
In questo articolo e nel prossimo articolo vedremo le similitudini e differenze presenti su una parte cruciale dell’OS: il filesystem.

Ora mi vedi e ora no

Il filesystem di OS X è un esempio lampante dell’ibridazione attuata. Vediamo per esempio come viene gestita l’ “invisibilità” dei file.
Il primo metodo è quello tipico dei sistemi UNIX e cioé usando come prefisso ".", il punto. Questa tecnica viene usata su varie directory e file di configurazione, ad esempio nella root per nascondere le cartelle

.DS_Store
.Trashes
.hidden
.vol

che, insieme ad altre, sono invisibili al FInder ed al comando "ls" nel Terminale.
Per ‘vedere’ tutto basta digitare sulla linea di comando un banale

ls -la

oppure usare una delle numerose utility (come Tinker Tool) che attivano l’opzione nascosta "show all files".

Il secondo metodo è quello derivato dal vecchio Mac OS e cioé di settare l’attributo "invisible" con qualche utility oppure di usare sotto OS X, previa installazione dei Developer Tools di Apple, il comando:

SetFile -a V nomefile

Per riattivare la visualizzazione dal Finder si usa invece

SetFile -a v nomefile

Il terzo modo si ricollega a uno dei file ‘svelati’ sopra.
Se ".DS_Store" tiene nota delle preferenze relative alla cartella ed ai file contenuti (e riserva alcune sorprese, come vedremo nel prossimo articolo), ".Trashes" contiene i file buttati nel cestino e ".vol/" gli identificativi per ogni documento il ".hidden" è uno strumento prezioso perché non è altro che elenco di file che il Finder deve tenere nascosto.

Non è raro infine che qualche directory o file sia resa invisibile contemporaneamente in diversi modi.
Un esempio è la directory "/bin" che è sia nell’elenco di ".hidden" che ha l’attributo "invisibles" settato. Allo stesso modo bisogna sempre ricordare che se si riavvia con Mac OS 9 due su tre di questi metodi non funzioneranno e che ci ritroveremo visibili diversi pezzi cruciali del sistema operativo (come "/mach" ad esempio) con cui è meglio non pasticciare e lasciare dove sono, pena il non funzionamento di X.

Sempre da Mac OS 9 è invece possibile fare altro, ad esempio scoprire che OS X, come ogni bravo UNIX usa la memoria virtuale e più precisamente una serie di file di memoria virtuale.

swapfile0

I file si trovano in "/private/var/vm/", occupano circa 79 Mb e vengono numerati progressivamente "swapfile0", "swapfile1" e così via. Ovviamente più ram si ha e meno ce ne ritroveremo.
Per la cronaca è possibile anche, con un po’ di smanettamenti, cancellare questi file ma OS X manterrà lo spazio su disco comunque occupato e li ricreerà secondo le esigenze. L’unico modo per ridurne il numero momentaneamente è un riavvio della macchina.

Alias e link

Altro esempio di coniugazione (e coesistenza) di due mondi sono quei file speciali chiamati "collegamenti" su Windows, "alias" su Mac OS e "link" su UNIX.
In OS X ci sono due modi per farli. Il primo è alla vecchia maniera: selezionare un oggetto dal Finder, trascinarlo tenendo premuti i tasti alt+mela (option+command).
Al rilascio avremo creato un alias, utilizzabile dai programmi Classic, Carbon e Cocoa, ma non da quelli Unix via Terminale.
Per fare contento quest’ultimo dovremo invece creare un "link" usando da Terminale il comando:

ln

oppure

ln -s

Il vantaggio di questa tecnica è che oltre ai programmi Unix i link funzionano anche con tutti gli altri tipi di programmi sunnominati.
Un caveat: attenzione però a non spostare o rinominare il file originale: i link fatti in questo modo non funzioneranno, al contrario invece dei vecchi alias.

Altre modifiche sostanziali a comandi ed utilità UNIX

Oltre a questi ‘mix’ Darwin, il cuore di OS X ha numerose altre peculiarità.
Non solo l’ordine e la locazione delle risorse differisce profondamente da Linux o anche dai vari *BSD ma addirittura la metodologia di interazione con il sistema è spesso diversa.

Un piccolo intoppo in cui vari utenti sono incappati è che non è possibile modificare il nome dell’hard disk se è avviata la condivisione o che, peggio ancora, il nome dell’hard disk, se formattato in UFS (Unix File System) è tassativamente "/".
Molto più strano è che OS X ha problemi di funzionamento in presenza di una partizione dal nome "Users", che probabilmente da fastidio alla directory dello stesso nome in cui sono i dati dei vari utenti del sistema.
Altra originalità è che di default l’utente root è disabilitato ed Apple ne sconsiglia fortemente l’attivazione a tutti coloro che non sono esperti, suggerendo invece per le funzioni amministrative l’uso a pie’ sospinto del comando "sudo", solitamente usato in questo modo:

sudo nomecomando

il tutto seguito dalla password richiesta e che deve essere di un appartenente al gruppo degli amministratori (nessun problema: l’utente principale creato al momento dell’installazione lo è).

I file di configurazione, che hanno estensione .plist, sono documenti xml, modificabili con comandi da shell o con un programma presente nei più volte menzionati Developer Tools, Property List Editor, oppure con l’utility di terze parti PrefEdit).

Un’altra modifica non da poco è che fino alla versione 10.1.x di OSX il programma NetInfo rimpiazzava alcune funzioni fondamentali di amministrazione come "/etc/hosts/" o il sistema di gestione e aggiunta di utenti "/etc/passwd".

Fortunatamente da Jaguar (OSX 10.2) in poi NetInfo ha visto cadere il suo ruolo di tool esclusivo ed è ora possibile modificare a mano, o con le numerose utility da shell presenti nei Developer Tools, i vari "etc/group", "/etc/passwd/" (o meglio ancora "/etc/master.passwd", il file shadow che contiene le vere password crittografate).

Approfondimenti:

Darwin: Mac OS X’s Core OS
developer.apple.com/pdf/mactech_darwin.pdf

The evolution of Darwin
developer.apple.com/darwin/history.html

Mac OS X: An Overview for Developers
developer.apple.com/macosx/

Mac OS X for Unix Geeks
Jepson B., Rothman e., O’Reilly, 2003, ISBN 0-596-00356-0

Una versione di questo articolo è stata pubblicata su "Hacker Journal" n. 24 del 24/04/2003