Reindicizzazioni e correzioni varie
[gapil.git] / filedir.tex
index 999c5eeab9b9e9d6950d6522bcee5faf986af17e..9c2e4859327c457bb39bdaf1a567131715f95893 100644 (file)
@@ -1,6 +1,6 @@
 %% filedir.tex
 %%
-%% Copyright (C) 2000-2011 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2012 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -374,11 +374,11 @@ fig.~\ref{fig:file_disk_filesys}, dove si hanno tre filesystem su tre
 partizioni. In essa per semplicità si è fatto riferimento alla struttura del
 filesystem \acr{ext2}, che prevede una suddivisione dei dati in \textit{block
   group}.  All'interno di ciascun \textit{block group} viene anzitutto
-replicato il cosiddetto \textit{superblock}, (la struttura che contiene
-l'indice iniziale del filesystem e che consente di accedere a tutti i dati
-sottostanti) e creata una opportuna suddivisione dei dati e delle informazioni
-per accedere agli stessi.  Sulle caratteristiche di \acr{ext2} e derivati
-torneremo in sez.~\ref{sec:file_ext2}.
+replicato il cosiddetto \itindex{superblock} \textit{superblock}, (la
+struttura che contiene l'indice iniziale del filesystem e che consente di
+accedere a tutti i dati sottostanti) e creata una opportuna suddivisione dei
+dati e delle informazioni per accedere agli stessi.  Sulle caratteristiche di
+\acr{ext2} e derivati torneremo in sez.~\ref{sec:file_ext2}.
 
 \itindbeg{inode}
 
@@ -401,9 +401,10 @@ per i dati in essi contenuti.
 Se si va ad esaminare con maggiore dettaglio la strutturazione
 dell'informazione all'interno del filesystem \textsl{ext2}, tralasciando i
 dettagli relativi al funzionamento del filesystem stesso come la
-strutturazione in gruppi dei blocchi, il \textit{superblock} e tutti i dati di
-gestione possiamo esemplificare la situazione con uno schema come quello
-esposto in fig.~\ref{fig:file_filesys_detail}.
+strutturazione in gruppi dei blocchi, il \itindex{superblock}
+\textit{superblock} e tutti i dati di gestione possiamo esemplificare la
+situazione con uno schema come quello esposto in
+fig.~\ref{fig:file_filesys_detail}.
 
 \begin{figure}[!htb]
   \centering
@@ -566,11 +567,12 @@ riportata in fig.~\ref{fig:file_filesys_detail}, in cui la partizione è divisa
 in gruppi di blocchi.
 
 Ciascun gruppo di blocchi contiene una copia delle informazioni essenziali del
-filesystem (i \textit{superblock} sono quindi ridondati) per una maggiore
-affidabilità e possibilità di recupero in caso di corruzione del
-\textit{superblock} principale. L'utilizzo di raggruppamenti di blocchi ha
-inoltre degli effetti positivi nelle prestazioni dato che viene ridotta la
-distanza fra i dati e la tabella degli \itindex{inode} inode.
+filesystem (i \itindex{superblock} \textit{superblock} sono quindi ridondati)
+per una maggiore affidabilità e possibilità di recupero in caso di corruzione
+del \itindex{superblock} \textit{superblock} principale. L'utilizzo di
+raggruppamenti di blocchi ha inoltre degli effetti positivi nelle prestazioni
+dato che viene ridotta la distanza fra i dati e la tabella degli
+\itindex{inode} inode.
 
 \begin{figure}[!htb]
   \centering
@@ -642,12 +644,17 @@ il cui prototipo è:\footnote{la funzione è una versione specifica di Linux che
     o non può essere montato su \param{target} perché la directory è ancora in
     uso.
   \item[\errcode{EINVAL}] il dispositivo \param{source} presenta un
-    \textit{superblock} non valido, o si è cercato di rimontare un filesystem
-    non ancora montato, o di montarlo senza che \param{target} sia un
-    \itindex{mount~point} \textit{mount point} o di spostarlo
-    quando \param{target} non è un \itindex{mount~point} \textit{mount point}
-    o è la radice.
-  \item[\errcode{EMFILE}] la tabella dei device \textit{dummy} è piena.
+    \itindex{superblock} \textit{superblock} non valido, o si è cercato di
+    rimontare un filesystem non ancora montato, o di montarlo senza
+    che \param{target} sia un \itindex{mount~point} \textit{mount point} o di
+    spostarlo quando \param{target} non è un \itindex{mount~point}
+    \textit{mount point} o è la radice.
+  \item[\errcode{ELOOP}] si è cercato di spostare un \itindex{mount~point}
+    \textit{mount point} su una sottodirectory di \param{source} o si sono
+    incontrati troppi link simolici nella risoluzione di un nome.
+  \item[\errcode{EMFILE}] in caso di filesystem virtuale, la tabella dei
+    dispositivi fittizi (chiamati \textit{dummy} nella documentazione inglese)
+    è piena.
   \item[\errcode{ENODEV}] il tipo \param{filesystemtype} non esiste o non è
     configurato nel kernel.
   \item[\errcode{ENOTBLK}] non si è usato un \textit{block device} per
@@ -656,14 +663,13 @@ il cui prototipo è:\footnote{la funzione è una versione specifica di Linux che
     dispositivo \param{source} è sbagliato.
   \item[\errcode{EPERM}] il processo non ha i privilegi di amministratore.
   \end{errlist} 
-  ed inoltre \errval{EFAULT}, \errval{ELOOP}, \errval{ENOMEM},
-  \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOTDIR} nel loro
-  significato generico.}
+  ed inoltre \errval{EFAULT}, \errval{ENOMEM}, \errval{ENAMETOOLONG},
+  \errval{ENOENT}, \errval{ENOTDIR} nel loro significato generico.}
 \end{funcproto}
 
-La funzione monta sulla directory indicata \param{target}, detta
+La funzione monta sulla directory indicata da \param{target}, detta
 \itindex{mount~point} \textit{mount point}, il filesystem contenuto nel file
-di dispositivo indicato \param{source}. In entrambi i casi, come daremo per
+di dispositivo indicato da \param{source}. In entrambi i casi, come daremo per
 assunto da qui in avanti tutte le volte che si parla di directory o file nel
 passaggio di un argomento di una funzione, si intende che questi devono essere
 indicati con la stringa contenente il loro \itindex{pathname}
@@ -713,39 +719,43 @@ qual caso vale comunque quanto detto in precedenza, e cioè che solo il
 contenuto dell'ultimo filesystem montato sarà visibile.
 
 Oltre alle opzioni specifiche di ciascun filesystem, che si passano nella
-forma delle opzioni indicata con l'argomento \param{data}, esistono pure
-alcune opzioni che si possono applicare in generale, anche se non è detto che
-tutti i filesystem le supportino, che si specificano tramite
+forma della lista di parole chiave indicata con l'argomento \param{data},
+esistono pure alcune opzioni che si possono applicare in generale, anche se
+non è detto che tutti i filesystem le supportino, che si specificano tramite
 l'argomento \param{mountflags}.  L'argomento inoltre può essere utilizzato per
 modificare il comportamento della funzione, facendole compiere una operazione
 diversa (ad esempio un rimontaggio, invece che un montaggio).
 
