diff options
Diffstat (limited to 'it_IT.ISO8859-15/books/handbook/basics/chapter.xml')
-rw-r--r-- | it_IT.ISO8859-15/books/handbook/basics/chapter.xml | 2815 |
1 files changed, 2815 insertions, 0 deletions
diff --git a/it_IT.ISO8859-15/books/handbook/basics/chapter.xml b/it_IT.ISO8859-15/books/handbook/basics/chapter.xml new file mode 100644 index 0000000000..dda1e24083 --- /dev/null +++ b/it_IT.ISO8859-15/books/handbook/basics/chapter.xml @@ -0,0 +1,2815 @@ +<?xml version="1.0" encoding="iso-8859-15" standalone="no"?> +<!-- + The FreeBSD Italian Documentation Project + + $FreeBSD$ + Original revision: 1.152 +--> + +<chapter id="basics"> + <chapterinfo> + <authorgroup> + <author> + <firstname>Chris</firstname> + + <surname>Shumway</surname> + + <contrib>Riscritto da </contrib> + </author> + </authorgroup> + </chapterinfo> + + <title>Basi di Unix</title> + + <sect1 id="basics-synopsis"> + <title>Sinossi</title> + + <para>Il seguente capitolo tratta i comandi e le + funzionalità di base del sistema operativo + FreeBSD. Molto di questo materiale è + valido anche per altri sistemi operativi &unix;-like. + Sentiti libero di leggere velocemente questo capitolo se hai + familiarità con questo materiale. Se sei un utente + alle prime armi di FreeBSD, allora dovrai di + sicuro leggere questo capitolo attentamente.</para> + + <para>Dopo aver letto questo capitolo, saprai:</para> + + <itemizedlist> + <listitem> + <para>Come usare le <quote>console virtuali</quote> di FreeBSD.</para> + </listitem> + + <listitem> + <para>Come funzionano i permessi dei file &unix; oltre ad una + spiegazione dei flag sotto &os;.</para> + </listitem> + + <listitem> + <para>La struttura di default del file system di &os;.</para> + </listitem> + + <listitem> + <para>L'organizzazione del disco di &os;.</para> + </listitem> + + <listitem> + <para>Come montare e smontare i file system.</para> + </listitem> + + <listitem> + <para>Cosa sono i processi, i demoni e i segnali.</para> + </listitem> + + <listitem> + <para>Cos'è una shell, e come cambiare il proprio ambiente di + login di default.</para> + </listitem> + + <listitem> + <para>I principi di base sull'uso degli editor testuali.</para> + </listitem> + + <listitem> + <para>Cosa sono i dispositivi e i nodi dei dispositivi.</para> + </listitem> + + <listitem> + <para>Quali formati dei binari sono usati in &os;.</para> + </listitem> + + <listitem> + <para>Come leggere le pagine man per ottenere maggiori + informazioni.</para> + </listitem> + </itemizedlist> + </sect1> + + <sect1 id="consoles"> + <title>Console Virtuali e Terminali</title> + + <indexterm><primary>console virtuali</primary></indexterm> + <indexterm><primary>terminali</primary></indexterm> + + <para>FreeBSD può essere usato in vari modi. Uno di questi + è quello di digitare i comandi tramite un terminale + testuale. Quando si utilizza FreeBSD in questo modo si ha + velocemente nelle proprie mani molta della flessibilità + e della potenza di un sistema operativo &unix;. + Questa sezione descrive cosa sono i <quote>terminali</quote> e le + <quote>console</quote>, e come si possono utilizzare in FreeBSD.</para> + + <sect2 id="consoles-intro"> + <title>La console</title> + + <indexterm><primary>console</primary></indexterm> + + <para>Se non hai configurato FreeBSD in modo tale da avviare in + modo automatico l'ambiente grafico durante l'avvio, il + sistema ti fornirà un prompt di login dopo la fase di + avvio, esattamente dopo che gli script di avvio sono stati + eseguiti. Dovresti vedere qualcosa simile a questo:</para> + + <screen>Additional ABI support:. +Local package initialization:. +Additional TCP options:. + +Fri Sep 20 13:01:06 EEST 2002 + +FreeBSD/i386 (pc3.example.org) (ttyv0) + +login:</screen> + + <para>I messaggi potrebbero essere leggermente diversi sul tuo + sistema, tuttavia dovresti vedere qualcosa di analogo. In + questo momento ci interessano le ultime due righe. Analizziamo + la penultima riga:</para> + + <programlisting>FreeBSD/i386 (pc3.example.org) (ttyv0)</programlisting> + + <para>Questa riga contiene alcune informazioni sul sistema che hai + appena avviato. Sei di fronte a una console + <quote>FreeBSD</quote>, che sta girando su un processore Intel + o su un processore compatibile con l'architettura x86<footnote> + <para>Questo è il significato di <literal>i386</literal>. + Nota che anche se non stai eseguendo FreeBSD su una CPU della serie + 386 di Intel, questo messaggio resta <literal>i386</literal>. Non + si riferisce al tipo del tuo processore, ma bensì + all'<quote>architettura</quote> del processore.</para></footnote>. + Il nome di questa macchina (tutte le macchine &unix; hanno un nome) + è <hostid>pc3.example.org</hostid>, e in questo momento sei di + fronte alla sua console di sistema—il terminale + <devicename>ttyv0</devicename>.</para> + + <para>Infine, l'ultima riga è sempre:</para> + + <programlisting>login:</programlisting> + + <para>Qui devi digitare il tuo <quote>username</quote> per + loggarti in FreeBSD. La prossima sezione descrive come + fare ad effettuare il login su FreeBSD.</para> + </sect2> + + <sect2 id="consoles-login"> + <title>Loggarsi in FreeBSD</title> + + <para>FreeBSD è un sistema multi-utente e multi-processo. + Questa è la descrizione formale che viene usualmente + attribuita a un sistema che può essere usato da diverse + persone, le quali eseguono contemporaneamente molti programmi + su una singola macchina.</para> + + <para>Ogni sistema multi-utente necessita di qualche metodo che + distingua un <quote>utente</quote> in modo univoco. In + FreeBSD (e in tutti i sistemi operativi &unix;-like), questo + viene realizzato richiedendo che ogni utente debba + <quote>loggarsi</quote> nel sistema prima che possa + eseguire qualche programma. Ogni utente ha un nome univoco (lo + <quote>username</quote>), uno personale e una chiave segreta + (la <quote>password</quote>). FreeBSD richiede entrambe + queste due cose prima di dare la possibilità ad un + utente di eseguire qualche programma.</para> + + <indexterm><primary>script di avvio</primary></indexterm> + + <para>Appena dopo la fase di avvio di FreeBSD e quando gli script + di avvio sono stati eseguiti<footnote> + <para>Gli script di avvio sono programmi che vengono eseguiti in + modo automatico durante la fase di avvio di FreeBSD. Il + loro compito principale è quello di impostare l'ambiente + che potrà essere utilizzato da qualsiasi altro programma che + venga eseguito, ed avviare i servizi che hai configurato in + modo tale da essere eseguiti in background per realizzare + cose utili.</para> + </footnote>, ti viene presentato un prompt dove inserire un valido + username:</para> + + <screen>login:</screen> + + <para>Giusto per questo esempio, assumiamo che il tuo username + sia <username>john</username>. Al prompt digita + <literal>john</literal> e premi <keycap>Invio</keycap>. Ti + verrà presentato un prompt dove inserire la + <quote>password</quote>:</para> + + <screen>login: <userinput>john</userinput> +Password:</screen> + + <para>Digita la password di <username>john</username>, e + premi <keycap>Invio</keycap>. La password + <emphasis>non viene visualizzata!</emphasis> Non ti devi + preoccupare di questo per ora. È sufficiente sapere + che è una questione di + sicurezza.</para> + + <para>Se hai digitato la tua password in modo corretto, + dovresti essere loggato in FreeBSD e sei quindi pronto per + provare tutti i comandi disponibili.</para> + + <para>Dovresti inoltre vedere il messaggio del giorno + (<acronym>MOTD</acronym>) seguito da un prompt dei comandi (un + carattere <literal>#</literal>, <literal>$</literal>, o + <literal>%</literal>). Ciò + indica che sei a tutti gli effetti loggato su FreeBSD.</para> + </sect2> + + <sect2 id="consoles-virtual"> + <title>Console Multiple</title> + + <para>Eseguire comandi &unix; in una sola console va bene, + tuttavia FreeBSD può eseguire più programmi alla + volta. Avere una sola console dove poter digitare i comandi + può essere un pò uno spreco quando un sistema + operativo come FreeBSD è in grado di eseguire dozzine di + programmi contemporaneamente. È + in questo caso che le <quote>console virtuali</quote> possono essere + molto utili.</para> + + <para>FreeBSD può essere configurato in modo tale da poter + utilizzare differenti console virtuali. Puoi passare da una console + virtuale ad un'altra digitando un paio di tasti sulla tastiera. Ogni + console ha il proprio canale di output indipendente, e FreeBSD si + occupa di redirigere correttamente l'input della tastiera e l'output del + monitor quando passi da una console virtuale in un'altra.</para> + + <para>In FreeBSD alcune combinazioni speciali di tasti sono state + riservate per il passaggio tra le console<footnote> + <para>Una descrizione abbastanza tecnica ed accurata di tutti i + dettagli della console di FreeBSD e dei driver della tastiera + può essere trovata nelle pagine man di &man.syscons.4;, + &man.atkbd.4;, &man.vidcontrol.1; e &man.kbdcontrol.1;. Qui non + approfondiremo i dettagli, ma il lettore interessato può + sempre consultare le pagine man per una spiegazione dettagliata + e completa su come funzionano queste cose.</para> + </footnote>. Puoi usare + <keycombo><keycap>Alt</keycap><keycap>F1</keycap></keycombo>, + <keycombo><keycap>Alt</keycap><keycap>F2</keycap></keycombo>, fino a + <keycombo><keycap>Alt</keycap><keycap>F8</keycap></keycombo> per + cambiare console su FreeBSD.</para> + + <para>Quando passi da una console ad un'altra, FreeBSD si preoccupa di + salvare e ripristinare l'output a video. Il risultato è + l'<quote>illusione</quote> di avere più schermi e più + tastiere <quote>virtuali</quote> che puoi utilizzare per dare in pasto a + FreeBSD dei comandi. I programmi che lanci su una console virtuale + rimarranno in esecuzione anche quando la console non è visibile. + L'esecuzione di questi programmi continua quando passi in un'altra + console virtuale.</para> + </sect2> + + <sect2 id="consoles-ttys"> + <title>Il File <filename>/etc/ttys</filename></title> + + <para>La configurazione di default di FreeBSD prevede l'avvio del sistema + con otto console virtuali. Comunque questo non è un settaggio + obbligatorio, e puoi facilmente personalizzare la tua installazione in + modo tale da avviare il sistema con qualche console virtuale in + più o in meno. Il numero e i settaggi delle console virtuali sono + configurati nel file <filename>/etc/ttys</filename>.</para> + + <para>Puoi usare il file <filename>/etc/ttys</filename> per configurare + le console virtuali di FreeBSD. In questo file ogni riga non commentata + (le righe che non iniziano con il carattere <literal>#</literal>) + contiene i settaggi di un singolo terminale o di una singola console. + La versione di default di questo file contenuta in FreeBSD + configura nove console virtuali, ed abilita otto di queste. Sono + le righe che iniziano con <literal>ttyv</literal>:</para> + + <programlisting># name getty type status comments +# +ttyv0 "/usr/libexec/getty Pc" cons25 on secure +# Terminali virtuali +ttyv1 "/usr/libexec/getty Pc" cons25 on secure +ttyv2 "/usr/libexec/getty Pc" cons25 on secure +ttyv3 "/usr/libexec/getty Pc" cons25 on secure +ttyv4 "/usr/libexec/getty Pc" cons25 on secure +ttyv5 "/usr/libexec/getty Pc" cons25 on secure +ttyv6 "/usr/libexec/getty Pc" cons25 on secure +ttyv7 "/usr/libexec/getty Pc" cons25 on secure +ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure</programlisting> + + <para>Per una descrizione più dettagliata su ogni colonna di questo + file e per tutte le opzioni che puoi utilizzare per settare le console + virtuali, consulta la pagina man &man.ttys.5;.</para> + </sect2> + + <sect2 id="consoles-singleuser"> + <title>Console in Modalità Single User</title> + + <para>Una descrizione dettagliata del significato della + <quote>modalità single user</quote> può essere trovata + nella <xref linkend="boot-singleuser"/>. È bene notare che + c'è un'unica console quando avvii FreeBSD in modalità + single user. Le console virtuali non sono disponibili. Anche i + settaggi della console in modalità single user possono essere + trovati nel file <filename>/etc/ttys</filename>. Guarda la riga che + inizia con <literal>console</literal>:</para> + + <programlisting># name getty type status comments +# +# Se la console è definita "insecure", allora il processo init richiederà la password di root +# quando entrerai in modalità single-user. +console none unknown off secure</programlisting> + + <note> + <para>Come riportato nel commento sopra la riga + <literal>console</literal>, puoi modificare questa riga cambiando + <literal>secure</literal> in <literal>insecure</literal>. Se lo fai, + quando FreeBSD viene avviato in modalità single user, + verrà chiesta la password di <username>root</username>.</para> + + <para><emphasis>Pensaci comunque due volte a settare il parametro + <literal>insecure</literal></emphasis>. Se non ricordi più + la password di <username>root</username>, riuscire ad avviare il + sistema in modalità single user sarà molto complesso. + È ancora possibile, ma potrebbe essere molto difficile per chi + non conosce molto bene il meccanismo di avvio di FreeBSD e i relativi + programmi.</para> + </note> + </sect2> + + <sect2 id="consoles-vidcontrol"> + <title>Modifica delle Modalità Video della Console</title> + + <para>La modalità video di default della console di FreeBSD + può essere impostata a 1024x768, 1280x1024, o ad un altra + risoluzione supportata dalla tua scheda grafica e dal tuo monitor. + Per usare una modalità video differente, devi prima + ricompilare il tuo kernel aggiungendo due opzioni:</para> + + <programlisting>options VESA +options SC_PIXEL_MODE</programlisting> + + <para>Quando il kernel è stato ricompilato con queste due opzioni, + puoi determinare quali modalità video sono supportate + dal tuo hardware usando l'utility &man.vidcontrol.1;. + Per ottenere una lista delle modalità video supportate, + digita il seguente comando:</para> + + <screen>&prompt.root; <userinput>vidcontrol -i mode</userinput></screen> + + <para>L'output di questo comando è una lista delle + modalità video che sono supportate dal tuo hardware. + Puoi usare una nuova modalità video indicandola a + &man.vidcontrol.1; in una console <username>root</username>:</para> + + <screen>&prompt.root; <userinput>vidcontrol MODE_279</userinput></screen> + + <para>Se la nuova modalità è soddisfacente, può + essere impostata in modo permanente ad ogni avvio nel file + <filename>/etc/rc.conf</filename>:</para> + + <programlisting>allscreens_flags="MODE_279"</programlisting> + </sect2> + </sect1> + + <sect1 id="permissions"> + <title>I Permessi</title> + + <indexterm><primary>UNIX</primary></indexterm> + + <para>FreeBSD, essendo un discendente diretto dello &unix; BSD, si basa su + molti concetti chiave di &unix;. Il primo e il più affermato + è che FreeBSD è un sistema operativo multi-utente. + Il sistema può gestire diversi utenti che lavorano + contemporaneamente su operazioni indipendenti. Il sistema è + responsabile della gestione e della suddivisione appropriata delle + richieste di utilizzo dei dispositivi hardware, delle periferiche, della + memoria, e del tempo di CPU in modo equo per ogni utente.</para> + + <para>Poichè il sistema è in grado di supportare più + utenti, tutto ciò che il sistema gestisce possiede un insieme di + permessi che determinano chi può leggere, scrivere, ed eseguire la + risorsa. Questi permessi sono memorizzati mediante tre ottetti + suddivisi in tre parti, una per il proprietario del file, una per il + gruppo al quale il file appartiene, e una per tutti gli altri. Questa + rappresentazione numerica funziona in questo modo:</para> + + <indexterm><primary>permessi</primary></indexterm> + <indexterm><primary>permessi dei file</primary></indexterm> + + <informaltable frame="none" pgwide="1"> + <tgroup cols="3"> + <thead> + <row> + <entry>Valore</entry> + + <entry>Permessi</entry> + + <entry>Listato nella Directory</entry> + </row> + </thead> + + <tbody> + <row> + <entry>0</entry> + + <entry>Lettura no, scrittura no, esecuzione no</entry> + + <entry><literal>---</literal></entry> + </row> + + <row> + <entry>1</entry> + + <entry>Lettura no, scrittura no, esecuzione</entry> + + <entry><literal>--x</literal></entry> + </row> + + <row> + <entry>2</entry> + + <entry>Lettura no, scrittura, esecuzione no</entry> + + <entry><literal>-w-</literal></entry> + </row> + + <row> + <entry>3</entry> + + <entry>Lettura no, scrittura, esecuzione</entry> + + <entry><literal>-wx</literal></entry> + </row> + + <row> + <entry>4</entry> + + <entry>Lettura, scrittura no, esecuzione no</entry> + + <entry><literal>r--</literal></entry> + </row> + + <row> + <entry>5</entry> + + <entry>Lettura, scrittura no, esecuzione</entry> + + <entry><literal>r-x</literal></entry> + </row> + + <row> + <entry>6</entry> + + <entry>Lettura, scrittura, esecuzione no</entry> + + <entry><literal>rw-</literal></entry> + </row> + + <row> + <entry>7</entry> + + <entry>Lettura, scrittura, esecuzione</entry> + + <entry><literal>rwx</literal></entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <indexterm><primary><command>ls</command></primary></indexterm> + <indexterm><primary>directory</primary></indexterm> + + <para>Puoi usare l'opzione <option>-l</option> del comando &man.ls.1; per + visualizzare un lungo listato della directory che include una colonna + contenente le informazioni sui permessi del file per il proprietario, per + il gruppo, e per gli altri. Per esempio, digitando <command>ls + -l</command> in una arbitraria directory:</para> + + <screen>&prompt.user; <userinput>ls -l</userinput> +total 530 +-rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile +-rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile +-rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt +...</screen> + + <para>Ecco come è suddivisa la prima colonna dell'output del comando + <command>ls -l</command>:</para> + + <screen>-rw-r--r--</screen> + + <para>Il primo carattere (partendo da sinistra) indica se il file in + questione è un file regolare, una directory, un file speciale per + dispositivi a caratteri, una socket, o un file speciale per altri + dispositivi. Nel nostro caso, il <literal>-</literal> indica un + file regolare. I tre caratteri successivi, che in questo esempio sono + <literal>rw-</literal>, indicano i permessi per il proprietario del file. + Seguono altri tre caratteri, <literal>r--</literal>, che indicano i + permessi del gruppo al quale il file appartiene. Gli ultimi tre + caratteri, <literal>r--</literal>, indicano i permessi per il resto del + mondo. Un trattino significa che il permesso non viene concesso. + Nel caso di questo file, i permessi sono settati affinchè il + proprietario possa leggere e scrivere il file, il gruppo possa leggere + il file, e il resto del mondo possa solamente leggere il file. In accordo + con la precedente tabella, i permessi per questo file sono + <literal>644</literal>, dove ogni cifra rappresenta una delle tre parti + che costituiscono i permessi del file.</para> + + <para>D'accordo, ma in che modo il sistema controlla i permessi sui dispositivi? + FreeBSD tratta molti dispositivi hardware esattamente come un file che i + programmi possono aprire, leggere, e scrivere dei dati proprio come + avviene con gli altri file. Questi file speciali per i dispositivi sono + memorizzati nella directory <filename>/dev</filename>.</para> + + <para>Anche le directory sono trattate come file. Queste hanno permessi di + lettura, scrittura e di esecuzione. Il bit riferito al permesso di + esecuzione per una directory ha un significato leggermente differente + rispetto a quello dei file. Quando una directory ha il permesso di + esecuzione abilitato, significa che si ha accesso alla directory, ossia + è possibile eseguire il comando <quote>cd</quote> (cambio di + directory) per entrarci. Inoltre questo significa che all'interno della + directory è possibile accedere ai file dei quali si conosce il nome + (naturalmente a condizione dei permessi degli stessi file).</para> + + <para>In particolare, per visualizzare il contenuto di una directory, deve + essere abilitato il permesso di lettura sulla stessa, mentre per + eliminare un file di cui si conosce il nome, è necessario che la + directory contenente il file abbia i permessi di scrittura + <emphasis>e</emphasis> di esecuzione abilitati.</para> + + <para>Ci sono altri bit per permessi particolari, ma sono in genere usati + in circostanze speciali come il permesso di setuid per i binari e + quello di sticky per le directory. Se vuoi avere più informazioni + sui permessi dei file e su come settarli, guarda la pagina man di + &man.chmod.1;.</para> + + <sect2> + <sect2info> + <authorgroup> + <author> + <firstname>Tom</firstname> + + <surname>Rhodes</surname> + + <contrib>Contributo di </contrib> + </author> + </authorgroup> + </sect2info> + + <title>Permessi Simbolici</title> + + <indexterm> + <primary>permessi</primary><secondary>simbolici</secondary> + </indexterm> + + <para>I permessi simbolici, qualche volta chiamati espressioni simboliche, + usano caratteri al posto dei numeri ottali per assegnare i permessi a + file o directory. Le espressioni simboliche usano la sintassi (chi) + (azione) (permessi), con i seguenti valori:</para> + + <informaltable frame="none" pgwide="1"> + <tgroup cols="3"> + <thead> + <row> + <entry>Opzione</entry> + + <entry>Lettera</entry> + + <entry>Cosa rappresenta/Cosa fa</entry> + </row> + </thead> + + <tbody> + <row> + <entry>(chi)</entry> + + <entry>u</entry> + + <entry>Utente</entry> + </row> + + <row> + <entry>(chi)</entry> + + <entry>g</entry> + + <entry>Gruppo di appartenenza</entry> + </row> + + <row> + <entry>(chi)</entry> + + <entry>o</entry> + + <entry>Altri</entry> + </row> + + <row> + <entry>(chi)</entry> + + <entry>a</entry> + + <entry>Tutti (tutto il <quote>mondo</quote>)</entry> + </row> + + <row> + <entry>(azione)</entry> + + <entry>+</entry> + + <entry>Aggiunge i permessi</entry> + </row> + + <row> + <entry>(azione)</entry> + + <entry>-</entry> + + <entry>Rimuove i permessi</entry> + </row> + + <row> + <entry>(azione)</entry> + + <entry>=</entry> + + <entry>Setta esplicitamente i permessi</entry> + </row> + + <row> + <entry>(permessi)</entry> + + <entry>r</entry> + + <entry>Lettura</entry> + </row> + + <row> + <entry>(permessi)</entry> + + <entry>w</entry> + + <entry>Scrittura</entry> + </row> + + <row> + <entry>(permessi)</entry> + + <entry>x</entry> + + <entry>Esecuzione</entry> + </row> + + <row> + <entry>(permessi)</entry> + + <entry>t</entry> + + <entry>Bit sticky</entry> + </row> + + <row> + <entry>(permessi)</entry> + + <entry>s</entry> + + <entry>Setta UID o GID</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>Questi valori sono usati con il comando &man.chmod.1; + come esposto in precedenza, ma con le lettere. Per esempio, puoi usare + il seguente comando per impedire agli altri utenti l'accesso a + <replaceable>FILE</replaceable>:</para> + + <screen>&prompt.user; <userinput>chmod go= FILE</userinput></screen> + + <para>Se si ha la necessità di realizzare più di una + modifica ai settaggi di un file si può usare una lista di + settaggi separati da virgola. Per esempio il seguente comando + rimuoverà il permesso di scrittura su + <replaceable>FILE</replaceable> al gruppo di appartenenza del file e al + resto del <quote>mondo</quote>, e inoltre aggiungerà + il permesso di esecuzione per tutti:</para> + + <screen>&prompt.user; <userinput>chmod go-w,a+x <replaceable>FILE</replaceable></userinput></screen> + </sect2> + + <sect2> + <sect2info> + <authorgroup> + <author> + <firstname>Tom</firstname> + + <surname>Rhodes</surname> + + <contrib>Contributo di </contrib> + </author> + </authorgroup> + </sect2info> + + <title>Flag dei File in &os;</title> + + <para>Oltre ai permessi dei file discussi in precedenza, &os; + supporta l'uso dei <quote>flag dei file</quote>. Queste flag + aggiungono un ulteriore livello di sicurezza e di controllo sui + file, ma non per le directory.</para> + + <para>Queste flag dei file aggiungono un ulteriore livello di + controllo sui file, assicurando in alcuni casi che persino + <username>root</username> non possa rimuovere o alterare file.</para> + + <para>Le flag dei file sono alterate usando l'utility &man.chflags.1;, + tramite una semplice sintassi. Per esempio, per abilitare la flag + di sistema di non-cancellabilità sul file + <filename>file1</filename>, si può usare il comando + seguente:</para> + + <screen>&prompt.root; <userinput>chflags sunlink <filename>file1</filename></userinput></screen> + + <para>E per disabilitare la stessa flag, si può usare + semplicemente il comando precedente con <quote>no</quote> davanti a + <option>sunlink</option>. Ecco come:</para> + + <screen>&prompt.root; <userinput>chflags nosunlink <filename>file1</filename></userinput></screen> + + <para>Per vedere le flag del file di esempio, usa il comando + &man.ls.1; con le flag <option>-lo</option>:</para> + + <screen>&prompt.root; <userinput>ls -lo <filename>file1</filename></userinput></screen> + + <para>L'output dovrebbe assomigliare al seguente:</para> + + <programlisting>-rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1</programlisting> + + <para>Diverse flag possono essere aggiunte o rimosse sui file solo + tramite l'utente <username>root</username>. Negli altri casi, il + proprietario dei file può settare queste flag. Si raccomanda + di leggere le pagine man &man.chflags.1; e &man.chflags.2; per + maggiori informazioni.</para> + </sect2> + </sect1> + + <sect1 id="dirstructure"> + <title>Struttura delle Directory</title> + + <indexterm><primary>gerarchia delle directory</primary></indexterm> + + <para>La gerarchia delle directory di FreeBSD è fondamentale per + ottenere una comprensione globale del sistema. Il concetto più + importante da cogliere al volo è quello relativo alla directory + root, <quote>/</quote>. Questa directory è la prima ad essere + montata all'avvio e contiene gli elementi fondamentali del sistema + necessari per predisporre il sistema operativo al funzionamento + multi-utente. Inoltre la directory root contiene i punti di mount per + gli altri file system che sono montati durante la transizione per + il funzionamento multi-utente.</para> + + <para>Un punto di mount è una directory dove dei file system + aggiuntivi possono essere innestati sul file system padre + (in genere il file system root). + Questo è ulteriormente descritto nella <xref + linkend="disk-organization"/>. Alcuni punti di + mount standard sono <filename>/usr</filename>, <filename>/var</filename>, + <filename>/tmp</filename>, <filename>/mnt</filename>, e + <filename>/cdrom</filename>. Queste + directory compaiono in genere negli elementi del file + <filename>/etc/fstab</filename>. Il file <filename>/etc/fstab</filename> + è una tabella di file system e punti di mount che viene consultata + dal sistema. Molti dei file system riferiti nel file + <filename>/etc/fstab</filename> sono montati in modo automatico all'avvio + tramite lo script &man.rc.8; a meno che essi sia stati dichiarati con + l'opzione <option>noauto</option>. Maggiori dettagli possono essere + trovati nella <xref linkend="disks-fstab"/>.</para> + + <para>Una descrizione completa della gerarchia del file system è + disponibile nella pagina man &man.hier.7;. Per ora, è + sufficiente una breve panoramica generale delle directory più + comuni.</para> + + <para> + <informaltable frame="none" pgwide="1"> + <tgroup cols="2"> + <thead> + <row> + <entry>Directory</entry> + + <entry>Descrizione</entry> + </row> + </thead> + + <tbody valign="top"> + <row> + <entry><filename class="directory">/</filename></entry> + + <entry>Directory root del file system.</entry> + </row> + + <row> + <entry><filename class="directory">/bin/</filename></entry> + + <entry>Utilità fondamentali per l'utente sia in ambiente + mono-utente sia in ambiente multi-utente.</entry> + </row> + + <row> + <entry><filename class="directory">/boot/</filename></entry> + + <entry>Programmi e file di configurazione utilizzati durante la + fase di avvio del sistema operativo.</entry> + </row> + + <row> + <entry><filename + class="directory">/boot/defaults/</filename></entry> + + <entry>File di configurazione di avvio di default; consultare + &man.loader.conf.5;.</entry> + </row> + + <row> + <entry><filename class="directory">/dev/</filename></entry> + + <entry>Nodi di dispositivo; consultare &man.intro.4;.</entry> + </row> + + <row> + <entry><filename class="directory">/etc/</filename></entry> + + <entry>Script e file di configurazione del sistema.</entry> + </row> + + <row> + <entry><filename + class="directory">/etc/defaults/</filename></entry> + + <entry>File di configurazione di default del sistema; consultare + &man.rc.8;.</entry> + </row> + + <row> + <entry><filename class="directory">/etc/mail/</filename></entry> + + <entry>File di configurazione per gli MTA (Mail Transfer Agent, + agente di trasferimento della posta elettronica) come + &man.sendmail.8;.</entry> + </row> + + <row> + <entry><filename class="directory">/etc/namedb/</filename></entry> + + <entry>File di configurazione di <command>named</command>; + consultare &man.named.8;.</entry> + </row> + + <row> + <entry><filename + class="directory">/etc/periodic/</filename></entry> + + <entry>Script che sono eseguiti giornalmente, settimanalmente, e + mensilmente tramite &man.cron.8;; consultare + &man.periodic.8;.</entry> + </row> + + <row> + <entry><filename class="directory">/etc/ppp/</filename></entry> + + <entry>File di configurazione di <command>ppp</command>; + consultare &man.ppp.8;.</entry> + </row> + + <row> + <entry><filename class="directory">/mnt/</filename></entry> + + <entry>Directory vuota usata comunemente dagli amministratori di + sistema come punto di mount temporaneo.</entry> + </row> + + <row> + <entry><filename class="directory">/proc/</filename></entry> + + <entry>File system dedicato ai processi; consultare + &man.procfs.5;, &man.mount.procfs.8;.</entry> + </row> + + <row> + <entry><filename class="directory">/rescue/</filename></entry> + + <entry>Programmi linkati staticamente per situazioni di emergenza; + consultare &man.rescue.8;.</entry> + </row> + + <row> + <entry><filename class="directory">/root/</filename></entry> + + <entry>Directory home per l'account + <username>root</username>.</entry> + </row> + + <row> + <entry><filename class="directory">/sbin/</filename></entry> + + <entry>Programmi di sistema e utilità di amministrazione + fondamentali sia in ambiente mono-utente sia in ambiente + multi-utente.</entry> + </row> + + <row> + <entry><filename class="directory">/tmp/</filename></entry> + + <entry>File temporanei. Il contenuto di + <filename class="directory">/tmp</filename> di solito NON + è preservato dopo un riavvio del sistema. Spesso + un file system basato sulla memoria viene montato in + <filename class="directory">/tmp</filename>. + Questo può essere automatizzato usando le variabili + relative a tmpmfs di &man.rc.conf.5; (o con un entry in + <filename>/etc/fstab</filename>; consultare + &man.mdmfs.8;).</entry> + </row> + + <row> + <entry><filename class="directory">/usr/</filename></entry> + + <entry>La maggior parte delle applicazioni e delle utilità + dell'utente.</entry> + </row> + + <row> + <entry><filename class="directory">/usr/bin/</filename></entry> + + <entry>Utilità, strumenti di programmazione, e + applicazioni comuni.</entry> + </row> + + <row> + <entry><filename + class="directory">/usr/include/</filename></entry> + + <entry>File include standard del C.</entry> + </row> + + <row> + <entry><filename class="directory">/usr/lib/</filename></entry> + + <entry>Archivio di librerie.</entry> + </row> + + <row> + <entry><filename + class="directory">/usr/libdata/</filename></entry> + + <entry>Archivio di dati per utilità varie.</entry> + </row> + + <row> + <entry><filename + class="directory">/usr/libexec/</filename></entry> + + <entry>Demoni di sistema & utilità di + sistema (eseguiti da altri programmi).</entry> + </row> + + <row> + <entry><filename class="directory">/usr/local/</filename></entry> + + <entry>Eseguibili locali, librerie locali, ecc. Usata anche + come destinazione di default per la struttura dei port di + FreeBSD. All'interno di <filename>/usr/local</filename>, viene + usato lo stesso schema generale descritto in &man.hier.7; per la + directory <filename>/usr</filename>. Le eccezioni sono la + directory man, che è posta direttamente sotto + <filename>/usr/local</filename> piuttosto che sotto + <filename>/usr/local/share</filename>, e la documentazione dei + port che è in + <filename>share/doc/<replaceable>port</replaceable></filename>. + </entry> + </row> + + <row> + <entry><filename class="directory">/usr/obj/</filename></entry> + + <entry>Albero degli elementi dipendenti dal tipo di architettura + dell'elaboratore prodotto dalla costruzione dell'albero + <filename>/usr/src</filename>.</entry> + </row> + + <row> + <entry><filename class="directory">/usr/ports</filename></entry> + + <entry>Collezione dei port di FreeBSD (opzionale).</entry> + </row> + + <row> + <entry><filename class="directory">/usr/sbin/</filename></entry> + + <entry>Demoni di sistema & utilità di + sistema (eseguiti dagli utenti).</entry> + </row> + + <row> + <entry><filename class="directory">/usr/share/</filename></entry> + + <entry>File indipendenti dal tipo di architettura + dell'elaboratore.</entry> + </row> + + <row> + <entry><filename class="directory">/usr/src/</filename></entry> + + <entry>File sorgenti di BSD e/o sorgenti proprietari.</entry> + </row> + + <row> + <entry><filename class="directory">/usr/X11R6/</filename></entry> + + <entry>Eseguibili, librerie, ecc. riguardanti la distribuzione + X11R6 (opzionale).</entry> + </row> + + <row> + <entry><filename class="directory">/var/</filename></entry> + + <entry>File log di vario genere, file temporanei, file transitori, + e file di spool. Qualche volta un file system basato sulla + memoria è montato in + <filename class="directory">/var</filename>. + Questo può essere automatizzato usando le variabili + relative a varmfs di &man.rc.conf.5 (o con un entry in + <filename>/etc/fstab</filename>; consultare + &man.mdmfs.8;).</entry> + </row> + + <row> + <entry><filename class="directory">/var/log/</filename></entry> + + <entry>File di log del sistema di vario genere.</entry> + </row> + + <row> + <entry><filename class="directory">/var/mail/</filename></entry> + + <entry>File delle caselle di posta degli utenti.</entry> + </row> + + <row> + <entry><filename class="directory">/var/spool/</filename></entry> + + <entry>Directory di spool per stampanti e per la posta elettronica + del sistema.</entry> + </row> + + <row> + <entry><filename class="directory">/var/tmp/</filename></entry> + + <entry>File temporanei. + I file sono di solito preservati dopo un riavvio del sistema, + a meno che <filename class="directory">/var</filename> + sia un file system basato sulla memoria.</entry> + </row> + + <row> + <entry><filename>/var/yp</filename></entry> + + <entry>Mappe NIS.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + </para> + </sect1> + + <sect1 id="disk-organization"> + <title>Organizzazione del Disco</title> + + <para>La più piccola unità di organizzazione che FreeBSD usa + per ricercare file è il nome del file. I nomi dei file sono + case-sensitive, ciò significa che <filename>readme.txt</filename> + e <filename>README.TXT</filename> sono due file distinti. FreeBSD non usa + l'estensione (es. <filename>.txt</filename>) di un file per determinare + se il file è un programma, un documento, o qualche altra forma di + dati.</para> + + <para>I file sono memorizzati in directory. Una directory può + contenere centinaia di file o non contenerne affatto. Inoltre una + directory può contenere altre directory, consentendo di costruire + una gerarchia di directory all'interno di un'altra. Tutto questo rende + più facile l'organizzazione dei tuoi dati.</para> + + <para>Ci si riferisce a file e directory attraverso il nome del file o della + directory, seguito da uno slash in avanti, <literal>/</literal>, + a sua volta seguito da altri nomi di directory necessari. Se + hai una directory di nome <filename>foo</filename>, la quale contiene la + directory <filename>bar</filename>, che a sua volta contiene il file + <filename>readme.txt</filename>, allora il nome completo, chiamato anche + il <firstterm>percorso</firstterm> del file è + <filename>foo/bar/readme.txt</filename>.</para> + + <para>Le directory e i file sono memorizzati in un file system. Ogni + file system contiene esattamente una directory al livello più alto, + chiamata la <firstterm>directory root</firstterm> di quel file system. + Questa directory root può contenere altre directory.</para> + + <para>Fin qui è probabilmente tutto simile ad altri sistemi + operativi che hai usato. Tuttavia ci sono alcune differenze; per + esempio, &ms-dos; usa il carattere <literal>\</literal> per separare i + nomi di file e directory, mentre &macos; usa <literal>:</literal>.</para> + + <para>FreeBSD non usa lettere di dispositivi, o altri nomi di dispositivi + nel path. In FreeBSD non dovrai mai scrivere + <filename>c:/foo/bar/readme.txt</filename>.</para> + + <para>Piuttosto, un file system è designato come il + <firstterm>file system root</firstterm>. La directory root del + file system root è riferita con <literal>/</literal>. Ogni altro + file system è <firstterm>montato</firstterm> sotto il file system + root. Non importa quanti dischi hai sul tuo sistema FreeBSD, ogni + directory è come se fosse parte dello stesso disco.</para> + + <para>Supponiamo che tu abbia tre file system, chiamati + <literal>A</literal>, <literal>B</literal>, e <literal>C</literal>. + Ogni file system ha una directory root, la quale contiene altre due + directory, chiamate <literal>A1</literal>, <literal>A2</literal> (e + nello stesso modo <literal>B1</literal>, <literal>B2</literal> e + <literal>C1</literal>, <literal>C2</literal>).</para> + + <para>Sia <literal>A</literal> il file system root. Se usi il comando + <command>ls</command> per visualizzare il contenuto di questa directory + dovresti vedere due sottodirectory, <literal>A1</literal> e + <literal>A2</literal>. L'albero delle directory assomiglia a + questo:</para> + + <mediaobject> + <imageobject> + <imagedata fileref="install/example-dir1" format="EPS"/> + </imageobject> + + <textobject> + <literallayout class="monospaced"> / + | + +--- A1 + | + `--- A2</literallayout> + </textobject> + </mediaobject> + + <para>Un file system deve essere montato su una directory di un altro + file system. Supponiamo ora che tu monti il file system + <literal>B</literal> sulla directory <literal>A1</literal>. La directory + root di <literal>B</literal> rimpiazza <literal>A1</literal>, e di + conseguenza appariranno le directory di <literal>B</literal>:</para> + + <mediaobject> + <imageobject> + <imagedata fileref="install/example-dir2" format="EPS"/> + </imageobject> + + <textobject> + <literallayout class="monospaced"> / + | + +--- A1 + | | + | +--- B1 + | | + | `--- B2 + | + `--- A2</literallayout> + </textobject> + </mediaobject> + + <para>I file contenuti nelle directory <literal>B1</literal> o + <literal>B2</literal> possono essere raggiunti con il path + <filename>/A1/B1</filename> o <filename>/A1/B2</filename>. I file che + erano in <filename>/A1</filename> sono stati temporaneamente nascosti. + Questi riappariranno quando <literal>B</literal> sarà + <firstterm>smontato</firstterm> da A.</para> + + <para>Se <literal>B</literal> è stato montato su + <literal>A2</literal> allora il diagramma assomiglierà a + questo:</para> + + <mediaobject> + <imageobject> + <imagedata fileref="install/example-dir3" format="EPS"/> + </imageobject> + + <textobject> + <literallayout class="monospaced"> / + | + +--- A1 + | + `--- A2 + | + +--- B1 + | + `--- B2</literallayout> + </textobject> + </mediaobject> + + <para>e i percorsi saranno rispettivamente <filename>/A2/B1</filename> e + <filename>/A2/B2</filename>.</para> + + <para>I file system possono essere montati in cima ad altri file system. + Continuando con l'ultimo esempio, il file system <literal>C</literal> + può essere montato in cima alla directory <literal>B1</literal> + nel file system <literal>B</literal>, arrivando a questa + sistemazione:</para> + + <mediaobject> + <imageobject> + <imagedata fileref="install/example-dir4" format="EPS"/> + </imageobject> + + <textobject> + <literallayout class="monospaced"> / + | + +--- A1 + | + `--- A2 + | + +--- B1 + | | + | +--- C1 + | | + | `--- C2 + | + `--- B2</literallayout> + </textobject> + </mediaobject> + + <para>Oppure <literal>C</literal> potrebbe essere montato direttamente sul + file system <literal>A</literal>, sotto la directory + <literal>A1</literal>:</para> + + <mediaobject> + <imageobject> + <imagedata fileref="install/example-dir5" format="EPS"/> + </imageobject> + + <textobject> + <literallayout class="monospaced"> / + | + +--- A1 + | | + | +--- C1 + | | + | `--- C2 + | + `--- A2 + | + +--- B1 + | + `--- B2</literallayout> + </textobject> + </mediaobject> + + <para>Se hai familiarità con &ms-dos;, questo è simile, ma + non identico, al comando <command>join</command>.</para> + + <para>Di solito non ti devi occupare direttamente di questi aspetti. + Tipicamente quando installi FreeBSD crei i file system e decidi dove + montarli, e da quel momento non avrai più la necessità di + modificarli a meno che installi un nuovo disco.</para> + + <para>È possibile avere un unico file system root, senza avere la + necessità di crearne altri. Esistono alcuni svantaggi + utilizzando questo approccio, e un solo vantaggio.</para> + + <itemizedlist> + <title>Benefici con File system Multipli</title> + + <listitem> + <para>Filesystem diversi possono avere <firstterm>opzioni di + mount</firstterm> diverse. Per esempio, in un'attenta progettazione, + il file system root potrebbe essere montato in modalità di sola + lettura, rendendo impossibile la cancellazione accidentale o la modifica + di un file critico. Inoltre, separando i file system scrivibili + dall'utente, come <filename>/home</filename>, da altri file system + permette di montare i primi con l'opzione <firstterm>nosuid</firstterm>; + questa opzione non permette il settaggio dei bit + <firstterm>suid</firstterm>/<firstterm>guid</firstterm> sui file + eseguibili memorizzati sul file system che ha tale opzione di mount + attivata, migliorando l'aspetto sicurezza.</para> + </listitem> + + <listitem> + <para>FreeBSD ottimizza in modo automatico la disposizione dei file sul + file system, a seconda di come è usato il file system. Quindi + un file system che contiene molti file piccoli che sono scritti di + frequente avrà un'ottimizzazione diversa rispetto ad un altro + file system che contiene pochi file di grandi dimensioni. Utilizzando + un solo grande file system questa ottimizzazione viene a + mancare.</para> + </listitem> + + <listitem> + <para>I file system di FreeBSD reagiscono bene ad una violenta perdita di + energia elettrica. Tuttavia, una perdita di energia in un punto + critico potrebbe sempre danneggiare la struttura del file system. + Splittando i tuoi dati su file system multipli sarà più + probabile che il sistema riparta, dandoti la possibilità di + ripristinare un precedente backup se necessario.</para> + </listitem> + </itemizedlist> + + <itemizedlist> + <title>Benefici di un File system Singolo</title> + + <listitem> + <para>I file system sono a dimensione fissa. Se crei un solo file system + quando installi FreeBSD e gli assegni una data dimensione, in futuro + potresti scoprire che necessiti di creare una partizione più + grande. Questo non è facilmente realizzabile se non + effettuando un backup dei dati, ricreando il file system con la nuova + dimensione, e quindi ripristinando il backup di dati.</para> + + <important> + <para>FreeBSD ha il comando &man.growfs.8;, + con il quale è possibile incrementare la dimensione del + file system al volo, rimuovendo questa limitazione.</para> + </important> + </listitem> + </itemizedlist> + + <para>I file system sono contenuti all'interno di partizioni. Qui il + significato del termine partizione si discosta dall'uso comune di questo + termine (partizioni &ms-dos;, per esempio), a causa dell'eredità + &unix; di &os;. Ogni partizione è identificata da una lettera + partendo dalla <literal>a</literal> fino alla <literal>h</literal>. Ogni + partizione può contenere solo un file system, il che significa che i + file system sono spesso identificati sia dal loro punto di mount nella + gerarchia del file system, sia dalla lettera della partizione nella quale + sono contenuti.</para> + + <para>Inoltre FreeBSD usa parte del disco per lo <firstterm>spazio di + swap</firstterm>. Lo spazio di swap fornisce a FreeBSD la + funzionalità di <firstterm>memoria virtuale</firstterm>. Questo + permette al tuo computer di comportarsi come se avesse più memoria + di quella che ha realmente. Quando FreeBSD esaurisce la memoria muove + alcuni dati presenti in memoria che non sono utilizzati in quel momento + nello spazio di swap, e li riporta in memoria (spostando nello spazio di + swap qualche altro dato) non appena necessari.</para> + + <para>Alcune partizioni hanno certe convenzioni a loro associate.</para> + + <informaltable frame="none" pgwide="1"> + <tgroup cols="2"> + <colspec colwidth="1*"/> + + <colspec colwidth="5*"/> + + <thead> + <row> + <entry>Partizione</entry> + + <entry>Convenzione</entry> + </row> + </thead> + + <tbody valign="top"> + <row> + <entry><literal>a</literal></entry> + + <entry>In genere contiene il file system root</entry> + </row> + + <row> + <entry><literal>b</literal></entry> + + <entry>In genere contiene lo spazio di swap</entry> + </row> + + <row> + <entry><literal>c</literal></entry> + + <entry>Di solito rappresenta l'intera dimensione della slice. + Questo permette a utility che necessitano di lavorare sull'intera + slice (per esempio, uno scanner di blocchi difettosi) di lavorare + sulla partizione <literal>c</literal>. Di norma non dovresti + creare un file system su questa partizione.</entry> + </row> + + <row> + <entry><literal>d</literal></entry> + + <entry>La partizione <literal>d</literal> era utilizzata in passato + con un significato speciale, caduto ormai in disuso e ora + può essere utilizzata come una partizione normale.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>Ogni partizione contenente un file system è memorizzata in + ciò che FreeBSD chiama <firstterm>slice</firstterm>. Slice + è un termine di FreeBSD per identificare ciò che comunemente + viene chiamato partizione, e di nuovo, questo è dovuto dal + background &unix; di FreeBSD. Le slice sono numerate, partendo da 1 e + arrivando fino a 4.</para> + + <indexterm><primary>slice</primary></indexterm> + + <indexterm><primary>partizioni</primary></indexterm> + + <indexterm><primary>pericolosamente dedicate</primary></indexterm> + + <para>I numeri di slice seguono il nome del dispositivo, preceduti da una + <literal>s</literal>, e partendo da 1. Quindi + <quote>da0<emphasis>s1</emphasis></quote> è la prima slice sul + primo disco SCSI. Ci possono essere solo quattro slice fisiche su un + disco, ma puoi avere slice logiche all'interno di slice fisiche di un + appropriato tipo. Queste slice estese sono numerate a partire da 5, + quindi <quote>ad0<emphasis>s5</emphasis></quote> è la prima + slice estesa sul primo disco IDE. Questi stratagemmi sono usati per i + file system che si aspettano di occupare una slice.</para> + + <para>Le slice, i dispositivi fisici <quote>pericolosamente + dedicati</quote>, e altri dispositivi contengono + <firstterm>partizioni</firstterm>, le quali sono rappresentate tramite + lettere dalla <literal>a</literal> fino alla <literal>h</literal>. Queste + lettere seguono il nome del dispositivo, quindi + <quote>da0<emphasis>a</emphasis></quote> è la partizione a + sul primo dispositivo da, il quale è <quote>pericolosamente + dedicato</quote>. <quote>ad1s3<emphasis>e</emphasis></quote> è + la quinta partizione nel terza slice del secondo disco IDE.</para> + + <para>In fine, ogni disco sul sistema è identificato. Un nome di un + disco incomincia con un codice che indica il tipo di disco, seguito da un + numero, che indica quale disco esso sia. A differenza delle slice, + i numeri riferiti al disco incominciano da 0. Puoi vedere dei codici + generici in <xref linkend="basics-dev-codes"/>.</para> + + <para>Quando fai riferimento a una partizione di FreeBSD devi specificare + anche il nome della slice e del disco che contengono la partizione, e + quando fai riferimento a una slice dovresti specificare anche il nome del + disco. Per riferirti ad una partizione specifica quindi il nome del disco, + il carattere <literal>s</literal>, il numero di slice, e infine la lettera + della partizione. Alcuni esempi sono mostrati nell'<xref + linkend="basics-disk-slice-part"/>.</para> + + <para>L'<xref linkend="basics-concept-disk-model"/> mostra un modello + concettuale di struttura di un disco che dovrebbe aiutare a chiarire le + cose.</para> + + <para>Per installare FreeBSD devi prima configurare le slice del disco, + creare le partizioni all'interno della slice che vuoi usare per FreeBSD, + e quindi creare un file system (o spazio di swap) in ogni partizione, e + decidere dove il file system deve essere montato.</para> + + <table frame="none" pgwide="1" id="basics-dev-codes"> + <title>Codici dei Dispositivi Disco</title> + + <tgroup cols="2"> + <colspec colwidth="1*"/> + + <colspec colwidth="5*"/> + + <thead> + <row> + <entry>Codice</entry> + + <entry>Significato</entry> + </row> + </thead> + + <tbody> + <row> + <entry><devicename>ad</devicename></entry> + + <entry>disco ATAPI (IDE)</entry> + </row> + + <row> + <entry><devicename>da</devicename></entry> + + <entry>disco ad accesso diretto SCSI</entry> + </row> + + <row> + <entry><devicename>acd</devicename></entry> + + <entry>CDROM ATAPI (IDE)</entry> + </row> + + <row> + <entry><devicename>cd</devicename></entry> + + <entry>CDROM SCSI</entry> + </row> + + <row> + <entry><devicename>fd</devicename></entry> + + <entry>Disco floppy</entry> + </row> + </tbody> + </tgroup> + </table> + + <example id="basics-disk-slice-part"> + <title>Esempi di Nomi di Dischi, di Slice, e di Partizioni</title> + + <informaltable frame="none" pgwide="1"> + <tgroup cols="2"> + <colspec colwidth="1*"/> + + <colspec colwidth="5*"/> + + <thead> + <row> + <entry>Nome</entry> + + <entry>Significato</entry> + </row> + </thead> + + <tbody> + <row> + <entry><literal>ad0s1a</literal></entry> + + <entry>La prima partizione (<literal>a</literal>) sulla prima + slice (<literal>s1</literal>) sul primo disco IDE + (<literal>ad0</literal>).</entry> + </row> + + <row> + <entry><literal>da1s2e</literal></entry> + + <entry>La quinta partizione (<literal>e</literal>) sulla seconda + slice (<literal>s2</literal>) sul secondo disco SCSI + (<literal>da1</literal>).</entry> + </row> + </tbody> + </tgroup> + </informaltable> + </example> + + <example id="basics-concept-disk-model"> + <title>Modello Concettuale di un Disco</title> + + <para>Questo diagramma mostra come FreeBSD vede il primo disco IDE + attaccato al sistema. Si assuma che il disco sia di 4 GB, e che + contenga due slice da 2 GB (equivalenti come significato a due + partizioni &ms-dos;). La prima slice contiene un disco &ms-dos;, + <devicename>C:</devicename>, e la seconda slice contiene + un'installazione di FreeBSD. In questo esempio l'installazione di + FreeBSD ha tre partizioni dati più una di swap.</para> + + <para>Le tre partizioni conterranno ognuna un file system. La partizione + <literal>a</literal> sarà usata per il file system root, + la <literal>e</literal> per la gerarchia di directory + <filename>/var</filename>, e la partizione <literal>f</literal> per + la gerarchia di directory <filename>/usr</filename>.</para> + + <mediaobject> + <imageobject> + <imagedata fileref="install/disk-layout" format="EPS"/> + </imageobject> + + <textobject> + <literallayout class="monospaced">.-----------------. --. +| | | +| DOS / Windows | | +: : > Prima slice, ad0s1 +: : | +| | | +:=================: ==: --. +| | | Partizione a, montata come / | +| | > riferita come ad0s2a | +| | | | +:-----------------: ==: | +| | | Partizione b, usata come swap | +| | > riferita come ad0s2b | +| | | | +:-----------------: ==: | Partizione c, senza +| | | Partizione e, usata come /var > file system, tutta +| | > riferita come ad0s2e | la slice di FreeBSD, +| | | | ad0s2c +:-----------------: ==: | +| | | | +: : | Partizione f, usata come /usr | +: : > riferita come ad0s2f | +: : | | +| | | | +| | --' | +`-----------------' --'</literallayout> + </textobject> + </mediaobject> + </example> + </sect1> + + <sect1 id="mount-unmount"> + <title>Montaggio e Smontaggio dei File system</title> + + <para>Il file system è raffigurato in maniera ottimale da un albero, + radicato, per così dire, in <filename>/</filename>. Le directory + <filename>/dev</filename>, <filename>/usr</filename>, e le altre + directory che stanno all'interno della directory root sono i rami, i quali + possono essere a loro volta ramificati, come in + <filename>/usr/local</filename>, e così via.</para> + + <indexterm><primary>file system root</primary></indexterm> + + <para>Esistono varie ragioni per mantenere alcune di queste directory su + file system separati. La directory <filename>/var</filename> contiene + le directory <filename>log/</filename>, <filename>spool/</filename>, + e vari tipi di file temporanei, e come tale, può riempirsi. + Riempire il file system root non è una buona idea, quindi scindere + la directory <filename>/var</filename> da <filename>/</filename> è + spesso vantaggioso.</para> + + <para>Un'altra motivazione per mantenere certi alberi di directory su altri + file system è quando questi alberi sono alloggiati su dischi fisici + separati, o sono dischi virtuali separati, come avviene per i mount del + <link linkend="network-nfs">Network File System</link>, o dei dispositivi + CDROM.</para> + + <sect2 id="disks-fstab"> + <title>Il File <filename>fstab</filename></title> + + <indexterm> + <primary>file system</primary> + <secondary>montati con fstab</secondary> + </indexterm> + + <para>Durante la <link linkend="boot">fase di avvio</link>, i file system + elencati nel file <filename>/etc/fstab</filename> sono montati + in modo automatico (a meno che siano specificati con l'opzione + <option>noauto</option>).</para> + + <para>Il file <filename>/etc/fstab</filename> contiene una serie di righe + il cui formato è il seguente:</para> + + <programlisting><replaceable>device</replaceable> <replaceable>/mount-point</replaceable> <replaceable>fstype</replaceable> <replaceable>options</replaceable> <replaceable>dumpfreq</replaceable> <replaceable>passno</replaceable></programlisting> + + <variablelist> + <varlistentry> + <term><literal>device</literal></term> + + <listitem> + <para>Il nome del dispositivo (che deve esistere), come spiegato + nella <xref linkend="disks-naming"/>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>mount-point</literal></term> + + <listitem> + <para>La directory (che deve esistere), sulla quale montare il file + system.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>fstype</literal></term> + + <listitem> + <para>Il tipo di file system da passare a &man.mount.8;. Il file + system di default di FreeBSD è + <literal>ufs</literal>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>options</literal></term> + + <listitem> + <para><option>rw</option> per file system leggibili-scrivibili, + oppure <option>ro</option> per file system solamente leggibili, + seguite da altre opzioni che potrebbero essere necessarie. + Un'opzione comune è <option>noauto</option> per i file + system che normalmente non sono montati durante la sequenza di + avvio. Altre opzioni sono elencate nella pagina man di + &man.mount.8;.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>dumpfreq</literal></term> + + <listitem> + <para>Viene usato da &man.dump.8; per determinare quali file system + richiedono un dump. Se non si specifica nulla, viene assunto il + valore zero.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>passno</literal></term> + + <listitem> + <para>Determina l'ordine secondo il quale i file system vengono + controllati. I file system che devono saltare il controllo devono + avere i loro <literal>passno</literal> settati a zero. Il file + system root (che deve essere controllato prima di qualsiasi altra + cosa) deve avere il suo <literal>passno</literal> settato a uno, + e i <literal>passno</literal> degli altri file system devono + essere settati a valori maggiori di uno. Se più di un + file system ha lo stesso <literal>passno</literal> allora + &man.fsck.8; tenterà di controllare i file system in + parallelo.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>Per maggiori informazioni sul formato del file + <filename>/etc/fstab</filename> e sulle opzioni che esso contiene + consulta la pagina man &man.fstab.5;.</para> + </sect2> + + <sect2 id="disks-mount"> + <title>Il Comando <command>mount</command></title> + + <indexterm> + <primary>file system</primary> + <secondary>montaggio</secondary> + </indexterm> + + <para>Il comando &man.mount.8; è ciò che in definitiva viene + usato per montare i file system.</para> + + <para>La sua forma di utilizzo elementare è:</para> + + <informalexample> + <screen>&prompt.root; <userinput>mount <replaceable>device</replaceable> <replaceable>mountpoint</replaceable></userinput></screen> + </informalexample> + + <para>Esistono molte opzioni, come spiegato nella pagina man di + &man.mount.8;, ma le più comuni sono:</para> + + <variablelist> + <title>Opzioni di Mount</title> + + <varlistentry> + <term><option>-a</option></term> + + <listitem> + <para>Monta tutti i file system elencati nel file + <filename>/etc/fstab</filename>. Le eccezioni sono quei file + system specificati come <quote>noauto</quote>, quelli esclusi + dalla flag <option>-t</option>, o quei file system che sono + già montati.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>-d</option></term> + + <listitem> + <para>Fà tutto ad eccezione della attuale system call di + mount. Questa opzione risulta utile in congiunzione con la flag + <option>-v</option> per determinare quello che &man.mount.8; sta + effettivamente tentando di fare.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>-f</option></term> + + <listitem> + <para>Forza il mount di un file system non correttamente smontato + (pericoloso), o forza + la revoca di accesso in scrittura quando si declassa lo stato + di mount di un file system da lettura-scrittura a lettura + solamente.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>-r</option></term> + + <listitem> + <para>Monta il file system in sola lettura. Questo è + identico ad usare l'argomento <option>ro</option> + (<option>rdonly</option> per versioni di &os; dopo la 5.2) con + l'opzione <option>-o</option>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>-t</option> <replaceable>fstype</replaceable></term> + + <listitem> + <para>Monta il dato file system secondo il tipo di file system + specificato, oppure, se affiancato dall'opzione + <option>-a</option>, monta solamente i file system di un dato + tipo.</para> + + <para><quote>ufs</quote> è il tipo di file system di + default.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>-u</option></term> + + <listitem> + <para>Aggiorna le opzioni di mount sul file system.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>-v</option></term> + + <listitem> + <para>Modalità verbosa.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>-w</option></term> + + <listitem> + <para>Monta il file system in lettura-scrittura.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>L'opzione <option>-o</option> accetta una lista di argomenti + separati da una virgola, inclusi i seguenti:</para> + + <variablelist> + <varlistentry> + <term>noexec</term> + + <listitem> + <para>Non permette l'esecuzione di binari su questo file system. + Questa è un'altra utile opzione di sicurezza.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>nosuid</term> + + <listitem> + <para>Non permette l'interpretazione delle flag setuid o setgid sul + file system. Anche questa è un'utile opzione di + sicurezza.</para> + </listitem> + </varlistentry> + </variablelist> + </sect2> + + <sect2 id="disks-umount"> + <title>Il Comando <command>umount</command></title> + + <indexterm> + <primary>file system</primary> + <secondary>smontaggio</secondary> + </indexterm> + + <para>Il comando &man.umount.8; accetta, come unico parametro, un punto di + mount, un nome di dispositivo, l'opzione <option>-a</option> o l'opzione + <option>-A</option>.</para> + + <para>Tutte queste modalità accettano l'opzione <option>-f</option> + per forzare la smontatura, e l'opzione <option>-v</option> per la + modalità verbosa. Sei avvisato che l'opzione <option>-f</option> + non è in generale un buona idea. Smontare in modo forzato i + file system può mandare in crash il computer o danneggiare i dati + sul file system.</para> + + <para>Le opzioni <option>-a</option> e <option>-A</option> sono usate per + smontare tutti i file system, con la possibilità di specificare + i tipi di file system elencandoli dopo la flag <option>-t</option>. + Tuttavia, l'opzione <option>-A</option> non tenta di smontare il file + system root.</para> + </sect2> + </sect1> + + <sect1 id="basics-processes"> + <title>I Processi</title> + + <para>FreeBSD è un sistema operativo multi-tasking. Con questa + capacità il sistema è come se potesse eseguire più di + un programma alla volta. Ogni programma in esecuzione in un dato istante + è chiamato <firstterm>processo</firstterm>. Ogni volta che esegui + un comando fai partire almeno un nuovo processo, e ci sono molti processi + di sistema che sono sempre in esecuzione, che permettono il corretto + funzionamento del sistema.</para> + + <para>Ogni processo è identificato in modo univoco da un numero + chiamato <firstterm>process ID</firstterm>, o <firstterm>PID</firstterm>, + e, come avviene per i file, ogni processo ha un proprietario e un gruppo. + Le informazioni sul proprietario e sul gruppo sono usate per determinare, + tramite il meccanismo dei permessi dei file discusso precedentemente, + quali file e quali dispositivi il processo può aprire. Inoltre + molti processi hanno un processo padre. Tale processo è il + processo che li ha generati. Per esempio, se stai digitando dei comandi + in shell allora la shell è un processo, così come lo sono i + comandi che esegui. Ogni processo che esegui in questo modo avrà + come suo processo padre la tua shell. L'eccezione a questo meccanismo + è un processo speciale chiamato &man.init.8;. Il processo + <command>init</command> è sempre il primo processo, quindi il suo + PID è sempre 1. <command>init</command> viene avviato in modo + automatico dal kernel quando si avvia FreeBSD.</para> + + <para>Due comandi sono particolarmente utili per monitorare i processi sul + sistema, &man.ps.1; e &man.top.1;. Il comando <command>ps</command> + è usato per mostrare una lista statica dei processi che sono in + esecuzione in quel momento, e può mostrare i loro PID, quanta + memoria stanno usando, la linea di comando che li ha avviati, e altro + ancora. Il comando <command>top</command> visualizza tutti i processi in + esecuzione, e aggiorna queste informazioni ogni qualche secondo, in modo + che puoi vedere interattivamente cosa sta facendo il tuo computer.</para> + + <para>Di default, <command>ps</command> mostra solo i tuoi comandi che sono + in quel momento in esecuzione. Per esempio:</para> + + <screen>&prompt.user; <userinput>ps</userinput> + PID TT STAT TIME COMMAND + 298 p0 Ss 0:01.10 tcsh + 7078 p0 S 2:40.88 xemacs mdoc.xsl (xemacs-21.1.14) +37393 p0 I 0:03.11 xemacs freebsd.dsl (xemacs-21.1.14) +48630 p0 S 2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi +48730 p0 IW 0:00.00 (dns helper) (navigator-linux-) +72210 p0 R+ 0:00.00 ps + 390 p1 Is 0:01.14 tcsh + 7059 p2 Is+ 1:36.18 /usr/local/bin/mutt -y + 6688 p3 IWs 0:00.00 tcsh +10735 p4 IWs 0:00.00 tcsh +20256 p5 IWs 0:00.00 tcsh + 262 v0 IWs 0:00.00 -tcsh (tcsh) + 270 v0 IW+ 0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16 + 280 v0 IW+ 0:00.00 xinit /home/nik/.xinitrc -- -bpp 16 + 284 v0 IW 0:00.00 /bin/sh /home/nik/.xinitrc + 285 v0 S 0:38.45 /usr/X11R6/bin/sawfish</screen> + + <para>Come puoi vedere in questo esempio, l'output di &man.ps.1; è + organizzato in molte colonne. La colonna <literal>PID</literal> si + riferisce al process ID discusso poco fà. I PID sono assegnati + partendo dal numero 1, andando fino al 99999, e ricominciando dall'inizio + una volta esauriti (se disponibili). La colonna <literal>TT</literal> + mostra su quale tty il programma è in esecuzione, e può + essere benissimo ignorata per il momento. La colonna + <literal>STAT</literal> mostra lo stato del programma, e di nuovo, + può essere benissimo ignorata. La colonna <literal>TIME</literal> + indica per quanto tempo il programma è stato in esecuzione sulla + CPU—di solito non indica il tempo trascorso da quando hai avviato + il programma, poichè la maggior parte dei programmi trascorrono + molto tempo in attesa per faccende che accadono prima che questi possano + trascorrere del tempo in CPU. Infine, la colonna + <literal>COMMAND</literal> indica la riga di comando che è stata + utilizzata per eseguire il programma.</para> + + <para>Il comando &man.ps.1; supporta varie opzioni per cambiare le + informazioni da visualizzare. Uno dei gruppi di opzioni più utili + è <literal>auxww</literal>. L'opzione <option>a</option> mostra le + informazioni riguardo a tutti i processi in esecuzione, non solo quelli + che ti appartengono. L'opzione <option>u</option> mostra il nome utente + del proprietario del processo, come pure la memoria utilizzata dal + processo. L'opzione <option>x</option> mostra le informazioni riguardo ai + processi demoni, e l'opzione <option>ww</option> indica a &man.ps.1; di + visualizzare la linea di comando completa che ha avviato il processo, + piuttosto che troncarla quando è troppo lunga per essere adattata + sullo schermo.</para> + + <para>L'output di &man.top.1; è simile. Un esempio di esecuzione + assomiglia a questo:</para> + + <screen>&prompt.user; <userinput>top</userinput> +last pid: 72257; load averages: 0.13, 0.09, 0.03 up 0+13:38:33 22:39:10 +47 processes: 1 running, 46 sleeping +CPU states: 12.6% user, 0.0% nice, 7.8% system, 0.0% interrupt, 79.7% idle +Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free +Swap: 256M Total, 38M Used, 217M Free, 15% Inuse + + PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND +72257 nik 28 0 1960K 1044K RUN 0:00 14.86% 1.42% top + 7078 nik 2 0 15280K 10960K select 2:54 0.88% 0.88% xemacs-21.1.14 + 281 nik 2 0 18636K 7112K select 5:36 0.73% 0.73% XF86_SVGA + 296 nik 2 0 3240K 1644K select 0:12 0.05% 0.05% xterm +48630 nik 2 0 29816K 9148K select 3:18 0.00% 0.00% navigator-linu + 175 root 2 0 924K 252K select 1:41 0.00% 0.00% syslogd + 7059 nik 2 0 7260K 4644K poll 1:38 0.00% 0.00% mutt +...</screen> + + <para>L'output è diviso in due sezioni. La parte superiore (le prime + cinque linee) mostra il PID dell'ultimo processo eseguito, il carico medio + del sistema (che è un indice di quanto il sistema sia impegnato), il + tempo di vita del sistema (il tempo passato dall'ultimo reboot) e l'ora + corrente. I restanti numeri nella parte superiore riportano quanti + processi sono in esecuzione (47 in questo caso), quanta memoria di sistema + e quanta memoria di swap è stata utilizzata, e quanto tempo il + sistema sta trascorrendo nei vari stati di CPU.</para> + + <para>Sotto ci sono una serie di colonne che contengono simili informazioni + a quelle contenute nell'output di &man.ps.1;. Come prima puoi vedere il + PID, il nome utente, quanto tempo di CPU è stato utilizzato, e il + comando che era stato eseguito. Inoltre il comando &man.top.1; di default + ti mostra quanta memoria è stata concessa al processo. Questa + informazione è suddivisa in due colonne, una per la dimensione + totale, e l'altra per la dimensione attuale—la dimensione totale + è la quantità di memoria che l'applicazione ha richiesto, e + la dimensione attuale è la quantità di memoria che sta + utilizzando in quel momento. In questo esempio puoi vedere che + <application>Netscape</application> ha richiesto quasi 30 MB di RAM, + ma al momento ne sta usando solo 9 MB.</para> + + <para>Il comando &man.top.1; aggiorna in modo automatico queste informazioni + ogni due secondi; questo lasso temporale può essere modificato con + l'opzione <option>s</option>.</para> + </sect1> + + <sect1 id="basics-daemons"> + <title>I Demoni, i Segnali, e come Uccidere i Processi</title> + + <para>Quando esegui un editor risulta semplice averne il controllo, dirgli + di caricare file, e così via. Tutto questo può essere fatto + poichè l'editor fornisce delle agevolazioni in questo senso, e + anche perchè l'editor è collegato a un + <firstterm>terminale</firstterm>. Alcuni programmi non sono stati + progettati per essere eseguiti con un continuo input dell'utente, e + perciò questi programmi si disconnettono dal terminale alla prima + occasione. Per esempio, un server web trascorre tutto il giorno + rispondendo a richieste web, e normalmente non necessita di alcun input + da parte tua. I programmi che trasportano la posta elettronica da un sito + a un altro sito sono un altro esempio di questa classe di + applicazioni.</para> + + <para>Chiamiamo questi programmi <firstterm>demoni</firstterm>. I demoni + erano dei personaggi della mitologia greca: nè buoni nè + cattivi, erano piccoli spiriti custodi che, nel complesso, + risultavano essere utili per l'umanità, molto similmente i server + web e quelli di posta elettronica di oggi fanno cose utili. Ecco il + motivo per cui la mascotte di BSD è stata per molto tempo, e lo + è ancora, l'allegro demone con le scarpe da tennis e con il + forcone.</para> + + <para>Esiste la convenzione di chiamare i programmi che normalmente sono + eseguiti come demoni con una <quote>d</quote> finale. + <application>BIND</application> sta per Berkeley Internet Name Domain, + ma il nome effettivo del programma che viene eseguito è + <command>named</command>; il nome del programma + <application>Apache</application>, un server web, è + <command>httpd</command>; il demone dello spool di stampa è + <command>lpd</command> e così via. Questa è una + convenzione, non è una regola ferrea; per esempio, il principale + demone di posta elettronica per l'applicazione + <application>Sendmail</application> è chiamato + <command>sendmail</command>, e non <command>maild</command>, come potresti + aspettarti.</para> + + <para>A volte puoi aver bisogno di comunicare con un processo demone. + Un modo per farlo è di mandare a esso (o ad altri processi + in esecuzione), un <firstterm>segnale</firstterm>. + Esistono svariati segnali che puoi inviare—alcuni di + questi hanno un significato specifico, altri sono interpretabili + dall'applicazione, e la documentazione dell'applicazione ti dirà + come l'applicazione stessa interpreta i segnali. Puoi mandare un segnale + solo ai processi che ti appartengono. Se mandi un segnale a un processo + che non ti appartiene con il comando &man.kill.1; o &man.kill.2;, il + permesso ti sarà negato. L'eccezione a questa regola riguarda + l'utente <username>root</username>, che può mandare segnali a + processi di chiunque.</para> + + <para>Inoltre in alcune circostanze FreeBSD invia segnali alle + applicazioni. Se un'applicazione è stata scritta malamente, e + tenta di accedere alla memoria che non gli compete, FreeBSD manda al + processo il segnale di <firstterm>Violazione della + Segmentazione</firstterm> (<literal>SIGSEGV</literal>). Se + un'applicazione ha utilizzato la system call &man.alarm.3; in modo tale + da essere avvisata dopo un certo periodo di tempo trascorso allora + FreeBSD invierà a questa applicazione il segnale di Allarme + (<literal>SIGALRM</literal>), e così via.</para> + + <para>Per fermare un processo possono essere utilizzati due segnali, + <literal>SIGTERM</literal> e <literal>SIGKILL</literal>. + <literal>SIGTERM</literal> è il modo cortese di terminare un + processo; il processo può <emphasis>catturare</emphasis> il + segnale, capire che vuoi abbatterlo, chiudere i file di log che potrebbe + avere aperto, e in genere terminare qualunque cosa che stava facendo prima + dell'interruzione. Nei casi in cui un processo sia coinvolto in qualche + compito che non può essere interrotto allora questo processo + può persino ignorare <literal>SIGTERM</literal>.</para> + + <para>Il segnale <literal>SIGKILL</literal> non può essere ignorato + da un processo. Questo è il segnale che dice <quote>Non mi + interessa cosa stai facendo, fermati subito</quote>. Se mandi il segnale + <literal>SIGKILL</literal> a un processo allora FreeBSD fermerà + subito il processo<footnote> + <para>Non è del tutto vero—ci sono alcune cose che non + possono essere interrotte. Per esempio, se il processo sta tentando + di leggere un file situato su un altro computer in rete, e questo + computer non è disponibile per qualche ragione (è stato + spento, o la rete ha qualche problema), allora il processo è + detto <quote>non interrompibile</quote>. Il processo finirà + in time out, generalmente dopo due minuti. Non appena avviene il + time out il processo potrà essere terminato.</para> + </footnote>. + </para> + + <para>Altri segnali che potresti aver bisogno di usare sono + <literal>SIGHUP</literal>, <literal>SIGUSR1</literal>, e + <literal>SIGUSR2</literal>. Questi sono segnali a scopo generico, e + differenti applicazioni possono fare cose diverse quando catturano questi + segnali.</para> + + <para>Supponiamo che hai cambiato il file di configurazione del tuo server + web—hai bisogno di dire al server web di rileggere la sua + configurazione. Potresti fermare e riavviare <command>httpd</command>, ma + questo porterebbe a un breve periodo di interruzione del tuo server + web, che potrebbe non essere gradito. Molti demoni sono stati scritti per + rispondere al segnale <literal>SIGHUP</literal> tramite la rilettura + dei loro file di configurazione. In questo modo invece di terminare e + riavviare <command>httpd</command> potresti inviare il segnale + <literal>SIGHUP</literal>. Poichè non esiste un modo standard di + trattare questi segnali, differenti demoni potrebbero avere un + comportamento diverso, quindi assicurati di leggere la documentazione per + il demone in questione.</para> + + <para>I segnali sono inviati utilizzando il comando &man.kill.1;, come + mostra questo esempio.</para> + + <procedure> + <title>Inviare un Segnale a un Processo</title> + + <para>Questo esempio mostra come inviare un segnale a &man.inetd.8;. Il + file di configurazione di <command>inetd</command> è + <filename>/etc/inetd.conf</filename>, e <command>inetd</command> rilegge + questo file di configurazione quando riceve il segnale + <literal>SIGHUP</literal>.</para> + + <step> + <para>Cerca il process ID del processo a cui vuoi mandare il segnale. + Puoi utilizzare &man.ps.1; e &man.grep.1; per farlo. Il comando + &man.grep.1; viene utilizzato per perlustrare attraverso l'output, + cercando la stringa da te specificata. Questo comando viene eseguito + in modalità utente, e &man.inetd.8; viene eseguito in + modalità <username>root</username>, quindi le opzioni da dare + a &man.ps.1; sono <option>ax</option>.</para> + + <screen>&prompt.user; <userinput>ps -ax | grep inetd</userinput> + 198 ?? IWs 0:00.00 inetd -wW</screen> + + <para>Come puoi vedere il PID di &man.inetd.8; è 198. In alcuni + casi potrebbe apparire nel risultato anche il comando + <literal>grep inetd</literal>. Questo dipende dal modo utilizzato + da &man.ps.1; nell'elencare la lista dei processi in + esecuzione.</para> + </step> + + <step> + <para>Usa il comando &man.kill.1; per inviare il segnale. Poichè + &man.inetd.8; viene eseguito in modalità + <username>root</username> prima devi usare il comando &man.su.1; per + diventare <username>root</username>.</para> + + <screen>&prompt.user; <userinput>su</userinput> +<prompt>Password:</prompt> +&prompt.root; <userinput>/bin/kill -s HUP 198</userinput></screen> + + <para>Come avviene per la maggior parte dei comandi &unix;, il comando + &man.kill.1; non stampa il risultato dell'operazione se questa ha + avuto successo. Se mandi un segnale a un processo del quale non sei + il proprietario allora vedrai il messaggio <errorname>kill: + <replaceable>PID</replaceable>: Operation not permitted</errorname>. + Se sbagli il PID invierai il segnale al processo sbagliato, il che + potrebbe essere dannoso, o, se hai fortuna, manderai il segnale + a un PID che in quel momento non è in uso, e in questo caso + vedrai il messaggio <errorname>kill: <replaceable>PID</replaceable>: + No such process</errorname>.</para> + + <note> + <title>Perchè Usare <command>/bin/kill</command>?</title> + + <para>Molte shell forniscono il comando <command>kill</command> come + comando built-in; ossia, la shell invia il segnale in modo + diretto, senza dover eseguire <filename>/bin/kill</filename>. Tutto + ciò può essere molto utile, ma le diverse shell hanno + una sintassi diversa per specificare il nome del segnale da inviare. + Invece di cercare di imparare tutte queste sintassi, può + essere più semplice usare direttamente il comando + <command>/bin/kill <replaceable>...</replaceable></command>.</para> + </note> + </step> + </procedure> + + <para>L'invio di altri segnali è analogo, basta sostituire + all'occorrenza <literal>TERM</literal> o <literal>KILL</literal> nella + linea di comando.</para> + + <important> + <para>Terminare processi in modo random su un sistema può essere + una cattiva idea. In particolare, il processo &man.init.8;, con process + ID 1, è un caso molto speciale. Eseguire <command>/bin/kill -s + KILL 1</command> è un modo veloce per arrestare il tuo sistema. + Controlla <emphasis>sempre</emphasis> due volte gli argomenti quando + esegui &man.kill.1; <emphasis>prima</emphasis> di premere + <keycap>Invio</keycap>.</para> + </important> + </sect1> + + <sect1 id="shells"> + <title>Le Shell</title> + + <indexterm><primary>shell</primary></indexterm> + <indexterm><primary>riga di comando</primary></indexterm> + + <para>In FreeBSD, la maggior parte del lavoro di tutti i giorni viene svolto + tramite un'interfaccia a riga di comando chiamata shell. Uno dei compiti + principali di una shell è quello di prendere in input dei comandi + ed eseguirli. Inoltre molte shell hanno delle funzioni built-in + (incorporate) utili nei lavori ordinari come la gestione dei file, la + sostituzione dei nomi dei file, la modifica della riga di comando, la + creazione di macro di comandi, e la gestione delle variabili d'ambiente. + FreeBSD si propone con una serie di shell, come la Shell Bourne, + <command>sh</command>, e la versione successiva della C-shell, + <command>tcsh</command>. Molte altre shell sono disponibili nella FreeBSD + Ports Collection, come le shell <command>zsh</command> e + <command>bash</command>.</para> + + <para>Quale shell devi usare? È veramente una questione di gusti. + Se sei un programmatore di C potresti sentirti a tuo agio con una shell + C-like come la <command>tcsh</command>. Se vieni da Linux o non sei + pratico dell'interfaccia a riga di comando di &unix; potresti provare la + <command>bash</command>. Il fatto è che ogni shell ha delle + caratteristiche che possono o meno combaciare con il tuo ambiente di + lavoro preferito, e quindi devi scegliere tu stesso quale shell + utilizzare.</para> + + <para>Una caratteristica comune in una shell è il completamento dei + nomi dei file. Dopo aver digitato alcuni dei primi caratteri di un + comando o di un nome di file, la shell di solito può completare + in modo automatico il resto del comando o del nome del file tramite la + pressione del tasto <keycap>Tab</keycap> sulla tastiera. Ecco un esempio. + Supponiamo che hai due file chiamati <filename>foobar</filename> e + <filename>foo.bar</filename>. Vuoi cancellare + <filename>foo.bar</filename>. Quello che dovresti digitare sulla tastiera + è: + <command>rm + fo[<keycap>Tab</keycap>].[<keycap>Tab</keycap>]</command>.</para> + + <para>La shell dovrebbe visualizzare <command>rm + foo[BEEP].bar</command>.</para> + + <para>Il [BEEP] è la campanella della console, che mi segnala che la + shell è incapace di completare interamente il nome del file + poichè esiste più di una sola corrispondenza. Sia + <filename>foobar</filename> che <filename>foo.bar</filename> iniziano con + <literal>fo</literal>, tuttavia la shell è riuscita a completarlo + in <literal>foo</literal>. A questo punto premendo <literal>.</literal>, + e poi di nuovo <keycap>Tab</keycap>, la shell sarà in grado di + completare da sola il resto del nome del file.</para> + + <indexterm><primary>variabili d'ambiente</primary></indexterm> + + <para>Un altro aspetto di una shell è l'uso delle variabili + d'ambiente. Le variabili d'ambiente sono una coppia di valori mutevoli + memorizzati nello spazio dell'ambiente della shell. Questo spazio + può essere letto dai programmi invocati dalla shell, e di + conseguenza questo spazio può contenere le configurazioni di molti + programmi. Qui sotto c'è una lista delle variabili d'ambiente + più comuni con il loro rispettivo significato:</para> + + <indexterm><primary>variabili d'ambiente</primary></indexterm> + + <informaltable frame="none" pgwide="1"> + <tgroup cols="2"> + <thead> + <row> + <entry>Variabile</entry> + + <entry>Descrizione</entry> + </row> + </thead> + + <tbody> + <row> + <entry><envar>USER</envar></entry> + + <entry>Il nome dell'utente attualmente loggato.</entry> + </row> + + <row> + <entry><envar>PATH</envar></entry> + + <entry>Lista di directory separate da due punti utilizzate per + la ricerca dei binari.</entry> + </row> + + <row> + <entry><envar>DISPLAY</envar></entry> + + <entry>Nome di rete del display X11 a cui connettersi, se + disponibile.</entry> + </row> + + <row> + <entry><envar>SHELL</envar></entry> + + <entry>La shell corrente.</entry> + </row> + + <row> + <entry><envar>TERM</envar></entry> + + <entry>Il nome del tipo di terminale dell'utente. Usato per determinare + le capacità del terminale.</entry> + </row> + + <row> + <entry><envar>TERMCAP</envar></entry> + + <entry>Serie di elementi di codici di escape del terminale + utilizzati per realizzare svariate funzioni del terminale.</entry> + </row> + + <row> + <entry><envar>OSTYPE</envar></entry> + + <entry>Il tipo di sistema operativo. FreeBSD, ad esempio.</entry> + </row> + + <row> + <entry><envar>MACHTYPE</envar></entry> + + <entry>L'architettura della CPU su cui il sistema gira.</entry> + </row> + + <row> + <entry><envar>EDITOR</envar></entry> + + <entry>L'editor di testo preferito dall'utente.</entry> + </row> + + <row> + <entry><envar>PAGER</envar></entry> + + <entry>L'impaginatore di testo preferito dall'utente.</entry> + </row> + + <row> + <entry><envar>MANPATH</envar></entry> + + <entry>Lista di directory separate da due punti utilizzate nella + ricerca delle pagine man.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <indexterm><primary>shell Bourne</primary></indexterm> + + <para>Il modo di settare una variabile d'ambiente varia leggermente a + seconda della shell utilizzata. Per esempio, nelle shell C-Style come + <command>tcsh</command> e <command>csh</command>, puoi usare + <command>setenv</command> per settare le variabili d'ambiente. Sotto le + shell Bourne come <command>sh</command> e <command>bash</command>, puoi + usare <command>export</command> per settare le tue variabili d'ambiente + correnti. Per esempio, per settare o modificare la variabile d'ambiente + <envar>EDITOR</envar> a <filename>/usr/local/bin/emacs</filename>, sotto + <command>csh</command> o <command>tcsh</command> si può utilizzare + il comando:</para> + + <screen>&prompt.user; <userinput>setenv EDITOR /usr/local/bin/emacs</userinput></screen> + + <para>Sotto le shell Bourne:</para> + + <screen>&prompt.user; <userinput>export EDITOR="/usr/local/bin/emacs"</userinput></screen> + + <para>Con la maggior parte delle shell puoi inoltre creare un'espansione + di una variabile d'ambiente mettendo sulla riga di comando il simbolo + <literal>$</literal> davanti al nome della variabile stessa. Per esempio, + <command>echo $TERM</command> visualizzerà ciò che + corrisponde a <envar>$TERM</envar>, poichè la shell espande + <envar>$TERM</envar> e passa il risultato a + <command>echo</command>.</para> + + <para>Le shell trattano molti caratteri speciali, chiamati meta-caratteri + come rappresentazioni speciali di dati. Il più comune di questi + è il simbolo <literal>*</literal>, che rappresenta diverse + istanze di caratteri in un nome di file. Questi meta-caratteri possono + essere usati per la sostituzione dei nomi di file. Per esempio, digitando + <command>echo *</command> è quasi come aver digitato + <command>ls</command> poichè la shell prende tutti i file che + corrispondono a <literal>*</literal> e li mette sulla riga di comando + con <command>echo</command> che quindi li visualizza.</para> + + <para>Per impedire alla shell di interpretare questi caratteri speciali, + questi possono essere messi in escape mettendo subito prima di essi un + backslash (<literal>\</literal>). <command>echo $TERM</command> + visualizza il tipo del tuo terminale. <command>echo \$TERM</command> + visualizza <envar>$TERM</envar> così com'è.</para> + + <sect2 id="changing-shells"> + <title>Cambiare la Propria Shell</title> + + <para>Il modo più semplice per cambiare la propria shell è + quello di usare il comando <command>chsh</command>. Eseguendo + <command>chsh</command> verrà invocato l'editor definito nella + tua variabile d'ambiente <envar>EDITOR</envar>; nel caso in cui questa + non sia stata settata, verrà invocato <command>vi</command>. + Modifica la riga <quote>Shell:</quote> in base alle tue esigenze.</para> + + <para>Puoi anche eseguire <command>chsh</command> con l'opzione + <option>-s</option>; in questo modo verrà settata la shell in + modo diretto, senza che sia necessario invocare l'editor. Per + esempio, se vuoi cambiare la tua shell in <command>bash</command>, + potresti digitare il seguente comando:</para> + + <screen>&prompt.user; <userinput>chsh -s /usr/local/bin/bash</userinput></screen> + + <note> + <para>La shell che desideri utilizzare <emphasis>deve</emphasis> essere + presente nel file <filename>/etc/shells</filename>. Se hai installato + una shell dalla <link linkend="ports">collezione dei port</link>, + allora la nuova shell dovrebbe essere già stata inserita nel + suddetto file in modo automatico. Se installi una shell manualmente, + questo lavoro lo devi fare tu.</para> + + <para>Per esempio, se installi <command>bash</command> a mano e la + metti sotto <filename>/usr/local/bin</filename>, dovresti fare + questo:</para> + + <screen>&prompt.root; <userinput>echo "/usr/local/bin/bash" >> /etc/shells</userinput></screen> + + <para>Dopo averlo fatto riavvia <command>chsh</command>.</para> + </note> + </sect2> + </sect1> + + <sect1 id="editors"> + <title>Editor di Testo</title> + + <indexterm><primary>editor di testo</primary></indexterm> + <indexterm><primary>editor</primary></indexterm> + + <para>La maggior parte del lavoro di configurazione in FreeBSD viene fatto + tramite la modifica di file di testo. Perciò, è una buona + idea familiarizzare con un editor di testo. FreeBSD si presenta con + alcuni editor come parte base del sistema, e molti altri sono disponibili + nella collezione dei port.</para> + + <indexterm> + <primary><command>ee</command></primary> + </indexterm> + <indexterm> + <primary>editor</primary> + <secondary><command>ee</command></secondary> + </indexterm> + + <para>L'editor più semplice e più facile da imparare si chiama + <application>ee</application>, che sta per easy editor. Per avviare + <application>ee</application>, puoi digitare sulla riga di comando + <command>ee filename</command> dove <literal>filename</literal> è + il nome del file che deve essere modificato. Per esempio, per modificare + <filename>/etc/rc.conf</filename>, devi digitare <command>ee + /etc/rc.conf</command>. Una volta all'interno di <command>ee</command>, + tutti i comandi per azionare le funzioni dell'editor sono elencati nella + parte superiore del video. Il carattere <literal>^</literal> è il + tasto <keycap>Ctrl</keycap> della tastiera, quindi <literal>^e</literal> + si riferisce alla combinazione di tasti <keycombo action="simul"> + <keycap>Ctrl</keycap> + <keycap>e</keycap> + </keycombo>. Per uscire da <application>ee</application>, premi il tasto + <keycap>Esc</keycap>, quindi conferma l'uscita dall'editor. Se il file + ha subito delle modifiche ti verrà chiesto se le vuoi + salvare.</para> + + <indexterm> + <primary><command>vi</command></primary> + </indexterm> + <indexterm> + <primary>editor</primary> + <secondary><command>vi</command></secondary> + </indexterm> + <indexterm> + <primary><command>emacs</command></primary> + </indexterm> + <indexterm> + <primary>editor</primary> + <secondary><command>emacs</command></secondary> + </indexterm> + + <para>FreeBSD ha come parte base del sistema anche editor di testo + più potenti come <application>vi</application>, mentre altri + editor, come <application>Emacs</application> e + <application>vim</application>, sono inclusi nella + FreeBSD Ports Collection (<filename + role="package">editors/emacs</filename> e <filename + role="package">editors/vim</filename>). Questi editor offrono molte + più funzionalità e molta più potenza a costo di essere + un poco più complicati da imparare ad utilizzare. Comunque se + intendi utilizzare in modo intensivo un editor, imparando ad utilizzare un + editor potente come <application>vim</application> o + <application>Emacs</application> + risparmierai a lungo andare un sacco di tempo.</para> + </sect1> + + <sect1 id="basics-devices"> + <title>Dispositivi e Nodi di Dispositivo</title> + + <para>Il termine dispositivo viene usato prevalentemente per specificare le + unità hardware all'interno di un sistema, come i dischi, le + stampanti, le schede grafiche, e le tastiere. Durante la fase di avvio di + FreeBSD, la maggior parte delle cose che vengono visualizzate da FreeBSD + riguardano i dispositivi che sono stati rilevati. Puoi riesaminare + questi messaggi di avvio guardando il file + <filename>/var/run/dmesg.boot</filename>.</para> + + <para>Per esempio, <devicename>acd0</devicename> è il primo drive + CDROM IDE, mentre <devicename>kbd0</devicename> rappresenta la + tastiera.</para> + + <para>In un sistema operativo &unix; la maggior parte di questi dispositivi + sono accessibili tramite dei file speciali chiamati nodi di dispositivo, + i quali sono posti nella directory <filename>/dev</filename>.</para> + + <sect2> + <title>Creare i Nodi di Dispositivo</title> + + <para>Quando aggiungi un nuovo dispositivo al tuo sistema, o ricompili il + kernel per supportare dispositivi aggiuntivi, devono essere + creati nuovi nodi di dispositivo.</para> + + <sect3> + <title><literal>DEVFS</literal> (DEVice File System)</title> + + <para>Il file system device, o <literal>DEVFS</literal>, fornisce la + disponibilità dello spazio dei nomi dei dispositivi del kernel + allo spazio dei nomi globale del file system. Invece di dover creare + o modificare i nodi di dispositivo, <literal>DEVFS</literal> mantiene + in modo automatico questo particolare file system.</para> + + <para>Guarda la pagina man di &man.devfs.5; per maggiori + informazioni.</para> + </sect3> + </sect2> + </sect1> + + <sect1 id="binary-formats"> + <title>Formati dei Binari</title> + + <para>Per comprendere il motivo per cui FreeBSD usa il formato &man.elf.5;, + devi prima conoscere un pò i tre attuali formati eseguibili + <quote>dominanti</quote> per &unix;:</para> + + <itemizedlist> + <listitem> + <para>&man.a.out.5;</para> + + <para>Il più vecchio e <quote>classico</quote> formato oggetto + di &unix;. Usa un'intestazione corta e compatta con un numero magico + all'inizio che è spesso usato per caratterizzare il formato + (vedere &man.a.out.5; per maggiori dettagli). Contiene tre segmenti + caricabili: .text, .data, e .bss più una tabella di simboli e + una di stringhe.</para> + </listitem> + + <listitem> + <para><acronym>COFF</acronym></para> + + <para>Il formato oggetto di SVR3. Poichè l'intestazione include + una porzione di tabella, puoi avere molto di più delle sole + sezioni .text, .data, e .bss.</para> + </listitem> + + <listitem> + <para>&man.elf.5;</para> + + <para>Il successore di <acronym>COFF</acronym>, caratterizzato da + sezioni multiple e da possibili valori a 32-bit o 64-bit. Uno dei + maggiori svantaggi: <acronym>ELF</acronym> fu progettato con + l'assunzione che ci doveva essere solo un ABI per ogni tipo di + architettura dei sistemi. Tale assunzione è in realtà + piuttosto sbagliata, e non è vera nemmeno nel mondo commerciale + di SYSV (che ha almeno tre ABI: SVR4, Solaris, SCO).</para> + + <para>FreeBSD tenta di aggirare questo problema fornendo un + utility per <emphasis>marchiare</emphasis> un eseguibile + <acronym>ELF</acronym> con informazioni sull'ABI per il quale è + stato costruito. Guarda la pagina man &man.brandelf.1; per maggiori + informazioni.</para> + </listitem> + </itemizedlist> + + <para>FreeBSD proviene dalla scuola <quote>classica</quote> e ha usato il + formato &man.a.out.5;, una tecnologia sperimentata ed utilizzata + attraverso molte generazioni delle release BSD, fino agli inizi del ramo + 3.X. Sebbene fino ad allora era possibile costruire ed eseguire su + un sistema FreeBSD binari (e kernel) del formato <acronym>ELF</acronym>, + inizialmente FreeBSD si oppose al <quote>salto</quote> di cambiamento al + formato <acronym>ELF</acronym> come formato di default. Per quale motivo? + Dunque, quando la scuola Linux fece il suo doloroso passaggio a + <acronym>ELF</acronym>, questo non era sufficiente per abbandonare + il formato eseguibile <filename>a.out</filename> a causa del loro + rigido meccanismo a salto-di-tabella basato sulla libreria condivisa, il + quale rendeva la costruzione di librerie condivise un compito molto + difficile tanto per i venditori che per gli sviluppatori. Tuttavia, + quando gli strumenti di <acronym>ELF</acronym> furono in grado di offrire + una soluzione al problema della libreria condivisa e quando furono visti + come <quote>la strada imminente</quote>, il costo della migrazione + fu accettato poichè necessario e avvenne così la + transizione. Il meccanismo di libreria condivisa di FreeBSD è + basato sullo stile più restrittivo del meccanismo di libreria + condivisa degli &sunos; di Sun, e come tale, è molto facile da + utilizzare.</para> + + <para>Quindi, perchè ci sono così tanti formati + differenti?</para> + + <para>In passato l'hardware era semplice. Questo hardware semplice + sosteneva un sistema semplice e piccolo. Il formato + <filename>a.out</filename> era del tutto adatto per rappresentare i binari + su questo semplice sistema (un PDP-11). Nonostante le persone fecero il + port di &unix; da questo semplice sistema, esse mantennero il formato + <filename>a.out</filename> poichè era sufficiente per un primo port + di &unix; verso architetture come Motorola 68k, VAXen, ecc.</para> + + <para>All'epoca alcuni ingegneri hardware di spicco stabilirono che se tale + formato poteva forzare il software a fare alcuni trucchi sporchi, allora + esso sarebbe stato in grado di abbattere alcune barriere di progettazione + e permettere al core della CPU di andare più veloce. Benchè + il formato <filename>a.out</filename> fu progettato per lavorare + con questo nuovo tipo di hardware (conosciuto ai giorni d'oggi come + <acronym>RISC</acronym>), esso fu appena sufficiente per questo + hardware, quindi furono sviluppati altri formati per ottenere delle + prestazioni da questo hardware migliori di quelle che il limitato e + semplice formato <filename>a.out</filename> era in grado di offrire. + Furono inventati formati come il <acronym>COFF</acronym>, + l'<acronym>ECOFF</acronym>, e alcuni altri e furono esaminate le loro + limitazioni prima che fu prodotto l'<acronym>ELF</acronym>.</para> + + <para>Per di più, le dimensioni dei programmi stavano diventando + enormi e i dischi (e la memoria fisica) erano ancora relativamente + piccoli, e quindi il concetto di libreria condivisa prese piede. + Inoltre il sistema di VM (Memoria Virtuale) divenne più + sofisticato. Benchè ognuno di questi miglioramenti fu fatto + utilizzando il formato <filename>a.out</filename>, la sua utilità + si distese sempre più con ogni nuova caratteristica. In aggiunta, + la gente voleva caricare alcune cose in modo dinamico al tempo di + esecuzione, o anche scartare parte dei loro programmi dopo l'esecuzione + del codice iniziale al fine di salvare memoria e spazio di swap. + I linguaggi divennero più sofisticati e le persone desideravano che + il codice venisse chiamato dopo il main in modo automatico. Furono + apportati molte migliorie al formato <filename>a.out</filename> per + permettere tutte queste cose, e sostanzialmente tutto funzionò per + un dato periodo. Col passare del tempo, il formato + <filename>a.out</filename> non fu più in grado di gestire + tutti questi problemi senza apportare dei miglioramenti al codice con + un conseguente aumento della complessità. Benchè il formato + <acronym>ELF</acronym> risolveva molti di questi problemi, era doloroso + migrare da un sistema che tutto sommato funzionava. Quindi il formato + <acronym>ELF</acronym> attese fino a quando fu meno doloroso + rimanere con il formato <filename>a.out</filename> piuttosto che migrare + al formato <acronym>ELF</acronym>.</para> + + <para>Tuttavia, il tempo passò, e gli strumenti di costruzione che + FreeBSD derivò dai loro strumenti di costruzione (in particolare + l'assemblatore ed il loader) evolsero in due tronconi paralleli. + L'albero di FreeBSD aggiunse le librerie condivise e sistemò alcuni + bug. Il popolo di GNU che in origine aveva scritto questi programmi + li riscrisse e aggiunse un semplice supporto per la costruzione di + compilatori cross, la possibilità di produrre formati diversi a + piacimento, e così via. Da quando molte persone vollero costruire + compilatori cross per FreeBSD, questi furono delusi poichè i vecchi + sorgenti che FreeBSD aveva per <application>as</application> e + <application>ld</application> non erano pronti per questo lavoro. + La nuova serie di strumenti di GNU (<application>binutils</application>) + supportavano la compilazione cross, <acronym>ELF</acronym>, le librerie + condivise, le estensioni C++, ecc. Inoltre molti venditori stanno + rilasciando binari <acronym>ELF</acronym>, ed è una buona cosa + per FreeBSD eseguirli.</para> + + <para>Il formato <acronym>ELF</acronym> è più espressivo di + quello <filename>a.out</filename> e permette una maggiore + estensibilità nel sistema base. Gli strumenti di + <acronym>ELF</acronym> sono meglio mantenuti, e offrono un supporto alla + compilazione cross, che sta a cuore a molte persone. + <acronym>ELF</acronym> può essere un pò meno veloce di + <filename>a.out</filename>, ma tentare di misurarne le prestazioni non + è molto semplice. Ci sono anche numerosi dettagli che sono diversi + tra i due formati nel modo in cui essi mappano le pagine, gestiscono il + codice iniziale, ecc. Questi dettagli non sono molto importanti, ma tra i + due esistono delle differenze. Nel tempo il supporto per il formato + <filename>a.out</filename> verrà rimosso dal kernel + <filename>GENERIC</filename>, e alla fine sarà rimosso + completamente dal kernel non appena non ci sarà più la + necessità di eseguire programmi con il formato + <filename>a.out</filename>.</para> + </sect1> + + <sect1 id="basics-more-information"> + <title>Per Maggiori Informazioni</title> + + <sect2 id="basics-man"> + <title>Le Pagine Man</title> + + <indexterm><primary>pagine man</primary></indexterm> + + <para>La documentazione più esauriente su FreeBSD è + costituita dalle pagine man. Quasi tutti i programmi sul sistema hanno + un piccolo manuale di riferimento che spiega il funzionamento di base e + i vari argomenti del programma stesso. Questi manuali possono essere + visualizzati con il comando <command>man</command>. L'uso del comando + <command>man</command> è semplice:</para> + + <screen>&prompt.user; <userinput>man <replaceable>comando</replaceable></userinput></screen> + + <para><literal>comando</literal> è il nome del comando di cui + desideri maggiori informazioni. Per esempio, per sapere di più + circa il comando <command>ls</command> digita:</para> + + <screen>&prompt.user; <userinput>man ls</userinput></screen> + + <para>Il manuale in linea è diviso in sezione numerate:</para> + + <orderedlist> + <listitem> + <para>Comandi utente.</para> + </listitem> + + <listitem> + <para>System call e codici di errore.</para> + </listitem> + + <listitem> + <para>Funzioni della libreria C.</para> + </listitem> + + <listitem> + <para>Driver dei dispositivi.</para> + </listitem> + + <listitem> + <para>Formati di file.</para> + </listitem> + + <listitem> + <para>Giochi e altri passatempo.</para> + </listitem> + + <listitem> + <para>Informazioni varie.</para> + </listitem> + + <listitem> + <para>Comandi di mantenimento e di funzionamento del sistema.</para> + </listitem> + + <listitem> + <para>Sviluppo del kernel.</para> + </listitem> + </orderedlist> + + <para>In qualche caso, lo stesso soggetto può apparire in + più di una sezione del manuale in linea. Per esempio, esiste + un comando utente <command>chmod</command> e una system call + <function>chmod()</function>. In questo caso, puoi dire al comando + <command>man</command> quale vuoi specificando la sezione:</para> + + <screen>&prompt.user; <userinput>man 1 chmod</userinput></screen> + + <para>In questo caso verrà visualizzata la pagina man del comando + utente <command>chmod</command>. I riferimenti di una sezione + particolare del manuale in linea sono tradizionalmente posti tra + parentesi all'interno della documentazione, quindi &man.chmod.1; fa + riferimento al comando utente <command>chmod</command> e &man.chmod.2; + fa riferimento alla system call.</para> + + <para>Tutto questo va bene se conosci il nome del comando e desideri + semplicemente sapere come usarlo, ma cosa succede se non ricordi il nome + del comando? Puoi usare <command>man</command> con l'opzione + <option>-k</option> per ricercare tramite parole chiavi nelle + descrizioni dei comandi:</para> + + <screen>&prompt.user; <userinput>man -k mail</userinput></screen> + + <para>Con questo comando ti verrà presentata una lista di comandi + che hanno la parola chiave <quote>mail</quote> nella loro descrizione. + Di fatto questo meccanismo funziona proprio come il comando + <command>apropos</command>.</para> + + <para>Stai dando un'occhiata a tutti quei comandi fantastici che si + trovano in <filename>/usr/bin</filename> ma non hai la più + pallida idea di cosa fanno la maggior parte di essi? Semplicemente + digita:</para> + + <screen>&prompt.user; <userinput>cd /usr/bin</userinput> +&prompt.user; <userinput>man -f *</userinput></screen> + + <para>oppure</para> + + <screen>&prompt.user; <userinput>cd /usr/bin</userinput> +&prompt.user; <userinput>whatis *</userinput></screen> + + <para>che è la stessa cosa.</para> + </sect2> + + <sect2 id="basics-info"> + <title>I File Info di GNU</title> + + <indexterm><primary>Free Software Foundation</primary></indexterm> + + <para>FreeBSD include molte applicazioni e utility prodotti dalla Free + Software Foundation (FSF). Oltre alle pagine man, questi programmi + hanno dei più ampi documenti in ipertesto chiamati file + <literal>info</literal> che possono essere visualizzati con il comando + <command>info</command>, o se hai installato + <application>emacs</application>, con la modalità info di + <application>emacs</application>.</para> + + <para>Per usare il comando &man.info.1;, digita semplicemente:</para> + + <screen>&prompt.user; <userinput>info</userinput></screen> + + <para>Per una breve introduzione, digita <literal>h</literal>. Per un + rapido riferimento dei comandi, digita <literal>?</literal>.</para> + </sect2> + </sect1> +</chapter> |