X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=filedir.tex;h=c78d42a926d6ad8f78434f421b6ec042e7c77ffc;hp=5b00cc8ab231092c1f47d2743e596616fb818b2c;hb=f167b429e8401ffab50f4913016094fdcb1f5dbc;hpb=ba1abcbbbbf35e297b1a38d0b2030e6fcf7f7543 diff --git a/filedir.tex b/filedir.tex index 5b00cc8..c78d42a 100644 --- a/filedir.tex +++ b/filedir.tex @@ -5387,7 +5387,7 @@ devono essere attivate esplicitamente montando il filesystem\footnote{che deve supportarle, ma questo è ormai vero per praticamente tutti i filesystem più comuni, con l'eccezione di NFS per il quale esiste però il supporto per le versioni NFSv2 e NFSv3 del protocollo, con NFSv4 esistono invece delle ACL - native che hannno una semantica diversa, su di esse possono mappare le ACL + native che hanno una semantica diversa, su di esse possono mappare le ACL POSIX, ma l'inverso è possibile solo in forma incompleta.} su cui le si vogliono utilizzare con l'opzione \texttt{acl} attiva. Dato che si tratta di una estensione è infatti opportuno utilizzarle soltanto laddove siano @@ -5799,7 +5799,7 @@ tipo:qualificatore:permessi dove il tipo può essere uno fra \texttt{user}, \texttt{group}, \texttt{other} e \texttt{mask}. Il qualificatore è presente solo per \texttt{user} e \texttt{group} ed indica l'utente o il gruppo a cui la voce si riferisce, -mentrei permessi sono espressi con una tripletta di lettere analoga a quella +mentre i permessi sono espressi con una tripletta di lettere analoga a quella usata per i permessi dei file, vale a dire ``\texttt{r}'' per il permesso di lettura, ``\texttt{w}'' per il permesso di scrittura, ``\texttt{x}'' per il permesso di esecuzione (scritti in quest'ordine) e ``\texttt{-}'' per @@ -6063,21 +6063,21 @@ usando un file descriptor; i rispettivi prototipi sono: \errval{ENOENT}, \errval{ENOTDIR} per \func{acl\_set\_file}.} \end{funcproto} -Con \func{acl\_set\_file} si assegnara la ACL contenuta in \param{acl} al file -o alla directory indicate da \param{path} con \param{type} che indica il tipo +Con \func{acl\_set\_file} si assegna la ACL contenuta in \param{acl} al file o +alla directory indicate da \param{path}, con \param{type} che indica il tipo di ACL con le costanti di tab.~\ref{tab:acl_type}; si tenga presente però che le ACL di default possono essere solo impostate qualora \param{path} indichi -una directory; Inoltre perché la funzione abbia successo la ACL dovrà essere -valida, e contenere tutti le voci necessarie, con l'eccezione di quando in -caso di directory si specifica una ACL vuota per cancellare la ACL di default -associata a \param{path}.\footnote{questo però è una estensione della +una directory. Inoltre perché la funzione abbia successo la ACL dovrà essere +valida, e contenere tutti le voci necessarie, con l'eccezione si specifica una +ACL vuota per cancellare la ACL di default associata a \param{path}, valida +solo in caso di directory.\footnote{questo però è una estensione della implementazione delle ACL di Linux, la bozza di standard POSIX.1e prevedeva l'uso della apposita funzione \funcd{acl\_delete\_def\_file}, che prende come unico argomento il \textit{pathname} della directory di cui si vuole cancellare l'ACL di default, per i dettagli si ricorra alla pagina di manuale.} -La seconda funzione, \func{acl\_set\_fd} è del tutto è analoga alla prima, ma +La seconda funzione, \func{acl\_set\_fd}, è del tutto è analoga alla prima, ma non dovendo avere a che fare con directory (e la conseguente possibilità di avere una ACL di default) non necessita che si specifichi il tipo di ACL, che sarà sempre di accesso, e prende come unico argomento, a parte il file @@ -6090,7 +6090,7 @@ voce direttamente con le funzioni previste dallo standard POSIX.1e. Queste funzioni però sono alquanto macchinose da utilizzare per cui è molto più semplice operare direttamente sulla rappresentazione testuale. Questo è il motivo per non tratteremo nei dettagli dette funzioni, fornendone solo una -descrizione sommaria; chi fosse interessato potrà ricorrere alle pagine di +descrizione sommaria; chi fosse interessato può ricorrere alle pagine di manuale. Se si vuole operare direttamente sui contenuti di un oggetto di tipo @@ -6101,6 +6101,16 @@ funzione \funcm{acl\_create\_entry} per una voce da aggiungere. Nel caso della prima funzione si potrà poi ripetere la lettura per ottenere i puntatori alle singole voci successive alla prima. +\begin{figure}[!htb] + \footnotesize \centering + \begin{minipage}[c]{\codesamplewidth} + \includecodesample{listati/mygetfacl.c} + \end{minipage} + \normalsize + \caption{Corpo principale del programma \texttt{mygetfacl.c}.} + \label{fig:proc_mygetfacl} +\end{figure} + Una volta ottenuti detti puntatori si potrà operare sui contenuti delle singole voci: con le funzioni \funcm{acl\_get\_tag\_type}, \funcm{acl\_get\_qualifier}, \funcm{acl\_get\_permset} si potranno leggere @@ -6119,16 +6129,6 @@ Come esempio di utilizzo di queste funzioni nei sorgenti allegati alla guida si è distribuito il programma \texttt{mygetfacl.c}, che consente di leggere le ACL di un file, passato come argomento. -\begin{figure}[!htb] - \footnotesize \centering - \begin{minipage}[c]{\codesamplewidth} - \includecodesample{listati/mygetfacl.c} - \end{minipage} - \normalsize - \caption{Corpo principale del programma \texttt{mygetfacl.c}.} - \label{fig:proc_mygetfacl} -\end{figure} - La sezione principale del programma, da cui si è rimossa la sezione sulla gestione delle opzioni, è riportata in fig.~\ref{fig:proc_mygetfacl}. Il programma richiede un unico argomento (\texttt{\small 16-20}) che indica il @@ -6154,30 +6154,40 @@ tetti massimi al consumo delle risorse di un filesystem (spazio disco e \textit{inode}) da parte di utenti e gruppi. Dato che la funzionalità ha senso solo per i filesystem su cui si mantengono i -dati degli utenti\footnote{in genere la si attiva sul filesystem che contiene - le \textit{home} degli utenti, dato che non avrebbe senso per i file di - sistema che in genere appartengono all'amministratore.} essa deve essere -attivata esplicitamente. Questo si fa, per tutti i filesystem che le -supportano, tramite due distinte opzioni di montaggio, \texttt{usrquota} e -\texttt{grpquota} che abilitano le quote rispettivamente per gli utenti e per -i gruppi. Così è possibile usare le limitazioni sulle quote o sugli utenti o +dati degli utenti essa deve essere attivata esplicitamente.\footnote{in genere + la si attiva sul filesystem che contiene le \textit{home} degli utenti, dato + che non avrebbe senso per i file di sistema che in genere appartengono + all'amministratore.} Questo si fa, per tutti i filesystem che le supportano, +tramite due distinte opzioni di montaggio, \texttt{usrquota} e +\texttt{grpquota}, che abilitano le quote rispettivamente per gli utenti e per +i gruppi. Così è possibile usare le limitazioni delle quote o sugli utenti o sui gruppi o su entrambi. +Dal kernel 4.1, ed inizialmente solo per il filesystem XFS, sono diventate +disponibili un terzo tipo di quote, dette \textit{project quota}, che +consentono di applicare delle quote ad un ``\textsl{progetto}'', identificato +come ramo di albero sotto una directory, per il quale possono essere imposti +dei limiti (di nuovo in termini di spazio disco o \textit{inode}) per i file +che ne fanno parte. Si può così porre dei limiti sul contenuto di un ramo di +albero. + Il meccanismo prevede che per ciascun filesystem che supporta le quote disco (i vari \textit{extN}, \textit{btrfs}, \textit{XFS}, \textit{JFS}, \textit{ReiserFS}) il kernel provveda sia a mantenere aggiornati i dati -relativi al consumo delle risorse da parte degli utenti e dei gruppi, che a -far rispettare i limiti imposti dal sistema, con la generazione di un errore -di \errcode{EDQUOT} per tutte le operazioni sui file che porterebbero ad un -superamento degli stessi. Si tenga presente che questi due compiti sono -separati, il primo si attiva al montaggio del filesystem con il supporto per -le quote, il secondo deve essere abilitato esplicitamente. +relativi al consumo delle risorse da parte degli utenti e dei gruppi (e del +progetto), che a far rispettare i limiti imposti dal sistema, con la +generazione di un errore di \errcode{EDQUOT} per tutte le operazioni sui file +che porterebbero ad un superamento degli stessi. Si tenga presente che questi +due compiti sono separati, il primo si attiva al montaggio del filesystem con +il supporto per le quote, il secondo deve essere abilitato esplicitamente. Per il mantenimento dei dati di consumo delle risorse vengono usati due file riservati nella directory radice del filesystem su cui si sono attivate le quote, uno per le quote utente e l'altro per le quote gruppo.\footnote{la cosa vale per tutti i filesystem tranne \textit{XFS} che mantiene i dati - internamente.} Con la versione 2 del supporto delle quote, che da anni è + internamente, compresi quelli per le \textit{project quota}, che pertanto, + essendo questo l'unico filesyste che le supporta, non hanno un file ad esse + riservato.} Con la versione 2 del supporto delle quote, che da anni è l'unica rimasta in uso, questi file sono \texttt{aquota.user} e \texttt{aquota.group}, in precedenza erano \texttt{quota.user} e \texttt{quota.group}. @@ -6224,10 +6234,12 @@ gestione delle quote è \funcd{quotactl}, ed il suo prototipo è: caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\errcode{EACCES}] si è richiesto \const{Q\_QUOTAON}, ma il file delle - quote indicato da \param{addr} non esiste o non è un file ordinario. + quote indicato da \param{addr} esiste ma non è un file ordinario o no sta + su \param{dev}. \item[\errcode{EBUSY}] si è richiesto \const{Q\_QUOTAON}, ma le quote sono già attive. - \item[\errcode{EFAULT}] \param{addr} non è un puntatore valido. + \item[\errcode{EFAULT}] \param{addr} o \param{dev} non sono un puntatori + validi. \item[\errcode{EINVAL}] o \param{cmd} non è un comando valido, o il dispositivo \param{dev} non esiste. \item[\errcode{EIO}] errore di lettura/scrittura sul file delle quote. @@ -6249,14 +6261,18 @@ gestione delle quote è \funcd{quotactl}, ed il suo prototipo è: % TODO rivedere gli errori La funzione richiede che il filesystem sul quale si vuole operare, che deve -essere specificato con il nome del relativo file di dispositivo -nell'argomento \param{dev}, sia montato con il supporto delle quote -abilitato. Per le operazioni che lo richiedono inoltre si dovrà indicare con -l'argomento \param{id} l'utente o il gruppo (specificati rispettivamente per -\ids{UID} e \ids{GID}) su cui si vuole operare, o altri dati relativi -all'operazione. Alcune operazioni più complesse usano infine -l'argomento \param{addr} per indicare un indirizzo ad un area di memoria il -cui utilizzo dipende dall'operazione stessa. +essere specificato con il nome del relativo file di dispositivo nell'argomento +\param{dev}, sia montato con il supporto delle quote abilitato. Per le +operazioni che lo richiedono inoltre si dovrà indicare con l'argomento +\param{id} l'utente o il gruppo o il progetto (specificati rispettivamente per +\ids{UID}, \ids{GID} o identificativo) su cui si vuole operare,\footnote{nel + caso di \textit{project quota} gli identificativi vengono associati alla + directory base del progetto nel file \file{/etc/projects}, ed impostati con + \cmd{xfs\_quota}, l'argomento è di natura sistemistica e va al di là dello + scopo di questo testo.} o altri dati relativi all'operazione. Alcune +operazioni più complesse usano infine l'argomento \param{addr} per indicare un +indirizzo ad un area di memoria il cui utilizzo dipende dall'operazione +stessa. La funzione prevede la possibilità di eseguire una serie operazioni sulle quote molto diverse fra loro, la scelta viene effettuata tramite il primo @@ -6277,10 +6293,10 @@ macro \macro{QCMD}: } La macro consente di specificare, oltre al tipo di operazione, da indicare con -l'argomento \param{subcmd} se questa deve applicarsi alle quote utente o alle -quote gruppo. Questo viene indicato dall'argomento \param{type} che deve -essere sempre definito ed assegnato ad uno fra i due valori \const{USRQUOTA} o -\const{GRPQUOTA}. +l'argomento \param{subcmd}, se questa deve applicarsi alle quote utente o alle +quote gruppo o alle quote progetto. Questo viene indicato dall'argomento +\param{type} che deve essere sempre definito ed assegnato ad uno fra i valori +\const{USRQUOTA}, \const{GRPQUOTA} e \const{PRJQUOTA}. \begin{table}[htb] \centering @@ -6451,11 +6467,12 @@ effettuare qualche conversione per avere un valore in byte.\footnote{in genere prestazioni migliori in conseguenza di un minore frazionamento dei dati e di indici più corti.} -Come accennato realizzazione delle quote disco ha visto diverse revisioni, con -modifiche sia del formato delle stesse che dei nomi dei file utilizzate. Per -questo alcune operazioni di gestione (in particolare \const{Q\_QUOTAON} e -\const{Q\_GETFMT}) e possono fare riferimento a queste versioni, che vengono -identificate tramite le costanti di tab.~\ref{tab:quotactl_id_format}. +Come accennato la realizzazione delle quote disco ha visto diverse revisioni, +con modifiche sia del formato delle stesse che dei nomi dei file +utilizzati. Per questo alcune operazioni di gestione (in particolare +\const{Q\_QUOTAON} e \const{Q\_GETFMT}) e possono fare riferimento a queste +versioni, che vengono identificate tramite le costanti di +tab.~\ref{tab:quotactl_id_format}. \begin{table}[htb] \centering