-In Linux \param{mountflags} deve essere un intero a 32 bit, fino ai kernel
+In Linux \param{mountflags} deve essere un intero a 32 bit; fino ai kernel
 della serie 2.2.x i 16 più significativi avevano un valore riservato che
 doveva essere specificato obbligatoriamente,\footnote{il valore era il
   \itindex{magic~number} \textit{magic number} \code{0xC0ED}, si può usare la
   costante \const{MS\_MGC\_MSK} per ottenere la parte di \param{mountflags}
   riservata al \textit{magic number}, mentre per specificarlo si può dare un
-  OR aritmetico con la costante \const{MS\_MGC\_VAL}.} oggi invece sono
-ignorati mentre i 16 meno significativi sono usati per specificare le opzioni
-come maschera binaria e vanno impostati con un OR aritmetico dei valori
-riportati nell'elenco seguente:
+  OR aritmetico con la costante \const{MS\_MGC\_VAL}.} e si potevano usare
+solo i 16 meno significativi. Oggi invece, con un numero di opzioni superiore,
+sono utilizzati tutti e 32 i bit, ma qualora nei 16 più significativi sia
+presente detto valore, che non esprime una combinazione valida, esso viene
+ignorato. Il valore dell'argomento deve essere espresso come maschera binaria
+e i vari bit devono essere impostati con un OR aritmetico dei rispettivi flag,
+identificati dalle costanti riportate nell'elenco seguente:
 
 \begin{basedescript}{\desclabelwidth{2.cm}\desclabelstyle{\nextlinelabel}}
 \itindbeg{bind~mount}
 \item[\const{MS\_BIND}] Effettua un cosiddetto \textit{bind mount}, in cui è
-  possibile montare una directory di un filesystem in un'altra directory. In
-  questo caso verranno presi in considerazione solo gli argomenti
-  \texttt{source}, che stavolta indicherà la directory che si vuole montare (e
-  non un file di dispositivo) e \texttt{target} che indicherà la directory su
-  cui verrà effettuato il \textit{bind mount}. Gli
-  argomenti \param{filesystemtype} e \param{data} vengono ignorati.
+  possibile montare una directory di un filesystem in un'altra directory,
+  l'opzione è disponibile a partire dai kernel della serie 2.4. In questo caso
+  verranno presi in considerazione solo gli argomenti \param{source}, che
+  stavolta indicherà la directory che si vuole montare (e non un file di
+  dispositivo) e \param{target} che indicherà la directory su cui verrà
+  effettuato il \textit{bind mount}. Gli argomenti \param{filesystemtype}
+  e \param{data} vengono ignorati.
 
   In sostanza quello che avviene è che in corrispondenza del \index{pathname}
-  \textit{pathname} indicato da \texttt{target} viene montato l'\textit{inode}
-  di \texttt{source}, così che la porzione di albero dei file presente sotto
-  \texttt{source} diventi visibile allo stesso modo sotto
-  \texttt{target}. Trattandosi esattamente di dati dello stesso filesystem,
+  \textit{pathname} indicato da \param{target} viene montato l'\textit{inode}
+  di \param{source}, così che la porzione di albero dei file presente sotto
+  \param{source} diventi visibile allo stesso modo sotto
+  \param{target}. Trattandosi esattamente dei dati dello stesso filesystem,
   ogni modifica fatta in uno qualunque dei due rami di albero sarà visibile
   nell'altro, visto che entrambi faranno riferimento agli stessi
   \textit{inode}.
@@ -753,87 +763,307 @@ riportati nell'elenco seguente:
   Dal punto di vista del \itindex{Virtual~File~System} VFS l'operazione è
   analoga al montaggio di un filesystem proprio nel fatto che anche in questo
   caso si inserisce in corripondenza della \textit{dentry} di \texttt{target}
-  un diverso \textit{inode}, che stavolta invece di essere quello della radice
-  del filesystem indicato da un file di dispositivo è quello di una directory
-  già montata.
+  un diverso \textit{inode}, che stavolta, invece di essere quello della
+  radice del filesystem indicato da un file di dispositivo, è quello di una
+  directory già montata.
 
-  Si tenga presente che proprio per questo sotto \texttt{target} comparirà il
-  contenuto che è presente sotto \texttt{source} all'interno del filesystem in
+  Si tenga presente che proprio per questo sotto \param{target} comparirà il
+  contenuto che è presente sotto \param{source} all'interno del filesystem in
   cui quest'ultima è contenuta. Questo potrebbe non corrispondere alla
-  porzione di albero che sta sotto \texttt{source} qualora in una
+  porzione di albero che sta sotto \param{source} qualora in una
   sottodirectory di quest'ultima si fosse effettuato un altro montaggio. In
-  tal caso infatti nella porzione di albero sotto \texttt{source} si
-  troverebbe il contenuto del nuovo filesystem (o di un altro \textit{bind
-    mount}) mentre sotto \texttt{target} ci sarebbe il contenuto presente nel
-  filesystem originale.\footnote{questo evita anche il problema dei
-    \textit{loop} di fig.~\ref{fig:file_link_loop}, dato che se anche si
-    montasse su \texttt{target} una directory in cui essa è contenuta, il
-    cerchio non potrebbe chiudersi perché ritornati a \texttt{target} dentro
-    il \textit{bind mount} vi si troverebbe solo il contenuto originale e non
-    si potrebbe tornare indietro.}
+  tal caso infatti nella porzione di albero sotto \param{source} si troverebbe
+  il contenuto del nuovo filesystem (o di un altro \textit{bind mount}) mentre
+  sotto \param{target} ci sarebbe il contenuto presente nel filesystem
+  originale.\footnote{questo evita anche il problema dei \textit{loop} di
+    fig.~\ref{fig:file_link_loop}, dato che se anche si montasse su
+    \param{target} una directory in cui essa è contenuta, il cerchio non
+    potrebbe chiudersi perché ritornati a \param{target} dentro il
+    \textit{bind mount} vi si troverebbe solo il contenuto originale e non si
+    potrebbe tornare indietro.}
 
   Fino al kernel 2.6.26 questo flag doveva essere usato da solo, in quanto il
   \textit{bind mount} continuava ad utilizzare le stesse opzioni del montaggio
   originale, dal 2.6.26 è stato introdotto il supporto per il cosiddetto
   \textit{read-only bind mount} e viene onorata la presenza del flag
-  \const{MS\_RDONLY}. In questo modo si può far sì che l'accesso ai file sotto
-  \texttt{target} possa avvenire soltanto in sola lettura.
+  \const{MS\_RDONLY}. In questo modo si ottiene che l'accesso ai file sotto
+  \param{target} sia effettuabile esclusivamente in sola lettura.
 
   Il supporto per il \textit{bind mount} consente di superare i limiti
   presenti per gli \textit{hard link} (di cui parleremo in
-  sez.~\ref{sec:file_link}) e di poter far comparire una qualunque porzione
-  dell'albero dei file all'interno di una qualunque directory, anche se questa
-  sta su un filesystem diverso, fornendo una alternativa all'uso dei link
-  simbolici (di cui parleremo in sez.~\ref{sec:file_symlink}) che funziona
-  correttamente anche all'intero di un \textit{chroot} (argomento su cui
-  torneremo in sez.~\ref{sec:file_chroot}. 
-
-
+  sez.~\ref{sec:file_link}) ottenendo un qualcosa di analogo in cui si può
+  fare riferimento alla porzione dell'albero dei file di un filesystem
+  presente a partire da una certa directory utilizzando una qualunque altra
+  directory, anche se questa sta su un filesystem diverso. Si può così fornire
+  una alternativa all'uso dei link simbolici (di cui parleremo in
+  sez.~\ref{sec:file_symlink}) che funziona correttamente anche all'intero di
+  un \textit{chroot} (argomento su cui torneremo in
+  sez.~\ref{sec:file_chroot}.  
 \itindend{bind~mount}
 
-\item[\const{MS\_DIRSYNC}]     .
-
-\item[\const{MS\_MANDLOCK}] Consente il \textit{mandatory locking}
-  \itindex{mandatory~locking} (vedi sez.~\ref{sec:file_mand_locking}).
-
-\item[\const{MS\_MOVE}] Sposta atomicamente il punto di montaggio.
-
-\item[\const{MS\_NOATIME}] Non aggiorna gli \textit{access time} (vedi
-  sez.~\ref{sec:file_file_times}).
-
-\item[\const{MS\_NODEV}] Impedisce l'accesso ai file di dispositivo.
-
-\item[\const{MS\_NODIRATIME}] Non aggiorna gli \textit{access time} delle
-  directory.
-\item[\const{MS\_NOEXEC}] Impedisce di eseguire programmi.
-
-\item[\const{MS\_NOSUID}] Ignora i bit \itindex{suid~bit} \acr{suid} e
-  \itindex{sgid~bit} \acr{sgid}.
-
-\item[\const{MS\_RDONLY}] Monta in sola lettura.
+\item[\const{MS\_DIRSYNC}] Richiede che ogni modifica al contenuto di una
+  directory venga immediatamente registrata su disco in maniera sincrona
+  (introdotta a partire dai kernel della serie 2.6). L'opzione si applica a
+  tutte le directory del filesystem, ma su alcuni filesystem è possibile
+  impostarla a livello di singole directory o per i sottorami di una directory
+  con il comando \cmd{lsattr}.\footnote{questo avviene tramite delle opportune
+    \texttt{ioctl} (vedi sez.~\ref{sec:file_ioctl}).}
+
+  Questo consente di ridurre al minimo il rischio di perdita dei dati delle
+  directory in caso di crollo improvviso del sistema, al costo di una certa
+  perdita di prestazioni dato che le funzioni di scrittura relative ad
+  operazioni sulle directory non saranno più bufferizzate e si bloccheranno
+  fino all'arrivo dei dati sul disco prima che un programma possa proseguire.
+
+\item[\const{MS\_MANDLOCK}] Consente l'uso del \textit{mandatory locking}
+  \itindex{mandatory~locking} (vedi sez.~\ref{sec:file_mand_locking}) sui file
+  del filesystem. Per poterlo utilizzare effettivamente però esso dovrà essere
+  comunque attivato esplicitamente per i singoli file impostando i permessi
+  come illustrato in sez.~\ref{sec:file_mand_locking}.
+
+\item[\const{MS\_MOVE}] Effettua uno del spostamento del \itindex{mount~point}
+  \textit{mount point} di un filesystem. La directory del
+  \itindex{mount~point} \textit{mount point} originale deve essere indicata
+  nell'argomento \param{source}, e la sua nuova posizione
+  nell'argomento \param{target}. Tutti gli altri argomenti della funzione
+  vengono ignorati.
+
+  Lo spostamento avviene atomicamente, ed il ramo di albero presente
+  sotto \param{source} sarà immediatamante visibile sotto \param{target}. Non
+  esiste cioè nessun momento in cui il filesystem non risulti montato in una o
+  nell'altra directory e pertanto è garantito che la risoluzione di
+  \textit{pathname} relativi all'interno del filesystem non possa fallire.
+
+\item[\const{MS\_NOATIME}] Viene disabilitato sul filesystem l'aggiornamento
+  degli \textit{access time} (vedi sez.~\ref{sec:file_file_times}) per
+  qualunque tipo di file. Dato che l'aggiornamento degli \textit{access time}
+  è una funzionalità la cui utilità è spesso irrilevante ma comporta un costo
+  elevato visto che una qualunque lettura comporta comunque una scrittura su
+  disco,\footnote{e questo ad esempio ha conseguenze molto pesanti nell'uso
+    della batteria sui portatili.} questa opzione consente di disabilitarla
+  completamente. La soluzione può risultare troppo drastica dato che
+  l'informazione viene comunque utilizzata da alcuni programmi, per cui nello
+  sviluppo del kernel sono state introdotte altre opzioni che forniscono
+  soluzioni più appropriate e meno radicali.
+
+\item[\const{MS\_NODEV}] Viene disabilitato sul filesystem l'accesso ai file
+  di dispositivo eventualmente presenti su di esso. L'opzione viene usata come
+  misura di precauzione per rendere inutile la presenza di eventuali file di
+  dispositivo su filesystem che non dovrebbero contenerne.\footnote{si ricordi
+    che le convenzioni del \itindex{Filesystem~Hierarchy~Standard~(FHS)}
+    \textit{Linux Filesystem Hierarchy Standard} richiedono che questi siano
+    mantenuti esclusivamente sotto \texttt{/dev}.}
+
+  Viene utilizzata, assieme a \const{MS\_NOEXEC} e \const{MS\_NOSUID}, per
+  fornire un accesso più controllato a quei filesystem di cui gli utenti hanno
+  il controllo dei contenuti, in particolar modo quelli posti su dispositivi
+  rimuovibili. In questo modo si evitano alla radice possibili situazioni in
+  cui un utente malizioso inserisce su uno di questi filesystem dei file di
+  dispositivo con permessi ``opportunamente'' ampliati che gli consentano di
+  accedere anche a risorse cui non dovrebbe.
+
+\item[\const{MS\_NODIRATIME}] Viene disabilitato sul filesystem
+  l'aggiornamento degli \textit{access time} (vedi
+  sez.~\ref{sec:file_file_times}), ma soltanto per le directory. Costituisce
+  una alternativa per \const{MS\_NOATIME}, che elimina l'informazione per le
+  directory, che in pratica che non viene mai utilizzata, mantenendola per i
+  file in cui invece ha un impiego, sia pur limitato.
+
+\item[\const{MS\_NOEXEC}] Viene disabilitata sul filesystem l'esecuzione di un
+  qualunque file eseguibile eventualmente presente su di esso. L'opzione viene
+  usata come misura di precauzione per rendere impossibile l'uso di programmi
+  posti su filesystem che non dovrebbero contenerne.
+
+  Anche in questo caso viene utilizzata per fornire un accesso più controllato
+  a quei filesystem di cui gli utenti hanno il controllo dei contenuti. Da
+  questo punto di vista l'opzione è meno importante delle analoghe
+  \const{MS\_NODEV} e \const{MS\_NOSUID} in quanto l'esecuzione di un
+  programma creato dall'utente pone un livello di rischio nettamente
+  inferiore, ed è in genere consentita per i file contenuti nella sua home
+  directory.\footnote{cosa che renderebbe superfluo l'attivazione di questa
+    opzione, il cui uso ha senso solo per ambienti molto controllati in cui si
+    vuole che gli utenti eseguano solo i programmi forniti
+    dall'amministratore.}
+
+\item[\const{MS\_NOSUID}] Viene disabilitato sul filesystem l'effetto dei bit
+  dei permessi \itindex{suid~bit} \acr{suid} e \itindex{sgid~bit} \acr{sgid}
+  (vedi sez.~\ref{sec:file_special_perm}) eventualmente presenti sui file in
+  esso contenuti. L'opzione viene usata come misura di precauzione per rendere
+  inefficace l'effetto di questi bit per filesystem in cui non ci dovrebbero
+  essere file dotati di questi permessi.
+
+  Di nuovo viene utilizzata, analogamente a \const{MS\_NOEXEC} e
+  \const{MS\_NODEV}, per fornire un accesso più controllato a quei filesystem
+  di cui gli utenti hanno il controllo dei contenuti. In questo caso si evita
+  che un utente malizioso possa inserire su uno di questi filesystem un
+  eseguibile con il bit \itindex{suid~bit} \acr{suid} attivo e di proprietà
+  dell'amministratore o di un altro utente, che gli consentirebbe di eseguirlo
+  per conto di quest'ultimo.
+
+\item[\const{MS\_PRIVATE}] Marca un \itindex{mount~point} \textit{mount point}
+  come privato. Si tratta di una delle nuove opzioni (insieme a
+  \const{MS\_SHARED}, \const{MS\_SLAVE} e \const{MS\_UNBINDABLE}) facenti
+  parte dell'infrastruttura degli \itindex{shared~subtree} \textit{shared
+    subtree} introdotta a partire dal kernel 2.6.15, che estendono le
+  funzionalità dei \itindex{bind~mount} \textit{bind mount}. In questo caso
+  \param{target} dovrà fare riferimento al \textit{mount point} che si intende
+  marcare, e tutti gli altri argomenti verranno ignorati.
+
+  Di default, finché non lo si marca altrimenti con una delle altre opzioni
+  dell'interfaccia \itindex{shared~subtree} \textit{shared subtree}, ogni
+  \textit{mount point} è privato. Ogni \textit{bind mount} ottenuto da un
+  \itindex{mount~point} \textit{mount point} di tipo \textit{private} si
+  comporta come descritto nella trattazione di \const{MS\_BIND}. Si usa questo
+  flag principalmente per revocare gli effetti delle altre opzioni e riportare
+  il comportamento a quello ordinario.
+
+\item[\const{MS\_RDONLY}] Esegue il montaggio del filesystem in sola lettura,
+  non sarà possibile nessuna modifica ai suoi contenuti. Viene usato tutte le
+  volte che si deve accedere ai contenuti di un filesystem con la certezza che
+  questo non venga modificato (ad esempio per ispezionare un filesystem
+  corrotto). All'avvio di default il kernel monta la radice in questa
+  modalità.
+
+\item[\const{MS\_REC}] Applica ricorsivamente a tutti i \itindex{mount~point}
+  \textit{mount point} presenti al di sotto del \textit{mount point} indicato
+  gli effetti della opzione degli \itindex{shared~subtree} \textit{shared
+    subtree} associata. Anche questo caso l'argomento \param{target} deve fare
+  riferimento ad un \itindex{mount~point} \textit{mount point} e tutti gli
+  altri argomenti sono ignorati, ed il flag deve essere indicato assieme ad
+  una fra \const{MS\_PRIVATE}, \const{MS\_SHARED}, \const{MS\_SLAVE} e
+  \const{MS\_UNBINDABLE}.
+
+\item[\const{MS\_RELATIME}] Indica di effettuare l'aggiornamento degli
+  \textit{access time} sul filesystem soltanto quando questo risulti
+  antecendente il valore corrente del \textit{modification time} o del
+  \textit{change time} (per i tempi dei file si veda
+  sez.~\ref{sec:file_file_times}). L'opzione è disponibile a partire dal
+  kernel 2.6.20, mentre dal 2.6.30 questo è diventato il comportamento di
+  default del sistema, che può essere riportato a quello tradizionale con
+  l'uso di \const{MS\_STRICTATIME}. Sempre dal 2.6.30 il comportamento è stato
+  anche modificato e l'\textit{access time} viene comunque aggiornato se è più
+  vecchio di un giorno.
+
+  L'opzione consente di evitare i problemi di prestazioni relativi
+  all'aggiornamento dell'\textit{access time} senza avere impatti negativi
+  riguardo le funzionalità, il comportamento adottato infatti consente di
+  rendere evidente che vi è stato un accesso dopo la scrittura, ed evitando al
+  contempo ulteriori operazioni su disco negli accessi successivi. In questo
+  modo l'informazione relativa al fatto che un file sia stato letto resta
+  disponibile, ed i programmi che ne fanno uso continuano a funzionare. Con
+  l'introduzione di questo comportamento l'uso delle alternative
+  \const{MS\_NOATIME} e \const{MS\_NODIRATIME} è sostanzialmente inutile.
+
+\item[\const{MS\_REMOUNT}] Consente di rimontare un filesystem già montato
+  cambiandone le opzioni di montaggio in maniera atomica. In questo modo si
+  possono modificare le opzioni del filesystem anche se questo è in uso. Gli
+  argomenti \param{source} e \param{target} devono essere gli stessi usati per
+  il montaggio originale, mentre \param{data} che \param{mountflags}
+  conterranno le nuove opzioni, \param{filesystemtype} viene ignorato.
+
+  Qualunque opzione specifica del filesystem indicata con \param{data} può
+  essere modificata, mentre con \param{mountflags} possono essere modificate
+  solo alcune opzioni generiche. Con i kernel più recenti queste sono soltanto
+  \const{MS\_MANDLOCK}, \const{MS\_RDONLY} e \const{MS\_SYNCHRONOUS}, prima
+  del kernel 2.6.16 potevano essere modificate anche le ulteriori
+  \const{MS\_NOATIME} e \const{MS\_NODIRATIME}, ed infine prima del kernel
+  2.4.10 anche \const{MS\_NODEV}, \const{MS\_NOEXEC} e \const{MS\_NOSUID}.
+
+\item[\const{MS\_SHARED}] Marca un \itindex{mount~point} \textit{mount point}
+  come \textit{shared mount}.  Si tratta di una delle nuove opzioni (insieme a
+  \const{MS\_PRIVATE}, \const{MS\_SLAVE} e \const{MS\_UNBINDABLE}) facenti
+  parte dell'infrastruttura degli \itindex{shared~subtree} \textit{shared
+    subtree} introdotta a partire dal kernel 2.6.15, che estendono le
+  funzionalità dei \itindex{bind~mount} \textit{bind mount}.  In questo caso
+  \param{target} dovrà fare riferimento al \itindex{mount~point} \textit{mount
+    point} che si intende marcare, e tutti gli altri argomenti verranno
+  ignorati.
+
+  Lo scopo dell'opzione è ottenere che tutti i successivi \textit{bind mount}
+  effettuati da un \textit{mount point} marcato da essa siano di tipo
+  \textit{shared}, cioè ``\textsl{condividano}'' con l'originale e fra di loro
+  ogni ulteriore operazione di montaggio o smontaggio che avviene su una
+  directory al di sotto di uno qualunque di essi. Le operazioni di montaggio e
+  smontaggio cioè vengono ``\textsl{propagate}'' a tutti i \textit{mount
+    point} della stessa condivisione, e la sezione di albero di file vista al
+  di sotto di ciascuno di essi sarà sempre identica.
+
+\item[\const{MS\_SILENT}] Richiede la soppressione di alcuni messaggi di
+  avvertimento nei log del kernel (vedi sez.~\ref{sec:sess_daemon}). L'opzione
+  è presente a partire dal kernel 2.6.17 e sostituisce, utilizzando un nome
+  non fuorviante, la precedente \const{MS\_VERBOSE}, introdotta nel kernel
+  2.6.12, che aveva lo stesso effetto.
+
+\item[\const{MS\_SLAVE}] Marca un \itindex{mount~point} \textit{mount point}
+  come \textit{slave mount}. Si tratta di una delle nuove opzioni (insieme a
+  \const{MS\_PRIVATE}, \const{MS\_SHARED} e \const{MS\_UNBINDABLE}) facenti
+  parte dell'infrastruttura degli \itindex{shared~subtree} \textit{shared
+    subtree} introdotta a partire dal kernel 2.6.15, che estendono le
+  funzionalità dei \itindex{bind~mount} \textit{bind mount}.  In questo caso
+  \param{target} dovrà fare riferimento al \textit{mount point} che si intende
+  marcare, e tutti gli altri argomenti verranno ignorati.
+
+  Lo scopo dell'opzione è ottenere che tutti i successivi \textit{bind mount}
+  effettuati da un \textit{mount point} marcato da essa siano di tipo
+  \textit{slave}, cioè ``\textsl{condividano}'' ogni ulteriore operazione di
+  montaggio o smontaggio che avviene su una directory al di sotto del
+  \textit{mount point} originale.  Le operazioni di montaggio e smontaggio in
+  questo caso vengono ``\textsl{propagate}'' soltanto dal \textit{mount point}
+  originale (detto anche \textit{master}) verso gli \textit{slave}, mentre
+  essi potranno eseguire al loro interno ulteriori montaggi che non saranno
+  propagati né negli altri né nel \itindex{mount~point} \textit{mount point}
+  originale.
+
+\item[\const{MS\_STRICTATIME}] Ripristina il comportamento tradizionale per
+  cui l'\textit{access time} viene aggiornato ad ogni accesso al
+  file. L'opzione è disponibile solo a partire dal kernel 2.6.30 quando il
+  comportamento di default del kernel è diventato quello fornito da
+  \const{MS\_RELATIME}.
+
+\item[\const{MS\_SYNCHRONOUS}] Abilita la scrittura sincrona richiedendo che
+  ogni modifica al contenuto del filesystem venga immediatamente registrata su
+  disco. Lo stesso comportamento può essere ottenuto con il flag
+  \const{O\_SYNC} di \func{open} (vedi sez.~\ref{sec:file_open}).
+
+  Questa opzione consente di ridurre al minimo il rischio di perdita dei dati
+  in caso di crollo improvviso del sistema, al costo di una pesante perdita di
+  prestazioni dato che tutte le funzioni di scrittura non saranno più
+  bufferizzate e si bloccheranno fino all'arrivo dei dati sul disco. Per un
+  compromesso in cui questo comportamento avviene solo per le directory, ed ha
+  quindi una incidenza nettamente minore, si può usare \const{MS\_DIRSYNC}.
+
+\item[\const{MS\_UNBINDABLE}] Marca un \itindex{mount~point} \textit{mount
+    point} come \textit{unbindable mount}. Si tratta di una delle nuove
+  opzioni (insieme a \const{MS\_PRIVATE}, \const{MS\_SHARED} e
+  \const{MS\_SLAVE}) facenti parte dell'infrastruttura degli
+  \itindex{shared~subtree} \textit{shared subtree} introdotta a partire dal
+  kernel 2.6.15, che estendono le funzionalità dei \itindex{bind~mount}
+  \textit{bind mount}.  In questo caso
+  \param{target} dovrà fare riferimento al \textit{mount point} che si intende
+  marcare, e tutti gli altri argomenti verranno ignorati.
+
+  Un \textit{mount point} marcato in questo modo disabilità la capacità di
+  eseguire dei \itindex{bind~mount} \textit{bind mount}. Si comporta cioè come
+  allo stesso modo di un \itindex{mount~point} \textit{mount point} ordinario
+  di tipo \textit{private} con in più la restrizione che nessuna sua
+  sottodirectory (anche se relativa ad un ulteriore montaggio) possa essere
+  utilizzata per un come sorgente di un \itindex{bind~mount} \textit{bind
+    mount}.
 
-\item[\const{MS\_RELATIME}] .
-
-\item[\const{MS\_REMOUNT}] Rimonta il filesystem cambiando le opzioni.
-
-\item[\const{MS\_SILENT}] .
-
-\item[\const{MS\_STRICTATIME}] .
+\end{basedescript}
 
-\item[\const{MS\_SYNCHRONOUS}] Abilita la scrittura sincrona.
+% NOTE per \const{MS\_SLAVE},\const{MS\_SHARE}, \const{MS\_PRIVATE} e
+% \const{MS\_UNBINDABLE} dal 2.6.15 vedi shared subtrees, in particolare
+%  * http://lwn.net/Articles/159077/ e
+%  * Documentation/filesystems/sharedsubtree.txt
 
-% TODO aggiornare con i nuovi flag di man mount
-% verificare i readonly mount bind del 2.6.26
-\end{basedescript}
+% TODO: (bassa priorità) non documentati ma presenti in sys/mount.h:
+%       * MS_POSIXACL
+%       * MS_KERNMOUNT
+%       * MS_I_VERSION
+%       * MS_ACTIVE
+%       * MS_NOUSER
 
-La funzione \func{mount} può essere utilizzata anche per effettuare il
-\textsl{rimontaggio} di un filesystem, cosa che permette di cambiarne al volo
-alcune delle caratteristiche di funzionamento (ad esempio passare da sola
-lettura a lettura/scrittura). Questa operazione è attivata attraverso uno dei
-bit di \param{mountflags}, \const{MS\_REMOUNT}, che se impostato specifica che
-deve essere effettuato il rimontaggio del filesystem (con le opzioni
-specificate dagli altri bit), anche in questo caso il valore di \param{source}
-viene ignorato.
 
 Una volta che non si voglia più utilizzare un certo filesystem è possibile
 \textsl{smontarlo} usando la funzione \funcd{umount}, il cui prototipo è:
@@ -848,8 +1078,9 @@ Una volta che non si voglia più utilizzare un certo filesystem è possibile
   nel qual caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
   \item[\errcode{EPERM}] il processo non ha i privilegi di amministratore.
-  \item[\errcode{EBUSY}]  \param{target} è la directory di lavoro di qualche
-  processo, o contiene dei file aperti, o un altro mount point.
+  \item[\errcode{EBUSY}] \param{target} è la \index{directory~di~lavoro}
+    directory di lavoro di qualche processo, o contiene dei file aperti, o un
+    altro mount point.
 \end{errlist}ed inoltre \errval{ENOTDIR}, \errval{EFAULT}, \errval{ENOMEM},
 \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ELOOP} nel loro
   significato generico.}
@@ -859,16 +1090,16 @@ La funzione prende il nome della directory su cui il filesystem è montato e
 non il file o il dispositivo che è stato montato,\footnote{questo è vero a
   partire dal kernel 2.3.99-pre7, prima esistevano due chiamate separate e la
   funzione poteva essere usata anche specificando il file di dispositivo.} in
-quanto con il kernel 2.4.x è possibile montare lo stesso dispositivo in più
-punti. Nel caso più di un filesystem sia stato montato sullo stesso
-\itindex{mount~point} \textit{mount point} viene smontato quello che è stato
-montato per ultimo.
+quanto a partire dai kernel della serie 2.4.x è possibile montare lo stesso
+dispositivo in più punti. Nel caso più di un filesystem sia stato montato
+sullo stesso \itindex{mount~point} \textit{mount point} viene smontato quello
+che è stato montato per ultimo.
 
 Si tenga presente che la funzione fallisce quando il filesystem è
-\textsl{occupato}, questo avviene quando ci sono ancora file aperti sul
-filesystem, se questo contiene la directory di lavoro corrente di un qualunque
-processo o il \itindex{mount~point} \textit{mount point} di un altro
-filesystem; in questo caso l'errore restituito è \errcode{EBUSY}.
+\textsl{occupato}, cioè quando ci sono ancora dei file aperti sul filesystem,
+se questo contiene la \index{directory~di~lavoro} directory di lavoro corrente
+di un qualunque processo o il \itindex{mount~point} \textit{mount point} di un
+altro filesystem; in questo caso l'errore restituito è \errcode{EBUSY}.
 
 Linux provvede inoltre una seconda funzione, \funcd{umount2}, che in alcuni
 casi permette di forzare lo smontaggio di un filesystem, anche quando questo
@@ -1221,8 +1452,9 @@ nello stesso filesystem) si usa invece la funzione \funcd{rename},\footnote{la
   \item[\errcode{ENOTEMPTY}] \param{newpath} è una directory già esistente e
     non vuota.
   \item[\errcode{EBUSY}] o \param{oldpath} o \param{newpath} sono in uso da
-    parte di qualche processo (come directory di lavoro o come radice) o del
-    sistema (come \itindex{mount~point} \textit{mount point}).
+    parte di qualche processo (come \index{directory~di~lavoro} directory di
+    lavoro o come radice) o del sistema (come \itindex{mount~point}
+    \textit{mount point}).
   \item[\errcode{EINVAL}] \param{newpath} contiene un prefisso di
     \param{oldpath} o più in generale si è cercato di creare una directory come
     sotto-directory di se stessa.
@@ -1523,8 +1755,9 @@ La funzione che permette la cancellazione di una directory è invece
     che contiene la directory che si vuole cancellare, o non c'è il permesso
     di attraversare (esecuzione) una delle directory specificate in
     \param{dirname}.
-  \item[\errcode{EBUSY}] la directory specificata è la directory di lavoro o la
-    radice di qualche processo.
+  \item[\errcode{EBUSY}] la directory specificata è la
+    \index{directory~di~lavoro} directory di lavoro o la radice di qualche
+    processo.
   \item[\errcode{ENOTEMPTY}] la directory non è vuota.
   \end{errlist}
   ed inoltre anche \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT},
@@ -1659,8 +1892,8 @@ comportato il passaggio di \type{dev\_t} a \index{tipo!opaco} tipo opaco, e la
 necessità di specificare il numero tramite delle opportune macro, così da non
 avere problemi di compatibilità con eventuali ulteriori estensioni.
 
-Le macro sono definite nel file \file{sys/sysmacros.h}, che viene
-automaticamente incluso quando si include \file{sys/types.h}; si possono
+Le macro sono definite nel file \headfile{sys/sysmacros.h}, che viene
+automaticamente incluso quando si include \headfile{sys/types.h}; si possono
 pertanto ottenere i valori del \itindex{major~number} \textit{major number} e
 \itindex{minor~number} \textit{minor number} di un dispositivo rispettivamente
 con le macro \macro{major} e \macro{minor}:
@@ -1788,7 +2021,7 @@ La funzione restituisce il file descriptor associato al \textit{directory
   stream} \param{dir}. Di solito si utilizza questa funzione in abbinamento a
 funzioni che operano sui file descriptor, ad esempio si potrà usare
 \func{fstat} per ottenere le proprietà della directory, o \func{fchdir} per
-spostare su di essa la directory di lavoro (vedi
+spostare su di essa la \index{directory~di~lavoro} directory di lavoro (vedi
 sez.~\ref{sec:file_work_dir}).
 
 Viceversa se si è aperto un file descriptor corrispondente ad una directory è
@@ -2145,17 +2378,18 @@ una directory.  La funzione inizia con l'aprire (\texttt{\small 18--22}) uno
 stream sulla directory passata come primo argomento, stampando un messaggio in
 caso di errore.
 
-Il passo successivo (\texttt{\small 23--24}) è cambiare directory di lavoro
-(vedi sez.~\ref{sec:file_work_dir}), usando in sequenza le funzioni
-\func{dirfd} e \func{fchdir} (in realtà si sarebbe potuto usare direttamente
-\func{chdir} su \var{dirname}), in modo che durante il successivo ciclo
-(\texttt{\small 26--30}) sulle singole voci dello stream ci si trovi
-all'interno della directory.\footnote{questo è essenziale al funzionamento
-  della funzione \code{do\_ls}, e ad ogni funzione che debba usare il campo
-  \var{d\_name}, in quanto i nomi dei file memorizzati all'interno di una
-  struttura \struct{dirent} sono sempre relativi alla directory in questione,
-  e senza questo posizionamento non si sarebbe potuto usare \func{stat} per
-  ottenere le dimensioni.}
+Il passo successivo (\texttt{\small 23--24}) è cambiare
+\index{directory~di~lavoro} directory di lavoro (vedi
+sez.~\ref{sec:file_work_dir}), usando in sequenza le funzioni \func{dirfd} e
+\func{fchdir} (in realtà si sarebbe potuto usare direttamente \func{chdir} su
+\var{dirname}), in modo che durante il successivo ciclo (\texttt{\small
+  26--30}) sulle singole voci dello stream ci si trovi all'interno della
+directory.\footnote{questo è essenziale al funzionamento della funzione
+  \code{do\_ls}, e ad ogni funzione che debba usare il campo \var{d\_name}, in
+  quanto i nomi dei file memorizzati all'interno di una struttura
+  \struct{dirent} sono sempre relativi alla directory in questione, e senza
+  questo posizionamento non si sarebbe potuto usare \func{stat} per ottenere
+  le dimensioni.}
 
 Avendo usato lo stratagemma di fare eseguire tutte le manipolazioni necessarie
 alla funzione passata come secondo argomento, il ciclo di scansione della
@@ -2179,7 +2413,7 @@ chiusura (\texttt{\small 32}) dello stream\footnote{nel nostro caso, uscendo
 \label{sec:file_work_dir}
 
 \itindbeg{pathname}
-
+\index{directory~di~lavoro|(} 
 Come accennato in sez.~\ref{sec:proc_fork} a ciascun processo è associata una
 directory nel filesystem,\footnote{questa viene mantenuta all'interno dei dati
   della sua \struct{task\_struct} (vedi fig.~\ref{fig:proc_task_struct}), più
@@ -2257,11 +2491,11 @@ la directory corrente (vale a dire ``\texttt{.}'') e tornarvi in seguito con
 Una seconda usata per ottenere la directory di lavoro è \code{char
   *get\_current\_dir\_name(void)} che è sostanzialmente equivalente ad una
 \code{getcwd(NULL, 0)}, con la sola differenza che essa ritorna il valore
-della variabile di ambiente \val{PWD}, che essendo costruita dalla shell può
-contenere un \textit{pathname} comprendente anche dei link simbolici. Usando
-\func{getcwd} infatti, essendo il \textit{pathname} ricavato risalendo
-all'indietro l'albero della directory, si perderebbe traccia di ogni passaggio
-attraverso eventuali link simbolici.
+della variabile di ambiente \envvar{PWD}, che essendo costruita dalla shell
+può contenere un \textit{pathname} comprendente anche dei link
+simbolici. Usando \func{getcwd} infatti, essendo il \textit{pathname} ricavato
+risalendo all'indietro l'albero della directory, si perderebbe traccia di ogni
+passaggio attraverso eventuali link simbolici.
 
 Per cambiare la directory di lavoro si può usare la funzione \funcd{chdir}
 (equivalente del comando di shell \cmd{cd}) il cui nome sta appunto per
@@ -2300,7 +2534,7 @@ quello in cui il processo non ha il permesso di accesso alla directory
 specificata da \param{fd}.
 
 \itindend{pathname}
-
+\index{directory~di~lavoro|)} 
 
 
 \subsection{I file temporanei}
@@ -2337,7 +2571,7 @@ massimo di \const{TMP\_MAX} volte, limite oltre il quale il comportamento è
 indefinito. Al nome viene automaticamente aggiunto come prefisso la directory
 specificata dalla costante \const{P\_tmpdir}.\footnote{le costanti
   \const{L\_tmpnam}, \const{P\_tmpdir} e \const{TMP\_MAX} sono definite in
-  \file{stdio.h}.}
+  \headfile{stdio.h}.}
 
 Di questa funzione esiste una versione \index{funzioni!rientranti} rientrante,
 \func{tmpnam\_r}, che non fa nulla quando si passa \val{NULL} come argomento.
@@ -2358,7 +2592,7 @@ L'argomento \param{pfx} specifica un prefisso di massimo 5 caratteri per il
 nome provvisorio. La funzione assegna come directory per il file temporaneo,
 verificando che esista e sia accessibile, la prima valida fra le seguenti:
 \begin{itemize*}
-\item La variabile di ambiente \const{TMPDIR} (non ha effetto se non è
+\item La variabile di ambiente \envvar{TMPDIR} (non ha effetto se non è
   definita o se il programma chiamante è \itindex{suid~bit} \acr{suid} o
   \itindex{sgid~bit} \acr{sgid}, vedi sez.~\ref{sec:file_special_perm}).
 \item il valore dell'argomento \param{dir} (se diverso da \val{NULL}).
@@ -2456,7 +2690,7 @@ sez.~\ref{sec:file_perm_overview}) sono impostati al valore \code{0600}
 questa funzione esiste una variante \funcd{mkostemp}, introdotta
 specificamente dalla \acr{glibc},\footnote{la funzione è stata introdotta
   nella versione 2.7 delle librerie e richiede che sia definita la macro
-  \const{\_GNU\_SOURCE}.} il cui prototipo è:
+  \macro{\_GNU\_SOURCE}.} il cui prototipo è:
 \begin{prototype}{stlib.h}{int mkostemp(char *template, int flags)}
   Genera un file temporaneo.
   
@@ -2539,7 +2773,7 @@ riferimento. Infine \func{fstat} esegue la stessa operazione su un file già
 aperto, specificato tramite il suo file descriptor \param{filedes}.
 
 La struttura \struct{stat} usata da queste funzioni è definita nell'header
-\file{sys/stat.h} e in generale dipende dall'implementazione; la versione
+\headfile{sys/stat.h} e in generale dipende dall'implementazione; la versione
 usata da Linux è mostrata in fig.~\ref{fig:file_stat_struct}, così come
 riportata dalla pagina di manuale di \func{stat}; in realtà la definizione
 effettivamente usata nel kernel dipende dall'architettura e ha altri campi
@@ -2560,7 +2794,7 @@ sez.~\ref{sec:file_file_times}), o per il padding dei campi.
 
 Si noti come i vari membri della struttura siano specificati come tipi
 primitivi del sistema (di quelli definiti in
-tab.~\ref{tab:intro_primitive_types}, e dichiarati in \file{sys/types.h}).
+tab.~\ref{tab:intro_primitive_types}, e dichiarati in \headfile{sys/types.h}).
 
 \subsection{I tipi di file}
 \label{sec:file_types}
@@ -2594,14 +2828,14 @@ riportato in tab.~\ref{tab:file_type_macro}.
     \macro{S\_ISSOCK}\texttt{(m)} & socket.\\
     \hline    
   \end{tabular}
-  \caption{Macro per i tipi di file (definite in \texttt{sys/stat.h}).}
+  \caption{Macro per i tipi di file (definite in \headfile{sys/stat.h}).}
   \label{tab:file_type_macro}
 \end{table}
 
 Oltre alle macro di tab.~\ref{tab:file_type_macro} è possibile usare
 direttamente il valore di \var{st\_mode} per ricavare il tipo di file
 controllando direttamente i vari bit in esso memorizzati. Per questo sempre in
-\file{sys/stat.h} sono definite le costanti numeriche riportate in
+\headfile{sys/stat.h} sono definite le costanti numeriche riportate in
 tab.~\ref{tab:file_mode_flags}.
 
 Il primo valore dell'elenco di tab.~\ref{tab:file_mode_flags} è la maschera
@@ -2648,7 +2882,7 @@ un'opportuna combinazione.
     \hline    
   \end{tabular}
   \caption{Costanti per l'identificazione dei vari bit che compongono il campo
-    \var{st\_mode} (definite in \file{sys/stat.h}).}
+    \var{st\_mode} (definite in \headfile{sys/stat.h}).}
   \label{tab:file_mode_flags}
 \end{table}
 
@@ -2807,6 +3041,8 @@ accesso in lettura sui dati bufferizzati. Questo comporta un ovvio costo sia
 in termini di prestazioni, che di consumo di risorse come la batteria per i
 portatili, o cicli di riscrittura per i dischi su memorie riscrivibili.
 
+% TODO aggiustare per il contenuto duplicato con le analoghe MS_*
+
 Per questo motivo, onde evitare di mantenere una informazione che nella
 maggior parte dei casi non interessa, è sempre stato possibile disabilitare
 l'aggiornamento del tempo di ultimo accesso con l'opzione di montaggio
@@ -5894,13 +6130,14 @@ Un elenco delle delle \textit{capabilities} disponibili su Linux, con una
 breve descrizione ed il nome delle costanti che le identificano, è riportato
 in tab.~\ref{tab:proc_capabilities};\footnote{l'elenco presentato questa
   tabella, ripreso dalla pagina di manuale (accessibile con \texttt{man
-    capabilities}) e dalle definizioni in \texttt{linux/capabilities.h}, è
-  aggiornato al kernel 2.6.26.} la tabella è divisa in due parti, la prima
-riporta le \textit{capabilities} previste anche nella bozza dello standard
-POSIX1.e, la seconda quelle specifiche di Linux.  Come si può notare dalla
-tabella alcune \textit{capabilities} attengono a singole funzionalità e sono
-molto specializzate, mentre altre hanno un campo di applicazione molto vasto,
-che è opportuno dettagliare maggiormente.
+    capabilities}) e dalle definizioni in
+  \texttt{include/linux/capabilities.h}, è aggiornato al kernel 2.6.26.} la
+tabella è divisa in due parti, la prima riporta le \textit{capabilities}
+previste anche nella bozza dello standard POSIX1.e, la seconda quelle
+specifiche di Linux.  Come si può notare dalla tabella alcune
+\textit{capabilities} attengono a singole funzionalità e sono molto
+specializzate, mentre altre hanno un campo di applicazione molto vasto, che è
+opportuno dettagliare maggiormente.
 
 \begin{table}[!h!btp]
   \centering
@@ -6168,8 +6405,9 @@ fig.~\ref{fig:cap_kernel_struct}.  Per un certo periodo di tempo era anche
 indicato che per poterle utilizzare fosse necessario che la macro
 \macro{\_POSIX\_SOURCE} risultasse non definita (ed era richiesto di inserire
 una istruzione \texttt{\#undef \_POSIX\_SOURCE} prima di includere
-\texttt{sys/capability.h}) requisito che non risulta più presente.\footnote{e
-  non è chiaro neanche quanto sia mai stato davvero necessario.}
+\headfile{sys/capability.h}) requisito che non risulta più
+presente.\footnote{e non è chiaro neanche quanto sia mai stato davvero
+  necessario.}
 
 Si tenga presente che le strutture di fig.~\ref{fig:cap_kernel_struct}, come i
 prototipi delle due funzioni \func{capget} e \func{capset}, sono soggette ad
@@ -6364,8 +6602,8 @@ La funzione richiede che si indichi quale degli insiemi si intente cancellare
 con l'argomento \param{flag}. Questo deve essere specificato con una variabile
 di tipo \type{cap\_flag\_t} che può assumere esclusivamente\footnote{si tratta
   in effetti di un tipo enumerato, come si può verificare dalla sua
-  definizione che si trova in \texttt{/usr/include/sys/capability.h}.} uno dei
-valori illustrati in tab.~\ref{tab:cap_set_identifier}.
+  definizione che si trova in \headfile{sys/capability.h}.} uno dei valori
+illustrati in tab.~\ref{tab:cap_set_identifier}.
 
 Si possono inoltre confrontare in maniera diretta due diversi
 \textit{capability state} con la funzione \funcd{cap\_compare}; il suo
@@ -6429,7 +6667,7 @@ prendere come valore uno qualunque di quelli riportati in
 tab.~\ref{tab:proc_capabilities}, in questo caso però non è possibile
 combinare diversi valori in una maschera binaria, una variabile di tipo
 \type{cap\_value\_t} può indicare una sola capacità.\footnote{in
-  \texttt{sys/capability.h} il tipo \type{cap\_value\_t} è definito come
+  \headfile{sys/capability.h} il tipo \type{cap\_value\_t} è definito come
   \ctyp{int}, ma i valori validi sono soltanto quelli di
   tab.~\ref{tab:proc_capabilities}.}
 
@@ -6622,7 +6860,7 @@ specifico occorre usare la funzione \funcd{capgetp}, il cui
 prototipo\footnote{su alcune pagine di manuale la funzione è descritta con un
   prototipo sbagliato, che prevede un valore di ritorno di tipo \type{cap\_t},
   ma il valore di ritorno è intero, come si può verificare anche dalla
-  dichiarazione della stessa in \texttt{sys/capability.h}.} è:
+  dichiarazione della stessa in \headfile{sys/capability.h}.} è:
 \begin{functions}
   \headdecl{sys/capability.h}
 
@@ -6739,19 +6977,20 @@ questa sezione.
 % TODO riferimenti ai bind mount, link simbolici ecc.
 
 Come accennato in sez.~\ref{sec:proc_fork} ogni processo oltre ad una
-directory di lavoro, ha anche una directory \textsl{radice}\footnote{entrambe
-  sono contenute in due campi (rispettivamente \var{pwd} e \var{root}) di
-  \struct{fs\_struct}; vedi fig.~\ref{fig:proc_task_struct}.} che, pur essendo
-di norma corrispondente alla radice dell'albero di file e directory come visto
-dal kernel (ed illustrato in sez.~\ref{sec:file_pathname}), ha per il processo
-il significato specifico di directory rispetto alla quale vengono risolti i
+\index{directory~di~lavoro} directory di lavoro, ha anche una directory
+\textsl{radice}\footnote{entrambe sono contenute in due campi (rispettivamente
+  \var{pwd} e \var{root}) di \struct{fs\_struct}; vedi
+  fig.~\ref{fig:proc_task_struct}.} che, pur essendo di norma corrispondente
+alla radice dell'albero di file e directory come visto dal kernel (ed
+illustrato in sez.~\ref{sec:file_pathname}), ha per il processo il significato
+specifico di directory rispetto alla quale vengono risolti i
 \itindsub{pathname}{assoluto}\textit{pathname} assoluti.\footnote{cioè quando
   un processo chiede la risoluzione di un \textit{pathname}, il kernel usa
   sempre questa directory come punto di partenza.} Il fatto che questo valore
 sia specificato per ogni processo apre allora la possibilità di modificare le
 modalità di risoluzione dei \textit{pathname} assoluti da parte di un processo
 cambiando questa directory, così come si fa coi
-\itindsub{pathname}{relativo}\textit{pathname} relativi cambiando la directory
+\itindsub{pathname}{relativo}\textit{pathname} relativi cambiando la \index{directory~di~lavoro} directory
 di lavoro.
 
 Normalmente la directory radice di un processo coincide anche con la radice
@@ -6793,19 +7032,20 @@ cambia la directory di lavoro, che potrebbe restare fuori dalla \textit{chroot
 
 Questo è il motivo per cui la funzione è efficace solo se dopo averla eseguita
 si cedono i privilegi di root. Infatti se per un qualche motivo il processo
-resta con la directory di lavoro fuori dalla \textit{chroot jail}, potrà
-comunque accedere a tutto il resto del filesystem usando
-\itindsub{pathname}{relativo}\textit{pathname} relativi, i quali, partendo
-dalla directory di lavoro che è fuori della \textit{chroot jail}, potranno
-(con l'uso di ``\texttt{..}'') risalire fino alla radice effettiva del
-filesystem.
+resta con \index{directory~di~lavoro} la directory di lavoro fuori dalla
+\textit{chroot jail}, potrà comunque accedere a tutto il resto del filesystem
+usando \itindsub{pathname}{relativo}\textit{pathname} relativi, i quali,
+partendo dalla directory di lavoro che è fuori della \textit{chroot jail},
+potranno (con l'uso di ``\texttt{..}'') risalire fino alla radice effettiva
+del filesystem.
 
 Ma se ad un processo restano i privilegi di amministratore esso potrà comunque
-portare la sua directory di lavoro fuori dalla \textit{chroot jail} in cui si
-trova. Basta infatti creare una nuova \textit{chroot jail} con l'uso di
-\func{chroot} su una qualunque directory contenuta nell'attuale directory di
-lavoro.  Per questo motivo l'uso di questa funzione non ha molto senso quando
-un processo necessita dei privilegi di root per le sue normali operazioni.
+portare la sua \index{directory~di~lavoro} directory di lavoro fuori dalla
+\textit{chroot jail} in cui si trova. Basta infatti creare una nuova
+\textit{chroot jail} con l'uso di \func{chroot} su una qualunque directory
+contenuta nell'attuale directory di lavoro.  Per questo motivo l'uso di questa
+funzione non ha molto senso quando un processo necessita dei privilegi di root
+per le sue normali operazioni.
 
 Un caso tipico di uso di \func{chroot} è quello di un server FTP anonimo, in
 questo caso infatti si vuole che il server veda solo i file che deve