<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Linux - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Impara a programmare gratuitamente! Tutorial di programmazione su Python, JavaScript, Linux e molto altro. ]]>
        </description>
        <link>https://www.freecodecamp.org/italian/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Linux - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/italian/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Mon, 18 May 2026 19:57:48 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/italian/news/tag/linux/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Impostare un IP statico in Ubuntu - Tutorial sugli indirizzi IP di Linux ]]>
                </title>
                <description>
                    <![CDATA[ Nella maggior parte delle configurazioni di rete, il server DHCP del router assegna l'indirizzo IP dinamicamente per impostazione predefinita. Se si desidera garantire che l'IP del sistema rimanga sempre lo stesso, è possibile forzare l'utilizzo di un IP statico. Questo è ciò che impareremo in questo articolo. Esploreremo due modi ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/impostare-un-ip-statico-in-ubuntu/</link>
                <guid isPermaLink="false">687667cb19090d0460b32189</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Francesco Falleti ]]>
                </dc:creator>
                <pubDate>Wed, 23 Jul 2025 06:48:08 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2025/07/setting-static-ip-ubuntu.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/setting-a-static-ip-in-ubuntu-linux-ip-address-tutorial/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Setting a Static IP in Ubuntu – Linux IP Address Tutorial</a>
      </p><p>Nella maggior parte delle configurazioni di rete, il server DHCP del router assegna l'indirizzo IP dinamicamente per impostazione predefinita. Se si desidera garantire che l'IP del sistema rimanga sempre lo stesso, è possibile forzare l'utilizzo di un IP statico.</p><p>Questo è ciò che impareremo in questo articolo. Esploreremo due modi per impostare un IP statico in Ubuntu.</p><p>Gli indirizzi IP statici trovano impiego nelle seguenti situazioni:</p><ul><li>Configurazione del port forwarding.</li><li>Configurazione del sistema come server, ad esempio un server FTP, un server Web o un server multimediale.</li></ul><p><strong><strong>Pre</strong>requisiti<strong>:</strong></strong></p><p>Per seguire questo tutorial sono necessari i seguenti elementi:</p><ul><li>Installazione di Ubuntu, preferibilmente con interfaccia grafica.</li><li>I diritti <code>sudo</code> poiché si modificheranno i file di configurazione del sistema.</li></ul><h2 id="come-impostare-un-ip-statico-utilizzando-la-riga-di-comando">Come impostare un IP statico utilizzando la riga di comando</h2><p>In questa sezione verranno analizzati in dettaglio tutti i passaggi necessari per configurare un IP statico.</p><h3 id="step-1-apri-il-terminale"><strong>Step 1: Apri il terminale</strong></h3><p>Apri il terminale usando la shortcut <code>Ctrl+ Shift + t</code>.</p><h3 id="step-2-informazioni-sulla-rete-attuale"><strong>Step 2: </strong>Informazioni sulla rete attuale</h3><p>Avremo bisogno dei dettagli della nostra rete attuale, come l'attuale IP assegnato, la maschera di sottorete e il nome dell'adattatore di rete, in modo da poter applicare le modifiche necessarie alle configurazioni.</p><p>Utilizza il seguente comando per trovare i dettagli degli adattatori disponibili e le rispettive informazioni IP.</p><pre><code class="language-bash">ip a
</code></pre><p>Il risultato sarà simile a questo:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-14.png" class="kg-image" alt="Image" width="600" height="400" loading="lazy"></figure><p>Per la mia rete, l'adattatore attuale è <code>eth0</code>. Potrebbe essere diverso per il tuo sistema</p><ul><li><strong>Annota il nome dell'adattatore di rete corrente</strong></li></ul><p>Dal momento che il mio adattatore attuale è <code>eth0</code>, i seguenti dettagli sono rilevanti.</p><pre><code class="language-bash">6: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:df:c3:ad brd ff:ff:ff:ff:ff:ff
    inet 172.23.199.129/20 brd 172.23.207.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fedf:c3ad/64 scope link
       valid_lft forever preferred_lft forever
</code></pre><p>Vale la pena notare che l'attuale IP <code>172.23.199.129</code> è assegnato dinamicamente. Ha <code>20</code> bit riservati per la maschera di rete. L'indirizzo di broadcast è <code>172.23.207.255</code>.</p><ul><li><strong>Annota la subnet</strong></li></ul><p>Possiamo trovare i dettagli della maschera di sottorete utilizzando il comando seguente:</p><pre><code class="language-bash">ifconfig -a
</code></pre><p>Seleziona il risultato relativo all’adattatore e leggilo con attenzione.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-15.png" class="kg-image" alt="Image" width="600" height="400" loading="lazy"></figure><p><em>L'IP è<em><em><em> <code>172.23.199.129</code> </em></em></em>e la maschera di sottorete è<em><em><em> <code>255.255.240.0</code></em></em></em></em></p><p>In base alla classe e alla maschera di sottorete, l'intervallo IP host utilizzabile per la mia rete è: <code>172.23.192.1 - 172.23.207.254</code>.</p><p>Il subnetting è un argomento molto vasto. Per ulteriori informazioni sul subnetting e sugli intervalli IP utilizzabili, consultate <a href="https://www.freecodecamp.org/italian/news/maschere-di-sottorete-24-30-26-27-29-e-altri-riferimenti-per-indirizzi-ip-e-cidr/">questo articolo</a>.</p><h3 id="step-3-apportare-modifiche-alla-configurazione"><strong>Step 3: </strong>Apportare modifiche alla configurazione</h3><p><a href="https://netplan.io/">Netplan </a>è lo strumento di gestione della rete predefinito per le ultime versioni di Ubuntu. I file di configurazione di Netplan sono scritti utilizzando YAML e terminano con l'estensione <code>.yaml</code>.</p><p>Nota bene: fai attenzione agli spazi nel file di configurazione, perché fanno parte della sintassi. Senza una corretta indentazione, il file non verrà letto correttamente.</p><ul><li>Vai alla cartella <code>netplan</code> situata in <code>/etc/netplan</code>.</li></ul><p>Fai <code>ls</code> dentro la cartella <code>/etc/netplan</code>.</p><p>Se non viene visualizzato alcun file, puoi crearne uno. Il nome può essere qualsiasi cosa, ma per convenzione dovrebbe iniziare con un numero, ad esempio <code>01-</code> e terminare con <code>.yaml</code>. Il numero stabilisce la priorità se si ha più di un file di configurazione.</p><p>Creerò un file chiamato <code>01-network-manager-all.yaml</code>.</p><p>Aggiungiamo queste righe al file. Costruiremo il file passo dopo passo.</p><pre><code class="language-bash">network:
 version: 2
</code></pre><p>Il nodo di primo livello in un file di configurazione di Netplan è un nodo <code>network:</code> mapping che contiene <code>version: 2</code> (significa che utilizza la definizione di rete versione 2).</p><p>Successivamente, aggiungeremo un renderer, che controlla l'intera rete. Il renderer è <code>systemd-networkd</code> di default, ma lo imposteremo su <code>NetworkManager</code>.</p><p>Ora il nostro file ha questo aspetto:</p><pre><code class="language-bash">network:
 version: 2
 renderer: NetworkManager
</code></pre><p>Successivamente, aggiungeremo <code>ethernets</code> a cui farà riferimento il nome dell'adattatore di rete che abbiamo cercato in precedenza nel passaggio n. 2. Altri tipi di dispositivi supportati sono <code>modems:</code>, <code>wifis:</code>, or <code>bridges:</code>.</p><pre><code class="language-bash">network:
 version: 2
 renderer: NetworkManager
 ethernets:
   eth0:
</code></pre><p>Poiché stiamo impostando un IP statico e non vogliamo assegnare dinamicamente un IP a questa scheda di rete, impostiamo <code>dhcp4</code> to <code>no</code>.</p><pre><code class="language-bash">network:
 version: 2
 renderer: NetworkManager
 ethernets:
   eth0:
     dhcp4: no
</code></pre><p>Ora specificheremo l'IP statico specifico che abbiamo annotato al punto 2, in base alla nostra subnet e all'intervallo IP utilizzabile. Era <code>172.23.207.254</code>.</p><p>Successivamente, specificheremo il gateway, ovvero il router o il dispositivo di rete che assegna gli indirizzi IP. Il mio è su <code>192.168.1.1</code>.</p><pre><code class="language-bash">network:
 version: 2
 renderer: NetworkManager
 ethernets:
   eth0:
     dhcp4: no
     addresses: [172.23.207.254/20]
     gateway4: 192.168.1.1
</code></pre><p>Successivamente, definiremo <code>nameservers</code>. Qui è dove definirai un server DNS o un secondo server DNS. Qui il primo valore è <code>8.8.8.8</code> che è il server DNS primario di Google e il secondo valore è <code>8.8.8.4</code> che è il server DNS secondario di Google. Questi valori possono variare a seconda delle tue esigenze.</p><pre><code class="language-bash">network:
 version: 2
 renderer: NetworkManager
 ethernets:
   eth0:
     dhcp4: no
     addresses: [172.23.207.254/20]
     gateway4: 192.168.1.1
     nameservers:
         addresses: [8.8.8.8,8.8.8.4]
</code></pre><h3 id="step-4-applicare-e-testare-le-modifiche"><strong>Step 4: </strong>Applicare e testare le modifiche</h3><p>Utilizzando questo comando è possibile testare le modifiche prima di applicarle in modo permanente:</p><pre><code class="language-bash">sudo netplan try
</code></pre><p>Se non ci sono errori, ti chiederà se vuoi applicare queste impostazioni.</p><p>Infine, testa le modifiche con il comando <code>ip a</code> e vedrai che l'IP statico è stato applicato.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-17.png" class="kg-image" alt="Image" width="600" height="400" loading="lazy"></figure><p><em>IP statico applicato</em></p><h2 id="come-impostare-un-ip-statico-utilizzando-la-gui">Come impostare un IP statico utilizzando la GUI</h2><p>È molto semplice impostare un IP statico attraverso la GUI/il desktop di Ubuntu. Ecco i passaggi:</p><ul><li>Cerca <code>settings</code>.</li><li>Fai clic sulla scheda Rete o Wi-Fi, a seconda dell'interfaccia che desideri modificare.</li><li>Per aprire le impostazioni dell'interfaccia, fai clic sull'icona dell'ingranaggio accanto al nome dell'interfaccia.</li><li>Seleziona “Manuale” nella scheda IPV4 e inserisci l'indirizzo IP statico, la Maschera di rete ed il Gateway.</li><li>Clicca sul bottone <code>Apply</code>.</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-16.png" class="kg-image" alt="Image" width="600" height="400" loading="lazy"></figure><p><em>Impostazione manuale di un IP statico con Ubuntu Desktop.</em></p><ul><li>Verifica usando il comando <code>ip a</code></li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-18.png" class="kg-image" alt="Image" width="600" height="400" loading="lazy"></figure><p><em>Ip statico modificando tramite GUI</em></p><h2 id="conclusioni"><strong>Conclusioni</strong></h2><p>In questo articolo abbiamo trattato due metodi per impostare l'IP statico in Ubuntu. Spero che l'articolo vi sia stato utile.</p><p><br>Qual è la cosa preferita che hai imparato da questo tutorial? Fammelo sapere su <a href="https://twitter.com/hira_zaira">Twitter</a>!</p><p><br>Puoi leggere gli altri miei post <a href="https://www.freecodecamp.org/news/author/zaira/">qui</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Un Tutorial sui Symlink in Linux – Come Creare e Rimuovere un Link Simbolico ]]>
                </title>
                <description>
                    <![CDATA[ Un link simbolico (o symlink) è un tipo di file in Linux che punta a un altro file o a un'altra cartella all'interno del tuo computer. I link simbolici assomigliano alle scorciatoie di Windows. I link simbolici vengono chiamati da alcuni "link soft", morbidi - un tipo di link nei ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/un-tutorial-sui-symlink-in-linux-come-creare-e-rimuovere-un-link-simbolico/</link>
                <guid isPermaLink="false">64e46cb7bd4e25040221cd15</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Roberta Garavaglia ]]>
                </dc:creator>
                <pubDate>Thu, 31 Aug 2023 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/08/5f9c9b4f740569d1a4ca2b02.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/symlink-tutorial-in-linux-how-to-create-and-remove-a-symbolic-link/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Symlink Tutorial in Linux – How to Create and Remove a Symbolic Link</a>
      </p><p>Un link simbolico (o symlink) è un tipo di file in Linux che punta a un altro file o a un'altra cartella all'interno del tuo computer. I link simbolici assomigliano alle scorciatoie di Windows.</p><p>I link simbolici vengono chiamati da alcuni "link soft", morbidi - un tipo di link nei sistemi Linux/UNIX - in opposizione ai link "hard", duri.</p><h2 id="differenza-tra-i-link-soft-e-i-link-hard"><strong>Differenza tra i link soft e i link hard</strong></h2><p>I link soft sono simili alle scorciatoie, possono puntare a un altro file o a un'altra cartella in qualsiasi file system.</p><p>Anche i link hard sono scorciatoie per file o cartelle, ma un link hard non può essere creato puntando a un file o a una cartella in un file system diverso.</p><p>Ecco i passi per creare e rimuovere un link simbolico. Vedremo anche cosa sono i link interrotti e come cancellarli.</p><h2 id="come-creare-un-link-simbolico"><strong>Come creare un link simbolico</strong></h2><p>La sintassi per creare un link simbolico è:</p><pre><code class="language-shell">ln -s &lt;percorso del file/cartella da collegare&gt; &lt;percorso del link da creare&gt;</code></pre><p><code>ln</code> è il comando. La <code>-s</code> specifica che il link deve essere soft. <code>-s</code> può essere scritto anche <code>-symbolic</code>.</p><p><code>ln</code> è il comando predefinito per creare link hard. L'argomento successivo è il <code>percorso del file (o cartella)</code> che vuoi collegare (cioè il file o la cartella per cui vuoi creare una scorciatoia).</p><p>E l'ultimo argomento è il <code>percorso del collegamento</code> (la scorciatoia).</p><h2 id="come-creare-un-link-simbolico-per-un-file-esempio"><strong>Come creare un link simbolico per un file - esempio</strong></h2><pre><code class="language-shell">ln -s /home/james/transactions.txt trans.txt
</code></pre><p>Dopo aver eseguito questo comando, sarai in grado di accedere al file <code>/home/james/transactions.txt</code> con <code>trans.txt</code>. Ogni modifica a <code>trans.txt</code> si rifletterà nel file originale.</p><p>Nota che il comando crea il file di collegamento <code>trans.txt</code> nella cartella in cui ti trovi. Allo stesso modo puoi creare un file di collegamento all'interno di una cartella:</p><pre><code class="language-shell">ln -s /home/james/transactions.txt my-stuffs/trans.txt
</code></pre><p>Una cartella chiamata "my-stuffs" deve essere già presente nella cartella in cui ti trovi - altrimenti il comando ti darà un errore. </p><h2 id="come-creare-un-link-simbolico-per-una-cartella-esempio"><strong>Come creare un link simbolico per una cartella - esempio</strong></h2><p>Similmente a quanto visto sopra useremo:</p><pre><code class="language-shell">ln -s /home/james james
</code></pre><p>Questo crea una cartella di collegamento simbolico chiamata "james", che conterrà quel che già si trova in <code>/home/james</code>. Qualsiasi cambiamento alla cartella di collegamento, modificherà anche la cartella originale. </p><h2 id="come-rimuovere-un-link-simbolico"><strong>Come rimuovere un link simbolico</strong></h2><p>Prima di voler rimuovere un symlink, è meglio avere la sicurezza che quel file o quella cartella siano un link simbolico, per evitare di manomettere i file. </p><p>Un modo è questo:</p><pre><code class="language-shell">ls -l &lt;percorso del probabile link simbolico&gt;
</code></pre><p>Eseguendo il comando sul tuo terminale, verranno visualizzate le proprietà del file. Nel risultato, se il primo carattere è una lettera L minuscola ("l"), allora il file/cartella è un link simbolico.</p><p>Vedrai anche una freccia (-&gt;) alla fine, che indica il file/cartella a cui punta il link.</p><p>Ci sono due metodi per rimuovere un link simbolico:</p><h3 id="come-usare-unlink-per-rimuovere-un-link-simbolico"><strong>Come usare unlink per rimuovere un link simbolico</strong></h3><p>La sintassi è:</p><pre><code class="language-shell">unlink &lt;percorso del link simbolico&gt;
</code></pre><p>Questo comando cancella il link simbolico, se il processo è valido.</p><p>Anche se il link simbolico è una cartella, non aggiungere "/", perché Linux assumerà che sia una cartella e <code>unlink</code> non può cancellare cartelle. </p><h3 id="come-usare-rm-per-rimuovere-un-link-simbolico"><strong>Come usare rm per rimuovere un link simbolico</strong></h3><p>Come abbiamo visto, un link simbolico è solo un altro file o un'altra cartella che punta a un file originale o a una cartella originale. Per rimuovere questa relazione, puoi rimuovere il file collegato.</p><p>Quindi, la sintassi è:</p><pre><code class="language-shell">rm &lt;percorso del link simbolico&gt;
</code></pre><p>Per esempio:</p><pre><code class="language-shell">rm trans.txt
rm james
</code></pre><p>Nota che cercare di eseguire <code>rm james/</code> darebbe un errore, perché Linux assumerà che "james/" sia una cartella. Ciò richiederebbe altre opzioni, come &nbsp;<code>r</code> e <code>f</code>. Ma non è quello che vogliamo. Un link simbolico può essere una cartella, ma a noi interessa solo il nome. </p><p>Il principale vantaggio di <code>rm</code> su <code>unlink</code> è che permette di rimuovere più link simbolici in una volta, come si può fare coi file.</p><h2 id="come-trovare-e-cancellare-i-link-interrotti"><strong>Come trovare e cancellare i link interrotti</strong></h2><p>I link simbolici interrotti sono quei link che puntano a un file o a una cartella il cui percorso è stato modificato o cancellato. </p><p>Per esempio, se "transactions.txt" si sposta da <code>/home/james</code> a <code>/home/james/personal</code>, il link "trans.txt" viene interrotto. Qualsiasi tentativo di accedere al file dà luogo al messaggio di errore "No such file or directory". Succede perché il link simbolico non ha un proprio contenuto. </p><p>Quando scopri link interrotti, puoi facilmente cancellare il file. Un modo semplice di trovare i link simbolici interrotti è:</p><pre><code class="language-shell">find /home/james -xtype l
</code></pre><p>Questo comando darà l'elenco di tutti i link simbolici interrotti nella cartella <code>james</code> – dai file alle cartelle alle sottocartelle. </p><p>Passando l'opzione <code>-delete</code> li cancellerai:</p><pre><code class="language-shell">find /home/james -xtype l -delete
</code></pre><h2 id="in-conclusione"><strong>In conclusione</strong></h2><p>I link simbolici sono una caratteristica interessante dei sistemi Linux e UNIX.</p><p>Puoi creare dei link simbolici facilmente accessibili per rinviare a file o cartelle che altrimenti non sarebbe comodo raggiungere. Con un po' di allenamento, capirai intuitivamente come funzionano, e renderanno la gestione dei tuoi file molto più efficiente.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Introduzione a Linux - Parte 2 ]]>
                </title>
                <description>
                    <![CDATA[ In questo corso completo, imparerai molti degli strumenti utilizzati ogni giorno sia dagli Amministratori di Sistema di Linux che dai milioni di persone che eseguono distribuzioni Linux come Ubuntu sui loro PC. Questo corso ti insegnerà come spostarti nelle interfacce utente grafiche di Linux e nel potente ecosistema dello strumento ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/introduzione-a-linux-parte-2/</link>
                <guid isPermaLink="false">641c16d902ca030845afbf4b</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Roberto Pauletto ]]>
                </dc:creator>
                <pubDate>Thu, 04 May 2023 13:52:21 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/03/linux2.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/introduction-to-linux-part-2/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">https://www.freecodecamp.org/news/introduction-to-linux-part-2/</a>
      </p><p>In questo corso completo, imparerai molti degli strumenti utilizzati ogni giorno sia dagli Amministratori di Sistema di Linux che dai milioni di persone che eseguono distribuzioni Linux come Ubuntu sui loro PC. Questo corso ti insegnerà come spostarti nelle interfacce utente grafiche di Linux e nel potente ecosistema dello strumento di riga di comando.</p><p>Questa è la seconda parte. Prima leggi la prima parte:</p><p><a href="https://www.freecodecamp.org/italian/news/introduzione-a-linux/">https://www.freecodecamp.org/italian/news/introduzione-a-linux/</a><br></p><h2 id="capitolo-18-principi-di-sicurezza-locale"><strong><strong>C</strong>apitolo<strong> 18: </strong>Principi di Sicurezza Locale</strong></h2><h3 id="obiettivi-formativi"><strong>Obiettivi Formativi</strong></h3><p>Entro la fine di questo capitolo, dovresti essere in grado di:</p><ul><li>Avere una buona comprensione delle migliori pratiche e strumenti per rendere i sistemi Linux il più sicuri possibile.</li><li>Comprendere i poteri e i pericoli dell'utilizzo dell'account root (superuser).</li><li>Utilizzare il comando <strong>sudo</strong> per eseguire operazioni privilegiate limitando al massimo i poteri avanzati.</li><li>Spiegare l'importanza dell'isolamento del processo e dell'accesso all'hardware.</li><li>Lavorare con le password, incluso come impostarle e modificarle.</li><li>Descrivere come proteggere il processo di avvio e le risorse hardware.</li></ul><h3 id="account-utente"><strong><strong>Account</strong> Utente</strong></h3><p>Il kernel Linux consente agli utenti correttamente autenticati di accedere a file e applicazioni. Mentre ogni utente è identificato da un numero intero univoco (ID utente o UID), un database separato associa un nome utente con ogni UID. Al momento della creazione dell'account, le nuove informazioni dell'utente vengono aggiunte al database utenti e la directory home dell'utente deve essere creata e popolata con alcuni file essenziali. Programmi di riga di comando come <strong>useradd</strong> e <strong>userdel</strong> e gli strumenti GUI vengono utilizzati per la creazione e la rimozione degli account.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/5e3a5828edd1ac8364f2f744f8fa1942/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/etcpasswd.png" class="kg-image" alt="User Accounts: /etc/passwd" width="974" height="457" loading="lazy"></figure><p>Per ogni utente, i seguenti sette campi vengono conservati nel file <strong><code>/etc/passwd</code></strong>:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Nome Campo</strong></th>
<th><strong>Dettagli</strong></th>
<th><strong>Osservazioni</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Username</strong></td>
<td>Nome di login utente</td>
<td>Dovrebbe essere lungo tra 1 e 32 caratteri</td>
</tr>
<tr>
<td><strong>Password</strong></td>
<td>Password utente (oppure il carattere <strong>x</strong> se la password è conservata nel file <strong><code>/etc/shadow</code></strong>) in formato crittografato</td>
<td>Non è mai mostrata in Linux quando viene digitata, mettendola al riparo da sguardi indiscreti</td>
</tr>
<tr>
<td><strong>User ID (UID)</strong></td>
<td>Ogni utente deve avere un ID (UID)</td>
<td>- UID 0 è riservato all'utente root<br>- Gli UID che vanno da 1 a 99 sono riservati per altri account predefiniti<br>- Gli UID che vanno da 100 a 999 sono riservati agli account di sistema e gruppi<br>- I normali utenti hanno UID che vanno da 1000 in su</td>
</tr>
<tr>
<td><strong>Group ID (GID)</strong></td>
<td>L'ID del gruppo primario (GID), conservato nel file <strong><code>/etc/group</code></strong></td>
<td>È stato trattato in dettaglio nel capitolo sui <em>Processi</em></td>
</tr>
<tr>
<td><strong>User Info</strong></td>
<td>Campo opzionale, consente l'inserimento di informazioni supplementari circa l'utente, come il suo nome</td>
<td>Per esempio:&nbsp;<strong>Rufus T. Firefly</strong></td>
</tr>
<tr>
<td><strong>Directory Home</strong></td>
<td>Il percorso assoluto della posizione della directory home dell'utente</td>
<td>Per esempio:&nbsp;<strong><code>/home/rtfirefly</code></strong></td>
</tr>
<tr>
<td><strong>Shell</strong></td>
<td>Il percorso assoluto della posizione della shell predefinita dell'utente</td>
<td>Per esempio: <strong><code>/bin/bash</code></strong></td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="tipi-di-account"><strong>Tipi di <strong> Account</strong></strong></h3><p>Per impostazione predefinita, Linux distingue tra diversi tipi di account al fine di isolare i processi e i carichi di lavoro. Linux ha quattro tipi di account:</p><ul><li>root</li><li>Sistema</li><li>Normale</li><li>Rete</li></ul><p>Per un ambiente di lavoro sicuro, si consiglia di concedere i privilegi minimi possibili e necessari per gli account e rimuovere gli account inattivi. L'utilità <strong>last</strong>, che mostra l'ultima volta che ogni utente ha effettuato l'accesso al sistema, può essere utilizzata per aiutare a identificare account potenzialmente inattivi che sono candidati per la rimozione dal sistema.</p><p>Tieni presente che le pratiche che usi sui sistemi aziendali multiutente sono più severe delle pratiche che puoi utilizzare sui sistemi desktop personali che influiscono solo sull'utente casuale. Ciò è particolarmente vero per quanto riguarda la sicurezza. Speriamo di mostrarti pratiche applicabili ai server aziendali che puoi utilizzare su tutti i sistemi, ma comprendiamo che puoi scegliere di rendere meno rigide queste regole sul tuo sistema personale..</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/c74352d16a50f0bb625173f8f9c2abdb/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/lastoutput.png" class="kg-image" alt="last Utility" width="849" height="472" loading="lazy"><figcaption>L'utility last</figcaption></figure><h3 id="comprendere-l-account-root"><strong>Comprendere l'Account root</strong></h3><p><strong>root</strong> è l'account più privilegiato su un sistema Linux/Unix. Questo account ha la possibilità di gestire tutti gli aspetti dell'amministrazione del sistema, incluso l'aggiunta di account, la modifica delle password degli utenti, l'esame di file di log, l'installazione di software e così via. È necessario procedere con la massima cura quando si utilizza questo account. Non ha restrizioni di sicurezza imposte.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/36cc69851c8f812250c33fd23b642507/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch18_screen05.jpg" class="kg-image" alt="Tux the Pinguin with a crown and scepter" width="230" height="250" loading="lazy"></figure><p>Quando si accede come root o si agisce come root, il prompt della shell mostra '#' (se stai usando bash e non hai personalizzato il prompt, come abbiamo discusso in precedenza). Questa convenzione ha lo scopo di fungere da monito per te del potere assoluto di questo account.</p><h3 id="operazioni-che-richiedono-privilegi-di-root">Operazioni che Richiedono Privilegi di root</h3><p>I privilegi di root sono richiesti per eseguire operazioni come:</p><ul><li>Creazione, rimozione e gestione degli account utente</li><li>Gestione dei pacchetti software</li><li>Rimozione o modifica dei file di sistema</li><li>Riavvio dei servizi di sistema.</li></ul><p>Gli utenti di account normali delle distribuzioni Linux potrebbero essere autorizzati a installare pacchetti software, aggiornare alcune impostazioni, utilizzare alcuni dispositivi periferici e applicare vari tipi di modifiche al sistema. Tuttavia, è richiesto il privilegio di root per eseguire attività di amministrazione come il riavvio della maggior parte dei servizi, l'installazione manuale di pacchetti e la gestione di parti del filesystem che si trovano al di fuori delle directory dell'utente normale.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/aee73bd08cabfc1b26a7f7927df8317d/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch018_screen8.jpg" class="kg-image" alt="LFS01_ch018_screen8" width="472" height="305" loading="lazy"><figcaption>Operazioni che Richiedono Privilegi di root</figcaption></figure><h3 id="operazioni-che-non-richiedono-privilegi-di-root">Operazioni Che Non Richiedono Privilegi di root</h3><p>Un utente con account normale può eseguire alcune operazioni che richiedono autorizzazioni speciali; tuttavia, la configurazione del sistema deve consentire l'esercizio di tali funzionalità.</p><p><strong><a href="https://it.wikipedia.org/wiki/Setuid_e_setgid">SUID</a></strong> (<strong>S</strong>et owner <strong>U</strong>ser <strong>ID</strong> upon execution - simile alla funzionalità Windows "esegui come") è un tipo speciale di permesso fornito a un file. L'uso di SUID fornisce autorizzazioni temporanee a un utente per eseguire un programma con le autorizzazioni del <em>proprietario</em> del file (che potrebbe essere root) invece delle autorizzazioni detenute dall'<em>utente</em>.</p><p>La tabella fornisce esempi di operazioni che non richiedono privilegi di root:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Operazioni che non richiedono privilegi di root</strong></th>
<th><strong>Esempi di questa operazione</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>Esecuzione di un client di rete</td>
<td>Condivisione di un file tramite rete</td>
</tr>
<tr>
<td>Utilizzo di dispositivi come le stampanti</td>
<td>Stampa tramite rete</td>
</tr>
<tr>
<td>Operazioni su file per i quali l'utente ha autorizzazioni adeguate per accedere</td>
<td>Accesso ai file a cui puoi accedere o condivisione di dati tramite rete</td>
</tr>
<tr>
<td>Esecuzione di applicazioni SUID-root</td>
<td>Esecuzione di programmi come <strong>passwd</strong></td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="sudo-e-su-a-confronto"><strong><strong>sudo </strong>e<strong> su</strong> a Confronto</strong></h3><p>In Linux puoi usare sia <strong>su</strong> che <strong>sudo</strong> per concedere temporaneamente l'accesso come root a un utente normale. Tuttavia, questi metodi sono in realtà abbastanza diversi. Di seguito sono elencate le differenze tra i due comandi:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>su</strong></th>
<th><strong>sudo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>Quando si aumentano i privilegi, è necessario inserire la password di root. Non si dovrebbe mai dare la password di root a un utente normale, mai e poi mai.</td>
<td>Quando si aumentano i privilegi, è necessario inserire la password dell'utente e non la password di root.</td>
</tr>
<tr>
<td>Una volta che un utente si eleva all'account root utilizzando <strong>su</strong>, può fare tutto ciò che l'utente root può fare per tutto il tempo che l'utente desidera, senza che gli venga chiesta nuovamente la password.</td>
<td>Offre più funzionalità ed è considerato più sicuro e più configurabile. Quello che l'utente può fare può essere esattamente controllato e limitato con precisione. Per impostazione predefinita, l'utente dovrà sempre continuare a dare la propria password per eseguire ulteriori operazioni con <strong>sudo</strong> o può evitare di farlo per un intervallo di tempo configurabile.</td>
</tr>
<tr>
<td>Il comando ha funzionalità di log limitate.</td>
<td>Il comando ha funzionalità di log dettagliate.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="funzionalit-di-sudo">Funzionalità di sudo</h3><p><strong><strong><strong><strong>sudo </strong></strong></strong></strong>ha la capacità di tenere traccia dei tentativi falliti di ottenere l'accesso a root. L'autorizzazione per gli utenti all'utilizzo di <strong>sudo</strong> si basa sulle informazioni di configurazione conservate nel file <strong><code>/etc/sudoers</code></strong> e nella directory &nbsp;<strong><code>/etc/sudoers.d</code></strong>.</p><p>Un messaggio come il seguente apparirebbe in un file di log del sistema (in genere <strong>/var/log/secure</strong>) Quando si cerca di eseguire <strong>sudo</strong> per <strong>badperson</strong> senza ottenere una corretta autenticazione per l'utente:<br></p><p><strong><strong><strong><strong><code>badperson : user NOT in sudoers ; TTY=pts/4 ; PWD=/var/log ; USER=root ; COMMAND=/usr/bin/tail secure</code></strong></strong></strong></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/221b78f7941bfa4846b7253289053ded/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch18_screen14b.jpg" class="kg-image" alt="sudo Features" width="273" height="240" loading="lazy"><figcaption>Funzionalità di sudo</figcaption></figure><h3 id="il-file-sudoers"><strong>Il File<strong> sudoers</strong></strong></h3><p>Ogniqualvolta <strong>sudo</strong> viene invocato, si attiva una ricerca nel file <strong><code>/etc/sudoers</code></strong> e nei file contenuti in <strong><code>/etc/sudoers.d</code></strong> per determinare se l'utente ha il diritto di utilizzare <strong>sudo</strong> e qual è la portata dei suoi privilegi. Richieste da utenti sconosciuti e richieste per eseguire operazioni non consentite all'utente anche con <strong>sudo</strong> vengono segnalate. La struttura di base delle voci in questi file è:</p><p><strong>chi dove = (per conto di) cosa</strong></p><p><strong><strong><strong><strong><code>/etc/sudoers</code></strong></strong></strong></strong> contiene molta documentazione sulla personalizzazione. La maggior parte delle distribuzioni Linux ora preferisce aggiungere un file nella directory <strong><code>/etc/sudoers.d</code></strong> con un nome che corrisponde allo username. Questo file contiene la configurazione <strong>sudo</strong> del singolo utente, mentre si dovrebbe lasciare inalterato il file di configurazione principale, eccetto per quanto riguarda le modifiche che riguardano tutti gli utenti.</p><p>Dovresti modificare uno di questi file di configurazione utilizzando <strong>visudo</strong>, che garantisce che solo una persona alla volta stia modificando il file, che abbia le autorizzazioni adeguate, e rifiuta di scrivere il file ed uscire se ci sono errori di sintassi nelle modifiche apportate. Le modifiche possono essere eseguite con un comando come quelli seguenti:</p><p><strong><strong><strong><strong><strong><strong><code># visudo /etc/sudoers</code></strong></strong></strong></strong></strong></strong><br><strong><strong><strong><strong><strong><strong><code># visudo -f /etc/sudoers.d/student</code></strong></strong></strong></strong></strong></strong></p><p>L'editor specifico effettivo che verrà aperto dipenderà dall'impostazione della variabile di ambiente <strong><code>EDITOR</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/be9e3859dfc9da162c2aee89c1bb83f3/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/sudoerssuse.png" class="kg-image" alt="The sudoers File" width="837" height="806" loading="lazy"><figcaption>Il File sudoers</figcaption></figure><h3 id="registrare-i-comandi"><strong>Registrare i Comandi</strong></h3><p>Per impostazione predefinita, i comandi <strong>sudo</strong> effettuati ed eventuali errori sono registrati nel file <strong><code>/var/log/auth.log</code></strong> per quanto riguarda la famiglia di distribuzioni Debian, e in <strong><code>/var/log/messages</code></strong> e/o <strong><code>/var/log/secure</code></strong> negli altri sistemi. Questa è una misura di sicurezza importante per consentire il monitoraggio e la responsabilità dell'uso di <strong>sudo</strong>. Una voce tipica del messaggio di registrazione contiene:</p><ul><li>Nome utente del chiamante</li><li>Informazioni sul terminale</li><li>Directory di lavoro</li><li>Account utente chiamato</li><li>Comando con argomenti</li></ul><p>L'esecuzione di un comando come <strong><code>sudo whoami</code></strong> viene registrato come voce nel file di log in questo modo:</p><p><strong><strong><strong><strong><strong><strong><code>Dec 8 14:20:47 server1 sudo: op : TTY=pts/6 PWD=/var/log USER=root COMMAND=/usr/bin/whoami</code></strong></strong></strong></strong></strong></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/e391446157bf3f88641e613c9e2a55f0/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/varlogsecure.png" class="kg-image" alt="varlogsecure" width="865" height="428" loading="lazy"><figcaption>Registrazione dei Comandi</figcaption></figure><h3 id="isolamento-del-processo"><strong>Isolamento del <strong>Processo</strong></strong></h3><p>Linux è considerato più sicuro di molti altri sistemi operativi in quanto i processi sono isolati in modo naturale l'uno dall'altro. Un processo normalmente non può accedere alle risorse di un altro processo, anche se questo processo è in esecuzione con gli stessi privilegi utente. Linux quindi rende difficile (anche se certamente non impossibile) ai virus e ai tentativi di penetrare la sicurezza, l'accesso e l'attacco casuale a risorse in un sistema.</p><p>Sono stati aggiunti recentemente altri meccanismi di sicurezza che limitano il rischio ulteriormente, tra i quali:</p><ul><li>Gruppi di Controllo (cgroup)<br>Consentono agli amministratori di sistema di raggruppare processi e associare risorse finite a ciascun cgroup.</li><li>Contenitori<br>Rendono possibile l'esecuzione di più sistemi Linux isolati (contenitori) su un singolo sistema facendo affidamento ai cgroup.</li><li>Virtualizzazione<br>L'hardware viene emulato in modo tale che non solo i processi possano essere isolati, ma interi sistemi possano essere eseguiti contemporaneamente come ospiti isolati (macchine virtuali) su un host fisico.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/ab1acbfb43d22b02e75c9a7f46e50c27/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch18_screen18.jpg" class="kg-image" alt="Process Isolation" width="461" height="339" loading="lazy"><figcaption>Isolamento di Processi</figcaption></figure><h3 id="accesso-ai-dispositivi-hardware"><strong>Accesso ai Dispositivi <strong>Hardware</strong></strong></h3><p>Linux limita all'utente l'accesso a dispositivi hardware non di rete in modo estremamente simile all'accesso ai normali file. Le applicazioni interagiscono coinvolgendo il livello del filesystem (che è indipendente dall'effettivo dispositivo o hardware nel quale risiede). Questo livello aprirà quindi uno speciale file di dispositivo (spesso chiamato nodo di dispositivo) nella directory <strong><strong><strong><strong><code>/dev</code></strong></strong></strong></strong> che corrisponde al dispositivo al quale si accede. Ciascun file speciale di dispositivo ha normali permessi per proprietario, gruppo e altri. La sicurezza è applicata in modo naturale, allo stesso modo dell'accesso a file standard.</p><p>Gli hard disk, per esempio, sono rappresentati come &nbsp;<strong><strong><strong><strong><code>/dev/sd*</code></strong></strong></strong>. </strong>Un utente root può leggere e scrivere sul disco in modo grezzo, ad esempio eseguendo qualcosa come:</p><p><strong><strong><strong><strong><strong><strong><code># echo hello world &gt; /dev/sda1</code></strong></strong></strong></strong></strong></strong></p><p>I permessi standard così come sono mostrati nella videata qui sotto, rendono impossibile agli utenti normali fare questo. La scrittura verso un dispositivo fatta in quel modo può facilmente obliterare il filesystem che vi risiede in un modo che non consente una riparazione senza grossi sforzi, posto che ci si riesca. La normale lettura e scrittura di file su hard disk dalle applicazioni è fatta a un livello più alto tramite il filesystem e mai con accesso diretto al nodo di dispositivo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/f329a3cc179860717d2d0252d7a2a8c2/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/lsdevsdcentos.png" class="kg-image" alt="Hardware Device Access" width="865" height="314" loading="lazy"><figcaption>Accesso ai Dispositivi Hardware</figcaption></figure><h3 id="mantenere-il-sistema-aggiornato"><strong>Mantenere il Sistema Aggiornato</strong></h3><p>Quando sono individuati i problemi di sicurezza sia sul kernel Linux &nbsp;che su applicazioni e librerie, le distribuzioni Linux hanno una buona reputazione di agire velocemente, applicando le risoluzioni per tutti i sistemi, aggiornando i loro repository software e inviando notifiche che consigliano l'aggiornamento immediato. La stessa cosa vale anche per la risoluzione di bug e miglioramenti di prestazioni che non sono legati alla sicurezza.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/5e74db8d93ac146d9d1fdcbf8b1c9a05/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch018_screen20.jpg" class="kg-image" alt="Timely System Update" width="173" height="202" loading="lazy"></figure><p>Tuttavia, è ben noto che molti sistemi non vengono aggiornati con sufficiente frequenza e problemi per i quali esiste già la soluzione rimangono nei computer per molto tempo; questo è particolarmente vero con sistemi operativi proprietari dove gli utenti non sono informati o non si fidano della politica di applicazione delle risoluzioni dei problemi da parte dei gestori delle distribuzioni, in quanto talvolta gli aggiornamenti possono causare nuovi problemi e rompere cose che prima funzionavano. La maggior parte dei vettori di attacco più efficaci sfruttano buchi di sicurezza per i quali è già pronta la risoluzione ma non è stata universalmente distribuita.</p><p>Quindi la migliore pratica per trarre vantaggio del meccanismo di aggiornamenti automatici della tua distribuzione Linux è di applicarli tempestivamente, mai rimandarli. È estremamente raro che tali aggiornamenti possano causare nuovi problemi.</p><h3 id="come-sono-conservate-le-password"><strong>Come Sono Conservate le Password</strong></h3><p>Il sistema verifica l'autenticità e l'identità usando le credenziali utente.</p><p>In origine, le password criptate erano conservate nel file <strong><strong><strong><strong><strong><strong><code>/etc/passwd</code></strong></strong></strong></strong></strong></strong>, che era leggibile da tutti. Pertanto era piuttosto facile scoprire le password.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/d8b630982847322e8a30865f4af85767/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch18_screen21.jpg" class="kg-image" alt="How Passwords are Stored" width="446" height="464" loading="lazy"><figcaption>Come Sono Conservate le Password</figcaption></figure><p>Nei moderni sistemi, le password sono in realtà conservate in forma criptata in un file secondario chiamato <strong><strong><strong><strong><code>/etc/shadow</code></strong></strong></strong></strong>. Solo chi ha accesso come root può leggere o modificare questo file.</p><h3 id="algoritmo-della-password"><strong>Algoritmo della <strong>Password</strong></strong></h3><p>La protezione delle password è diventato un elemento cruciale di sicurezza. La maggior parte delle distribuzioni Linux fa affidamento su un moderno algoritmo di codifica delle password chiamato SHA-512 (Secure Hashing Algorithm 512 bits), sviluppato dall'Agenzia per la Sicurezza Nazionale degli Stati Uniti per la codifica delle password.</p><p>L'algoritmo SHA-512 è largamente usato per applicazione di sicurezza e protocolli. Questi includono TLS, SSL, PHP, SSH, S/MIME e IPSec. SHA-512 è uno degli algoritmi più testati.</p><p>Per esempio, se desideri fare esperimenti con la codifica SHA-512, la parola "test" può essere codificata usando il programma <strong><strong><strong><strong><strong><strong>sha512sum</strong></strong></strong></strong></strong></strong> per produrre il formato SHA-512 (vedi sotto):</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/2b48e41c1608e121d66b9dbaf424a6c6/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/sha512rhel7.png" class="kg-image" alt="Password Encryption: sha512sum" width="685" height="105" loading="lazy"><figcaption>Codifica Password: sha512sum</figcaption></figure><h3 id="buone-pratiche-per-le-password"><strong>Buone Pratiche per le Password</strong></h3><p>I professionisti IT seguono parecchie buone pratiche per mettere in sicurezza i dati e la password di ciascun utente.</p><ul><li>La durata della password è un metodo per assicurarsi che l'utente venga avvisato quando è ora di creare una nuova password, trascorso uno specifico periodo di tempo. Questo assicura che le password, se scoperte, saranno utilizzabili solo per un periodo limitato di tempo. Questa funzionalità è implementata usando <strong><strong><strong><strong><strong><strong>chage</strong></strong></strong></strong></strong></strong>, che configura l'informazione di password in scadenza per un utente.</li><li>Un altro metodo è di forzare gli utenti a creare password complesse usando i moduli <strong><strong><strong><strong>PAM</strong></strong></strong> </strong>(<strong><strong><strong><strong>P</strong></strong></strong></strong>luggable <strong><strong><strong><strong>A</strong></strong></strong></strong>uthentication <strong><strong><strong><strong>M</strong></strong></strong></strong>odules). PAM può essere configurato automaticamente per verificare che una password creata o modificata usando l'utility <strong><strong><strong><strong>passwd </strong></strong></strong></strong>sia sufficientemente complessa. La configurazione di PAM è implementata usando una libreria chiamata &nbsp;<strong><strong><strong><strong><strong><strong>pam_cracklib.so</strong></strong></strong></strong></strong></strong>, che può essere rimpiazzata da <strong><strong><strong><strong><strong><strong>pam_passwdqc.so</strong></strong></strong></strong></strong></strong> per potere usufruire di più opzioni.</li><li>È anche possibile installare un programma di cracking di password come &nbsp;<a href="http://www.openwall.com/john/">John The Ripper</a>, per mettere in sicurezza il file delle password e per rilevare voci di password deboli. Si raccomanda di ottenere un'autorizzazione scritta prima di installare detto strumento su qualsiasi sistema se non di proprietà.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/0ccd66e7a1088ab8450cac69aa9918fb/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/chagesuse.png" class="kg-image" alt="Using chage" width="754" height="277" loading="lazy"><figcaption>Utilizzare chage</figcaption></figure><h3 id="richiedere-password-per-il-boot-loader"><strong>Richiedere Password per il <strong>Boot Loader</strong></strong></h3><p>Puoi mettere in sicurezza il processo di avvio con una password per evitare che qualcuno possa saltare il passaggio di autenticazione utente. Questo può funzionare assieme alla protezione con password del BIOS. Nota che anche se il solo uso di una password per il bootloader impedirà a un utente di modificare la configurazione del bootloader durante il processo di avvio, <strong>non </strong>impedirà a un utente l'avvio tramite un media alternativo, come dischi ottici e chiavi USB. Pertanto dovrebbe essere usata assieme a una password del BIOS per una protezione completa.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/e74988af521d832ff71a899660352371/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/password.png" class="kg-image" alt="Sign saying: Password Required" width="550" height="299" loading="lazy"></figure><p>Per il metodo di avvio meno recente GRUB 1, era relativamente facile impostare una password per <strong><strong><strong><strong>grub</strong></strong></strong></strong>.<strong><strong><strong><strong> </strong></strong></strong></strong>Tuttavia, per la versione GRUB 2 le cose sono diventate più complicate, anche se si ha maggiore flessibilità e si può trarre vantaggio da funzionalità più avanzate come password specifiche per utente (che possono anche essere quelle del loro normale login).</p><p>Inoltre non modificherai mai <strong><strong><strong><strong><strong><strong>grub.cfg</strong></strong></strong></strong></strong></strong> direttamente; invece puoi modificare i file di configurazione in <strong><strong><strong><strong><strong><strong><code>/etc/grub.d</code></strong></strong></strong></strong></strong></strong> e <strong><strong><strong><strong><strong><strong><code>/etc/defaults/grub</code></strong></strong></strong></strong></strong></strong>, poi eseguire <strong><strong><strong><strong><code>update-grub</code></strong></strong></strong></strong>, oppure <code><strong><strong><strong><strong>grub2-mkconfig</strong></strong></strong></strong></code> e salvare il nuovo file di configurazione.</p><p>Per saperne di più, leggi il post seguente (in inglese): <em><em><em><em><a href="https://help.ubuntu.com/community/Grub2/Passwords" rel="noopener">"GRUB 2 Password Protection"</a></em></em></em></em>.</p><h3 id="vulnerabilit-dell-hardware"><strong>Vulnerabilità dell'H<strong>ardware</strong></strong></h3><p>Quando l'hardware è accessibile fisicamente, la sicurezza può essere compromessa da:</p><ul><li>Key logging<br>La registrazione in tempo reale dell'attività di un computer, compreso i tasti premuti. I dati catturati possono essere salvati localmente oppure trasmessi a macchine remote.</li><li>Network sniffing<br>La cattura e la visualizzazione del livello dati dei pacchetti sulla tua rete.</li><li>Avvio da un disco di ripristino o una distribuzione live</li><li>Rimontaggio e modifica del contenuto del disco.</li></ul><p>La politica di sicurezza della tua struttura IT dovrebbe partire dai requisiti su come accedere fisicamente in modo corretto a server e workstation. L'accesso fisico a un sistema rende possibile per gli aggressori di sfruttare diversi vettori di attacco, in modo tale che tutte le precauzioni a livello di sistema operativo diventino irrilevanti.</p><p>Le linee guida della sicurezza sono:</p><ul><li>Bloccare workstation e server.</li><li>Proteggere i punti di collegamento alla rete in modo tale che possano accedere solo persone di tua fiducia.</li><li>Proteggere le tue tastiere dove vengono digitate le password per assicurarsi che le tastiere non possano essere manomesse.</li><li>Assicurarsi che una password protegga il BIOS in modo tale che il sistema non possa essere avviato con una chiave USB o una distribuzione live su DVD.</li></ul><p>Per computer usati da un solo utente e quelli in un ambiente domestico alcune delle protezioni sopra citate (come prevenire l'avvio da media rimovibili) possono essere eccessive e puoi evitare di implementarle. Tuttavia se nel tuo sistema ci sono informazioni sensibili che richiedono una accurata protezione dovresti adottare le linee guida sopra citate oppure toglierle dal computer.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/a45dcc426b70817110e0d810f4df83a7/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch18_screen27.jpg" class="kg-image" alt="Hardware Vulnerability" width="389" height="154" loading="lazy"><figcaption>Vulnerabilità Hardware</figcaption></figure><h3 id="vulnerabilit-software"><strong>Vulnerabilità <strong>Software</strong></strong></h3><p>Come tutti i software, gli hacker trovano occasionalmente punti deboli nell'ecosistema Linux. La forza di Linux (e della comunità open source in generale) è la velocità con cui tali vulnerabilità sono esposte e riparate. La copertura specifica delle vulnerabilità va oltre lo scopo di questo corso, ma la commissione di discussione può essere utilizzata per svolgere ulteriori discussioni.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/3ece571940430dd1c4cef1bcacfbc8c7/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/soft_vuln.png" class="kg-image" alt="Cartoon penguin opening the door" width="236" height="252" loading="lazy"></figure><h2 id="riepilogo-del-capitolo"><strong>Riepilogo del Capitolo</strong></h2><p>Hai completato il Capitolo 18. Riassumiamo i concetti chiave trattati:</p><ul><li>L'account di root ha autorità sull'intero sistema.</li><li>I privilegi di root possono essere richiesti per compiti come il riavvio di servizi, l'installazione manuale di pacchetti e la gestione di parti del filesystem che sono al di fuori della directory home.</li><li>Per poter esegure qualsiasi operazione con alti privilegi come modifiche a livello di sistema, devi usare &nbsp;<strong><strong><strong><strong>su</strong></strong></strong></strong> oppure <strong><strong><strong><strong><strong><strong>sudo</strong></strong></strong></strong></strong></strong>.</li><li>La chiamata a <strong><strong><strong><strong><strong><strong>sudo</strong></strong></strong></strong></strong></strong> attiva una ricerca nel file &nbsp;<strong><strong><strong><strong><strong><strong><code>/etc/sudoers</code></strong></strong></strong></strong></strong></strong>, oppure nella directory <strong><strong><strong><strong><strong><strong><code>/etc/sudoers.d</code></strong></strong></strong></strong></strong></strong>, che prima controlla che l'utente chiamante possa usare <strong><strong><strong><strong><strong><strong>sudo</strong></strong></strong></strong></strong></strong> e che venga usato all'interno dell'ambito consentito.</li><li>Una delle più potenti funzionalità di <strong><strong><strong><strong><strong><strong>sudo</strong></strong></strong></strong></strong></strong> è la capacità di registrare tentativi falliti per l'acquisizione di accesso a root. Per impostazione predefinita, i comandi <strong><strong><strong><strong>sudo</strong></strong></strong></strong> e i fallimenti sono registrati in <strong><strong><strong><strong><code>/var/log/auth.log</code></strong></strong></strong></strong> per quanto riguarda la famiglia Debian e in <strong><strong><strong><strong><code>/var/log/messages</code></strong></strong></strong></strong> nelle altre famiglie di distribuzioni.</li><li>Un processo non può accedere alle risorse di un altro processo, anche se quel processo è in esecuzione con gli stessi privilegi utente.</li><li>Tramite l'uso delle credenziali utente, il sistema verifica autenticità e identità.</li><li>L'algoritmo SHA-512 viene usato tipicamente per codificare le password. Possono essere codificate ma non decodificate.</li><li>Si possono configurare i Pluggable Authentication Modules (PAM) per verificare automaticamente che le password create o modificate con l'utility <strong><strong><strong><strong>passwd</strong></strong></strong></strong> siano sufficientemente complesse (può anche essere configurato quanto abbastanza complesse debbano essere).</li><li>La politica di sicurezza della tua struttura IT dovrebbe partire dai requisiti su come mettere propriamente in sicurezza l'accesso fisico a server e workstations.</li><li>Mantenere i tuoi sistemi aggiornati è un importante passo per evitare attacchi di sicurezza</li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Introduzione a Linux ]]>
                </title>
                <description>
                    <![CDATA[ Sommario  * Capitolo 1: Le Famiglie di Distribuzioni Linux  * Capitolo 2: Filosofia e Concetti di Linux  * Capitolo 3: Le Basi di Linux e l'Avvio del Sistema  * Capitolo 4: Interfaccia grafica  * Capitolo 5: Configurazione del Sistema dall'Interfaccia Grafica  * Capitolo 6: ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/introduzione-a-linux/</link>
                <guid isPermaLink="false">6401a60451d6f8065ddafff8</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Roberto Pauletto ]]>
                </dc:creator>
                <pubDate>Thu, 04 May 2023 13:52:11 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/03/linux.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/introduction-to-linux/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Introduction to Linux</a>
      </p><h2 id="sommario">Sommario</h2><ul><li><a href="#capitolo-1-le-famiglie-di-distribuzioni-linux">Capitolo 1: Le Famiglie di Distribuzioni Linux</a></li><li><a href="#capitolo-2-filosofia-e-concetti-di-linux">Capitolo 2: Filosofia e Concetti di Linux</a></li><li><a href="#capitolo-3-le-basi-di-linux-e-l-avvio-del-sistema">Capitolo 3: Le Basi di Linux e l'Avvio del Sistema</a></li><li><a href="#capitolo-4-interfaccia-grafica">Capitolo 4: Interfaccia grafica</a></li><li><a href="#capitolo-5-configurazione-del-sistema-dall-interfaccia-grafica">Capitolo 5: Configurazione del Sistema dall'Interfaccia Grafica</a></li><li><a href="#capitolo-6-applicazioni-comuni">Capitolo 6: Applicazioni Comuni</a></li><li><a href="#capitolo-7-operazioni-dalla-riga-di-comando">Capitolo 7: Operazioni dalla riga di comando</a></li><li><a href="#capitolo-8-trovare-la-documentazione-di-linux">Capitolo 8: Trovare la Documentazione Linux</a></li><li><a href="#capitolo-9-processi">Capitolo 9: Processi</a></li><li><a href="#capitolo-10-operazioni-sui-file">Capitolo 10: Operazioni sui File</a></li><li><a href="#capitolo-11-editor-di-testo">Capitolo 11: Editor di Testo</a></li><li><a href="#capitolo-12-ambiente-dell-utente">Capitolo 12: Ambiente dell'Utente</a></li><li><a href="#capitolo-13-manipolare-i-file">Capitolo 13: Manipolare i File</a></li><li><a href="#capitolo-14-operazioni-di-rete">Capitolo 14: Operazioni di Rete</a></li><li><a href="#capitolo-15-la-shell-bash-e-lo-scripting-di-base">Capitolo 15: La Shell Bash e lo Scripting di Base</a></li><li><a href="#capitolo-16-altro-sullo-scripting-di-shell-bash">Capitolo 16: Altro sullo Scripting di Shell Bash</a></li><li><a href="#capitolo-17-stampare">Capitolo 17: Stampare</a></li></ul><p>Se sei alle prime armi con Linux, questo corso è per te.</p><p>In questo corso completo, imparerai molti sugli strumenti utilizzati ogni giorno sia dagli amministratori di sistema di Linux che dai milioni di persone che eseguono distribuzioni Linux come Ubuntu sui loro PC. Questo corso ti insegnerà come spostarti nelle Interfacce Grafiche Utente di Linux e nel potente ecosistema dello strumento di riga di comando.</p><p>Il contenuto di questo corso è stato sviluppato dalla Linux Foundation (lo chiamano LFS101x). Ho seguito il loro corso principalmente basato su testo e l'ho trasformato in un corso basato su video.</p><p>Puoi leggere la versione di testo del corso proprio qui o puoi guardare la versione video (in lingua inglese) del corso sul canale YouTube di freecodecamp.org (durata di 6 ore).</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.17977528089888%;" class="fluid-width-video-wrapper">
            <iframe width="356" height="200" src="https://www.youtube.com/embed/sWbUDq4S6Y8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="Introduction to Linux – Full Course for Beginners" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><p>Questo tutorial rientra nella licenza <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons 4.0</a>.</p><p>Quindi, se vuoi seguire la versione scritta del corso, continua a leggere!</p><h2 id="capitolo-1-le-famiglie-di-distribuzioni-linux">Capitolo 1: Le Famiglie di Distribuzioni Linux</h2><p>Entro la fine di questo capitolo, dovresti essere in grado di:</p><ul><li>Descrivere l'ambiente software richiesto per questo corso.</li><li>Descrivere le tre principali famiglie di distribuzione Linux.</li></ul><h3 id="requisiti-del-corso">Requisiti del corso</h3><p>Per beneficiare pienamente di questo corso, dovrai installare almeno una distribuzione Linux (se non hai già familiarità con il termine distribuzione, in quanto si riferisce a Linux, presto l'avrai!).</p><p>Stai per imparare alcuni dettagli sulle molte distribuzioni Linux disponibili. Poiché ci sono letteralmente centinaia di distribuzioni, non le tratterò tutte in questo corso. Viceversa mi concentrerò sulle tre principali famiglie di distribuzione.</p><p>Le famiglie e le distribuzioni che le rappresentano che prenderemo in esame sono:</p><ul><li><strong>Famiglia di Sistemi Red Hat</strong> (tra cui <strong>CentOS</strong> e <strong>Fedora</strong>)</li><li><strong>Famiglia di Sistemi SUSE</strong> (incluso <strong>openSUSE</strong>)</li><li><strong>Famiglia di Sistemi Debian</strong> (inclusi <strong>Ubuntu</strong> e <strong>Linux Mint</strong>).</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/fe27a9c47f2e272c238dc227cb749528/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/gnomedts.png" class="kg-image" alt="Three screenshots showing Ubuntu, CentOS, and OpenSUSE desktops" width="1281" height="809" loading="lazy"><figcaption>Desktop di Ubuntu, CentOS e openSUSE</figcaption></figure><h3 id="focus-sulle-su-tre-principali-famiglie-di-distribuzione-linux">Focus sulle su tre principali famiglie di distribuzione Linux</h3><p>Sto per dirti qualcosa di più su Red Hat, SUSE e Debian. Mentre questo corso si concentra su queste tre principali famiglie di distribuzione Linux, fintanto che ci sono collaboratori di talento, le famiglie di distribuzioni e le distribuzioni all'interno di queste famiglie continueranno a cambiare e crescere. Le persone vedono un bisogno e sviluppano configurazioni e utility per rispondere a tale necessità. A volte quello sforzo crea una distribuzione completamente nuova di Linux. A volte, sfrutta una distribuzione esistente per espandere i membri di una famiglia esistente.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/1d8c97abd237dcd44a5fe5464f6521ac/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/chapter01_The_Linux_Kernel_Distribution_Families_and_Individual_Distributions.png" class="kg-image" alt="The Linux Kernel Distribution Families and Individual Distributions" width="763" height="472" loading="lazy"><figcaption>Le Famiglie di Distribuzioni del Kernel Linux e le Singole Distribuzioni</figcaption></figure><h3 id="la-famiglia-red-hat">La famiglia Red Hat</h3><p>Red Hat Enterprise Linux (o RHEL [pronunciato "rel"]) capeggia la famiglia che include CentOS, CentOS Stream, Fedora e Oracle Linux.</p><p>Fedora ha una stretta relazione con RHEL e contiene significativamente più software rispetto alla versione Enterprise (aziendale) di Red Hat. Uno dei motivi è che una comunità diversificata è coinvolta nella costruzione di Fedora, con molti collaboratori che non lavorano per Red Hat. Inoltre, viene utilizzato come piattaforma di test per future versioni RHEL.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/8463dfd1fc8eb8ba7ff06731abc38382/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/chapter01_The_Red_Hat_Family.png" class="kg-image" alt="The Red Hat Family" width="315" height="384" loading="lazy"><figcaption>La Famiglia Red Hat</figcaption></figure><p>In questo corso, useremo principalmente CentOS Stream dalla famiglia Red Hat.</p><p>La versione di base di CentOS è anche praticamente identica a RHEL, la distribuzione Linux più popolare negli ambienti aziendali. Tuttavia, CentOS 8 non ha più aggiornamenti programmati. Al suo posto c'è CentOS 8 Stream.</p><h3 id="fatti-chiave-sulla-famiglia-red-hat">Fatti chiave sulla famiglia Red Hat</h3><p>Alcuni dei fatti chiave sulla famiglia di distribuzione Red Hat sono:</p><ul><li>Fedora funge da piattaforma di test a monte per RHEL.</li><li>CentOS è un clone stretto di RHEL, mentre Oracle Linux è principalmente una copia con alcune modifiche.</li><li>Supporta piattaforme hardware come Intel X86, ARM, Itanium, PowerPC e IBM System Z.</li><li>Utilizza i gestori di pacchetti basati su RMP yum e dnf (discussi più avanti) per installare, aggiornare e rimuovere i pacchetti nel sistema.</li><li>RHEL è ampiamente utilizzato dalle aziende che ospitano i propri sistemi.</li></ul><h3 id="la-famiglia-suse">La famiglia Suse</h3><p>La relazione tra SUSE (SUSE Linux Enterprise Server o SLES) e openSUSE è simile a quella descritta tra RHEL, CentOS e Fedora.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/ffd8ff6c0d84899812026c2e65efb0e1/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/chapter01_screen19.jpg" class="kg-image" alt="The SUSE Family" width="169" height="356" loading="lazy"><figcaption>La Famiglia SUSE</figcaption></figure><p>Usiamo openSUSE come distribuzione di riferimento per la famiglia SUSE, in quanto è disponibile per gli utenti finali gratuitamente. Poiché i due prodotti sono estremamente simili, il materiale che copre openSUSE può in genere essere applicato a SLES con pochi problemi.</p><h3 id="fatti-chiave-sulla-famiglia-suse">Fatti chiave sulla famiglia SUSE</h3><p>Alcuni dei fatti chiave sulla famiglia SUSE sono elencati di seguito:</p><ul><li>SUSE Linux Enterprise Server (SLES) si basa sulla distribuzione &nbsp;openSUSE.</li><li>Utilizza il gestore pacchetti zypper basato su RPM (lo tratteremo in dettaglio in seguito) per installare, aggiornare e rimuovere i pacchetti nel sistema.</li><li>Include l'applicazione YaST (Yet Another Setup Tool) per scopi di amministrazione di sistema.</li><li>SLES è ampiamente utilizzata nella vendita al dettaglio e in molti altri settori.</li></ul><h3 id="la-famiglia-debian">La famiglia Debian</h3><p>La distribuzione di Debian è la distribuzione base per diverse altre distribuzioni, tra cui Ubuntu. A sua volta, Ubuntu è la distribuzione base per Linux Mint e una serie di altre distribuzioni. È comunemente usato sia su computer server che desktop. Debian è un progetto puramente della comunità open source (non di proprietà di nessuna società) e ha una forte attenzione alla stabilità.</p><p>Debian fornisce di gran lunga il repository di software più grande e completo ai suoi utenti di qualsiasi distribuzione Linux.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/223d3c300d6cdd86ae66e8c2b9faa265/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/chapter01_screen20.jpg" class="kg-image" alt="The Debian Family" width="169" height="357" loading="lazy"><figcaption>La Famiglia Debian</figcaption></figure><p>Ubuntu mira a fornire un buon compromesso tra stabilità a lungo termine e facilità d'uso. Poiché Ubuntu ottiene la maggior parte dei suoi pacchetti dal ramo stabile di Debian, ha anche accesso a un repository di software molto grande. Per questi motivi, useremo Ubuntu LTS (Supporto a Lungo Termine) come riferimento alle distribuzioni della famiglia Debian per questo corso.</p><h3 id="fatti-chiave-sulla-famiglia-debian">Fatti chiave sulla famiglia Debian</h3><p>Alcuni fatti chiave sulla famiglia Debian sono elencati di seguito:</p><ul><li>La famiglia Debian è la distribuzione di base per Ubuntu e Ubuntu è la distribuzione di base per Linux Mint e altri.</li><li>Utilizza il gestore di pacchetti APT basato su DPKG (utilizzando apt, apt-get, apt-cache, ecc., che tratteremo in dettaglio in seguito) per installare, aggiornare e rimuovere i pacchetti nel sistema.</li><li>Ubuntu è stato ampiamente utilizzato per la distribuzione su cloud.</li><li>Mentre Ubuntu è derivato da una distribuzione Debian ed è basato su GNOME sotto il cofano, differisce visivamente dall'interfaccia su Debian standard e altre distribuzioni.</li></ul><h3 id="riassunto-capitolo">Riassunto capitolo</h3><ul><li>Esistono tre principali famiglie di distribuzioni all'interno di Linux: <strong>Red Hat</strong>, <strong>Suse</strong> e <strong>Debian</strong>. In questo corso, lavoreremo con membri rappresentativi di tutte queste famiglie.</li></ul><h2 id="capitolo-2-filosofia-e-concetti-di-linux">Capitolo 2: Filosofia e Concetti di Linux</h2><h3 id="obiettivi-formativi">Obiettivi Formativi</h3><p>Entro la fine di questo capitolo, dovresti essere in grado di:</p><ul><li>Definire i termini comuni associati a Linux.</li><li>Discutere i componenti di una distribuzione Linux.</li></ul><!--kg-card-begin: html--><h3>La potenza di Linux</h3>
<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINLFS10/LINLFS102014-V010000_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video><!--kg-card-end: html--><h3 id="introduzione">Introduzione</h3><p>Affinché tu possa ottenere il massimo da questo corso, ti consigliamo di avere Linux installato su una macchina che puoi utilizzare durante questo corso. È possibile seguire questa breve guida di installazione in lingua inglese "<a href="https://courses.edx.org/asset-v1:LinuxFoundationX+LFS101x+1T2020+type@asset+block@Preparing_Your_Computer_for_Linux_Training.pdf">Preparazione del computer per la formazione su Linux</a>". Ti aiuterà a selezionare una distribuzione Linux per l'installazione, decidere se desideri creare &nbsp;una macchina Linux pura autonoma o una a doppio boot, se fare un'installazione fisica o virtuale, ecc.. Poi ti guiderà attraverso i passi da compiere. Tratterò presto anche l'installazione.</p><p>Non abbiamo esaminato tutto in dettaglio, ma tieni presente che la maggior parte della documentazione di Linux è già sul tuo sistema sotto forma di pagine di manuale, delle quali discuteremo in modo molto dettagliato in seguito. Ogni volta che non capisci qualcosa o vuoi saperne di più circa un comando, un programma, un argomento o un'utility, puoi semplicemente digitare <code>man &lt;argomento&gt;</code> dalla riga di comando. Supporremo che tu stia pensando in questo modo e non ripeteremo costantemente "Per ulteriori informazioni, consulta la pagina di manuale per <code>&lt;argomento&gt;</code>".</p><p>Come nota correlata, durante il corso utilizziamo un'abbreviazione diffusa nella comunità open source. Quando ci si riferisce ai casi in cui l'utente deve fare una scelta su cosa digitare (ad esempio il nome di un programma o file), utilizziamo l'abbreviazione "<strong><code>foo</code></strong>" che sta per <strong><code>&lt;digita il nome del file qui&gt;</code></strong>. Quindi attenzione, in realtà non stiamo suggerendo di manipolare file o di installare servizi chiamati "<strong><code>foo</code></strong>"!</p><p>Il modo migliore per imparare Linux è provare a usarlo. Quindi assicurati di provare le cose tu stesso mentre segui.</p><p>Dovrai avere un sistema Linux attivo e in esecuzione che può essere un sistema Linux nativo sul tuo hardware, una distribuzione live lanciata da una chiave USB o da un CD o una macchina virtuale in esecuzione tramite hypervisor.</p><p>Ti mostreremo tutti questi metodi, quindi andiamo avanti.</p><!--kg-card-begin: html--><h3>Video: Terminologia Linux</h3>
<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINLFS10/LINLFS102014-V006600_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video><!--kg-card-end: html--><h3 id="distribuzioni-linux">Distribuzioni Linux</h3><p>Supponiamo che ti sia stato assegnato un progetto che costruisce un prodotto per una piattaforma Linux. I requisiti del progetto includono l'assicurarsi che il progetto funzioni correttamente sulle distribuzioni Linux più utilizzate. Per raggiungere questo obiettivo, è necessario conoscere i diversi componenti, servizi e configurazioni associati a ciascuna distribuzione. Stiamo per vedere esattamente come farlo.</p><p>Quindi, cos'è una distribuzione Linux e qual è la relazione con il kernel Linux?</p><p>Il kernel Linux è il nucleo del sistema operativo. Una distribuzione completa di Linux è costituita dal kernel più una serie di altri strumenti software per operazioni relative ai file, gestione degli utenti e gestione dei pacchetti software. Ognuno di questi strumenti fornisce una parte del sistema completo. Ogni strumento ha spesso un progetto a sé stante, con i propri sviluppatori che lavorano per perfezionare quel pezzo del sistema.</p><p>Mentre il kernel Linux più recente (e le versioni precedenti) è sempre disponibile negli <a href="https://www.kernel.org/">archivi del kernel Linux</a>, le distribuzioni Linux possono essere basate su diverse versioni del kernel. Ad esempio, la distribuzione RHEL 8 molto popolare si basa sul kernel 4.18, che non è nuovo, ma è estremamente stabile. Altre distribuzioni possono muoversi più rapidamente nell'adottare le ultime versioni del kernel. È importante notare che il kernel non è un monolite e può essere aggiornato/integrato anche parzialmente, ad esempio, Rhel/CentOS hanno incorporato molti dei più recenti miglioramenti del kernel nelle loro versioni precedenti, così come Ubuntu, openSUSE, SLES, ecc.</p><p>Esempi di altri strumenti e ingredienti essenziali forniti dalle distribuzioni includono i compilatori C/C++ e Clang, il debugger gdb, le applicazioni di librerie di sistema core che devono collegate per l'esecuzione, l'interfaccia di basso livello per disegnare grafica sullo schermo, così come l'ambiente desktop di livello superiore e il sistema per l'installazione e l'aggiornamento dei vari componenti, incluso il kernel stesso. Tutte le distribuzioni sono dotate di una suite piuttosto completa di applicazioni già installate.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/be89578552325fd81fb6a9a6b613afe9/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/distroroles.png" class="kg-image" alt="Distribution roles" width="1056" height="576" loading="lazy"><figcaption>Ruoli nelle Distribuzioni</figcaption></figure><h2 id="servizi-associati-alle-distribuzioni">Servizi associati alle distribuzioni</h2><p>La vasta varietà di distribuzioni Linux è progettata per soddisfare un pubblico molto vario, organizzazioni incluse, con esigenze e gusti specifici. Tuttavia, le grandi organizzazioni, come aziende e istituzioni governative e altri enti, tendono a scegliere le principali distribuzioni supportate dal punto di vista commerciale da Red Hat, SUSE e Canonical (Ubuntu).</p><p>CentOS e CentOS Stream sono popolari alternative gratuite (vale a dire con nessun costo) a Red Hat Enterprise Linux (RHEL) e sono spesso utilizzate da organizzazioni che si sentono a proprio agio nell'operare senza supporto tecnico a pagamento. Ubuntu e Fedora sono ampiamente utilizzate dagli sviluppatori e sono anche popolari in ambito educativo. Scientific Linux è favorita dalla comunità di ricerca scientifica per la sua compatibilità con pacchetti software scientifici e matematici. Entrambe le varianti CentOS sono compatibili dal punto di vista binario con RHEL; vale a dire che nella maggior parte dei casi, i pacchetti software binari si installeranno correttamente su diverse distribuzioni.</p><p>Nota che CentOS dalla fine del 2021 è stata abbandonata a favore di CentOS Stream. Tuttavia, ci sono almeno due nuovi sostituti derivati da RHEL: Alma Linux e Rocky Linux che stanno stabilendo un punto d'appoggio.</p><p>Molti distributori commerciali, tra cui Red Hat, Ubuntu, SUSE e Oracle, forniscono un supporto a pagamento a lungo termine basato sulle loro distribuzioni, nonché la certificazione hardware e software. Tutti i principali distributori forniscono servizi di aggiornamento per mantenere il sistema aggiornato con le ultime correzioni di sicurezza e bug e miglioramenti delle prestazioni, oltre a fornire risorse di supporto online.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/85a0445af315a7fb90444a2d3cd0e608/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch02_screen_24.jpg" class="kg-image" alt="LFS01_ch02_screen_24" width="750" height="335" loading="lazy"><figcaption>Servizi Associati alle Distribuzioni</figcaption></figure><h3 id="capitolo-2-riepilogo">Capitolo 2 - Riepilogo</h3><p>Hai completato il capitolo 2. Riassumiamo i concetti chiave coperti:</p><ul><li>Linux si ispira fortemente al sistema operativo UNIX, del quale i suoi creatori erano esperti.</li><li>Linux accede a molte funzionalità e servizi tramite file e oggetti simili a file.</li><li>Linux è un sistema operativo <a href="https://it.wikipedia.org/wiki/Multitasking">multi-tasking</a>, <a href="https://it.wikipedia.org/wiki/Sistema_multiutente">multi-utente</a>, con processi di rete e di servizio integrati noti come <a href="https://it.wikipedia.org/wiki/Demone_(informatica)">demoni</a>.</li><li>Linux è sviluppato da una confederazione libera di sviluppatori da tutto il mondo, che collaborano su Internet, con Linus Torvalds in testa. La competenza tecnica e il desiderio di contribuire sono gli unici requisiti per la partecipazione.</li><li>La comunità Linux è un ecosistema di vasta portata di sviluppatori, fornitori e utenti che supporta e fa avanzare il sistema operativo Linux.</li><li>Alcuni dei termini comuni utilizzati in Linux sono: <strong>kernel</strong>, <strong>distribuzione</strong>, <strong>boot loader</strong>, <strong>servizio</strong>, <strong>filesystem</strong>, <strong>sistema X Window</strong>, <strong>ambiente desktop</strong> e <strong>riga di comando</strong>.</li><li>Una distribuzione completa di Linux è costituita dal kernel più una serie di altri strumenti software per operazioni relative ai file, gestione degli utenti e gestione dei pacchetti software.</li></ul><h2 id="capitolo-3-le-basi-di-linux-e-l-avvio-del-sistema">Capitolo 3: Le Basi di Linux e l'Avvio del Sistema</h2><p>Entro la fine di questo capitolo, dovresti essere in grado di:</p><ul><li>Identificare i filesystem Linux.</li><li>Identificare le differenze tra partizioni e filesystem.</li><li>Descrivere il processo di avvio.</li><li>Installare Linux su un computer.</li></ul><h3 id="il-processo-di-avvio">Il processo di avvio</h3><p>Il processo di avvio di Linux è la procedura per l'inizializzazione del sistema. Consiste in tutto ciò che accade da quando il computer viene acceso per la prima volta fino a quando l'interfaccia utente è completamente operativa.</p><p>Avere una buona comprensione dei passaggi nel processo di avvio può aiutarti nella risoluzione dei problemi, nonché ad adattare le prestazioni del computer alle tue esigenze.</p><p>D'altra parte, il processo di avvio può essere piuttosto tecnico e puoi iniziare a utilizzare Linux senza conoscere tutti i dettagli.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/09/image-373.png" class="kg-image" alt="image-373" width="600" height="400" loading="lazy"><figcaption>Il processo di avvio (boot)</figcaption></figure><h3 id="bios-i-primi-passi">BIOS - I Primi Passi</h3><p>L'avvio di un sistema Linux basato su architettura x86 prevede una serie di passaggi. Quando il computer viene acceso, il <a href="https://it.wikipedia.org/wiki/BIOS"><strong>BIOS</strong> (Basic Input/Output System)</a> inizializza l'hardware, incluso lo schermo e la tastiera, ed esegue test sulla memoria principale. Questo processo è anche chiamato <a href="https://it.wikipedia.org/wiki/Power-on_self-test">POST (<strong>P</strong>ower <strong>O</strong>n <strong>S</strong>elf <strong>T</strong>est)</a>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/f02a193180acffca543bf8f69870cc79/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch03_screen16.jpg" class="kg-image" alt="BIOS" width="264" height="324" loading="lazy"><figcaption>BIOS</figcaption></figure><p>Il software BIOS è conservato su un chip ROM (sola lettura) sulla scheda madre. Successivamente, il resto del processo di avvio è controllato dal sistema operativo (OS).</p><h3 id="master-boot-record-mbr-e-boot-loader">Master Boot Record (MBR) e Boot Loader</h3><p>Una volta completate le operazioni di POST, il controllo del sistema passa dal BIOS al <a href="https://it.wikipedia.org/wiki/Boot_loader"><strong>boot loader</strong></a>. Il boot loader viene generalmente memorizzato su uno dei dischi rigidi del sistema, sia nel <a href="https://it.wikipedia.org/wiki/Boot_sector">settore di avvio</a> (per i sistemi BIOS/MBR tradizionali) o nella partizione <strong>EFI</strong> (Interfaccia del Firmware Estensibile) o nei sistemi più recenti <a href="https://it.wikipedia.org/wiki/UEFI"><strong>EFI/UEFI</strong></a> (Interfaccia Unificata del Firmware Estensibile). Fino a questa fase, la macchina non accede ad alcun supporto di archiviazione di massa. Successivamente, le informazioni su data, ora e le periferiche più importanti vengono caricate dai valori <a href="https://it.wikipedia.org/wiki/CMOS">CMOS</a> (una tecnologia utilizzata per la conservazione di memoria alimentato a batteria che consente al sistema di tenere traccia della data e dell'ora anche quando è spento).</p><p>Esistono numerosi boot loader per Linux; quelli più comuni sono <a href="https://it.wikipedia.org/wiki/GNU_GRUB"><strong>GRUB</strong> &nbsp;(<strong>Gr</strong>and <strong>U</strong>nified <strong>B</strong>oot Loader)</a>, <a href="https://blog.alessandrostella.it/software/cosa-e-isolinux/"><strong>ISOLINUX</strong></a> (per l'avvio da supporti rimovibili) e <a href="https://it.wikipedia.org/wiki/Das_U-Boot"><strong>DAS U-Boot</strong></a> (per l'avvio su dispositivi/apparecchi incorporati). La maggior parte dei boot loader Linux può presentare un'interfaccia utente per la scelta di opzioni alternative per l'avvio di Linux e persino altri sistemi operativi che potrebbero essere installati. Quando si avvia Linux, il boot loader è responsabile del caricamento dell'immagine del kernel e del disco RAM iniziale o filesystem (che contiene alcuni file critici e driver di dispositivo necessari per avviare il sistema) in memoria.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/b053b7b69e99a0c06ef0da7fd84236d7/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch03_screen20.jpg" class="kg-image" alt="Master Boot Record" width="409" height="287" loading="lazy"><figcaption>Master Boot Record</figcaption></figure><h3 id="boot-loader-in-azione">Boot Loader in azione</h3><p>Il boot loader ha due fasi distinte:</p><p>Per i sistemi che utilizzano il metodo BIOS/MBR, il boot loader risiede nel primo settore del disco rigido, noto anche come <a href="https://it.wikipedia.org/wiki/Master_boot_record"><strong>MBR</strong> - <strong>M</strong>aster <strong>B</strong>oot <strong>R</strong>ecord</a>. La dimensione del MBR è di soli 512 byte. In questa fase, il boot loader esamina la <a href="https://it.wikipedia.org/wiki/Tabella_delle_partizioni"><strong>tabella delle partizioni</strong></a> e trova una partizione avviabile. Una volta che trova una partizione avviabile, cerca il boot loader del secondo stadio, ad esempio GRUB, e lo carica nella <a href="https://it.wikipedia.org/wiki/RAM"><strong>RAM</strong></a>. Per i sistemi che utilizzano il metodo EFI/UEFI, il <a href="https://it.wikipedia.org/wiki/Firmware">firmware</a> UEFI legge i dati del suo <a href="https://it.wikipedia.org/wiki/Boot_manager">Boot Manager</a> per determinare quale applicazione UEFI deve essere lanciata e da dove (cioè da quale disco e partizione è possibile trovare la partizione EFI). Il firmware lancia quindi l'applicazione UEFI, ad esempio GRUB, come definito nella voce di avvio nel Boot Manager del firmware. Questa procedura è più complicata, ma più versatile dei vecchi metodi MBR.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/abd1fcc0cc9a6fe48d886efdd98711ef/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch03_screen18.jpg" class="kg-image" alt="Boot loader in action" width="340" height="446" loading="lazy"></figure><p>Il boot loader del secondo stadio risiede sotto <strong><code>/boot</code></strong>. Viene visualizzato uno <a href="https://it.wikipedia.org/wiki/Splash_screen">splash screen</a>, che ci consente di scegliere quale sistema operativo (OS) avviare. Dopo aver scelto il sistema operativo, il boot loader carica il kernel del sistema operativo selezionato in RAM e passa il controllo a esso. I kernel sono quasi sempre compressi, quindi il suo primo lavoro è quello di decomprimere sé stesso. Successivamente, controllerà e analizzerà l'hardware di sistema e inizializzerà qualsiasi driver di dispositivi hardware sia integrato nel kernel.</p><h3 id="disco-ram-iniziale">Disco RAM iniziale</h3><p>L'immagine del filesystem <a href="https://wiki.gentoo.org/wiki/Initramfs/Guide/it"><strong>initramfs</strong></a> contiene programmi e file binari che eseguono tutte le azioni necessarie per montare il filesystem di root corretto, come fornire funzionalità del kernel per i driver di filesystem e dispositivi necessari per i controller di archiviazione di massa con una funzione chiamata <a href="https://it.wikipedia.org/wiki/Udev"><strong>udev</strong></a>, che è responsabile per capire quali dispositivi sono presenti, individuare i driver del dispositivo che devono funzionare correttamente e caricarli. Dopo che il filesystem root è stato trovato, viene controllato per errori e montato.</p><p>Il programma <a href="https://it.wikipedia.org/wiki/Mount"><strong>mount</strong></a> indica al sistema operativo che un filesystem è pronto per l'uso e lo associa a un punto particolare nella gerarchia complessiva del filesystem (il <strong>punto di montaggio</strong>). Se ciò ha esito positivo, <strong>initramfs</strong> viene scaricato dalla RAM e il programma di inizializzazione sul filesystem root (<code>/sbin/init</code>) viene eseguito.</p><p><strong>init</strong> gestisce il montaggio attaccandolo al filesystem root finale. Se sono necessari driver hardware speciali prima di accedere all'archiviazione di massa, devono essere nell'immagine <strong>initramfs</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/13f8548b13ebe15a19aa1a6c3964fceb/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch03_screen22.jpg" class="kg-image" alt="The initial RAM disk" width="536" height="286" loading="lazy"><figcaption>Il Disco RAM Iniziale</figcaption></figure><h3 id="accesso-in-modalit-testo">Accesso in modalità testo</h3><p>Verso la fine del processo di avvio, <strong>init</strong> avvia una serie di istruzioni di accesso in modalità testo. Queste ti consentono di digitare il tuo username, seguito dalla tua password e di ottenere una shell di comandi. Tuttavia, se stai eseguendo un sistema con un'interfaccia di accesso grafico, all'inizio non li vedrai.</p><p>Come imparerai nel <strong>Capitolo 7: Operazioni della riga di comando</strong>, i terminali che eseguono le shell di comando possono essere accessibili utilizzando il tasto <strong><code>ALT</code></strong> più un tasto funzione. La maggior parte delle distribuzioni avvia sei terminali di testo e un terminale grafico a partire da <strong><code>F1</code></strong> o <strong><code>F2</code></strong>. All'interno di un ambiente grafico, il passaggio a una console di testo richiede di digitare <strong><code>CTRL-ALT</code></strong> più il tasto funzione appropriato (con <strong><code>F7</code></strong> o <strong><code>F1</code></strong> che porta alla GUI).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/e35bea5a8c6b9a41453a0e01c5ca3077/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch03_screen26.jpg" class="kg-image" alt="Text-Mode Login" width="226" height="347" loading="lazy"><figcaption>Accesso in Modalità Testo</figcaption></figure><p>Di solito, la shell di comando predefinita è <a href="https://it.wikipedia.org/wiki/Bash"><strong>bash</strong> - <strong>GNU</strong> <strong>B</strong>ourne <strong>A</strong>gain <strong>Sh</strong>ell</a>, ma sono disponibili diverse altre shell di comando avanzate. La shell stampa un prompt di testo, indicando che è pronta ad accettare i comandi; dopo che l'utente digita il comando e preme <strong><code>Invio</code></strong>, il comando viene eseguito e un altro prompt viene visualizzato dopo aver eseguito il comando.</p><h3 id="il-kernel-linux">Il kernel Linux</h3><p>Il boot loader carica sia il <a href="https://it.wikipedia.org/wiki/Kernel"><strong>kernel</strong></a> che un file system iniziale a base di RAM (initramfs) in memoria, quindi può essere utilizzato direttamente dal kernel.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/b953394cd3145a1bd239673dc5c5a5b7/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch03_screen21.jpg" class="kg-image" alt="The Linux kernel" width="232" height="306" loading="lazy"><figcaption>Il kerner Linux</figcaption></figure><p>Quando il kernel viene caricato in RAM, inizializza e configura immediatamente la memoria del computer e configura anche tutto l'hardware collegato al sistema. Ciò include tutti i processori, i sottosistemi I/O, i dispositivi di archiviazione, ecc. Il kernel carica anche alcune applicazioni nello spazio utente necessarie.</p><h3 id="-sbin-init-e-servizi"><code>/sbin/init</code> e servizi</h3><p>Una volta che il kernel ha impostato tutto il suo hardware e montato il filesystem root, il kernel esegue <strong><code>/sbin/init</code></strong>. Questo diventa quindi il processo iniziale, che a sua volta avvia altri processi per far funzionare il sistema. La maggior parte degli altri processi sul sistema traccia la propria origine da <strong><code>init</code></strong>; le eccezioni includono i cosiddetti processi del kernel. Questi vengono avviati direttamente dal kernel e il loro compito è gestire i dettagli interni del sistema operativo.</p><p>Oltre ad avviare il sistema, <strong><code>init</code></strong> è responsabile del mantenimento in esecuzione del sistema e di chiuderlo in modo pulito. Una delle sue responsabilità è quella di agire quando necessario come gestore per tutti i processi non kernel; pulisce dopo il loro completamento, e riavvia i servizi di accesso utente secondo necessità quando gli utenti accedono ed escono, e fa lo stesso per altri servizi di sistema in background.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/640a31713f9fded06718cb06c468f685/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch03_screen24.jpg" class="kg-image" alt="/sbin/init and Services" width="239" height="286" loading="lazy"><figcaption>/sbin/init e Servizi&nbsp;</figcaption></figure><p>Tradizionalmente, questa inizializzazione del processo veniva effettuata utilizzando convenzioni che risalgono agli anni '80 e alla varietà System V di Unix. Questo processo seriale faceva passare il sistema attraverso una sequenza di livelli di esecuzione (<a href="https://it.wikipedia.org/wiki/Runlevel"><strong>runlevel</strong></a>) che contenengono un insieme di script che avviavano e fermavano i servizi. Ogni runlevel supportava una diversa modalità di esecuzione del sistema. All'interno di ogni runlevel, i singoli servizi potrebbero essere impostati per essere eseguiti o per essere chiusi se in esecuzione.</p><p>Tuttavia, tutte le principali distribuzioni si sono allontanate da questo metodo sequenziale di inizializzazione del sistema tramite runlevel, sebbene di solito emulino molte utility di System V per scopi di compatibilità. Successivamente, tratteremo dei nuovi metodi, tra i quali <a href="https://it.wikipedia.org/wiki/Systemd"><strong>systemd</strong></a> è diventato dominante.</p><h3 id="alternative-di-avvio">Alternative di avvio</h3><p><strong>SysVinit</strong> considerava le cose come un processo seriale, diviso in una serie di stadi sequenziali. Ogni fase richiedeva il completamento prima che la prossima potesse procedere. Pertanto, l'avvio non ha potuto facilmente sfruttare <a href="https://it.wikipedia.org/wiki/Calcolo_parallelo">l'elaborazione parallela</a> che potrebbe essere eseguita su più processori o core.</p><p>Inoltre, l'arresto e il riavvio erano visti come un evento relativamente raro; quanto tempo impiegava esattamente non è stato considerato importante. Questo non è più vero, specialmente con dispositivi mobili e sistemi Linux incorporati. Alcuni metodi moderni, come l'uso di <a href="https://it.wikipedia.org/wiki/Container_Linux"><strong>contenitori</strong></a>, possono richiedere tempi di avvio quasi istantanei. Pertanto, i sistemi ora richiedono metodi con capacità più veloci e migliorate. Infine, i metodi più vecchi richiedevano script di avvio piuttosto complicati, che erano difficili da mantenere universali attraverso versioni di distribuzione, versioni del kernel, architetture e tipi di sistemi. Le due principali alternative sviluppate erano:</p><h4 id="upstart"><strong>Upstart</strong></h4><ul><li>Sviluppato da Ubuntu e incluso per la prima volta nel 2006</li><li>Adottato in Fedora 9 (nel 2008) e in RHEL 6 e i suoi cloni</li></ul><p><strong>SystemD</strong></p><ul><li>Adottato da Fedora per la prima volta (nel 2011)</li><li>Adottato da RHEL 7 e SUSE</li><li>Sostituisce Upstart in Ubuntu 16.04</li></ul><p>Sebbene la migrazione verso <strong>systemd</strong> sia stata piuttosto controversa, è stata adottata da tutte le principali distribuzioni e quindi non discuteremo dei metodi più vecchi Syistem V o Upstart, che sono diventati un vicolo cieco. Indipendentemente da come ci si schieri rispetto alla controversia o ai metodi tecnici di <strong>systemd</strong>, l'adozione quasi universale ha reso più semplice apprendere come lavorare sui sistemi Linux, poiché ci sono meno differenze tra le distribuzioni. In seguito elenchiamo le funzionalità di sistema.</p><h3 id="funzionalit-systemd">Funzionalità systemd</h3><p>I sistemi con <strong>systemd</strong> si avviano più velocemente di quelli con i metodi <strong>init</strong> meno recenti. Ciò è in gran parte dovuto al fatto che sostituisce un insieme serializzato di passaggi con tecniche di parallelizzazione aggressive, che consente di avviare più servizi contemporaneamente.</p><p>I complicati script di shell di avvio vengono sostituiti con file di configurazione più semplici, che elencano ciò che deve essere fatto prima che venga avviato un servizio, su come eseguire l'avvio del servizio e quali condizioni il servizio dovrebbe identificare come da completarsi al termine dell'avvio. Una cosa da notare è che <strong><code>/sbin/init</code></strong> ora punta a <code><strong>/lib/systemd/systemd</strong></code>; cioè <strong><code>systemd</code></strong> assume il controllo del processo <strong>init</strong>.</p><p>Un comando <strong>systemd</strong> (<strong><code>systemctl</code></strong>) viene utilizzato per la maggior parte delle attività di base. Anche se non abbiamo ancora parlato di come lavorare alla riga di comando, ecco un breve elenco dei suoi utilizzi:</p><ul><li>Avvio, arresto, riavvio di un servizio (utilizzando <strong>httpd</strong>, il server Web Apache, ad esempio) su un sistema attualmente in esecuzione:<br><strong><code>$ sudo systemctl start | stop | restart httpd.service</code></strong></li><li>Abilitare o disabilitare un servizio di sistema dall'avvio del sistema di boot:<br><strong><code>$ sudo systemctl enable | disable httpd.service</code></strong></li></ul><p>Nella maggior parte dei casi, l'estensione <code>.service</code> può essere omessa. Ci sono molte differenze tecniche con i metodi più vecchi che vanno oltre lo scopo della nostra discussione.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/2a63469f639dfeaf697c55ca137ac1d9/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/systemd.png" class="kg-image" alt="systemd Logo" width="492" height="159" loading="lazy"></figure><h2 id="le-basi-del-filesystem-linux">Le Basi del Filesystem Linux</h2><p>Pensa a un frigorifero che ha più ripiani che possono essere utilizzati per conservare vari alimenti. Questi ripiani ti aiutano a organizzare gli alimenti per forma, dimensioni, tipo, ecc.. Lo stesso concetto si applica a un filesystem, che è l'incarnazione di un metodo di memorizzazione e organizzazione di raccolte arbitrarie di dati in una forma utilizzabile dall'uomo.</p><p>Diversi tipi di filesystem supportati da Linux:</p><ul><li>Filesystem del disco convenzionali: <strong>EXT3</strong>, <strong>EXT4</strong>, <strong>XFS</strong>, <strong>BTRFS</strong>, <strong>JFS</strong>, <strong>NTFS</strong>, <strong>VFAT</strong>, <strong>EXFAT</strong> ecc.</li><li>Filesystem di conservazione flash: <strong>Ubifs</strong>, <strong>JFFS2</strong>, <strong>Yaffs</strong>, ecc.</li><li>Filesystem di database</li><li>Filesystem a scopo speciale: <strong>Procfs</strong>, <strong>SYSFS</strong>, <strong>TMPFS</strong>, <strong>SquashFS</strong>, <strong>Debugfs</strong>, <strong>Fuse</strong> ecc.</li></ul><p>Questa sezione descriverà la disposizione del filesystem standard condiviso dalla maggior parte delle distribuzioni Linux.</p><h4 id="partizioni-e-filesystem">Partizioni e filesystem</h4><p>Una <strong>partizione</strong> è una sezione fisicamente contigua di un disco o appare come tale in alcune configurazioni avanzate.</p><p>Un <strong>filesystem</strong> è un metodo per archiviare/trovare file su un disco rigido (di solito in una partizione).</p><p>Si può pensare a una partizione come a un contenitore in cui risiede un filesystem, sebbene in alcune circostanze un filesystem può trovarsi su più di una partizione se si utilizzano collegamenti simbolici, di cui discuteremo molto più tardi.</p><p>Un confronto tra filesystem in Windows e Linux è riportato nella tabella seguente:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th></th>
<th>Windows</th>
<th>Linux</th>
</tr>
</thead>
<tbody>
<tr>
<td>PARTIZIONE</td>
<td>Disco1</td>
<td><strong><code>/dev(sda1</code></strong></td>
</tr>
<tr>
<td>Tipo Filesystem</td>
<td>NTFS/VFAT</td>
<td>EXT3/EXT4/XFS/BTRFS...</td>
</tr>
<tr>
<td>Parametri Montaggio</td>
<td>LetteraDrive</td>
<td>PuntoMontaggio</td>
</tr>
<tr>
<td>Cartella Base (dove è salvato il Sistema Operativo)</td>
<td><code>C:\</code>;</td>
<td><code>/</code></td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h4 id="la-gerarchia-del-filesystem-standard">La Gerarchia del Filesystem Standard</h4><p>I sistemi Linux archiviano i loro file importanti secondo una disposizione standard chiamata <strong>F</strong>ilesystem <strong>H</strong>ierarchy <strong>S</strong>tandard (<strong>FHS</strong>), che è stata a lungo mantenuta dalla Fondazione Linux. Per ulteriori informazioni, dai un'occhiata al seguente documento in lingua inglese: "<a href="https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.pdf">Gerarchia del Filesystem Standard</a>" creato dal gruppo di lavoro LSB. Avere uno standard garantisce che utenti, amministratori e sviluppatori possano spostarsi tra le distribuzioni senza dover nuovamente imparare come è organizzato il sistema.</p><p>Linux utilizza il carattere <code>/</code> per separare i percorsi (a differenza di Windows, che utilizza <code>\</code>) e non ha lettere per identificare i drive. I vari driver e/o partizioni sono montati come directory nel singolo filesystem. I media rimovibili come unità USB, CD e DVD appariranno come montate su <code><strong>/run/media/username/etichettadisco</strong></code> per i sistemi Linux recenti o sotto <code><strong>/media</strong></code> per distribuzioni più vecchie. Ad esempio, se il tuo nome utente è <strong>studente</strong>, una chiave USB etichettata come FEDORA potrebbe essere montata in <code><strong>/run/media/studente/FEDORA</strong></code> e un file <code><strong>README.txt</strong></code> su quel disco sarebbe accessibile a <code><strong>/run/media/studente/FEDORA/README.txt</strong></code>`.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/09/image-374.png" class="kg-image" alt="image-374" width="600" height="400" loading="lazy"><figcaption>La Gerarchia Standard del Filesystem</figcaption></figure><p>Tutti i nomi nel filesystem Linux distinguono tra maiuscole e minuscole quindi <strong><code>/boot</code></strong>, <strong><code>/Boot</code></strong> e <strong><code>/BOOT</code></strong> rappresentano tre diverse directory (o cartelle). Molte distribuzioni distinguono tra le utility di base necessarie per il corretto funzionamento del sistema e altri programmi e posizionano questi ultimi nelle directory sotto <strong><code>/usr</code></strong> (pensa a utente). Per avere un'idea di come sono organizzati gli altri programmi, trova la directory <strong><code>/usr</code></strong> nel diagramma qui sopra e confronta le sottodirectory con quelle che esistono direttamente sotto la directory di root del sistema (<strong><code>/</code></strong>).</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://courses.edx.org/assets/courseware/v1/65256a6c88506b6e45744b97b8875775/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/fstree1.png" class="kg-image" alt="fs tree" width="1869" height="983" loading="lazy"></figure><!--kg-card-begin: html--><h3>Video: Visualizzare la Gerarchia del Filesystem dall'Interfaccia Grafica in Ubuntu</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINLFS10/LINLFS102014-V004800_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video><!--kg-card-end: html--><!--kg-card-begin: html--><h3>Video: Visualizzare la Gerarchia del Filesystem dall'Interfaccia Grafica in openSUSE</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINLFS10/LINLFS102014-V002000_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="installazione-di-una-distribuzione-linux">Installazione di una Distribuzione Linux</h3><p>Supponiamo che tu intenda acquistare una nuova auto. Quali fattori devi considerare per fare una scelta adeguata? I requisiti che devono essere presi in considerazione includono le dimensioni necessarie per le esigenze della tua famiglia, il tipo di di motore e di carburante utilizzato, il budget previsto e le opzioni di finanziamento disponibili, l'affidabilità e i servizi post-vendita, ecc.</p><p>Allo stesso modo, anche determinare quale distribuzione installare richiede una pianificazione. La figura seguente mostra alcune, ma non tutte le scelte. Si noti che molti sistemi Linux incorporati utilizzano contenuti realizzati su misura, piuttosto che Android o Yocto.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/6eafa3b1170a0c208335ea46ac16945d/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/distros.png" class="kg-image" alt="Choosing a Linux Distribution" width="1056" height="595" loading="lazy"></figure><h3 id="domande-da-porsi-quando-si-sceglie-una-distribuzione">Domande da Porsi Quando si Sceglie una Distribuzione</h3><p>Alcune domande che vale la pena di porsi prima di orientarsi verso una distribuzione includono:</p><ul><li>Qual è la funzione principale del sistema (server o desktop)?</li><li>Quali tipi di pacchetti sono importanti per l'utilizzo? Ad esempio, server Web, elaborazione testi, ecc.</li><li>Quanto spazio su disco rigido è richiesto e quanto è disponibile? Ad esempio, quando si installa Linux su un dispositivo incorporato, lo spazio è generalmente ristretto.</li><li>Quante volte vengono aggiornati i pacchetti?</li><li>Quanto dura il ciclo di supporto per ogni versione? Ad esempio, le versioni <strong>LTS</strong> hanno un supporto a lungo termine.</li><li>Hai bisogno di personalizzazione del kernel dal venditore o da una terza parte?</li><li>Su quale hardware installerai la distribuzione? Ad esempio, potrebbe essere <strong>X86</strong>, <strong>ARM</strong>, <strong>PPC</strong>, ecc.</li><li>Hai bisogno di stabilità a lungo termine? Puoi accettare (o aver bisogno di) un sistema all'avanguardia più instabile che esegua l'ultimo software?</li></ul><h3 id="installazione-di-linux-pianificazione">Installazione di Linux: Pianificazione</h3><p>La disposizione della partizione deve essere decisa al momento dell'installazione; può essere difficile cambiare in seguito. Sebbeme i sistemi Linux gestiscano più partizioni montandole in punti specifici nel filesystem, e sia sempre modificare la disposizione in seguito, è sempre più facile cercare di farlo bene subito.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/ae8955c30e5b10b2fd1cab2c79673555/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch03_screen_34.jpg" class="kg-image" alt="Partitions in the Linux hard disk" width="295" height="298" loading="lazy"><figcaption>Partizioni in un Hard Disk Linux</figcaption></figure><p>Quasi tutti gli installer forniscono una disposizione predefinita ragionevole, con tutto lo spazio dedicato ai file normali su una grande partizione e una partizione di swap più piccola o con partizioni separate per alcune aree sensibili in relazione allo spazio come <strong><code>/home</code></strong> e <strong><code>/var</code></strong>. Potrebbe essere necessario sovrascrivere le impostazioni predefinite e fare qualcosa di diverso se hai esigenze speciali o se desideri utilizzare più di un disco.</p><h3 id="installazione-di-linux-scelte-software">Installazione di Linux: Scelte Software</h3><p>Tutte le installazioni includono il software minimo indispensabile per l'esecuzione di una distribuzione Linux.</p><p>La maggior parte degli installer fornisce anche opzioni per l'aggiunta di categorie di software. Applicazioni comuni (come il web browser Firefox e la suite LibreOffice), strumenti per sviluppatori (come gli editor di testo <strong>vi</strong> ed <strong>emacs</strong>, che esploreremo più avanti in questo corso) e altri servizi popolari (come gli strumenti di Apache Web Server o il database MySQL) di solito sono inclusi. Inoltre, per qualsiasi sistema con un desktop grafico, un desktop scelto (come <strong>GNOME</strong> o <strong>KDE</strong>) è installato come predefinito.</p><p>Tutti gli installer hanno alcune funzionalità di sicurezza iniziali configurate sul nuovo sistema. Un passaggio di base consiste nell'impostazione della password per il superutente (root) e nell'impostazione di un utente iniziale. In alcuni casi (come Ubuntu), viene impostato solo un utente iniziale; l'accesso a root diretto non è configurato e l'accesso a root richiede prima l'accesso come utente normale, quindi utilizzando <strong>sudo</strong>, come descriveremo in seguito. Alcune distribuzioni installeranno anche framework di sicurezza più avanzati, come SElinux o AppArmor. Ad esempio, tutti i sistemi basati su Red Hat, inclusi Fedora e CentOS, usano sempre SElinux per impostazione predefinita e Ubuntu viene fornito con AppArmor attivo e funzionante.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/10f3cbf30f540761b32e02764de07e5c/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch03_screen_35.jpg" class="kg-image" alt="Linux Installation Software Choices" width="497" height="457" loading="lazy"><figcaption>Scelte di Installazione di Software Linux</figcaption></figure><h3 id="installazione-di-linux-sorgente-d-installazione">Installazione di Linux: Sorgente d'Installazione</h3><p>Come altri sistemi operativi, le distribuzioni Linux sono fornite su media rimovibili come unità USB e CD o DVD. La maggior parte delle distribuzioni Linux supporta anche l'avvio di una piccola immagine e il download del resto del sistema sulla rete. Queste piccole immagini sono utilizzabili sui supporti o come immagini di avvio di rete, nel qual caso è possibile eseguire un'installazione senza utilizzare alcun supporto locale.</p><p>Molti installer possono eseguire un'installazione completamente automatica, utilizzando un file di configurazione con le specifiche delle opzioni di installazione. Questo file è chiamato file Kickstart per i sistemi basati su Red Hat, profilo AutoYAST per sistemi basati su SUSE e file Preseed per i sistemi basati su Debian.</p><p>Ogni distribuzione fornisce la propria documentazione e strumenti per la creazione e la gestione di questi file.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/1129ddea1e2fb579c9f309c8e9846b2c/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch03_screen_36.jpg" class="kg-image" alt="Three pictures: one showing a cell phone, computer and laptop connected to the cloud; another one showing disk drive with a CD inserted; and the last one showing pen drive" width="382" height="246" loading="lazy"></figure><h3 id="installazione-di-linux-il-processo">Installazione di Linux: Il Processo</h3><p>Il processo di installazione effettivo è abbastanza simile per tutte le distribuzioni.</p><p>Dopo aver avviato dal supporto di installazione, l'installer inizia e pone domande su come impostare il sistema. Queste domande vengono saltate se viene fornito un file di installazione automatica. Successivamente, viene eseguita l'installazione.</p><p>Infine, il computer si riavvia nel sistema appena installato. Su alcune distribuzioni, vengono poste ulteriori domande dopo il riavvio del sistema.</p><p>La maggior parte degli installer ha la possibilità di scaricare e installare aggiornamenti come parte del processo di installazione; ciò richiede l'accesso a Internet. In caso contrario, il sistema utilizza il suo normale meccanismo di aggiornamento per recuperare tali aggiornamenti dopo la fine dell'installazione.</p><h3 id="installazione-di-linux-avvertimento">Installazione di Linux: Avvertimento</h3><p>Le dimostrazioni mostrano come installare Linux direttamente sulla tua macchina, <strong>cancellando tutto ciò che era lì</strong>. Mentre le dimostrazioni non modificheranno il tuo computer, seguendo queste procedure nella vita reale cancellerà tutti i dati attuali.</p><p>La Fondazione Linux ha un documento in lingua inglese: "<a href="https://training.linuxfoundation.org/wp-content/uploads/2018/06/Preparing_Your_Computer_for_LFS101x.pdf">Preparing Your Computer for Linux Training</a>" che descrive metodi alternativi per installare Linux senza sovrascrivere dati esistenti. Potresti consultarlo, se è necessario preservare le informazioni sul disco rigido.</p><p>Questi metodi alternativi sono:</p><ol><li>Ri-partizionamento del disco rigido per liberare abbastanza spazio per consentire l'installazione <a href="https://it.wikipedia.org/wiki/Dual_boot">dual boot</a> di Linux, insieme al sistema operativo attuale.</li><li>Utilizzo di un programma <a href="https://it.wikipedia.org/wiki/Hypervisor">Host Machine Hypervisor</a> (come i prodotti VMware oppure Oracle Virtual Box) per installare una macchina virtuale Linux client.</li><li>Avvio da e utilizzo di un CD o chiave USB e non scrivere nulla sul disco rigido.</li></ol><p>Il primo metodo talvolta è complicato e dovrebbe essere adottato se hai dimestichezza con l'argomento e comprendi i passi da compiere. Il secondo e il terzo metodo sono piuttosto sicuri e rendono difficile danneggiare il sistema.</p><!--kg-card-begin: html--><h3>Video: Passaggi per Installare Ubuntu</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V000300_DTH.mp4">
   
Sorry, your browser doesn't support embedded videos.
</video>

<h3>Video: Passaggi per Installare CentoOS</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LinuxFoundationXLFS101x-V000500_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>

<h3>Video: Passaggi per Installare openSUSE</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V000500_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>

<!--kg-card-end: html--><h3 id="capitolo-3-riepilogo">Capitolo 3 - Riepilogo</h3><p>Hai completato il capitolo 3. Riassumiamo i concetti chiave trattati:</p><ul><li>Una <strong>partizione</strong> è una parte logica del disco.</li><li>Un <strong>filesystem</strong> è un metodo per archiviare/trovare file su un disco rigido.</li><li>Dividendo il disco rigido in partizioni, i dati possono essere raggruppati e separati secondo necessità. Quando si verifica un fallimento o un errore, solo i dati nella partizione interessata saranno danneggiati, mentre i dati sulle altre partizioni probabilmente sopravviveranno.</li><li>Il processo di avvio ha più passaggi, a partire dal BIOS, che innesca il boot loader per avviare il kernel Linux. Da lì, viene invocato il filesystem <code>initramfs</code>, che innesca il programma <code>init</code> per completare il processo di avvio.</li><li>Determinare la distribuzione appropriata da installare richiede di scegliere la distribuzione le cui caratteristiche meglio si abbinano alle necessità del sistema specifico.</li></ul><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/284ae82f181c716d860820c08e880813/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_Summary.jpg" class="kg-image" alt="Tux the Penguin wearing the square academic cap" width="330" height="306" loading="lazy"></figure><h2 id="capitolo-4-interfaccia-grafica">Capitolo 4: Interfaccia grafica</h2><h3 id="obiettivi-formativi-1">Obiettivi formativi</h3><p>Alla fine di questo capitolo, dovresti essere in grado di:</p><ul><li>Gestire sessioni di interfaccia grafica.</li><li>Eseguire le operazioni di base utilizzando l'interfaccia grafica.</li><li>Modificare il desktop grafico in base alle tue esigenze.</li></ul><h3 id="desktop-grafico">Desktop grafico</h3><p>È possibile utilizzare un'<strong>I</strong>nterfaccia da <strong>L</strong>inea di <strong>C</strong>omando (<strong>CLI</strong>) o un'<strong>I</strong>nterfaccia <strong>G</strong>rafica <strong>U</strong>tente &nbsp;(<strong>GUI</strong>) quando si utilizza Linux. Per lavorare con la CLI, devi ricordare quali programmi e comandi vengono utilizzati per eseguire attività e come ottenere in modo rapido e accurato maggiori informazioni sul loro uso e opzioni. D'altra parte, l'utilizzo della GUI è spesso veloce e facile. Ti consente di interagire con il tuo sistema tramite icone e schermate grafiche. Per compiti ripetitivi, la CLI è spesso più efficiente, mentre con la GUI è più facile spostarsi se non ricordi tutti i dettagli o fai qualcosa solo raramente.</p><p>Impareremo come gestire le sessioni usando la GUI per le tre famiglie di distribuzione Linux che trattiamo di più in questo corso: Red Hat (CentOS, Fedora), SUSE (openSUSE) e Debian (Ubuntu, Mint). Dal momento che stiamo usando la variante basata su GNOME di openSUSE anziché quella basata su KDE, tutte sono in realtà abbastanza simili. Se stai usando KDE (o altri desktop Linux come XFCE), la tua esperienza varierà in qualche modo rispetto a quanto mostrato, ma non in modo intrinsecamente difficile, poiché le interfacce utente hanno adottato determinati comportamenti comuni sui moderni sistemi operativi. Nelle sezioni successive di questo corso ci concentreremo in modo molto dettagliato sull'interfaccia della riga di comando, che è praticamente la stessa su tutte le distribuzioni.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/fe27a9c47f2e272c238dc227cb749528/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/gnomedts.png" class="kg-image" alt="Three screenshots showing Ubuntu, CentOS, and OpenSUSE desktops" width="1281" height="809" loading="lazy"><figcaption>I Desktop Ubuntu, CentOS, e openSUSE</figcaption></figure><h3 id="il-sistema-window-x">Il Sistema Window X</h3><p>In generale, in un sistema desktop Linux, il sistema Window X viene caricato come uno dei passaggi finali nel processo di avvio. È spesso solo chiamato X.</p><p>Un servizio chiamato <strong>Display Manager</strong> tiene traccia dei display forniti e carica il server X (cosiddetto, perché fornisce servizi grafici alle applicazioni, a volte chiamate client X).Il <strong>Display Manager</strong> gestisce anche gli accessi grafici e avvia l'ambiente desktop appropriato dopo che un utente accede.</p><p>X è un software piuttosto vecchio; risale a metà degli anni '80 e, in quanto tale, ha alcune carenze sui sistemi moderni (ad esempio, la sicurezza), poiché è stato spinto piuttosto lontano dai suoi scopi originali. Un sistema più recente, noto come <a href="https://wayland.freedesktop.org/">Wayland</a>, lo sta gradualmente superando ed è il sistema di visualizzazione predefinito per Fedora, RHEL 8 e altre recenti distribuzioni. Per la maggior parte, sembra proprio X per l'utente, sebbene sotto il cofano sia abbastanza diverso.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/44717c86868ff7e9edc71c5747bb84ab/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch03_screen28.jpg" class="kg-image" alt="Display manager" width="472" height="190" loading="lazy"><figcaption>Display Manager</figcaption></figure><p>Un ambiente desktop è costituito da un gestore di sessione, che avvia e mantiene i componenti della sessione grafica, e il gestore delle finestre, che controlla il posizionamento e il movimento delle finestre, le barre dei titoli della finestra e i controlli.</p><p>Sebbene questi possano essere combinati, generalmente un insieme di utility, un gestore di sessione e un gestore di finestre vengono utilizzati insieme come unità e insieme forniscono un ambiente desktop senza soluzione di continuità.</p><p>Se il Display Manager non viene avviato per impostazione predefinita nel runlevel predefinito, è possibile avviare il desktop grafico in modo diverso, dopo l'accesso a una console in modalità testo, eseguendo <strong><code>startx</code></strong> dalla riga di comando. Oppure, è possibile avviare manualmente il Display Manager (<strong>GDM</strong>, <strong>LightDM</strong>, <strong>KDM</strong>, <strong>XDM</strong>, ecc.) dalla riga di comando. Ciò differisce dall'esecuzione di <strong><code>startx</code></strong> poiché i display manager proietteranno un segnale allo schermo. Ne discutiamo dopo.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/c4a2925d0a2d22c238c9f1d91f71635b/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch03_screen29.jpg" class="kg-image" alt="Desktop environment" width="496" height="195" loading="lazy"></figure><h3 id="avvio-della-gui">Avvio della GUI</h3><p>Quando si installa un ambiente desktop, il Display Manager X parte alla fine del processo di avvio. È responsabile dell'avvio del sistema grafico, di fornire l'accesso all'utente e dell'avvio dell'ambiente desktop dell'utente. È spesso possibile selezionare da una serie di ambienti desktop quando si accede al sistema.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/b2b0c2d435bf94d2b9f10dab925967e5/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch04_screen05.jpg" class="kg-image" alt="Hand clicking Login button" width="330" height="274" loading="lazy"></figure><p>Il Display Manager predefinito per GNOME si chiama <strong>gdm</strong>. Altri gestori di display popolari includono <strong>lightdm</strong> (utilizzato su Ubuntu prima della versione 18.04 LTS) e <strong>kdm</strong> (associato a KDE).</p><h3 id="ambiente-desktop-gnome">Ambiente Desktop GNOME</h3><p>GNOME è un ambiente desktop popolare con un'interfaccia utente grafica di facile utilizzo. È fornito come ambiente desktop predefinito per la maggior parte delle distribuzioni Linux, tra cui Red Hat Enterprise Linux (RHEL), Fedora, CentOS, SUSE Linux Enterprise, Ubuntu e Debian. GNOME ha una navigazione basata sui menu ed è talvolta una transizione facile da compiere per gli utenti di Windows. Tuttavia, come vedrai, il look and feel, vale a dire le caratteristiche dell'interfaccia grafica, può essere abbastanza diverso tra le distribuzioni, anche se tutte usano GNOME.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/70a3215567cf5bf6d84f1affb3ab0dfc/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_Ch4_Sec1_Gnome_logo.jpg" class="kg-image" alt="GNOME logo" width="240" height="330" loading="lazy"></figure><p>Un altro ambiente desktop comune molto importante nella storia di Linux e anche ampiamente utilizzato è KDE, che è stato spesso usato in combinazione con SUSE e openSUSE. Altre alternative per un ambiente desktop includono Unity (presente su versioni Ubuntu più vecchie, ma ancora basato su GNOME), XFCE e LXDE. Come accennato in precedenza, la maggior parte degli ambienti desktop seguono una struttura simile a GNOME e ci limiteremo principalmente a esso per mantenere le cose meno complesse.</p><!--kg-card-begin: html--><h3>Video: Avvio del Sistema, Accesso e Uscita</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/521d4479-5b72-4a6f-b5ce-423a416fcf6a-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="sfondo-del-desktop-grafico">Sfondo del Desktop Grafico</h3><p>Ogni distribuzione Linux viene fornita con la propria collezione di sfondi desktop. È possibile modificare il valore predefinito scegliendo un nuovo sfondo o selezionando un'immagine personalizzata da impostare come sfondo del desktop. Se non si desidera utilizzare un'immagine come sfondo, è possibile selezionare un colore da visualizzare sul desktop.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/88ef9ed386547375f0aa50738e1f5af3/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch04_screen63.jpg" class="kg-image" alt="Desktop computer, keyboard, and mouse" width="330" height="239" loading="lazy"></figure><p>Inoltre, puoi anche cambiare il tema del desktop, che cambia l'aspetto del sistema Linux. Il tema definisce anche l'aspetto delle finestre dell'applicazione.</p><p>Impareremo come cambiare lo sfondo e il tema desktop.</p><h3 id="personalizzare-lo-sfondo-del-desktop">Personalizzare lo sfondo del desktop</h3><p>Per modificare lo sfondo, è possibile fare clic con il tasto destro ovunque sul desktop e scegliere "<strong>Cambia sfondo</strong>".</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/5e5585d25c7c44efc58a7c5d7c5e6f2f/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/ubuntubg.png" class="kg-image" alt="Screenshot showing how to customize the desktop background" width="1159" height="819" loading="lazy"></figure><!--kg-card-begin: html--><h3>Video: Come Cambiare le Sfondo del Desktop</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V000600_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="gnome-tweaks">gnome-tweaks</h3><p>Le impostazioni più comuni, sia personali che a livello di sistema, si trovano facendo clic nell'angolo in alto a destra, su un'icona che rappresenta un ingranaggio o un'altra icona che potrebbe rappresentare delle impostazioni, a seconda della tua distribuzione Linux.</p><p>Tuttavia, ci sono molte impostazioni che molti utenti vorrebbero modificare che non sono accessibili con il metodo sopra descritto; l'utility delle impostazioni predefinita è purtroppo piuttosto limitata nelle moderne distribuzioni basate su GNOME. Sfortunatamente, la ricerca di semplicità ha effettivamente reso difficile adattare il tuo sistema ai tuoi gusti e bisogni.</p><p>Fortunatamente, esiste un'utility standard, <strong>gnome-tweaks</strong>, che espone molte più opzioni di impostazione. Ti consente inoltre di installare facilmente le estensioni di terze parti. Non tutte le distribuzioni Linux installano questo strumento nella modalità predefinita, ma è sempre disponibile (le distribuzioni più vecchie hanno utilizzato il nome <strong>gnome-tweak-tool</strong>). Potrebbe essere necessario eseguirlo digitando <strong><code>Alt-F2</code></strong>, poi digitando il nome. Potresti voler aggiungerlo alla tua lista dei <strong>Preferiti</strong> come discuteremo.</p><p>Come verrà trattato nel prossimo capitolo, alcune recenti distribuzioni hanno eliminato la maggior parte delle funzionalità da questo strumento e la hanno messe in una nuova, chiamata <strong>gnome-extensions-app</strong>.</p><p>Nella videata seguente, la mappatura della tastiera viene regolata in modo che il tasto <strong>Capslock</strong> altrimenti inutile possa essere utilizzato come tasto <strong>Ctrl</strong> aggiuntivo; ciò risparmia agli utenti che usano molto il tasto <strong><code>Ctrl</code></strong> (come gli appassionati di <strong>emacs</strong>) lo stiramento del dito mignolo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/b9aeb9e063eda9567443ab77501286d3/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/gnometweaktool.png" class="kg-image" alt="gnome-tweaks" width="950" height="700" loading="lazy"><figcaption>gnome-tweaks</figcaption></figure><h3 id="cambiare-il-tema">Cambiare il Tema</h3><p>L'aspetto visivo delle applicazioni (i pulsanti, le barre di scorrimento, i widget e altri componenti grafici) sono controllati da un <strong>tema</strong>. GNOME è provvisto di una serie di temi diversi che possono cambiare l'aspetto delle tue applicazioni.</p><p>Il metodo esatto per modificare il tema può dipendere dalla tua distribuzione. Per le vecchie distribuzioni basate su GNOME, puoi semplicemente eseguire <strong>gnome-tweaks</strong>, come mostrato nello videata da Ubuntu. Tuttavia, come accennato in precedenza, se non lo trovi lì, dovrai utilizzare <strong>gnome-extensions-app</strong>, che ora può configurare i temi. Ciò richiede l'installazione di ancora più software e di andare su siti web esterni, quindi è improbabile che sia visto come un miglioramento da parte di molti utenti.</p><p>Ci sono altre opzioni per ottenere ulteriori temi oltre alla selezione predefinita. Puoi scaricare e installare temi dal sito <a href="https://wiki.gnome.org/Personalization">Wiki di GNOME</a>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/3b96462047b8da666c50589c7d570824/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/themesuse.png" class="kg-image" alt="Screenshot showing how to change the theme" width="856" height="631" loading="lazy"><figcaption>Cambiare il tema</figcaption></figure><h3 id="gestione-della-sessione">Gestione della Sessione</h3><h4 id="accedere-e-uscire">Accedere e uscire</h4><p>Il video successivo mostra una dimostrazione per l'accesso e l'uscita sulle principali famiglie di distribuzione Linux su cui ci concentriamo in questo corso. Nota che l'evoluzione ci ha portato a una fase in cui ha poca importanza la distribuzione che scegli, poiché sono tutte piuttosto simili.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/11ec196634ac41509995f108392b568f/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch04_screen06.jpg" class="kg-image" alt="Login and logout buttons" width="147" height="134" loading="lazy"></figure><!--kg-card-begin: html--><h3>Accesso e Uscita usando la GUI in Ubuntu, openSUSE e CentOS</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/a80a237c-bd71-4521-ac74-d85271da8103-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h4 id="bloccare-lo-schermo">Bloccare lo schermo</h4><p>Spesso è una buona idea bloccare lo schermo per impedire ad altre persone di accedere alla tua sessione mentre sei lontano dal tuo computer.</p><p><strong>Nota</strong>: <em>questo non sospende il computer; tutte le applicazioni e i processi continuano a funzionare mentre lo schermo è bloccato</em>.</p><p>Esistono due modi per bloccare lo schermo:</p><ul><li>Utilizzando l'interfaccia grafica.<br>Facendo clic nell'angolo in alto a destra del desktop, quindi facendo clic sull'icona del lucchetto.</li><li>Utilizzando il collegamento per tastiera <strong><code>SUPER-L</code></strong><br>(Il tasto <strong>SUPER</strong> è anche conosciuto come il tasto <strong>Windows</strong>).</li></ul><p>La scorciatoia da tastiera per il blocco dello schermo può essere modificata cambiando le impostazioni della tastiera, la combinazione esatta varia in base alla distribuzione, ma non è difficile da verificare.</p><p>Per rientrare nella sessione desktop devi solo fornire di nuovo la tua password.</p><p>La videata qui sotto mostra come bloccare lo schermo per Ubuntu. I dettagli variano poco nelle distribuzioni moderne.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/d6ee89ab27aa5ff6a458210c8cba91b8/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/lockubuntu.png" class="kg-image" alt="Screenshot showing how to lock the screen for Ubuntu" width="802" height="678" loading="lazy"></figure><!--kg-card-begin: html--><h3>Video: Maggiori Dettagli su Bloccare e Sbloccare lo Schermo</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/fe32cdd9-570c-4bfa-a631-ab2ced0ed7cf-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video><!--kg-card-end: html--><h3 id="cambiare-utente">Cambiare Utente</h3><p>Linux è un vero sistema operativo multiutente, che consente a più di un utente di essere connesso contemporaneamente. Se più di una persona utilizza il sistema, è meglio che ogni persona abbia il proprio account utente e la password. Ciò consente impostazioni personalizzate, directory home e altri file. Gli utenti possono fare a turno utilizzando la macchina, mantenendo in vita le sessioni di tutti o addirittura effettuare l'accesso simultaneamente attraverso la rete.</p><!--kg-card-begin: html--><h3>Video: Cambiare Utente in Linux</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V000800_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h4 id="spegnere-e-riavviare">Spegnere e riavviare</h4><p>Oltre al normale avvio e arresto giornaliero del computer, potrebbe essere richiesto un riavvio del sistema come parte di alcuni importanti aggiornamenti del sistema, generalmente solo quelli che coinvolgono l'installazione di un nuovo kernel Linux.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/6eea345b1964582af01d9f9d8923a608/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch04_screen26.jpg" class="kg-image" alt="Turn On Button" width="288" height="271" loading="lazy"></figure><p>L'avvio del processo di spegnimento dal desktop grafico è piuttosto banale su tutte le distribuzioni Linux attuali, con pochissime variazioni. Discuteremo più tardi come farlo dalla riga di comando, usando il comando <strong><code>shutdown</code></strong>.</p><p>In tutti i casi, fai clic sull'icona delle impostazioni (l'ingranaggio) o sull'icona di alimentazione e segui le istruzioni.</p><h4 id="spegnere-e-riavviare-su-gnome">Spegnere e riavviare su GNOME</h4><p>Per spegnere il computer in qualsiasi recente distribuzione Linux basata su GNOME, eseguire i seguenti passaggi:</p><ol><li>Fai clic sull'icona dell'<strong>alimenzione</strong> o dell'<strong>ingranaggio</strong> nell'angolo in alto a destra dello schermo.</li><li>Fai clic su <strong>Spegni</strong>, oppure <strong>Riavvia</strong>, oppure <strong>Annulla</strong>. Se non fai nulla, il sistema si spegne in 60 secondi.</li></ol><p>Le operazioni di spegnimento, riavvio e disconnessione chiederanno conferma prima di andare avanti. Questo perché molte applicazioni non salveranno correttamente i loro dati quando terminate in questo modo.</p><p>Salva sempre i documenti e i dati prima di riavviare, chiudere o disconnetterti.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/d7aec4ecc99a643b6970ce88e4c7e7c5/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/centos8shutdown.png" class="kg-image" alt="Screenshot showing shutting down and restarting in Ubuntu" width="691" height="540" loading="lazy"><figcaption>Spegnimento e Riavvio</figcaption></figure><h4 id="sospensione">Sospensione</h4><p>Tutti i computer moderni supportano la modalità di <strong>sospensione</strong>, quando si desidera smettere di utilizzare il proprio computer per un po'. La modalità di sospensione consente di salvare lo stato attuale del sistema e consente di riprendere la tua sessione più rapidamente, il sistema, pur rimanendo acceso, utilizza pochissima potenza nello stato di sospensione. Funziona mantenendo le applicazioni del sistema, il desktop e così via, nella RAM del sistema, ma spegnendo tutto l'altro hardware. Ciò riduce il tempo per un avvio a sistema completo e conserva l'energia della batteria. Si dovrebbe notare che le moderne distribuzioni Linux si avviano così in fretta che la quantità di tempo risparmiata è spesso poco significativa</p><p>Per sospendere il sistema, la procedura si avvia come quella per l'arresto o il blocco dello schermo.</p><p>Il metodo è abbastanza semplice e universale nelle distribuzioni basate su GNOME più recenti. Se fai clic sull'icona di <strong>alimentazione</strong> e lo mantieni per un breve periodo, poi rilasci, otterrai l'icona visualizzata di seguito, che puoi cliccare per sospendere il sistema. Alcune distribuzioni, incluso Ubuntu, possono ancora mostrare un'icona di sospensione separata invece di usare il metodo sopra indicato.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/8bc873843331e65aa45bd8e71847d96f/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/suspend.png" class="kg-image" alt="Suspending Ubuntu system" width="225" height="225" loading="lazy"><figcaption>Sospensione del Sistema</figcaption></figure><h3 id="operazioni-di-base">Operazioni di base</h3><p>Anche gli utenti esperti possono dimenticare il comando preciso che lancia un'applicazione o esattamente quali opzioni e argomenti richiede. Fortunatamente, Linux consente di aprire rapidamente applicazioni utilizzando l'interfaccia grafica.</p><p>Le applicazioni si trovano in diverse posizioni in Linux (e all'interno di GNOME):</p><ul><li>Dal menu delle <strong>Applicazioni</strong> nell'angolo in alto a sinistra.</li><li>Dal menu delle <strong>Attività</strong> nell'angolo in alto a sinistra.</li><li>In alcune versioni di <strong>Ubuntu</strong>, dal pulsante <strong>Dash</strong> (il pulsante con il simbolo di Ubuntu) nell'angolo in alto a sinistra.</li><li>Per <strong>KDE</strong> e alcuni altri ambienti, le applicazioni possono essere aperte dal pulsante nell'angolo in basso a sinistra.</li></ul><p>Nelle pagine seguenti imparerai come eseguire operazioni di base in Linux usando l'interfaccia grafica.</p><h4 id="individuare-le-applicazioni">Individuare le applicazioni</h4><p>A differenza di altri sistemi operativi, l'installazione iniziale di Linux di solito viene fornita con una vasta gamma di applicazioni e archivi software che contengono migliaia di programmi che consentono di svolgere una vasta gamma di attività con il tuo computer. Per la maggior parte delle attività principali, di solito è già installata un'applicazione predefinita. Tuttavia, puoi sempre installare più applicazioni e provare diverse opzioni.</p><p>Ad esempio, Firefox è popolare poiché è il browser predefinito in molte distribuzioni Linux, mentre Epiphany, Konqueror e Chromium (la base open source per Google Chrome) sono generalmente disponibili per l'installazione dai repository del software. Sono disponibili anche browser Web proprietari, come Opera e Chrome.</p><p>La localizzazione delle applicazioni dai menu GNOME e KDE è facile, in quanto sono ordinatamente organizzate in sottomenu per categorie.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/b24b746b71f7af714d6b07bf9074af87/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/ubuntu1910aps.png" class="kg-image" alt="Locating Applications" width="749" height="549" loading="lazy"><figcaption>Trovare le applicazioni</figcaption></figure><h3 id="applicazioni-predefinite">Applicazioni predefinite</h3><p>Sono disponibili più applicazioni per svolgere varie attività e aprire un file di un determinato tipo. Ad esempio, è possibile fare clic su un indirizzo web durante la lettura di una e-mail e avviare un browser come Firefox o Chrome.</p><p>Per impostare le applicazioni predefinite, aprire il menu <strong>Impostazioni</strong> (su tutte le distribuzioni di Linux recenti), quindi fare clic su <strong>Applicazioni predefinite</strong> o <strong>Dettagli &gt; Applicazioni predefinite</strong>. L'elenco esatto varierà da quanto mostrato qui nella videata di Ubuntu in base a ciò che è effettivamente installato e disponibile sul tuo sistema.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/2c777f97912b2abd2ae65425ee717e2f/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/defappsubuntu.png" class="kg-image" alt="Default Applications" width="701" height="552" loading="lazy"><figcaption>Applicazioni Predefinite</figcaption></figure><!--kg-card-begin: html--><h3>Video: Impostazione delle Applicazioni Predefinite</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/614af67b-a489-498e-939d-a8ca6b7f4a69-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="file-manager">File Manager</h3><p>Ogni distribuzione implementa il <strong>File Manager Nautilus</strong>, che viene utilizzato per navigare nel file system. Può individuare i file e, quando su un file viene fatto clic, lo eseguirà se si tratta di un programma o verrà lanciata un'applicazione associata utilizzando il file come dati. Questo comportamento è del tutto familiare a chiunque abbia utilizzato altri sistemi operativi.</p><p>Per avviare il file manager dovrai fare clic sulla sua icona (un cassetto) che si trova facilmente, di solito sotto i preferiti o gli accessori. Avrà il nome <strong>File</strong>.</p><p>Verrà aperta una finestra che visualizza la tua directory <strong>Home</strong>. Il pannello sinistro della finestra del File Manager contiene un elenco di directory comunemente usate, come <strong>Desktop</strong>, <strong>Documenti</strong>, <strong>Download</strong> e <strong>Immagini</strong>.</p><p>È possibile fare clic sull'icona della <em>lente d'ingrandimento</em> in alto a destra per cercare file o directory (cartelle).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/b3549f989a4dba1ca5720eaa3254bd15/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/homefilesubuntu.png" class="kg-image" alt="File manager" width="874" height="585" loading="lazy"><figcaption>File Manager</figcaption></figure><h3 id="le-directory-nella-home">Le Directory nella Home</h3><p>Il File Manager consente di accedere a diverse posizioni sul tuo computer e sulla rete, tra cui la directory <strong>Home</strong>, <strong>Desktop</strong>, <strong>Documenti</strong>, <strong>Immagini</strong> e <strong>Altre posizioni</strong>.</p><p>Ogni utente con un account sul sistema avrà una directory home, di solito creata sotto <strong><code>/home</code></strong>, e in genere denominata con il nome utente, ad esempio <strong><code>/home/studente</code></strong>.</p><p>Per impostazione predefinita, i file salvati dall'utente verranno inseriti in un albero di directory che inizia da lì. La creazione dell'account, durante l'installazione del sistema o in un secondo momento, quando viene aggiunto un nuovo utente, crea anche le directory predefinite, situate sotto la directory home dell'utente, come <strong>Documenti</strong>, <strong>Desktop</strong> e <strong>Download</strong>.</p><p>Nella videata mostrata per Ubuntu, abbiamo scelto il formato di visualizzazione a elenco e stiamo anche mostrando i <em>file nascosti</em> (quelli che iniziano con un punto). Vedi se puoi fare lo stesso sulla tua distribuzione.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/2a56d63772e3aff037135e2624dd9a37/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/homefilesu1910.png" class="kg-image" alt="Home Directories" width="632" height="559" loading="lazy"><figcaption>Le Directory in Home</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/6c854e3e52c67c75ffa29d8bdfcf8f77/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/otherfilesu1910.png" class="kg-image" alt="Other Locations" width="630" height="510" loading="lazy"><figcaption>Altre Posizioni</figcaption></figure><h3 id="visualizzare-file">Visualizzare file</h3><p>Il File Manager consente di visualizzare file e directory in più di un modo.</p><p>È possibile passare tra la visualizzazione a icone e quella a elenco, facendo clic sulle icone relative nella barra superiore, oppure è possibile premere rispettivamente <strong><code>Ctrl-1</code></strong> o <strong><code>Ctrl-2</code></strong>.</p><p>Inoltre, è inoltre possibile disporre i file e le directory per nome, dimensione, tipo o data di modifica per un ulteriore ordinamento. Per fare ciò, fai clic su <strong>Visualizza</strong> e seleziona <strong>Disponi elementi</strong>.</p><p>Un'altra opzione utile è quella di mostrare i <em>file nascosti</em> (chiamati a volte impropriamente file di sistema), che di solito sono file di configurazione nascosti per impostazione predefinita e il cui nome inizia con un punto. Per mostrare i file nascosti, selezionare <strong>Mostra file nascosti</strong> dal menu oppure premere <strong><code>Ctrl-H</code></strong>.</p><p>Il file browser fornisce diversi modi per personalizzare la vista della finestra per facilitare le operazioni di drag and drop (trascina e rilascia). È inoltre possibile modificare le dimensioni delle icone selezionando <strong>Zoom In</strong> e <strong>Zoom Out</strong> nel &nbsp;menu <em>Visualizza</em>.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/59b49f03cf57ecaf483df8f2f06f32b9/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/homefilessuse.png" class="kg-image" alt="Viewing files in openSUSE" width="694" height="631" loading="lazy"></figure><h3 id="cercare-i-file">Cercare i File</h3><p>Il File Manager include un ottimo strumento di ricerca all'interno della finestra del file browser.</p><ol><li>Fai clic su <strong>Cerca</strong> nella barra degli strumenti (per visualizzare una casella di testo).</li><li>Digita la parola chiave nella casella di testo. Ciò fa sì che il sistema esegua una ricerca ricorsiva dalla directory corrente per qualsiasi file o directory che contiene una parte di questa parola chiave.</li></ol><p>Per aprire il <em>File Manager</em> dalla riga di comando, sulla maggior parte dei sistemi digita semplicemente <strong><code>nautilus</code></strong>.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/2ba30c1757235e33a807500b1af9da42/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch04_screen48.jpg" class="kg-image" alt="Magnifying glass" width="288" height="271" loading="lazy"></figure><p>La scorciatoia da tastiera per accedere alla casella di testo di ricerca è <strong><code>Ctrl-F</code></strong>. È possibile uscire dalla visualizzazione della casella di testo di ricerca facendo nuovamente clic sul pulsante di ricerca oppure con <strong><code>Ctrl-F</code></strong> nuovamente.</p><p>Un altro modo rapido per accedere a una directory specifica è premere <strong><code>Ctrl-L</code></strong>, che ti mostrerà una casella di testo di <strong>Posizione</strong> (location) per digitare un percorso verso una directory.</p><h3 id="maggiori-informazioni-sulla-ricerca-di-file">Maggiori Informazioni sulla Ricerca di File</h3><p>Puoi perfezionare la tua ricerca oltre alla parola chiave iniziale utilizzando un menu a discesa per filtrare ulteriormente la ricerca.</p><ol><li>In base alla <strong>Posizione</strong> o al <strong>Tipo di File</strong>, seleziona criteri aggiuntivi dal menu a discesa.</li><li>Per ripetere la ricerca, fai clic sul pulsante <strong>Ricarica</strong>.</li><li>Per aggiungere più criteri di ricerca, fai clic sul pulsante <strong><code>+</code></strong> e seleziona <em>Criteri di ricerca aggiuntivi</em>.</li></ol><p>Ad esempio, se desideri trovare un file PDF contenente la parola <strong>Linux</strong> nella directory home, vai alla tua directory <strong>home</strong> e cerca la parola "Linux". Dovresti vedere che il criterio di ricerca predefinito limita già la ricerca alla tua directory <strong>home</strong>. Infine, fai clic sul pulsante <strong><code>+</code></strong> per aggiungere un altro criterio di ricerca, seleziona <strong>Tipo di file</strong> per il tipo e seleziona <strong>PDF</strong> nel menu a discesa del <strong>Tipo di File</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/92b46e00f94ca300fff886db41b6d2d3/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/searchubuntu.png" class="kg-image" alt="Screenshot showing how to search for files based on different criteria" width="767" height="631" loading="lazy"><figcaption>Cercare File</figcaption></figure><h3 id="modificare-un-file">Modificare un File</h3><p>La modifica di qualsiasi file di testo tramite l'interfaccia grafica è facile nell'ambiente desktop GNOME. Basta fare doppio clic sul file sul desktop o nella finestra del file browser Nautilus per aprire il file con l'editor di testo predefinito.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/e47912c6805c7126aef11b9e4c5b8713/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch04_screen50.jpg" class="kg-image" alt="gedit icon" width="288" height="271" loading="lazy"></figure><p>L'editor di testo predefinito in GNOME è <strong>gedit</strong>. È semplice ma potente, ideale per la modifica dei documenti, per aggiungere note rapide e programmare. Sebbene <strong>gedit</strong> sia concepito come editor di testo per uso generale, offre ulteriori funzionalità per il controllo ortografico, l'evidenziazione, gli elenchi di file e le statistiche.</p><p>Imparerai molto di più sull'uso degli editor di testo in un capitolo successivo.</p><h3 id="rimuovere-un-file">Rimuovere un file</h3><p>L'eliminazione di un file in Nautilus sposterà automaticamente i file eliminati nella directory <strong><code>.local/share/Trash/files/</code></strong> (una specie di cestino) sotto la directory home dell'utente. Esistono diversi modi per eliminare file e directory usando Nautilus.</p><ol><li>Seleziona tutti i file e le directory che desideri eliminare.</li><li>Premi <strong><code>Ctrl-Canc</code></strong> sulla tastiera o fai clic con il pulsante destro del mouse sul file.</li><li>Seleziona <strong>Sposta nel Cestino</strong></li></ol><p>Nota che è possibile avere un'opzione <strong>Elimina in modo permanente</strong> che bypassa la cartella del cestino e che questa opzione può essere visibile tutto il tempo o solo nella visualizzazione in modalità elenco (anziché in modalità icona).</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/7384e7b0992fc01be5544b2d30992425/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch04_screen52.jpg" class="kg-image" alt="Trash can" width="271" height="254" loading="lazy"></figure><p>Per eliminare <em>permanentemente</em> un file:</p><ol><li>Sul pannello sinistro all'interno di una finestra del file browser Nautilus, fai clic con il pulsante destro del mouse sulla directory del cestino.</li><li>Seleziona <strong>Svuota Cestino</strong>.</li></ol><p>In alternativa, seleziona il file o la directory che si desidera eliminare in modo permanente e premi <strong><code>Shift-Canc</code></strong>.</p><p>Per precauzione, non dovresti mai eliminare la tua directory <em>Home</em>, poiché molto probabilmente cancellerà tutti i file di configurazione GNOME ed eventualmente ti impedirà di accedere. Molte configurazioni di sistema personali e di programmi sono conservate nella tua directory home.</p><!--kg-card-begin: html--><h3>Video: Individuare le Applicazioni Predefinite ed Esplorare i Filesystem in OpenSUSE</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V001000_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="capitolo-4-riepilogo">Capitolo 4 - Riepilogo</h3><p>Hai completato il capitolo 4. Riassumiamo i concetti chiave trattati:</p><ul><li><strong>GNOME</strong> è un popolare ambiente desktop e interfaccia utente grafica che funziona sopra il sistema operativo Linux.</li><li>Il Display Manager predefinito per GNOME si chiama <strong>gdm</strong>.</li><li>Il Display Manager gdm presenta all'utente la schermata di accesso, che richiede il nome utente e la password di accesso.</li><li>La disconnessione tramite l'ambiente desktop ferma i processi nella tua sessione <strong>X</strong> corrente e ritorna alla schermata di accesso.</li><li>Linux consente agli utenti di passare tra più sessioni di accesso.</li><li>La sospensione mette il computer in modalità sospensione.</li><li>Per ogni attività principale, esiste generalmente un'applicazione predefinita installata.</li><li>Ogni utente creato nel sistema avrà una directory <strong>home</strong>.</li><li>Il menu <em>Posizioni</em> contiene voci che consentono di accedere a diverse parti del computer e della rete.</li><li><strong>Nautilus</strong> fornisce tre formati per visualizzare i file.</li><li>La maggior parte degli editor di testo si trova nel sottomenu Accessori.</li><li>Ogni distribuzione Linux viene fornita con il proprio insieme di sfondi desktop.</li><li>GNOME è provvisto di una serie di temi diversi che possono cambiare il modo in cui le tue applicazioni appaiono.</li></ul><h2 id="capitolo-5-configurazione-del-sistema-dall-interfaccia-grafica">Capitolo 5: Configurazione del Sistema dall'Interfaccia Grafica</h2><h3 id="obiettivi-formativi-2">Obiettivi Formativi</h3><p>Entro la fine di questo capitolo, dovresti essere in grado di:</p><ul><li>Applicare le impostazioni di sistema, visualizzazione, e data e ora, utilizzando il pannello <em>Impostazioni</em>.</li><li>Tenere traccia delle impostazioni di rete e gestire connessioni utilizzando Network Manager in Linux.</li><li>Installare e aggiornare il software in Linux da un'interfaccia grafica.</li></ul><p><em><strong>Nota</strong>: rivisiteremo tutte queste attività in seguito, quando discuteremo di come realizzarle dall'interfaccia della riga di comando.</em></p><h3 id="impostazioni-di-sistema-visualizzazione-data-e-ora">Impostazioni di sistema, visualizzazione, data e ora</h3><p>Il pannello delle <strong>Impostazioni</strong> di sistema consente di controllare la maggior parte delle opzioni di configurazione di base e le impostazioni del desktop, come specificare la risoluzione dello schermo, la gestione delle connessioni di rete o la modifica della data e dell'ora del sistema.</p><p>Per il Desktop Manager GNOME, si fa clic sull'angolo in alto a destra e quindi si seleziona Impostazioni (l'icona di un ingranaggio). A seconda della distribuzione, potresti trovare anche altri modi per entrare nella configurazione delle impostazioni. Troverai anche la variazione nella disposizione del menu tra distribuzioni e versioni Linux, quindi potresti dover cercare dove trovare le impostazioni necessarie da esaminare o modificare.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/09/image-410.png" class="kg-image" alt="image-410" width="600" height="400" loading="lazy"><figcaption>Pannello Impostazione di Sistema</figcaption></figure><h3 id="menu-impostazioni-di-sistema">Menu Impostazioni di Sistema</h3><p>Per approfondire la configurazione, è possibile configurare elementi come lo schermo, la tastiera, le stampanti, ecc.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/37875055d2d8368b6c8b2edd1af73ace/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/ubuntusetapps.png" class="kg-image" alt="Configuring Applications on Ubuntu" width="955" height="699" loading="lazy"><figcaption>Configurare Applicazioni in Ubuntu</figcaption></figure><p>Si può anche fare clic sull'icona <em>Utenti</em> (che può essere sotto <em>Dettagli</em>) per impostare i valori per gli utenti di sistema, come la loro immagine di accesso, password, ecc.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/9f2a5b8ed015a7d39f6b15df59b78c98/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/ubuntuuserconfig.png" class="kg-image" alt="Configuring the User Attributes" width="955" height="699" loading="lazy"><figcaption>Configurare gli Attributi Utente</figcaption></figure><h3 id="gnome-tweaks-1">gnome-tweaks</h3><p>Molte impostazioni di configurazione personalizzate non compaiono nei menu delle impostazioni. Invece, è necessario lanciare uno strumento chiamato <strong>gnome-tweaks</strong> (o <strong>gnome-tweak-tool</strong> su vecchie distribuzioni Linux). Non abbiamo ancora discusso come lavorare alla riga di comando, ma puoi sempre lanciare un programma come questo digitando <strong>Alt-F2</strong> e inserendo il comando. Alcune distribuzioni hanno un collegamento ai menu delle modifiche nelle impostazioni, ma per qualche ragione misteriosa, molti nascondono questo strumento e diventa difficile scoprire come modificare anche attributi e comportamenti desktop anche piuttosto di base.</p><p>Le cose importanti che puoi fare con questo strumento includono la selezione di un tema, la configurazione di estensioni che puoi ottenere dalla distribuzione o il download da Internet, i caratteri di controllo, modificare il layout della tastiera e impostare quali programmi si avviano quando si accede.</p><p>Le versioni GNOME più recenti hanno rimosso gran parte della funzionalità di <strong>gnome-tweaks</strong>; le estensioni ora devono essere configurate utilizzando una nuova app chiamata <strong>gnome-extensions-app</strong>. Il ragionamento dietro questa scelta è oscuro.</p><p>La videata qui proviene da un sistema Red Hat con alcune estensioni installate, ma non tutte utilizzate.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/206249c2dbef56d193c9a2e4a7a97b2f/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/gnometweaks.png" class="kg-image" alt="Extensions installed on RHEL" width="1229" height="803" loading="lazy"><figcaption>Estensioni installate in RHEL</figcaption></figure><h3 id="impostazione-dello-schermo">Impostazione dello Schermo</h3><p>Facendo click su <strong>Impostazioni &gt; Schermi</strong> (o <strong>Impostazioni &gt; Dispositivi &gt; Schermi</strong>) verranno visualizzate le impostazioni più comuni per gestire i dispositivi di visualizzazione. Queste impostazioni funzionano indipendentemente dai driver di visualizzazione specifici che stai eseguendo. L'aspetto esatto dipenderà enormemente da quanti monitor hai e altri fattori, come la distribuzione di Linux e la versione particolare.</p><p>Se il sistema utilizza un driver di scheda video proprietario (di solito da <strong>nVidia</strong> o <strong>AMD</strong>), probabilmente avrai un programma di configurazione separato per quel driver. Questo programma può offrire più opzioni di configurazione, ma può anche essere più complicato e potrebbe richiedere l'accesso a sysadmin (root). Se possibile, è necessario configurare le impostazioni nel pannello di visualizzazione anziché con il programma proprietario.</p><p>Il server X, che in realtà fornisce la GUI, utilizza <strong><code>/etc/x11/xorg.conf</code></strong> come file di configurazione <em>se esiste</em>; nelle moderne distribuzioni Linux, questo file è generalmente presente solo in circostanze insolite, come quando sono in uso alcuni driver grafici meno comuni. La modifica diretta di questo file di configurazione è di solito per utenti più avanzati.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/c2af77e8b90d9b4213a8ec8218838999/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/Display_Settings_on_an_Older_and_Newer_Ubuntu_Systems.png" class="kg-image" alt="Display Settings on an Older and Newer Ubuntu Systems" width="1748" height="869" loading="lazy"><figcaption>Impostazioni dello Schermo su Sistemi Ubuntu Vecchi e Nuovi</figcaption></figure><h3 id="impostazione-della-risoluzione-e-configurazione-di-pi-schermate">Impostazione della Risoluzione e Configurazione di più Schermate</h3><p>Mentre il tuo sistema di solito scoprirà automaticamente la migliore risoluzione per lo schermo, potrebbe sbagliare in alcuni casi o potresti voler cambiare la risoluzione per soddisfare le tue esigenze.</p><p>Puoi farlo usando il pannello <em>Schermi</em>. Il passaggio alla nuova risoluzione sarà efficace quando si fa clic su <em>Applica</em> e quindi conferma che la risoluzione funziona. Nel caso in cui la risoluzione selezionata non funzioni o non sei contento dell'aspetto, il sistema tornerà alla risoluzione originale dopo un breve timeout. Ancora una volta, l'aspetto esatto della schermata di configurazione varierà molto tra distribuzioni e versioni, ma di solito è piuttosto intuitivo e facile, una volta che si trova il menu di configurazione.</p><p>Nella maggior parte dei casi, la configurazione per più schermi viene impostata automaticamente come un grande schermo che copre tutti i monitor, usando una supposizione ragionevole per la loro disposizione. Se la disposizione degli schermi non è come desiderato, una casella di controllo può attivare la modalità specchio, in cui lo stesso schermo è visualizzato su tutti i monitor. Facendo clic su una particolare immagine di monitor è possibile configurare la risoluzione di ciascuno e realizzare un grande schermo o emulare lo stesso schermo, ecc.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/c9815d9b551a9d4bc8f71530471ae097/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/multidisplayrhel8.png" class="kg-image" alt="Setting the Resolution and Configuring Multiple Screens" width="886" height="867" loading="lazy"><figcaption>Impostazione delle Risoluzione e Configurazione Monitor Multipli</figcaption></figure><!--kg-card-begin: html--><h3>Video: Configurazione Impostazioni dello Schermo
<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/9adfb9c8-07d7-4910-92ce-b3168692e082-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--></h3><h3 id="impostazioni-di-data-e-ora">Impostazioni di Data e Ora</h3><p>Per impostazione predefinita, Linux utilizza sempre il tempo universale coordinato (UTC) per la gestione interna del tempo. I valori di tempo visualizzati o archiviati si basano sull'impostazione del fuso orario di sistema per ottenere il tempo corretto. UTC è simile, ma più accurato del Greenwich Mean Time (GMT).</p><p>Se fai clic sul tempo visualizzato sul pannello superiore, puoi regolare il formato con cui viene visualizzata la data e l'ora; su alcune distribuzioni, puoi anche alterare i valori.</p><p>Le impostazioni di data e ora più dettagliate possono essere selezionate dalla finestra Data e ora nel menu Impostazioni di sistema.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/fafa9bab5da6a86410f8a8ad98278e34/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/ubuntudate.png" class="kg-image" alt=" Screenshot showing Date and Time Settings in Ubuntu" width="707" height="455" loading="lazy"><figcaption>Impostazioni di Data e Ora</figcaption></figure><p>Le impostazioni "automatiche" si riferiscono all'uso del protocollo temporale di rete (NTP), di cui discutiamo in seguito.</p><h3 id="protocollo-temporale-di-rete">Protocollo Temporale di rete</h3><p><a href="https://it.wikipedia.org/wiki/Network_Time_Protocol">Il <strong>N</strong>etwork <strong>T</strong>ime <strong>P</strong>rotocol (NTP)</a> è il protocollo più popolare e affidabile per impostare l'ora locale consultando server Internet dedicati. Le distribuzioni Linux sono sempre provviste di una configurazione NTP funzionante, che si riferisce a specifici server dedicati eseguiti o chiamati dalla distribuzione. Ciò significa che nessuna configurazione, oltre "acceso" o "spento", è generalmente richiesta per la sincronizzazione del tempo di rete.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/6559d606ae7043ce2a92fc4b5b17cdf9/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch05_screen11.jpg" class="kg-image" alt="Picture showing different types of watches" width="288" height="271" loading="lazy"></figure><h3 id="configurazione-della-rete">Configurazione della rete</h3><p>Tutte le distribuzioni Linux dispongono di file di configurazione di rete, ma i formati e le posizioni dei file possono differire da una distribuzione all'altra. La modifica a mano di questi file può gestire configurazioni piuttosto complicate, ma non è molto dinamica o facile da imparare e usare. L'app di configurazione di rete <strong>Network Manager</strong> è stata sviluppata per rendere le cose più semplici e più uniformi tra le distribuzioni. Può elencare tutte le reti disponibili (sia cablate che wireless), consentire la scelta di una rete cablata, wireless o mobile a banda larga, gestire password e impostare le reti private virtuali (VPN). Ad eccezione di situazioni insolite, è generalmente meglio consentire a <strong>Network Manager</strong> di stabilire le connessioni e tenere traccia delle tue impostazioni.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/427ccf47dacf228ee1d15672b07d0ad2/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch05_screen18.jpg" class="kg-image" alt="Network Configuration" width="371" height="288" loading="lazy"><figcaption>Configurazione della Rete</figcaption></figure><p>In questa sezione, imparerai come gestire le connessioni di rete, tra cui connessioni cablate e wireless e connessioni mobili a banda larga e VPN.</p><h3 id="connessioni-cablate-e-wireless">Connessioni cablate e wireless</h3><p>Le connessioni cablate di solito non richiedono una configurazione complicata o manuale. L'interfaccia hardware e la presenza del segnale vengono rilevati automaticamente, quindi Network Manager configura le impostazioni di rete effettive tramite il protocollo di configurazione IP dinamica (DHCP).</p><p>Per configurazioni statiche che non utilizzano DHCP, la configurazione manuale può anche essere eseguita facilmente tramite Network Manager. È inoltre possibile modificare l'indirizzo MAC (Ethernet <strong>M</strong>edia <strong>A</strong>ccess <em>C</em>ontrol) se l'hardware lo supporta. L'indirizzo MAC è un numero esadecimale univoco della tua scheda di rete.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/34c61d5ecb1a4f58b5729603e08b9995/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch05_screen19.jpg" class="kg-image" alt="Wired and Wireless Connections" width="288" height="271" loading="lazy"></figure><p>Le reti wireless di solito non sono collegate per impostazione predefinita. È possibile visualizzare l'elenco delle reti wireless disponibili e vedere a quale (se presente) sei attualmente connesso utilizzando Network Manager. È quindi possibile aggiungere, modificare o rimuovere reti wireless note e anche specificare quali si desidera connettere per impostazione predefinita quando presenti.</p><h3 id="configurazione-di-connessioni-wireless">Configurazione di connessioni wireless</h3><p>Per configurare una rete wireless in qualsiasi recente distribuzione basata su GNOME:</p><p>Fai clic sull'angolo in alto a destra, che apre una finestra di impostazioni e/o rete. Mentre l'aspetto esatto dipenderà dalla distribuzione e dalla versione Linux, sarà sempre possibile fare clic su un sottomenu Wi-Fi, purché sia presente l'hardware. Ecco un esempio di un sistema RHEL 8:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/8f9f84c03fd872a5c510fb1370ea0933/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/wifi1.png" class="kg-image" alt="Configuring Wireless Connections" width="343" height="567" loading="lazy"><figcaption>Configurazione delle Connessioni Wireless</figcaption></figure><p>Seleziona la rete wireless a cui desideri connetterti. Se si tratta di una rete sicura, la prima volta ti richiederà di inserire la password appropriata. Per impostazione predefinita, la password verrà salvata per connessioni successive.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/ab20057497c4be2af101ade999d0bd52/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/wifi2.png" class="kg-image" alt="Selecting a Network" width="469" height="498" loading="lazy"></figure><p>Se fai click su Impostazioni Wi-Fi, comparirà la terza schermata. Se fai clic sull'icona dell'ingranaggio per qualsiasi connessione, è possibile configurarla in modo più dettagliato.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/image.png" class="kg-image" alt="image" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/image.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/image.png 974w" sizes="(min-width: 720px) 720px" width="974" height="404" loading="lazy"><figcaption>Configurazione della Rete</figcaption></figure><p>Le distribuzioni più vecchie e altre distribuzioni Linux possono apparire un poco diverse nei dettagli, ma i passaggi e le scelte sono essenzialmente identici, in quanto tutte eseguono Network Manager con aspetti un po' diversi.</p><!--kg-card-begin: html--><h3>Video: Gestione delle Impostazioni di Rete</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/704c77f7-c31b-4aab-996f-cafbd84e72a7-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="connessioni-mobili-a-banda-larga-e-vpn">Connessioni mobili a banda larga e VPN</h3><p>È possibile impostare una connessione mobile a banda larga con Network Manager, che avvia una procedura guidata per impostare i dettagli della connessione per ciascuna connessione.</p><p>Una volta terminata la configurazione, la rete è configurata automaticamente ogni volta che la rete a banda larga è collegata.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/c747395ba6d725293f45c70acc201e93/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch05_screen26.jpg" class="kg-image" alt="Picture showing laptops, tablets and cell phones connected with lines" width="288" height="271" loading="lazy"></figure><p>Network Manager può anche gestire le tue connessioni VPN.</p><p>Supporta molte tecnologie VPN, come quelle native IPSEC, Cisco OpenConnect (tramite il client Cisco o un client open source nativo), Microsoft PPTP e OpenVPN.</p><p>Potresti ottenere supporto per VPN come pacchetto separato dal tuo distributore. È necessario installare questo pacchetto se la tua VPN preferita non è supportata.</p><h3 id="installazione-e-aggiornamento-del-software">Installazione e aggiornamento del software</h3><p>Ogni pacchetto in una distribuzione Linux fornisce un pezzo del sistema, come il kernel Linux, il compilatore <strong>C</strong>, le utility per manipolare il testo o la configurazione della rete oppure i tuoi browser web e client di posta elettronica preferiti.</p><p>I pacchetti dipendono spesso l'uno dall'altro. Ad esempio, poiché il tuo client e-mail può comunicare utilizzando <a href="https://it.wikipedia.org/wiki/Transport_Layer_Security">SSL/TLS</a>, dipenderà da un pacchetto che fornisce la possibilità di crittografare e decrittografare la comunicazione SSL e TLS e non si installerà a meno che quel pacchetto non sia installato contemporaneamente.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/277740a799bbd78d92f99ef9acc4e8db/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch05_screen33.jpg" class="kg-image" alt="Cartoon pinguin carrying books" width="288" height="271" loading="lazy"></figure><p>Tutti i sistemi hanno un'utilità di basso livello che gestisce i dettagli di decomprimere un pacchetto e sistemare le varie parti nei posti giusti. Il più delle volte, lavorerai con un'utilità di livello superiore che sa come scaricare i pacchetti da Internet e può gestire dipendenze e gruppi per te.</p><p>In questa sezione, imparerai come installare e aggiornare il software in Linux utilizzando il <a href="https://it.wikipedia.org/wiki/Advanced_Packaging_Tool">sistema di gestione di pacchetti Debian</a> (utilizzato anche da sistemi come Ubuntu) e sistemi di <a href="https://it.wikipedia.org/wiki/RPM_Package_Manager">gestione di pacchetti RPM</a> (che vengono utilizzati dalle famiglie di sistemi Red Hat e SUSE). Questi sono i principali in uso sebbene ci siano altri che funzionano bene per altre distribuzioni che sono meno utilizzate.</p><h3 id="sistema-di-gestione-di-pacchetti-debian">Sistema di Gestione di Pacchetti Debian</h3><p>Diamo un'occhiata alla gestione dei pacchetti per il sistema della famiglia Debian.</p><p><strong>dpkg</strong> è il gestore dei pacchetti basilare per questi sistemi. Può installare, rimuovere e creare pacchetti. A differenza dei sistemi di gestione dei pacchetti di livello superiore, non scarica e installa automaticamente i pacchetti e soddisfa le loro dipendenze.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/c3ddb34d7f243624f888143c74665a94/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch05_screen34.jpg" class="kg-image" alt="Package Management in the Debian family system" width="236" height="393" loading="lazy"><figcaption>Gestione dei Pacchetti nei Sistemi della Famiglia Debian</figcaption></figure><p>Per i sistemi basati su Debian, il sistema di gestione dei pacchetti di livello superiore è il sistema di utility <a href="https://it.wikipedia.org/wiki/Advanced_Packaging_Tool">APT (<strong>A</strong>dvanced <strong>P</strong>ackage <strong>T</strong>ool)</a>. In generale, mentre ogni distribuzione all'interno della famiglia Debian utilizza APT, crea la propria interfaccia utente sopra di esso (ad esempio, apt e apt-get, synaptic, gnome-software, Ubuntu Software Center, ecc.). Sebbene i repository apt siano generalmente compatibili tra loro, il software che contengono generalmente non lo è. Pertanto, la maggior parte dei repository mira a una particolare distribuzione (come Ubuntu) e spesso i distributori di software gestiscono più repository per supportare più distribuzioni. Le dimostrazioni sono mostrate più avanti in questa sezione.</p><h3 id="sistema-di-gestione-di-pacchetti-red-hat-rpm-">Sistema di Gestione di Pacchetti Red Hat (RPM)</h3><p><a href="https://it.wikipedia.org/wiki/RPM_Package_Manager">Red Hat Package Manager</a> (RPM) è l'altro sistema di gestione dei pacchetti popolare sulle distribuzioni Linux. È stato sviluppato da Red Hat e adottato da una serie di altre distribuzioni, tra cui SUSE/OpenSUSE, Mageia, CentOS, Oracle Linux e altri.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch05_screen35.jpg" class="kg-image" alt="LFS01_ch05_screen35" width="264" height="387" loading="lazy"><figcaption>Gestore di Pacchetti Red Had</figcaption></figure><p>Il gestore dei pacchetti di livello superiore differisce tra le distribuzioni. Quelle della famiglia Red Hat RHEL/CentOS utilizzano storicamente RPM mentre Fedora usa <a href="https://it.wikipedia.org/wiki/Sistema_di_gestione_dei_pacchetti">dnf</a>, pur mantenendo una buona retrocompatibilità con il vecchio programma Yum. Anche le distribuzioni della famiglia SUSE come OpenSUSE si appoggiano a RPM, ma usano l'interfaccia Zypper.</p><h3 id="gestione-del-software-yast-di-opensuse">Gestione del software YAST di OpenSuse</h3><p>Il software <a href="https://it.wikipedia.org/wiki/Yet_Another_Setup_Tool"><strong>Y</strong>et <strong>a</strong>nother <strong>S</strong>etup <strong>T</strong>ool</a> (YAST) è simile ad altri gestori di pacchetti grafici. È un'applicazione basata su RPM. È possibile aggiungere, rimuovere o aggiornare i pacchetti utilizzando questa applicazione molto facilmente. Per accedere al gestore del software YAST:</p><ul><li>Fai clic su <strong>Attività</strong></li><li>Nella casella di <strong>ricerca</strong>, digita <strong>yast</strong></li><li>Fai clic sull'icona <strong>YaST</strong></li><li>Fai clic su <strong>Gestione del software</strong></li></ul><p>Puoi anche trovare YAST facendo clic su <strong>Applicazioni &gt; Altro-Yast</strong>, un posto un po' strano dove trovarlo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/3daba44866ca7ac7880f9eb6e74bc467/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch05_screen36.jpg" class="kg-image" alt="openSUSE's software management" width="264" height="387" loading="lazy"><figcaption>Gestione del Software di openSUSE</figcaption></figure><p>L'applicazione di gestione del software YAST di OpenSuse è simile ai gestori di pacchetti grafici in altre distribuzioni. Una dimostrazione del gestore del software YAST è mostrata più avanti in questa sezione.</p><!--kg-card-begin: html--><h3>Video: Installazione e Aggiornamento Software in openSUSE</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V001400_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>

<h3>Video: Installazione e Aggiornamento Software in Ubuntu</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/0f1c4770-518a-416f-87ef-c1d515e4023f-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="capitolo-5-riepilogo">Capitolo 5 - Riepilogo</h3><p>Hai completato il capitolo 5. Riassumiamo i concetti chiave trattati:</p><ul><li>Puoi controllare le opzioni di configurazione di base e le impostazioni del desktop tramite il pannello <em>Impostazioni di sistema</em>.</li><li>Linux utilizza sempre il tempo universale coordinato (UTC) per il proprio tempo interno. È possibile configurare le impostazioni della data e dell'ora dalla finestra <em>Impostazioni di sistema</em>.</li><li>Il protocollo temporale di rete (NTP) è il protocollo più popolare e affidabile per l'impostazione dell'ora locale tramite server Internet.</li><li>Il pannello <em>Schermi</em> consente di modificare la risoluzione dello schermo e configurare più monitor.</li><li>Network Manager può presentare reti wireless disponibili, consentire la scelta di una rete a banda larga wireless o mobile, gestire le password e impostare VPN.</li><li><strong>dpkg</strong> e <strong>RPM</strong> sono i sistemi di gestione dei pacchetti più popolari utilizzati sulle distribuzioni Linux.</li><li>Le distribuzioni Debian utilizzano utility basate su <strong>dpkg</strong> e <strong>apt</strong> per la gestione dei pacchetti.</li><li>RPM è stato sviluppato da Red Hat e adottato da una serie di altre distribuzioni, tra cui Opensuse, Mandriva, CentOS, Oracle Linux e altre.</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/04/image.png" class="kg-image" alt="image" width="330" height="306" loading="lazy"></figure><h2 id="capitolo-6-applicazioni-comuni">Capitolo 6: Applicazioni Comuni</h2><p>Entro la fine di questo capitolo, dovresti avere familiarità con le comuni applicazioni Linux, tra cui:</p><ul><li>Applicazioni Internet come browser e programmi di posta elettronica.</li><li>Suite di produttività d'ufficio come LibreOffice.</li><li>Strumenti per sviluppatori, come compilatori, debugger, ecc.</li><li>Applicazioni multimediali, come quelle per audio e video.</li><li>Editor grafici come GIMP e altre utilità grafiche.</li></ul><h3 id="applicazioni-internet">Applicazioni Internet</h3><p>Internet è una rete globale che consente agli utenti di tutto il mondo di eseguire più attività, come la ricerca di dati, la comunicazione tramite e-mail e lo shopping online. Ovviamente, è necessario utilizzare applicazioni consapevoli della rete per sfruttare Internet. Queste includono:</p><ul><li>Browser Web</li><li>Client e-mail</li><li>Applicazioni di Riproduzione Multimediale in Streaming</li><li><a href="https://en.wikipedia.org/wiki/Internet_Relay_Chat">Internet Relay Chat</a> (IRC)</li><li>Software di conferenza</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/04/image-1.png" class="kg-image" alt="image-1" width="513" height="347" loading="lazy"><figcaption>Applicazioni Internet</figcaption></figure><h3 id="browser-web"><strong>Browser Web</strong></h3><p>Come discusso nel capitolo sulle <em>Interfacce grafiche</em>, Linux offre un'ampia varietà di browser web, basati sia su grafica che testo, tra cui:</p><ul><li>Firefox</li><li>Google Chrome</li><li>Chromium</li><li>Epiphany (ora Web)</li><li>Konqueror</li><li>linx, lynx, w3m</li><li>Opera</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/12/image-31.png" class="kg-image" alt="image-31" width="600" height="400" loading="lazy"></figure><h3 id="applicazioni-email">Applicazioni Email</h3><p>Le applicazioni email consentono l'invio, la ricezione e la lettura di messaggi su Internet. I sistemi Linux offrono un ampio numero di client di posta elettronica, sia grafici che basati sul testo. Inoltre, molti utenti utilizzano semplicemente i loro browser per accedere ai propri account email.</p><p>La maggior parte dei client di posta elettronica utilizza il <a href="https://it.wikipedia.org/wiki/Internet_Message_Access_Protocol">Protocollo di Accesso dei Messaggi Internet</a> (IMAP) o il <a href="https://it.wikipedia.org/wiki/Post_Office_Protocol">Protocollo Post Office</a> (POP) per accedere alle email memorizzate su un server di posta remoto. La maggior parte delle applicazioni email visualizzano anche email in formato HTML (HyperText Markup Language) che visualizza oggetti, come immagini e collegamenti ipertestuali. Le funzionalità delle applicazioni email avanzate includono la possibilità di importare elenchi di indirizzi/contatti, informazioni di configurazione ed email da altre applicazioni email.</p><p>Linux supporta i seguenti tipi di applicazioni email:</p><ul><li>Client di posta elettronica grafica, come Thunderbird, Evolution e Claws Mail.</li><li>Client email in modalità di testo, come Mutt e Mail.</li><li>Tutti i client basati su browser Web, come Gmail, Yahoo Mail e Office 365.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/7ea5bcb37db44af78b8e56e6f351fc00/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch17_screen05.jpg" class="kg-image" alt="Email applications" width="514" height="319" loading="lazy"><figcaption>Applicazioni Email</figcaption></figure><h3 id="altre-applicazioni-internet">Altre Applicazioni Internet</h3><p>I sistemi Linux forniscono molte altre applicazioni per l'esecuzione di attività relative a Internet. Queste includono:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Applicazione</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>FileZilla</code></strong></td>
<td>Client FTP intuitivo che supporta <a href="https://it.wikipedia.org/wiki/File_Transfer_Protocol">FTP</a>, <a href="https://it.wikipedia.org/wiki/SSH_File_Transfer_Protocol">Secure File Transfer Protocol</a> (SFTP), e <a href="https://it.wikipedia.org/wiki/FTPS">FTP Secured</a> (FTPS). Usati per trasferire file da/per server (FTP).</td>
</tr>
<tr>
<td><strong><code>Pidgin</code></strong></td>
<td>Per accedere a GTalk, AIM, ICQ, MSN, IRC e altre reti di messaggistica.</td>
</tr>
<tr>
<td><strong><code>Ekiga</code></strong></td>
<td>Per connettersi a reti <a href="https://it.wikipedia.org/wiki/Voice_over_IP">Voice over Internet Protocol</a> (VoIP).</td>
</tr>
<tr>
<td><strong><code>Hexchat</code></strong></td>
<td>Per accedere alle reti <a href="https://it.wikipedia.org/wiki/Internet_Relay_Chat">Internet RelayChat</a> (IRC).</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/save-website-ftp-login-credentials-filezilla-1.png" class="kg-image" alt="save-website-ftp-login-credentials-filezilla-1" width="512" height="512" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/Pidgin-Chat-App-logo.png" class="kg-image" alt="Pidgin-Chat-App-logo" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/Pidgin-Chat-App-logo.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/Pidgin-Chat-App-logo.png 670w" width="670" height="316" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/Xchat_mongol.png" class="kg-image" alt="Xchat_mongol" width="188" height="171" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/image-32.png" class="kg-image" alt="image-32" width="268" height="150" loading="lazy"></figure><h3 id="applicazioni-per-ufficio">Applicazioni per Ufficio</h3><p>La maggior parte dei sistemi informatici odierni dispone di applicazioni di produttività (a volte chiamate suite di ufficio) disponibili o installate. Ogni suite è una raccolta di programmi strettamente connessi utilizzati per creare e modificare diversi tipi di file come:</p><ul><li>Testo (articoli, libri, report, ecc.)</li><li>Fogli di calcolo</li><li>Presentazioni</li><li>Oggetti grafici.</li></ul><p>La maggior parte delle distribuzioni Linux offre <a href="https://it.libreoffice.org">LibreOffice</a>, una suite di ufficio open source resa disponibile nel 2010, che si è evoluta da OpenOffice. Mentre sono disponibili altre suite per ufficio, LibreOffice è la più matura, ampiamente usata e sviluppata intensamente.</p><p>Inoltre, gli utenti di Linux hanno pieno accesso alle suite di ufficio basate su Internet come Google Docs e Microsoft Office 365.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LibreOffice_external_logo_600px.png" class="kg-image" alt="LibreOffice_external_logo_600px" srcset="https://www.freecodecamp.org/italian/news/content/images/2023/03/LibreOffice_external_logo_600px.png 600w" width="600" height="178" loading="lazy"></figure><h4 id="componenti-di-libreoffice">Componenti di LibreOffice</h4><p>Le applicazioni incluse in LibreOffice sono:</p><ul><li>Writer: elaborazione testi</li><li>Calc: fogli di calcolo</li><li>Impress: presentazioni</li><li>Draw: creazione e modifica di grafica e diagrammi.</li></ul><p>Le applicazioni LibreOffice possono leggere e scrivere formati di documenti non nativi, come quelli utilizzati da Microsoft Office. Di solito, la fedeltà viene mantenuta abbastanza bene, ma documenti complicati potrebbero avere alcune conversioni imperfette.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/libreoffice.png" class="kg-image" alt="libreoffice" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/libreoffice.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/libreoffice.png 837w" sizes="(min-width: 720px) 720px" width="837" height="719" loading="lazy"><figcaption>Applicazioni LibreOffice</figcaption></figure><h3 id="applicazioni-per-lo-sviluppo">Applicazioni per lo Sviluppo</h3><p>Le distribuzioni Linux sono dotate di un insieme completo di applicazioni e strumenti necessari a chi sviluppa sia le applicazioni utente che il kernel stesso o si occupa della manutenzione.</p><p>Questi strumenti sono strettamente integrati e includono:</p><ul><li>Editor avanzati personalizzati per le esigenze dei programmatori, come <strong>vi</strong> ed <strong>emacs</strong>.</li><li>Compilatori (come <strong>gcc</strong> e <strong>clang</strong> per programmi in C e C++) per ogni linguaggio di computer che sia mai esistito, compresi quelli nuovi molto popolari come Golang e Rust.</li><li>Debugger come <strong>gdb</strong>, vari front end grafici e molti altri strumenti di debug (come <strong>Valgrind</strong>).</li><li>Programmi di misurazione e monitoraggio delle prestazioni, alcuni con interfacce grafiche facili da usare, altri più arcani e pensati per essere utilizzati solo da ingegneri informatici esperti.</li><li><a href="https://it.wikipedia.org/wiki/Ambiente_di_sviluppo_integrato">Ambienti di sviluppo integrati</a> (IDE) completi come <strong>Eclipse</strong> e <strong>Visual Studio Code</strong> che mettono insieme tutti questi strumenti.</li></ul><p>Su altri sistemi operativi, questi strumenti devono essere ottenuti e installati separatamente, spesso a un costo elevato, mentre su Linux sono tutti disponibili senza alcun costo attraverso i sistemi di installazione standard dei pacchetti.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/gccegg-65.png" class="kg-image" alt="gccegg-65" width="109" height="130" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/gdb-logo.png" class="kg-image" alt="gdb-logo" width="300" height="193" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/image-33.png" class="kg-image" alt="image-33" width="470" height="110" loading="lazy"></figure><h3 id="lettori-audio">Lettori Audio</h3><p>Le applicazioni multimediali vengono utilizzate per ascoltare musica, guardare video, ecc., nonché per presentare e visualizzare testo e grafica. I sistemi Linux offrono una serie di applicazioni di lettori audio, tra cui:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Applicazione</strong></th>
<th><strong>Uso</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Amarok</strong></td>
<td>lettore MP3 maturo con interfaccia grafica, che riproduce file audio e video e file audio in streaming). Ti consente di creare una playlist che contiene un gruppo di brani, e usa un database per conservare le informazioni riguardo alla collezione musicale.</td>
</tr>
<tr>
<td><strong>Audacity</strong></td>
<td>Usato per registrare e modificare suoni. Può essere installato velocemente tramite un gestore di pacchetti.  Audacity ha una semplice interfaccia per iniziare.</td>
</tr>
<tr>
<td><strong>Rhythmbox</strong></td>
<td>Supporta un'ampia varietà di sorgenti di musica digitale, compreso lo streaming audio da Internet e i podcast. L'applicazione consente anche di cercare un certo brano in una libreria. Supporta le <em>playlist intelligenti</em> con una funzionalità di <em>aggiornamento automatico</em>, con la quale puoi aggiornare playlist in base a criteri di selezione specificati.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Naturalmente, un sistema Linux può anche connettersi con servizi di streaming di musica online commerciale, come Pandora e Spotify tramite browser web.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/Amarok_logo.jpeg" class="kg-image" alt="Amarok_logo" width="368" height="137" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/Screen_Shot_2018-07-01_at_1.48.44_PM.png" class="kg-image" alt="Screen_Shot_2018-07-01_at_1.48.44_PM" width="592" height="194" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/2000px-Rhythmbox_logo_256px.svg.png" class="kg-image" alt="2000px-Rhythmbox_logo_256px.svg" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/2000px-Rhythmbox_logo_256px.svg.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/2000px-Rhythmbox_logo_256px.svg.png 1000w, https://www.freecodecamp.org/italian/news/content/images/size/w1600/2023/03/2000px-Rhythmbox_logo_256px.svg.png 1600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/2000px-Rhythmbox_logo_256px.svg.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="2000" loading="lazy"></figure><h3 id="lettori-video">Lettori Video</h3><p>I lettori video possono riprodurre input da molte fonti diverse, dalla macchina locale o su Internet.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch17_screen13.jpg" class="kg-image" alt="LFS01_ch17_screen13" width="340" height="318" loading="lazy"></figure><p>I sistemi Linux offrono un certo numero di queste applicazioni, tra cui:</p><ul><li>VLC</li><li>MPlayer</li><li>Xine</li><li>Totem</li></ul><h3 id="editor-video">Editor Video</h3><p>Gli editor video sono usati per modificare video e film. I sistemi Linux offrono diversi editor video, tra i quali:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Applicazione</strong></th>
<th><strong>Uso</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Cinepaint</strong></td>
<td>Ritocco fotogramma-per-fotogramma. Cinepaint è usato per editare immagini in un video.</td>
</tr>
<tr>
<td><strong>Blender</strong></td>
<td>Crea animazioni e progetti 3D. Blender è uno strumento professionale che usa la modellazione come punto di partenza. Ci sono strumenti complessi e potenti per cattura della fotocamera, registrazione, editing, creazione e ritocco video, ognuno ha un proprio focus.</td>
</tr>
<tr>
<td><strong>Cinelerra</strong></td>
<td>Cattura, compone e modifica audio/video.</td>
</tr>
<tr>
<td><strong>FFmpeg</strong></td>
<td>Registra, converte ed esegue streaming di audio/video. FFmpeg è un convertitore di formato, tra le altre cose, e ha altri strumenti come <strong><code>ffplay</code></strong> e <strong><code>ffserver</code></strong>.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/lp_cinepaint.png" class="kg-image" alt="lp_cinepaint" width="495" height="124" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/blenderlogosocket.png" class="kg-image" alt="blenderlogosocket" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/blenderlogosocket.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/blenderlogosocket.png 1000w, https://www.freecodecamp.org/italian/news/content/images/size/w1600/2023/03/blenderlogosocket.png 1600w, https://www.freecodecamp.org/italian/news/content/images/size/w2400/2023/03/blenderlogosocket.png 2400w" sizes="(min-width: 720px) 720px" width="2000" height="640" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/cinelerra-logo.png" class="kg-image" alt="cinelerra-logo" width="300" height="132" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/2000px-FFmpeg_Logo_new.svg.png" class="kg-image" alt="2000px-FFmpeg_Logo_new.svg" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/2000px-FFmpeg_Logo_new.svg.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/2000px-FFmpeg_Logo_new.svg.png 1000w, https://www.freecodecamp.org/italian/news/content/images/size/w1600/2023/03/2000px-FFmpeg_Logo_new.svg.png 1600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/2000px-FFmpeg_Logo_new.svg.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="536" loading="lazy"></figure><h3 id="gimp-programma-di-manipolazione-immagini-">GIMP (Programma di Manipolazione Immagini)</h3><p>Gli editor grafici consentono di creare, modificare, visualizzare e organizzare immagini di vari formati, come <a href="https://it.wikipedia.org/wiki/JPEG">JPEG</a> (o JPG), <a href="https://it.wikipedia.org/wiki/Portable_Network_Graphics">Portable Network Graphics</a> (PNG), <a href="https://it.wikipedia.org/wiki/Graphics_Interchange_Format">Graphics Interchange Format</a> (GIF) e <a href="https://it.wikipedia.org/wiki/Tagged_Image_File_Format">TIFF</a>.</p><p>Il Programma di Manipolazione delle Immagini GNU (GIMP) è uno strumento di ritocco e modifica dell'immagine ricco di funzionalità simile ad Adobe Photoshop ed è disponibile su tutte le distribuzioni Linux. Alcune caratteristiche di GIMP sono:</p><ul><li>La gestione di qualsiasi formato di file di immagine.</li><li>Disponibilità di molti plugin e filtri a scopo speciale.</li><li>Esposizione di ampie informazioni sull'immagine, come livelli, canali e istogrammi.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/gimpsuse.png" class="kg-image" alt="gimpsuse" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/gimpsuse.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/gimpsuse.png 939w" sizes="(min-width: 720px) 720px" width="939" height="789" loading="lazy"><figcaption>Editor GIMP</figcaption></figure><h3 id="utilit-grafiche">Utilità grafiche</h3><p>Oltre a GIMP, ci sono altre utilità grafiche che aiutano a eseguire varie attività relative all'immagine, tra cui:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Utilità Grafica</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>eog</strong></td>
<td>Eye of Gnome (eog) è un visualizzatore di immagini che fornisce funzionalità di presentazione e alcuni strumenti di editing di immagini, come rotazione e ridimensionamento. Può anche scorrere le immagini in una directory con solo un clic.</td>
</tr>
<tr>
<td><strong>Inkscape</strong></td>
<td>Inkscape è un editor di immagini con molte funzionalità di editing. Funziona con strati e trasformazioni dell'immagine. A volte è paragonato ad Adobe Illustrator.</td>
</tr>
<tr>
<td><strong>convert</strong></td>
<td>convert è uno strumento da riga di comando (parte dell'insieme di applicazioni ImageMagick) che può modificare i file di immagine in molti modi. Le opzioni includono la conversione del formato file e numerose opzioni di modifica dell'immagine, come sfocatura, ridimensionamento, smacchiatura ecc.</td>
</tr>
<tr>
<td><strong>Scribus</strong></td>
<td>Scribus viene utilizzato per la creazione di documenti utilizzati per la pubblicazione e fornisce un ambiente <a href="https://en.wikipedia.org/wiki/WYSIWYG">Wysiwyg</a> (<em>quello che vedi è ciò che ottieni</em>). Fornisce anche numerosi strumenti di editing.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/eog.jpeg" class="kg-image" alt="eog" width="390" height="129" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/inkscape-logo.png" class="kg-image" alt="inkscape-logo" width="420" height="442" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/logo_liquid-60--1-.gif" class="kg-image" alt="logo_liquid-60--1-" width="475" height="284" loading="lazy"></figure><h3 id="capitolo-6-riepilogo">Capitolo 6 - Riepilogo</h3><p>Hai completato il capitolo 6. Riassumiamo i concetti chiave trattati:</p><ul><li>Linux offre un'ampia varietà di applicazioni Internet, come browser web, client di posta elettronica, applicazioni per riproduzione media online e altre.</li><li>I browser web supportati da Linux possono essere grafici o basati sul testo, come Firefox, Google Chrome, Epiphany, w3m, Lynx e altri.</li><li>Linux supporta client di posta elettronica grafica, come Thunderbird, Evolution e Claws Mail e client di posta elettronica in modalità di testo, come Mutt e Mail.</li><li>I sistemi Linux forniscono molte altre applicazioni per l'esecuzione di attività relative a Internet, come Filezilla, XChat, Pidgin e altri.</li><li>La maggior parte delle distribuzioni Linux offre LibreOffice per creare e modificare diversi tipi di documenti.</li><li>I sistemi Linux offrono intere suite di applicazioni e strumenti di sviluppo, inclusi compilatori e debugger.</li><li>I sistemi Linux offrono una serie di lettori audio tra cui Amarok, Audacity e Rhythmbox.</li><li>I sistemi Linux offrono svariati lettori video, tra cui VLC, Mplayer, Xine e Totem.</li><li>I sistemi Linux offrono diversi editor video, tra cui Kino, Cinepaint e Blender.</li><li>L'utilità GIMP (GNU Image Manipulation Program) è uno strumento di ritocco e modifica dell'immagine ricco di funzionalità disponibile su tutte le distribuzioni Linux.</li><li>Altre utility grafiche che aiutano ad eseguire diverse attività legate alle immagini sono eog, Inkscape, convert, e Scribus.</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_Summary.jpg" class="kg-image" alt="LFS01_Summary" width="330" height="306" loading="lazy"></figure><h2 id="capitolo-7-operazioni-dalla-riga-di-comando">Capitolo 7: Operazioni dalla riga di comando</h2><h3 id="obiettivi-formativi-3">Obiettivi formativi</h3><p>Entro la fine di questo capitolo, dovresti essere in grado di:</p><ul><li>Utilizzare la riga di comando per eseguire operazioni in Linux.</li><li>Cercare file.</li><li>Creare e gestire i file.</li><li>Installare e aggiornare il software.</li></ul><h3 id="introduzione-alla-riga-di-comando">Introduzione alla riga di comando</h3><p>Gli amministratori di sistema Linux trascorrono una parte significativa del loro tempo utilizzando il prompt della riga di comando. Spesso automatizzano attività e risolvono problemi in questo ambiente di testo. C'è un detto: <em>Le interfacce utente grafiche semplificano le attività facili, mentre le interfacce della riga di comando rendono possibili attività difficili"</em>. Linux si basa fortemente sull'abbondanza di strumenti di riga di comando. L'interfaccia della riga di comando offre i seguenti vantaggi:</p><ul><li>Non vi è alcun sovraccarico dovuto alla GUI.</li><li>Praticamente qualsiasi compito può essere svolto dalla riga di comando.</li><li>È possibile implementare script per attività spesso usate (o facili da dimenticare) e serie di procedure.</li><li>È possibile accedere a macchine remote ovunque su Internet.</li><li>È possibile avviare applicazioni grafiche direttamente dalla riga di comando invece di cercarle all'interno dei menu.</li><li>Mentre gli strumenti grafici possono variare tra le distribuzioni Linux, l'interfaccia della riga di comando no.</li></ul><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/aff4954e12f4f2a299a3c763a1679773/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/cmdline.png" class="kg-image" alt="Command line" width="512" height="512" loading="lazy"></figure><h3 id="utilizzare-un-terminale-di-testo-sul-desktop-grafico">Utilizzare un Terminale di Testo sul Desktop Grafico</h3><p>Un <strong>emulatore del terminale</strong> emula (simula) un terminale a sé stante all'interno di una finestra sul desktop. Con questo intendiamo che si comporta essenzialmente come se tu stessi accedendo alla macchina in un terminale di testo puro senza interfaccia grafica in esecuzione. La maggior parte dei programmi di emulatore terminale supporta più sessioni di terminale aprendo ulteriori schede o finestre.</p><p>Per impostazione predefinita, sugli ambienti desktop GNOME, l'applicazione <strong>gnome-terminal</strong> viene utilizzata per emulare un terminale in modalità testo in una finestra. Altri programmi di terminale disponibili includono:</p><ul><li><strong>xterm</strong></li><li><strong>konsole</strong> (predefinito in KDE)</li><li><strong>terminator</strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/38f9208d04f151d5d360416b21a00db7/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/terminalall.png" class="kg-image" alt="Using $ ls -a command on Ubuntu, openSUSE, Gentoo, and CentOS" width="1874" height="1018" loading="lazy"><figcaption><code>$ ls -a</code></figcaption></figure><h3 id="avviare-finestre-del-terminale">Avviare Finestre del Terminale</h3><p>Per aprire un terminale su qualsiasi sistema che utilizza un recente desktop GNOME fai clic su <strong>Applicazioni &gt; Strumenti di sistema &gt; Terminale</strong> oppure <strong>Applicazioni &gt; Utilità &gt; Terminale</strong>. Se non disponi del menu <strong>Applicazioni</strong>, dovrai installare il pacchetto <strong>gnome-shell-extensions</strong> e attivarlo con <strong>gnome-tweaks</strong>.</p><p>Su quasi tutte le più recenti distribuzioni basate su GNOME, puoi sempre aprire un terminale facendo clic con il pulsante destro del mouse ovunque sullo sfondo del desktop e selezionare <strong>Apri in terminale</strong>. Se questo non funziona, dovrai ancora una volta installare e attivare il pacchetto <strong>gnome-shell-extensions</strong> appropriato.</p><p>Puoi anche premere <strong><code>Alt-F2</code></strong>, poi digitare <strong>gnome-terminal</strong> oppure <strong>konsole</strong>, a seconda di quale sia appropriato.</p><p>Poiché le distribuzioni tendono a nascondere l'apertura di un terminale di riga di comando, e la posizione nei menu può variare nella GUI, è una buona idea capire come "attaccare" l'icona del terminale al pannello, il che potrebbe significare aggiungerlo al gruppo dei Preferiti sui sistemi GNOME.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/applications.png" class="kg-image" alt="applications" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/applications.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/applications.png 762w" sizes="(min-width: 720px) 720px" width="762" height="760" loading="lazy"><figcaption>Aprire un Terminale Usando il Desktop GNOME</figcaption></figure><h3 id="alcune-utility-di-base">Alcune Utility di Base</h3><p>Esistono alcune utility di base della riga di comando che vengono costantemente utilizzate e sarebbe impossibile procedere ulteriormente senza usarne alcune in forma semplice prima di discuterne in modo più dettagliato. Un breve elenco deve includere:</p><ul><li><strong>cat</strong>: usato per stampare un file (o per unire file).</li><li><strong>head</strong>: usato per mostrare le prime righe di un file.</li><li><strong>tail</strong>: usato per mostrare le ultime righe di un file.</li><li><strong>man</strong>: usato per consultare la documentazione.</li></ul><p>La videata qui sotto mostra utilizzi elementari di questi programmi. Nota che il simbolo pipe (<strong><code>|</code></strong>) è usato per fare in modo che un programma riceva come input il risultato di un altro programma.</p><p>Per la maggior parte delle volte, useremo queste utility solo nelle videate che mostrano varie attività, prima di discuterne in dettaglio.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/cmdutils.png" class="kg-image" alt="cmdutils" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/cmdutils.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/cmdutils.png 891w" sizes="(min-width: 720px) 720px" width="891" height="572" loading="lazy"><figcaption>Utility di Base da Riga di Comando&nbsp;</figcaption></figure><h3 id="la-riga-di-comando">La riga di comando</h3><p>La maggior parte delle righe di input digitate al prompt della shell ha tre elementi di base:</p><ul><li>Comando</li><li>Opzioni</li><li>Argomenti</li></ul><p>Il comando è il nome del programma che stai eseguendo. Può essere seguito da una o più opzioni (o switch) che modificano ciò che il comando può fare. Le opzioni di solito iniziano con uno o due trattini, ad esempio <strong><code>-p</code></strong> o <strong><code>--print</code></strong>, al fine di differenziarle dagli argomenti, che rappresentano quello su cui sta operando il comando.</p><p>Tuttavia, molti comandi non hanno opzioni, o argomenti, o nessuno dei due. Inoltre, altri elementi (come l'impostazione delle variabili di ambiente) possono anche apparire sulla riga di comando durante l'avvio di un'attività.</p><h3 id="sudo">sudo</h3><p>Tutte le dimostrazioni create hanno un utente configurato con funzionalità <strong>sudo</strong> per fornire all'utente i privilegi amministrativi (admin) quando richiesto. <strong>sudo</strong> consente agli utenti di eseguire programmi utilizzando i privilegi di sicurezza di un altro utente, generalmente root (superutente).</p><p>Sui tuoi sistemi, potrebbe essere necessario impostare e abilitare <strong>sudo</strong> affinché funzioni correttamente. Per fare ciò, devi seguire alcuni passaggi che non spiegheremo molto dettagliatamente ora, ma imparerai più avanti in questo corso. Quando si esegue su Ubuntu e alcune altre distribuzioni recenti, <strong>sudo</strong> è già impostato per te durante l'installazione. Su altre distribuzioni Linux, probabilmente dovrai impostare <strong>sudo</strong> in modo che funzioni correttamente dopo l'installazione iniziale.</p><p>Qui sotto, imparerai i passaggi per impostare ed eseguire <strong>sudo</strong> sul tuo sistema.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/sudosuse.png" class="kg-image" alt="sudosuse" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/sudosuse.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/sudosuse.png 674w" width="674" height="466" loading="lazy"><figcaption><code>$ sudo ls -la /root</code></figcaption></figure><h4 id="passaggi-per-l-impostazione-e-l-esecuzione-di-sudo">Passaggi per l'Impostazione e l'Esecuzione di sudo</h4><p>Se il tuo sistema non ha già <strong>sudo</strong> impostato e abilitato, devi seguire i seguenti passaggi:</p><p>Devi eseguire modifiche come utente amministrativo, o superutente, root. Mentre <strong>sudo</strong> diventerà il metodo preferito per farlo, non lo abbiamo ancora impostato, quindi useremo <strong>su</strong> (di cui discuteremo più avanti in dettaglio). Al prompt della riga di comando, digita <strong><code>su</code></strong> e premi <strong><code>Invio</code></strong>. Ti verrà quindi richiesta la password di root, immettila e premi <strong><code>Invio</code></strong>. Noterai che nulla viene stampato; &nbsp;questo è concepito in modo che nessuno possa vedere la password sullo schermo. Dovresti ottenere un prompt dall'aspetto diverso, che spesso finisce con "<strong><code>#</code></strong>". Per esempio:<br><strong><code>$ su Password:</code></strong><br><strong><code>#</code></strong></p><p>Ora, è necessario creare un file di configurazione per consentire al tuo account utente di utilizzare sudo. In genere, questo file viene creato nella directory <strong><code>/etc/sudoers.d/</code></strong> con il nome del file che coincide con il tuo username. Ad esempio, per questa demo, supponiamo che il tuo username sia <strong>student</strong>. Dopo il passaggio 1, poi dovresti creare il file di configurazione per <strong>student</strong> in questo modo:<br><strong><code># echo "student ALL=(ALL) ALL" &gt; /etc/sudoers.d/student</code></strong></p><p>Per ultimo, alcune distribuzioni Linux potrebbero richiedere anche di cambiare i permessi del file, che farai digitando:<br><strong><code># chmod 440 /etc/sudoers.d/student</code></strong></p><p>Dovrebbe essere tutto. Per il resto di questo corso, &nbsp;<strong>sudo</strong> dovrebbe essere impostato correttamente. Quando si utilizza <strong>sudo</strong>, per impostazione predefinita ti verrà richiesto di fornire una password (la tua password utente) almeno la prima volta che lo fai entro un intervallo di tempo specificato. È possibile (anche se molto insicuro) configurare <strong>sudo</strong> per non richiedere una password o modificare la finestra temporale in cui la password non deve essere ripetuta con ogni comando <strong>sudo</strong>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/sandwich.png" class="kg-image" alt="sandwich" width="360" height="299" loading="lazy"></figure><p><strong>Sandwich</strong><br>(Ottenuta da XKCD, fornita con la licenza Creative Commons Attribution-NonCommercial 2.5)</p><h3 id="spostarsi-tra-gui-e-riga-di-comando">Spostarsi tra GUI e Riga di Comando</h3><p>La natura personalizzabile di Linux consente di abbandonare l'interfaccia grafica (temporaneamente o permanentemente) o di avviarla dopo che il sistema è in esecuzione.</p><p>La maggior parte delle distribuzioni Linux offre un'opzione durante l'installazione (o ha più di una versione del supporto di installazione) di scelta tra desktop (con un desktop grafico) e server (di solito senza).</p><p>I server di produzione Linux sono generalmente installati senza GUI e anche se è installata, di solito non viene lanciata durante l'avvio del sistema. La rimozione dell'interfaccia grafica da un server di produzione può essere molto utile per mantenere un sistema snello, che può essere più facile da supportare e mantenere al sicuro.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/debianterminal.png" class="kg-image" alt="debianterminal" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/debianterminal.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/debianterminal.png 693w" width="693" height="632" loading="lazy"><figcaption>Passare dalla GUI alla Riga di Comando</figcaption></figure><h3 id="terminali-virtuali">Terminali Virtuali</h3><p>I <strong>Terminali Virtuali</strong> (<strong>VT</strong>) sono sessioni di console che utilizzano l'intero schermo e la tastiera al di fuori di un ambiente grafico. Tali terminali sono considerati "virtuali" perché, sebbene possano esserci più terminali attivi, un solo terminale alla volta rimane visibile. Un VT non è esattamente uguale alla riga di comando di una finestra del terminale; puoi avere molti di questi visibili contemporaneamente su un desktop grafico.</p><p>Un terminale virtuale (di solito numero uno o sette) è riservato all'ambiente grafico e gli accessi in modalità testo sono abilitati sui VT non utilizzati. Ubuntu usa VT 7, ma CentOS/RHEL e OpenSuse utilizzano VT 1 per il display grafico.</p><p>Un esempio di situazione in cui l'utilizzo di VT è utile è quando si incontrano problemi con il desktop grafico. In questa situazione, puoi passare a uno dei VT di testo e risolvere i problemi.</p><p>Per passare a un VT, premi <strong>CTRL-ALT-tasto_funzione</strong> per il VT. Ad esempio, premi <strong><code>CTRL-ALT-F6</code></strong> per VT6. In realtà, devi solo premere la combinazione di tasti <strong><code>Alt-F6</code></strong> se sei già in un VT e desideri passare a un altro VT.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch06_screen07.jpg" class="kg-image" alt="LFS01_ch06_screen07" width="497" height="324" loading="lazy"><figcaption>Sportarsi tra i Terminali Virtuali</figcaption></figure><h3 id="fermare-il-desktop-grafico">Fermare il Desktop Grafico</h3><p>Le distribuzioni Linux possono avviare e fermare il desktop grafico in vari modi. Il metodo esatto differisce tra le distribuzioni e tra le versioni di distribuzione. Per le nuove distribuzioni basate su systemd, il display manager viene eseguito come servizio, pertanto è possibile fermare il desktop GUI con l'utilità <strong><code>systemctl</code></strong> e per la maggior parte delle distribuzioni funzionerà anche con il comando <strong><code>telinit</code></strong>, in questo modo:</p><p>per fermare il Desktop: <strong><code>$ sudo systemctl stop gdm</code></strong> (oppure <strong><code>sudo telinit 3</code></strong>)</p><p>per farlo ripartire (dopo esserti connesso alla console): <strong><code>$ sudo systemctl start gdm</code></strong> (oppure <strong><code>sudo telinit 5</code></strong>)</p><p>Nelle versioni Ubuntu precedenti la 18.04 LTS, sostituisci <strong><code>lightdm</code></strong> al posto di <strong><code>gdm</code></strong>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/console.png" class="kg-image" alt="console" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/console.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/console.png 802w" sizes="(min-width: 720px) 720px" width="802" height="678" loading="lazy"></figure><h3 id="operazioni-di-base-1">Operazioni di Base</h3><p>In questa sezione, discuteremo di come realizzare le operazioni di base dalla riga di comando. Queste includono come accedere e disconnettersi dal sistema, riavviare o chiudere il sistema, individuare le applicazioni, accedere alle directory, identificare percorsi assoluti e relativi ed esplorare il filesystem.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch06_screen11.jpg" class="kg-image" alt="LFS01_ch06_screen11" width="425" height="309" loading="lazy"><figcaption>Operazioni di Base</figcaption></figure><h4 id="accedere-e-uscire-1">Accedere e Uscire</h4><p>Un terminale di testo disponibile richiederà uno username (con la stringa <strong><code>Login: </code></strong>) e la password. Quando si digita la password, non viene visualizzato nulla sul terminale (nemmeno un <strong>*</strong> per indicare che hai digitato qualcosa), per impedire agli altri di vedere la tua password. Dopo aver effettuato l'accesso al sistema, è possibile eseguire operazioni di base.</p><p>Una volta avviata la sessione (accedendo a un terminale di testo o tramite un programma di terminale grafico), è anche possibile connettersi e accedere a sistemi remoti utilizzando <a href="https://en.wikipedia.org/wiki/Secure_Shell">Secure Shell</a> (SSH). Ad esempio, digitando <strong><code>ssh student@server.remoto.com</code></strong>, SSH si connette in modalità sicura alla macchina remota <strong>server.remoto.com</strong> fornendo all'utente <strong><code>student</code></strong> una finestra di terminale di riga di comando, richiedendo una password (come per gli accessi normali) o una chiave crittografica per accedere senza fornire una password per verificare l'identità.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/ubuntulogin.png" class="kg-image" alt="ubuntulogin" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/ubuntulogin.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/ubuntulogin.png 736w" sizes="(min-width: 720px) 720px" width="736" height="270" loading="lazy"></figure><h4 id="riavviare-e-spegnere">Riavviare e Spegnere</h4><p>Il metodo preferito per spegnere o riavviare il sistema è utilizzare il comando <strong><code>shutdown</code></strong>. Questo invia un messaggio di avvertimento, quindi impedisce a ulteriori utenti di accedere. Il processo init controllerà quindi la chiusura o il riavvio del sistema. È importante chiudere sempre correttamente; in caso contrario, si possono causare danni al sistema e/o perdita di dati.</p><p>I comandi <strong><code>halt</code></strong> e <strong><code>poweroff</code></strong> eseguono <strong><code>shutdown-h</code></strong> per fermare il sistema; <strong><code>reboot</code></strong> esegue <strong><code>shutdown-r</code></strong> e fa riavviare la macchina invece di chiuderla. Sia il riavvio che la chiusura dalla riga di comando richiedono l'accesso superutente (root).</p><p>Se amministri un sistema multiutente, hai la possibilità di avvisare tutti gli utenti prima dell'arresto, in questo modo:</p><p><strong><code>$ sudo shutdown -h 10:00 "Spegnimento per operazioni di manutenzione."</code></strong></p><p><strong>NOTA</strong>: <em>sulle recenti distribuzioni Linux basate su Wayland i messaggi trasmessi non vengono visualizzati nelle sessioni di emulazione del terminale in esecuzione sul desktop; appaiono solo sui display della console VT.</em></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/ubuntushutdown.png" class="kg-image" alt="ubuntushutdown" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/ubuntushutdown.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/ubuntushutdown.png 852w" sizes="(min-width: 720px) 720px" width="852" height="106" loading="lazy"><figcaption>Riavviare e Spegnere</figcaption></figure><h4 id="trovare-applicazioni">Trovare Applicazioni</h4><p>A seconda delle specifiche particolari della tua distribuzione, i programmi e i pacchetti software possono essere installati in varie directory. In generale, programmi eseguibili e script dovrebbero risiedere nelle directory <strong><code>/bin</code></strong>, <strong><code>/usr/bin</code></strong>, <strong><code>/sbin</code></strong>, <strong><code>/usr/sbin</code></strong> o talvolta in <strong><code>/opt</code></strong>. Possono anche trovarsi in <strong><code>/usr/local/bin</code></strong> e <strong><code>/usr/local/sbin</code></strong>, oppure in una &nbsp;directory all'interno dello spazio dell'account dell'utente, come <strong><code>/home/student/bin</code></strong>.</p><p>Un modo per individuare i programmi è impiegare l'utility <strong><code>which</code></strong>. Ad esempio, per scoprire esattamente dove risiede il programma <strong><code>diff</code></strong> sul filesystem:</p><p><strong><code>$ which diff</code></strong><br><strong><code>/usr/bin/diff</code></strong></p><p>Se <strong><code>which</code></strong> non trova il programma, <strong><code>whereis</code></strong> è una buona alternativa perché cerca pacchetti in una gamma più ampia di directory di sistema:</p><p><strong><code>$ whereis diff</code></strong><br><strong><code>diff: /usr/bin/diff /usr/share/man/man1/diff.1.gz /usr/share/man/man1p/diff.1p.gz</code></strong></p><p>oltre a cercare il codice sogente e i file <strong><code>man</code></strong> (le pagine di manuale) distribuiti assieme al programma.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/whereis.png" class="kg-image" alt="whereis" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/whereis.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/whereis.png 890w" sizes="(min-width: 720px) 720px" width="890" height="663" loading="lazy"><figcaption>Le Utility <code>which</code> e <code>whereis</code></figcaption></figure><h3 id="accedere-alle-directory">Accedere alle Directory</h3><p>Quando accedi per la prima volta a un sistema o apri un terminale, la directory predefinita dovrebbe essere la tua directory home. Puoi stamparne il percorso esatto digitando <strong><code>echo $ home</code></strong>. Molte distribuzioni Linux in realtà aprono nuovi terminali grafici in <strong><code>$ home/Desktop</code></strong>. I seguenti comandi sono utili per la spostarrsi tra le directory:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Risultato</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>pwd</code></strong></td>
<td>Visualizza la directory corrente</td>
</tr>
<tr>
<td><strong><code>cd ~</code></strong> oppure <strong><code>cd</code></strong></td>
<td>Vai alla tua directory home (il cui nome abbreviato è il carattere tilde (<strong><code>~</code></strong>))</td>
</tr>
<tr>
<td><strong><code>cd ..</code></strong></td>
<td>Vai alla directory superiore (<strong><code>..</code></strong>)</td>
</tr>
<tr>
<td><strong><code>cd -</code></strong></td>
<td>Vai alla directory precedente (<strong><code>-</code></strong> (meno))</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><h3>Video: Accedere alle  Directory</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/41e9ceca-8aa4-4b08-8afc-8162da7ce91d-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="comprendere-i-percorsi-assoluti-e-relativi">Comprendere i Percorsi Assoluti e Relativi</h3><p>Esistono due modi per identificare i percorsi:</p><ul><li><strong>Nome percorso assoluto</strong><br>Un nome di percorso assoluto inizia con la directory radice (root) e segue l'albero del filesystem, ramo per ramo, fino a raggiungere la directory o il file desiderati. I percorsi assoluti iniziano sempre con <strong><code>/</code></strong>.</li><li><strong>Nome percorso relativo</strong><br>Un percorso relativo parte dalla directory corrente di lavoro. I percorsi relativi non iniziano mai con <strong><code>/</code></strong>.</li></ul><p>Più barre (<strong><code>/</code></strong>) tra le directory e i file sono consentite, ma sono tutte ignorate dal sistema a parte una. <strong><code>////usr//bin</code></strong> è un percorso valido ma viene visto come <strong><code>/usr/bin</code></strong> dal sistema.</p><p>Il più delle volte, è più conveniente utilizzare percorsi relativi, che richiedono meno digitazione. Di solito, sfrutti le scorciatoie che rappresentano: <strong><code>.</code></strong> (directory corrente), <strong><code>..</code></strong> (directory superiore) e <strong><code>~</code></strong> (la tua directory home).</p><p>Ad esempio, supponiamo che tu stia attualmente lavorando nella tua home directory e desideri passare alla directory <strong><code>/usr/bin</code></strong>. I seguenti due modi ti porteranno alla stessa directory partendo dalla tua home:</p><ul><li>Con il percorso assoluto<br><strong><code>$ cd /usr/bin</code></strong></li><li>Con il percorso relativo<br><strong><code>$ cd ../../usr/bin</code></strong></li></ul><p>In questo caso, usare il metodo del percorso assoluto richiede di scrivere meno.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch06_screen19.jpg" class="kg-image" alt="LFS01_ch06_screen19" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/LFS01_ch06_screen19.jpg 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch06_screen19.jpg 610w" width="610" height="432" loading="lazy"><figcaption>Comprendere Percorsi Assoluti e Relativi</figcaption></figure><h3 id="esplorare-il-filesystem">Esplorare il Filesystem</h3><p>Attraversare su e giù l'alberatura del filesystem può diventare noioso. Il comando <strong>tree</strong> è un buon modo per ottenere una vista dall'alto dell'albero del filesystem. Usa <strong><code>tree -d</code></strong> per visualizzare solo le directory e l'elenco dei nomi dei file.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/tree-d.png" class="kg-image" alt="tree-d" width="492" height="539" loading="lazy"><figcaption>Esplorare il Filesystem</figcaption></figure><p>I seguenti comandi ti possono aiutare a esplorare il filesystem:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>cd /</code></strong></td>
<td>Va dalla directory corrente alla radice del filesystem (root) <code>/</code> (o al percorso che digiti)</td>
</tr>
<tr>
<td><strong><code>ls</code></strong></td>
<td>Elenca il contenuto della directory di lavoro corrente</td>
</tr>
<tr>
<td><strong><code>ls –a</code></strong></td>
<td>Elenca tutti i file, compreso directory e file nascosti (quelli che iniziano con  <code>.</code> )</td>
</tr>
<tr>
<td><strong><code>tree</code></strong></td>
<td>Visualizza una vista ad albero del filesystem</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><!--kg-card-begin: html-->Video: Esplorazione del Filesystem

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINLFS10/LINLFS102014-V006100_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="hard-link">Hard Link</h3><p>L'utility <strong>ln</strong> viene usata per creare hard link (collegamenti fisici) e, con l'opzione <strong><code>-s</code></strong>, soft link (collegamenti simbolici), anche noti come symlink. Questi due tipi di link sono molto utili nei sistemi operativi basati su UNIX.</p><p>Supponi che il file <strong><code>file1</code></strong> esista già. Un hard link, chiamato <strong><code>file2</code></strong>, viene creato con il comando:</p><p><strong><code>$ ln file1 file2</code></strong></p><p>Nota che ora sembrano esistere due file. Tuttavia, un esame più accurato dell'elenco dei file mostra che questo non è del tutto vero.</p><p><strong><code>$ ls -li file1 file2</code></strong></p><p>L'opzione <strong><code>-i</code></strong> del comando <strong>ls</strong> stampa nella prima colonna il numero di inode, che è un valore univoco per ciascun oggetto file. Il valore di questo campo è lo stesso per entrambi i file; ciò che sta realmente accadendo qui è che c'è solo un file, ma ha più di un nome associato a esso, come indicato dal <strong><code>2</code></strong> che appare nel risultato del comando <strong>ls</strong>. Pertanto, c'era già un altro oggetto collegato a <strong><code>file1</code></strong> prima che il comando fosse eseguito.</p><p>Gli hard link sono molto utili e risparmiano spazio, ma devi stare attento al loro uso. Per prima cosa, se rimuovi <strong><code>file1</code></strong> o <strong><code>file2</code></strong> nell'esempio, l'oggetto inode (e il nome del file non cancellato) rimarrà, il che potrebbe essere indesiderabile, in quanto può portare a errori subdoli in seguito, se ricrei un file con quel nome.</p><p>Se modifichi uno dei file, ciò che accade nello specifico dipende dal tuo editor; la maggior parte degli editor, tra cui <strong>vi</strong> e <strong>gedit</strong>, manterrà il collegamento <em>per impostazione predefinita</em>, ma è possibile che la modifica di uno dei nomi possa rompere il collegamento e comportare la creazione di due oggetti.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/aefe6c7fa6a198680e110ceae5c95c11/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/lnubuntu.png" class="kg-image" alt="Hard Links: $ touch file1, $ ln file1 file2, $ ls -li file?" width="632" height="144" loading="lazy"></figure><h3 id="soft-link-link-simbolici-">Soft Link (Link Simbolici)</h3><p>Sono creati con l'opzione <strong><code>-s</code></strong>, in questo modo:</p><p><strong><code>$ ln -s file1 file3</code></strong><br><strong><code>$ ls -li file1 file3</code></strong></p><p>Nota che <strong><code>file3</code></strong> non risulta più essere un file normale, e chiaramente punta a &nbsp;<strong><code>file1</code></strong> e ha un numero inode diverso.</p><p>I link simbolici non richiedono spazio extra nel filesystem (a meno che i loro nomi siano veramente lunghi). Sono estremamente convenienti, visto che possono essere facilmente modificati per indicare posizioni diverse. Un modo semplice per creare un collegamento dalla tua directory <strong>home</strong> verso file con nomi di percorso lunghi è creare un collegamento simbolico.</p><p>A differenza degli hard link, i collegamenti simbolici possono indicare oggetti anche su diversi filesystem, partizioni e/o dischi e altri media, che possono o meno essere attualmente disponibili o addirittura esistere. Nel caso in cui il collegamento non indichi un oggetto attualmente disponibile o esistente, otterrai un collegamento pendente.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/cea407ef8cfd36b34ede2a154959a98f/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/lnsubuntu.png" class="kg-image" alt="Soft (Symbolic) Links: $ ln -s file1 file3, $ ls -li file?" width="672" height="239" loading="lazy"><figcaption>Link Simbolici</figcaption></figure><h3 id="spostarsi-nella-cronologia-delle-directory">Spostarsi nella Cronologia delle Directory</h3><p>Il comando <strong><code>cd</code></strong> ricorda la tua posizione precedente, e ti consente di ritornarvi con <strong><code>cd -</code></strong>. Per ricordare qualcosa di più oltre all'ultima directory visitata, usa <strong><code>pushd</code></strong> per cambiare directory invece che <strong><code>cd</code></strong>; questo immette la tua directory di partenza in una lista. Usando <strong><code>popd</code></strong> potrai tornare a quelle directory, in ordine inverso (la directory più recente sarà la prima recuperata con <strong><code>popd</code></strong>). L'elenco delle directory nella lista viene visualizzato con il comando <strong><code>dirs</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/319814cbd06ee587a78854e88478c5b0/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/pushdfedora.png" class="kg-image" alt="Navigating Through Directory History: $mkdir /tmp/dirl /tmp/dir2" width="638" height="310" loading="lazy"><figcaption>Spostarsi nella Cronologia delle Directory</figcaption></figure><!--kg-card-begin: html-->Video: Spostarsi nella Cronologia delle Directory

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/89eb42ec-3c89-4dec-8b73-c9b890c88d9f-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="lavorare-con-i-file">Lavorare con i File</h3><p>Linux fornisce molti comandi che ti aiutano a visualizzare il contenuto di un file, creare un nuovo file o un file vuoto, modificare la marca temporale (timestamp) di un file e spostare, rimuovere e rinominare un file o una directory. Questi comandi ti aiutano a gestire i tuoi dati e file garantendo che i dati corretti siano disponibili nella posizione corretta.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch06_screen47A.jpg" class="kg-image" alt="LFS01_ch06_screen47A" width="330" height="248" loading="lazy"></figure><h4 id="visualizzare-i-file">Visualizzare i File</h4><p>È possibile utilizzare le seguenti utility della riga di comando per visualizzare i file:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>cat</code></strong></td>
<td>Usato per visualizzare file di piccole dimensioni; non fornisce alcuna possibiltà di scorrimento a ritroso.</td>
</tr>
<tr>
<td><strong><code>tac</code></strong></td>
<td>Usato per visualizzare un file all'indietro, partendo dall'ultima riga.</td>
</tr>
<tr>
<td><strong><code>less</code></strong></td>
<td>Usato per visualizzare file di dimensioni maggiori in quanto è un programma di scorrimento di schermate. Si mette in pausa a ogni schermata riempita di testo, fornisce capacità di scorrimento a ritroso, e ti consente di cercare e spostarti all'interno del file<br><strong>NOTA</strong>: Usa <strong><code>/</code></strong> per effettuare la ricerca di un pattern in avanti e <strong><code>?</code></strong> per una ricerca all'indietro. Un vecchio programma chiamato <code>more</code> è ancora usato, ma ha meno funzionalità.</td>
</tr>
<tr>
<td><strong><code>tail</code></strong></td>
<td>Usato per stampare le ultime 10 righe di un file nella modalità predefinita. Puoi modificare il numero di righe con l'opzione <strong><code>-n &lt;numero_righe&gt;</code></strong> oppure solo <strong><code>-&lt;numero_righe&gt;</code></strong>; se ad esempio vuoi visualizzare le ultime 15 righe di un file usa <strong><code>-n 15</code></strong> oppure <strong><code>-15</code></strong>.</td>
</tr>
<tr>
<td><strong><code>head</code></strong></td>
<td>L'opposto del comando <strong><code>tail</code></strong>; nella modalità predefinita stampa le prime 10 righe di un file.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><h4>Video: Altre Informazioni sulla Visualizzazione File</h4>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/6244a0ed-8260-4df0-bbee-553dae259d64-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h4 id="touch">touch</h4><p>Il comando <strong>touch</strong> viene spesso utilizzato per impostare o aggiornare la data e l'ora di ultima modifica e/o di ultimo accesso dei file. Per impostazione predefinita, ripristina la marca temporale di un file portandola all'ora corrente.</p><p>Tuttavia, puoi anche creare un file vuoto utilizzando <strong>touch</strong>:</p><p><strong><code>$ touch &lt;nome_file&gt;</code></strong></p><p>Questo viene normalmente fatto per creare un file vuoto come segnaposto per uno scopo successivo.</p><p><strong>touch</strong> fornisce diverse opzioni utili. Ad esempio, l'opzione <strong><code>-t</code></strong> consente di impostare la data e la marca temporale del file su un valore specifico, ad esempio:</p><p><strong><code>$ touch -t 16001209 myfile</code></strong></p><p>Questo imposta la marca temporale di <strong><code>myfile</code></strong> alle 16 (1600) del 9 dicembre (09 12).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/d29a554d4187aae729d4ed40e42a0146/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/touch.png" class="kg-image" alt="touch" width="554" height="219" loading="lazy"><figcaption>touch</figcaption></figure><h4 id="mkdir-e-rmdir">mkdir e rmdir</h4><p><strong>mkdir</strong> è usato per creare una directory:</p><ul><li><strong><code>mkdir sampdir</code></strong><br>Crea una directory di esempio chiamata <strong><code>sampdir</code></strong> sotto la directory corrente.</li><li><strong><code>mkdir /usr/sampdir</code></strong><br>Crea una directory di esempio chiamata <strong><code>sampdir</code></strong> sotto <strong><code>/usr</code></strong>.</li></ul><p>La rimozione di una directory viene eseguita con <strong>rmdir</strong>. La directory deve essere vuota o il comando fallirà. Per rimuovere una directory e tutti il suo contenuto devi eseguire <strong><code>rm -rf</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/72f578cd278d2bd6bd48d63efbfe589e/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/mkdir.png" class="kg-image" alt="mkdir " width="814" height="257" loading="lazy"><figcaption>mkdir</figcaption></figure><h4 id="spostare-rinominare-o-rimuovere-un-file">Spostare, Rinominare o Rimuovere un File</h4><p>Nota che il comando <strong>mv</strong> esegue due compiti, visto che può:</p><ul><li>Rinominare semplicemente un file</li><li>Spostare un file in un'altra posizione, cambiando il suo nome allo stesso tempo.</li></ul><p>Se non sei sicuro di rimuovere i file che corrispondono a uno schema fornito, è sempre bene eseguire <strong>rm</strong> in modo interattivo (<strong><code>rm –i</code></strong>) che richiede una conferma prima di ogni rimozione.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>mv</code></strong></td>
<td>Rinomina un file</td>
</tr>
<tr>
<td><strong><code>rm</code></strong></td>
<td>Rimuove un file</td>
</tr>
<tr>
<td><strong><code>rm –f</code></strong></td>
<td>Forza la rimozione di un file</td>
</tr>
<tr>
<td><strong><code>rm –i</code></strong></td>
<td>Rimuove un file in modalità interattiva</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h4 id="rinominare-o-rimuovere-una-directory">Rinominare o Rimuovere una Directory</h4><p><strong>rmdir</strong> funziona solo su directory vuote; altrimenti si ottiene un errore.</p><p>Sebbene il comando <strong><code>rm –rf</code></strong> sia un modo semplice per rimuovere un'intero pezzo di alberatura dal filesystem in modo ricorsivo, è estremamente pericoloso e dovrebbe essere usato con la massima cura, specialmente se usato dalla radice - root - (ricorda che ricorsivo significa percorrere tutte le sotto-directory, fino in fondo all'ultimo ramo).</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>mv</code></strong></td>
<td>Rinomina una directory</td>
</tr>
<tr>
<td><strong><code>rmdir</code></strong></td>
<td>Rimuove una directory vuota</td>
</tr>
<tr>
<td><strong><code>rm -rf</code></strong></td>
<td>Forza la rimozione di una directory ricorsivamente</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="modificare-il-prompt-della-riga-di-comando">Modificare il Prompt della Riga di Comando</h3><p>La variabile <strong>PS1</strong> è la stringa di caratteri visualizzata come prompt nella riga di comando. La maggior parte delle distribuzioni imposta <strong>PS1</strong> su un valore predefinito noto, che è adeguato nella maggior parte dei casi. Tuttavia, gli utenti potrebbero desiderare informazioni personalizzate da mostrare nella riga di comando. Ad esempio, alcuni amministratori di sistema richiedono che l'utente e il nome del sistema host vengano visualizzati sulla riga di comando in questo modo:</p><p><strong><code>student@c8 $</code></strong></p><p>Questo potrebbe rivelarsi utile se lavori in più ruoli e vuoi che venga sempre visualizzato il tuo username e su quale macchina ti trovi. Il prompt qui sopra potrebbe essere implementato impostando la variabile <strong>PS1</strong> su: <strong><code>\u@\h\$</code></strong>.</p><p>Per esempio:</p><p><strong><code>$ echo $PS1</code></strong><br><strong><code>\$</code></strong><br><strong><code>$ PS1="\u@\h \$ </code>"</strong><br><strong><code>student@c8 $ echo $PS1</code></strong><br><strong><code>\u@\h \$</code></strong><br><strong><code>student@c8 $</code></strong></p><p>Per convenzione, la maggior parte dei sistemi viene impostata in modo che l'utente di root abbia il simbolo del cancelletto (<strong><code>#</code></strong>) come prompt.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/04/image-2.png" class="kg-image" alt="image-2" width="309" height="163" loading="lazy"></figure><!--kg-card-begin: html--><h4>Video: Lavorare con File e Directory al Prompt dei Comandi<!--4-->

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/0a2c05cb-7749-4c31-b351-8c1cc7791859-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--></h4><h3 id="flussi-standard-dei-file">Flussi Standard dei File</h3><p>Quando vengono eseguiti i comandi, in modalità predefinita ci sono tre flussi di file (o descrittori) sempre aperti per l'uso: standard input (standard in oppure <strong>stdin</strong>), standard output (standard out oppure <strong>stdout</strong>) e standard error (oppure <strong>stderr</strong>).</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Nome</strong></th>
<th><strong>Nome Simbolico</strong></th>
<th><strong>Valore</strong></th>
<th><strong>Esempio</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>standard input</td>
<td><strong><code>stdin</code></strong></td>
<td>0</td>
<td>tastiera</td>
</tr>
<tr>
<td>standard output</td>
<td><strong><code>stdout</code></strong></td>
<td>1</td>
<td>terminale</td>
</tr>
<tr>
<td>standard error</td>
<td><strong><code>stderr</code></strong></td>
<td>2</td>
<td>file di log</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Di solito, <strong>stdin</strong> è la tua tastiera e <strong>stdout</strong> e <strong>stderr</strong> sono stampati sul tuo terminale. <strong>stderr</strong> viene spesso reindirizzato a un file di registrazione degli errori, mentre <strong>stdin</strong> viene alimentato dirigendo l'input che proviene da un file o dall'output di un comando precedente attraverso una pipe, <strong>stdout</strong> viene spesso reindirizzato in un file. Poiché <strong>stderr</strong> è dove vengono scritti i messaggi di errore, di solito nulla andrà lì.</p><p>In Linux, tutti i file aperti sono rappresentati internamente da quelli che vengono chiamati descrittori di file. In poche parole, questi sono rappresentati da numeri a partire da zero. <strong>stdin</strong> è il descrittore di file 0, <strong>stdout</strong> è il descrittore di file 1, e <strong>stderr</strong> è 2. In genere, se altri file vengono aperti oltre a questi tre, che sono aperti per impostazione predefinita, inizieranno da un descrittore di file 3 e il valore del descrittore aumenterà da lì.</p><p>Nella sezione successiva e nei capitoli a venire, vedrai esempi che alterano dove un comando in esecuzione ottiene il suo input, dove scrive il suo output o dove stampa i messaggi diagnostici (di errore).</p><h3 id="reindirizzare-input-e-output-i-o-">Reindirizzare Input e Output (I/O)</h3><p>Attraverso la shell di comando, possiamo reindirizzare i tre flussi di file standard in modo da poter ottenere l'input da un file o da un altro comando, anziché dalla nostra tastiera, e possiamo scrivere risultati ed errori su file o usarli per fornire input per i comandi successivi.</p><p>Ad esempio, se abbiamo un programma chiamato <strong><code>fa_qualcosa</code></strong> che legge da <strong>stdin</strong> e scrive verso <strong>stdout</strong> e <strong>stderr</strong>, possiamo cambiare la sua fonte di input usando il segno di minore (<strong>&lt;</strong>) seguito dal nome del file dal quale si devono ottenere i dati in input:</p><p><strong><code>$ fa_qualcosa &lt; input-file</code></strong></p><p>Se vuoi inviare il risultato a un file, usa il segno di maggiore (<strong>&gt;</strong>) in questo modo:<br><strong><code>$ fa_qualcosa &gt; output-file</code></strong></p><p>Nell'esempio qui sopra, visto che <strong>stderr</strong> non è uguale a <strong>stdout</strong>, i messaggi di errore saranno comunque visibili nella finestra del terminale.</p><p>Se vuoi reindirizzare <strong>stderr</strong> a un file separato, usa il numero del descrittore di file di <strong>stderr</strong> (2), il segno di maggiore (<strong>&gt;</strong>), seguito dal nome del file nel quale vuoi scrivere tutto quanto viene generato dal comando che scrive verso <strong>stderr</strong>:</p><p><strong><code>$ fa_qualcosa 2&gt; error-file</code></strong></p><p><strong><code>NOTA</code></strong>: <em>con la stessa logica,</em> <strong><code>fa_qualcosa 1&gt; output-file</code></strong> <em>è uguale a</em> <strong><code>fa_qualcosa &gt; output-file</code></strong></p><p>Una speciale notazione scorciatoia può inviare qualunque cosa venga scritta verso il descrittore di file <strong>2</strong> (<strong>stderr</strong>) nella stessa destinazione del descrittore di file <strong>1</strong> (<strong>stdout</strong>): <strong>2&gt;&amp;1</strong>.</p><p><strong><code>$ fa_qualcosa &gt; all-output-file 2&gt;&amp;1</code></strong></p><p>Bash consente una sintassi più semplice per quanto sopra:</p><p><strong><code>$ fa_qualcosa &gt;&amp; all-output-file</code></strong></p><h3 id="pipe">Pipe</h3><p>La filosofia UNIX/Linux è quella di far cooperare insieme molti programmi (o comandi) semplici e brevi per produrre risultati piuttosto complessi, invece che avere un programma complesso con molte possibili opzioni e modalità operative. Per raggiungere questo obiettivo, viene fatto un ampio uso delle pipe. È possibile convogliare il risultato di un comando o programma verso un altro comando/programma come input.</p><p>Per fare ciò, inseriamo tra i comandi la barra verticale, il simbolo pipe, (<strong><code>|</code></strong>), così:</p><p><strong><code>$ comando1 | comando2 | comando3</code></strong></p><p>Quanto sopra rappresenta ciò che spesso chiamiamo una pipeline (conduttura) e consente a Linux di combinare le azioni di diversi comandi in uno. Questo è straordinariamente efficiente perché <strong><code>comando2</code></strong> e <strong><code>comando3</code></strong> non devono attendere che i precedenti comandi della pipeline siano completati prima che possano iniziare a elaborare i dati nei loro flussi di input; su sistemi con più CPU o core, la potenza di calcolo disponibile è molto meglio utilizzata e le cose vengono fatte più rapidamente.</p><p>Inoltre, non è necessario salvare l'output in file (temporanei) tra le fasi della pipeline, il che fa risparmiare spazio su disco e riduce le operazioni di lettura e scrittura dal disco, che sono spesso il collo di bottiglia più lento per elaborare qualcosa.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/50bdd18ba2e7d4343c184f5e0e3e058a/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/pipeline.png" class="kg-image" alt="Pipeline" width="1056" height="288" loading="lazy"><figcaption>pipeline</figcaption></figure><h3 id="cercare-file">Cercare File</h3><p>Essere in grado di trovare rapidamente i file che stai cercando ti farà risparmiare tempo e migliorare la produttività. È possibile cercare file sia all'interno della directory di home, sia in qualsiasi altra directory o posizione sul sistema.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/4495f95739476edc371e3a69b29f8fc2/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch06_screen32a.jpg" class="kg-image" alt="File cabinets" width="330" height="248" loading="lazy"></figure><p>Gli strumenti principali per farlo sono le utility <strong>locate</strong> e <strong>find</strong>. Mostreremo anche come usare i caratteri jolly (wildcard) in <strong>bash</strong>, al fine di trovare qualsiasi file che corrisponda a una determinata richiesta generalizzata.</p><h4 id="locate">locate</h4><p>L'utility <strong>locate</strong> esegue una ricerca sfruttando un database di file e directory precedentemente costruito sul sistema. Cerca corrispondenza con tutte le voci che contengono una stringa di caratteri specificata. Questo a volte può provocare un elenco molto lungo.</p><p>Per ottenere un elenco più breve (e forse più rilevante), possiamo usare il programma <strong>grep</strong> come filtro. <strong>grep</strong> stamperà solo le righe che contengono una o più stringhe specificate, ad esempio:</p><p><strong><code>$ locate zip | grep bin</code></strong></p><p>elencherà tutti i file e le directory che hanno <strong><code>zip</code></strong> e <strong><code>bin</code></strong> nel loro nome. Esamineremo <strong>grep</strong> in modo molto più dettagliato in seguito. Nota l'uso del pipe <strong><code>|</code></strong> per collegare i due comandi insieme.</p><p><strong>locate</strong> utilizza un database creato da un'utilità correlata, <strong>updatedb</strong>. La maggior parte dei sistemi Linux la esegue automaticamente una volta al giorno. Tuttavia, puoi eseguire un aggiornamento in qualsiasi momento semplicemente digitando <strong>updatedb</strong> dalla riga di comando come utente root.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/db04248c7965e78a927a0fa8a42fc703/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/locatesuse.png" class="kg-image" alt="locate" width="614" height="487" loading="lazy"><figcaption>locate</figcaption></figure><h4 id="caratteri-jolly-e-corrispondenza-con-i-nomi-di-file">Caratteri Jolly e Corrispondenza con i Nomi di File</h4><p>È possibile cercare un nome di file contenente caratteri specifici usando i caratteri jolly.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Carattere Jolly</strong></th>
<th><strong>Risultato</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>?</code></strong></td>
<td>Trova corrispondenza con qualsiasi carattere singolo</td>
</tr>
<tr>
<td><strong><code>*</code></strong></td>
<td>Trova corrispondenza con qualsiasi stringa di caratteri</td>
</tr>
<tr>
<td><strong><code>[insieme]</code></strong></td>
<td>Trova corrispondenza con qualsiasi carattere dell'insieme di caratteri, per esempio <strong><code>[adf]</code></strong> trova corrispondenza con tutte le occorrenze di <strong><code>a</code></strong>,<strong><code>d</code></strong>, o <strong><code>f</code></strong></td>
</tr>
<tr>
<td><strong><code>[!insieme]</code></strong></td>
<td>Trova corrispondenza con qualsiasi carattere non compreso nell'insieme di caratteri</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Per cercare file utilizzando il carattere jolly <strong><code>?</code></strong>, sostituisci ogni carattere sconosciuto con <strong><code>?</code></strong>. Ad esempio, se sai solo che le prime due lettere di un nome file di tre lettere con un'estensione di <strong><code>.out</code></strong> sono "ba", digita <strong><code>ls ba?.out</code></strong>.</p><p>Per cercare file usando il carattere jolly <strong><code>*</code></strong>, sostituisci la stringa sconosciuta con &nbsp;<strong><code>*</code></strong>. Per esempio se ricordi solo che l'estensione era <strong><code>.out</code></strong>, digita <strong><code>ls *.out</code></strong>.</p><!--kg-card-begin: html--><h4>Video: Cercare File</h4>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/d9de7136-78d9-4cf5-9549-1b61e2f31d4e-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><!--kg-card-begin: html--><h4>Video: Usare i Caratteri Jolly per Cercare i File</h4>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/162ffd59-cf5b-4896-aade-b99a16aa95fa-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video><!--kg-card-end: html--><h4 id="il-programma-find">Il Programma find</h4><p><strong><code>find</code></strong> è un programma estremamente utile e spesso utilizzato nella vita quotidiana di un amministratore di sistema Linux. Attraversa ricorsivamente l'albero del filesystem partendo da una qualunque specifica directory (o insieme di directory) e individua i file che corrispondono alle condizioni specificate. Il percorso predefinito è sempre la directory di lavoro corrente.</p><p>Ad esempio, gli amministratori a volte scansionano file di base potenzialmente grandi (che contengono informazioni diagnostiche dopo che un programma va in errore) che hanno data più vecchia di diverse settimane per rimuoverli.</p><p>È inoltre comune rimuovere i file non essenziali o obsoleti che si trovano in <strong><code>/tmp</code></strong> (e altre directory volatili, come quelle contenenti file memorizzati nella cache) a cui non si è acceduto di recente. Molte distribuzioni Linux utilizzano script di shell che sono eseguiti periodicamente (tramite <strong>cron</strong> di solito) per eseguire tale pulizia del sistema.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/102046563ac484a6047300c801886837/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/findubuntu.png" class="kg-image" alt="find" width="642" height="543" loading="lazy"><figcaption>find</figcaption></figure><h4 id="usare-find">Usare find</h4><p>Quando non vengono forniti argomenti, <strong>find</strong> elenca tutti i file nella directory corrente e tutte le sue sottodirectory. Le opzioni comunemente usate per abbreviare l'elenco includono <strong><code>-name</code></strong> (elenca solo i file con un determinato modello nel loro nome), <strong><code>-iname</code></strong> (non distingue tra minuscole e maiuscole nei nomi dei file) e <strong><code>-type</code></strong> (che limiterà i risultati a file di un determinato tipo specificato, come <strong><code>d</code></strong> per le directory, <strong><code>l</code></strong> per i collegamenti simbolici o <strong><code>f</code></strong> per un file normale, ecc.).</p><p>Cerca file e directory che si chiamano <strong>gcc</strong>:</p><p><strong><code>$ find /usr -name gcc</code></strong></p><p>Cerca solo le directory che si chiamano &nbsp;<strong>gcc</strong>:</p><p><strong><code>$ find /usr -type d -name gcc</code></strong></p><p>Cerca solo i file normali che si chiamano <strong>gcc</strong>:</p><p><strong><code>$ find /usr -type f -name gcc</code></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/ea8161eed2e8b061792778df2dec70d7/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/findrhel7.png" class="kg-image" alt="Using the find command" width="705" height="466" loading="lazy"><figcaption>Usare find</figcaption></figure><h4 id="usare-opzioni-avanzate-di-find">Usare Opzioni Avanzate di find</h4><p>Un altro buon uso di <strong>find</strong> è eseguire comandi sui file che corrispondono ai criteri di ricerca. L'opzione <strong><code>-exec</code></strong> viene utilizzata per questo scopo.</p><p>Per cercare ed eliminare tutti i file che finiscono per <strong><code>.swp</code></strong>:</p><p><strong><code>$ find -name "*.swp" -exec rm {} ’;’</code></strong></p><p>Le parentesi graffe <strong><code>{}</code></strong> sono un segnaposto che verrà riempito con tutti i nomi di file che corrispondono al criterio di ricerca specificato, e il comando che precede verrà eseguito su ciascun file individualmente.</p><p>Nota che devi terminare il comando con <strong><code>‘;’</code></strong> (compresi i singoli apici)<br>oppure &nbsp;"<strong><code>\;</code></strong>". Entrambi i formati vanno bene.</p><p>Si può anche usare l'opzione <strong><code>-ok</code></strong>, che si comporta come <strong><code>-exec</code></strong>, tranne che <strong>find</strong> ti chiederà l'autorizzazione prima di eseguire il comando. Questo lo rende un buon modo per testare i risultati prima di eseguire ciecamente eventuali comandi potenzialmente pericolosi.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch06_screen41.jpg" class="kg-image" alt="LFS01_ch06_screen41" width="353" height="295" loading="lazy"><figcaption>Cercare e Rimuovere File che Finiscono con .swp</figcaption></figure><h3 id="trovare-file-in-base-a-data-e-dimensione">Trovare File in Base a Data e Dimensione</h3><p>A volte desideri trovare file secondo alcuni attributi, ad esempio quando sono stati creati, usati per l'ultima volta, ecc.. Oppure in base alle loro dimensioni. È facile eseguire tali ricerche.</p><p>Per trovare file in base alla data:</p><p><strong><code>$ find / -ctime 3</code></strong></p><p>Qui, <strong><code>-ctime</code></strong> si riferisce a quando i metadati dell'inode (vale a dire la proprietà del file, i permessi, ecc.) sono cambiati l'ultima volta; spesso, ma non necessariamente, quando il file è stato creato per la prima volta. Puoi anche cercare per ultima data di accesso/lettura (<strong><code>-atime</code></strong>) oppure ultima data di modifiche/scrittura (<strong><code>-mtime</code></strong>). Il numero è il numero di giorni e può essere espresso sia come un numero (<strong><code>n</code></strong>) che significa esattamente quel valore , <strong><code>+n</code></strong>, che significa maggiore di quel numero, oppure <strong><code>-n</code></strong>, che significa minore di quel numero. Ci sono opzioni simili anche per i minuti (<strong><code>-cmin</code></strong>, <strong><code>-amin</code></strong>, e <strong><code>-mmin</code></strong>).</p><p>Per trovare file in base alla loro dimensione:</p><p><strong><code>$ find / -size 0</code></strong></p><p>Nota che la dimensione qui è in blocchi da 512 byte, nella modalità predefinita, puoi anche specificare byte (c), kilobyte (k), megabyte (M), gigabyte (G), ecc.. Così come i numeri relativi al tempo qui sopra, anche le dimensioni possono essere numeri esatti (<strong><code>n</code></strong>), oppure &nbsp;<strong>+n</strong> o <strong>-n</strong>. Per i dettagli, consulta la pagina di manuale &nbsp;per <strong>find</strong>.</p><p>Ad esempio, per trovare file di dimensioni superiori a 10 Mb ed eseguire un comando su quei file:</p><p><strong><code>$ find / -size +10M -exec command {} ’;’</code></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/findsizerhel7.png" class="kg-image" alt="findsizerhel7" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/findsizerhel7.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/findsizerhel7.png 865w" sizes="(min-width: 720px) 720px" width="865" height="333" loading="lazy"><figcaption>Trovare File in Base alla Dimensione</figcaption></figure><!--kg-card-begin: html--><h4>Video: Trovare File in una Directory</h4>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/467b3768-bf4b-4ba1-9899-87ef71310722-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="sistemi-di-gestione-di-pacchetti-in-linux">Sistemi di Gestione di Pacchetti in Linux</h3><p>Le parti fondamentali di una distribuzione Linux e la maggior parte del suo software aggiuntivo sono installate tramite il <strong>Sistema di Gestione dei Pacchetti</strong>. Ogni pacchetto contiene i file e le altre istruzioni necessarie per far funzionare bene un componente software e collaborare con gli altri componenti che comprendono l'intero sistema. I pacchetti possono dipendere l'uno dall'altro. Ad esempio, un pacchetto per un'applicazione web scritta in linguaggio PHP può dipendere dal pacchetto PHP.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/5bb5d9653cc975c21a23103c015b1483/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch06_screen59a.jpg" class="kg-image" alt="Box filled with various objects" width="330" height="248" loading="lazy"></figure><p>Esistono due ampie famiglie di gestori di pacchetti: quelli basati su Debian e quelli che utilizzano RPM come gestore di pacchetti di basso livello. I due sistemi sono incompatibili, ma in generale, forniscono le stesse caratteristiche e soddisfano le stesse esigenze. Esistono altri sistemi utilizzati da distribuzioni Linux più specializzate.</p><p>In questa sezione, imparerai come installare, rimuovere o cercare pacchetti dalla riga di comando utilizzando questi due sistemi di gestione dei pacchetti.</p><h3 id="gestori-di-pacchetti-due-livelli">Gestori di Pacchetti: Due Livelli</h3><p>Entrambi i sistemi di gestione dei pacchetti operano su due livelli distinti: uno strumento di basso livello (come <strong>dpkg</strong> o <strong>rpm</strong>) si occupa dei dettagli della decompressione dei singoli pacchetti, di eseguire script e di installare il software correttamente, mentre uno strumento di alto livello (come <strong>apt-get</strong>, <strong>dnf</strong>, <strong>yum</strong>, o <strong>zypper</strong>) funziona con gruppi di pacchetti, scarica pacchetti dal fornitore e gestisce le dipendenze.</p><p>Il più delle volte gli utenti devono lavorare solo con lo strumento di alto livello, che si occuperà di chiamare lo strumento di basso livello secondo necessità. La risoluzione delle dipendenze è una caratteristica particolarmente importante dello strumento di alto livello, in quanto gestisce i dettagli di ricerca e installazione di ogni dipendenza per te. Fai attenzione, tuttavia, poiché l'installazione di un singolo pacchetto potrebbe comportare l'installazione di molte dozzine o addirittura centinaia di pacchetti dipendenti.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/b2cfd35138881e077bfc97915aed86b8/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/Package_Managers.png" class="kg-image" alt="Package Managers: Two Levels" width="1090" height="790" loading="lazy"><figcaption>Gestiori di Pacchetti: Due Livelli</figcaption></figure><h3 id="lavorare-con-due-diversi-sistemi-di-gestione-pacchetti">Lavorare con Due Diversi Sistemi di Gestione Pacchetti</h3><p><strong>apt</strong> (Advanced Packaging Tool) è il sistema di gestione dei pacchetti sottostante che gestisce il software sui sistemi basati su Debian. Mentre costituisce il backend per i gestori di pacchetti grafici, come Ubuntu Software Center e Synaptic, la sua interfaccia utente nativa è sulla riga di comando, con programmi che includono <strong>apt</strong> (o <strong>apt-get</strong>) e <strong>apt-cache</strong>.</p><p><strong>dnf</strong> è l'utilità open source di gestione dei pacchetti da riga di comando per i sistemi Linux compatibili con RPM che appartengono alla famiglia Red Hat. <strong>dnf</strong> ha un'interfaccia sia da riga di comando che grafica. Fedora e RHEL 8 hanno sostituito l'utilità più vecchia <strong>yum</strong> con <strong>dnf</strong>, eliminando così un sacco di zavorra storica, oltre a introdurre molte nuove belle capacità. <strong>dnf</strong> è praticamente retrocompatibile con <strong>yum</strong> per i comandi quotidiani.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/Different_Package_Mmanagement_Tools.png" class="kg-image" alt="Different_Package_Mmanagement_Tools" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/Different_Package_Mmanagement_Tools.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/Different_Package_Mmanagement_Tools.png 982w" sizes="(min-width: 720px) 720px" width="982" height="382" loading="lazy"></figure><p><strong>zypper</strong> è il sistema di gestione dei pacchetti per la famiglia SUSE/OpenSuse, anch'esso basato su RPM. <strong>zypper</strong> ti consente anche di gestire repository da riga di comando. <strong>zypper</strong> è abbastanza semplice da usare e assomiglia parecchio a <strong>dnf</strong>/<strong>yum</strong>.</p><p>Per imparare i comandi base dei gestori di pacchetti, dai un'occhiata a questi comandi:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Operazione</strong></th>
<th><strong>rpm</strong></th>
<th><strong>deb</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>Installare un pacchetto</td>
<td><strong><code>rpm -i foo.rpm</code></strong></td>
<td><strong><code>dpkg --install foo.deb</code></strong></td>
</tr>
<tr>
<td>Installare un pacchetto e le sue dipendenze</td>
<td><strong><code>dnf install foo</code></strong></td>
<td><strong><code>apt-get install foo</code></strong></td>
</tr>
<tr>
<td>Eliminare un pacchetto</td>
<td><strong><code>rpm -e foo.rpm</code></strong></td>
<td><strong><code>dpkg --remove foo.deb</code></strong></td>
</tr>
<tr>
<td>Eliminare un pacchetto e le sue dipendenze</td>
<td><strong><code>dnf remove foo</code></strong></td>
<td><strong><code>apt-get autoremove foo</code></strong></td>
</tr>
<tr>
<td>Aggiornare un pacchetto</td>
<td><strong><code>rpm -U foo.rpm</code></strong></td>
<td><strong><code>dpkg --install foo.deb</code></strong></td>
</tr>
<tr>
<td>Aggiornare un pacchetto e le sue dipendenze</td>
<td><strong><code>dnf update foo</code></strong></td>
<td><strong><code>apt-get install foo</code></strong></td>
</tr>
<tr>
<td>Aggiornare l'intero sistema</td>
<td><strong><code>dnf update</code></strong></td>
<td><strong><code>apt-get dist-upgrade</code></strong></td>
</tr>
<tr>
<td>Mostrare tutti i pacchetti installati</td>
<td><strong><code>rpm -qa</code></strong> oppure <strong><code>dnf list installed</code></strong></td>
<td><strong><code>dpkg --list</code></strong></td>
</tr>
<tr>
<td>Ottenere informazioni su un pacchetto</td>
<td><strong><code>rpm -qil foo</code></strong></td>
<td><strong><code>dpkg --listfiles foo</code></strong></td>
</tr>
<tr>
<td>Cerca i pacchetti che si chiamano <strong><code>foo</code></strong></td>
<td><strong><code>dnf list "foo"</code></strong></td>
<td><strong><code>apt-cache search foo</code></strong></td>
</tr>
<tr>
<td>Mostrare tutti i pacchetti disponibili</td>
<td><strong><code>dnf list</code></strong></td>
<td><strong><code>apt-cache dumpavail foo</code></strong></td>
</tr>
<tr>
<td>Di quale pacchetto fa parte un <strong><code>file</code></strong>?</td>
<td><strong><code>rpm -qf file</code></strong></td>
<td><strong><code>dpkg --search file</code></strong></td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><h3>Video: Gestione Pacchetti Debian a Basso Livello con dpkg</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V001500_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>

<h3>Video: Gestione Pacchetti RPM a Basso Livello con rpm</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V001600_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>


<h3>Video: Gestione Pacchetti ad Alto Livello con dnf</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/825ce6b8-4cc5-4680-ae8d-a31efd12b83a-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>


<h3>Video: Gestione Pacchetti ad Alto Livello con zypper su openSUSE</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V002400_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>


<h3>Video: Gestione Pacchetti ad Alto Livello con apt su Ubuntu</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V001800_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="riepilogo-del-capitolo">Riepilogo del Capitolo</h3><p>Hai completato il capitolo 7. riassumiamo i concetti chiave che abbiamo trattato:</p><ul><li>I terminali virtuali (VT) in Linux sono console o terminali della riga di comando che utilizzano il monitor e la tastiera connessi.</li><li>Diverse distribuzioni Linux avviano e arrestano il desktop grafico in modi diversi.</li><li>Un programma di emulatore del terminale sul desktop grafico funziona emulando un terminale all'interno di una finestra sul desktop.</li><li>Il sistema Linux consente di accedere tramite terminale di testo o in remoto tramite la console.</li><li>Quando si digita la password, nulla viene stampato sul terminale, nemmeno un simbolo generico per indicare che hai digitato.</li><li>Il metodo preferito per chiudere o riavviare il sistema è utilizzare il comando <strong>shutdown</strong>.</li><li>Esistono due tipi di nomi di percorso: assoluto e relativo.</li><li>Un nome di percorso assoluto inizia con la directory radice e segue l'alberatura, ramo per ramo, fino a raggiungere la directory o il file desiderati.</li><li>Un percorso relativo inizia dalla directory di lavoro corrente.</li><li>L'uso di hard link e soft link (simbolici) è estremamente utile in Linux.</li><li><strong>cd</strong> ricorda la tua ultima posizione e ti riporta lì con <strong><code>cd -</code></strong>.</li><li><strong>locate</strong> esegue una ricerca in un database per trovare tutti i nomi di file dato un modello specificato.</li><li><strong>find</strong> trova i file ricorsivamente da una data directory o insieme di directory.</li><li><strong>find</strong> è in grado di eseguire comandi sui file che trova, se usato con l'opzione <strong>-exec</strong> .</li><li><strong>touch</strong> è usato per impostare data e ora di accesso o di modifica dei file, e per creare file vuoti.</li><li>Il sistema di gestione di pacchetti <strong>apt</strong> (The Advanced Packaging Tool) è usato per gestire il software installato sui sistemi basati su Debian.</li><li>Puoi usare l'utility da riga di comando per la gestione dei pacchetti <strong>dnf</strong> per le distribuzioni della famiglia Red Hat basate su RPM.</li><li>Il sistema di gestione di pacchetti <strong>zypper</strong> è basato su RMP ed è usato dalla distribuzione openSUSE.</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/04/image-3.png" class="kg-image" alt="image-3" width="330" height="306" loading="lazy"></figure><h2 id="capitolo-8-trovare-la-documentazione-di-linux">Capitolo 8: Trovare la Documentazione di Linux</h2><h3 id="obiettivi-formativi-4">Obiettivi Formativi</h3><p>Entro la fine di questo capitolo, dovresti essere in grado di:</p><ul><li>Utilizzare diverse fonti di documentazione.</li><li>Usare le pagine del manuale.</li><li>Accedere al Sistema Informativo GNU.</li><li>Usare il comando <strong>help</strong> e l'opzione <strong>--help</strong>.</li><li>Utilizzare altre fonti di documentazione.</li></ul><h3 id="fonti-di-documentazione-di-linux">Fonti di Documentazione di Linux</h3><p>Che tu sia un utente inesperto o un veterano, non sempre saprai (né ricorderai) l'uso corretto di vari programmi e utility Linux, qual è il comando da digitare, quali opzioni impiega, ecc. Dovrai consultare la documentazione di aiuto regolarmente. Poiché i sistemi basati su Linux attingono da una grande varietà di fonti, ci sono numerose sorgenti di documentazione e modi per ottenere aiuto. I distributori consolidano questo materiale e lo presentano in modo completo e facile da usare.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/cf55b1fe48a37f0ae2fed5fee049c262/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch07_screen03.jpg" class="kg-image" alt="Linux Documentation Sources" width="427" height="222" loading="lazy"></figure><p><strong>Sorgenti di Documentazione Linux</strong></p><p>Importanti fonti di documentazione Linux includono:</p><ul><li>Le pagine di manuale (<strong>man</strong>)</li><li>GNU Info</li><li>Il comando <strong>help</strong> e l'opzione <strong>--help</strong></li><li>Altre fonti di documentazione, ad esempio <a href="https://wiki.gentoo.org/wiki/Handbook:Main_Page/it">Il manuale di Gentoo</a> e la <a href="https://help.ubuntu.com/community/CommunityHelpWiki">Documentazione Ubuntu</a> (in lingua inglese).</li></ul><h3 id="le-pagine-di-manuale">Le Pagine di Manuale</h3><p>Le pagine di Manuale (man pages) sono la fonte più spesso usata della documentazione di Linux. Forniscono una documentazione approfondita su molti programmi e utility, nonché altri argomenti, inclusi file di configurazione e API di programmazione per chiamate di sistema, routine di libreria e il kernel. Sono presenti su tutte le distribuzioni Linux e sono sempre a portata di mano.</p><p>L'infrastruttura delle pagine di manuale è stata introdotta per la prima volta nelle prime versioni UNIX, all'inizio degli anni '70. Il nome man è solo un'abbreviazione per manual.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/be369a4b31dfa8c5655024c337b9c1b8/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch07_screen05.jpg" class="kg-image" alt="Book" width="300" height="225" loading="lazy"></figure><p>Digitando <code>man</code> con un nome come argomento si ottengono le informazioni conservate nelle pagine di manuale dell'argomento.</p><p>Le pagine di manuale vengono spesso convertite in altri formati, come documenti PDF e pagine web. Per saperne di più, dai un'occhiata alle <a href="http://man7.org/linux/man-pages/">pagine di manuale Linux online</a> (in lingua inglese). Molte pagine web hanno un'interfaccia grafica per gli elementi di aiuto, che possono includere pagine di manuale.</p><p>Esiste anche una versione italiana delle pagine di manuale online curata dal <a href="http://www.pluto.it/ildp/man">progetto PLUTO</a> - n.d.t.</p><p>Altre fonti di documentazione includono libri pubblicati e molti siti Internet.</p><h3 id="man">man</h3><p>Il programma <strong>man</strong> ricerca, formatta e visualizza le informazioni contenute nel sistema di pagine di manuale. Poiché molti argomenti hanno abbondanti quantità di informazioni pertinenti, il risultato viene convogliato attraverso un programma di paginazione (come <strong>less</strong>) per visualizzare una pagina alla volta. Allo stesso tempo, le informazioni sono formattate per un buon aspetto visivo.</p><p>Un determinato argomento può avere più pagine a esso associate ed esiste un ordine predefinito che determina quale viene visualizzata quando non viene specificata alcuna opzione o numero di sezione. Per elencare tutte le pagine sull'argomento, utilizzare l'opzione <strong>-f</strong>. Per elencare tutte le pagine che trattano di un argomento specifico (anche se il soggetto specificato non è presente nel nome), utilizzare l'opzione <strong>-k</strong>.</p><ul><li><strong><code>man –f</code></strong> equivale a digitare <strong><code>whatis</code></strong>.</li><li><strong><code>man –k</code></strong> equivale a digitare <strong><code>apropos</code></strong>.</li></ul><p>L'ordine predefinito è specificato in <strong><code>/etc/man_db.conf</code></strong> ed è approssimativamente (ma non esattamente) in ordine numerico ascendente per sezione.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/c164a9474ac7ecb00e78799f2cfd602c/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/man1.png" class="kg-image" alt="man -f sysctl" width="714" height="317" loading="lazy"><figcaption>man</figcaption></figure><h4 id="capitoli-del-manuale">Capitoli del Manuale</h4><p>Le pagine di manuale sono divise in capitoli numerati da 1 a 9. In alcuni casi, una lettera viene aggiunta al numero del capitolo per identificare un argomento specifico. Ad esempio, molte pagine che descrivono parte dell'API di X Window sono nel capitolo <strong>3X</strong>.</p><p>Il numero del capitolo può essere usato per forzare il programma a visualizzare la pagina da un particolare capitolo. È comune avere più pagine su più capitoli con lo stesso nome, in particolare per i nomi delle funzioni della libreria o delle chiamate di sistema.</p><p>Con il parametro <strong>-a</strong>, <strong>man</strong> visualizzerà tutte le pagine con il nome specificato in tutti i capitoli, uno dopo l'altro, in questo modo:</p><p><strong><code>$ man -a socket</code></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/83583dd77505523938107d8480bea1d4/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/manchap.png" class="kg-image" alt="Manual Chapters: $ man -a socket" width="716" height="326" loading="lazy"><figcaption>Capitoli del Manuale</figcaption></figure><!--kg-card-begin: html--><h4>Video: Usare man</h4>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V002300_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="il-sistema-di-informazione-gnu">Il Sistema di Informazione GNU</h3><p>La prossima fonte di documentazione di Linux è il Sistema di Informazione GNU (GNU Info System).</p><p>Questo è il formato di documentazione standard del progetto GNU, preferito come alternativa a <strong>man</strong>. Il sistema informativo è sostanzialmente in forma libera e supporta sottosezioni collegate.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/GNU_Project_logo.jpg" class="kg-image" alt="GNU_Project_logo" width="330" height="322" loading="lazy"></figure><p>Dal punto di vista funzionale, <strong>info</strong> assomiglia a <code>man</code> in molti modi. Tuttavia, gli argomenti sono connessi utilizzando link (anche se la sua progettazione precede il World Wide Web). Le informazioni possono essere visualizzate tramite un'interfaccia della riga di comando, un'utilità di aiuto grafico, stampate o visualizzate online.</p><h4 id="usare-info-dalla-riga-di-comando">Usare info dalla Riga di Comando</h4><p>Digitando <strong>info</strong> senza argomenti in una finestra di terminale viene mostrato un indice di argomenti disponibili. È possibile sfogliare l'elenco degli argomenti usando i normali tasti di movimento: le frecce, <strong><code>PaginaSu</code></strong> e <strong><code>PaginaGiu</code></strong>.</p><p>Puoi visualizzare l'aiuto per un argomento particolare digitando <strong>info </strong>. Il sistema quindi cerca l'argomento in tutti i file <strong>info</strong> disponibili.</p><p>Alcuni tasti utili sono: <strong><code>q</code></strong> per uscire, <strong><code>h</code></strong> per aiuto, e <strong><code>Invio</code></strong> per selezionare una voce di menu.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/d7c774dd6b4b262495a16a57aed417a5/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/infoubuntu.png" class="kg-image" alt="info" width="723" height="523" loading="lazy"><figcaption>info</figcaption></figure><h4 id="struttura-di-una-pagina-info">Struttura di una Pagina info</h4><p>L'argomento che visualizzi in una pagina di informazioni è chiamato <strong>nodo</strong>. La tabella elenca i tasti di base per lo spostamento tra i nodi.</p><p>I nodi sono essenzialmente sezioni e sottosezioni nella documentazione. È possibile spostarsi tra i nodi o visualizzare ciascun nodo in sequenza. Ogni nodo può contenere menu e sotto argomenti collegati, o elementi.</p><p>Gli elementi funzionano come i collegamenti del browser e sono identificati da un asterisco (<strong><code>*</code></strong>) all'inizio del nome dell'elemento. Gli elementi denominati (al di fuori di un menu) sono identificati con due simboli di due punti affiancati (<strong><code>::</code></strong>) alla fine del nome dell'elemento. Gli elementi possono fare riferimento ad altri nodi all'interno del file o ad altri file.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Tasto</strong></th>
<th><strong>Funzione</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>n</code></strong></td>
<td>Va al nodo successivo</td>
</tr>
<tr>
<td><strong><code>p</code></strong></td>
<td>Va al nodo precedente</td>
</tr>
<tr>
<td><strong><code>u</code></strong></td>
<td>Si sposta al nodo superiore nell'indice</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><h4>Video: Usare info</h4>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V002200_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video><!--kg-card-end: html--><h3 id="l-opzione-help">L'Opzione --help</h3><p>Un'altra importante fonte di documentazione di Linux è l'uso dell'opzione <strong>--help</strong>.</p><p>La maggior parte dei comandi ha una descrizione breve disponibile che può essere visualizzata utilizzando l'opzione <strong>--help</strong> oppure <strong>-h</strong> assieme al comando o applicazione. Per esempio, per saperne di più circa il comando <strong>man</strong> puoi digitare:</p><p><strong><code>$ man --help</code></strong></p><p>L'opzione <strong>--help</strong> è utile come riferimento rapido e visualizza le informazioni più velocemente rispetto a <strong>man</strong> oppure <strong>info</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/f9d86b387589f5e13d24cc7e88272e61/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/manhelp.png" class="kg-image" alt="The --help Option" width="1035" height="694" loading="lazy"><figcaption>L'Opzione --help</figcaption></figure><h3 id="il-comando-help">Il Comando Help</h3><p>Quando eseguiti all'interno di una shell di comando <strong>bash</strong>, alcuni popolari comandi (come <strong>echo</strong> e <strong>cd</strong>) in realtà sono eseguiti con una versione specificamente integrata nelle versioni &nbsp;<strong>bash</strong> dei comandi, rispetto ai normali programmi binari trovati nel filesystem, diciamo sotto <strong><code>/bin</code></strong> o <strong><code>/usr/bin</code></strong>. È più efficiente fare in questo modo poiché l'esecuzione è più veloce perché vengono utilizzate meno risorse (discuteremo in seguito delle shell di comando). Si dovrebbe notare che ci possono essere alcune differenze (di solito piccole) nelle due versioni del comando.</p><p>Per visualizzare una sinossi di questi comandi integrati, puoi semplicemente digitare <strong>help</strong> come mostrato nella videata.</p><p>Per questi comandi integrati, <strong>help</strong> ha lo stesso effetto degli argomenti <strong>-h</strong> e <strong>--help</strong> per i programmi a sé stanti.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/helpbash.png" class="kg-image" alt="helpbash" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/helpbash.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/helpbash.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/helpbash.png 1135w" sizes="(min-width: 720px) 720px" width="1135" height="960" loading="lazy"><figcaption>Il Comando help</figcaption></figure><h3 id="altre-fonti-di-documentazione">Altre Fonti di Documentazione</h3><p>Oltre alle pagine di manuale, il sistema di informazione GNU e il comando <strong>help</strong>, ci sono altre fonti di documentazione Linux, tra le quali:</p><ul><li>Il sistema di help del Desktop</li><li>La documentazione dei pacchetti</li><li>Le risorse online</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch07_screen23.jpg" class="kg-image" alt="LFS01_ch07_screen23" width="437" height="345" loading="lazy"><figcaption>Altre Fonti di Documentazione</figcaption></figure><h3 id="i-sistemi-di-aiuto-grafico">I sistemi di Aiuto Grafico</h3><p>Tutti i sistemi desktop Linux hanno un'applicazione di aiuto grafico. Questa applicazione viene generalmente visualizzata come un'icona che rappresenta un punto interrogativo o un'immagine di un salvagente e può essere trovata anche all'interno del sistema di menu. Questi programmi di solito contengono un aiuto personalizzato per il desktop stesso e alcune delle sue applicazioni e talvolta includono anche versioni grafiche di <strong><code>info</code></strong> e delle <strong>pagine di manuale</strong>.</p><p>Se non si desidera dedicare del tempo a cercare l'icona o la voce di menu giusta per avviare l'applicazione di aiuto, è anche possibile avviare il sistema di aiuto grafico da una finestra del terminale o da un prompt dei comandi utilizzando uno dei seguenti programmi di utilità:</p><ul><li>GNOME: <strong>gnome-help</strong> o <strong>yelp</strong></li><li>KDE: <strong>khelpcenter</strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/gnome-help.png" class="kg-image" alt="gnome-help" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/gnome-help.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/gnome-help.png 857w" sizes="(min-width: 720px) 720px" width="857" height="676" loading="lazy"><figcaption>Help di GNOME</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/khelpcenter.png" class="kg-image" alt="khelpcenter" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/khelpcenter.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/khelpcenter.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/khelpcenter.png 1131w" sizes="(min-width: 720px) 720px" width="1131" height="847" loading="lazy"><figcaption>Help di KDE</figcaption></figure><h3 id="documentazione-dei-pacchetti">Documentazione dei Pacchetti</h3><p>La documentazione di Linux è disponibile anche come parte del sistema di gestione dei pacchetti. Di solito, questa documentazione viene estratta direttamente dal codice sorgente a monte, ma può anche contenere informazioni su come la distribuzione è confezionata e sull'impostazione del software.</p><p>Tali informazioni sono posizionate nella directory <strong><code>/usr/share/doc</code></strong>, raggruppate in sottodirectory che prendono il nome da ciascun pacchetto, talvolta includendo il numero di versione nel nome.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/usrsharedoc.png" class="kg-image" alt="usrsharedoc" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/usrsharedoc.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/usrsharedoc.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/usrsharedoc.png 1035w" sizes="(min-width: 720px) 720px" width="1035" height="770" loading="lazy"><figcaption>Documentazione dei Pacchetti</figcaption></figure><h3 id="risorse-online">Risorse Online</h3><p>Ci sono molti luoghi per accedere alla documentazione di Linux online e con un po' di ricerca rimarrai facilmente sepolto dalle risorse.</p><p>Il seguente libro ha avuto buone recensioni da altri utenti di questo corso. È un compendio della riga di comando gratuito e scaricabile sotto una licenza Creative Commons: <strong>"<a href="http://linuxcommand.org/tlcl.php">The Linux Command Line</a>"</strong> (in lingua inglese) di William Shotts.</p><p>Puoi anche trovare una documentazione molto utile per ogni distribuzione. Ogni distribuzione ha i suoi forum creati dagli utenti e sezioni wiki. Ecco solo alcuni collegamenti a tali fonti (in lingua inglese):</p><ul><li><a href="https://help.ubuntu.com/">Documentazione Ubuntu</a></li><li><a href="https://wiki.centos.org/Documentation">Documentazione CentoS</a></li><li><a href="https://doc.opensuse.org/">Documentazione openSUSE</a></li><li><a href="https://www.gentoo.org/support/documentation/">Documentazione Gentoo</a></li><li><a href="https://docs.fedoraproject.org/">Documentazione Fedora</a>.</li></ul><p>Inoltre, puoi utilizzare siti di ricerca online per individuare risorse utili da Internet, inclusi post di blog, forum e mailing list, articoli di notizie e così via.</p><h3 id="riepilogo-del-capitolo-1">Riepilogo del Capitolo</h3><p>Hai completato il capitolo 8. riassumiamo i concetti chiave trattati:</p><ul><li>Le sorgenti principali della documentazione Linux sono le pagine di manuale, il Sistema di Informazione GNU, l'opzione <strong>--help</strong>, il comando <strong>help</strong> e una ricca varietà di fonti di documentazione online.</li><li>L'utility <strong>man</strong> cerca, formatta e visualizza pagine di manuale.</li><li>Le pagine di manuale forniscono una documentazione approfondita sui programmi e altri argomenti circa il sistema, compresi i file di configurazione, le chiamate di sistema, le routine di libreria e il kernel.</li><li>Il sistema di Informazione GNU (GNU Info System) fu creato dal progetto GNU come sua documentazione standard. È robusto e accessibile da riga di comando, web e strumenti grafici usando il programma <strong>info</strong>.</li><li>Brevi descrizioni dei comandi sono in genere visualizzate con l'argomento <strong>-h</strong> oppure <strong>--help</strong> .</li><li>Puoi digitare <strong>help</strong> alla riga di comando per visualizzare una sinossi dei comandi integrati.</li><li>Ci sono molte altre risorse di aiuto sia sul tuo sistema che su Internet.</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_Summary-1.jpg" class="kg-image" alt="LFS01_Summary-1" width="330" height="306" loading="lazy"></figure><h2 id="capitolo-9-processi">Capitolo 9: Processi</h2><h3 id="obiettivi-formativi-5">Obiettivi Formativi</h3><p>Entro la fine di questo capitolo, dovresti essere in grado di:</p><ul><li>Descrivere cosa è un processo e distinguere tra tipi di processi.</li><li>Elencare gli attributi di processo.</li><li>Gestire i processi utilizzando <strong>ps</strong> e <strong>top</strong>.</li><li>Comprendere l'uso di medie di carico e altre metriche di processo.</li><li>Manipolare i processi mettendoli in background e ripristinandoli in primo piano.</li><li>Usare <strong>at</strong>, <strong>cron</strong> e <strong>sleep</strong> per pianificare processi nel futuro o metterli in pausa.</li></ul><h3 id="cos-un-processo">Cos'è un Processo?</h3><p>Un <strong>processo</strong> è semplicemente un'istanza di una o più attività correlate (thread) in esecuzione sul tuo computer. Non è lo stesso di un <strong>programma</strong> o di un <strong>comando</strong>. Un singolo comando può in effetti avviare diversi processi contemporaneamente. Alcuni processi sono indipendenti l'uno dall'altro e altri sono correlati. Un fallimento di un processo può o meno influire sugli altri processi in esecuzione sul sistema.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch16_screen03.jpg" class="kg-image" alt="LFS01_ch16_screen03" width="498" height="399" loading="lazy"><figcaption>Processi</figcaption></figure><p>I processi utilizzano molte risorse di sistema, come memoria, cicli CPU (unità di elaborazione centrale) e dispositivi periferici, come schede di rete, dischi rigidi, stampanti e monitor. Il sistema operativo (in particolare il kernel) è responsabile dell'allocazione di una quota adeguata di queste risorse a ciascun processo e di garantire l'utilizzo ottimizzato generale del sistema.</p><h3 id="tipi-di-processo">Tipi di processo</h3><p>Una finestra di un terminale (un tipo di shell di comando) è un processo che funziona finché è necessario. Consente agli utenti di eseguire programmi e accedere alle risorse in un ambiente interattivo. Puoi anche eseguire programmi in background, il che significa che vengono distaccati dalla shell.</p><p>I processi possono essere di diversi tipi in base all'attività che viene eseguita. Ecco alcuni diversi tipi di processo, insieme alle loro descrizioni ed esempi:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Tipo Processo</strong></th>
<th><strong>Descrizione</strong></th>
<th><strong>Esempio</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>Processi Interattivi</td>
<td>Devono essere avviati da un utente, sia da riga di comando che da un'interfaccia grafica come un'icona o la selezione da un menu.</td>
<td><strong>bash, firefox, top</strong></td>
</tr>
<tr>
<td>Processi Batch</td>
<td>Processi automatici che sono pianificati da terminale, poi da esso staccati. Queste attività sono accodate e lavorano su un sistema a base <strong>FIFO</strong>(<strong>F</strong>irst-<strong>I</strong>n,<strong>F</strong>irst-<strong>O</strong>ut).</td>
<td><strong>updatedb</strong>, <strong>ldconfig</strong></td>
</tr>
<tr>
<td>Demoni</td>
<td>Processi server che sono sempre in esecuzione. Molti sono lanciati durante l'avvio del sistema, per poi attendere che un utente o il sistema gli indichi che il loro servizio è richiesto.</td>
<td><strong>httpd</strong>, <strong>sshd</strong>, <strong>libvirtd</strong></td>
</tr>
<tr>
<td>Thread</td>
<td>Processi leggeri. Queste sono attività in esecuzione sotto il controllo di un processo principale, condividendo memoria e altre risorse, ma sono pianificate ed eseguite dal sistema su base individuale. Un thread singolo può terminare senza che l'intero processo sia terminato, e un processo può creare nuovi thread in qualunque momento. Molti programmi non semplici sono multi-thread.</td>
<td><strong>firefox</strong>, <strong>gnome-terminal-server</strong></td>
</tr>
<tr>
<td>Thread del Kernel</td>
<td>Le attività del kernel per le quali gli utenti hanno poco controllo e non possono né avviare né fermare. Queste potrebbero eseguire azioni come spostare un thread da una CPU a un'altra, oppure assicurarsi che le operazioni di input/output da/verso disco siano completate.</td>
<td><strong>kthreadd</strong>, <strong>migration</strong>, <strong>ksoftirqd</strong></td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="pianificazione-e-stati-di-un-processo">Pianificazione e Stati di un Processo</h3><p>Una funzione di kernel critica chiamata <strong>scheduler</strong> sposta costantemente i processi dentro e fuori la CPU, condividendo il tempo in base alla priorità relativa, quanto tempo è necessario e quanto è già stato concesso a un'attività.</p><p>Quando un processo si trova in un cosiddetto stato di <strong>esecuzione</strong> (running), significa che sta attualmente eseguendo le istruzioni su una CPU, o sta aspettando che gli venga concessa una quota di tempo in modo da poterle eseguire. Tutti i processi in questo stato risiedono in quella che viene chiamata coda di esecuzione e su un computer con più CPU o core, c'è una coda di esecuzione ciascuna.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch16_screen05.jpg" class="kg-image" alt="LFS01_ch16_screen05" width="445" height="280" loading="lazy"><figcaption>Pianificazione e Stati di un Processo</figcaption></figure><p>Tuttavia, a volte i processi vanno in quello che viene chiamato stato di <strong>sonno</strong> (sleep), in generale quando aspettano che accada qualcosa prima che possano riprendere, ad esempio che l'utente digiti qualcosa. In questa condizione, si dice che un processo si trova in una coda di attesa.</p><p>Esistono altri stati di processo meno frequenti, soprattutto quando un processo sta terminando. A volte viene completato un processo figlio, ma il suo processo genitore non ha chiesto del suo stato. In modo divertente, si dice che un tale processo sia in uno stato zombie; non è davvero vivo, ma si presenta ancora nell'elenco dei processi del sistema.</p><h3 id="processi-e-identificativi-del-thread">Processi e IDentificativi del Thread</h3><p>In qualsiasi momento, ci sono sempre diversi processi in esecuzione. Il sistema operativo ne tiene traccia assegnando a ciascun un numero identificativo di processo univoco (<strong>PID</strong>). Il PID viene utilizzato per tracciare lo stato del processo, l'utilizzo della CPU, l'uso della memoria, il punto preciso nella memoria dove le risorse si trovano e altre caratteristiche.</p><p>I nuovi PID sono generalmente assegnati in ordine crescente man mano che nascono i processi. Pertanto, il PID 1 indica il processo <strong>init</strong> (processo di inizializzazione) e ai processi successivi vengono gradualmente assegnati numeri più elevati.</p><p>La tabella spiega i tipi PID e le loro descrizioni:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Tipo ID</strong></th>
<th><strong>Descrizione</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>ID di Processo (PID)</td>
<td>Numero ID di Processo univoco</td>
</tr>
<tr>
<td>ID di Processo Genitore (PPID)</td>
<td>Il processo (genitore) che ha fatto partire questo processo. Se il genitore muore, il PPID viene fatto puntare verso un genitore adottivo; sui kernel recenti, questo è il <code>kthreadd</code> che ha PPID=2.</td>
</tr>
<tr>
<td>ID del Thread (TID)</td>
<td>Numero di ID del thread. È lo stesso del PID per un processo a thread singolo. Per processi multi thread, ciascun thread condivide lo stesso PID, ma ha un TID univoco.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="terminare-un-processo">Terminare un Processo</h3><p>Ad un certo punto, una delle tue applicazioni potrebbe smettere di funzionare correttamente. Come la elimini?</p><p>Per interrompere un processo, è possibile digitare <strong><code>kill -SIGKILL &lt;pid&gt;</code></strong> oppure <strong><code>kill -9 &lt;pid&gt;</code></strong>.</p><p>Nota, tuttavia, puoi solo uccidere i tuoi processi; quelli appartenenti a un altro utente sono vietati, a meno che tu non sia root.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/rhelkill.png" class="kg-image" alt="rhelkill" width="415" height="257" loading="lazy"><figcaption>Terminare un Processo</figcaption></figure><h3 id="identificativi-di-utenti-e-gruppi">IDentificativi di Utenti e Gruppi</h3><p>Molti utenti possono accedere a un sistema contemporaneamente e ogni utente può eseguire più processi. Il sistema operativo identifica l'utente che avvia il processo tramite l'ID Utente Reale - Real User ID (RUID) - assegnato all'utente.</p><p>L'utente che determina i diritti di accesso per gli utenti è identificato dall'UID effettivo (EUID). L'EUID può o meno essere uguale al RUID.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch16_screen07.jpg" class="kg-image" alt="LFS01_ch16_screen07" width="427" height="301" loading="lazy"><figcaption>Id Utente e Gruppo</figcaption></figure><p>Gli utenti possono essere classificati in vari gruppi. Ogni gruppo è identificato dall'ID Gruppo Reale - Real Group ID (RGID). I diritti di accesso del gruppo sono determinati dall'ID Gruppo Effettivo (EGID). Ogni utente può essere membro di uno o più gruppi.</p><p>Il più delle volte ignoriamo questi dettagli e parliamo semplicemente dell'ID utente (UID) e dell'ID del Gruppo (GID).</p><h3 id="maggiori-informazioni-sulle-priorit-">Maggiori Informazioni sulle Priorità</h3><p>In un dato momento, molti processi sono in esecuzione (cioè nella coda di esecuzione) sul sistema. Tuttavia, una CPU può effettivamente ospitare solo un'attività alla volta, proprio come un'auto può avere un solo guidatore alla volta. Alcuni processi sono più importanti di altri, quindi Linux consente di impostare e manipolare la priorità del processo. Processi con priorità più elevata ottengono un accesso preferenziale alla CPU.</p><p>La priorità per un processo può essere impostata specificando un valore (<strong>nice value</strong> o niceness) per il processo. Più basso è il valore, maggiore è la priorità. I valori bassi sono assegnati a processi importanti, mentre i valori alti sono assegnati a processi che possono attendere più a lungo. Un processo con un valore elevato consente semplicemente che vengano eseguiti prima altri processi. In Linux, un valore di <strong>-20</strong> rappresenta la priorità più alta e <strong>+19</strong> rappresenta la più bassa. Sebbene ciò possa sembrare controintuitivo, questa convenzione (valore del processo più alto, minore priorità) risale ai primi giorni di Unix.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/niceout.png" class="kg-image" alt="niceout" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/niceout.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/niceout.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/niceout.png 1266w" sizes="(min-width: 720px) 720px" width="1266" height="213" loading="lazy"><figcaption>Output di nice</figcaption></figure><p>Puoi anche assegnare una cosiddetta <strong>priorità in tempo reale</strong> ad attività che richiedono urgenza, come il controllo delle macchine attraverso un computer o la raccolta di dati in arrivo. Questa è solo una priorità molto alta e non deve essere confusa con ciò che viene chiamato "hard real time", che è concettualmente diverso e ha più a che fare con l'assicurarsi che un lavoro venga completato in una finestra temporale molto ben definita.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/fcc61556971b7cdefbafabf3d7abab22/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch16_screen08.jpg" class="kg-image" alt="Nice Values" width="487" height="163" loading="lazy"><figcaption>Valori di Nice</figcaption></figure><!--kg-card-begin: html--><h3>Video: Usare renice per Impostare Priorità</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LinuxFoundationXLFS101x-V000100_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="medie-di-carico">Medie di Carico</h3><p>La <strong>media di carico</strong> (load average) è la media del valore di carico per un determinato periodo di tempo. Tiene conto dei processi che sono:</p><ul><li>Attivamente in esecuzione su una CPU.</li><li>Considerati eseguibili (runnable), ma in attesa che una CPU sia disponibile.</li><li>Dormienti: cioè in attesa che sia disponibile una sorta di risorsa (in genere, I/O).</li></ul><p><strong>NOTA</strong>: <em>Linux differisce da altri sistemi operativi simili a Unix in quanto include i processi dormienti. Inoltre, include solo i cosiddetti <strong>dormienti ininterrotti</strong>, quelli che non possono essere risvegliati facilmente.</em></p><p>La media di carico può essere visualizzata eseguendo <strong>w</strong>, <strong>top</strong> oppure <strong>uptime</strong>. Spiegheremo i numeri nella sezione successiva.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/wuptimesuse.png" class="kg-image" alt="wuptimesuse" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/wuptimesuse.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/wuptimesuse.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/wuptimesuse.png 1034w" sizes="(min-width: 720px) 720px" width="1034" height="235" loading="lazy"><figcaption>Medie di Carico</figcaption></figure><h3 id="interpretare-le-medie-di-carico">Interpretare le Medie di Carico</h3><p>La media di carico è visualizzata usando tre numeri (0.45, 0.17 e 0.12) nella videata seguente. Ipotizzando che il nostro sistema sia a CPU singola, i tre numeri della media di carico sono da interpretare come segue:</p><ul><li><strong>0.45</strong>: Durante l'ultimo minuto, il sistema è stato utilizzato in media per il 45%.</li><li><strong>0.17</strong>: Durante gli ultimi 5 minuti l'utilizzo è stato del 17%.</li><li><strong>0.12</strong>: Durante gli ultimi 15 minuti l'utilizzo è stato del 12%.</li></ul><p>Se vedessimo un valore di <strong>1,00</strong> nella seconda posizione, ciò implicherebbe che il sistema a CPU singola è stato utilizzato al 100%, in media, negli ultimi 5 minuti; questo va bene se vogliamo utilizzare completamente un sistema. Un valore superiore a <strong>1,00</strong> per un sistema a CPU singola implica che il sistema è stato sovrautilizzato: c'erano più processi che necessitavano di CPU rispetto alla sua disponibilità.</p><p>Se avessimo più di una CPU, ad esempio un sistema con quattro CPU, divideremmo i numeri medi di carico per il numero di CPU. In questo caso, ad esempio, vedere una media di carico per 1 minuto di <strong>4,00</strong> implica che il sistema nel suo insieme è stato utilizzato al 100% (4,00/4) durante l'ultimo minuto.</p><p>Gli aumenti a breve termine di solito non sono un problema. Un picco elevato che vedi è probabilmente un aumento improvviso delle attività, non un nuovo livello. Ad esempio, all'avvio, molti processi partono, poi l'attività si stabilizza. Se si osserva un picco elevato nelle medie di carico a 5 e 15 minuti, potrebbe essere motivo di preoccupazione.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/woutputrhel.png" class="kg-image" alt="woutputrhel" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/woutputrhel.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/woutputrhel.png 715w" width="715" height="238" loading="lazy"><figcaption>Interpretare le Medie di Carico</figcaption></figure><h3 id="processi-in-primo-piano-e-in-background">Processi in Primo Piano e in Background</h3><p>Linux supporta l'elaborazione di attività (job) in background e in primo piano. Un attività in questo contesto è solo un comando lanciato da una finestra del terminale. Le attività in primo piano sono eseguite direttamente dalla shell e quando un'attività in primo piano è in esecuzione, altre attività devono attendere per accedere alla shell (almeno in quella finestra del terminale se si utilizza la GUI), fino al completamento. Questo va bene quando le attività si completano rapidamente. Ma questo può avere un effetto negativo se l'attuale attività richiederà molto tempo (anche diverse ore) per essere completata.</p><p>In tali casi, è possibile eseguire l'attività in background e liberare la shell per altri compiti. L'attività in background verrà eseguita con una priorità inferiore, che, a sua volta, consentirà un'esecuzione regolare delle attività interattive e potrai digitare altri comandi nella finestra del terminale mentre l'attività in background è in esecuzione. Per impostazione predefinita, tutte le attività vengono eseguite in primo piano. Puoi mettere un attività in background aggiungendo <strong><code>&amp;</code></strong> al comando, per esempio: <strong><code>updatedb &amp;</code></strong>.</p><p>Puoi utilizzare sia &nbsp;<strong><code>CTRL-Z</code></strong> per sospendere un'attività in primo piano oppure <strong><code>CTRL-C</code></strong> per terminare un'attività in primo piano, e puoi sempre usare i comandi <strong>bg</strong> e <strong>fg</strong> per eseguire un processo in background o in primo piano rispettivamente.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/bgfgrhel.png" class="kg-image" alt="bgfgrhel" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/bgfgrhel.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/bgfgrhel.png 705w" width="705" height="295" loading="lazy"><figcaption>Processi in Primo Piano e in Background</figcaption></figure><h3 id="gestire-le-attivit-">Gestire le Attività</h3><p>L'utility <strong>jobs</strong> visualizza tutte le attività in esecuzione in background. Viene visualizzato l'ID dell'attività, lo stato e il nome del comando, come mostrato nella videata qui sotto.</p><p><strong>jobs -l</strong> fornisce le stesse informazioni di <strong>jobs</strong>, e aggiunge il PID delle attività in background.</p><p>Le attività in background sono connesse alla finestra del terminale, quindi se ti disconnetti, l'utility <strong>jobs</strong> non mostrerà le attività avviate in quella finestra.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/jobsrhel.png" class="kg-image" alt="jobsrhel" width="525" height="276" loading="lazy"><figcaption>Gestire i Job</figcaption></figure><h3 id="il-comando-ps-stile-system-v-">Il Comando ps (Stile System V)</h3><p><strong>ps</strong> fornisce informazioni sui processi attualmente in esecuzione identificati dal PID. Se desideri un aggiornamento ripetitivo di questo stato, puoi usare <strong>top</strong> o altre varianti comunemente installate (come <strong>htop</strong> oppure <strong>atop</strong>) dalla riga di comando, oppure lanciare l'applicazione grafica di monitoraggio del sistema della tua distribuzione.</p><p><strong>ps</strong> ha molte opzioni per specificare esattamente quali attività esaminare, quali informazioni visualizzare su di esse ed esattamente quale formato di output dovrebbe essere utilizzato.</p><p>Senza opzioni, <strong>ps</strong> visualizzerà tutti i processi in esecuzione nella shell corrente. Puoi usare l'opzione <strong>-u</strong> per visualizzare le informazioni sui processi per un specifico username. Il comando <strong>ps -ef</strong> visualizza tutti i processi nel sistema in dettaglio. Il comando <strong>ps -eLf</strong> compie un passo ulteriore e visualizza una riga di informazione per ciascun thread (ricorda, un processo può contenere più thread).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/ubuntupsef.png" class="kg-image" alt="ubuntupsef" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/ubuntupsef.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/ubuntupsef.png 885w" sizes="(min-width: 720px) 720px" width="885" height="455" loading="lazy"><figcaption>Il Comando ps (Stile System V)</figcaption></figure><h3 id="il-comando-ps-stile-bsd-">Il Comando ps (Stile BSD)</h3><p><strong>ps</strong> ha un altro stile per specificare delle opzioni, che deriva dalla varietà <a href="https://it.wikipedia.org/wiki/Berkeley_Software_Distribution">BSD</a> di UNIX, in cui le opzioni sono specificate senza trattini che le precedono. Ad esempio, il comando <strong><code>ps aux</code></strong> visualizza tutti i processi di tutti gli utenti. Il comando <strong><code>ps axo</code></strong> consente di specificare quali attributi si desidera visualizzare.</p><p>La videata mostra una visualizzazione campione di <strong>ps</strong> con le opzioni <strong>aux</strong> e <strong>axo</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/psbsdrhel.png" class="kg-image" alt="psbsdrhel" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/psbsdrhel.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/psbsdrhel.png 865w" sizes="(min-width: 720px) 720px" width="865" height="466" loading="lazy"><figcaption>Il Comando ps (Stile BSD)</figcaption></figure><!--kg-card-begin: html--><h3>Video: Usare ps</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/322cee4c-fb31-4b26-98c0-0fcb3da2b7aa-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="l-albero-dei-processi">L'albero dei Processi</h3><p><strong>pstree</strong> visualizza i processi in esecuzione sul sistema sotto forma di un diagramma ad albero che mostra la relazione tra un processo e il suo processo genitore e qualsiasi altro processo che ha creato. Le voci ripetute di un processo non vengono visualizzate e i thread vengono visualizzati tra parentesi graffe.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/ubuntupstree.png" class="kg-image" alt="ubuntupstree" width="480" height="339" loading="lazy"><figcaption>L'Albero dei Processi</figcaption></figure><h3 id="top">top</h3><p>Mentre è utile una visione statica di ciò che il sistema sta facendo, è importante anche monitorare le prestazioni del sistema nel tempo. Un'opzione sarebbe quella di eseguire <strong>ps</strong> a intervalli regolari, diciamo ogni pochi secondi. Un'alternativa migliore è utilizzare il comando <strong>top</strong> per ottenere aggiornamenti costanti in tempo reale (ogni due secondi per impostazione predefinita), fino a quando non si esce digitando <strong><code>q</code></strong>. <strong>top</strong> evidenzia chiaramente quali processi stanno consumando il maggior numero di cicli CPU e memoria (usando gli appropriati comandi all'interno di <strong>top</strong>).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/toprhel.png" class="kg-image" alt="toprhel" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/toprhel.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/toprhel.png 865w" sizes="(min-width: 720px) 720px" width="865" height="580" loading="lazy"><figcaption>top</figcaption></figure><h4 id="prima-riga-dell-output-di-top">Prima Riga dell'Output di top</h4><p>La prima riga dell'output di <strong>top</strong> mostra un breve riepilogo di ciò che sta accadendo nel sistema, tra cui:</p><ul><li>Da quanto tempo il sistema è in esecuzione</li><li>Quanti utenti sono attualmente connessi</li><li>Quale è la media di carico</li></ul><p>La media di carico determina quanto sia occupato il sistema. Una media di carico di 1,00 per CPU indica un sistema completamente occupato, ma non in sovraccarico. Se la media del carico supera questo valore, indica che i processi sono in competizione per il tempo della CPU. Se la media del carico è molto elevata, potrebbe indicare che il sistema ha un problema, come un processo "runaway" (fuggitivo - un processo in uno stato non rispondente).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/toprhelline1.png" class="kg-image" alt="toprhelline1" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/toprhelline1.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/toprhelline1.png 865w" sizes="(min-width: 720px) 720px" width="865" height="580" loading="lazy"><figcaption>La Prima Riga dell'Output di top</figcaption></figure><h4 id="seconda-riga-dell-output-di-top">Seconda Riga dell'Output di top</h4><p>La seconda riga dell'output di <strong>top</strong> &nbsp;visualizza il numero totale di processi, il numero di processi in esecuzione, dormienti, fermati e zombie. Il confronto del numero di processi di esecuzione con la media di carico aiuta a determinare se il sistema ha raggiunto la sua capacità o forse un determinato utente sta eseguendo troppi processi. I processi fermati dovrebbero essere esaminati per vedere se tutto è correttamente in esecuzione.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/toprhelline2.png" class="kg-image" alt="toprhelline2" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/toprhelline2.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/toprhelline2.png 865w" sizes="(min-width: 720px) 720px" width="865" height="580" loading="lazy"><figcaption>La Seconda Riga dell'Output di top</figcaption></figure><h4 id="terza-riga-dell-output-di-top">Terza Riga dell'Output di top</h4><p>La terza riga dell'output di <strong>top</strong> indica come il tempo della CPU viene diviso tra gli utenti (<strong>us</strong>) e il kernel (<strong>sy</strong>) visualizzando la percentuale di tempo della CPU utilizzata per ciascuno.</p><p>Viene quindi elencata la percentuale di attività utente in esecuzione con una priorità inferiore (<strong>niceness - ni</strong>). La modalità inattiva (<strong>id</strong>) deve essere bassa se la media di carico è alta e viceversa. È elencata la percentuale di attività in attesa (<strong>wa</strong>) per I/O. Gli interrupt includono la percentuale di hardware (<strong>hi</strong>) rispetto agli interrupt software (<strong>si</strong>). Il tempo rubato (<strong>st</strong>) è generalmente utilizzato con le macchine virtuali, che hanno parte del loro tempo di inattività della CPU occupato per altri usi.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/toprhelline3.png" class="kg-image" alt="toprhelline3" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/toprhelline3.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/toprhelline3.png 865w" sizes="(min-width: 720px) 720px" width="865" height="580" loading="lazy"><figcaption>Terza Riga dell'Output di top</figcaption></figure><h4 id="quarta-e-quinta-riga-dell-output-di-top">Quarta e Quinta Riga dell'Output di top</h4><p>La quarta e la quinta riga dell'output di <strong>top</strong> indicano l'utilizzo della memoria, che è diviso in due categorie:</p><ul><li>Memoria fisica (RAM) - visualizzata sulla riga 4.</li><li>Spazio di swap - visualizzato sulla riga 5.</li></ul><p>Entrambe le categorie visualizzano la memoria totale, la memoria utilizzata e lo spazio libero.</p><p>È necessario monitorare l'utilizzo della memoria con molta attenzione per garantire buone prestazioni del sistema. Una volta esaurita la memoria fisica, il sistema inizia utilizzando lo spazio di <a href="https://it.wikipedia.org/wiki/Swap_(informatica)">swap</a> (spazio di archiviazione temporaneo sul disco rigido) come un pool di memoria esteso e poiché l'accesso al disco è molto più lento dell'accesso alla memoria, ciò influenzerà negativamente le prestazioni del sistema.</p><p>Se il sistema inizia a utilizzare spesso lo swap, è possibile aggiungere più spazio di swap. Tuttavia, dovrebbe essere considerata anche l'aggiunta di più memoria fisica.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/toprhelline4-5.png" class="kg-image" alt="toprhelline4-5" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/toprhelline4-5.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/toprhelline4-5.png 865w" sizes="(min-width: 720px) 720px" width="865" height="580" loading="lazy"><figcaption>Quarta e Quinta Riga dell'Output di top</figcaption></figure><h4 id="elenco-dei-processi-nell-output-di-top">Elenco dei Processi nell'Output di top</h4><p>Ogni riga nell'elenco dei processi dell'output di <strong>top</strong> visualizza informazioni su un processo. Per impostazione predefinita, i processi sono ordinati per maggiore utilizzo della CPU. Vengono visualizzate le seguenti informazioni su ciascun processo:</p><ul><li>Numero di identificazione del processo (<strong>PID</strong>)</li><li>Proprietario del processo (<strong>USER</strong>)</li><li>Priorità (<strong>PR</strong>) e valori nice (NI)</li><li>Memoria virtuale (<strong>VIRT</strong>), fisica (<strong>RES</strong>) e condivisa (<strong>SHR</strong>)</li><li>Stato (<strong>S</strong>)</li><li>Percentuale di CPU <strong>(%CPU</strong>) e memoria (<strong>%MEM</strong>) usata</li><li>Tempo in escuzione (<strong>TIME+</strong>)</li><li>Comando (<strong>COMMAND</strong>).</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/toprhel--1-.png" class="kg-image" alt="toprhel--1-" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/toprhel--1-.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/toprhel--1-.png 865w" sizes="(min-width: 720px) 720px" width="865" height="580" loading="lazy"><figcaption>L'Elenco dei Processi Visualizzato da top</figcaption></figure><h4 id="tasti-interattivi-con-top">Tasti Interattivi con top</h4><p>Oltre a visualizzare informazioni, <strong>top</strong> può essere utilizzato in modo interattivo per il monitoraggio e il controllo dei processi. Mentre <strong>top</strong> è in esecuzione in una finestra del terminale, è possibile inserire comandi costituiti da una singola lettera per modificarne il comportamento. Ad esempio, è possibile visualizzare i processi di livello più alto in base all'utilizzo della CPU o della memoria. Se necessario, è possibile modificare le priorità dell'esecuzione dei processi oppure è possibile fermare/uccidere un processo.</p><p>La tabella elenca cosa succede quando si premono vari tasti quando si esegue <strong>top</strong>:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Commndo</strong></th>
<th><strong>Risultato</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>t</code></strong></td>
<td>Visualizza o nasconde informazioni di riepilogo (righe 2 e 3)</td>
</tr>
<tr>
<td><strong><code>m</code></strong></td>
<td>Visualizza o nasconde informazioni sulla memoria (righe 4 e 5)</td>
</tr>
<tr>
<td><strong><code>A</code></strong></td>
<td>Ordina l'elenco dei processi rispetto al maggior consumo di risorse</td>
</tr>
<tr>
<td><strong><code>r</code></strong></td>
<td>Esegue il comando <code>renice</code> (modifica la priorità) di un processo specifico</td>
</tr>
<tr>
<td><strong><code>k</code></strong></td>
<td>Uccide un processo specifico</td>
</tr>
<tr>
<td><strong><code>f</code></strong></td>
<td>Entra nella schermata di configurazione di <strong>top</strong></td>
</tr>
<tr>
<td><strong><code>o</code></strong></td>
<td>Seleziona interattivamente un nuovo ordinamento dell'elenco dei processi</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><h4>Video: Uso di top</h4>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/da3272c6-9559-41ac-a8b2-1168df22670c-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>

<h4>Video: Uso del Sistema di Monitoraggio</h4>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LinuxFoundationXLFS101x-V000200_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="pianificare-processi-futuri-usando-at">Pianificare Processi Futuri Usando at</h3><p>Supponi di dover svolgere un'attività in un giorno specifico in futuro. Tuttavia, sai che sarai lontano dalla macchina in quel giorno. Come eseguirai l'attività? È possibile utilizzare il programma di utilità <strong>at</strong> per eseguire qualsiasi comando non interattivo in un momento specificato, come illustrato nella seguente videata:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/ec37c00269266c49e55f7a52aab93f9a/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/atout.png" class="kg-image" alt="Output of at command" width="586" height="384" loading="lazy"><figcaption>Pianificare Processi Futuri Usando at</figcaption></figure><h3 id="cron">cron</h3><p><strong>cron</strong> è un programma di utilità di pianificazione temporale. Può lanciare lavori di routine in background in momenti specifici e/o giorni su base continuativa. <strong>cron</strong> è guidato da un file di configurazione chiamato <strong><code>/etc/crontab</code></strong> (tabella cron), che contiene i vari comandi di shell che devono essere eseguiti nei tempi adguatamente programmati. Ci sono file <strong>crontab</strong> sia a livello di sistema che per utente. Ogni riga di un file <strong>crontab</strong> rappresenta un'attività (job), ed è composto dalla cosiddetta espressione <strong>CRON</strong>, seguita dal comando di shell da eseguire.</p><p>Digitando <strong><code>crontab -e</code></strong> verrà aperto l'editor di crontab per modificare attività esistenti oppure per crearne di nuove. Ciascuna riga nel file <strong>crontab</strong> conterrà sei campi:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Campo</strong></th>
<th><strong>Descrizione</strong></th>
<th><strong>Valori</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>MIN</strong></td>
<td>Minuti</td>
<td>da 0 a 59</td>
</tr>
<tr>
<td><strong>HOUR</strong></td>
<td>Ore</td>
<td>da 0 a 23</td>
</tr>
<tr>
<td><strong>DOM</strong></td>
<td>Giorno del Mese</td>
<td>1-31</td>
</tr>
<tr>
<td><strong>MON</strong></td>
<td>Numero del Mese</td>
<td>1-12</td>
</tr>
<tr>
<td><strong>DOW</strong></td>
<td>Giorno della Settimana</td>
<td>0-6 (0 = Domenica)</td>
</tr>
<tr>
<td><strong>CMD</strong></td>
<td>Comando</td>
<td>Qualunque comando da eseguire</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Esempi:</p><ul><li>La voce <strong><code>* * * * * /usr/local/bin/execute/this/script.sh</code></strong> pianificherà l'attività di esecuzione di <code>script.sh</code> ogni minuto di ogni ora di ogni giorno del mese, per ogni mese e per ogni giorno della settimana.</li><li>La voce <strong><code>30 08 10 06 * /home/sysadmin/full-backup</code></strong> pianificherà una copia di salvataggio completa (full-backup) alle 8.30 della mattina del 10 giugno, a prescindere dal giorno della settimana.</li></ul><h3 id="sleep">sleep</h3><p>A volte, un comando o un'attività devono essere ritardati o sospesi. Supponi, ad esempio, che un'applicazione abbia letto ed elaborato il contenuto di un file di dati e quindi debba salvare un rapporto su un sistema di backup. Se il sistema di backup è attualmente occupato o non disponibile, l'applicazione può essere messa a "dormire" (messa in attesa) fino a quando non può completare il suo lavoro. Tale ritardo potrebbe essere quello di montare il dispositivo di backup e prepararlo per la scrittura.</p><p><strong>sleep</strong> sospende l'esecuzione per almeno il periodo di tempo specificato, che può essere fornito come numero di secondi (il valore predefinito), minuti, ore o giorni. Dopo che è passato quel tempo (o è stato ricevuto un segnale di interruzione), l'esecuzione riprenderà.</p><p>La sintassi è:</p><p><strong><code>sleep NUMERO[SUFFISSO]...</code></strong></p><p>dove <strong><code>SUFFISSO</code></strong> potrebbe essere:</p><ul><li><strong><code>s</code></strong> per i secondi (predefinito)</li><li><strong><code>m</code></strong> per i minuti</li><li><strong><code>h</code></strong> per le ore</li><li><strong><code>d</code></strong> per i giorni.</li></ul><p><strong>sleep</strong> e <strong>at</strong> sono abbastanza diversi; <strong>sleep</strong> ritarda l'esecuzione per un dato periodo, mentre <strong>at</strong> inizia l'esecuzione in un tempo futuro.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/sleepsuse.png" class="kg-image" alt="sleepsuse" width="554" height="424" loading="lazy"><figcaption>sleep</figcaption></figure><h3 id="riepilogo-del-capitolo-2">Riepilogo del Capitolo</h3><p>Hai completato il capitolo 9. Riassumiamo i concetti chiave trattati:</p><ul><li>I processi vengono utilizzati per eseguire varie attività sul sistema.</li><li>I processi possono essere a thread singolo o multi-thread.</li><li>I processi possono essere di diversi tipi, come interattivi e non interattivi.</li><li>Ogni processo ha un identificatore univoco (PID) per consentire al sistema operativo di tenerne traccia.</li><li>Il valore "nice", o "niceness", può essere utilizzato per stabilire la priorità.</li><li><strong>ps</strong> fornisce informazioni sui processi attualmente in esecuzione.</li><li>Puoi utilizzare <strong>top</strong> per ottenere aggiornamenti costanti in tempo reale sulle prestazioni complessive del sistema, nonché informazioni sui processi in esecuzione sul sistema.</li><li>La media di carico indica la quantità di utilizzo del sistema durante un certo lasso di tempo.</li><li>Linux supporta l'elaborazione in background e in primo piano per un'attività.</li><li><strong>at</strong> esegue qualsiasi comando non interattivo a un orario specificato.</li><li><strong>cron</strong> viene utilizzato per pianificare le attività che devono essere eseguite a intervalli regolari.</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_Summary--1-.jpg" class="kg-image" alt="LFS01_Summary--1-" width="330" height="306" loading="lazy"></figure><h2 id="capitolo-10-operazioni-sui-file">Capitolo 10: Operazioni sui File</h2><h3 id="obiettivi-formativi-6">Obiettivi Formativi</h3><p>Entro la fine di questo capitolo, dovresti essere in grado di:</p><ul><li>Esplorare il filesystem e la sua gerarchia.</li><li>Spiegare l'architettura del filesystem.</li><li>Confrontare i file e identificare diversi tipi di file.</li><li>Eseguire il backup e comprimere i dati.</li></ul><h3 id="introduzione-al-filesystem">Introduzione al Filesystem</h3><p>In Linux (e tutti i sistemi operativi simili a UNIX) si dice spesso "tutto è un file", o almeno è trattato come tale. Ciò significa che quando lavori con file di dati e documenti normali oppure con dispositivi come schede audio e stampanti, interagisci con loro attraverso lo stesso tipo di operazioni di input/output (I/O). Questo semplifica le cose: apri un "file" ed esegui operazioni normali come leggerlo e scrivere su di esso (che è uno dei motivi per cui gli editor di testo, che imparerai in una prossima sezione, sono così importanti).</p><p>Su molti sistemi (incluso Linux), il filesystem è strutturato come un albero. L'albero è di solito ritratto rovesciato e inizia da quella che viene generalmente chiamata <strong>directory root</strong>, che segna l'inizio della gerarchia del filesystem e talvolta viene anche detta tronco, o semplicemente indicata da <strong>'/'</strong>. La directory <strong>root</strong> non è lo stessa cosa dell'utente root. La gerarchia del filesystem contiene anche altri elementi nel percorso (nomi delle directory), che sono separati da barre oblique (<strong><code>/</code></strong>), come in <strong><code>/usr/bin/emacs</code></strong>, dove l'ultimo elemento è il nome effettivo del file.</p><p>In questa sezione, imparerai alcuni concetti di base, tra cui la gerarchia del filesystem, nonché le partizioni del disco.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch08_screen_03.jpg" class="kg-image" alt="LFS01_ch08_screen_03" width="316" height="377" loading="lazy"><figcaption>Filesystem</figcaption></figure><h3 id="variet-di-filesystem">Varietà di Filesystem</h3><p>Linux supporta una serie di tipi di filesystem nativi, espressamente creati dagli sviluppatori Linux, come:</p><ul><li>ext3</li><li>ext4</li><li>squashfs</li><li>btrfs</li></ul><p>Offre anche implementazioni di filesystem utilizzati su altri sistemi operativi non nativi, come quelli di:</p><ul><li>Windows (ntfs, vfat)</li><li>SGI (xfs)</li><li>IBM (jfs)</li><li>MacOS (hfs, hfs+)</li></ul><p>Sono supportati anche molti filesystem più vecchi e <a href="https://it.wikipedia.org/wiki/Sistema_legacy">legacy</a>, come FAT.</p><p>Spesso è vero che più di un tipo di filesystem viene utilizzato su una macchina, in base a considerazioni come la dimensione dei file, quanto spesso sono modificati, su quale tipo di hardware risiedono, quale tipo di velocità di accesso è necessaria, ecc. I tipi più avanzati di filesystem di uso comune sono le varietà <a href="https://it.wikipedia.org/wiki/Journaling"><strong>journaling</strong></a>: ext4, xfs, btrfs e jfs. Questi hanno molte caratteristiche all'avanguardia e alte prestazioni e sono molto difficili da corrompere accidentalmente.</p><h3 id="partizioni-linux">Partizioni Linux</h3><p>Ogni filesystem su un sistema Linux occupa una <strong>partizione</strong> di disco. Le partizioni aiutano a organizzare il contenuto dei dischi in base al tipo e all'uso dei dati contenuti. Ad esempio, programmi importanti richiesti per eseguire il sistema vengono spesso mantenuti su una partizione separata (nota come <strong>root</strong> o <strong><code>/</code></strong>) rispetto a quella che contiene file di proprietà di utenti normali di quel sistema (<strong><code>/home</code></strong>). Inoltre, i file temporanei creati e distrutti durante il normale funzionamento di Linux possono essere posizionati su partizioni dedicate. Un vantaggio di questo tipo di isolamento per tipo e variabilità è che quando tutto lo spazio disponibile su una particolare partizione è esaurito, il sistema può ancora funzionare normalmente.</p><p>L'immagine mostra l'uso dell'utilità <strong>gparted</strong>, che visualizza la disposizione delle partizioni su un sistema che ha quattro sistemi operativi: RHEL 8, CentOS 7, Ubuntu e Windows.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/gparted.png" class="kg-image" alt="gparted" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/gparted.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/gparted.png 1000w, https://www.freecodecamp.org/italian/news/content/images/size/w1600/2023/03/gparted.png 1600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/gparted.png 1954w" sizes="(min-width: 720px) 720px" width="1954" height="986" loading="lazy"><figcaption>Partizioni Linux: gparted</figcaption></figure><h3 id="punti-di-montaggio">Punti di Montaggio</h3><p>Prima di poter iniziare a utilizzare un filesystem, devi <strong>montarlo</strong> sull'albero del filesystem in un punto di montaggio. Questo è semplicemente una directory (che può o meno essere vuota) nella quale il filesystem deve essere innestato. A volte, potrebbe essere necessario creare la directory se non esiste già.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch08_screen06.jpg" class="kg-image" alt="LFS01_ch08_screen06" width="429" height="313" loading="lazy"><figcaption>Punti di Montaggio</figcaption></figure><p><strong>AVVERTIMENTO</strong>: <em>se si monta un filesystem su una directory non vuota, il contenuto precedente di tale directory è coperto e non é accessibile fino a quando il filesystem non viene smontato. Pertanto, i punti di montaggio sono generalmente directory vuote.</em></p><h3 id="montare-e-smontare">Montare e Smontare</h3><p>Il comando <strong>mount</strong> viene utilizzato per innestare un filesystem (che può essere locale al computer o su una rete) da qualche parte all'interno dell'albero del filesystem. Gli argomenti di base sono il <strong>device node</strong> (nodo di dispositivo) e il punto di montaggio. Per esempio,</p><p><strong><code>$ sudo mount /dev/sda5 /home</code></strong></p><p>innesterà il filesystem contenuto nella partizione di disco associato al nodo di dispositivo <strong><code>/dev/sda5</code></strong> nell'albero del filesystem nel punto di montaggio <strong><code>/home</code></strong>. Esistono altri modi per specificare la partizione oltre che dal nodo di dispositivo, come usare l'etichetta del disco o dell'UUID.</p><p>Per smentare la partizione, il comando sarà:</p><p><strong><code>$ sudo umount /home</code></strong></p><p>Nota che il comando è <strong><code>umount</code></strong>, non <code>unmount</code>! Solo un utente di root (connesso come root o usando <strong><code>sudo</code></strong>) ha il privilegio di eseguire questi comandi, a meno che il sistema non sia stato configurato altrimenti.</p><p>Se vuoi che sia automaticamente disponibile ogni volta che il sistema si avvia, devi modificare di conseguenza il file <strong><code>/etc/fstab</code></strong> (il nome è l'abbreviazione di filesystem table - tabella del filesystem). Se visualizzi questo file ti mostrerà la configurazione di tutti i filesystem preconfigurati. <strong><code>man fstab</code></strong> ti mostrerà come viene utilizzato questo file e come configurarlo.</p><p>L'esecuzione di <strong>mount</strong> senza alcun argomento mostrerà tutti i filesystem attualmente montati.</p><p>Il comando <strong><code>df -Th</code></strong> (disk-free - spazio libero su disco) visualizzerà informazioni sui filesystem montati, incluso il tipo di filesystem e le statistiche di utilizzo sullo spazio attualmente utilizzato e di quello disponibile.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/dfmountdebian.png" class="kg-image" alt="dfmountdebian" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/dfmountdebian.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/dfmountdebian.png 800w" sizes="(min-width: 720px) 720px" width="800" height="543" loading="lazy"><figcaption>Montare e Smontare</figcaption></figure><h3 id="i-filesystem-nfs-e-di-rete">I filesystem NFS e di Rete</h3><p>È spesso necessario condividere i dati tra sistemi fisici che possono essere nella stessa posizione o ovunque possano essere raggiunti da Internet. Un filesystem di rete (a volte detto anche distribuito) può avere tutti i suoi dati su una macchina o diffonderlo su più di un nodo di rete. Una varietà di filesystem diversi può essere utilizzata localmente sulle singole macchine; un filesystem di rete può essere pensato come un raggruppamento di filesystem di basso livello di vari tipi.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/NFS_LFS101.png" class="kg-image" alt="NFS_LFS101" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/NFS_LFS101.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/NFS_LFS101.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/NFS_LFS101.png 1260w" sizes="(min-width: 720px) 720px" width="1260" height="426" loading="lazy"><figcaption>L'Architettura Client-Server di NFS (basato sull'originale da <a href="https://www.ibm.com/developerworks/library/l-network-filesystems/">www.ibm.com</a></figcaption></figure><p>Molti amministratori di sistema montano le directory home degli utenti remoti su un server per consentire loro di accedere agli stessi file e file di configurazione su più sistemi client. Ciò consente agli utenti di accedere da computer diversi, pur avendo ancora accesso agli stessi file e risorse.</p><p>Il più comune di questi filesystem è chiamato semplicemente <a href="https://it.wikipedia.org/wiki/Network_File_System"><strong><code>NFS</code></strong></a> (<strong>N</strong>etwork <strong>F</strong>ile <strong>S</strong>ystem). Ha una storia molto lunga ed è stato sviluppato per la prima volta da Sun Microsystems. Un'altra implementazione comune è <strong>CIFS</strong> (anche chiamato <strong>SAMBA</strong>), che ha radici Microsoft. Limiteremo la nostra attenzione nelle sezioni seguenti a NFS.</p><h3 id="nfs-sul-server">NFS sul Server</h3><p>Ora esamineremo in dettaglio come utilizzare NFS sul server.</p><p>Sulla macchina server, NFS utilizza <strong>demoni</strong> (processi integrati di rete e servizio in Linux) e altri server di sistema che vengono avviati nella riga di comando digitando:</p><p><strong><code>$ sudo systemctl start nfs</code></strong></p><p><strong>NOTA</strong>: <em>Su RHEL/CentOS 8 il servizio è chiamato <strong>nfs-server</strong>, non <strong>nfs</strong>.</em></p><p>Il file di testo <strong><code>/etc/exports</code></strong> contiene le directory e le autorizzazioni che un host desidera condividere con altri sistemi su NFS. Una voce molto semplice in questo file potrebbe essere la seguente:</p><p><strong><code>/projects *.example.com(rw)</code></strong></p><p>Questa voce consente alla directory <strong><code>/projects</code></strong> di essere montata usando NFS con permessi di letttura e scrittura (<strong>rw</strong>) e condivisa con altri host nel dominio <strong>example.com</strong>. Come descriveremo in dettaglio nel prossimo capitolo, ogni file in Linux ha tre possibili permessi: lettura (<strong>r</strong>), scrittura (<strong>w</strong>) ed esecuzione (<strong>x</strong>).</p><p>Dopo la modifica del file <strong><code>/etc/exports</code></strong> puoi digitare <strong><code>exportfs -av</code></strong> per avvisare Linux delle directory che si consente che siano montate in remoto usando NFS. Puoi anche riavviare NFS con <strong><code>sudo systemctl restart nfs</code></strong>, ma questo è più pesante, in quanto interrompe NFS per un po' prima di riavviarlo. Per assicurarsi che il servizio NFS sia attivato ogni volta che il sistema viene avviato, esegui <strong><code>sudo systemctl enable nfs</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/exportsnfs.png" class="kg-image" alt="exportsnfs" width="575" height="333" loading="lazy"><figcaption>NFS sul Server</figcaption></figure><h3 id="nfs-sul-client">NFS sul Client</h3><p>Sulla macchina client, se si desidera che il filesystem remoto venga montato automaticamente al momento dell'avvio del sistema, occorre modificare <strong><code>/etc/fstab</code></strong> per raggiungere questo obiettivo. Ad esempio, una voce nel client del file <strong><code>/etc/fstab</code></strong> potrebbe essere come la seguente:</p><p><strong><code>nomeserver:/projects /mnt/nfs/projects nfs defaults 0 0</code></strong></p><p>È inoltre possibile montare il filesystem remoto senza un riavvio o come supporto una tantum utilizzando direttamente il comando <strong>mount</strong>:</p><p><strong><code>$ sudo mount nomeserver:/projects /mnt/nfs/projects</code></strong></p><p>Ricorda, se <strong><code>/etc/fstab</code></strong> non è modificato, il montaggio di questo supporto remoto non avverrà la prossima volta che sarà riavviato il sistema. Inoltre, potresti voler usare l'opzione <strong>nofail</strong> &nbsp;in <strong>fstab</strong> Nel caso in cui il server NFS non sia disponibile all'avvio.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/80a14e19e05a9cfdc8b19f09d20e8e07/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/nfsclientubuntu.png" class="kg-image" alt="NFS on the Client" width="802" height="600" loading="lazy"><figcaption>NFS sul Client</figcaption></figure><h3 id="panoramica-delle-directory-nella-home-utente">Panoramica delle Directory nella Home Utente</h3><p>In questa sezione, imparerai a identificare e distinguere tra le directory più importanti che si trovano in Linux. Iniziamo con lo spazio della directory home degli utenti ordinari.</p><p>Ogni utente ha una directory home, di solito posizionata sotto <strong><code>/home</code></strong>. La directory <strong><code>/root</code></strong> sui moderni sistemi Linux non è altro che la directory home dell'utente root (o superutente o account amministratore di sistema).</p><p>Sui sistemi multiutente, l'infrastruttura della directory <strong><code>/home</code></strong> è spesso montata come filesystem separato nella sua propria partizione, oppure esportata (condivisa) in remoto su una rete tramite NFS.</p><p>A volte, puoi raggruppare gli utenti in base al loro settore o funzione. È quindi possibile creare sotto-directory nella directory <strong><code>/home</code></strong> per ciascuno di questi gruppi. Per esempio una scuola potrebbe organizzare la directory &nbsp;<strong><code>/home</code></strong> in questo modo:</p><p><strong><code>/home/faculty/</code></strong><br><strong><code>/home/staff/</code></strong><br><strong><code>/home/students/</code></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/Home_directories.png" class="kg-image" alt="Home_directories" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/Home_directories.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/Home_directories.png 770w" sizes="(min-width: 720px) 720px" width="770" height="743" loading="lazy"><figcaption>Directory in Home</figcaption></figure><h3 id="le-directory-bin-e-sbin">Le Directory /bin e /sbin</h3><p>La directory <strong><code>/bin</code></strong> contiene binari eseguibili, comandi essenziali utilizzati per avviare il sistema o in modalità utente singolo e comandi essenziali richiesti da tutti gli utenti del sistema, come <strong>cat</strong>, <strong>cp</strong>, <strong>ls</strong>, <strong>mv</strong>, <strong>ps</strong>, e <strong>rm</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/lsbin.png" class="kg-image" alt="lsbin" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/lsbin.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/lsbin.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/lsbin.png 1036w" sizes="(min-width: 720px) 720px" width="1036" height="748" loading="lazy"><figcaption>Directory /bin</figcaption></figure><p>Alla stessa stregua, la directory <strong><code>/sbin</code></strong> è destinata a binari essenziali relativi all'amministrazione del sistema, come <strong>fsck</strong> e <strong>ip</strong>. Per visualizzare un elenco di questi programmi, digita:</p><p><strong><code>$ ls /bin /sbin</code></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/lssbin.png" class="kg-image" alt="lssbin" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/lssbin.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/lssbin.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/lssbin.png 1036w" sizes="(min-width: 720px) 720px" width="1036" height="748" loading="lazy"><figcaption>Directory /sbin</figcaption></figure><p>I comandi non essenziali (teoricamente) per l'avvio del sistema o che operino in modalità utente singolo sono posizionati nelle directory <strong><code>/usr/bin</code></strong> e <strong><code>/usr/sbin</code></strong>. Storicamente, questo è stato fatto in modo che <strong><code>/usr</code></strong> possa essere montata come filesystem separato, eventualmente in una fase successiva all'avvio del sistema o anche su una rete. Tuttavia, al giorno d'oggi la maggioranza trova questa distinzione obsoleta. In effetti, è stato scoperto che molte distribuzioni sono incapaci di avviarsi con questa separazione, poiché questa modalità non era stata utilizzata o testata per molto tempo.</p><p>Quindi, su alcune delle più recenti distribuzioni Linux <strong><code>/usr/bin</code></strong> e <strong><code>/bin</code></strong> sono in realtà unite insieme con link simbolici, così come <strong><code>/usr/sbin</code></strong> e <strong><code>/sbin</code></strong>.</p><h3 id="il-filesystem-proc">Il Filesystem /proc</h3><p>Alcuni filesystem, come quello montato su <strong><code>/proc</code></strong>, sono chiamati <strong>pseudo-filesystem</strong> perché non hanno una presenza permanente da nessuna parte sul disco.</p><p>Il filesystem <strong><code>/proc</code></strong> contiene file virtuali (file che esistono solo in memoria) che consentono di visualizzare la modifica dei dati del kernel in costante evoluzione. <strong><code>/proc</code></strong> contiene file e directory che imitano le strutture del kernel e le informazioni di configurazione. Non contiene file reali, ma informazioni sul sistema in esecuzione, ad esempio memoria di sistema, dispositivi montati, configurazione hardware, e così via. Alcune voci importanti in <strong><code>/proc</code></strong> sono:</p><p><strong><code>/proc/cpuinfo</code></strong><br><strong><code>/proc/interrupts</code></strong><br><strong><code>/proc/meminfo</code></strong><br><strong><code>/proc/mounts</code></strong><br><strong><code>/proc/partitions</code></strong><br><strong><code>/proc/version</code></strong></p><p>Anche <strong><code>/proc</code></strong> ha delle sotto-directory, tra le quali:</p><p><strong><code>/proc/&lt;Process-ID-#&gt;</code></strong><br><strong><code>/proc/sys</code></strong></p><p>La videata qui sotto mostra che esiste una directory per ogni processo in esecuzione sul sistema, che contiene informazioni vitali al riguardo. Inoltre mostra una directory virtuale che contiene molte informazioni sull'intero sistema, in particolare il suo hardware e la sua configurazione. Il filesystem <strong><code>/proc</code></strong> è molto utile perché le informazioni che riporta sono raccolte solo se necessario e non ha mai bisogno di spazio di archiviazione sul disco.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/lsproc.png" class="kg-image" alt="lsproc" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/lsproc.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/lsproc.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/lsproc.png 1038w" sizes="(min-width: 720px) 720px" width="1038" height="761" loading="lazy"><figcaption>Il Filesystem /proc</figcaption></figure><h3 id="la-directory-dev">La Directory /dev</h3><p>La directory &nbsp;<strong><code>/dev</code></strong> contiene i &nbsp;<strong>nodi di dispositivo</strong>, un tipo di pseudo-file utilizzato dalla maggior parte dei dispositivi hardware e software, ad eccezione dei dispositivi di rete. Questa directory è:</p><ul><li>Vuota sulla partizione del disco quando non è montata</li><li>Contiene voci che sono create dal sistema <strong>udev</strong>, che crea e gestisce i nodi di dispositivo su Linux, creandoli dinamicamente quando i dispositivi vengono trovati. La directory <strong><code>/dev</code></strong> contiene elementi come:</li></ul><ol><li><strong><code>/dev/sda1</code></strong> (prima partizione sul primo disco rigido)</li><li><strong><code>/dev/lp1</code></strong> (seconda stampante)</li><li><strong><code>/dev/random</code></strong> (una fonte di numeri casuali).</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/lsdev.png" class="kg-image" alt="lsdev" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/lsdev.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/lsdev.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/lsdev.png 1185w" sizes="(min-width: 720px) 720px" width="1185" height="428" loading="lazy"><figcaption>La Directory /dev</figcaption></figure><h3 id="la-directory-var">La Directory /var</h3><p>La Directory <strong><code>/var</code></strong> contiene file che ci si attende cambino in dimensioni e contenuti man mano che il sistema è in esecuzione (var sta per variabile), come le voci nelle seguenti directory:</p><ul><li>File di log di sistema: <strong><code>/var/log</code></strong></li><li>File di pacchetti e database: <strong><code>/var/lib</code></strong></li><li>Code di stampa: <strong><code>/var/spool</code></strong></li><li>File temporanei: <strong><code>/var/tmp</code></strong>.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/lsvar.png" class="kg-image" alt="lsvar" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/lsvar.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/lsvar.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/lsvar.png 1450w" sizes="(min-width: 720px) 720px" width="1450" height="1106" loading="lazy"><figcaption>La Directory /var</figcaption></figure><p>La Directory <strong><code>/var</code></strong> può essere inserita sul proprio filesystem in modo che la crescita dei file possa essere adattata e qualsiasi dimensione e che nessun forte aumento improvviso della dimensione dei file influisca fatalmente nel sistema. Anche le directory dei servizi di rete come <strong><code>/var/ftp</code></strong> (il servizio FTP) e <strong><code>/var/www</code></strong> (il servizio web HTTP) si trovano in <strong><code>/var</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/varfolders.png" class="kg-image" alt="varfolders" width="361" height="324" loading="lazy"><figcaption>La Directory /var</figcaption></figure><h3 id="la-directory-etc">La Directory /etc</h3><p>La Directory &nbsp;<strong><code>/etc</code></strong> è la home per i file di configurazione del sistema. Non contiene programmi binari, sebbene ci siano alcuni script eseguibili. Per esempio, <strong><code>/etc/resolv.conf</code></strong> dice al sistema dove andare sulla rete per ottenere il nome host dalla mappatura degli indirizzi IP (DNS). File come <strong><code>passwd</code></strong>, <strong><code>shadow</code></strong> e <strong><code>group</code></strong> per gestire gli account utenti si trovano nella directory <strong><code>/etc</code></strong>. Mentre alcune distribuzioni hanno storicamente avuto un'ampia infrastruttura propria sotto <strong><code>/etc</code></strong> (per esempio, Red Hat e SUSE hanno usato <strong><code>/etc/sysconfig</code></strong>), con l'avvento di <strong>systemd</strong> c'è molta più uniformità tra le distribuzioni oggi.</p><p>Nota che <strong><code>/etc</code></strong> è per i file di configurazione a livello di sistema e solo il superutente può modificare i file lì. I file di configurazione specifici dell'utente si trovano sempre nella sua home directory.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/debianetc.png" class="kg-image" alt="debianetc" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/debianetc.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/debianetc.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/debianetc.png 1251w" sizes="(min-width: 720px) 720px" width="1251" height="785" loading="lazy"><figcaption>La Directory /etc</figcaption></figure><h3 id="la-directory-boot">La Directory /boot</h3><p>La directory <strong><code>/boot</code></strong> contiene i pochi file essenziali necessari per avviare il sistema. Per ogni kernel alternativo installato sul sistema ci sono quattro file:</p><ol><li><strong><code>vmlinuz</code></strong><br>Il kernel Linux compresso, richiesto per l'avvio.</li><li><strong><code>initramfs</code></strong><br>Il filesystem ram iniziale, richiesto per l'avvio, talvolta chiamato <code>initrd</code>, non <code>initramfs</code>.</li><li><strong><code>config</code></strong><br>Il file di configurazione del kernel, usato solo per debug e tracciatura.</li><li><strong><code>System.map</code></strong><br>Tabella dei simboli del kernel, usata solo per debug.</li></ol><p>Ognuno di questi file ha una versione del kernel aggiunta al suo nome.</p><p>Anche i file di <a href="https://it.wikipedia.org/wiki/GNU_GRUB">GRUB</a> (Grand Unified Bootloader) come <strong><code>/boot/grub/grub.conf</code></strong> o <strong><code>/boot/grub2/grub2.cfg</code></strong> si trovano nella directory <strong><code>/boot</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/bootdir.png" class="kg-image" alt="bootdir" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/bootdir.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/bootdir.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/bootdir.png 1036w" sizes="(min-width: 720px) 720px" width="1036" height="669" loading="lazy"><figcaption>La Directory /boot</figcaption></figure><p>Questa videata mostra un esempio del contenuto della directory <strong>/boot</strong>, preso da un sistema RHEL che ha più kernel installati. I nomi cambiano e le cose tendono a essere leggermente diverse in base alla distribuzione.</p><h3 id="le-directory-lib-e-lib64">Le Directory /lib e /lib64</h3><p><strong><code>/lib</code></strong> contiene librerie (codice comune condiviso dalle applicazioni e necessario per la loro esecuzione) per i programmi essenziali in <strong><code>/bin</code></strong> e <strong><code>/sbin</code></strong>. Questi nomi di file di libreria iniziano per <strong>ld</strong> o <strong>lib</strong>. Per esempio, <strong><code>/lib/libncurses.so.5.9</code></strong>.</p><p>La maggior parte di questi sono ciò che è noto come librerie caricate dinamicamente (dette anche librerie condivise o oggetti condivisi - SO - shared objects). Su alcune distribuzioni Linux esiste una directory <strong><code>/lib64</code></strong> contenente librerie a 64 bit, mentre <strong><code>/lib</code></strong> contiene versioni a 32 bit.</p><p>Su recenti distribuzioni Linux, si possono trovare:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/lslib.png" class="kg-image" alt="lslib" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/lslib.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/lslib.png 624w" width="624" height="105" loading="lazy"><figcaption>Le Directory /lib e /lib64</figcaption></figure><p>cioè, proprio come per <strong><code>/bin</code></strong> e <strong><code>/sbin</code></strong>, le directory puntano solo a quelle sotto <strong><code>/usr</code></strong>.</p><p>I moduli del kernel (codice kernel, spesso driver di dispositivi, che possono essere caricati e scaricati senza riavviare il sistema) si trovano in <strong><code>/lib/modules/&lt;numero-versione-kernel&gt;</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/libmodules.png" class="kg-image" alt="libmodules" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/libmodules.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/libmodules.png 706w" width="706" height="348" loading="lazy"><figcaption>Contenuto di /lib/modules</figcaption></figure><h3 id="media-rimuovibili-le-directory-media-run-e-mnt">Media rimuovibili: le Directory /media, /run e /mnt</h3><p>Si utilizzano spesso media rimovibili, come unità USB, CD e DVD. Per rendere il materiale accessibile tramite il normale filesystem, devono essere montati in una posizione comoda. La maggior parte dei sistemi Linux sono configurati in modo che qualsiasi supporto rimovibile venga montato automaticamente quando il sistema rileva che qualcosa è stato collegato.</p><p>Sebbene storicamente questo sia stato fatto sotto la directory <strong><code>/media</code></strong>, le moderne distribuzioni Linux collocano questi punti di montaggio sotto la directory <strong><code>/run</code></strong>. Per esempio una chiave USB con etichetta <strong>myusbdrive</strong> per un utente con username <strong>student</strong> sarebbe montata sotto <strong><code>/run/media/student/myusbdrive</code></strong>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/Forty_years_of_Removable_Storage.jpg" class="kg-image" alt="Forty_years_of_Removable_Storage" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/Forty_years_of_Removable_Storage.jpg 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/Forty_years_of_Removable_Storage.jpg 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/Forty_years_of_Removable_Storage.jpg 1200w" sizes="(min-width: 720px) 720px" width="1200" height="800" loading="lazy"></figure><p>La directory <strong><code>/mnt</code></strong> è stata utilizzata sin dai primi giorni di UNIX per il montaggio temporaneo di filesystem. Possono essere quelli su media rimovibili, ma più spesso potrebbero essere filesystem di rete, che normalmente non sono montati. Oppure possono essere partizioni temporanee, o cosiddetti filesystem di <strong>loopback</strong>, che sono file che fingono di essere partizioni.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/lsrun.png" class="kg-image" alt="lsrun" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/lsrun.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/lsrun.png 1000w, https://www.freecodecamp.org/italian/news/content/images/size/w1600/2023/03/lsrun.png 1600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/lsrun.png 1670w" sizes="(min-width: 720px) 720px" width="1670" height="770" loading="lazy"><figcaption>La Directory /run</figcaption></figure><h3 id="ulteriori-directory-sotto-">Ulteriori Directory sotto /</h3><p>Ci sono alcune directory aggiuntive che si trovano nella directory radice:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Nome Directory</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>/opt</code></strong></td>
<td>Pacchetti software di appilicazioni opzionali</td>
</tr>
<tr>
<td><strong><code>/sys</code></strong></td>
<td>Peudo-filesystem virtuali che forniscono informazioni sul sistema e l'hardware<br>Possono essere usati per alterare i parametri di sistema per scopi di debug</td>
</tr>
<tr>
<td><strong><code>/srv</code></strong></td>
<td>Dati specifici al sito serviti dal sistema<br>Raramente usata</td>
</tr>
<tr>
<td><strong><code>/tmp</code></strong></td>
<td>File temporanei; su alcune distribuzioni vengono eliminati durante i riavvi e/oppure potrebbe in realtà essere un disco ram in memoria</td>
</tr>
<tr>
<td><strong><code>/usr</code></strong></td>
<td>Applicazioni multi utente, utility e dati</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="l-albero-di-directory-usr">L'Albero di Directory /usr</h3><p>L'albero di directory <strong><code>/usr</code></strong> contiene programmi e script teoricamente non essenziali (nel senso che non dovrebbero essere necessari per avviare inizialmente il sistema) e ha almeno le seguenti sotto-directory:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Nome Directory</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>/usr/include</code></strong></td>
<td>File di intestazione usati per compilare le applicazioni</td>
</tr>
<tr>
<td><strong><code>/usr/lib</code></strong></td>
<td>Librerie per programmi in <strong><code>/usr/bin</code></strong> e <strong><code>/usr/sbin</code></strong></td>
</tr>
<tr>
<td><strong><code>/usr/lib64</code></strong></td>
<td>Librerie a 64-bit per programmi a 64-bit in <strong><code>/usr/bin</code></strong> e <strong><code>/usr/sbin</code></strong></td>
</tr>
<tr>
<td><strong><code>/usr/sbin</code></strong></td>
<td>Binari non essenziali al sistema, come i demoni di sistema</td>
</tr>
<tr>
<td><strong><code>/usr/share</code></strong></td>
<td>Dati condivisi usati dalle applicazioni, generalmente indipendenti dall'architettura</td>
</tr>
<tr>
<td><strong><code>/usr/src</code></strong></td>
<td>Codice sorgente, in genere per il kernel Linux</td>
</tr>
<tr>
<td><strong><code>/usr/local</code></strong></td>
<td>Dati e programmi specifici alla macchina locale; le sotto directory includono&nbsp;<strong><code>bin</code></strong>,&nbsp;<strong><code>sbin</code></strong>,&nbsp;<strong><code>lib</code></strong>,&nbsp;<strong><code>share</code></strong>,&nbsp;<strong><code>include</code></strong>, ecc.</td>
</tr>
<tr>
<td><strong><code>/usr/bin</code></strong></td>
<td>Questa è la directory principale per i comandi eseguibili sul sistema</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="confrontare-file-con-diff">Confrontare File con diff</h3><p>Ora che conosci il filesystem e la sua struttura, apprendiamo come gestire file e directory.</p><p><strong>diff</strong> viene utilizzato per confrontare file e directory. Questa utility usata frequentemente ha molte opzioni utili (vedi: <strong><code>man diff</code></strong>) tra cui:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Opzione diff</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>-c</strong></td>
<td>Fornisce un elenco di differenze che includono tre righe di contesto prima e dopo le righe che differiscono nel contenuto</td>
</tr>
<tr>
<td><strong>-r</strong></td>
<td>Utilizzato per confrontare ricorsivamente le sotto-directory, nonché la directory corrente</td>
</tr>
<tr>
<td><strong>-i</strong></td>
<td>Ignora differenze tra lettere maiuscole/minuscole</td>
</tr>
<tr>
<td><strong>-w</strong></td>
<td>Ignora differenze tra spazi e tabulazioni</td>
</tr>
<tr>
<td><strong>-q</strong></td>
<td>Modalità silenziosa: segnala solo se i file sono diversi senza elencare le differenze</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Per confrontare due file, al prompt dei comandi, digita <strong><code>diff [opzioni] &lt;nomefile1&gt; &lt;nomefile&gt;</code></strong>. <strong>diff</strong> è pensata per essere utilizzata per i file di testo; per i file binari, si può usare <strong>cmp</strong>.</p><p>In questa sezione, imparerai metodi aggiuntivi per confrontare e come applicare patch ai file.</p><h4 id="usare-diff3-e-patch">Usare diff3 e patch</h4><p>Puoi confrontare tre file contemporaneamente utilizzando <strong>diff3</strong>, che utilizza un file come base di riferimento per gli altri due. Ad esempio, supponiamo che tu e un collega abbiate entrambi apportato modifiche allo stesso file contemporaneamente in modo indipendente. <strong>diff3</strong> può mostrare le differenze in base al file comune dal quale entrambi avete iniziato. La sintassi per <strong>diff3</strong> è la seguente:</p><p><strong><code>$ diff3 mio-file file-comune altro-file</code></strong></p><p>La videata mostra l'uso di <strong>diff3</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/diff3centos.png" class="kg-image" alt="diff3centos" width="395" height="371" loading="lazy"><figcaption>Usare diff3</figcaption></figure><p>Molte modifiche al codice sorgente e ai file di configurazione sono distribuite utilizzando <a href="https://it.wikipedia.org/wiki/Patch">patch</a>, che vengono applicate, non sorprendentemente, con il programma <strong>patch</strong>. Un file patch contiene il delta (le modifiche) richieste per aggiornare una vecchia versione di un file con una nuova. I file patch sono effettivamente prodotti eseguendo <strong>diff</strong> con le opzioni corrette, in questo modo:</p><p><strong><code>$ diff -Nur fileoriginale nuovofile &gt; filepatch</code></strong></p><p>Distribuire solo il file patch è più conciso ed efficiente della distribuzione dell'intero file. Ad esempio, se è necessario cambiare solo una riga in un file che contiene 1000 righe, il file patch conterrà solo poche righe.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/patchrhel.png" class="kg-image" alt="patchrhel" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/patchrhel.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/patchrhel.png 715w" width="715" height="162" loading="lazy"><figcaption>Usare patch</figcaption></figure><p>Per applicare patch, puoi semplicemente utilizzare uno dei due metodi di seguito:</p><p><strong><code>$ patch -p1 &lt; filepatch</code></strong><br><strong><code>$ patch fileoriginale filepatch</code></strong></p><p>Il primo utilizzo è il più comune, in quanto viene spesso adottato per applicare le modifiche a un intero albero di directory, piuttosto che un solo file, come nel secondo esempio. Per capire l'uso dell'opzione <strong><code>-p1</code></strong> e molte altre, consulta la pagina di manuale per <strong>patch</strong>.</p><h3 id="usare-l-utility-file">Usare l'Utility file</h3><p>In Linux, l'estensione di un file spesso non lo classifica come potrebbe in altri sistemi operativi. Non si può presumere che un file denominato <strong>file.txt</strong> sia un file di testo e non un programma eseguibile. In Linux, un nome file è generalmente più significativo per l'utente del sistema rispetto al sistema stesso. In effetti, la maggior parte delle applicazioni esamina direttamente il contenuto di un file per vedere che tipo di oggetto è piuttosto che fare affidamento su un'estensione. Questo è molto diverso dal modo in cui Windows gestisce i nomi file, in cui un nome di file che termina con <strong><code>.exe</code></strong>, ad esempio, rappresenta un file binario eseguibile.</p><p>La vera natura di un file può essere accertata usando l'utility <strong>file</strong>. Per i nomi dei file forniti come argomenti, esamina il contenuto e alcune caratteristiche per determinare se i file sono testo normale, librerie condivise, programmi eseguibili, script o qualcos'altro.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/fileu1910.png" class="kg-image" alt="fileu1910" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/fileu1910.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/fileu1910.png 1000w, https://www.freecodecamp.org/italian/news/content/images/size/w1600/2023/03/fileu1910.png 1600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/fileu1910.png 1620w" sizes="(min-width: 720px) 720px" width="1620" height="746" loading="lazy"><figcaption>Usare l'utility file</figcaption></figure><h3 id="effettuare-backup-copie-dei-dati">Effettuare Backup (Copie) dei Dati</h3><p>Esistono molti modi in cui è possibile eseguire il backup dei dati o persino dell'intero sistema. I modi di base per farlo includono l'uso di una semplice copia con <strong>cp</strong> e l'uso del più robusto <strong>rsync</strong>.</p><p>Entrambi possono essere usati per sincronizzare interi alberi di directory. Tuttavia, <strong>rsync</strong> è più efficiente, perché controlla se il file che viene copiato esiste già. Se il file esiste e non vi è alcuna modifica delle dimensioni o del tempo di modifica, <strong>rsync</strong> eviterà una copia non necessaria e risparmierà tempo. Inoltre, poiché <strong>rsync</strong> copia solo le parti dei file che sono effettivamente cambiate, può essere molto veloce.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch08_screen34.jpg" class="kg-image" alt="LFS01_ch08_screen34" width="330" height="237" loading="lazy"></figure><p><strong>cp</strong> può copiare solo file da e verso destinazioni sulla macchina locale (a meno che non si stia copiando da o verso un filesystem montato utilizzando NFS), ma <strong>rsync</strong> Può anche essere utilizzato per copiare i file da una macchina all'altra. Le posizioni sono indicate nel formato <strong>destinazione:percorso</strong>, dove <strong>destinazione</strong> può essere sotto forma di <strong>qualcuno@host</strong>. La parte <strong>qualcuno@</strong> è facoltativa e utilizzata se l'utente remoto è diverso dall'utente locale.</p><p><strong>rsync</strong> è molto efficiente quando si copia ricorsivamente un albero di directory su un altro, perché solo le differenze vengono trasmesse sulla rete. Spesso si sincronizza l'albero della directory di destinazione con l'origine, usando l'opzione <strong>-r</strong> per scorrere in modo ricorsivo l'albero della directory copiando tutti i file e le directory sotto quello elencato come sorgente.</p><figure class="kg-card kg-image-card"><img src="https://courses.edx.org/assets/courseware/v1/b466cf17ce5d978de488e7f13989c686/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch08_screen35.jpg" class="kg-image" alt="Keyboard key saying Backup" width="330" height="220" loading="lazy"></figure><p>Per usare <strong>rsync</strong> al prompt dei comandi, digita <strong><code>rsync filesorgente filedestinazione</code></strong>, dove ognuno dei due file può essere sulla macchina locale o su una macchina in rete; il contenuto di <strong>filesorgente</strong> sarà copiato in <strong>filedestinazione</strong>.</p><p>Di seguito una buona combinazione di opzioni:</p><p><strong><code>$ rsync --progress -avrxH &nbsp;--delete directorysorgente directorydestinazione</code></strong></p><p>I dati dei file vengono spesso compressi per salvare lo spazio su disco e ridurre il tempo necessario per trasmettere file su reti.</p><p>Linux utilizza una serie di metodi per eseguire questa compressione, tra cui:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>gzip</code></strong></td>
<td>L'utility Linux di compressione usata più di frequente</td>
</tr>
<tr>
<td><strong><code>bzip2</code></strong></td>
<td>Genera file significativamente più piccoli di quelli generati da <strong>gzip</strong></td>
</tr>
<tr>
<td><strong><code>xz</code></strong></td>
<td>L'utility di compressione più efficace per quanto riguarda lo spazio usata in Linux</td>
</tr>
<tr>
<td><strong><code>zip</code></strong></td>
<td>Spesso richiesto per esaminare e decomprimere archivi da altri sistemi operativi</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Queste tecniche variano nell'efficienza della compressione (quanto spazio viene salvato) e in quanto tempo impiegano per comprimere i dati; in generale, le tecniche più efficienti richiedono più tempo. Il tempo di decompressione non varia tanto tra i diversi metodi.</p><p>Inoltre, l'utility <strong>tar</strong> viene spesso utilizzata per raggruppare i file in un archivio e quindi comprimere contemporaneamente l'intero archivio.</p><h4 id="comprimere-dati-usando-gzip">Comprimere Dati Usando gzip</h4><p><strong>gzip</strong> è l'utilità di compressione Linux più spesso utilizzata. Comprime molto bene ed è molto veloce. La tabella seguente fornisce alcuni esempi di utilizzo:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>gzip *</code></strong></td>
<td>Comprime tutti i file nella directory corrente; ogni file è compresso e rinominato con un estensione <strong><code>.gz</code></strong>.</td>
</tr>
<tr>
<td><strong><code>gzip -r projectX</code></strong></td>
<td>Comprime tutti i file nella directory&nbsp;<strong><code>projectX</code></strong>, insieme a tutti i file in tutte le directory sotto <strong><code>projectX</code></strong>.</td>
</tr>
<tr>
<td><strong><code>gunzip foo</code></strong></td>
<td>Decomprime <strong><code>foo</code></strong> che si trova nel file <strong><code>foo.gz</code></strong>. Sotto il cofano, il comando&nbsp;<strong><code>gunzip</code></strong> equivale a digitare <strong><code>gzip –d</code></strong>.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h4 id="comprimere-dati-usando-xz">Comprimere Dati Usando xz</h4><p><strong><code>xz</code></strong> è l'utility di compressione più efficiente per quanto riguarda lo spazio usata in Linux e viene utilizzata per <a href="https://www.kernel.org/">conservare gli archivi dei kernel Linux</a> (risorsa in inglese). Ancora una volta, scambia una velocità di compressione più lenta per un rapporto di compressione ancora più elevato.</p><p>Alcuni esempi di utilizzo:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>xz *</code></strong></td>
<td>Comprime tutti i file nella directory corrente e sostituisce ciascun file con uno con un'estensione <strong><code>.xz</code></strong>.</td>
</tr>
<tr>
<td><strong><code>xz foo</code></strong></td>
<td>Comprime <strong><code>foo</code></strong> in <strong><code>foo.xz</code></strong> utilizzando il livello di compressione predefinito (-6),e rimuove <strong><code>foo</code></strong> se la compressione ha successo.</td>
</tr>
<tr>
<td><strong><code>xz -dk bar.xz</code></strong></td>
<td>Decomprime <strong><code>bar.xz</code></strong> in&nbsp;<strong><code>bar</code></strong>&nbsp;e non elimina <strong><code>bar.xz</code></strong> anche se la decompressione ha successo.</td>
</tr>
<tr>
<td><strong><code>xz -dcf a.txt b.txt.xz &gt; abcd.txt</code></strong></td>
<td>Decomprime un misto di file compressi e decompressi verso l'output standard, usando un singolo comando.</td>
</tr>
<tr>
<td><strong><code>xz -d *.xz</code></strong></td>
<td>Decomprime i file compressi usando <strong>xz</strong>.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>I file compressi sono salvati con una estensione <strong>.xz</strong>.</p><h4 id="gestire-file-usando-zip">Gestire File Usando zip</h4><p>Il programma <strong>zip</strong> non viene spesso usato per comprimere i file in Linux, ma spesso è necessario esaminare e decomprimere gli archivi da altri sistemi operativi. Viene utilizzato in Linux solo quando si ottiene un file compresso con estensione <code>.zip</code> da un utente di Windows. È un programma legacy.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>zip backup *</code></strong></td>
<td>Comprime tutti i file nella directory corrente e li colloca in <strong><code>backup.zip</code></strong>.</td>
</tr>
<tr>
<td><strong><code>zip -r backup.zip ~</code></strong></td>
<td>Archivia la tua directory home (<strong>~</strong>) e tutti i file e directory sotto di essa in <strong><code>backup.zip</code></strong>.</td>
</tr>
<tr>
<td><strong><code>unzip backup.zip</code></strong></td>
<td>Estrae tutti i file in&nbsp;<strong>backup.zip</strong> e li piazza nella directory corrente.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h4 id="archiviare-e-comprimere-dati-usando-tar">Archiviare e Comprimere Dati Usando tar</h4><p>Storicamente, <strong>tar</strong>, che sta per "<strong>t</strong>ape <strong>ar</strong>chive" (archivio su nastro), era usato per archiviare i file su un nastro magnetico. Ti consente di creare o estrarre file da un file di archivio, spesso chiamato <strong>tarball</strong>. Allo stesso tempo, è possibile comprimere facoltativamente mentre crei l'archivio e decomprimerlo mentre ne estrai il contenuto.</p><p>Ecco alcuni esempi dell'uso di <strong>tar</strong>:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>tar xvf mydir.tar</code></strong></td>
<td>Estrae tutti i file in <strong>mydir.tar</strong> nella directory <strong><code>mydir</code></strong>.</td>
</tr>
<tr>
<td><strong><code>tar zcvf mydir.tar.gz mydir</code></strong></td>
<td>Crea l'archivio e lo comprime con <strong><code>gzip</code></strong>.</td>
</tr>
<tr>
<td><strong><code>tar jcvf mydir.tar.bz2 mydir</code></strong></td>
<td>Crea l'archivio e lo comprime con <strong><code>bz2</code></strong>.</td>
</tr>
<tr>
<td><strong><code>tar Jcvf mydir.tar.xz mydir</code></strong></td>
<td>Crea l'archivio e lo comprime con <strong><code>xz</code></strong>.</td>
</tr>
<tr>
<td><strong><code>tar xvf mydir.tar.gz</code></strong></td>
<td>Estrae tutti i file in <strong>mydir.tar.gz</strong> nella directory <strong><code>mydir</code></strong>.<br><strong>NOTA</strong>: <em>Non devi dire a <strong><code>tar</code></strong> che è in formato <strong><code>gzip</code></strong>.</em></td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Puoi separare le fasi di archiviazione e compressione, ad esempio:</p><p><strong><code>$ tar cvf mydir.tar mydir ; gzip mydir.tar</code></strong><br><strong><code>$ gunzip mydir.tar.gz ; tar xvf mydir.tar</code></strong></p><p>tuttavia questo è più lento e spreca spazio creando un file <strong>.tar</strong> intermedio non necessario.</p><h4 id="tempi-e-dimensioni-di-compressione-relativi">Tempi e Dimensioni di Compressione Relativi</h4><p>Per dimostrare la diversa efficienza di <strong><code>gzip</code></strong>, <strong><code>bzip2</code></strong>, e <strong><code>xz</code></strong>, la seguente videata mostra i risultati della compressione di un albero di una directory di file di testo puri (la directory <strong><code>include</code></strong> dalle sorgenti del kernel) usando i tre metodi.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/72c55fb093021786337d84cd0a081993/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/tartimes.png" class="kg-image" alt="Relative Compression Times and Sizes" width="764" height="447" loading="lazy"><figcaption>Tempi e Dimensioni di Compressione Relativi</figcaption></figure><p>Ciò dimostra che quando i fattori di compressione aumentano, anche il tempo della CPU aumenta (ovvero la produzione di archivi più piccoli richiede più tempo).</p><h4 id="copia-da-disco-a-disco-dd-">Copia da Disco a Disco (dd)</h4><p>Il programma <strong>dd</strong> è molto utile per creare copie di spazio grezzo del disco. Per esempio, per fare una copia del tuo Master Boot Record (MBR) (il primo settore di 512 byte sul disco che contiene una tabella che descrive la partizione su quel disco) dovresti digitare:</p><p><strong><code>dd if=/dev/sda of=sda.mbr bs=512 count=1</code></strong></p><p><strong>ATTENZIONE!</strong></p><p>Il comando:</p><p><strong><code>dd if=/dev/sda of=/dev/sdb</code></strong></p><p>per fare una copia di un disco in un altro, eliminerà qualsiasi cosa sia precedentemente esistita sul secondo disco.</p><p>Una copia esatta del primo dispositivo disco viene creata sul secondo dispositivo disco.</p><p><strong>Non sperimentare questo comando come scritto sopra, in quanto può cancellare un disco rigido!</strong></p><p>Cosa significhi esattamente <strong><code>dd</code></strong> è un argomento spesso dibattuto. La frase "data definition" (definizione dati) è la teoria più popolare, e ha radici nella storia recente di IBM. Spesso la gente scherzando, dice che significa "disk destroyer" (distruttore di disco) oppure altre varianti come "delete data" (cancella dati)!</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/6ed7efb57f544c1bbac9baf55f75e535/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/LFS01_ch08_screen_41.jpg" class="kg-image" alt="Disk-to-Disk Copying (dd)" width="344" height="132" loading="lazy"><figcaption>Copia da Disco a Disco (dd)</figcaption></figure><h3 id="riepilogo-del-capitolo-3">Riepilogo del Capitolo</h3><p>Hai completato il capitolo 10. Riassumiamo i concetti chiave trattati:</p><ul><li>L'albero del filesystem inizia da quella che viene spesso chiamata directory di root (o tronco o <strong><code>/</code></strong>).</li><li>La Gerarchia Standard del Filesystem (FHS) fornisce agli sviluppatori e agli amministratori di sistema Linux una struttura di directory standard per il filesystem.</li><li>Le partizioni aiutano a separare i file in base all'utilizzo, alla proprietà e al tipo.</li><li>I filesystem possono essere montati ovunque sull'albero principale del filesystem in un punto di montaggio. Il montaggio automatico del filesystem può essere impostato mediante modifica di <strong><code>/etc/fstab</code></strong>.</li><li>NFS (Network File System) è un metodo utile per condividere file e dati attraverso sistemi di rete.</li><li>Filesystem come <strong><code>/proc</code></strong> sono chiamati pseudo-filesystem perché esistono solo in memoria.</li><li><strong><code>/root</code></strong> (slash-root) è la directory home per l'utente root.</li><li><strong><code>/var</code></strong> potrebbe essere inserita nel suo proprio filesystem in modo che la crescita dei file all'interno possa essere contenuta e non influisca fatalmente al sistema.</li><li><strong><code>/boot</code></strong> contiene i file di base necessari per avviare il sistema.</li><li><strong>patch</strong> è uno strumento molto utile in Linux. Molte modifiche al codice sorgente e ai file di configurazione sono distribuite con file di patch, poiché contengono i delta, o modifiche, per passare da una vecchia versione di un file alla nuova versione.</li><li>Le estensioni dei file in Linux non significano necessariamente che un file sia di un certo tipo.</li><li><strong>cp</strong> viene utilizzato per copiare i file sulla macchina locale, mentre <strong>rsync</strong> può anche essere utilizzato per copiare i file da una macchina all'altra, nonché sincronizzare i contenuti.</li><li><strong>gzip</strong>, <strong>bzip2</strong>, <strong>xz</strong> e <strong>zip</strong> vengono utilizzati per comprimere i file.</li><li><strong>tar</strong> ti consente di creare o estrarre file da un archivio, spesso chiamato tarball. È possibile comprimere facoltativamente l'archivio durante la creazione e decomprimerlo durante l'estrazione del suo contenuto.</li><li><strong>dd</strong> può essere usato per realizzare copie esatte di grandi dimensioni, anche di intere partizioni di disco, in modo efficiente.</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_Summary-2.jpg" class="kg-image" alt="LFS01_Summary-2" width="330" height="306" loading="lazy"></figure><h2 id="capitolo-11-editor-di-testo">Capitolo 11: Editor di Testo</h2><h3 id="obiettivi-formativi-7">Obiettivi Formativi</h3><p>Entro la fine di questo capitolo, dovresti avere familiarità con:</p><ul><li>La creazione e la modifica dei file utilizzando gli Editor Linux disponibili.</li><li>nano, un semplice editor basato sul testo.</li><li>gedit, un semplice editor grafico.</li><li>vi ed emacs, due editor avanzati con interfacce sia basate sul testo che grafiche.</li></ul><h3 id="panoramica-degli-editor-di-testo-in-linux">Panoramica degli Editor di Testo in Linux</h3><p>A un certo punto, dovrai modificare manualmente i file di testo. Potresti dover scrivere una email senza connessione a Internet, scrivere uno script da utilizzare per <strong>bash</strong> o altri interpreti di comando, modificare un file di configurazione di sistema o applicazione, oppure sviluppare codice sorgente per un linguaggio di programmazione come C, Python o Java.</p><p>Gli amministratori di Linux possono evitare l'uso di un editor di testo, impiegando invece utilità grafiche per la creazione e la modifica dei file di configurazione del sistema. Tuttavia, questo può essere più laborioso che usare direttamente un editor di testo e più limitante. Nota che le applicazioni di elaborazione testi (comprese quelle che fanno parte delle suite di ufficio) non sono realmente editor di testo di base; aggiungono molte informazioni di formattazione extra (solitamente invisibili) che probabilmente renderebbero i file di configurazione di amministrazione del sistema inutilizzabili per il loro scopo previsto. Quindi, sapere come utilizzare con sicurezza uno o più editor di testo è davvero un'abilità essenziale da avere per Linux.</p><p>Ormai, hai sicuramente capito che Linux è pieno di alternative; quando si tratta di editor di testo, ci sono molte scelte, da abbastanza semplici a molto complesse, tra cui:</p><ul><li>nano</li><li>gedit</li><li>vi</li><li>emacs</li></ul><p>In questa sezione, impariamo prima gli editor nano e gedit, che sono relativamente semplici e facili da apprendere, successivamente passeremo alle scelte più complicate, vi ed emacs. Prima di iniziare, diamo un'occhiata ad alcuni casi in cui un editor non è necessario.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch10_screen03.jpg" class="kg-image" alt="LFS01_ch10_screen03" width="549" height="270" loading="lazy"><figcaption>Gli Editor Testo in Linux</figcaption></figure><h3 id="creare-file-senza-usare-un-editor">Creare File Senza Usare un Editor</h3><p>A volte, potresti voler creare un file breve e non vuoi dover lanciare un editor di testo completo. Inoltre, farlo in questo modo può essere abbastanza utile se utilizzato all'interno degli script, anche quando si creano file più lunghi. Senza dubbio ti ritroverai a usare questo metodo quando inizierai nei capitoli successivi a lavorare con gli script di shell!</p><p>Se si desidera creare un file senza utilizzare un editor, ci sono due modi standard per farlo dalla riga di comando e riempirlo di contenuto.</p><p>Il primo è usare <strong><code>echo</code></strong> ripetutamente:<br><strong>$ echo line one &gt; myfile</strong><br><strong>$ echo line two &gt;&gt; myfile</strong><br><strong>$ echo line three &gt;&gt; myfile</strong></p><p>Nota che un singolo carattere di maggiore (<strong>&gt;</strong>) invia il risultato di un comando a un file, due caratteri (<strong>&gt;&gt;</strong>) aggiungono nuovo contenuto a un file esistente.</p><p>Il secondo modo è usare <strong><code>cat</code></strong> combinato con il reindirizzamento:</p><p><strong><code>$ cat &lt;&lt; EOF &gt; myfile</code></strong><br><strong><code>&gt; line one</code></strong><br><strong><code>&gt; line two</code></strong><br><strong><code>&gt; line three</code></strong><br><strong><code>&gt; EOF</code></strong><br><strong><code>$</code></strong></p><p>Entrambe le tecniche producono un file con le seguenti righe:</p><p><strong>line one</strong><br><strong>line two</strong><br><strong>line three</strong></p><p>e sono estremamente utili se impiegati con gli script.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/echocatubuntu.png" class="kg-image" alt="echocatubuntu" width="472" height="372" loading="lazy"><figcaption>Creare un File senza Usare un Editor</figcaption></figure><h3 id="nano-e-gedit">nano e gedit</h3><p>Ci sono alcuni editor di testo che sono abbastanza facili; per imparare a usarli non necessitano di un'esperienza particolare e in realtà sono abbastanza performanti e anche robusti. Uno particolarmente facile da usare è l'editor basato sul terminale di testo nano. Basta eseguire nano dando un nome file come argomento. Tutto l'aiuto di cui hai bisogno viene visualizzato nella parte inferiore dello schermo e dovresti essere in grado di procedere senza alcun problema.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch10_screen04.jpg" class="kg-image" alt="LFS01_ch10_screen04" width="330" height="242" loading="lazy"></figure><p>Come editor grafico, gedit fa parte del sistema desktop GNOME (kwrite è associato a KDE). Gli editor gedit e kwrite sono molto facili da usare e sono estremamente validi. Sono anche molto configurabili. Assomigliano molto al blocco note di Windows. Altre varianti come kate sono anche supportate da KDE.</p><h4 id="nano">nano</h4><p>Nano è facile da usare e per imparare a usarlo serve pochissimo sforzo. Per aprire un file, digita <strong><code>nano &lt;nomefile&gt;</code></strong> poi <strong><code>Invio</code></strong>. Se il file non esiste, verrà creato.</p><p>nano fornisce una barra di scelta rapida di due righe nella parte inferiore dello schermo che elenca i comandi disponibili. Alcuni di questi comandi sono:</p><ul><li><strong><code>CTRL-G</code></strong><br>Visualizza la schermata di aiuto.</li><li><strong><code>CTRL-O</code></strong><br>Scrive un file.</li><li><strong><code>CTRL-X</code></strong><br>Esce da un file (e dall'editor).</li><li><strong><code>CTRL-R</code></strong><br>Inserisce i contenuti da un altro file al buffer corrente.</li><li><strong><code>CTRL-C</code></strong><br>Mostra la posizione del cursore.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/nano.png" class="kg-image" alt="nano" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/nano.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/nano.png 846w" sizes="(min-width: 720px) 720px" width="846" height="783" loading="lazy"><figcaption>nano</figcaption></figure><h4 id="gedit">gedit</h4><p>gedit (pronunciato 'g-edit') è un editor grafico semplice da usare che può essere eseguito solo all'interno di un ambiente desktop grafico. È visivamente abbastanza simile all'editor di testo Blocco Note in Windows, ma in realtà è molto più capace e molto configurabile e ha una vasta gamma di plugin disponibili per estendere ulteriormente le sue capacità.</p><p>Per aprire un nuovo file trova il programma nel sistema di menu del desktop o dalla riga di comando digita <strong><code>gedit &lt;nomefile&gt;</code></strong>. Se il file non esiste, verrà creato.</p><p>L'uso di gedit è piuttosto semplice e non richiede molto allenamento. La sua interfaccia è composta da elementi abbastanza familiari.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/gedit.png" class="kg-image" alt="gedit" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/gedit.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/gedit.png 809w" sizes="(min-width: 720px) 720px" width="809" height="739" loading="lazy"></figure><h3 id="vi-ed-emacs">vi ed emacs</h3><p>Gli sviluppatori e gli amministratori esperti che lavorano su sistemi tipo UNIX, usano quasi sempre una delle due venerabili opzioni di editing: vi ed emacs. Entrambi sono presenti o facilmente disponibili su tutte le distribuzioni e sono completamente compatibili con le versioni disponibili su altri sistemi operativi.</p><p>Sia vi che emacs hanno una forma di base puramente basata sul testo che può funzionare in un ambiente non grafico. Hanno anche una o più forme di interfaccia grafica con capacità estese; queste possono essere più amichevoli per un utente meno esperto. Mentre vi ed emacs possono avere curve di apprendimento significativamente ripide per i nuovi utenti, sono estremamente efficienti una volta imparato a usarli.</p><p>Devi essere consapevole del fatto che ci sono diatribe tra gli utenti esperti su quale editor sia meglio che possono essere abbastanza intense e sono spesso descritte come una guerra santa.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch10_screen08.jpg" class="kg-image" alt="LFS01_ch10_screen08" width="549" height="270" loading="lazy"><figcaption>Editor Testi in LInux</figcaption></figure><h3 id="introduzione-a-vi">Introduzione a vi</h3><p>Di solito, il programma effettivo installato sul sistema è vim, che sta per VI Migliorato.</p><p>Anche se non si desidera utilizzare vi, è bene acquisire un po' di familiarità con esso; è uno strumento standard installato praticamente su tutte le distribuzioni Linux. In effetti, potrebbero esserci momenti in cui non vi è altro editor disponibile sul sistema.</p><p>GNOME estende vi con un'interfaccia grafica nota come gvim e KDE offre kvim. Ognuno di questi potrebbe essere più facile da usare all'inizio.</p><p>Quando si utilizza vi, tutti i comandi vengono inseriti tramite la tastiera. Non è necessario continuare a muovere le mani per utilizzare un dispositivo di puntamento come un mouse o un touchpad, a meno che tu non lo voglia fare se utilizzi una delle versioni grafiche dell'editor.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/vimubuntu.png" class="kg-image" alt="vimubuntu" width="524" height="317" loading="lazy"></figure><h4 id="vimtutor">vimtutor</h4><p>Digitando <strong>vimtutor</strong> si lancia un tutorial breve ma molto completo per coloro che vogliono imparare i loro primi comandi vi. Anche se fornisce solo un'introduzione e solo sette lezioni, ha abbastanza materiale per renderti un utente vi molto abile, perché tratta un gran numero di comandi. Dopo aver appreso quelli di base, puoi cercare nuovi trucchi da includere nel tuo elenco di comandi vi perché ci sono sempre modi più ottimali per fare le cose in vi digitando di meno.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/vimtutorubuntu.png" class="kg-image" alt="vimtutorubuntu" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/vimtutorubuntu.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/vimtutorubuntu.png 802w" sizes="(min-width: 720px) 720px" width="802" height="600" loading="lazy"></figure><h4 id="modalit-di-vi">Modalità di vi</h4><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Modalità</strong></th>
<th><strong>Funzionalità</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Command</strong></td>
<td>- Predefinita, <strong>vi</strong>&nbsp;parte in modalità Command (Comando).<br>- Ogni tasto è un comando dell'editor.<br>- I tasti digitati sono interpretati come comandi che possono modificare i contenuti del file.</td>
</tr>
<tr>
<td><strong>Insert</strong></td>
<td>- Digita <strong><code>i</code></strong> per passare alla modalità Insert (Inserimento) dalla modalità Command.<br>- La modalità Insert viene utilizzata per immettere (inserire) il testo in un file.<br>- La modalità Insert è contrassegnata da un indicatore “<code>? INSERT ? </code>" nella parte inferiore dello schermo.<br>- Digita <strong><code>Esc</code></strong> per uscire dalla modalità Insert e tornare alla modalità Command.</td>
</tr>
<tr>
<td><strong>Line</strong></td>
<td>- Digita&nbsp;<strong><code>:</code></strong> per passare alla modalità Line (riga) dalla modalità Command.&nbsp;Ogni tasto è un comando esterno, comprese operazioni come la scrittura del contenuto del file su disco o l'uscita.<br>- Utilizza i comandi di modifica della riga ereditati dagli editor di riga più vecchi. La maggior parte di questi comandi in realtà non è più utilizzata. Alcuni comandi di modifica della riga sono molto potenti.<br>- Digita <strong><code>Esc</code></strong> per uscire dalla modalità Line e tornare alla modalità Command.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>vi Fornisce tre modalità, come descritto nella tabella qui sopra. È fondamentale non perdere traccia della modalità in cui ti trovi. Molti tasti e comandi si comportano in modo molto diverso in diverse modalità.</p><h4 id="lavorare-con-i-file-in-vi">Lavorare con i File in vi</h4><p>La tabella descrive i comandi più importanti utilizzati per aprire, uscire, leggere e scrivere file in vi. Il tasto <strong><code>Invio</code></strong> deve essere premuto dopo tutti questi comandi.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>vi myfile</code></strong></td>
<td>Lancia l'editor e apre <strong>myfile</strong></td>
</tr>
<tr>
<td><strong><code>vi -r myfile</code></strong></td>
<td>Lancia l'editor e apre <strong>myfile</strong> in modalità di ripristino da un crash di sistema</td>
</tr>
<tr>
<td><strong><code>:r file2</code></strong></td>
<td>Legge <strong>file2</strong> e inserisce il contenuto nella posizione corrente</td>
</tr>
<tr>
<td><strong><code>:w</code></strong></td>
<td>Scrive il file aperto nell'editor</td>
</tr>
<tr>
<td><strong><code>:w myfile</code></strong></td>
<td>Scrive il file <strong>myfile</strong></td>
</tr>
<tr>
<td><strong><code>:w! file2</code></strong></td>
<td>Sovrascrive il file <strong>file2</strong></td>
</tr>
<tr>
<td><strong><code>:x</code></strong> oppure <strong><code>:wq</code></strong></td>
<td>Esce e scrive il file modificato</td>
</tr>
<tr>
<td><strong><code>:q</code></strong></td>
<td>Esce</td>
</tr>
<tr>
<td><strong><code>:q!</code></strong></td>
<td>Esce abbandonando modifiche non salvate in precedenza</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h4 id="cambiare-la-posizione-del-cursore-in-vi">Cambiare la Posizione del Cursore in vi</h4><p>La tabella descrive i tasti più importanti utilizzati per spostare il cursore in vi. I comandi in modalità Line (quelli che seguono &nbsp;<strong>:</strong> ) richiedono che il tasto <strong>Invio</strong> sia premuto dopo che il comando è stato digitato.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Key</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>tasti freccia</td>
<td>Per spostarsi su, già, sinistra, destra</td>
</tr>
<tr>
<td><strong><code>j</code></strong> oppure <strong><code>&lt;ret&gt;</code></strong></td>
<td>Per spostarsi alla riga successiva</td>
</tr>
<tr>
<td><strong><code>k</code></strong></td>
<td>Per spostarsi alla riga precedente</td>
</tr>
<tr>
<td><strong><code>h</code></strong> oppure <strong><code>Backspace</code></strong></td>
<td>Per sposarsi di un carattere a sinistra</td>
</tr>
<tr>
<td><strong><code>l</code></strong> oppure <strong><code>Barra Spazio</code></strong></td>
<td>Per spostarsi di un carattere a destra</td>
</tr>
<tr>
<td><strong><code>0</code></strong></td>
<td>Per spostarsi all'inizio della riga</td>
</tr>
<tr>
<td><strong><code>$</code></strong></td>
<td>Per spostarsi alla fine della riga</td>
</tr>
<tr>
<td><strong><code>w</code></strong></td>
<td>Per spostarsi all'inizio della parola successiva</td>
</tr>
<tr>
<td><strong><code>:0</code></strong> oppure <strong><code>1G</code></strong></td>
<td>Per spostarsi all'inizio del file</td>
</tr>
<tr>
<td><strong><code>:n</code></strong> oppure <strong><code>nG</code></strong></td>
<td>Per spostarsi alla riga n</td>
</tr>
<tr>
<td><strong><code>:$</code></strong> oppure <strong><code>G</code></strong></td>
<td>Per spostarsi all'ultima riga del file</td>
</tr>
<tr>
<td><strong><code>CTRL-F</code></strong> oppure <strong><code>PaginaGiu</code></strong></td>
<td>Per spostarsi alla schemata successiva</td>
</tr>
<tr>
<td><strong><code>CTRL-B</code></strong> oppure <strong><code>PaginaSu</code></strong></td>
<td>Per spostarsi alla schemata precedente</td>
</tr>
<tr>
<td><strong><code>zz</code></strong></td>
<td>Per aggiornare e centrare il cursore sulla schermata</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><h4>Video: Uso delle Modalità e dei Movimenti Cursore in vi</h4>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINLFS10/LINLFS102014-V001700_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h4 id="cercare-testo-in-vi">Cercare Testo in vi</h4><p>La tabella descrive i più importanti <strong>comandi</strong> usati per cercare testo in vi. Il tasto <strong><code>Invio</code></strong> dovrebbe essere premuto dopo la digitazione del modello di testo da cercare.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>/modello</code></strong></td>
<td>Ricerca in avanti del modello</td>
</tr>
<tr>
<td><strong><code>?modello</code></strong></td>
<td>Ricerca a ritroso del modello</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>La tabella descrive i più importanti <strong>tasti</strong> usati per cercare testo in vi.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Tasto</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>n</code></strong></td>
<td>Si sposta all'occorrenza successiva del modello di ricerca</td>
</tr>
<tr>
<td><strong><code>N</code></strong></td>
<td>Si sposta all'occorrenza precedente del modello di ricerca</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="lavorare-con-il-testo-in-vi">Lavorare con il Testo in vi</h3><p>La tabella descrive le più importanti combinazioni di tasti usati per modificare, aggiungere e cancellare testo in vi.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Tasto</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>a</code></strong></td>
<td>Aggiunge testo dopo il cursore; si interrompe con il tasto <strong><code>Esc</code></strong></td>
</tr>
<tr>
<td><strong><code>A</code></strong></td>
<td>Aggiunge testo alla fine della riga corrente; si interrompe con il tasto <strong><code>Esc</code></strong></td>
</tr>
<tr>
<td><strong><code>i</code></strong></td>
<td>Inserisce testo prima del cursore; si interrompe con il tasto <strong><code>Esc</code></strong></td>
</tr>
<tr>
<td><strong><code>I</code></strong></td>
<td>Inserisce testo all'inizio della riga corrente; si interrompe con il tasto <strong><code>Esc</code></strong></td>
</tr>
<tr>
<td><strong><code>o</code></strong></td>
<td>Inizia una nuova riga sotto la riga corrente, e inserisce lì il testo; si interrompe con il tasto <strong><code>Esc</code></strong></td>
</tr>
<tr>
<td><strong><code>O</code></strong></td>
<td>Inizia una nuova riga sopra la riga corrente, e inserisce lì il testo; si interrompe con il tasto <strong><code>Esc</code></strong></td>
</tr>
<tr>
<td><strong><code>r</code></strong></td>
<td>Sostituisce il carattere alla posizione corrente</td>
</tr>
<tr>
<td><strong><code>R</code></strong></td>
<td>Sostituisce il testo che inizia dalla posizione corrente; si interrompe con il tasto <strong><code>Esc</code></strong></td>
</tr>
<tr>
<td><strong><code>x</code></strong></td>
<td>Elimina il carattere alla posizione corrente</td>
</tr>
<tr>
<td><strong><code>Nx</code></strong></td>
<td>Elimina N caratteri, a partire dalla alla posizione corrente</td>
</tr>
<tr>
<td><strong><code>dw</code></strong></td>
<td>Elimina la parola alla posizione corrente</td>
</tr>
<tr>
<td><strong><code>D</code></strong></td>
<td>Elimina il resto della riga dalla posizione corrente</td>
</tr>
<tr>
<td><strong><code>dd</code></strong></td>
<td>Elimina la riga corrente</td>
</tr>
<tr>
<td><strong><code>Ndd</code></strong> oppure <strong><code>dNd</code></strong></td>
<td>Elimina N righe</td>
</tr>
<tr>
<td><strong><code>u</code></strong></td>
<td>Annulla l'operazione precedente</td>
</tr>
<tr>
<td><strong><code>yy</code></strong></td>
<td>Copia (yank) la riga corrente e la inserisce nel buffer</td>
</tr>
<tr>
<td><strong><code>Nyy</code></strong> oppure <strong><code>yNy</code></strong></td>
<td>Copia (yank) N righe e le inserisce nel buffer</td>
</tr>
<tr>
<td><strong><code>p</code></strong></td>
<td>Copia alla posizione corrente la riga o le righe inserite nel buffer</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p><strong><a href="https://courses.edx.org/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block@Commands_for_vi.pdf">Ecco un PDF consolidato con un elenco di comandi per vi.</a></strong></p><h3 id="usare-comandi-esterni-in-vi">Usare Comandi Esterni in vi</h3><p>Digitando il comando <strong>sh</strong> si apre una shell di comando esterna. Quando esci dalla shell, riprendi la tua sessione di editing corrente.</p><p>Digitando <strong>!</strong> esegui un comando dall'interno di vi. Il comando segue il punto esclamativo. Questa tecnica è più adatta per i comandi non interattivi, come <strong><code>: ! wc %</code></strong>, che esegue il comando <strong>wc</strong> (conteggio parole - word count) in un file; il carattere <strong><code>%</code></strong> rappresenta il file attualmente in fase di modifica.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/vicommand.png" class="kg-image" alt="vicommand" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/vicommand.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/vicommand.png 815w" sizes="(min-width: 720px) 720px" width="815" height="552" loading="lazy"></figure><!--kg-card-begin: html--><h4>Video: Usare Comandi Esterni, Salvare e Chiudere nell'Editor vi</h4>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINLFS10/LINLFS102014-V002700_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video><!--kg-card-end: html--><h3 id="introduzione-a-emacs">Introduzione a emacs</h3><p>L'editor emacs è un popolare concorrente di vi. A differenza di vi, non funziona con le modalità. emacs è altamente personalizzabile e include un gran numero di funzionalità. Inizialmente è stato progettato per l'uso su una console, ma è stato presto adattato per lavorare anche con una GUI. emacs ha molte altre funzionalità diverse dal semplice editing di testo. Ad esempio, può essere utilizzato per e-mail, debug, ecc.</p><p>Invece di avere diverse modalità per comandi e inserimento, come vi, emacs usa i tasti <strong><code>CTRL</code></strong> e Meta (<strong><code>Alt</code></strong> oppure <strong><code>Esc</code></strong>) per comandi speciali.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/emacsc8.png" class="kg-image" alt="emacsc8" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/emacsc8.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/emacsc8.png 850w" sizes="(min-width: 720px) 720px" width="850" height="681" loading="lazy"></figure><h3 id="lavorare-con-emacs">Lavorare con emacs</h3><p>La tabella elenca alcune delle combinazioni di tasti più importanti che vengono utilizzate quando si aprono, chiudono, leggono e scrivono file in emacs.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Tasto</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>emacs myfile</code></strong></td>
<td>Avvia emacs e modifica <strong><code>myfile</code></strong></td>
</tr>
<tr>
<td><strong><code>CTRL-x i</code></strong></td>
<td>Richiede l'inserimento di un file alla posizione corrente</td>
</tr>
<tr>
<td><strong><code>CTRL-x s</code></strong></td>
<td>Salva tutti i file</td>
</tr>
<tr>
<td><strong><code>CTRL-x CTRL-w</code></strong></td>
<td>Scrive il file dandogli un nuovo nome (da inserire al prompt)</td>
</tr>
<tr>
<td><strong><code>CTRL-x&nbsp;CTRL-s</code></strong></td>
<td>Salva il file corrente</td>
</tr>
<tr>
<td><strong><code>CTRL-x&nbsp;CTRL-c</code></strong></td>
<td>Esce dopo la richiesta di salvataggio di qualsiasi file modificato</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Il tutorial di emacs è un buon posto per iniziare a imparare i comandi di base. È disponibile in qualsiasi momento all'interno di emacs digitando semplicemente <strong><code>CTRL-h</code></strong> (per help) quindi la lettera <strong><code>t</code></strong> per tutorial.</p><h3 id="cambiare-la-posizione-del-cursore-in-emacs">Cambiare la Posizione del Cursore in emacs</h3><p>La tabella elenca alcuni dei tasti e delle combinazioni di tasti utilizzate per spostare il cursore in emacs.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Tasto</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>tasti freccia</td>
<td>Usa i tasti freccia per spostarsi su, giù, sinistra e destra</td>
</tr>
<tr>
<td><strong><code>CTRL-n</code></strong></td>
<td>Una riga giù</td>
</tr>
<tr>
<td><strong><code>CTRL-p</code></strong></td>
<td>Una riga su</td>
</tr>
<tr>
<td><strong><code>CTRL-f</code></strong></td>
<td>Un carattere avanti/destra</td>
</tr>
<tr>
<td><strong><code>CTRL-b</code></strong></td>
<td>Un carattere indietro/sinistra</td>
</tr>
<tr>
<td><strong><code>CTRL-a</code></strong></td>
<td>Si sposta all'inizio della riga</td>
</tr>
<tr>
<td><strong><code>CTRL-e</code></strong></td>
<td>Si sposta alla fine della riga</td>
</tr>
<tr>
<td><strong><code>Meta-f</code></strong></td>
<td>Si sposta all'inizio della parola successiva</td>
</tr>
<tr>
<td><strong><code>Meta-b</code></strong></td>
<td>Si sposta indietro all'inizio della parola precedente</td>
</tr>
<tr>
<td><strong><code>Meta-&lt;</code></strong></td>
<td>Si sposta a inizio file</td>
</tr>
<tr>
<td><strong><code>Meta-g-g-n</code></strong></td>
<td>Si sposta alla riga n (si può anche usare <strong><code>Esc-x Goto-line n</code></strong>)</td>
</tr>
<tr>
<td><strong><code>Meta-&gt;</code></strong></td>
<td>Si sposta alla fine del file</td>
</tr>
<tr>
<td><strong><code>CTRL-v</code></strong> o <strong><code>PaginaGiu</code></strong></td>
<td>Va alla schermata successiva</td>
</tr>
<tr>
<td><strong><code>Meta-v</code></strong> o <strong><code>PaginaSu</code></strong></td>
<td>Va alla schermata precedente</td>
</tr>
<tr>
<td><strong><code>CTRL-l</code></strong></td>
<td>Aggiorna e centra lo schermo</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="cercare-testo-in-emacs">Cercare Testo in emacs</h3><p>La tabella elenca le combinazioni di tasti utilizzate per cercare testo in emacs.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Tasto</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>CTRL-s</code></strong></td>
<td>Cerca in avanti per il modello al prompt, o per il modello successivo</td>
</tr>
<tr>
<td><strong><code>CTRL-r</code></strong></td>
<td>Cerca all'indietro per il modello al prompt, o per il modello successivo</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="lavorare-con-il-testo-in-emacs">Lavorare con il Testo in emacs</h3><p>La tabella elenca alcune delle combinazioni di tasti usate per cambiare, aggiungere e cancellare del testo in emacs:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Tasto</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>CTRL-o</code></strong></td>
<td>Inserisce una riga vuota</td>
</tr>
<tr>
<td><strong><code>CTRL-d</code></strong></td>
<td>Cancella il carattere alla posizione corrente</td>
</tr>
<tr>
<td><strong><code>CTRL-k</code></strong></td>
<td>Cancella il resto della riga corrente</td>
</tr>
<tr>
<td><strong><code>CTRL-_</code></strong></td>
<td>Annulla l'operazione precedente</td>
</tr>
<tr>
<td><strong><code>CTRL-spazio</code></strong> oppure <strong><code>CTRL-@</code></strong>)</td>
<td>Marca l'inizio della regione da selezionare. La fine sarà alla posizione del cursore</td>
</tr>
<tr>
<td><strong><code>CTRL-w</code></strong></td>
<td>Cancella il testo attualmente marcato e lo scrive nel buffer</td>
</tr>
<tr>
<td><strong><code>CTRL-y</code></strong></td>
<td>Inserisce alla posizione corrente del cursore qualsiasi cosa sia stata cancellata più di recente</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p><a href="https://courses.edx.org/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block@Commands_for_emacs.pdf"><strong>Ecco un file PDF consolidato con comandi per emacs.</strong></a></p><!--kg-card-begin: html--><h4>Video: Operazioni con emacs</h4>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V001900_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video><!--kg-card-end: html--><h3 id="riepilogo-del-capitolo-4">Riepilogo del Capitolo</h3><p>Hai completato il capitolo 11. Riassumiamo i concetti chiave trattati:</p><ul><li>Gli editor di testo (anziché i programmi di elaborazione testi) vengono utilizzati abbastanza spesso in Linux, per attività come la creazione o la modifica dei file di configurazione del sistema, la scrittura di script, lo sviluppo del codice sorgente, ecc.</li><li>nano è un editor di testo facile da usare che utilizza dei prompt sullo schermo.</li><li>gedit è un editor grafico, molto simile al Blocco Note in Windows.</li><li>L'editor vi è disponibile su tutti i sistemi Linux ed è ampiamente utilizzato. Anche le estensioni grafiche di vi sono ampiamente disponibili.</li><li>emacs è disponibile su tutti i sistemi Linux come popolare alternativa a vi. emacs può supportare sia un'interfaccia utente grafica che un'interfaccia in modalità di testo.</li><li>Per accedere al tutorial di vi, digita <strong>vimtutor</strong> in una finestra di riga di comando.</li><li>Per accedere al tutorial di emacs digita <strong><code>Ctl-h</code></strong> poi <strong><code>t</code></strong> all'interno di emacs</li><li>vi ha tre modalità: <strong>Command</strong>, <strong>Insert</strong>, e <strong>Line</strong>. emacs solo una, ma richiede l'uso di tasti speciali, come <strong><code>CTRL</code></strong> ed <strong><code>Esc</code></strong>.</li><li>Entrambi gli editor usano varie combinazioni di tasti per eseguire le attività. La curva di apprendimento può essere ripida e lunga, ma una volta padroneggiato l'uso di uno di questi editor diventerai estremamente efficiente.</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_Summary--2-.jpg" class="kg-image" alt="LFS01_Summary--2-" width="330" height="306" loading="lazy"></figure><h2 id="capitolo-12-ambiente-dell-utente">Capitolo 12: Ambiente dell'Utente</h2><h3 id="obiettivi-formativi-8">Obiettivi formativi</h3><p>Entro la fine di questo capitolo, dovresti essere in grado di:</p><ul><li>Utilizzare e configurare gli account utente e gruppi di utenti.</li><li>Usare e impostare le variabili di ambiente.</li><li>Utilizzare la cronologia dei comandi precedenti della shell.</li><li>Utilizzare le scorciatoie da tastiera.</li><li>Usare e definire gli alias.</li><li>Utilizzare e impostare i privilegi e la proprietà dei file.</li></ul><h3 id="identificare-l-utente-corrente">Identificare l'Utente Corrente</h3><p>Come sai, Linux è un sistema operativo multi-utente, il che significa che più di un utente può accedere contemporaneamente.</p><ul><li>Per identificare l'utente corrente, digita <strong><code>whoami</code></strong>.</li><li>Per elencare gli utenti attualmente connessi, digita <strong><code>who</code></strong>.</li></ul><p>Passa a &nbsp;<strong>who</strong> l'opzione <strong>-a</strong> per ottenere informazioni più dettagliate.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/b90c91f7776e3f55a5e63eb343e10b99/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/whoubuntu.png" class="kg-image" alt="Using who and whoami" width="636" height="175" loading="lazy"><figcaption>Identificre l'Utente Corrente</figcaption></figure><h3 id="file-di-avvio-dell-utente">File di Avvio dell'Utente</h3><p>In Linux, il programma di shell di comando (generalmente <strong>bash</strong>) utilizza uno o più file di avvio per configurare l'ambiente utente. I file nella directory <strong><code>/etc</code></strong> definiscono le impostazioni globali per tutti gli utenti, mentre i file di inizializzazione nella directory home dell'utente possono includere e/o sovrascrivere le impostazioni globali.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch09_screen07.jpg" class="kg-image" alt="LFS01_ch09_screen07" width="299" height="197" loading="lazy"><figcaption>File di Avvio dell'Utente</figcaption></figure><p>I file di avvio possono fare qualsiasi cosa l'utente desideri fare in tutte le shell di comando, come ad esempio:</p><ul><li>Personalizzare il prompt</li><li>Definire scorciatoie di riga di comando e alias</li><li>Impostare l'editor di testo predefinito</li><li>Impostare il percorso in cui trovare programmi eseguibili</li></ul><h3 id="ordine-dei-file-di-avvio">Ordine dei File di Avvio</h3><p>La prassi standard è che quando si accede per la prima volta a Linux, viene letto ed elaborato <strong><code>/etc/profile</code></strong>, &nbsp;dopo di che i seguenti file vengono cercati (se esistono) nell'ordine elencato:</p><ol><li><strong><code>~/.bash_profile</code></strong></li><li><strong><code>~/.bash_login</code></strong></li><li><strong><code>~/.profile</code></strong></li></ol><p>dove <strong><code>~/.</code></strong> denota la directory home dell'utente. La shell di login di Linux valuta qualsiasi file di avvio che trova e ignora il resto. Ciò significa che se trova <strong><code>~/.bash_profile</code></strong>, ignorerà <strong><code>~/.bash_login</code></strong> e <strong><code>~/.profile</code></strong>. Diverse distribuzioni possono utilizzare diversi file di avvio.</p><p>Tuttavia, ogni volta che crei una nuova shell o finestra di terminale, ecc., non &nbsp;esegui un accesso completo al sistema; solo un file chiamato <strong><code>~/.bashrc</code></strong> viene letto ed elaborato. Sebbene questo file non venga letto ed elaborato insieme alla shell di login, la maggior parte delle distribuzioni e/o degli utenti includono il file <strong><code>~/.bashrc</code></strong> in uno dei tre file di avvio dell'utente.</p><p>Più comunemente, gli utenti avranno a che fare solo <strong><code>~/.bashrc</code></strong>, visto che viene invocato ogni volta che inizia una nuova shell di riga di comando, o un altro programma che venga lanciato da una finestra di terminale, mentre gli altri file vengono letti ed eseguiti solo quando l'utente accede per la prima volta al sistema.</p><p>Le recenti distribuzioni a volte non hanno nemmeno <strong><code>.bash_profile</code></strong> e/o <strong><code>.bash_login</code></strong>, e alcune fanno solo poco più che includere <strong><code>.bashrc</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/bashinit.png" class="kg-image" alt="bashinit" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/bashinit.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/bashinit.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/bashinit.png 1056w" sizes="(min-width: 720px) 720px" width="1056" height="611" loading="lazy"><figcaption>Ordine dei File di Avvio</figcaption></figure><h3 id="creare-alias">Creare Alias</h3><p>Puoi creare comandi personalizzati o modificare il comportamento di quelli già esistenti creando <strong>alias</strong>. Molto spesso, questi alias sono collocati nel tuo file <strong><code>~/.bashrc</code></strong> così da essere disponibili per qualunque shell di comando tu crei. <strong>unalias</strong> rimuove un alias.</p><p>Se digiti <strong><code>alias</code></strong> senza argomenti otterrai l'elenco degli alias attualmeente definiti.</p><p>Ti prego notare che non ci dovrebbero essere spazi su entrambi i lati del segno uguale e la definizione di alias deve essere posizionata all'interno di apici singoli o doppi se contiene spazi.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/aliassuse.png" class="kg-image" alt="aliassuse" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/aliassuse.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/aliassuse.png 644w" width="644" height="592" loading="lazy"><figcaption>Creare Alias</figcaption></figure><h3 id="le-basi-di-utenti-e-gruppi">Le Basi di Utenti e Gruppi</h3><p>A tutti gli utenti Linux viene assegnato un ID utente univoco (<strong>uid</strong>), che è semplicemente un numero intero; gli utenti normali iniziano con un UID di 1000 o superiore.</p><p>Linux usa i <strong>gruppi</strong> per organizzare gli utenti. I gruppi sono raccolte di account con determinati permessi condivisi. Il controllo dell'appartenenza al gruppo viene amministrato attraverso il file <strong><code>/etc/group</code></strong>, che mostra un elenco di gruppi e loro membri. Per impostazione predefinita, ogni utente appartiene a un gruppo predefinito o primario. Quando un utente accede, l'adesione al gruppo è impostata per il proprio gruppo primario e tutti i membri godono dello stesso livello di accesso e privilegio. I permessi sui vari file e directory possono essere modificati a livello di gruppo.</p><p>Gli utenti hanno anche uno o più ID di gruppo (<strong>gid</strong>), compreso uno predefinito che è uguale all'ID utente. Questi numeri sono associati a nomi attraverso i file <strong><code>/etc/passwd</code></strong> e <strong><code>/etc/group</code></strong>. I gruppi vengono utilizzati per raggruppare una serie di utenti che hanno interessi comuni ai fini dei diritti di accesso, dei permessi e delle considerazioni sulla sicurezza. I diritti di accesso ai file (e ai dispositivi) sono concessi sulla base dell'utente e del gruppo a cui appartengono.</p><p>Per esempio, <strong><code>/etc/passwd</code></strong> potrebbe contenere <strong><code>george:x:1002:1002:George Metesky:/home/george:/bin/bash</code></strong> e <strong><code>/etc/group</code></strong> potrebbe contenere <strong><code>george:x:1002</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/etc_group_passwd.png" class="kg-image" alt="etc_group_passwd" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/etc_group_passwd.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/etc_group_passwd.png 732w" sizes="(min-width: 720px) 720px" width="732" height="591" loading="lazy"><figcaption>Le Basi di Utenti e Gruppi</figcaption></figure><h3 id="aggiungere-e-rimuovere-utenti">Aggiungere e Rimuovere Utenti</h3><p>Le distribuzioni hanno interfacce grafiche semplici per la creazione e la rimozione di utenti e gruppi, e per manipolare l'appartenenza al gruppo. Tuttavia, è spesso utile farlo dalla riga di comando o dall'interno di script di shell. Solo l'utente root può aggiungere e rimuovere utenti e gruppi.</p><p>L'aggiunta di un nuovo utente è fatta con <strong>useradd</strong> e la rimozione di un utente esistente viene eseguita con <strong>userdel</strong>. Nella forma più semplice, un account per il nuovo utente <strong>bjmoose</strong> sarà creato con:</p><p><strong><code>$ sudo useradd bjmoose</code></strong></p><p>che, per impostazione predefinita, crea la home directory <strong><code>/home/bjmoose</code></strong>, la popola con alcuni file di base (copiati da <strong><code>/etc/skel</code></strong>) e aggiunge una riga al file <strong><code>/etc/passwd</code></strong>, che nel caso di esempio potrebbe essere:</p><p><strong><code>bjmoose:x:1002:1002::/home/bjmoose:/bin/bash</code></strong></p><p>e imposta la shell predefinita a <strong><code>/bin/bash</code></strong>. La rimozione di un account utente è tanto facile quanto digitare <strong><code>userdel bjmoose</code></strong>. Tuttavia, questo lascerà la directory <strong><code>/home/bjmoose</code></strong> intatta. Questo potrebbe essere utile se si tratta di una disattivazione temporanea. Per rimuovere la directory home rimuovendo l'account è necessario utilizzare l'opzione <strong>-r</strong> del comando <strong>userdel</strong>.</p><p>Se digiti <strong>id</strong> senza argomenti ottieni informazioni sull'utente corrente:</p><p><strong><code>$ id</code></strong><br><strong><code>uid=1002(bjmoose) gid=1002(bjmoose) groups=106(fuse),1002(bjmoose)</code></strong></p><p>Se viene passato il nome di un altro utente come argomento, <strong>id</strong> riporterà informazioni su quell'altro utente.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/useradd.png" class="kg-image" alt="useradd" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/useradd.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/useradd.png 865w" sizes="(min-width: 720px) 720px" width="865" height="656" loading="lazy"></figure><!--kg-card-begin: html--><h3>Video: Usare gli Account Utente</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LinuxFoundationXLFS101x-V000300_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="aggiungere-e-rimuovere-gruppi">Aggiungere e Rimuovere Gruppi</h3><p>L'aggiunta di un nuovo gruppo è fatta con <strong>groupadd</strong>:</p><p><strong><code>$ sudo /usr/sbin/groupadd unnuovogruppo</code></strong></p><p>Il gruppo può essere rimosso con:</p><p><strong><code>$ sudo /usr/sbin/groupdel unnuovogruppo</code></strong></p><p>L'aggiunta di un utente a un gruppo già esistente è fatta con <strong>usermod</strong>. Ad esempio, prima dovresti visualizzare i gruppi ai quali l'utente appartiene già:</p><p><strong><code>$ groups rjsquirrel</code></strong><br><strong><code>rjsquirrel : rjsquirrel</code></strong></p><p>poi aggiungere il nuovo gruppo:</p><p><strong><code>$ sudo /usr/sbin/usermod -a -G unnuovogruppo rjsquirrel</code></strong></p><p><strong><code>$ groups rjsquirrel</code></strong><br><strong><code>rjsquirrel: rjsquirrel unnuovogruppo</code></strong></p><p>Queste utility aggiornano il file <strong><code>/etc/group</code></strong> come necessario. Assicurati di usare l'opzione <strong>-a</strong> (aggiungere), così da evitare di rimuovere gruppi che esistono già. <strong>groupmod</strong> può essere utilizzato per modificare le proprietà del gruppo, come l'ID di gruppo (GID) con l'opzione <strong>-g</strong> oppure il suo nome con l'opzione <strong>-n</strong>.</p><p>Rimuovere un utente dal gruppo è un po' più complicato. L'opzione <strong>-G</strong> di <strong>usermod</strong> riceve un elenco di gruppi ai quali deve appartenere l'utente. Pertanto se esegui:</p><p><strong><code>$ sudo /usr/sbin/usermod -G rjsquirrel rjsquirrel</code></strong></p><p><strong><code>$ groups rjsquirrel</code></strong><br><strong><code>rjsquirrel : rjsquirrel</code></strong></p><p>rimarrà solo il gruppo <strong>rjsquirrel</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/newgroupsuse.png" class="kg-image" alt="newgroupsuse" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/newgroupsuse.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/newgroupsuse.png 612w" width="612" height="229" loading="lazy"><figcaption>Aggiungere e Rimuovere Gruppi</figcaption></figure><h3 id="l-account-root">L'Account Root</h3><p>L'account root è molto potente e ha pieno accesso al sistema. Altri sistemi operativi spesso lo chiamano account amministratore; in Linux, viene spesso chiamato account superuser. È necessario essere estremamente cauti prima di concedere l'accesso a root completo a un utente; è raramente, se mai, giustificato. Gli attacchi esterni consistono spesso in trucchi usati per elevarsi all'account root.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch09_screen04a.jpg" class="kg-image" alt="LFS01_ch09_screen04a" width="330" height="183" loading="lazy"></figure><p>Tuttavia, puoi usare <strong>sudo</strong> per assegnare privilegi più limitati agli account utente:</p><ul><li>Solo su base temporanea</li><li>Solo per un sottoinsieme specifico di comandi.</li></ul><h3 id="su-e-sudo">su e sudo</h3><p>Quando si assegnano privilegi elevati, è possibile utilizzare il comando <strong>su</strong> (substitute user - sostituisci utente) per avviare una nuova shell in esecuzione come un altro utente (è necessario digitare la password dell'utente che stai diventando). Molto spesso, quest'altro utente è root e la nuova shell consente l'uso di privilegi elevati fino a quando non viene chiusa. È quasi sempre una cattiva pratica (pericolosa sia per la sicurezza che per la stabilità) usare <strong>su</strong> per diventare root. Gli errori risultanti possono includere la cancellazione di file vitali al sistema e le violazioni della sicurezza.</p><p>Concedere i privilegi usando <strong>sudo</strong> è meno pericoloso ed è preferito. Per impostazione predefinita, <strong>sudo</strong> deve essere abilitato su base utente. Tuttavia, alcune distribuzioni (come Ubuntu) lo abilitano per impostazione predefinita per almeno un utente principale, o lo forniscono come opzione di installazione.</p><p>Nel capitolo &nbsp;<strong>Principi di Sicurezza Locale</strong> descriveremo e confronteremo <strong>su</strong> e <strong>sudo</strong> in dettaglio.</p><h3 id="elevare-all-account-root">Elevare all'Account root</h3><p>Per diventare temporaneamente superutente per una serie di comandi, è possibile digitare <strong>su</strong>, verrà poi richiesta la password di root.</p><p>Per eseguire solo un comando con privilegi di root digita <strong><code>sudo &lt;comando&gt;</code></strong>. Al termine del comando, tornerai ad essere un normale utente non privilegiato.</p><p>I file di configurazione di <strong>sudo</strong> sono conservati nel file <strong><code>/etc/sudoers</code></strong> e nella directory <strong><code>/etc/sudoers.d/</code></strong>. Per impostazione predefinita, la directory <strong><code>sudoers.d</code></strong> è vuota.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/sudo.png" class="kg-image" alt="sudo" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/sudo.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/sudo.png 814w" sizes="(min-width: 720px) 720px" width="814" height="571" loading="lazy"><figcaption>Elevare all'Account root</figcaption></figure><h3 id="variabili-di-ambiente">Variabili di Ambiente</h3><p>Le <strong>variabili di ambiente</strong> sono elementi che hanno valori specifici che possono essere utilizzati dalla shell di comando, come <strong>bash</strong> o altre utility e applicazioni. Alcune variabili di ambiente sono fornite con valori preimpostati dal sistema (che di solito possono essere sovrascritti), mentre altre sono impostate direttamente dall'utente, dalla riga di comando o all'interno di script di avvio o altri.</p><p>Una variabile di ambiente è in realtà solo una stringa di caratteri che contiene informazioni utilizzate da una o più applicazioni. Esistono diversi modi per visualizzare i valori delle variabili di ambiente attualmente impostate; si può digitare <strong>set</strong>, <strong>env</strong>, oppure <strong>export</strong>. A seconda dello stato del tuo sistema, <strong>set</strong> potrebbe stampare molte più righe rispetto agli altri due metodi.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/envsetexport.png" class="kg-image" alt="envsetexport" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/envsetexport.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/envsetexport.png 844w" sizes="(min-width: 720px) 720px" width="844" height="447" loading="lazy"><figcaption>Variabili di Ambiente</figcaption></figure><h4 id="impostare-variabili-di-ambiente">Impostare Variabili di Ambiente</h4><p>Per impostazione predefinita, le variabili create all'interno di uno script sono disponibili solo per la shell corrente; i processi figlio (sub-shell) non avranno accesso ai valori che sono stati impostati o modificati. Consentire ai processi figlio di vedere i valori richiede l'uso del comando <strong>export</strong>.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Attività</strong></th>
<th><strong>Comando</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>Mostra il valore di una variabile specifica</td>
<td><strong><code>echo $SHELL</code></strong></td>
</tr>
<tr>
<td>Esporta un nuovo valore di variabile</td>
<td><strong><code>export VARIABILE=valore</code></strong>&nbsp;(oppure <strong><code>VARIABILE=valore; export VARIABILE</code></strong>)</td>
</tr>
<tr>
<td>Aggiunge una variabile permanentemente</td>
<td>Modifica <strong><code>~/.bashrc</code></strong>, aggiungi la riga <strong><code>export VARIABILE=valore</code></strong><br>Salva, esci, quingi digita&nbsp;<strong><code>source ~/.bashrc</code></strong>&nbsp;oppure solo&nbsp;<strong><code>. ~/.bashrc</code></strong> (<em>puntino</em> <strong><code>~/.bashrc</code></strong>);&nbsp;oppure semplicemente avvia una nuova shell digitando <strong><code>bash</code></strong></td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>È inoltre possibile impostare le variabili di ambiente da passare una tantum a un comando in questo modo:</p><p><strong><code>$ SDIRS=s_0* KROOT=/lib/modules/$(uname -r)/build make modules_install</code></strong></p><p>che passa i valori delle variabili di ambiente <strong>SDIRS</strong> e <strong>KROOT</strong> al comando <strong>make modules_install</strong>.</p><h3 id="la-variabile-home">La Variabile HOME</h3><p><strong>HOME</strong> è una variabile di ambiente che rappresenta la directory home (o di accesso) dell'utente. <strong><code>cd</code></strong> senza argomenti cambierà la directory di lavoro corrente secondo il valore di <strong>HOME</strong>. Nota che il carattere tilde (<strong><code>~</code></strong>) è spesso usato come abbreviazione per <strong><code>$HOME</code></strong>. Pertanto, <strong><code>cd $HOME</code></strong> e <strong><code>cd ~</code></strong> sono istruzioni esattamente equivalenti.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Commndo</strong></th>
<th><strong>Spiegazione</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>$ echo $HOME</code></strong><br><strong><code>/home/me</code></strong><br><strong><code>$ cd /bin</code></strong></td>
<td>Mostra il valore della variabile di ambiente <strong>HOME</strong>, poi cambia directory (<strong>cd</strong>) verso <strong>/bin</strong>.</td>
</tr>
<tr>
<td><strong><code>$ pwd&lt;br&gt;/bin</code></strong></td>
<td>Dove siamo? Usa <strong>pwd</strong> - print working directory (stampa directory corrente) - per scoprirlo. Come previsto,&nbsp;<strong><code>/bin</code></strong>.</td>
</tr>
<tr>
<td><strong><code>$ cd</code></strong><br><strong><code>$ pwd</code></strong><br><strong><code>/home/me</code></strong></td>
<td>Va alla directory definita in $HOME, come puoi vedere</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>La videata seguente dimostra quanto sopra.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/image-1.png" class="kg-image" alt="image-1" width="452" height="201" loading="lazy"><figcaption>La variabile HOME</figcaption></figure><h3 id="la-variabile-path">La Variabile PATH</h3><p><strong>PATH</strong> è un elenco ordinato di directory (il percorso - path) che viene scorso quando viene usato un comando per trovare il programma o lo script appropriato da eseguire. Ogni directory nel percorso è separata dal simbolo dei due punti (<strong>:</strong>). Un nome directory null (vuoto) (oppure <strong><code>./</code></strong>) indica la directory corrente in qualsiasi momento.</p><ul><li><strong>:percorso1:percorso2</strong></li><li><strong>percorso1::percorso2</strong></li></ul><p>Nell' esempio in <strong>:percorso1:percorso2</strong>, c'è una directory vuota prima del primo (<strong>:</strong>). Allo stesso modo, per <strong>percorso1::percorso2</strong> c'è una directory vuota tra &nbsp;<strong>percorso1</strong> e <strong>percorso2</strong>.</p><p>Per inserire all'inizio del tuo percorso una tua directory <strong>bin</strong> privata:</p><p><strong><code>$ export PATH=$HOME/bin:$PATH</code></strong><br><strong><code>$ echo $PATH</code></strong><br><strong><code>/home/student/bin:/usr/local/bin:/usr/bin:/bin/usr</code></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/setpath.png" class="kg-image" alt="setpath" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/setpath.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/setpath.png 889w" sizes="(min-width: 720px) 720px" width="889" height="312" loading="lazy"><figcaption>La Variabile PATH</figcaption></figure><h3 id="la-variabile-shell">La Variabile SHELL</h3><p>La variabile di ambiente <strong>SHELL</strong> punta alla shell di comando predefinita dell'utente (il programma che gestisce qualunque cosa si digiti in una finestra di comando, di solito bash) e contiene il nome del percorso completo della shell:</p><p><strong><code>$ echo $SHELL</code></strong><br><strong><code>/bin/bash</code></strong><br><strong><code>$</code></strong></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/seashell.png" class="kg-image" alt="seashell" width="400" height="320" loading="lazy"></figure><h3 id="la-variabile-ps1-e-il-prompt-di-riga-di-comando">La Variabile PS1 e il Prompt di Riga di Comando</h3><p>L'istruzione prompt (<strong>PS</strong>) viene utilizzata per personalizzare la stringa del tuo prompt nelle finestre del terminale per visualizzare le informazioni desiderate.</p><p><strong>PS1</strong> è la variabile del prompt primario che controlla l'aspetto del prompt della riga di comando. I seguenti caratteri speciali possono essere inclusi in <strong>PS1</strong>:</p><p><strong><code>\u</code></strong> - Nome utente<br><strong><code>\h</code></strong> - Nome host<br><strong><code>\w</code></strong> - Directory di lavoro corrente<br><strong><code>\!</code></strong> - Numero di cronologia di questo comando<br><strong><code>\d</code></strong> - Data</p><p>Devono essere racchiusi tra apici singoli quando vengono utilizzati, come nel seguente esempio:</p><p><strong><code>$ echo $PS1</code></strong><br><strong><code>$</code></strong><br><strong><code>$ export PS1='\u@\h:\w$ '</code></strong><br><strong><code>student@example.com:~$ # nuovo prompt</code></strong></p><p>Per annullare le modifiche:</p><p><strong><code>student@example.com:~$ export PS1='$ '</code></strong><br><strong><code>$</code></strong></p><p>Una pratica ancora migliore sarebbe quella di salvare prima il vecchio prompt e poi ripristinarlo, così:</p><p><strong><code>$ OLD_PS1=$PS1</code></strong></p><p>modificare il prompt, ed eventualmente ritornare alla vecchia versione con:</p><p><strong><code>$ PS1=$OLD_PS1</code></strong><br><strong><code>$</code></strong></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/ps1.png" class="kg-image" alt="ps1" width="495" height="249" loading="lazy"></figure><h3 id="richiamare-comandi-precdenti">Richiamare Comandi Precdenti</h3><p>bash tiene traccia dei comandi e delle istruzioni precedentemente inserite in un buffer di cronologia. È possibile recuperare comandi precedentemente impartiti semplicemente usando i tasti del cursore <strong><code>FrecciaSu</code></strong> e <strong><code>FrecciaGiù</code></strong>. Per visualizzare l'elenco dei comandi precedentemente eseguiti, puoi semplicemente digitare <strong><code>history</code></strong> nella riga di comando.</p><p>L'elenco dei comandi viene visualizzato con il comando più recente che appare come ultimo nell'elenco. Queste informazioni sono salvate in <strong><code>~/.bash_history</code></strong>. Se sono aperti più terminali, i comandi digitati in ciascuna sessione non vengono salvati fino a quando la sessione non termina.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/debianhistory.png" class="kg-image" alt="debianhistory" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/debianhistory.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/debianhistory.png 614w" width="614" height="485" loading="lazy"><figcaption>Richiamare Comandi Precedenti</figcaption></figure><h4 id="usare-le-variabili-di-ambiente-della-cronologia">Usare le Variabili di Ambiente della Cronologia</h4><p>Diverse variabili di ambiente possono essere utilizzate per ottenere informazioni sul file che contiene la cronologia.</p><ul><li><strong>HISTFILE</strong><br>La posizione del file di cronologia</li><li><strong>HISTFILESIZE</strong><br>Il numero massimo di righe nel file di cronologia (valore predefinito 500).</li><li><strong>HISTSIZE</strong><br>Il numero massimo di comandi nel file di cronologia.</li><li><strong>HISTCONTROL</strong><br>Come sono conservati i comandi.</li><li><strong>HISTIGNORE</strong><br>Quali righe di comando possono essere ignorate.</li></ul><p>Per una descrizione completa dell'uso di queste variabili di ambiente, consultare <strong><code>man bash</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/history.png" class="kg-image" alt="history" width="537" height="212" loading="lazy"><figcaption>Usare le Variabili di Ambiente della Cronologia</figcaption></figure><h4 id="trovare-e-usare-comandi-precedenti">Trovare e Usare Comandi Precedenti</h4><p>Tasti specifici per eseguire varie attività:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Tasto</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>Tasti <strong>FrecciaSu</strong>/<strong>FrecciaGiù</strong></td>
<td>Scorrono la lista dei comandi precedentemente eseguiti</td>
</tr>
<tr>
<td><strong>!!</strong>(Pronunciato bang-bang)</td>
<td>Esegue il comando precedente</td>
</tr>
<tr>
<td><strong>CTRL-R</strong></td>
<td>Cerca comandi precedentemente usati</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Se si desidera richiamare un comando nell'elenco della cronologia, ma non si desidera premere ripetutamente il tasto freccia, è possibile premere <strong><code>CTRL-R</code></strong> per effettuare una ricerca intelligente all'indietro.</p><p>Quando inizi a digitare, la ricerca risale in ordine inverso al primo comando che corrisponde alle lettere che hai digitato. Digitando più lettere successive, si rende sempre più specifica la corrispondenza.</p><p>Quello che segue è un esempio di come è possibile utilizzare il comando <strong>CTRL-R</strong> per cercare attraverso la cronologia dei comandi:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>$ ^R</strong></td>
<td>(Tutto ciò accade su 1 riga)</td>
</tr>
<tr>
<td><strong><code>(reverse-i-search)'s': sleep 1000</code></strong></td>
<td>(Cerco 's'; corrispondenza con "sleep")</td>
</tr>
<tr>
<td><strong>$ sleep 1000</strong></td>
<td>(Premuto Invio per eseguire il comando cercato)</td>
</tr>
<tr>
<td><strong>$</strong></td>
<td></td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h4 id="eseguire-comandi-precedenti">Eseguire Comandi Precedenti</h4><p>La tabella descrive la sintassi utilizzata per eseguire comandi precedentemente usati:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Sintassi</strong></th>
<th><strong>Attività</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>!</strong></td>
<td>Inizia una sostituzione dalla cronologia</td>
</tr>
<tr>
<td><strong>!$</strong></td>
<td>Fa riferimento all'ultimo argumento in una riga</td>
</tr>
<tr>
<td><strong>!n</strong></td>
<td>Fa riferimento all'ennesima riga di comando</td>
</tr>
<tr>
<td><strong>!stringa</strong></td>
<td>Fa riferimento al comando più recente che inizia con stringa</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Tutte le sostituzioni della cronologia iniziano con <strong><code>!</code></strong>. Quando digiti il comando: <strong><code>ls -l /bin /etc /var</code></strong>, <strong><code>!$</code></strong> farà riferimento a <strong><code>/var</code></strong>, l'ultimo argomento della riga di comando.</p><p>Ecco altri esempi:</p><p><strong><code>$ history</code></strong></p><ol><li><strong><code>echo $SHELL</code></strong></li><li><strong><code>echo $HOME</code></strong></li><li><strong><code>echo $PS1</code></strong></li><li><strong><code>ls -a</code></strong></li><li><strong><code>ls -l /etc/ passwd</code></strong></li><li><strong><code>sleep 1000</code></strong></li><li><strong><code>history</code></strong></li></ol><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>$ !1</code></strong></td>
<td>(Esegue il comando n. 1 qui sopra)</td>
</tr>
<tr>
<td><strong><code>echo $SHELL</code></strong></td>
<td></td>
</tr>
<tr>
<td><strong><code>/bin/bash</code></strong></td>
<td></td>
</tr>
<tr>
<td><strong>$ !sl</strong></td>
<td>(Esegue il comando che inizia con "sl")</td>
</tr>
<tr>
<td><strong><code>sleep 1000</code></strong></td>
<td></td>
</tr>
<tr>
<td><strong><code>$</code></strong></td>
<td></td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="scorciatoie-da-tastiera">Scorciatoie da Tastiera</h3><p>È possibile utilizzare le scorciatoie da tastiera per eseguire rapidamente attività diverse. La tabella elenca alcune di queste scorciatoie da tastiera e i loro usi. Nota non c'è distinzione tra lettere maiuscole e minuscole, per esempio digitare <strong>CTRL-a</strong> è uguale a <strong>CTRL-A</strong> .</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Scorciatoia da Tastiera</strong></th>
<th><strong>Attività</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>CTRL-L</code></strong></td>
<td>Pulisce lo schermo</td>
</tr>
<tr>
<td><strong><code>CTRL-D</code></strong></td>
<td>Esce dalla shell corrente</td>
</tr>
<tr>
<td><strong><code>CTRL-Z</code></strong></td>
<td>Mette l'attuale processo in background sospeso</td>
</tr>
<tr>
<td><strong><code>CTRL-C</code></strong></td>
<td>Uccide il processo attuale</td>
</tr>
<tr>
<td><strong><code>CTRL-H</code></strong></td>
<td>Funziona come il tasto Backspace</td>
</tr>
<tr>
<td><strong><code>CTRL-A</code></strong></td>
<td>Va all'inizio della riga</td>
</tr>
<tr>
<td><strong><code>CTRL-W</code></strong></td>
<td>Elimina la parola prima del cursore</td>
</tr>
<tr>
<td><strong><code>CTRL-U</code></strong></td>
<td>Elimina dalla posizione del cursore fino all'inizio della riga</td>
</tr>
<tr>
<td><strong><code>CTRL-E</code></strong></td>
<td>Va alla fine della riga</td>
</tr>
<tr>
<td><strong><code>Tab</code></strong></td>
<td>Auto-completa file, directory e binari</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="propriet-di-un-file">Proprietà di un File</h3><p>In Linux e altri sistemi operativi basati su Unix, ogni file è associato a un utente che è il proprietario. Ogni file è anche associato a un gruppo (un sottoinsieme di tutti gli utenti) che ha un interesse per il file e alcuni diritti o autorizzazioni: letture, scrittura ed esecuzione.</p><p>I seguenti programmi di utilità riguardano la proprietà di utente e gruppo e le impostazioni dei permessi:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>chown</code></strong></td>
<td>Utilizzato per cambiare l'utente proprietario di un file o una directory</td>
</tr>
<tr>
<td><strong><code>chgrp</code></strong></td>
<td>Utilizzato per cambiare la proprietà del gruppo</td>
</tr>
<tr>
<td><strong><code>chmod</code></strong></td>
<td>Utilizzato per cambiare i permessi sul file, che può essere fatto separatamente per <strong>proprietario</strong> (owner),<strong>gruppo</strong> (group) e tutti gli <strong>altri</strong> (other)</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="modalit-di-permessi-del-file-e-chmod">Modalità di Permessi del File e chmod</h3><p>I file hanno tre tipi di permessi: lettura (<strong>r</strong>), scrittura (<strong>w</strong>), esecuzione (<strong>x</strong>). Questi sono generalmente rappresentati come <strong>rwx</strong>. Questi permessi sono relativi a tre gruppi di proprietari: utente/proprietario (<strong>u</strong>), gruppo (<strong>g</strong>), e altri (<strong>o</strong>).</p><p>Di conseguenza, hai i seguenti tre gruppi di tre tipi di permesso:</p><p><strong><code>rwx rwx rwx</code></strong><br><strong><code>u &nbsp; g &nbsp; o</code></strong></p><p>Esistono diversi modi per usare <strong>chmod</strong>. Ad esempio, per dare al proprietario e ad altri i permessi di esecuzione e rimuovere il permesso di scrittura per il &nbsp;gruppo:</p><p><strong><code>$ ls -l somefile</code></strong><br><strong><code>-rw-rw-r-- 1 student student 1601 Mar 9 15:04 somefile</code></strong><br><strong><code>$ chmod uo+x,g-w somefile</code></strong><br><strong><code>$ ls -l somefile</code></strong><br><strong><code>-rwxr--r-x 1 student student 1601 Mar 9 15:04 somefile</code></strong></p><p>dove <strong><code>u</code></strong> sta per utente (proprietario), <strong><code>o</code></strong> per altri, e <strong>g</strong> per gruppo.</p><p>Questo tipo di sintassi può essere difficile da digitare e ricordare, quindi si usa spesso una scorciatoia che ti consente di impostare tutte le autorizzazioni in un solo passaggio. Questo viene fatto con un semplice algoritmo e una singola cifra è sufficiente per specificare tutti e tre i bit di autorizzazione per ciascuna entità. Questa cifra è la somma di:</p><ul><li><strong>4</strong> se si richiede il permesso di lettura</li><li><strong>2</strong> se si richiede il permesso di scrittura</li><li><strong>1</strong> se si richiede il permesso di esecuzione</li></ul><p>Di conseguenza, <strong>7</strong> significa leggi/scrivi/esegui, <strong>6</strong> significa leggi/scrivi, e <strong>5</strong> significa leggi/esegui.</p><p>Quando lo applichi al comando <strong>chmod</strong>, devi passare tre cifre, una per ogni soggetto (utente, gruppo, altri), in questo modo:</p><p><strong><code>$ chmod 755 somefile</code></strong><br><strong><code>$ ls -l somefile</code></strong><br><strong><code>-rwxr-xr-x 1 student student 1601 Mar 9 15:04 somefile</code></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/chmodmint.png" class="kg-image" alt="chmodmint" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/chmodmint.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/chmodmint.png 645w" width="645" height="339" loading="lazy"><figcaption>Modalità Permesso File e chmod</figcaption></figure><h3 id="esempi-di-chown">Esempi di chown</h3><p>Vediamo un esempio di modifica della proprietà del file utilizzando <strong>chown</strong>, come mostrato nella successiva videata. Innanzitutto, creiamo due file vuoti utilizzando <strong>touch</strong>.</p><p>Nota che serve <strong>sudo</strong> per modificare il proprietario di <strong><code>file2</code></strong> in root. Il secondo comando <strong>chown</strong> modifica allo stesso tempo sia il proprietario che il gruppo!</p><p>Infine, solo il superutente può rimuovere i file.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/chownrhel7.png" class="kg-image" alt="chownrhel7" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/chownrhel7.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/chownrhel7.png 625w" width="625" height="390" loading="lazy"></figure><h3 id="esempio-di-chgrp">Esempio di chgrp</h3><p>Nella videata seguente vediamo un esempio di modifica della proprietà del gruppo utilizzando <strong>chgrp</strong>, il gruppo per <code>file1</code> viene modificato in <code>bin</code>:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/chgrouprhel7.png" class="kg-image" alt="chgrouprhel7" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/chgrouprhel7.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/chgrouprhel7.png 625w" width="625" height="200" loading="lazy"><figcaption>chgrp</figcaption></figure><h3 id="riepilogo-del-capitolo-5">Riepilogo del Capitolo</h3><p>Hai completato il capitolo 12. Riassumiamo i concetti chiave trattati:</p><ul><li>Linux è un sistema multiutente.</li><li>Per trovare gli utenti attualmente connessi, puoi utilizzare il comando <strong>who</strong>.</li><li>Per trovare l'ID utente corrente, è possibile utilizzare il comando <strong>whoami</strong>.</li><li>L'account <strong>root</strong> ha pieno accesso al sistema. Non è mai ragionevole concedere l'accesso completo a un utente.</li><li>Puoi assegnare i privilegi di root agli account utente regolari su base temporanea utilizzando il comando <strong>sudo</strong>.</li><li>Il programma shell (bash) utilizza più file di avvio per creare l'ambiente utente. Ogni file influisce sull'ambiente interattivo in modo diverso. <strong><code>/etc/profile</code></strong> fornisce le impostazioni globali.</li><li>I vantaggi dei file di avvio includono la personalizzazione del prompt dell'utente, l'impostazione del tipo di terminale dell'utente, l'impostazione delle scorciatoie e degli alias della linea di comando, l'impostazione dell'editor di testo predefinito, ecc.</li><li>Una variabile di ambiente è una stringa di caratteri che contiene i dati utilizzati da una o più applicazioni. Le variabili di shell integrate possono essere personalizzate per soddisfare le tue esigenze.</li><li>Il comando <strong>history</strong> richiama un elenco di comandi precedenti, che possono essere modificati e riciclati.</li><li>In Linux, varie scorciatoie da tastiera possono essere utilizzate nel prompt dei comandi al posto dei comandi effettivi.</li><li>Puoi personalizzare i comandi creando alias. Aggiungendo un alias a <strong><code>~/.bashrc</code></strong> lo renderai disponibile per tutte le altre shell.</li><li>I permessi di un file possono essere modificati digitando <strong><code>chmod permessi nomefile</code></strong>.</li><li>La proprietà di un file può essere modificata digitando <strong><code>chown propietario nomefile</code></strong>.</li><li>La proprietà di gruppo per un file può essere modificata digitando <strong><code>chgrp gruppo nomefile</code></strong>.</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_Summary--3-.jpg" class="kg-image" alt="LFS01_Summary--3-" width="330" height="306" loading="lazy"></figure><h2 id="capitolo-13-manipolare-i-file">Capitolo 13: Manipolare i File</h2><!--kg-card-begin: html--><h3>Video: Manipolare i File di Testo</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINLFS10/LINLFS102014-V002500_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video><!--kg-card-end: html--><h3 id="obiettivi-formativi-9">Obiettivi Formativi</h3><p>Entro la fine di questo capitolo, dovresti essere in grado di:</p><ul><li>Visualizzare e aggiungere contenuto a un file usando <strong>cat</strong> ed <strong>echo</strong>.</li><li>Modificare e stampare il contenuto di un file usando <strong>sed</strong> e <strong>awk</strong>.</li><li>Cercare modelli di testo usando <strong>grep</strong>.</li><li>Usare ulteriori utility per la manipolazione di file e testo.</li></ul><h3 id="strumenti-da-riga-di-comando-per-manipolare-file-di-testo">Strumenti da Riga di Comando per Manipolare File di Testo</h3><p>Indipendentemente dal ruolo che svolgi con Linux (amministratore di sistema, sviluppatore o utente), spesso è necessario sfogliare e analizzare i file di testo e/o estrarre dati da essi. Queste sono operazioni di manipolazione dei file. Pertanto, è essenziale che l'utente Linux diventi abile nell'esecuzione di determinate operazioni sui file.</p><p>Il più delle volte, tale manipolazione dei file viene eseguita dalla riga di comando, il che consente agli utenti di eseguire attività in modo più efficiente rispetto all'utilizzo di una GUI. Inoltre, la riga di comando è più adatta per l'automazione delle attività eseguite frequentemente.</p><p>In effetti, gli amministratori di sistema esperti scrivono script personalizzati per svolgere tali compiti ripetitivi, standardizzati per ciascun ambiente particolare. Discuteremo di tale scripting più avanti con molti dettagli.</p><p>In questa sezione, ci concentreremo sui file da riga di comando e sulle utility utilizzate per la manipolazione del testo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/cmdlinetext--1-.png" class="kg-image" alt="cmdlinetext--1-" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/cmdlinetext--1-.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/cmdlinetext--1-.png 814w" sizes="(min-width: 720px) 720px" width="814" height="504" loading="lazy"><figcaption>Strumenti da Riga di Comando per Manipolare File di Testo</figcaption></figure><h3 id="cat">cat</h3><p><strong>cat</strong> è l'abbreviazione di <strong>concatenate</strong> (concatenare) ed è una delle utility da riga comando Linux più frequentemente utilizzate per leggere e stampare i file, nonché per la semplice visualizzazione dei contenuti dei file. Per visualizzare un file, esegui il comando seguente:</p><p><strong><code>$ cat &lt;nomefile&gt;</code></strong></p><p>Per esempio, <strong><code>cat readme.txt</code></strong> visualizzerà il contenuto di <strong>readme.txt</strong> nel terminale. Tuttavia, lo scopo principale di <strong>cat</strong> è spesso di combinare più file (concatenarli). È possibile eseguire le azioni elencate nella tabella che segue utilizzando <strong>cat</strong>.</p><p>Il comando <strong>tac</strong> (<strong>cat</strong> al contrario) stampa le righe di un file in ordine inverso. Ogni riga rimane la stessa, ma l'ordine delle righe è invertito. La sintassi di <strong>tac</strong> è esattamente la stessa di <strong>cat</strong>, per esempio:</p><p><strong><code>$ tac file</code></strong><br><strong><code>$ tac file1 file2 &gt; nuovofile</code></strong></p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>cat file1 file2</code></strong></td>
<td>Concatena più file e visualizza il risultato; vale a dire l'intero contenuto del primo file seguito da quello del secondo file</td>
</tr>
<tr>
<td><strong><code>cat file1 file2 &gt; nuovofile</code></strong></td>
<td>Combina più file e salva il risultato in un nuovo file</td>
</tr>
<tr>
<td><strong><code>cat file &gt;&gt; fileesistente</code></strong></td>
<td>Accoda un file alla fine di un file esistente</td>
</tr>
<tr>
<td><strong><code>cat &gt; file</code></strong></td>
<td>Qualunque riga digitata verrà scritta in file, fino a quando non viene digitato <strong><code>CTRL-D</code></strong></td>
</tr>
<tr>
<td><strong><code>cat &gt;&gt; file</code></strong></td>
<td>Qualunque riga digitata viene aggiunta a file, fino a quando non viene digitato <strong><code>CTRL-D</code></strong></td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="usare-cat-interattivamente">Usare cat Interattivamente</h3><p><strong>cat</strong> può essere utilizzato per leggere dall'input standard (come la finestra del terminale) se non vengono specificati file. Puoi usare l'operatore <strong>&gt;</strong> Per creare e aggiungere righe in un nuovo file, e l'operatore <strong>&gt;&gt;</strong> per aggiungere righe (o file) a un file esistente. L'abbiamo menzionato parlando di come creare file senza un editor.</p><p>Per creare un nuovo file, al prompt dei comandi digita &nbsp;<strong><code>cat &gt; &lt;nomefile&gt;</code></strong> poi premi <strong><code>Invio</code></strong>.</p><p>Questo comando crea un nuovo file e attende che l'utente modifichi/inserisca il testo. Dopo che hai finito di digitare il testo richiesto, digita <strong><code>CTRL-D</code></strong> all'inizio della riga successiva per salvare il file e tornare al prompt dei comandi.</p><p>Un altro modo per creare un file nel terminale è <strong><code>cat &gt; &lt;nomefile&gt; &lt;&lt; EOF</code></strong>. Viene creato un nuovo file e puoi inserire il contenuto desiderato. Per uscire, digita <strong><code>EOF</code></strong> all'inizio di una riga.</p><p>Nota che <strong><code>EOF</code></strong> deve essere maiuscolo. Puoi anche usare un'altra parola, come <strong><code>STOP</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://courses.edx.org/assets/courseware/v1/2186f2162bb7f8d6f7fac9004f7d4784/asset-v1:LinuxFoundationX+LFS101x+2T2021+type@asset+block/cateoffedora.png" class="kg-image" alt="Using cat: the cat << EOF > somefile command and its output, along with the cat somefile command and it's output" width="657" height="291" loading="lazy"><figcaption>Usare cat</figcaption></figure><!--kg-card-begin: html--><h3>Video: Usare cat</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/fba83d11-cb13-4df8-9239-cb8f73dc3bdc-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="lavorare-con-file-di-grandi-dimensioni">Lavorare con File di Grandi Dimensioni</h3><p>Gli amministratori di sistema devono lavorare con file di configurazione, file di testo, file di documentazione e file di log. Alcuni di questi file possono essere grandi o diventare piuttosto grandi in quanto accumulano dati con il tempo. Questi file richiederanno sia la visualizzazione che l'aggiornamento amministrativo. In questa sezione, imparerai come gestire file così grandi.</p><p>Ad esempio, un sistema bancario potrebbe mantenere un semplice file di log di grandi dimensioni per registrare i dettagli di tutte le transazioni bancomat di un giorno. A causa di un attacco di sicurezza o di un malfunzionamento, l'amministratore potrebbe essere costretto a verificare alcuni dati navigando all'interno del file. In tali casi, l'apertura diretta del file in un editor causerà problemi, a causa dell'elevato utilizzo della memoria, poiché un editor di solito proverà a leggere prima l'intero file in memoria. Tuttavia, si può usare <strong>less</strong> per visualizzare il contenuto di un file così grande, scorrere su e giù pagina per pagina, senza che il sistema debba posizionare l'intero file in memoria prima di iniziare. Questo è molto più veloce che usare un editor di testo.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/free-file-transfer.jpg" class="kg-image" alt="free-file-transfer" width="500" height="501" loading="lazy"></figure><p>Per visualizzare un file chiamato <strong>somefile</strong> si può digitare uno dei seguenti comandi:</p><p><strong><code>$ less somefile</code></strong><br><strong><code>$ cat somefile | less</code></strong></p><p>Per impostazione predefinita, le <strong>pagine di manuale</strong> sono visualizzate tramite il comando <strong>less</strong>. Potresti avere incontrato l'utility più vecchia <strong>more</strong> che ha la stessa funzione di base ma meno funzionalità.</p><h3 id="head">head</h3><p><strong>head</strong> legge le prime righe (10 per impostazione predefinita) di ciascun file indicato come argomento, e le visualizza sull'output standard. Puoi passare un numero diverso di righe come opzione.</p><p>Ad esempio, se vuoi stampare le prime 5 righe da <strong><code>/etc/default/grub</code></strong>, usa il seguente comando:</p><p><strong><code>$ head –n 5 /etc/default/grub</code></strong></p><p>Puoi anche semplicemente digitare:</p><p><strong><code>head -5 /etc/default/grub</code></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/headubuntu.png" class="kg-image" alt="headubuntu" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/headubuntu.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/headubuntu.png 723w" sizes="(min-width: 720px) 720px" width="723" height="336" loading="lazy"><figcaption>head</figcaption></figure><h3 id="tail">tail</h3><p><strong>tail</strong> stampa le ultime righe di ciascun file passato come argomento e lo visualizza sull'output standard. Per impostazione predefinita, visualizza le ultime 10 righe. Puoi passare un numero diverso di righe come opzione. <strong>tail</strong> è particolarmente utile quando stai cercando di risolvere qualunque tipo di problema usando i file di log, poiché probabilmente vorrai vedere le righe più recenti di output.</p><p>Ad esempio, per visualizzare le ultime 15 righe di <strong>somefile.log</strong>, usa il seguente comando:</p><p><strong><code>$ tail -n 15 somefile.log</code></strong></p><p>Puoi anche semplicemente digitare:</p><p><strong><code>tail -15 somefile.log</code></strong></p><p>Per monitorare continuamente un nuovo output in un file di log al quale vengono aggiunti dati:</p><p><strong><code>$ tail -f somefile.log</code></strong></p><p>Questo comando visualizzerà continuamente qualsiasi nuova riga venga inserita in <strong><code>somefile.log</code></strong> non appena essa appare. Pertanto ti consente di monitorare qualsiasi attività corrente che venga segnalata e registrata.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/tailubuntu.png" class="kg-image" alt="tailubuntu" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/tailubuntu.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/tailubuntu.png 723w" sizes="(min-width: 720px) 720px" width="723" height="336" loading="lazy"><figcaption>tail</figcaption></figure><h3 id="visualizzare-file-compressi">Visualizzare File Compressi</h3><p>Quando si lavora con file compressi, molti comandi standard non possono essere utilizzati direttamente. Per molti programmi di manipolazione di file e di testo comunemente utilizzati, esiste anche una versione appositamente progettata per funzionare direttamente con i file compressi. Queste utility associate hanno la lettera "z" prefissata al loro nome. Ad esempio, abbiamo programmi di utilità come <strong>zcat</strong>, <strong>zless</strong>, <strong>zdiff</strong> e <strong>zgrep</strong>.</p><p>Ecco una tabella che elenca alcuni comandi della famiglia <strong>z</strong>:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Description</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>$ zcat file-compresso.txt.gz</code></strong></td>
<td>Per visualizzare un file compresso</td>
</tr>
<tr>
<td><strong><code>$ zless somefile.gz</code></strong><br>oppure<br><strong><code>$ zmore somefile.gz</code></strong></td>
<td>Per visualizzare e spostarsi in un file compressso</td>
</tr>
<tr>
<td><strong><code>$ zgrep -i less somefile.gz</code></strong></td>
<td>Per cercare all'interno di un file compresso</td>
</tr>
<tr>
<td><strong><code>$ zdiff file1.txt.gz file2.txt.gz</code></strong></td>
<td>Per confrontare due file compressi</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Nota che se esegui <strong>zless</strong> su un file non compresso, funzionerà comunque e ignorerà la fase di decompressione. Esistono anche programmi di utilità equivalenti per altri metodi di compressione oltre a <strong>gzip</strong>, ad esempio, abbiamo <strong>bzcat</strong> e <strong>bzless</strong> associati a <strong>bzip2</strong>, e <strong>xzcat</strong> e <strong>xzless</strong> associati a <strong>xz</strong>.</p><h3 id="introduzione-a-sed-e-awk">Introduzione a sed e awk</h3><p>È molto comune creare e quindi modificare ripetutamente e/o estrarre contenuti da un file. Impariamo come usare <strong>sed</strong> e <strong>awk</strong> per eseguire facilmente tali operazioni.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch12_screen12a.jpg" class="kg-image" alt="LFS01_ch12_screen12a" width="330" height="248" loading="lazy"></figure><p>Tieni presente che molti utenti e amministratori Linux scriveranno script utilizzando linguaggi di scripting completi come Python e Perl, piuttosto che usare <strong>sed</strong> e <strong>awk</strong> (e alcune altre utility che discuteremo più avanti). L'uso di tali utility va sicuramente bene nella maggior parte dei casi; bisognerebbe sempre essere liberi di usare gli strumenti con cui si ha dimestichezza. Tuttavia, le utility che vengono descritte qui sono molto più leggere; cioè usano meno risorse di sistema e hanno tempi di esecuzione più veloci. Ci sono situazioni (come durante l'avvio del sistema) in cui molto tempo sarebbe sprecato utilizzando gli strumenti più complicati e il sistema potrebbe non essere nemmeno in grado di eseguirli. Quindi, gli strumenti più semplici saranno sempre necessari.</p><h3 id="sed">sed</h3><p><strong>sed</strong> è un potente strumento di elaborazione del testo ed è una delle utility UNIX più antiche e popolari. Viene utilizzato per modificare il contenuto di un file o un flusso in input, di solito posizionando il contenuto in un nuovo file o flusso di output. Il suo nome è un'abbreviazione per stream editor.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch12_screen_13.jpg" class="kg-image" alt="LFS01_ch12_screen_13" width="440" height="196" loading="lazy"></figure><p><strong>sed</strong> può filtrare il testo e eseguire sostituzioni nei flussi di dati.</p><p>I dati da una sorgente/file di input (o flusso) vengono presi e spostati in uno spazio di lavoro. L'intero elenco di operazioni/modifiche viene applicato sui dati nello spazio di lavoro e il contenuto finale viene immesso nello standard output (o flusso).</p><h3 id="la-sintassi-del-comando-sed">La Sintassi del Comando sed</h3><p>Puoi eseguire <strong>sed</strong> usando comandi come quelli elencati nella tabella seguente.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>sed -e comando &lt;nomefile&gt;</code></strong></td>
<td>Specifica i comandi di modifica nella riga di comando, opera sul file e inserisce il risultato nello standard output (ad esempio il terminale)</td>
</tr>
<tr>
<td><strong><code>sed -f scriptfile &lt;nomefile&gt;</code></strong></td>
<td>Specifica un file di script che contiene i comandi <strong>sed</strong>, opera sul file e inserisce il risultato nello standard output</td>
</tr>
<tr>
<td><strong><code>echo "Ti odio" \| sed s/odio/amo/</code></strong></td>
<td>Usa <strong>sed</strong>&nbsp;per filtrare lo standard input e inserisce il risultato nello standard output</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>L'opzione <strong><code>-e</code></strong> consente di specificare simultaneamente più comandi di modifica nella riga di comando. Non è necessario se hai solo un'operazione da effettuare.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/fedorased.png" class="kg-image" alt="fedorased" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/fedorased.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/fedorased.png 902w" sizes="(min-width: 720px) 720px" width="902" height="665" loading="lazy"><figcaption>La Sintassi del Comando sel</figcaption></figure><h3 id="operazioni-di-base-di-sed">Operazioni di Base di sed</h3><p>Ora che sai che puoi eseguire più operazioni di editing e filtraggio con <strong>sed</strong>, illustriamo alcune di esse in modo più dettagliato. La tabella spiega alcune operazioni di base, dove <strong>pattern</strong> è la stringa corrente e <strong>replace_string</strong> è la nuova stringa:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>sed s/pattern/replace_string/ file</code></strong></td>
<td>Sostituisce la prima occorrenza della stringa in ciascuna riga</td>
</tr>
<tr>
<td><strong><code>sed s/pattern/replace_string/g file</code></strong></td>
<td>Sostituisce tutte le occorrenze della stringa in ciascuna riga</td>
</tr>
<tr>
<td><strong><code>sed 1,3s/pattern/replace_string/g file</code></strong></td>
<td>Sostituisce tutte le occorrenze della stringa in un intervallo di righe</td>
</tr>
<tr>
<td><strong><code>sed -i s/pattern/replace_string/g file</code></strong></td>
<td>Salva le modifiche per le stringhe sostituite nello stesso file</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Devi usare l'opzione <strong>-i</strong> con accortezza, in quanto l'azione non è reversibile. È sempre più sicuro usare <strong>sed</strong> senza l'opzione <strong>–i</strong> poi sostituire tu stesso il file, come mostrato nell'esempio seguente:</p><p><strong><code>$ sed s/pattern/replace_string/g file1 &gt; file2</code></strong></p><p>Il comando qui sopra sostituirà tutte le occorrenze di <strong>pattern</strong> con <strong>replace_string</strong> in <strong>file1</strong> e sposterà il contenuto in <strong>file2</strong>. Il contenuto di <strong>file2</strong> può essere visualizzato con <strong>cat file2</strong>. Se approvi, puoi quindi sovrascrivere il file originale con <strong>mv file2 file1</strong>.</p><p>Esempio: per sostituire <strong>01/02/…</strong> con <strong>JAN/FEB/…</strong> (il numero del mese con il nome del mese abbreviato - in inglese)</p><pre><code class="language-bash">sed -e 's/01/JAN/' -e 's/02/FEB/' -e 's/03/MAR/' -e 's/04/APR/' -e 's/05/MAY/' \
 &nbsp; &nbsp;-e 's/06/JUN/' -e 's/07/JUL/' -e 's/08/AUG/' -e 's/09/SEP/' -e 's/10/OCT/' \
 &nbsp; &nbsp;-e 's/11/NOV/' -e 's/12/DEC/'**
</code></pre><!--kg-card-begin: html--><h3>Video: Usare sed</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/8a5ec909-76f5-4085-9b47-15a8181047c8-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video><!--kg-card-end: html--><h3 id="awk">awk</h3><p><strong>awk</strong> viene utilizzato per estrarre e quindi stampare contenuti specifici di un file e viene spesso utilizzato per costruire report. È stato creato dall'azienda Bell Labs negli anni '70 e deriva il suo nome dalle iniziali del cognome dei suoi autori: Alfred Aho, Peter Weinberger e Brian Kernigan.</p><p><strong>awk</strong> ha le seguenti funzionalità:</p><ul><li>È una potente utilità e un linguaggio di programmazione interpretato.</li><li>Viene utilizzato per manipolare i file di dati e per il recupero e l'elaborazione del testo.</li><li>Funziona bene con i campi (contenenti un singolo pezzo di dati, essenzialmente una colonna) e record (una raccolta di campi, essenzialmente una riga in un file).</li></ul><p><strong>awk</strong> viene usato come mostrato qui sotto:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/awkmint.png" class="kg-image" alt="awkmint" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/awkmint.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/awkmint.png 821w" sizes="(min-width: 720px) 720px" width="821" height="581" loading="lazy"><figcaption>awk</figcaption></figure><p>Come per <strong>sed</strong>, brevi comandi per <strong>awk</strong> possono essere specificati direttamente nella riga di comando, ma uno script più complesso può essere salvato in un file che è possibile passare come argomento per l'opzione <strong>-f</strong>.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>awk ‘comando’&nbsp; file</code></strong></td>
<td>Specifica un comando direttamente sulla riga di comando</td>
</tr>
<tr>
<td><strong><code>awk -f scriptfile file</code></strong></td>
<td>Specifica un file che contiene lo script da eseguire</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="operazioni-di-base-di-awk">Operazioni di Base di awk</h3><p>La tabella spiega le attività di base che possono essere eseguite utilizzando <strong>awk</strong>. Il file di input viene letto una riga alla volta e, per ogni riga, <strong>awk</strong> cerca corrispondenza con il dato modello nel dato ordine ed esegue l'azione richiesta. L'opzione <strong><code>-F</code></strong> consente di specificare un particolare carattere come <em>separatore di campo</em>. Ad esempio, il file <strong><code>/etc/passwd</code></strong> usa "<strong><code>:</code></strong>" per separare i campi, quindi, con il file <strong><code>/etc/passwd</code></strong> viene usata l'opzione <strong><code>-F:</code></strong>.</p><p>Il comando/azione in <strong>awk</strong> deve essere racchiuso da apostrofi (o virgolette singole (')). <strong>awk</strong> può essere usato come segue:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>awk '{ print $0 }' /etc/passwd</code></strong></td>
<td>Stampa l'intero file</td>
</tr>
<tr>
<td><strong><code>awk -F: '{ print $1 }' /etc/passwd</code></strong></td>
<td>Stampa il primo campo (colonna) di ogni riga, separato da "<code>:</code>"</td>
</tr>
<tr>
<td><strong><code>awk -F: '{ print $1 $7 }' /etc/passwd</code></strong></td>
<td>Stampa il primo e settimo campo di ogni riga</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="utillity-di-manipolazione-file">Utillity di Manipolazione File</h3><p>Nella gestione dei file, potrebbe essere necessario eseguire attività come l'ordinamento dei dati e la copia dei dati da una posizione all'altra. Linux fornisce numerose utility di manipolazione dei file che è possibile utilizzare mentre si lavora con i file di testo. In questa sezione, imparerai i seguenti programmi di manipolazione dei file:</p><ul><li><strong>sort</strong></li><li><strong>uniq</strong></li><li><strong>paste</strong></li><li><strong>join</strong></li><li><strong>split</strong></li></ul><p>Imparerai anche &nbsp;le espressioni regolari e i pattern di ricerca.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/penguin-156529_640.png" class="kg-image" alt="penguin-156529_640" width="533" height="640" loading="lazy"></figure><h3 id="sort-function sort() { [native code] }1">sort</h3><p><strong>sort</strong> viene utilizzato per riorganizzare le righe di un file di testo, in ordine crescente o discendente secondo una chiave di ordinamento. È inoltre possibile ordinare rispetto a campi particolari (colonne) in un file. La chiave di ordinamento predefinita è l'ordine dei caratteri ASCII (cioè essenzialmente l'ordine alfabetico).</p><p><strong>sort</strong> può essere usato come segue:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Sintassi</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>sort &lt;nomefile&gt;</code></strong></td>
<td>Ordina le righe nel file specificato, secondo i caratteri all'inizio di ogni riga</td>
</tr>
<tr>
<td><strong><code>cat file1 file2 | sort</code></strong></td>
<td>Combina due file, poi ordina le righe e visualizza il risultato nel terminale</td>
</tr>
<tr>
<td><strong><code>sort -r &lt;nomefile&gt;</code></strong></td>
<td>Ordina le righe in ordine inverso</td>
</tr>
<tr>
<td><strong><code>sort -k 3 &lt;nomefile&gt;</code></strong></td>
<td>Ordina le righe in base al terzo campo su ogni riga invece che dall'inizio</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Se usato con l'opzine <strong><code>-u</code></strong>, &nbsp;<strong>sort</strong> verifica che i valori siano univoci dopo l'ordinamento dei record (righe). È l'equivalente dell'esecuzione di <strong>uniq</strong> (di cui discuteremo) sul risultato di <strong>sort</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/sort.png" class="kg-image" alt="sort" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/sort.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/sort.png 724w" sizes="(min-width: 720px) 720px" width="724" height="382" loading="lazy"><figcaption>sort</figcaption></figure><h3 id="uniq">uniq</h3><p><strong>uniq</strong> rimuove le righe consecutive duplicate in un file di testo ed è utile per semplificare la visualizzazione del testo.</p><p>Poichè <strong>uniq</strong> richiede che le voci duplicate debbano essere consecutive, si esegue spesso un ordinamento prima e quindi tramite pipe (<code>|</code>) si indirizza l'uscita in <strong>uniq</strong>; se l'ordinamento viene utilizzato con l'opzione <strong>-u</strong>, può fare tutto questo in un solo passo.</p><p>Per rimuovere le voci duplicate da più file alla volta, utilizza il comando seguente:</p><p><strong><code>sort file1 file2 | uniq &gt; file3</code></strong></p><p>oppure</p><p><strong><code>sort -u file1 file2 &gt; file3</code></strong></p><p>Per contare il numero di voci duplicate, utilizza il comando seguente:</p><p><strong><code>uniq -c filename</code></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/suseuniq.png" class="kg-image" alt="suseuniq" width="544" height="550" loading="lazy"><figcaption>uniq</figcaption></figure><h3 id="paste">paste</h3><p>Supponiamo di avere un file che contenga il nome completo di tutti i dipendenti e di un altro file che elenca i loro numeri di telefono e ID dipendente. Vuoi creare un nuovo file che contenga tutti i dati elencati in tre colonne: nome, ID dipendente e numero di telefono. Come puoi farlo in modo efficace senza investire troppo tempo?</p><p><strong>paste</strong> può essere utilizzato per creare un singolo file contenente tutte e tre le colonne. Le diverse colonne sono identificate in base ai delimitatori (spaziatura utilizzata per separare due campi). Ad esempio, i delimitatori possono essere uno spazio vuoto, un carattere di tabulazione un <strong>carattere di ritorno a capo</strong>. Nell'immagine fornita, un singolo spazio viene utilizzato come delimitatore in tutti i file.</p><p><strong>paste</strong> accetta le seguenti opzioni:</p><ul><li><strong>-d</strong> delimitatori, specifica un elenco di delimitatori da utilizzare al posto dei caratteri di tabulazione per separare i valori consecutivi su una singola riga. Ogni delimitatore viene utilizzato a turno; quando l'elenco è stato consumato, <strong>paste</strong> ricomincia al primo delimitatore.</li><li><strong>-s</strong>, che fa sì che <strong>paste</strong> aggiunga i dati in serie piuttosto che in parallelo; cioè, in modo orizzontale piuttosto che verticale.</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch12_screen27.jpg" class="kg-image" alt="LFS01_ch12_screen27" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/LFS01_ch12_screen27.jpg 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch12_screen27.jpg 750w" sizes="(min-width: 720px) 720px" width="750" height="193" loading="lazy"></figure><h4 id="usare-paste">Usare paste</h4><p><strong>paste</strong> può essere utilizzato per combinare campi (come nome o numero di telefono) da file diversi, oltre a combinare righe da più file. Ad esempio, la riga uno da <strong>file1</strong> può essere combinata con la riga uno di <strong>file2</strong>, la riga due da <strong>file1</strong> può essere combinata con la riga due di <strong>file2</strong> e così via.</p><p>Per unire i contenuti da due file puoi eseguire:</p><p><strong><code>$ paste file1 file2</code></strong></p><p>La sintassi per utilizzare un delimitatore diverso è la seguente:</p><p><strong><code>$ paste -d, file1 file2</code></strong></p><p>Delimitatori comuni sono spazio, tab, '<code>|</code>', '<code>,</code>', etc.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/paste.png" class="kg-image" alt="paste" width="475" height="428" loading="lazy"><figcaption>Usare paste</figcaption></figure><h3 id="join-function join() { [native code] }1">join</h3><p>Supponi di avere due file con alcune colonne simili. Hai salvato i numeri di telefono dei dipendenti in due file, uno con il loro nome e l'altro con il loro cognome. Si desidera combinare i file senza ripetere i dati di colonne comuni. Come si raggiunge questo scopo?</p><p>L'attività di cui sopra può essere svolta usando <strong>join</strong>, che è essenzialmente una versione migliorata di <strong>paste</strong>. Prima controlla se i file condividono campi comuni, come nomi o numeri di telefono, quindi unisce le righe nei due file in base a un campo comune.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch12_screen30.jpg" class="kg-image" alt="LFS01_ch12_screen30" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/LFS01_ch12_screen30.jpg 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch12_screen30.jpg 1000w" sizes="(min-width: 720px) 720px" width="1000" height="300" loading="lazy"></figure><h4 id="usare-join">Usare join</h4><p>Per combinare due file su un campo comune, al prompt dei comandi digita <strong><code>join file1 file2</code></strong>, poi <strong><code>Invio</code></strong>.</p><p>Ad esempio, il campo comune (ovvero contiene gli stessi valori) tra il file <strong>phonebook</strong> e <strong>cities</strong> è il numero di telefono, il risultato dell'unione di questi due file è mostrato nella seguente videata.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/join.png" class="kg-image" alt="join" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/join.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/join.png 635w" width="635" height="333" loading="lazy"><figcaption>Usare join</figcaption></figure><h3 id="split">split</h3><p><strong>split</strong> viene utilizzato per spezzare (o dividere) un file in segmenti di dimensioni uguali per una visualizzazione e manipolazione più facili, e viene generalmente utilizzato solo su file relativamente grandi. Per impostazione predefinita, <strong>split</strong> rompe un file in segmenti di 1000 righe. Il file originale rimane invariato e viene creato un insieme di nuovi file con lo stesso nome più un prefisso aggiunto. Per impostazione predefinita, viene aggiunto il prefisso <strong>x</strong>. Per dividere un file in segmenti, utilizzare il comando <strong><code>split nomefile</code></strong>.</p><p>Per dividere un file in segmenti utilizzando un prefisso diverso, utilizzare il comando <strong><code>split nomefile &lt;Prefisso&gt;</code></strong>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch012_screen31.jpg" class="kg-image" alt="LFS01_ch012_screen31" width="468" height="223" loading="lazy"></figure><h4 id="usare-split">Usare split</h4><p>Applicheremo <strong>split</strong> al file del dizionario American-English che contiene oltre 99,000 righe:</p><p><strong><code>$ wc -l american-english</code></strong><br><strong><code>99171 american-english</code></strong></p><p>abbiamo usato il comando <strong>wc</strong> (conteggia parole, verrà discusso a breve) per ottenere il numero di righe nel file, poi digitando:</p><p><strong><code>$ split american-english dictionary</code></strong></p><p>divideremo il file American-English in 100 segmenti di uguale dimensione chiamati <strong>dictionaryxx</strong>. L'ultimo segmento sarà naturalmente in qualche modo più piccolo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/splitubuntu.png" class="kg-image" alt="splitubuntu" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/splitubuntu.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/splitubuntu.png 723w" sizes="(min-width: 720px) 720px" width="723" height="336" loading="lazy"><figcaption>Usare split</figcaption></figure><h3 id="espressioni-regolari-e-modelli-di-ricerca">Espressioni Regolari e Modelli di Ricerca</h3><p>Le <strong>espressioni regolari</strong> sono stringhe di testo utilizzate per trovare la corrispondenza con un modello specifico o per cercare una posizione specifica, come l'inizio o la fine di una riga o una parola. Le espressioni regolari possono contenere sia caratteri normali che i cosiddetti meta-caratteri, come <strong><code>*</code></strong> e <strong><code>$</code></strong>.</p><p>Molti editor e utility di testo come <strong>vi</strong>, <strong>sed</strong>, <strong>awk</strong>, <strong>find</strong> e <strong>grep</strong> lavorano ampiamente con espressioni regolari. Alcuni dei popolari linguaggi di programmazione che usano espressioni regolari includono Perl, Python e Ruby. Può diventare piuttosto complicato e ci sono interi libri scritti sulle espressioni regolari; quindi, non faremo altro che sfiorare la superficie qui.</p><p>Queste espressioni regolari sono diverse dai caratteri jolly (wildcard o meta-caratteri) utilizzati per la corrispondenza del nome file nelle shell di comando come bash (che abbiamo trattato nel capitolo 7, &nbsp;<strong>Operazioni da Riga di Comando</strong>). La tabella seguente elenca i modelli di ricerca e il loro utilizzo.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Modello di Ricerca</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>.</code> (punto)</strong></td>
<td>Corrispondenza con qualsiasi singolo carattere</td>
</tr>
<tr>
<td><strong><code>a|z</code></strong></td>
<td>Corrispondenza con a oppure z</td>
</tr>
<tr>
<td><strong><code>$</code></strong></td>
<td>Corrispondenza con la fine di una riga</td>
</tr>
<tr>
<td><strong><code>^</code></strong></td>
<td>Corrispondenza con l'inizio di una riga</td>
</tr>
<tr>
<td><strong><code>*</code></strong></td>
<td>Corrispondenza con l'elemento precedente 0 o più volte</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="usare-le-espressioni-regolari-e-i-modelli-di-ricerca">Usare le Espressioni Regolari e i Modelli di Ricerca</h3><p>Considera per esempio la seguente frase: <strong>the quick brown fox jumped over the lazy dog</strong>.</p><p>Alcuni dei modelli che possono essere applicati a questa frase sono i seguenti:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Modello</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>a..</code></strong></td>
<td>corrispondenza con <strong>azy</strong></td>
</tr>
<tr>
<td><strong><code>b.|j.</code></strong></td>
<td>corrispondenza sia con <strong>br</strong> che <strong>ju</strong></td>
</tr>
<tr>
<td><strong><code>..$</code></strong></td>
<td>corrispondenza con <strong>og</strong></td>
</tr>
<tr>
<td><strong><code>l.*</code></strong></td>
<td>corrispondenza con <strong>lazy dog</strong></td>
</tr>
<tr>
<td><strong><code>l.*y</code></strong></td>
<td>corrispondenza con <strong>lazy</strong></td>
</tr>
<tr>
<td><strong><code>the.*</code></strong></td>
<td>corrispondenza con l'intera frase</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="grep">grep</h3><p><strong>grep</strong> è ampiamente utilizzato come strumento di ricerca di testo primario. Scorre un file cercando specifici modelli e può essere utilizzato con espressioni regolari, nonché stringhe semplici, come mostrato nella tabella:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>grep [pattern] &lt;nomefile&gt;</code></strong></td>
<td>Cerca il pattern in un file e stampa tutte le righe con cui c'è corrispondenza</td>
</tr>
<tr>
<td><strong><code>grep -v [pattern] &lt;nomefile&gt;</code></strong></td>
<td>Stampa tutte le righe che <strong>non</strong> trovano corrispondenza con pattern</td>
</tr>
<tr>
<td><strong><code>grep [0-9] &lt;nomefile&gt;</code></strong></td>
<td>Stampa le righe che contengono numeri (da <strong>0</strong> a<strong>9</strong>)</td>
</tr>
<tr>
<td><strong><code>grep -C 3 [pattern] &lt;nomefile&gt;</code></strong></td>
<td>Stampa un contesto di righe (un numero di righe specificato sopra e sotto pattern) quando trova corrispondenza. Qui il numero di righe specificato è 3</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="strings">strings</h3><p><strong>strings</strong> viene utilizzato per estrarre tutte le stringhe di caratteri stampabili che si trovano nel file o nei file forniti come argomenti. È utile per individuare contenuti leggibili dall'uomo incorporati nei file binari; per i file di testo si può semplicemente utilizzare <strong>grep</strong>.</p><p>Ad esempio, per cercare la stringa <strong>my_string</strong> in un foglio di calcolo:<br><strong><code>$ strings book1.xls | grep my_string</code></strong></p><p>La videata mostra una ricerca di una serie di programmi per vedere quali hanno licenze GPL di varie versioni.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/strings.png" class="kg-image" alt="strings" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/strings.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/strings.png 792w" sizes="(min-width: 720px) 720px" width="792" height="335" loading="lazy"><figcaption>strings</figcaption></figure><h3 id="tr">tr</h3><p>In questa sezione, imparerai alcune utility di testo aggiuntive che è possibile utilizzare per eseguire varie azioni sui file Linux, come sostituire maiuscole con minuscole e viceversa, o determinare il conteggio di parole, righe e caratteri in un file.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/trfedora.png" class="kg-image" alt="trfedora" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/trfedora.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/trfedora.png 800w" sizes="(min-width: 720px) 720px" width="800" height="600" loading="lazy"><figcaption>tr</figcaption></figure><p>L'utility <strong>tr</strong> viene utilizzata per trasformare i caratteri specificati in altri caratteri o per eliminarli. La sintassi generale è la seguente:</p><p><strong><code>$ tr [opzioni] set1 [set2]</code></strong></p><p>Gli elementi tra parentesi quadre sono opzionali. <strong>tr</strong> richiede almeno un argomento e ne accetta un massimo di due. Il primo, denominato <strong>set1</strong> nell'esempio, elenca i caratteri nel testo che devono essere sostituiti o rimossi. Il secondo, <strong>set2</strong>, elenca i caratteri che prenderanno il posto dei caratteri elencati come primo argomento. Talvolta il contenuto degli argomenti <strong>set1</strong> e <strong>set2</strong> deve essere racchiuso tra apostrofi (o apici singoli (<code>'</code>)) in modo che la shell possa ignorare che essi hanno un signicato speciale per lei. È in genere sicuro (e potrebbe essere richiesto) l'uso di singoli apici attorno a ognuno di questi argomenti come vedrai negli esempi seguenti.</p><p>Ad esempio, supponi di avere un file denominato <strong>city</strong> che contiene parecchie righe di testo in maiuscolo e minuscolo. Per trasformare tutti i caratteri minuscoli in maiuscoli al prompt dei comandi digita <strong><code>cat city | tr a-z A-Z</code></strong> quindi premi <strong><code>Invio</code></strong>.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ</code></strong></td>
<td>Converte minuscole in maiuscole</td>
</tr>
<tr>
<td><strong><code>tr '{}' '()' &lt; inputfile &gt; outputfile</code></strong></td>
<td>Trasforma parentesi graffe in parentesi tonde</td>
</tr>
<tr>
<td><strong><code>echo "This is for testing" | tr [:space:] '\t'</code></strong></td>
<td>Trasforma i white-space (spazi, ritorni a capo ecc.) in corrispondenti caratteri di tabulazione</td>
</tr>
<tr>
<td><strong><code>echo "This   is   for    testing" | tr -s [:space:]</code></strong></td>
<td>Riduce a un singolo carattere le ripetizioni di caratteri specificati nell'opzione <strong><code>-s</code></strong>, in questo caso comprime tutti gli spazi</td>
</tr>
<tr>
<td><strong><code>echo "the geek stuff" | tr -d 't'</code></strong></td>
<td>Elimina i caratteri specificati usando l'opzione <strong><code>-d</code></strong>, in questo caso toglie tutte le "t"</td>
</tr>
<tr>
<td><strong><code>echo "my username is 432234" | tr -cd [:digit:]</code></strong></td>
<td>Conserva solo quanto non specificato nell'insieme di caratteri dell'opzione <strong><code>-c</code></strong> (in questo caso conserva solo i numeri)</td>
</tr>
<tr>
<td><strong><code>tr -cd [:print:] &lt; file.txt</code></strong></td>
<td>Rimuove tutti i caratteri non stampabili da <code>file.txt</code></td>
</tr>
<tr>
<td><strong><code>tr -s '\n' ' ' &lt; file.txt</code></strong></td>
<td>Unisce tutte le righe in <code>file.txt</code> in una singola riga</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="tee">tee</h3><p><strong>tee</strong> riceve il risultato di qualunque comando e, mentre lo invia allo standard output, lo salva anche in un file. In altre parole genera due flussi con il risultato del comando: un flusso viene visualizzato nello standard output e un altro viene salvato su un file.</p><p>Per esempio per elencare il contenuto di una directory sullo schermo e salvare il risultato in un file, al prompt dei comandi digita <strong><code>ls -l | tee nuovofile</code></strong> poi premi <strong>Invio</strong>.</p><p>Digitando <strong>cat nuovofile</strong> verrà visualizzato il risultato di <strong><code>ls –l</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/tee.png" class="kg-image" alt="tee" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/tee.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/tee.png 604w" width="604" height="257" loading="lazy"><figcaption>tee</figcaption></figure><h3 id="wc">wc</h3><p><strong>wc</strong> (<strong>w</strong>ord <strong>c</strong>ount - conteggio parole) conta il numero di righe, parole e caratteri in un file o elenco di file. Le opzioni sono riportate nella tabella seguente.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Opzione</strong></th>
<th><strong>Descrizione</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>–l</code></strong></td>
<td>Visualizza il numero di righe</td>
</tr>
<tr>
<td><strong><code>-c</code></strong></td>
<td>Visualizza il numero di byte</td>
</tr>
<tr>
<td><strong><code>-w</code></strong></td>
<td>Visualizza il numero di parole</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Per impostazione predefinita, tutte e tre queste opzioni sono attive.</p><p>Ad esempio, per stampare solo il numero di righe contenute in un file, digita <strong><code>wc -l nomefile</code></strong> poi premi <strong>Invio</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/wcrhel7.png" class="kg-image" alt="wcrhel7" width="475" height="219" loading="lazy"><figcaption>wc</figcaption></figure><h3 id="cut">cut</h3><p><strong>cut</strong> viene utilizzato per manipolare i file basati su colonne ed è progettato per estrarre colonne specifiche. Il separatore di colonne predefinito è il carattere <strong>tab</strong>. Un delimitatore diverso può essere passato come opzione del comando.</p><p>Ad esempio, per visualizzare la terza colonna delimitata da uno spazio, digita al prompt dei comandi <strong><code>ls -l | cut -d" " -f3</code></strong> poi premi <strong>Invio</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/cutrhel7.png" class="kg-image" alt="cutrhel7" width="315" height="314" loading="lazy"><figcaption>cut</figcaption></figure><h3 id="riepilogo-del-capitolo-6">Riepilogo del Capitolo</h3><p>Hai completato il capitolo 13. Riassumiamo i concetti chiave trattati:</p><ul><li>La riga di comando consente spesso agli utenti di eseguire attività in modo più efficiente rispetto alla GUI.</li><li><strong>cat</strong>, abbreviazione di concatenate, viene utilizzato per leggere, stampare e combinare file.</li><li><strong>echo</strong> visualizza una riga di testo sullo standard output oppure la scrive in un file.</li><li><strong>sed</strong> è un popolare editor di flusso spesso utilizzato per filtrare ed eseguire sostituzioni su file e flussi di dati di testo.</li><li><strong>awk</strong> è un linguaggio di programmazione interpretato, tipicamente utilizzato come strumento di estrazione e report di dati.</li><li><strong>sort</strong> viene utilizzato per ordinare i file di testo e l'output di flussi in ordine crescente o decrescente.</li><li><strong>uniq</strong> elimina le voci duplicate in un file di testo.</li><li><strong>paste</strong> combina campi da file diversi. Può anche estrarre e combinare righe da più fonti.</li><li><strong>join</strong> combina le righe da due file in base a un campo comune. Funziona solo se i file condividono un campo comune.</li><li><strong>split</strong> divide un file di grandi dimensioni in segmenti di dimensioni uguali.</li><li>Le espressioni regolari sono stringhe di testo utilizzate per trovare corrispondenza con modelli di ricerca. Il modello può essere usato per cercare una posizione specifica, come l'inizio o la fine di una riga o una parola.</li><li><strong>grep</strong> cerca su file di testo e flussi di dati per modelli di ricerca e può essere utilizzato con espressioni regolari.</li><li><strong>tr</strong> trasforma caratteri, copia dallo standard input verso lo standard output e gestisce caratteri speciali.</li><li><strong>tee</strong> salva una copia dello standard output in un file mentre lo visualizza nel terminale.</li><li><strong>wc</strong> (word count - conteggio parole) visualizza il numero di righe, parole e caratteri in un file o un gruppo di file.</li><li><strong>cut</strong> estrae colonne da un file.</li><li><strong>less</strong> visualizza i file una schermata alla volta e consente di scorrere le schermate in entrambe le direzioni.</li><li><strong>head</strong> visualizza le prime righe di un file o un flusso di dati sullo standard output. Per impostazione predefinita, visualizza 10 righe.</li><li><strong>tail</strong> visualizza le ultime righe di un file o un flusso di dati sullo standard output. Per impostazione predefinita, visualizza 10 righe.</li><li><strong>strings</strong> estrae stringhe di caratteri stampabili da file binari.</li><li>La famiglia di comandi <strong>z</strong> viene utilizzata per leggere e lavorare con file compressi.</li></ul><h2 id="capitolo-14-operazioni-di-rete">Capitolo 14: Operazioni di Rete</h2><h3 id="obiettivi-formativi-10">Obiettivi Formativi</h3><p>Entro la fine di questo capitolo, dovresti essere in grado di:</p><ul><li>Spiegare i concetti di base delle reti, inclusi tipi di reti e problemi di risoluzione.</li><li>Configurare le interfacce di rete e utilizzare le utility di rete base, come ad esempio <strong>ifconfig</strong>, <strong>ip</strong>, <strong>ping</strong>, <strong>route</strong> e <strong>traceroute</strong>.</li><li>Utilizzare browser grafici e non grafici, come Lynx, w3m, Firefox, Chrome ed Epiphany.</li><li>Trasferire i file da client a server e viceversa utilizzando sia applicazioni in modalità grafica che di testo, come Filezilla, ftp, sftp, curl e wget.</li></ul><h3 id="introduzione-alle-reti">Introduzione alle Reti</h3><p>Una rete è un gruppo di computer e dispositivi di elaborazione collegati tramite canali di comunicazione, come cavi o supporti wireless. I computer collegati su una rete possono trovarsi nella stessa area geografica o distribuiti in tutto il mondo.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch11_screen03.jpg" class="kg-image" alt="LFS01_ch11_screen03" width="300" height="225" loading="lazy"></figure><p>Una rete è usata per:</p><ul><li>Consentire ai dispositivi collegati di comunicare tra loro.</li><li>Abilitare più utenti alla condivisione di dispositivi sulla rete, come server musicali e video, stampanti e scanner.</li><li>Condividere e gestire facilmente le informazioni attraverso i computer.</li></ul><p>La maggior parte delle organizzazioni ha sia una rete interna che una connessione Internet che consente agli utenti di comunicare con macchine e persone al di fuori dell'organizzazione. Internet è la più grande rete del mondo e può essere chiamata <em>"La rete delle reti"</em>.</p><h3 id="indirizzi-ip">Indirizzi IP</h3><p>I dispositivi collegati a una rete devono avere almeno un identificativo di indirizzo di rete univoco noto come <a href="https://it.wikipedia.org/wiki/Indirizzo_IP"><strong>IP</strong></a> (Protocollo Internet). L'indirizzo è essenziale per instradare pacchetti di informazioni attraverso la rete.</p><p>Lo scambio di informazioni attraverso la rete richiede l'utilizzo di flussi di piccoli pacchetti, ognuno dei quali contiene un pezzo delle informazioni che vanno da una macchina all'altra. Questi pacchetti contengono buffer di dati, insieme alle intestazioni che contengono informazioni circa la destinazione e la provenienza dei pacchetti e il modo in cui si adattano alla sequenza di pacchetti che costituisce il flusso. I protocolli e il software di rete sono piuttosto complicati a causa della diversità di macchine e sistemi operativi con i quali hanno a che fare, senza contare il fatto che anche standard molto vecchi devono essere supportati.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch11_screen04.jpg" class="kg-image" alt="LFS01_ch11_screen04" width="367" height="176" loading="lazy"><figcaption>Indirizzi IP</figcaption></figure><h3 id="ipv4-e-ipv6">IPv4 e IPv6</h3><p>Sono disponibili due diversi tipi di indirizzi IP: IPv4 (versione 4) e IPv6 (versione 6). IPv4 è il più vecchio e di gran lunga il più utilizzato, mentre IPv6 è più recente ed è progettato per superare limitazioni inerenti allo standard più vecchio e fornire molti più indirizzi possibili.</p><p>IPv4 utilizza 32 bit per gli indirizzi; sono disponibili <em>solo</em> &nbsp;4,3 miliardi di indirizzi univoci. Inoltre, molti indirizzi sono assegnati e riservati, ma non effettivamente utilizzati. IPv4 è considerato inadeguato per soddisfare le esigenze future perché il numero di dispositivi disponibili sulla rete globale è aumentato enormemente negli ultimi anni.</p><p>IPv6 utilizza 128 bit per gli indirizzi; ciò consente 3,4 x 10³⁸ indirizzi univoci. Se hai una rete di computer più ampia e desideri aggiungerne altri, potresti voler passare a IPv6, perché fornisce più indirizzi univoci. Tuttavia, può essere complesso migrare su IPv6; i due protocolli non sempre interagiscono bene. Pertanto, lo spostamento di attrezzature e indirizzi a IPv6 richiede uno sforzo significativo e non è stato così veloce come inizialmente previsto. Tratteremo IPv4 più di IPv6 poiché è più probabile che tu debba averci a che fare.</p><p>Uno dei motivi per cui IPv4 non è scomparso è che esistono modi per creare con efficacia molti più indirizzi disponibili con metodi come NAT (traduzione degli indirizzi di rete). NAT consente di condividere un indirizzo IP tra molti computer connessi localmente, ognuno dei quali ha un indirizzo univoco visto solo sulla rete locale. Sebbene questo sia utilizzato in contesti organizzativi, viene utilizzato anche nelle reti domestiche semplici. Ad esempio, se disponi di un router collegato al tuo provider Internet (come per un sistema di cavi), ti dà un indirizzo visibile esternamente, ma assegna a ogni dispositivo in casa tua un indirizzo locale individuale.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch11_screen05.jpg" class="kg-image" alt="LFS01_ch11_screen05" width="448" height="162" loading="lazy"></figure><h3 id="decodficare-indirizzi-ipv4">Decodficare Indirizzi IPv4</h3><p>Un indirizzo IPv4 a 32 bit è diviso in quattro sezioni a 8 bit chiamate <a href="https://en.wikipedia.org/wiki/Octet_%28computing%29">ottetti</a>.</p><p>Esempio:</p><pre><code>Indirizzo IP → &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;172 &nbsp;. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;16 &nbsp;. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;31 &nbsp;. &nbsp; &nbsp; &nbsp; &nbsp; 46
Formato Bit  → &nbsp; &nbsp;     10101100.      00010000.       0011111.   00101110
</code></pre><p><strong>NOTA</strong>: <em>Ottetto è semplicemente un'altra definizione per byte.</em></p><p>Gli indirizzi di rete sono divisi in cinque classi: A, B, C, D ed E. Le classi A, B e C sono divise in due parti: indirizzi di rete (Net ID) e indirizzo host (Host ID ). Il Net ID viene utilizzato per identificare la rete, mentre l'host ID viene utilizzato per identificare un host nella rete. La classe D viene utilizzata per applicazioni multicast speciali (le informazioni vengono trasmesse contemporaneamente a più computer) e la classe E è riservata per un uso futuro. In questa sezione parleremo delle classi A, B e C.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch11_screen06.jpg" class="kg-image" alt="LFS01_ch11_screen06" width="531" height="283" loading="lazy"><figcaption>Decodificare Indirizzi IPv4</figcaption></figure><h3 id="indirizzi-di-rete-di-classe-a">Indirizzi di Rete di Classe A</h3><p>Gli indirizzi di classe A utilizzano il primo ottetto di un indirizzo IP come Net ID e usano gli altri tre ottetti come host ID. Il primo bit del primo ottetto è sempre impostato su zero. Quindi puoi usare solo 7 bit per numeri di rete univoci. Di conseguenza, sono disponibili un massimo di 126 reti di classe A (gli indirizzi 0000000 e 1111111 sono riservati). Non sorprende che questo fosse fattibile solo quando c'erano pochissime reti uniche con un gran numero di host. Man mano che l'uso di Internet si espandeva, le classi B e C sono state aggiunte al fine di soddisfare la crescente domanda di reti indipendenti.</p><p>Ciascuna rete di classe A può avere fino a 16,7 milioni di indirizzi univoci. La gamma di indirizzi host va da <strong>1.0.0.0</strong> a <strong>127.255.255.255</strong>.</p><p><strong>NOTA</strong>: Il valore di un ottetto (oppure 8-bit), può variare da 0 a 255.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch11_screen07.jpg" class="kg-image" alt="LFS01_ch11_screen07" width="457" height="259" loading="lazy"><figcaption>Indirizzi di Rete di Classe A</figcaption></figure><h3 id="indirizzi-di-rete-di-classe-b">Indirizzi di Rete di Classe B</h3><p>Gli indirizzi di classe B usano i primi due ottetti dell'indirizzo IP come Net ID e gli ultimi due ottetti come host ID. I primi due bit del primo ottetto sono sempre impostati sul valore binario 10, quindi ci sono un massimo di 16.384 (14 bit) reti di classe B. Il primo ottetto di un indirizzo di Classe B ha valori da 128 a 191. L'introduzione delle reti di classe B ha ampliato il numero di reti, ma presto è diventato chiaro che sarebbe stato necessario un ulteriore livello.</p><p>Ogni rete di classe B può supportare un massimo di 65.536 host univoci sulla sua rete. La gamma di indirizzi host va da <strong>128.0.0.0</strong> a <strong>191.255.255.255</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch11_screen08.jpg" class="kg-image" alt="LFS01_ch11_screen08" width="457" height="263" loading="lazy"><figcaption>Indirizzi di Rete di Classe B</figcaption></figure><h3 id="indirizzi-di-rete-di-classe-c">Indirizzi di Rete di Classe C</h3><p>Gli indirizzi di classe C usano i primi tre ottetti dell'indirizzo IP come Net ID e l'ultimo ottetto come ID dell'host. I primi tre bit del primo ottetto sono impostati su 110 in binario, quindi sono disponibili quasi 2.1 milioni (21 bit) di reti di classe C. Il primo ottetto di un indirizzo di classe C ha valori da 192 a 223. Sono più comuni per reti più piccole che non hanno molti host univoci.</p><p>Ogni rete di classe C può supportare fino a 256 (8 bit) host univoci. L'intervallo di indirizzi host va da <strong>192.0.0.0</strong> a <strong>223.255.255.255</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/04/image-4.png" class="kg-image" alt="image-4" width="466" height="256" loading="lazy"><figcaption>Indirizzi di Rete di Classe C</figcaption></figure><h3 id="allocare-indirizzi-ip">Allocare Indirizzi IP</h3><p>In genere, una gamma di indirizzi IP è richiesta al tuo provider di servizi Internet (ISP) dall'amministratore di rete della tua organizzazione. Spesso, la scelta di quale classe di indirizzo IP ti viene fornita dipende dalle dimensioni della rete e dalle esigenze di crescita previste. Se NAT è in funzione, come in una rete domestica, si ottiene solo un indirizzo visibile esternamente!</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch11_screen10a.jpg" class="kg-image" alt="LFS01_ch11_screen10a" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/LFS01_ch11_screen10a.jpg 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch11_screen10a.jpg 822w" sizes="(min-width: 720px) 720px" width="822" height="602" loading="lazy"><figcaption>Allocazione Indirizzi IP</figcaption></figure><p>È possibile assegnare indirizzi IP ai computer su una rete manualmente o dinamicamente. L'assegnazione manuale aggiunge indirizzi statici (non cambiano mai) alla rete. Gli indirizzi assegnati dinamicamente possono cambiare ogni volta che esegui un riavvio o anche più spesso; il Protocollo di Configurazione Dinamica dell'Host (DHCP) viene utilizzato per assegnare indirizzi IP.</p><h3 id="risoluzione-del-nome">Risoluzione del Nome</h3><p>La risoluzione del nome viene utilizzata per convertire i valori numerici dell'indirizzo IP numerico in un formato leggibile dall'uomo noto come nome host. Per esempio, <strong>104.95.85.15</strong> è l'indirizzo IP numerico che si riferisce al nome host whitehouse.gov. I nomi degli host sono molto più facili da ricordare!</p><p>Dato un indirizzo IP, è possibile ottenere il suo nome host corrispondente. L'accesso alla macchina sulla rete diventa più semplice quando è possibile digitare il nome host anziché l'indirizzo IP.</p><p>Puoi visualizzare il nome host del tuo sistema semplicemente digitando <strong>hostname</strong> senza argomenti.</p><p><strong>NOTA</strong>: <em>Se gli passi un argomento, il sistema proverà a cambiare il suo nome host per abbinarlo, tuttavia, solo gli utenti root possono farlo.</em></p><p>Lo speciale nome host localhost è associato all'indirizzo IP <strong>127.0.0.1</strong> e descrive la macchina in cui ti trovi attualmente (che normalmente ha ulteriori indirizzi IP relativi alla rete).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch11_screen12.jpg" class="kg-image" alt="LFS01_ch11_screen12" width="447" height="360" loading="lazy"><figcaption>Videata che Mostra l'Indirizzo del Server del Sito Web della Fondazione Linux</figcaption></figure><!--kg-card-begin: html--><h3>Video: Configurazione della Rete</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/fccd6182-2956-47b2-a3d8-6dd2e15ef226-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="file-di-configurazione-della-rete">File di Configurazione della Rete</h3><p>I file di configurazione della rete sono essenziali per garantire che le interfacce funzionino correttamente. Si trovano nell'albero della directory <strong><code>/etc</code></strong>. Tuttavia, i file esatti utilizzati storicamente dipendono dalla particolare distribuzione Linux e versione utilizzata.</p><p>Per le configurazioni della famiglia Debian, i file di configurazione della rete di base possono essere trovati in <strong><code>/etc/network/</code></strong>, mentre per i sistemi della famiglia Red Hat e SUSE si deve guardare in <strong><code>/etc/sysconfig/network</code></strong>.</p><p>I sistemi moderni sottolineano l'uso di Network Manager, di cui abbiamo discusso brevemente quando abbiamo considerato l'amministrazione del sistema grafico, piuttosto che cercare di tenere il passo con la situazione dei file in <strong><code>/etc</code></strong>. Mentre le versioni grafiche di Network Manager sembrano in qualche modo diverse nelle differenti distribuzioni, l'utilità <strong>nmtui</strong> (mostrata nella videata seguente) non varia quasi per nulla, così come l'utility più spartana <strong>nmcli</strong> (interfaccia della riga di comando). Se sei abile nell'uso delle GUI, usale. Se stai lavorando su una varietà di sistemi, le utility di livello inferiore possono semplificare la vita.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/nmtui.png" class="kg-image" alt="nmtui" width="385" height="295" loading="lazy"><figcaption>Network Manager</figcaption></figure><p>Le recenti distribuzioni di Ubuntu includono <strong>netplan</strong>, che è abilitato per impostazione predefinita, e soppianta Network Manager. Poiché nessun'altra distribuzione ha mostrato interesse e poiché può essere facilmente disabilitato se ti dà fastidio, lo ignoreremo.</p><h3 id="interfacce-di-rete">Interfacce di Rete</h3><p>Le interfacce di rete sono un canale di connessione tra un dispositivo e una rete. Fisicamente, le reti sono interfacciate tramite una scheda di interfaccia di rete (NIC) o possono essere implementate in modo più astratto come software. È possibile avere più interfacce di rete che operano contemporaneamente. Le interfacce specifiche possono essere attivate o disattivate in qualsiasi momento.</p><p>Le informazioni su una particolare interfaccia di rete o tutte le interfacce di rete possono essere ottenute dalle utility <strong>ip</strong> e <strong>ifconfig</strong>, che potresti dover eseguire come superutente, o almeno, dare il percorso completo, ad esempio <strong><code>/sbin/ifconfig</code></strong>, su alcune distribuzioni. <strong>ip</strong> è più nuovo di <strong>ifconfig</strong> e ha molte più capacità, ma la visualizzazione dei suoi risultati è più brutta per l'occhio umano. Alcune nuove distribuzioni di Linux non installano il pacchetto più vecchio <strong>net-tools</strong> a cui appartiene <strong>ifconfig</strong>, quindi dovresti installarlo se desideri usarlo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/ipiconfigrhel7.png" class="kg-image" alt="ipiconfigrhel7" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/ipiconfigrhel7.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/ipiconfigrhel7.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/ipiconfigrhel7.png 1025w" sizes="(min-width: 720px) 720px" width="1025" height="466" loading="lazy"><figcaption>Interfacce di Rete</figcaption></figure><h3 id="l-utility-ip">L'utility ip</h3><p>Per visualizzare l'indirizzo IP:</p><p><strong><code>$ /sbin/ip addr show</code></strong></p><p>Per visualizzare le informazioni di instradamento (routing):</p><p><strong>$ /sbin/ip route show</strong></p><p><strong>ip</strong> è un programma molto potente che può fare molte cose. Utility più vecchie (e più specifiche) come <strong>ifconfig</strong> e <strong>route</strong> sono spesso usate per svolgere compiti simili. Uno sguardo alle pagine di manuale pertinenti può dirti molto di più su queste utility.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/iprhel7.png" class="kg-image" alt="iprhel7" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/iprhel7.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/iprhel7.png 975w" sizes="(min-width: 720px) 720px" width="975" height="371" loading="lazy"><figcaption>L'Utility ip</figcaption></figure><h3 id="ping">ping</h3><p><strong>ping</strong> viene utilizzato per verificare se una macchina collegata alla rete può ricevere e inviare dati; vale a dire confermare che l'host remoto sia online e stia rispondendo.</p><p>Per verificare lo stato dell'host remoto, al prompt dei comandi, digita <strong><code>ping &lt;hostname&gt;</code></strong>.</p><p><strong>ping</strong> viene spesso utilizzato per i test e la gestione della rete; tuttavia, il suo utilizzo può aumentare il carico di rete in modo non accettabile. Quindi, puoi interrompere l'esecuzione di <strong>ping</strong> digitando <strong><code>CTRL-C</code></strong>, oppure usando l'opzione <strong>-c</strong> , che limita il numero di pacchetti che <strong>ping</strong> invia prima di smettere. Quando l'esecuzione si interrompe, viene visualizzato un riepilogo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/pingc8.png" class="kg-image" alt="pingc8" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/pingc8.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/pingc8.png 751w" sizes="(min-width: 720px) 720px" width="751" height="335" loading="lazy"><figcaption>ping</figcaption></figure><h3 id="route">route</h3><p>Una rete richiede la connessione di molti nodi. I dati si spostano dalla sorgente alla destinazione passando attraverso una serie di router e potenzialmente su più reti. I server mantengono le tabelle di routing contenenti gli indirizzi di ciascun nodo nella rete. I protocolli di routing IP consentono ai router di costruire una tabella di inoltro che correla le destinazioni finali con gli indirizzi hop successivi.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/routeubuntu.png" class="kg-image" alt="routeubuntu" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/routeubuntu.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/routeubuntu.png 822w" sizes="(min-width: 720px) 720px" width="822" height="296" loading="lazy"><figcaption>route</figcaption></figure><p>Si può usare l'utility <strong>route</strong> (rotta) oppure il nuovo comando <strong>ip route</strong> per visualizzare o modificare la tabella di routing IP per aggiungere, eliminare o modificare percorsi specifici (statici) verso host o reti specifiche. La tabella spiega alcuni comandi che possono essere utilizzati per gestire il routing IP:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Attività</strong></th>
<th><strong>Comando</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>Mostrare la tabella di routing corrente</td>
<td><strong><code>$ route –n</code></strong> oppure <strong><code>ip route</code></strong></td>
</tr>
<tr>
<td>Aggiungere una rotta statica</td>
<td><strong><code>$ route add -net address</code></strong> oppure <strong><code>ip route add</code></strong></td>
</tr>
<tr>
<td>Eliminare una rotta statica</td>
<td><strong><code>$ route del -net address</code></strong> oppure <strong><code>ip route del</code></strong></td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="traceroute">traceroute</h3><p><strong>traceroute</strong> viene utilizzato per ispezionare il percorso che il pacchetto di dati percorre per raggiungere l'host di destinazione, il che lo rende abbastanza utile per la risoluzione dei problemi circa ritardi ed errori della rete. Usando <strong>traceroute</strong>, è possibile isolare i problemi di connettività nei passaggi tra segmenti di rete, il che aiuta a risolverli più velocemente.</p><p>Per stampare il percorso compiuto dal pacchetto per raggiungere l'host di rete, al prompt dei comandi, digita <strong><code>traceroute &lt;indirizzo&gt;</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/tracerouterhel7.png" class="kg-image" alt="tracerouterhel7" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/tracerouterhel7.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/tracerouterhel7.png 995w" sizes="(min-width: 720px) 720px" width="995" height="523" loading="lazy"><figcaption>traceroute</figcaption></figure><h3 id="altri-strumenti-di-rete">Altri Strumenti di Rete</h3><p>Ora, apprendiamo alcuni strumenti di rete aggiuntivi. Gli strumenti di rete sono molto utili per il monitoraggio e il debug di problemi di rete, come la connettività e il traffico.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Strumenti di Rete</strong></th>
<th><strong>Descrizione</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>ethtool</code></strong></td>
<td>Interroga le interfacce di rete e può anche impostare vari parametri come la velocità</td>
</tr>
<tr>
<td><strong><code>netstat</code></strong></td>
<td>Visualizza tutte le connessioni attive e le tabelle di routing; utile per monitorare le prestazioni e la risoluzione dei problemi</td>
</tr>
<tr>
<td><strong><code>nmap</code></strong></td>
<td>Scansiona le porte aperte su una rete; importante per analisi di sicurezza</td>
</tr>
<tr>
<td><strong><code>tcpdump</code></strong></td>
<td>Scarica il traffico di rete per analisi</td>
</tr>
<tr>
<td><strong><code>iptraf</code></strong></td>
<td>Monitora il traffico di rete in formato testo</td>
</tr>
<tr>
<td><strong><code>mtr</code></strong></td>
<td>Combina le funzionalità di ping e traceroute e fornisce una visualizzazione continuamente aggiornata</td>
</tr>
<tr>
<td><strong><code>dig</code></strong></td>
<td>Testa il funzionamento dei DNS; un buon sostituto per host e nslookup</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><h3>Video: Usare Ulteriori Strumenti di Rete</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINLFS10/LINLFS102014-V004400_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="browser-grafici-e-non-grafici">Browser Grafici e Non Grafici</h3><p>I browser vengono utilizzati per recuperare, trasmettere ed esplorare le fonti di informazione, di solito sul World Wide Web. Gli utenti Linux usano comunemente applicazioni di browser grafico e non grafico.</p><p>I browser grafici comuni usati in Linux sono:</p><ul><li><a href="https://www.mozilla.org/en-US/firefox/">Firefox</a></li><li><a href="https://www.google.com/chrome/">Google Chrome</a></li><li><a href="https://www.chromium.org/Home">Chromium</a></li><li><a href="https://kde.org/applications/internet/org.kde.konqueror">Konqueror</a></li><li><a href="https://www.opera.com/">Opera</a></li></ul><p>A volte, potresti non avere un ambiente grafico in cui lavorare (o avere motivi per non usarlo), ma è comunque necessario accedere alle risorse web. In tal caso, è possibile utilizzare browser non grafici, come i seguenti:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Browser Non Grafici</strong></th>
<th><strong>Descrizione</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="http://lynx.browser.org/">lynx</a></td>
<td>Browser Web basato su testo configurabile; il primo browser di questo tipo e ancora in uso</td>
</tr>
<tr>
<td><a href="http://www.elinks.cz/">elinks</a></td>
<td>Basato su Lynx; Può visualizzare tabelle e riquadri</td>
</tr>
<tr>
<td><a href="http://w3m.sourceforge.net/">w3m</a></td>
<td>Un altro browser web basato sul testo con molte funzionalità</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="wget">wget</h3><p>A volte, è necessario scaricare file e informazioni, ma un browser non è la scelta migliore, sia perché si desidera scaricare più file e/o directory, oppure si desidera eseguire l'azione da una riga di comando o da uno script. <strong>wget</strong> è un'utilità della riga di comando che può gestire adeguatamente i seguenti tipi di download:</p><ul><li>Download di file di grandi dimensioni</li><li>Download ricorsivi, in cui una pagina web si riferisce ad altre pagine web e tutte vengono scaricate contemporaneamente</li><li>Download che richiedono password</li><li>Download di file multipli.</li></ul><p>Per scaricare una pagina web, puoi semplicemente digitare <strong><code>wget &lt;url&gt;</code></strong>, quindi è possibile leggere la pagina scaricata come file locale utilizzando un browser grafico o non grafico.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/wgetc8.png" class="kg-image" alt="wgetc8" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/wgetc8.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/wgetc8.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/wgetc8.png 1090w" sizes="(min-width: 720px) 720px" width="1090" height="270" loading="lazy"><figcaption>wget</figcaption></figure><h3 id="curl">curl</h3><p>Oltre a scaricare, potresti voler ottenere informazioni su un URL, come il codice sorgente utilizzato. <strong>curl</strong> può essere usato dalla riga di comando o da uno script per leggere tali informazioni. <strong>curl</strong> ti consente anche di salvare il contenuto di una pagina web in un file, così come <strong>wget</strong>.</p><p>Puoi leggere un URL utilizzando <strong><code>curl &lt;URL&gt;</code></strong>. Ad esempio, se vuoi leggere <a href="https://www.linuxfoundation.org/">http://www.linuxfoundation.org</a>, digita <strong><code>curl http://www.linuxfoundation.org</code></strong>.</p><p>Per ottenere il contenuto di una pagina web e memorizzarlo su un file, digita <strong><code>curl -o saved.html http://www.mysite.com</code></strong>. Verrà salvato il contenuto del file indice principale del sito web in <strong>saved.html</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/curlrhel7.png" class="kg-image" alt="curlrhel7" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/curlrhel7.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/curlrhel7.png 845w" sizes="(min-width: 720px) 720px" width="845" height="390" loading="lazy"><figcaption>curl</figcaption></figure><h3 id="ftp-file-transfer-protocol-protocollo-di-trasferimento-file">FTP (File Transfer Protocol) - Protocollo di Trasferimento File</h3><p>Quando sei connesso a una rete, potrebbe essere necessario trasferire file da una macchina all'altra. FTP (File Transfer Protocol) è un metodo ben noto e popolare per il trasferimento di file tra i computer utilizzando Internet. Questo metodo è basato su un modello client-server. FTP può essere utilizzato all'interno di un browser o con programmi client autonomi.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch11_screen33.jpg" class="kg-image" alt="LFS01_ch11_screen33" width="268" height="281" loading="lazy"><figcaption>File Transfer Protocol</figcaption></figure><p>FTP è uno dei più antichi metodi di trasferimento dei dati di rete, risalente ai primi anni '70. Pertanto, è considerato inadeguato per i bisogni moderni, oltre a essere intrinsecamente insicuro. Tuttavia, è ancora in uso e, quando la sicurezza non è un problema (come con il cosiddetto FTP anonimo), può avere senso. Tuttavia, molti siti web, come [kernel.org] (<a href="https://www.kernel.org/">https://www.kernel.org/</a>), ne hanno abbandonato l'uso.</p><h3 id="client-ftp">Client FTP</h3><p>I client FTP consentono di trasferire file con computer remoti utilizzando il protocollo FTP. Questi client possono essere strumenti grafici o da riga di comando. FileZilla, ad esempio, consente l'uso dell'approccio drag and drop per trasferire i file tra gli host. Tutti i browser web supportano FTP, tutto ciò che devi fare è passare un URL come <strong><a>ftp://ftp.kernel.org</a></strong> dove il solito <strong>http://</strong> diventa <strong>ftp://</strong>.</p><p>Alcuni client FTP di riga di comando sono:</p><ul><li><strong>ftp</strong></li><li><strong>sftp</strong></li><li><strong>ncftp</strong></li><li><strong>yafc</strong> (Yet Another FTP Client).</li></ul><p>L'FTP è caduto in disgrazia sui sistemi moderni, in quanto è intrinsecamente insicuro, poiché le password sono credenziali dell'utente che possono essere trasmesse senza crittografia e sono quindi inclini a intercettazioni. Pertanto, è stato rimosso a favore dell'utilizzo di <strong>rsync</strong> e dell'accesso con i browser web via https ad esempio. In alternativa, <strong>sftp</strong> è una modalità di connessione molto sicura, che utilizza il protocollo sicuro shell (<strong>ssh</strong>), di cui discuteremo a breve.<strong>sftp</strong> crittografa i suoi dati e quindi le informazioni sensibili vengono trasmesse in modo più sicuro. Tuttavia, non funziona con il cosiddetto FTP anonimo (credenziali utente ospite).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch11_screen34.jpg" class="kg-image" alt="LFS01_ch11_screen34" width="306" height="229" loading="lazy"><figcaption>Client FTP</figcaption></figure><h3 id="ssh-eseguire-comandi-da-remoto">SSH: Eseguire Comandi da Remoto</h3><p>Secure Shell (SSH) è un protocollo di rete crittografico utilizzato per la comunicazione dati sicura. Viene inoltre utilizzato per servizi remoti e altri servizi sicuri tra due dispositivi sulla rete ed è molto utile per la gestione dei sistemi che non sono facilmente raggiungibili fisicamente, ma per i quali hai accesso remoto.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch11_screen37.jpg" class="kg-image" alt="LFS01_ch11_screen37" width="410" height="209" loading="lazy"><figcaption>SSH: Eseguire Comandi da Remoto</figcaption></figure><p>Per accedere a un sistema remoto utilizzando il tuo stesso nome utente puoi semplicemente digitare <strong>ssh qualche_sistema</strong> e premere <strong><code>Invio</code></strong>. <strong>ssh</strong> quindi ti chiederà la password remota. È inoltre possibile configurare ssh per consentire l'accesso remoto in modo sicuro senza digitare una password ogni volta.</p><p>Se si desidera eseguire come un altro utente, puoi farlo con <strong><code>ssh -l altroutente qualche_sistema</code></strong> oppure con <strong><code>ssh altroutente@qualche_sistema</code></strong>. Per eseguire un comando su un sistema remoto tramite SSH, al prompt dei comandi, è possibile digitare <strong><code>ssh qualche_sistema mio_comando</code></strong>.</p><h3 id="copia-di-file-in-modo-sicuro-con-scp">Copia di file in Modo Sicuro con scp</h3><p>Possiamo anche spostare i file in modo sicuro utilizzando Secure Copy (SCP) tra due host in rete. scp utilizza il protocollo SSH per il trasferimento di dati.</p><p>Per copiare un file locale in un sistema remoto, al prompt dei comandi, digita <strong><code>scp &lt;filelocale&gt; &lt;user@sistemaremoto&gt;:/home/user/</code></strong> e premi <strong><code>Invio</code></strong>.</p><p>Ti verrà richiesta la password remota. Puoi anche configurare <strong>scp</strong> in modo che non richieda una password per ogni trasferimento.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch11_screen38.jpg" class="kg-image" alt="LFS01_ch11_screen38" width="570" height="179" loading="lazy"><figcaption>Copia Sicura dei File con scp</figcaption></figure><!--kg-card-begin: html--><h3>Video: Usare SSH tra due Macchine Virtuali</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V002000_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h2 id="riepilogo-del-capitolo-7">Riepilogo del Capitolo</h2><p>Hai completato il capitolo 14. Riassumiamo i concetti chiave trattati:</p><ul><li>L'indirizzo IP (Internet Protocol) è un indirizzo di rete logico univoco assegnato a un dispositivo su una rete.</li><li>IPv4 utilizza 32 bit per gli indirizzi e IPv6 utilizza 128 bit per gli indirizzi.</li><li>Ogni indirizzo IP contiene sia un campo rete che un campo indirizzo host.</li><li>Sono disponibili cinque classi di indirizzi di rete: A, B, C, D ed E.</li><li>DNS (Domain Name System - Sistema di Nomi di Dominio) viene utilizzato per convertire i nomi di dominio Internet e host in indirizzi IP.</li><li>Il programma <strong>ifconfig</strong> viene utilizzato per visualizzare le interfacce di rete attive attuali.</li><li>I comandi <strong><code>ip addr show</code></strong> e <strong><code>ip route show</code></strong> possono essere utilizzati per visualizzare l'indirizzo IP e le informazioni di routing.</li><li>Puoi usare <strong>ping</strong> per verificare se l'host remoto è online e rispondente.</li><li>Puoi usare il programma di utilità <strong>route</strong> per gestire il routing IP.</li><li>È possibile monitorare ed eseguire il debug di problemi di rete utilizzando strumenti di networking.</li><li>Firefox, Google Chrome, Chromium ed Epiphany sono i principali browser grafici utilizzati in Linux.</li><li>I browser non grafici o di testo utilizzati in Linux sono Lynx, Links e w3m.</li><li>Puoi usare <strong>wget</strong> per scaricare pagine Web.</li><li>Puoi usare <strong>curl</strong> per ottenere informazioni sugli URL.</li><li>FTP (File Transfer Protocol - Protocollo di Trasferimento di File) viene utilizzato per trasferire file su una rete.</li><li>ftp, sftp, ncftp e yafc sono client FTP da riga di comando utilizzati in Linux.</li><li>Puoi usare <strong>ssh</strong> per eseguire comandi su sistemi remoti.</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_Summary--4-.jpg" class="kg-image" alt="LFS01_Summary--4-" width="330" height="306" loading="lazy"></figure><h2 id="capitolo-15-la-shell-bash-e-lo-scripting-di-base">Capitolo 15: La Shell Bash e lo Scripting di Base</h2><h3 id="obiettivi-formativi-11">Obiettivi Formativi</h3><p>Entro la fine di questo capitolo, dovresti essere in grado di:</p><ul><li>Spiegare le caratteristiche e le capacità degli script della shell bash.</li><li>Conoscere la sintassi di base delle istruzioni di scripting.</li><li>Avere familiarietà con i vari metodi e costrutti utilizzati.</li><li>Verificare proprietà ed esistenza di file e altri oggetti.</li><li>Utilizzare istruzioni condizionali, come i blocchi if-then-else.</li><li>Eseguire operazioni aritmetiche usando il linguaggio di scripting.</li></ul><h3 id="shell-scripting">Shell Scripting</h3><p>Supponi di voler cercare un nome file, controllare se il file associato esiste e quindi rispondere di conseguenza, visualizzando un messaggio che conferma o non conferma l'esistenza del file. Se devi farlo solo una volta, puoi semplicemente digitare una sequenza di comandi in un terminale. Tuttavia, se è necessario farlo più volte, l'automazione è la strada da percorrere. Per automatizzare una serie di comandi, dovrai imparare a scrivere script di shell. Più comunemente in Linux, questi script vengono sviluppati per essere eseguiti nell'interprete di comando della shell <strong>bash</strong>. Il grafico illustra molti dei vantaggi dell'adottare gli script.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch14_screen03.jpg" class="kg-image" alt="LFS01_ch14_screen03" width="564" height="318" loading="lazy"><figcaption>Caratteristiche degli Script di Shell</figcaption></figure><p><strong>NOTA:</strong> <em>Molti degli argomenti discussi in questo e nel prossimo capitolo sono già stati introdotti in precedenza, durante l'esposizione di attività che possono essere fatte dalla riga di comando. Abbiamo scelto di ripetere una parte di quell'esposizione per rendere le sezioni sullo scripting autonome, quindi la ripetizione è intenzionale.</em></p><h3 id="scelta-della-shell-di-comando">Scelta della Shell di Comando</h3><p>L'interprete di comando ha il compito di eseguire le istruzioni che seguono la sua dichiarazione nello script. Gli interpreti comunemente usati includono: <strong><code>/usr/bin/perl</code></strong>, <strong><code>/bin/bash</code></strong>, <strong><code>/bin/csh</code></strong>, <strong><code>/usr/bin/python</code></strong> e <strong><code>/bin/sh</code></strong>.</p><p>Scrivere una lunga sequenza di comandi in una finestra del terminale può essere complicato, richiede tempo e può portare a errori. Utilizzando gli script di shell, l'uso della riga di comando diventa un modo efficiente e rapido per avviare sequenze complesse di passaggi. Il fatto che gli script di shell vengano salvati in un file rende più semplice utilizzarli per creare nuove varianti di script e condividere procedure standard con diversi utenti.</p><p>Linux offre un'ampia scelta di shell; esattamente ciò che è disponibile sul sistema è elencato in <strong><code>/etc/shells</code></strong>. Le scelte tipiche sono:</p><p><strong><code>/bin/sh</code></strong><br><strong><code>/bin/bash</code></strong><br><strong><code>/bin/tcsh</code></strong><br><strong><code>/bin/csh</code></strong><br><strong><code>/bin/ksh</code></strong><br><strong><code>/bin/zsh</code></strong></p><p>La maggior parte degli utenti di Linux utilizza la shell predefinita bash, ma quelli con vasta esperienza unix con altre shell potrebbero voler sovrascrivere quella predefinita.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_chapter14_screen_5.jpeg" class="kg-image" alt="LFS01_chapter14_screen_5" width="398" height="283" loading="lazy"></figure><h3 id="script-di-shell">Script di Shell</h3><p>Se ricordi da quanto precedentemente trattato, una shell è un interprete di riga di comando che fornisce l'interfaccia utente per finestre di terminale. Può anche essere usata per eseguire script, anche in sessioni non interattive senza una finestra di terminale, come se i comandi fossero digitati direttamente. Ad esempio, digitare <strong><code>find . -name "*.c" -ls</code></strong> nella riga di comando è la stessa cosa che eseguire un file di script contenente le righe:</p><p><strong><code>#!/bin/bash</code></strong><br><strong><code>find . -name "*.c" -ls</code></strong></p><p>La prima riga dello script, che inizia con <strong><code>#!</code></strong>, contiene il percorso completo dell'interprete di comando (in questo caso <strong><code>/bin/bash</code></strong>) che deve essere utilizzato sul file. Come abbiamo scritto più sopra, hai alcune scelte per il linguaggio di scripting che puoi usare, come ad esempio <strong><code>/usr/bin/perl</code></strong>, <strong><code>/bin/csh</code></strong>, <strong><code>/usr/bin/python</code></strong>, ecc.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/findcrhel.png" class="kg-image" alt="findcrhel" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/findcrhel.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/findcrhel.png 956w" sizes="(min-width: 720px) 720px" width="956" height="327" loading="lazy"><figcaption>Script di Shell</figcaption></figure><h3 id="un-semplice-script-bash">Un Semplice Script Bash</h3><p>Scriviamo un semplice script bash che visualizza un messaggio di una riga sullo schermo. Puoi digitare:</p><p><strong><code>$ cat &gt; hello.sh</code></strong><br><strong><code>#!/bin/bash</code></strong><br><strong><code>echo "Hello Linux Foundation Student"</code></strong></p><p>poi premere <strong><code>Invio</code></strong> e <strong><code>CTRL-D</code></strong> per salvare il file, oppure semplicemente creare il file <strong><code>hello.sh</code></strong> con il tuo editor di testo preferito. Poi digita <strong><code>chmod +x hello.sh</code></strong> per rendere il file eseguibile per tutti gli utenti.</p><p>Successivamente puoi eseguire lo script digitando <strong>./hello.sh</strong> oppure:</p><p><strong><code>$ bash hello.sh</code></strong></p><p>Il risultato sarà:</p><p><strong>Hello Linux Foundation Student</strong></p><p><strong>NOTA</strong>: <em>se usi la seconda forma, non è necessario rendere eseguibile il file.</em></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/hellosuse.png" class="kg-image" alt="hellosuse" width="575" height="317" loading="lazy"><figcaption>Un Semplice Script di Shell</figcaption></figure><h3 id="esempio-interattivo-dell-utilizzo-degli-script-bash">Esempio Interattivo dell'Utilizzo degli Script bash</h3><p>Ora, vediamo come creare un esempio più interattivo usando uno script bash. All'utente verrà richiesto di inserire un valore, che verrà quindi visualizzato sullo schermo. Il valore è memorizzato in una variabile temporanea, <strong><code>name</code></strong>. Possiamo fare riferimento al valore di una variabile shell utilizzando un <strong><code>$</code></strong> davanti al nome della variabile, come <strong><code>$name</code></strong>. Per creare questo script, è necessario creare un file denominato <strong>getname.sh</strong> nel tuo editor preferito con il seguente contenuto:</p><p><strong><code>#!/bin/bash</code></strong><br><strong><code># Lettura interattiva di una variabile</code></strong><br><strong><code>echo "DIGITA IL TUO NOME"</code></strong><br><strong><code>read name</code></strong><br><strong><code># Visualizza il contenuto della variabile</code></strong><br><strong><code>echo Il nome fornito è :$name</code></strong></p><p>Ancora una volta, rendilo eseguibile digitando <strong><code>chmod +x getname.sh</code></strong>.</p><p>Nell'esempio sopra, quando l'utente digita <strong>./getname.sh</strong> e lo script viene eseguito, all'utente viene presentata la stringa <strong>DIGITA IL TUO NOME</strong>. L'utente deve quindi digitare un valore e premere <strong><code>Invio</code></strong>. Il valore digitato verrà stampato.</p><p><strong>NOTA</strong>: <em>Il carattere <strong><code>#</code></strong> (cancelletto) è usato per iniziare un commento nello script e può essere piazzato ovunque in una riga (il resto della riga sarà considerato un commento). Tuttavia, nota la speciale combinazione magica di <strong><code>#!</code></strong>, &nbsp;utilizzata nella prima riga, è un'eccezione unica a questa regola.</em></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/getnamesuse.png" class="kg-image" alt="getnamesuse" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/getnamesuse.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/getnamesuse.png 685w" width="685" height="417" loading="lazy"><figcaption>Esempio di Interazione Usando gli Script bash</figcaption></figure><h3 id="valori-di-ritorno">Valori di Ritorno</h3><p>Tutti gli script di shell generano un valore di ritorno alla fine dell'esecuzione, che può essere impostato esplicitamente con l'istruzione <strong><code>exit</code></strong>. I valori di ritorno consentono a un processo di monitorare lo stato di uscita di un altro processo, spesso in una relazione genitore-figlio. Sapere come termina il processo consente di adottare le misure appropriate necessarie o dipendenti dal successo o dal fallimento.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch14_screen10.jpg" class="kg-image" alt="LFS01_ch14_screen10" width="409" height="107" loading="lazy"><figcaption>Valori di Ritorno</figcaption></figure><h3 id="visualizzare-valori-di-ritorno">Visualizzare Valori di Ritorno</h3><p>Quando lo script è in esecuzione, si può controllare un valore oppure una condizione specifici e restituire il successo o il fallimento come risultato. Per convenzione, il successo viene restituito come <strong>0</strong> e il fallimento viene restituito come valore diverso da zero. Un modo semplice per dimostrare il completamento del successo e del fallimento è eseguire il comando <code>ls</code> su un file che esiste così come con uno che non lo è, il valore di ritorno è archiviato nella variabile di ambiente rappresentata da <strong>$?</strong>:</p><p><strong><code>$ ls /etc/logrotate.conf</code></strong><br><strong><code>/etc/logrotate.conf</code></strong></p><p><strong><code>$ echo $?</code></strong><br><strong><code>0</code></strong></p><p>In questo esempio, il sistema è in grado di individuare il file <strong><code>/etc/logrotate.conf</code></strong> e <code>ls</code> restituisce un valore di <strong>0</strong> per indicare il successo. Se eseguito su un file inesistente, restituisce <strong>2</strong>. Le applicazioni spesso traducono questi valori di ritorno in messaggi significativi facilmente comprensibili dall'utente.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/returnvalmint.png" class="kg-image" alt="returnvalmint" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/returnvalmint.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/returnvalmint.png 688w" width="688" height="243" loading="lazy"><figcaption>Visualizzare Valori di Ritorno</figcaption></figure><h3 id="sintassi-base-e-caratteri-speciali">Sintassi Base e Caratteri Speciali</h3><p>Gli script richiedono di seguire una sintassi standard del linguaggio. Le regole delineano come definire le variabili e come costruire e formattare le istruzioni consentite, ecc. La tabella elenca alcuni usi speciali dei caratteri all'interno degli script bash:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Carattere</strong></th>
<th><strong>Descrizione</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>#</code></strong></td>
<td>Usato per aggiungere un commento, tranne quando usato come <strong><code>\#</code></strong>, oppure  <strong><code>#!</code></strong> all'inizio di uno script</td>
</tr>
<tr>
<td><strong><code>\</code></strong></td>
<td>Usato alla fine di una riga per indicare la continuazione a quella successiva</td>
</tr>
<tr>
<td><strong><code>;</code></strong></td>
<td>Usato per interpretare ciò che segue come un nuovo comando da eseguire</td>
</tr>
<tr>
<td><strong><code>$</code></strong></td>
<td>Indica che ciò che segue è una variabile di ambiente</td>
</tr>
<tr>
<td><strong><code>&gt;</code></strong></td>
<td>Ridireziona l'output</td>
</tr>
<tr>
<td><strong><code>&gt;&gt;</code></strong></td>
<td>Aggiunge all'output</td>
</tr>
<tr>
<td><strong><code>&lt;</code></strong></td>
<td>Ridireziona l'input</td>
</tr>
<tr>
<td><strong><code>\|</code></strong></td>
<td>Usato per passare il risultato al comando successivo</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Ci sono altri caratteri speciali, combinazioni di caratteri e costrutti che gli script comprendono, come <strong><code>(..)</code></strong>, <strong><code>{..}</code></strong>, <strong><code>[..</code>]</strong>, <strong><code>&amp;&amp;</code></strong>, <strong><code>||</code></strong>, <strong><code>**, **</code></strong>, <strong><code>$((...))</code></strong>, alcuni dei quali discuteremo più avanti.</p><h3 id="dividere-comandi-lunghi-su-pi-righe">Dividere Comandi Lunghi su Più Righe</h3><p>A volte, i comandi sono troppo lunghi da digitare facilmente su una sola riga o da leggere e comprendere (anche se non esiste un vero limite pratico alla lunghezza di una riga di comando).</p><p>In questo caso, l'operatore di concatenazione (<strong><code>\</code></strong>), il carattere di barra rovesciata, viene utilizzato per disporre i comandi lunghi su diverse righe.</p><p>Ecco un esempio di un comando che installa un lungo elenco di pacchetti su un sistema utilizzando Debian Package Management:</p><p><strong><code>$~/\&gt; cd $HOME</code></strong><br><strong><code>$~/\&gt; sudo apt-get install autoconf automake bison build-essential \</code></strong><br><strong><code> &nbsp; chrpath curl diffstat emacs flex gcc-multilib g++-multilib \</code></strong><br><strong><code> &nbsp; libsdl1.2-dev libtool lzop make mc patch \</code></strong><br><strong><code> &nbsp; screen socat sudo tar texinfo tofrodos u-boot-tools unzip \</code></strong><br><strong><code> &nbsp; vim wget xterm zip</code></strong></p><p>Il comando è diviso in più righe per renderlo leggibile e più facile da capire. L'operatore <strong><code>\</code></strong> alla fine di ciascuna riga fa sì che la shell combini (concateni) più righe e le esegua come un singolo comando.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/continue.png" class="kg-image" alt="continue" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/continue.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/continue.png 774w" sizes="(min-width: 720px) 720px" width="774" height="352" loading="lazy"><figcaption>Dividere Comandi Lunghi su Più Righe</figcaption></figure><h3 id="inserire-pi-comandi-su-una-singola-riga">Inserire Più Comandi su Una Singola Riga</h3><p>Gli utenti a volte devono combinare diversi comandi e istruzioni, e persino eseguirli condizionalmente in base al comportamento degli operatori utilizzati tra loro. Questo metodo si chiama concatenamento di comandi.</p><p>Esistono diversi modi per farlo, a seconda delle tue esigenze. Il carattere <code>;</code> (punto e virgola) viene utilizzato per separare questi comandi ed eseguirli in sequenza, come se fossero stati digitati su righe separate. Ogni comando che ne consegue viene eseguito a prescindere dalla riuscita o meno del precedente.</p><p>Pertanto, i tre comandi nell'esempio seguente verranno tutti eseguiti, anche se quelli che li precedono falliscono:</p><p><strong><code>$ make ; make install ; make clean</code></strong></p><p>Tuttavia, potresti voler interrompere i comandi successivi quando uno precedente fallisce. Puoi farlo usando l'operatore <strong>&amp;&amp;</strong> (e) in questo modo:</p><p><strong><code>$ make &amp;&amp; make install &amp;&amp; make clean</code></strong></p><p>Se il primo comando fallisce, il secondo non verrà mai eseguito. Una rifinitura finale è utilizzare l'operatore <strong>||</strong> (o), come in:</p><p><strong><code>$ cat file1 || cat file2 || cat file3</code></strong></p><p>In questo caso, procedi fino a quando qualcosa riesce e poi smetti di eseguire ulteriori passaggi.</p><p>Concatenare i comandi non è uguale a convogliarli tramite pipe, nel qual caso i comandi successivi iniziano a operare su flussi di dati prodotti da quelli precedenti prima che si completino, mentre con il concatenamento ogni passaggio termina prima che inizi il prossimo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/multcommint.png" class="kg-image" alt="multcommint" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/multcommint.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/multcommint.png 998w" sizes="(min-width: 720px) 720px" width="998" height="243" loading="lazy"><figcaption>Inserire Più Comandi in una Singola Riga</figcaption></figure><h3 id="reindirizzare-l-output">Reindirizzare l'Output</h3><p>La maggior parte dei sistemi operativi accetta l'input dalla tastiera e visualizza l'output sul terminale. Tuttavia, negli script shell è possibile inviare l'output a un file. Il processo di deviazione dell'output verso un file viene chiamato reindirizzamento dell'output. Abbiamo già usato questa funzionalità nelle nostre sezioni precedenti su come utilizzare la riga di comando.</p><p>Il carattere <strong>&gt;</strong> viene utilizzato per scrivere l'output in un file. Ad esempio, il seguente comando invia l'output di <code>free</code> al file <strong><code>/tmp/free.out</code></strong>:</p><p><strong><code>$ free &gt; /tmp/free.out</code></strong></p><p>Per controllare il contenuto di <strong><code>/tmp/free.out</code></strong>, digita <strong><code>cat /tmp/free.out</code></strong> nel prompt dei comandi.</p><p>Due caratteri <strong>&gt;</strong> (<strong>&gt;&gt;</strong>) aggiungeranno l'output a un file se esiste, e agiranno come <strong>&gt;</strong> se il file non esiste.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/outredirectubuntu.png" class="kg-image" alt="outredirectubuntu" width="444" height="268" loading="lazy"><figcaption>Reindirizzare l'Output</figcaption></figure><h3 id="reindirizzare-l-input">Reindirizzare l'Input</h3><p>Proprio come l'output che può essere reindirizzato a un file, l'input di un comando può essere letto da un file. Il processo di lettura dell'input da un file è chiamato reindirizzamento dell'input e utilizza il carattere <strong>&lt;</strong>.</p><p>I seguenti tre comandi (usando <strong>wc</strong> per contare il numero di righe, parole e caratteri in un file) sono del tutto equivalenti e coinvolgono il reindirizzamento dell'input e un comando che opera sul contenuto di un file:</p><p><strong><code>$ wc &lt; /etc/passwd</code></strong><br><strong><code>49 &nbsp;105 2678 /etc/passwd</code></strong></p><p><strong><code>$ wc /etc/passwd</code></strong><br><strong><code>49 &nbsp;105 2678 /etcpasswd</code></strong></p><p><strong><code>$ cat /etc/passwd | wc</code></strong><br><strong><code>49 &nbsp;105 2678</code></strong></p><h3 id="comandi-shell-integrati">Comandi Shell Integrati</h3><p>Gli script shell eseguono sequenze di comandi e altri tipi di istruzioni. Questi comandi possono essere:</p><ul><li>Applicazioni compilate</li><li>Comandi bash integrati</li><li>Script di shell o script da altri linguaggi interpretati, come Perl e Python.</li></ul><p>Le applicazioni compilate sono file eseguibili binari, generalmente risiedono sul filesystem in directory ben note come <strong><code>/usr/bin</code></strong>. Gli script di shell hanno sempre accesso ad applicazioni come <strong>rm</strong>, <strong>ls</strong>, <strong>df</strong>, <strong>vi</strong>, e <strong>gzip</strong>, che sono programmi compilati da linguaggi di programmazione di basso livello come C.</p><p>Inoltre, bash ha molti comandi integrati, che possono essere utilizzati solo per visualizzare l'output all'interno di una shell di terminale o uno script di shell. A volte, questi comandi hanno lo stesso nome dei programmi eseguibili sul sistema, come <strong>echo</strong>, che può portare a problemi subdoli. I comandi integrati bash includono <strong>cd</strong>, <strong>pwd</strong>, <strong>echo</strong>, <strong>read</strong>, <strong>logout</strong>, <strong>printf</strong>, <strong>let</strong>, e <strong>ulimit</strong>. Pertanto, ci si può aspettare un comportamento leggermente diverso dalla versione integrata di un comando come <strong>echo</strong> se confrontato con <strong>/bin/echo</strong>.</p><p>Un elenco completo dei comandi integrati bash è disponibile nella pagina di manuale di bash, o semplicemente digitando <strong>help</strong>, come esamineremo nella pagina successiva.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_chapter14_screen_15.jpg" class="kg-image" alt="LFS01_chapter14_screen_15" width="433" height="445" loading="lazy"><figcaption>Comandi Integrati nella Shell</figcaption></figure><h3 id="comandi-integrati-in-bash">Comandi Integrati in bash</h3><p>Abbiamo già elencato quali comandi hanno versioni integrate per bash nella nostra precedente discussione su come ottenere aiuto sui sistemi Linux. Ancora una volta, ecco una videata che elenca esattamente quali comandi sono disponibili.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/helpbash--1-.png" class="kg-image" alt="helpbash--1-" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/helpbash--1-.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/helpbash--1-.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/helpbash--1-.png 1135w" sizes="(min-width: 720px) 720px" width="1135" height="960" loading="lazy"><figcaption>Comandi Integrati in bash</figcaption></figure><h3 id="parametri-di-uno-script">Parametri di uno Script</h3><p>Gli utenti devono spesso passare valori per i parametri di uno script, come un nome file, una data, ecc. Gli script prendono percorsi diversi o ricavano valori diversi in base ai parametri (argomenti del comando) che vengono loro passati. Questi valori possono essere testo o numeri, in questo modo:</p><p><strong><code>$ ./script.sh /tmp</code></strong><br><strong><code>$ ./script.sh 100 200</code></strong></p><p>All'interno di uno script, il parametro o un argomento è rappresentato con un <strong>$</strong> e un numero o un carattere speciale. La tabella elenca alcuni di questi parametri.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Parametro</strong></th>
<th><strong>Significato</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>$0</code></strong></td>
<td>Nome dello script</td>
</tr>
<tr>
<td><strong><code>$1</code></strong></td>
<td>Primo parametro</td>
</tr>
<tr>
<td><strong><code>$2</code></strong>,<strong><code>$3</code></strong>, ecc.</td>
<td>Secondo, terzo parametro, ecc.</td>
</tr>
<tr>
<td><strong><code>$*</code></strong></td>
<td>Tutti i parametri</td>
</tr>
<tr>
<td><strong><code>$#</code></strong></td>
<td>Numero di argomenti</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="usare-i-parametri-di-uno-script">Usare i Parametri di uno Script</h3><p>Crea lo script mostrato nella figura, poi rendilo eseguibile con <strong><code>chmod +x param.sh</code></strong>. Successivamente eseguilo passandogli diversi argomenti, come mostrato nella videata. Lo script viene elaborato come segue:</p><p><strong>$0</strong> stampa il nome dello script: <strong>param.sh</strong></p><p><strong>$1</strong> stampa il primo parametro: <strong>one</strong></p><p><strong>$2</strong> stampa il secondo parametro: <strong>two</strong></p><p><strong>$3</strong> stampa il terzo parametro: <strong>three</strong></p><p><strong>$</strong> stampa tutti i parametri: <strong>one two three four five</strong></p><p>L'istruzione finale diventa: <strong>All done with param.sh</strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/scriptparams.png" class="kg-image" alt="scriptparams" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/scriptparams.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/scriptparams.png 835w" sizes="(min-width: 720px) 720px" width="835" height="390" loading="lazy"><figcaption>Usare i Parametri di uno Script</figcaption></figure><h3 id="sostituzione-dei-comandi">Sostituzione dei Comandi</h3><p>A volte potrebbe essere necessario sostituire il risultato di un comando affinché sia parte di un altro comando. Può essere fatto in due modi:</p><ul><li>Racchiudendo il comando più interno tra <strong>$( )</strong></li><li>Racchiudendo il comando più interno tra caratteri backtick <strong>(</strong>`<strong>)</strong></li></ul><p>La seconda forma, con i backtick, è deprecata nei nuovi script e comandi. Indipendentemente dal metodo utilizzato, il comando specificato verrà eseguito in un nuovo ambiente di shell appena lanciato e l'output standard della shell verrà inserito quando viene eseguita la sostituzione del comando.</p><p>Praticamente qualsiasi comando può essere eseguito in questo modo. Mentre entrambi questi metodi abilitano la sostituzione del comando, il metodo <strong>$()</strong> consente l'annidamento dei comandi. I nuovi script dovrebbero sempre usare questo metodo più moderno. Per esempio:</p><p><strong><code>$ ls /lib/modules/$(uname -r)/</code></strong></p><p>Nell'esempio sopra, l'output del comando <strong><code>uname –r</code></strong> (Che sarà qualcosa di simile a <strong>5.13.3</strong>), è inserito come argomento per il comando <strong><code>ls</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/uname-rhel.png" class="kg-image" alt="uname-rhel" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/uname-rhel.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/uname-rhel.png 775w" sizes="(min-width: 720px) 720px" width="775" height="295" loading="lazy"><figcaption>Sostituzione dei Comandi</figcaption></figure><h3 id="variabili-di-ambiente-1">Variabili di Ambiente</h3><p>La maggior parte degli script utilizza variabili contenenti un valore, che può essere utilizzato ovunque nello script. Queste variabili possono essere definite dall'utente o dal sistema. Molte applicazioni utilizzano tali variabili di ambiente (già trattate in dettaglio nel capitolo relativo all'<em>ambiente utente</em>) per la fornitura di input, convalida e controllo del comportamento.</p><p>Come abbiamo discusso in precedenza, alcuni esempi di variabili di ambiente standard sono <strong>HOME</strong>, <strong>PATH</strong>, e <strong>HOST</strong>. Quando ci si riferisce ad esse, le variabili di ambiente devono essere prefissate con il simbolo <strong>$</strong>, ad esempio <strong>$HOME</strong>. È possibile visualizzare e impostare il valore delle variabili di ambiente. Ad esempio, il seguente comando visualizza il valore memorizzato nella variabile <strong>PATH</strong>:</p><p><strong><code>$ echo $PATH</code></strong></p><p>Tuttavia, non è richiesto alcun prefisso quando si imposta o si modifica il valore di una variabile. Ad esempio, il seguente comando imposta il valore della variabile <strong>MYCOLOR</strong> a "blu":</p><p><strong><code>$ MYCOLOR=blu</code></strong></p><p>Puoi ottenere un elenco di variabili di ambiente con i comandi <strong>env</strong>, <strong>set</strong>, oppure <strong>printenv</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/envubuntu.png" class="kg-image" alt="envubuntu" width="408" height="217" loading="lazy"><figcaption>Variabili di Ambiente</figcaption></figure><h3 id="esportare-variabili-di-ambiente">Esportare Variabili di Ambiente</h3><p>Anche se abbiamo discusso dell'esportazione delle variabili di ambiente nel capitolo su "<em>Ambiente utente</em>", vale la pena rivedere questo argomento nel contesto della scrittura di script bash.</p><p>Per impostazione predefinita, le variabili create all'interno di uno script sono disponibili solo per i passaggi successivi di tale script. Eventuali processi figli (sotto-shell) non hanno accesso automatico ai valori di queste variabili. Per renderli disponibili per i processi figli, devono essere promosse a variabili di ambiente utilizzando la dichiarazione di esportazione, così:</p><p><strong><code>export VAR=valore</code></strong></p><p>oppure</p><p><strong><code>VAR=valore ; export VAR</code></strong></p><p>Mentre i processi figli possono modificare il valore delle variabili esportate, il genitore non vedrà alcuna modifica; le variabili esportate non sono condivise, vengono solo copiate ed ereditate.</p><p>Digitare <strong><code>export</code></strong> senza argomenti fornirà un elenco di tutte le variabili di ambiente attualmente esportate.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/exportubuntu.png" class="kg-image" alt="exportubuntu" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/exportubuntu.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/exportubuntu.png 723w" sizes="(min-width: 720px) 720px" width="723" height="404" loading="lazy"><figcaption>Esportare Variabili</figcaption></figure><h3 id="funzioni">Funzioni</h3><p>Una funzione è un blocco di codice che implementa un insieme di operazioni. Le funzioni sono utili per l'esecuzione di procedure più volte, forse con diverse variabili di input. Le funzioni sono spesso anche chiamate subroutine. L'uso delle funzioni negli script richiede due passaggi:</p><ol><li>Dichiarare una funzione</li><li>Chiamare una funzione</li></ol><p>La dichiarazione della funzione richiede un nome utilizzato per invocarla. La sintassi corretta è:</p><p><strong><code>nome_funzione () {</code></strong><br><strong><code> &nbsp;comando...</code></strong><br><strong><code>}</code></strong></p><p>Ad esempio, la seguente funzione viene chiamata <strong>display</strong>:</p><p><strong><code>display () {</code></strong><br><strong><code> &nbsp;echo "Questa è una semplice funzione"</code></strong><br><strong><code>}</code></strong></p><p>Se necessario, la funzione può essere di grandi dimensioni e avere molte istruzioni. Una volta definita, la funzione può essere chiamata più tardi tante volte quanto necessario. Nell'esempio completo mostrato nella figura qui sotto, stiamo anche mostrando una prassi spesso usata: come passare un argomento alla funzione. Il primo argomento può essere referenziato con <strong><code>$1</code></strong>, il secondo con <strong><code>$2</code></strong>, ecc.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/bashfunubuntu.png" class="kg-image" alt="bashfunubuntu" width="542" height="410" loading="lazy"><figcaption>Funzioni</figcaption></figure><h4 id="l-istruzione-if">L'istruzione if</h4><p>Il processo decisionale condizionale, usando un'istruzione <strong>if</strong>, è un costrutto di base che ogni utile linguaggio di programmazione o scripting deve avere.</p><p>Quando viene usata una istruzione <strong>if</strong>, le azioni conseguenti dipendono dalla valutazione delle condizioni specifiche, come ad esempio:</p><ul><li>Confronti numerici o stringhe</li><li>Valore di ritorno di un comando (0 per il successo)</li><li>Esistenza o autorizzazioni di file</li></ul><p>In forma compatta, la sintassi di un'istruzione <strong>if</strong> è:</p><p><strong><code>if COMANDI-DI-VERIFICA; then COMANDO-CONSEGUENTE; fi</code></strong></p><p>Una definizione più generale è:</p><p><strong><code>if condizione</code></strong><br><strong><code>then</code></strong><br><strong><code> &nbsp; &nbsp; &nbsp;istruzioni</code></strong><br><strong><code>else</code></strong><br><strong><code> &nbsp; &nbsp; &nbsp;istruzioni</code></strong><br><strong><code>fi</code></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/500px-If-Then-Else-diagram.svg.png" class="kg-image" alt="500px-If-Then-Else-diagram.svg" width="500" height="488" loading="lazy"><figcaption>L'Istruzione if</figcaption></figure><h4 id="usare-l-istruzione-if">Usare l'Istruzione if</h4><p>Nell'esempio seguente, un'istruzione <strong>if</strong> verifica se esiste un determinato file e se viene trovato il file, visualizza un messaggio che indica successo o fallimento:</p><p><strong><code>if [ -f "$1" ]</code></strong><br><strong><code>then</code></strong><br><strong><code> &nbsp; echo file "$1 esiste</code>"</strong><br><strong><code>else</code></strong><br><strong><code> &nbsp; echo file "$1" non esiste</code></strong><br><strong><code>fi</code></strong></p><p>Dovremmo davvero anche verificare che ci sia un argomento passato allo script (<strong>$1</strong>) e interrompere l'esecuzione in caso negativo.</p><p>Notare l'uso delle parentesi quadre (<strong>[]</strong>) per delimitare la condizione di controllo. Esistono molti altri tipi di test che puoi eseguire, come verificare se due numeri sono uguali, maggiori o minori l'uno dell'altro e prendere una decisione di conseguenza; discuteremo questi altri controlli.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/49fork1.png" class="kg-image" alt="49fork1" width="536" height="536" loading="lazy"></figure><p>Negli script moderni, potresti vedere parentesi raddoppiate come in <strong><code>[[-f /etc /passwd ]]</code></strong>. Questo non è un errore. Non è mai sbagliato farlo ed evita alcuni sottili problemi, come fare riferimento a una variabile di ambiente vuota senza racchiuderla tra doppi apici; non ne parleremo qui.</p><h4 id="l-istruzione-elif">L'Istruzione elif</h4><p>Puoi usare l'istruzione <strong>elif</strong> per eseguire controlli più complicati e intraprendere azioni appropriate. La sintassi di base è:</p><p><strong><code>if [ uncertotest ] ; then</code></strong><br><strong><code> &nbsp; echo test1 superato</code></strong><br><strong><code>elif [ unaltrotest ] ; then</code></strong><br><strong><code> &nbsp; echo test2 superato</code></strong><br><strong><code>fi</code></strong></p><p>Nell'esempio mostrato qui sotto utilizziamo i controlli per le stringhe, che spiegheremo a breve, mostrando come inserire una variabile di ambiente con l'istruzione <strong>read</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/elif.png" class="kg-image" alt="elif" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/elif.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/elif.png 624w" width="624" height="580" loading="lazy"><figcaption>L'Istruzione elif</figcaption></figure><h4 id="test-per-i-file">Test per i File</h4><p>bash fornisce una serie di condizioni di test sui file, che possono essere utilizzate con l'istruzione <strong>if</strong>, comprese quelle nella tabella.</p><p>È possibile utilizzare l'istruzione <strong>if</strong> per testare gli attributi del file, come ad esempio:</p><ul><li>Esistenza di file o directory</li><li>Permessi di lettura o scrittura</li><li>Permessi di esecuzione.</li></ul><p>Ad esempio:</p><p><strong><code>if [ -x /etc/passwd ] ; then</code></strong><br><strong><code> &nbsp; AZIONE</code></strong><br><strong><code>fi</code></strong></p><p>L'istruzione <strong>if</strong> verifica se il file <strong>/etc/passwd</strong> sia eseguibile, cosa che non è. Nota la pratica molto comune di inserire:</p><p><strong><code>; then</code></strong></p><p>sulla stessa riga dell'istruzione <strong>if</strong> .</p><p>È possibile visualizzare l'elenco completo delle condizioni di test sui file digitando:</p><p><strong><code>man 1 test</code></strong>.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Condizione</strong></th>
<th><strong>Significato</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>-e file</code></strong></td>
<td>Verifica se file esiste.</td>
</tr>
<tr>
<td><strong><code>-d file</code></strong></td>
<td>Verifica se file è una directory.</td>
</tr>
<tr>
<td><strong><code>-f file</code></strong></td>
<td>Verifica se file è un file normale (vale a dire non un link simbolico, un nodo di dispositivo, directory ecc.)</td>
</tr>
<tr>
<td><strong><code>-s file</code></strong></td>
<td>Verifica se file ha dimensioni maggiori di zero.</td>
</tr>
<tr>
<td><strong><code>-g file</code></strong></td>
<td>Verifica se file ha impostato il <strong>sgid</strong>.</td>
</tr>
<tr>
<td><strong><code>-u file</code></strong></td>
<td>Verifica se file ha impostato il <strong>suid</strong>.</td>
</tr>
<tr>
<td><strong><code>-r file</code></strong></td>
<td>Verifica se file è leggibile.</td>
</tr>
<tr>
<td><strong><code>-w file</code></strong></td>
<td>Verifica se file è modificabile.</td>
</tr>
<tr>
<td><strong><code>-x file</code></strong></td>
<td>Verifica se file è eseguibile.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h4 id="espressioni-booleane">Espressioni Booleane</h4><p>Le espressioni booleane esprimono un valore vero (TRUE) o falso (FALSE), e i risultati sono ottenuti utilizzando i vari operatori booleani elencati nella tabella.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Operatore</strong></th>
<th><strong>Operazione</strong></th>
<th><strong>Significato</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>&amp;&amp;</code></strong></td>
<td><strong><code>E</code></strong></td>
<td>L'azione sarà eseguita solo se entrambe le condizioni vengono valutate vere.</td>
</tr>
<tr>
<td><strong><code>||</code></strong></td>
<td><strong><code>OPPURE</code></strong></td>
<td>L'azione sarà eseguita solo se una delle condizioni è valutata vera.</td>
</tr>
<tr>
<td><strong><code>!</code></strong></td>
<td><strong><code>NON</code></strong></td>
<td>L'azione sarà eseguita solo la condizione viene valutata falsa.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Nota che se hai più condizioni unite dall'operatore <strong>&amp;&amp;</strong>, l'elaborazione si interrompe non appena una condizione viene valutata coma falsa. Ad esempio, se hai <strong><code>A &amp;&amp; B &amp;&amp; C</code></strong> e <strong>A</strong> è vero ma <strong>B</strong> è falso, <strong>C</strong> non verrà mai eseguito.</p><p>Allo stesso modo, se si utilizza l'operatore <strong>||</strong>, l'elaborazione si ferma non appena qualcosa è vero. Ad esempio, se hai <strong><code>A || B || C</code></strong> e <strong>A</strong> è falso e <strong>B</strong> è vero, non eseguirai mai <strong>C</strong>.</p><h4 id="test-nelle-espressioni-booleane">Test nelle Espressioni Booleane</h4><p>Le espressioni booleane restituiscono vero o falso. Possiamo utilizzare tali espressioni quando si lavora con più tipi di dati, inclusi stringhe o numeri, nonché con i file. Ad esempio, per verificare se esiste un file, utilizzare il seguente test condizionale:</p><p><strong><code>[ -e &lt;nomefile&gt; ]</code></strong></p><p>In modo simile, per verificare che il valore di &nbsp;<strong>number1</strong> sia maggiore del valore di <strong>number2</strong>, usa il seguente test condizionale:</p><p><strong><code>[ $number1 -gt $number2 ]</code></strong></p><p>L'operatore <strong>-gt</strong> ritorna vero se <strong>number1</strong> è maggiore di <strong>number2</strong>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/truefalse.jpg" class="kg-image" alt="truefalse" width="170" height="170" loading="lazy"></figure><h4 id="esempi-di-test-di-stringhe">Esempi di Test di Stringhe</h4><p>Puoi usare l'istruzione <strong>if</strong> per confrontare stringhe usando l'operatore <strong>==</strong> (due simboli di uguale). La sintassi è la seguente:</p><p><strong><code>if [ string1 == string2 ] ; then</code></strong><br><strong><code> &nbsp;AZIONE</code></strong><br><strong><code>fi</code></strong></p><p>Nota che usare un solo segno <strong>=</strong> funziona comunque, ma alcuni lo ritengono un uso deprecato. Ora considera un esempio di verifica di stringhe.</p><p>Nell'esempio illustrato qui, l'istruzione <strong>if</strong> viene utilizzata per confrontare l'input fornito dall'utente e visualizzare di conseguenza il risultato.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/ifstringubuntu.png" class="kg-image" alt="ifstringubuntu" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/ifstringubuntu.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/ifstringubuntu.png 642w" width="642" height="581" loading="lazy"><figcaption>Esempi di Test con le Stringhe</figcaption></figure><h4 id="test-numerici">Test Numerici</h4><p>È possibile utilizzare operatori appositamente definiti con l'istruzione <strong><code>if</code></strong> per confrontare i numeri. I vari operatori disponibili sono elencati nella tabella:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Operatore</strong></th>
<th><strong>Significato</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>-eq</code></strong></td>
<td>Uguale a</td>
</tr>
<tr>
<td><strong><code>-ne</code></strong></td>
<td>Non uguale a</td>
</tr>
<tr>
<td><strong><code>-gt</code></strong></td>
<td>Maggiore di</td>
</tr>
<tr>
<td><strong><code>-lt</code></strong></td>
<td>Minore di</td>
</tr>
<tr>
<td><strong><code>-ge</code></strong></td>
<td>Maggiore o uguale a</td>
</tr>
<tr>
<td><strong><code>-le</code></strong></td>
<td>Minore o uguale a</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>La sintassi per il confronto dei numeri è la seguente:<br><strong>espressione1 -operatore espressione2</strong></p><h4 id="esempi-di-test-per-i-numeri">Esempi di Test per i Numeri</h4><p>Nella videata seguente, ecco alcuni esempi di confronto di numeri usando diversi operatori:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/mathtestubuntu.png" class="kg-image" alt="mathtestubuntu" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/mathtestubuntu.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/mathtestubuntu.png 602w" width="602" height="410" loading="lazy"><figcaption>Esempi di Testo con i Numeri</figcaption></figure><h3 id="espressioni-aritmetiche">Espressioni Aritmetiche</h3><p>Le espressioni aritmetiche possono essere valutate nei seguenti tre modi (gli spazi sono importanti!):</p><ul><li>Usando l'utility <strong>expr</strong>:<br><strong>expr</strong> è un programma standard ma in un qualche modo deprecato. La sintassi è: <strong><code>expr 8 + 8</code></strong><br><strong><code>echo $(expr 8 + 8)</code></strong></li><li>Usando la sintassi <strong><code>$((...))</code></strong>:<br>questo è il formato integrato nella shell. La sintassi è: <strong><code>echo $((x+1))</code></strong></li><li>Usando il comando integrato della shell <strong>let</strong>:<br>La sintassi è: <strong><code>let x=( 1 + 2 ); echo $x</code></strong></li></ul><p>Negli script di shell moderni, l'uso di <strong>expr</strong> è rimpiazzato da <strong><code>var=$((...))</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/mathevalrhel7.png" class="kg-image" alt="mathevalrhel7" width="375" height="162" loading="lazy"><figcaption>Espressioni Aritmetiche</figcaption></figure><h2 id="riepilogo-del-capitolo-8">Riepilogo del Capitolo</h2><p>Hai completato il capitolo 15. Riassumiamo i concetti chiave trattati:</p><ul><li>Gli script sono una sequenza di istruzioni e comandi memorizzati in un file che possono essere eseguiti da una shell. La shell più comunemente usata in Linux è bash.</li><li>La sostituzione del comando consente di sostituire il risultato di un comando come parte di un altro comando.</li><li>Le funzioni o routine sono un gruppo di comandi utilizzati per l'esecuzione.</li><li>Le variabili di ambiente sono quantità preassegnate dalla shell oppure definite e modificate dall'utente.</li><li>Per rendere visibili le variabili di ambiente ai processi figli, devono essere esportate.</li><li>Gli script possono comportarsi in modo diverso in base ai parametri (valori) passati a essi.</li><li>Il processo di scrittura dell'output su un file viene chiamato reindirizzamento dell'output.</li><li>Il processo di lettura di input da un file è chiamato reindirizzamento dell'input.</li><li>L'istruzione <strong>if</strong> viene utilizzata per selezionare un'azione basata su una condizione.</li><li>Le espressioni aritmetiche sono costituite da numeri e operatori aritmetici, come <strong>+</strong>, <strong>-</strong> e <strong>*</strong>.</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_Summary--5-.jpg" class="kg-image" alt="LFS01_Summary--5-" width="330" height="306" loading="lazy"></figure><h2 id="capitolo-16-altro-sullo-scripting-di-shell-bash">Capitolo 16: Altro sullo Scripting di Shell Bash</h2><h3 id="obiettivi-formativi-12">Obiettivi formativi</h3><p>Entro la fine di questo capitolo, dovresti essere in grado di:</p><ul><li>Manipolare le stringhe per eseguire azioni come il confronto e l'ordinamento.</li><li>Utilizzare espressioni booleane quando si lavora con più tipi di dati, inclusi stringhe o numeri, nonché file.</li><li>Utilizzare l'istruzione <strong>case</strong> per gestire le opzioni della riga di comando.</li><li>Utilizzare costrutti di ciclo per eseguire una o più righe di codice ripetutamente.</li><li>Eseguire debug di script usando <strong>set -x</strong> e <strong>set +x</strong>.</li><li>Creare file temporanei e directory.</li><li>Creare e usare numeri casuali.</li></ul><h3 id="manipolazione-di-stringhe">Manipolazione di Stringhe</h3><p>Andiamo più a fondo e scopriamo come lavorare con le stringhe negli script.</p><p>Una variabile stringa contiene una sequenza di caratteri di testo. Può includere lettere, numeri, simboli e segni di punteggiatura. Alcuni esempi includono: <strong>abcde</strong>, <strong>123</strong>, <strong>abcde 123</strong>, <strong>abcde-123</strong>, <strong>&amp;acbde=%123</strong>.</p><p>Gli operatori di stringa includono quelli di confronto, ordinamento e ricerca della lunghezza. La tabella seguente dimostra l'uso di alcuni operatori di stringa di base:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Operatore</strong></th>
<th><strong>Significato</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>[[ string1 &gt; string2 ]]</code></strong></td>
<td>Confronta alfabeticamente <strong>string1</strong> e <strong>string2</strong>.</td>
</tr>
<tr>
<td><strong><code>[[ string1 == string2 ]]</code></strong></td>
<td>Confronta i caratteri in<strong>string1</strong> con i caratteri in <strong>string2</strong>.</td>
</tr>
<tr>
<td><strong><code>myLen1=${#string1}</code></strong></td>
<td>Salva la lunghezza di <strong>string1</strong> nella variabile <strong>myLen1</strong>.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h4 id="esempi-di-manipolazione-di-stringhe">Esempi di Manipolazione di Stringhe</h4><p>Nel primo esempio, confrontiamo la prima stringa con la seconda stringa e visualizziamo un messaggio appropriato utilizzando l'istruzione <strong>if</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/stringdemos_horizontal1.png" class="kg-image" alt="stringdemos_horizontal1" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/stringdemos_horizontal1.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/stringdemos_horizontal1.png 864w" sizes="(min-width: 720px) 720px" width="864" height="523" loading="lazy"><figcaption>Confrontare Stringhe e Usare l'Istruzione if</figcaption></figure><p>Nel secondo esempio, passiamo il nome di un file e vediamo se quel file esiste nella directory corrente o no.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/stringdemos_horizontal2.png" class="kg-image" alt="stringdemos_horizontal2" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/stringdemos_horizontal2.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/stringdemos_horizontal2.png 865w" sizes="(min-width: 720px) 720px" width="865" height="523" loading="lazy"><figcaption>Passare un Nome di File e Verificare se Esiste nella Directory Corrente</figcaption></figure><h4 id="parti-di-una-stringa">Parti di una Stringa</h4><p>A volte, potrebbe non essere necessario confrontare o utilizzare un'intera stringa. Per estrarre i primi <strong>n</strong> caratteri di una stringa possiamo specificare: <strong><code>${string:0:n}</code></strong>. Qui, <strong>0</strong> è l'offset nella stringa (cioè da quale carattere iniziare l'estrazione) e <strong>n</strong> è il numero di caratteri da estrarre.</p><p>Per estrarre tutti i caratteri in una stringa dopo un punto (<strong>.</strong>), usa la seguente espressione: <strong><code>${string#*.}</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/stringmanip.png" class="kg-image" alt="stringmanip" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/stringmanip.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/stringmanip.png 865w" sizes="(min-width: 720px) 720px" width="865" height="276" loading="lazy"><figcaption>Parti di una Stringa</figcaption></figure><h3 id="l-istruzione-case">L'istruzione case</h3><p>L'istruzione <strong>case</strong> viene utilizzata nei casi in cui il valore effettivo di una variabile può portare a percorsi di esecuzione diversi. Le istruzioni <strong>case</strong> vengono spesso utilizzate per gestire le opzioni della riga di comando.</p><p>Di seguito sono riportati alcuni dei vantaggi dell'utilizzo dell'istruzione <strong>case</strong>:</p><ul><li>È più facile da leggere e scrivere.</li><li>È una buona alternativa ai blocchi di codice <strong>if-then-else-fi</strong> annidati, multilivello.</li><li>Ti consente di confrontare una variabile con diversi valori contemporaneamente.</li><li>Riduce la complessità di un programma.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/image-106.png" class="kg-image" alt="image-106" width="531" height="273" loading="lazy"><figcaption>Caratteristiche dell'Istruzione case</figcaption></figure><h4 id="struttura-dell-istruzione-case">Struttura dell'Istruzione case</h4><p>Ecco la struttura di base dell'istruzione <strong>case</strong>:</p><p><strong><code>case espressione in</code></strong><br><strong><code> &nbsp;pattern1) esegue i comandi;;</code></strong><br><strong><code> &nbsp;pattern2) esegue i comandi;;</code></strong><br><strong><code> &nbsp;pattern3) esegue i comandi;;</code></strong><br><strong><code> &nbsp;pattern4) esegue i comandi;;</code></strong><br><strong><code> &nbsp;* ) &nbsp; &nbsp; &nbsp; esegue qualche comando predefinito oppure nulla;;</code></strong><br><strong><code>esac</code></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch15_screen18.jpg" class="kg-image" alt="LFS01_ch15_screen18" width="350" height="427" loading="lazy"><figcaption>Struttura dell'Istruzione case</figcaption></figure><h4 id="esempio-dell-uso-del-costrutto-case">Esempio dell'Uso del Costrutto case</h4><p>Ecco un esempio dell'uso di un costrutto <strong>case</strong>. Nota come sia possibile avere più possibilità per ciascun valore di caso che eseguono la stessa azione.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/testcase.png" class="kg-image" alt="testcase" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/testcase.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/testcase.png 755w" sizes="(min-width: 720px) 720px" width="755" height="675" loading="lazy"><figcaption>Esempio di Uso del Costrutto case</figcaption></figure><h3 id="costrutti-per-eseguire-cicli">Costrutti per Eseguire Cicli</h3><p>Usando i costrutti di esecuzione di un ciclo, è possibile eseguire una o più righe di codice ripetutamente, di solito su una selezione di valori di dati come ad esempio singoli file. Di solito, lo fai fino a quando un test condizionale non restituisce vero o falso, come richiesto.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch15_screen23.jpg" class="kg-image" alt="LFS01_ch15_screen23" width="276" height="304" loading="lazy"><figcaption>Costrutti per Eseguire Cicli</figcaption></figure><p>Nella maggior parte dei linguaggi di programmazione sono spesso utilizzati tre tipi di cicli:</p><ul><li><strong>for</strong></li><li><strong>while</strong></li><li><strong>until</strong></li></ul><p>Tutti questi cicli sono facilmente utilizzati per ripetere una serie di istruzioni fino a quando la condizione di uscita non è vera.</p><h4 id="il-ciclo-for">Il Ciclo for</h4><p>Il ciclo <strong>for</strong> opera su ciascun elemento di un elenco di elementi. La sintassi per il ciclo <strong>for</strong> è:</p><p><strong><code>for nome-variabile in elenco</code></strong><br><strong><code>do</code></strong><br>**<code> &nbsp; esegui una iterazione per ciascun elemento in elenco fino a quando elenco non ha più elementi</code><br><strong><code>done</code></strong></p><p>In questo caso <strong>nome-variabile</strong> ed <strong>elenco</strong> sono sostituiti da te come appropriato (vedi esempi). Così come con altri costrutti per cicli, le dichiarazioni ripetute dovrebbero essere racchiuse tra <strong>do</strong> e <strong>done</strong>.</p><p>La videata seguente mostra un esempio del ciclo <strong>for</strong> per stampare la somma dei numeri da 1 a 10.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/testfor.png" class="kg-image" alt="testfor" width="585" height="428" loading="lazy"><figcaption>Il Ciclo for</figcaption></figure><h4 id="il-ciclo-while">Il Ciclo while</h4><p>Il ciclo <strong>while</strong> ripete una serie di istruzioni finché il comando di controllo restituisce vero. La sintassi è:</p><p><strong><code>while condizione è vera</code></strong><br><strong><code>do</code></strong><br><strong><code> &nbsp; Comandi da eseguire</code></strong><br><strong><code> &nbsp; ----</code></strong><br><strong><code>done</code></strong></p><p>L'insieme di comandi che devono essere ripetuti dovrebbe essere racchiuso tra <strong>do</strong> e <strong>done</strong>. È possibile utilizzare qualsiasi comando o operatore come condizione. Spesso è racchiuso tra parentesi quadre (<strong>[]</strong>).</p><p>La videata seguente mosta un esempio del ciclo <strong>while</strong> che calcola il fattoriale di un numero. Sai come mai il calcolo di 21! fornisce un cattivo risultato?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/testwhile.png" class="kg-image" alt="testwhile" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/testwhile.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/testwhile.png 695w" width="695" height="485" loading="lazy"><figcaption>Il Ciclo while</figcaption></figure><h3 id="il-ciclo-until">Il Ciclo until</h3><p>Il ciclo <strong>until</strong> ripete una serie di istruzioni finché il comando di controllo è falso. Pertanto, è essenzialmente l'opposto del ciclo <strong>while</strong>. La sintassi è:</p><p><strong><code>until condizione è falsa</code></strong><br><strong><code>do</code></strong><br><strong><code> &nbsp; Comandi da eseguire</code></strong><br><strong><code> &nbsp; ----</code></strong><br><strong><code>done</code></strong></p><p>In modo simile al ciclo <strong>while</strong>, l'insieme di comandi che devono essere ripetuti dovrebbe essere racchiuso tra <strong>do</strong> e <strong>done</strong>. È possibile utilizzare qualsiasi comando o operatore come condizione.</p><p>La videata che segue mostra un esempio del ciclo <strong>until</strong> che ancora una volta calcola fattoriali; è solo leggermente diverso nel caso di test per il ciclo <strong>while</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/testuntil.png" class="kg-image" alt="testuntil" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/testuntil.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/testuntil.png 695w" width="695" height="447" loading="lazy"><figcaption>Il Ciclo until</figcaption></figure><h3 id="debug-degli-script-bash">Debug degli Script bash</h3><p>Mentre si lavora con script e comandi, è possibile che si verifichino errori. Questi possono essere dovuti a un errore nello script, come una sintassi errata, o altre casistiche, come un file mancante o un'autorizzazione insufficiente per eseguire un'operazione. Questi errori possono essere segnalati con un codice di errore specifico, ma spesso producono semplicemente risultati errati o confusi. Quindi, come si fa a identificare e correggere un errore?</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_Chapter15_Screen29.jpg" class="kg-image" alt="LFS01_Chapter15_Screen29" width="400" height="300" loading="lazy"></figure><p>Il debug ti aiuta a individuare e risolvere tali errori ed è uno dei compiti più importanti che un amministratore di sistema svolge.</p><h4 id="modalit-debug-negli-script">Modalità Debug negli Script</h4><p>Prima di correggere un errore (o bug), è fondamentale conoscere la sua fonte.</p><p>È possibile eseguire uno script bash in modalità debug <strong><code>bash –x ./script_file</code></strong>, oppure racchiudere parti dello script tra <strong>set -x</strong> e <strong>set +x</strong>. La modalità di debug aiuta a identificare l'errore in quanto:</p><ul><li>Traccia e prefissa ogni comando con il carattere <strong>+</strong>.</li><li>Visualizza ogni comando prima di eseguirlo.</li><li>Può eseguire il debug delle sole parti selezionate di uno script (se lo si desidera) con:</li></ul><p><strong><code>set -x &nbsp; &nbsp;# attiva il debug</code></strong><br><strong><code>...</code></strong><br><strong><code>set +x &nbsp; &nbsp;# disattiva il debug</code></strong></p><p>La videata seguente mostra uno script che viene eseguito in modalità debug se lanciato con qualsiasi argomento dalla riga di comando.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/shdebug.png" class="kg-image" alt="shdebug" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/shdebug.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/shdebug.png 865w" sizes="(min-width: 720px) 720px" width="865" height="770" loading="lazy"><figcaption>Modalità Debug per uno Script</figcaption></figure><h4 id="reindirizzare-gli-errori-su-file-e-schermo">Reindirizzare gli Errori su File e Schermo</h4><p>In UNIX/Linux, a tutti i programmi eseguiti vengono forniti tre flussi di file aperti quando vengono avviati, come elencati nella tabella:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Flusso File<br></strong></th>
<th><strong>Descrizione</strong></th>
<th><strong>Descrittore File</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>stdin</strong></td>
<td>Standard Input, per impostazione predefinita la tastiera/terminale per i programmi eseguiti dalla riga di comando</td>
<td>0</td>
</tr>
<tr>
<td><strong>stdout</strong></td>
<td>Standard output, per impostazione predefinita lo schermo per i programmi eseguiti dalla riga di comando</td>
<td>1</td>
</tr>
<tr>
<td><strong>stderr</strong></td>
<td>Standard error, dove vengono visualizzati o salvati i messaggi di errore</td>
<td>2</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Utilizzando il reindirizzamento, possiamo salvare i flussi stdout e stderr in un file o due file separati per l'analisi successiva dopo l'esecuzione di un programma o del comando.</p><p>La videata mostra uno script di shell con un semplice bug, che viene eseguito e l'output dell'errore viene deviato in <strong><code>error.log</code></strong>. Utilizzando <strong>cat</strong> per visualizzare il contenuto del file di errore aggiornato durante il debug. Riesci a vedere come correggere lo script?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/testbasherr.png" class="kg-image" alt="testbasherr" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/testbasherr.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/testbasherr.png 724w" sizes="(min-width: 720px) 720px" width="724" height="445" loading="lazy"><figcaption>Reindirizzamento degli Errori a un File e allo Schermo</figcaption></figure><h3 id="creare-file-e-directory-temporanee">Creare File e Directory Temporanee</h3><p>Prendi in considerazione una situazione nella quale vuoi recuperare 100 record da un file con 10.000 record. Avrai bisogno di un posto per archiviare le informazioni estratte, forse in un file temporaneo, mentre si effettuano ulteriori elaborazioni su di esso.</p><p>I file temporanei (e le directory) sono pensati per archiviare i dati per un breve periodo. Di solito, si fa in modo che questi file scompaiano quando il programma che li usa termina. Mentre puoi anche usare <code>touch</code> per creare un file temporaneo, in alcune circostanze ciò può semplificare l'accesso ai tuoi dati da parti di hacker. Questo è particolarmente vero se il nome e la posizione del file temporaneo sono prevedibili.</p><p>La migliore pratica è quella di creare nomi di file casuali e imprevedibili per la conservazione temporanea. Un modo per farlo è con l'utilità <strong>mktemp</strong>, come nei seguenti esempi.</p><p><strong>XXXXXXXX</strong> è sostituito da <strong>mktemp</strong> con caratteri casuali per garantire che il nome del file temporaneo non possa essere facilmente previsto e sia noto solo all'interno del programma.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>TEMP=$(mktemp /tmp/tempfile.XXXXXXXX)</code></strong></td>
<td>Crea un file temporaneo</td>
</tr>
<tr>
<td><strong><code>TEMPDIR=$(mktemp -d /tmp/tempdir.XXXXXXXX)</code></strong></td>
<td>Crea una directory temporanea</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h4 id="esempi-di-creazione-di-directory-e-file-temporanei">Esempi di Creazione di Directory e File Temporanei</h4><p>Una scarsa attenzione nella creazione di file temporanei può portare a danni reali, sia per caso che a causa di un attore dannoso. Ad esempio, se qualcuno dovesse creare un collegamento simbolico utilizzato da root da un noto file temporaneo verso file <strong><code>/etc/passwd</code></strong>, come questo:</p><p><strong><code>$ ln -s /etc/passwd /tmp/tempfile</code></strong></p><p>Potrebbe esserci un grosso problema se uno script eseguito da root ha una riga che contiene:</p><p><strong><code>echo $VAR &gt; /tmp/tempfile</code></strong></p><p>Il file passwd sarà sovrascritto dal contenuto del file temporaneo.</p><p>Per evitare una situazione del genere, assicurati di utilizzare nomi casuali per i file temporanei sostituendo la riga sopra con le seguenti righe:</p><p><strong><code>TEMP=$(mktemp /tmp/tempfile.XXXXXXXX)</code></strong><br><strong><code>echo $VAR &gt; $TEMP</code></strong></p><p>Nota che la videata mostra file temporanei con nomi simili creati in giorni differenti, ma con caratteri generati casualmente all'interno di essi.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/tmpfilecentos.png" class="kg-image" alt="tmpfilecentos" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/tmpfilecentos.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/tmpfilecentos.png 787w" sizes="(min-width: 720px) 720px" width="787" height="337" loading="lazy"><figcaption>Esempio della Creazione di Un File e una Directory Temporanei</figcaption></figure><h3 id="scartare-l-output-con-dev-null">Scartare l'output con /dev/null</h3><p>Alcuni comandi (come <strong>find</strong>) produrranno quantità voluminose di output, che possono intasare la console. Per evitare questo, possiamo reindirizzare l'output di grandi dimensioni a un file speciale (un nodo di dispositivo) chiamato <strong><code>/dev/null</code></strong>. Questo pseudofile è anche chiamato bit bucket oppure buco nero.</p><p>Tutti i dati scritti vengono scartati e le operazioni di scrittura non restituiscono mai una condizione di fallimento. Usando gli operatori di reindirizzamento corretti, può far scomparire l'output da comandi che normalmente genererebbero output verso stdout e/o stderr:</p><p><strong><code>$ ls -lR /tmp &gt; /dev/null</code></strong></p><p>Nel comando sopra, l'intero flusso di output standard viene ignorato, ma eventuali errori appariranno comunque sulla console.Tuttavia, se si fa:</p><p><strong><code>$ ls -lR /tmp &gt;&amp; /dev/null</code></strong></p><p>sia <strong>stdout</strong> che <strong>stderr</strong> saranno scaricati in &nbsp;<strong><code>/dev/null</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/devnullrhel.png" class="kg-image" alt="devnullrhel" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/devnullrhel.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/devnullrhel.png 735w" sizes="(min-width: 720px) 720px" width="735" height="276" loading="lazy"><figcaption>Scartare l'Output con /dev/null</figcaption></figure><h3 id="numeri-e-dati-casuali">Numeri e Dati Casuali</h3><p>È spesso utile generare numeri e altri dati casuali quando si deve ad esempio:</p><ul><li>Svolgere attività relative alla sicurezza</li><li>Reinizializzare dispositivi di archiviazione</li><li>Cancellare e/o oscurare dati esistenti</li><li>Generare dati insignificanti da utilizzare per i test</li></ul><p>Tali numeri casuali possono essere generati utilizzando la variabile di ambiente <strong>$RANDOM</strong>, che è derivata dal generatore di numeri casuali incorporato del kernel Linux o dalla funzione della libreria OpenSSL, che utilizza l'algoritmo FIPS140 (Federal Information Processing Standard) per generare numeri casuali per la crittografia.</p><p>Per saperne di più su FIPS140, leggi <strong><a href="https://www.entrust.com/it/resources/hsm/faq/data-protection-security-regulations/what-fips-140-2">"Che cos'è lo standard FIPS 140-2"</a></strong>.</p><p>L'esempio mostra come utilizzare facilmente il metodo della variabile di ambiente per generare numeri casuali.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/randomubuntu.png" class="kg-image" alt="randomubuntu" width="381" height="183" loading="lazy"><figcaption>Numeri e Dati Casuali</figcaption></figure><h4 id="come-il-kernel-genera-numeri-casuali">Come il Kernel Genera Numeri Casuali</h4><p>Alcuni server dispongono di generatori di numeri casuali hardware che ricevono come input diversi tipi di segnali di rumore, come il rumore termico e l'effetto fotoelettrico. Un trasduttore converte questo rumore in un segnale elettrico, che viene nuovamente convertito in un numero digitale da un convertitore Analogico-Digitale. Questo numero è considerato casuale. Tuttavia, la maggior parte dei computer comuni non contiene hardware così specializzato e, invece, si basa sugli eventi creati durante l'avvio per creare i dati grezzi necessari.</p><p>Indipendentemente da quale di queste due fonti viene utilizzata, il sistema mantiene un cosiddetto pool di entropia di questi numeri digitali/bit casuali. I numeri casuali sono creati da questo pool entropico.</p><p>Il kernel Linux offre i nodi del dispositivo <strong><code>/dev/random</code></strong> e <strong><code>/dev/urandom</code></strong>, che attingono al pool di entropia per fornire numeri casuali che sono estratti dal numero stimato di bit di rumore nel pool entropia.</p><p><strong><code>/dev/Random</code></strong> viene utilizzato quando è richiesta una casualità di alta qualità, come un OTP o una generazione di chiave, ma è relativamente lento a fornire valori. <strong><code>/dev/urandom</code></strong> è più veloce e adatto (abbastanza buono) per la maggior parte degli scopi crittografici.</p><p>Inoltre, quando il pool di entropia è vuoto, <strong><code>/dev/random</code></strong> viene bloccato e non genera alcun numero fino a quando viene raccolto un ulteriore rumore ambientale (traffico di rete, movimento del mouse, ecc.), mentre <strong><code>/dev/urandom</code></strong> riutilizza il pool interno per produrre più bit pseudo-casuali.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/devrandom.png" class="kg-image" alt="devrandom" width="555" height="143" loading="lazy"><figcaption>Come il Kernel Genera Numeri Casuali</figcaption></figure><h3 id="riepilogo-del-capitolo-9">Riepilogo del Capitolo</h3><p>Hai completato il capitolo 16. Riassumiamo i concetti chiave coperti:</p><ul><li>È possibile manipolare le stringhe per eseguire azioni come confronto, smistamento e trovare la lunghezza.</li><li>È possibile utilizzare espressioni booleane quando si lavora con più tipi di dati, inclusi stringhe o numeri e file.</li><li>Il risultato di un'espressione booleana è vero o falso.</li><li>Gli operatori utilizzati nelle espressioni booleane includono <strong>&amp;&amp;</strong> (E), <strong>||</strong> (O) e <strong>!</strong> (NON).</li><li>Abbiamo esaminato i vantaggi dell'utilizzo dell'istruzione <strong>case</strong> negli scenari in cui il valore di una variabile può portare a diversi percorsi di esecuzione.</li><li>I metodi di debug dello script aiutano la risoluzione dei problemi e a correggere gli errori.</li><li>L'ouput standard e di errore da uno script o i comandi dalla shell possono essere facilmente reindirizzati nello stesso file o in file separati per aiutare il debug salvando i risultati.</li><li>Linux consente di creare file e directory temporanei, che archiviano i dati per una breve durata, salvando lo spazio e aumentando la sicurezza.</li><li>Linux fornisce diversi modi per generare numeri casuali, che sono ampiamente utilizzati.</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_Summary--6-.jpg" class="kg-image" alt="LFS01_Summary--6-" width="330" height="306" loading="lazy"></figure><h2 id="capitolo-17-stampare">Capitolo 17: Stampare</h2><h3 id="obiettivi-formativi-13">Obiettivi Formativi</h3><p>Entro la fine di questo capitolo, dovresti sapere come:</p><ul><li>Configurare una stampante su una macchina Linux.</li><li>Stampare documenti.</li><li>Manipolare i file PostScript e PDF utilizzando utilità della riga di comando.</li></ul><h3 id="stampare-in-linux">Stampare in Linux</h3><p>Per gestire le stampanti e stampare direttamente da un computer o attraverso un ambiente in rete, è necessario sapere come configurare e installare una stampante. La stampa stessa richiede un software che converte le informazioni dall'applicazione che si utilizza in un linguaggio che la stampante possa capire. Lo standard Linux per il software di stampa è CUPS (Common Unix Printing System).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch13_screen_03.jpg" class="kg-image" alt="LFS01_ch13_screen_03" width="455" height="341" loading="lazy"></figure><p>I moderni sistemi desktop Linux rendono l'installazione e l'amministrazione delle stampanti piuttosto semplice e intuitiva, e non diversamente da come viene fatto su altri sistemi operativi. Tuttavia, è istruttivo capire le basi di come viene fatto in Linux.</p><h3 id="panoramica-di-cups">Panoramica di CUPS</h3><p>CUPS è il software alla base di quasi tutti i sistemi Linux utilizzato per stampare da applicazioni come un browser web o LibreOffice. Converte le descrizioni delle pagine prodotte dalla tua applicazione (metti un paragrafo qui, traccia una linea lì e così via), quindi invia le informazioni alla stampante. Agisce come server di stampa sia per stampanti locali che di rete.</p><p>Le stampanti prodotte da diverse aziende possono utilizzare i propri linguaggi e formati di stampa particolari. CUPS utilizza un sistema di stampa modulare che accoglie un'ampia varietà di stampanti e elabora anche vari formati di dati. Questo rende il processo di stampa più semplice; puoi concentrarti di più sulla stampa e meno su come stampare.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/CUPs_Logo.png" class="kg-image" alt="CUPs_Logo" width="248" height="293" loading="lazy"></figure><p>In generale, l'unica volta in cui è necessario configurare la stampante è quando la usi per la prima volta. In effetti, CUPS spesso scopre le cose da solo rilevando e configurando eventuali stampanti che individua.</p><h3 id="come-funziona-cups">Come Funziona CUPS?</h3><p>CUPS esegue il processo di stampa con l'aiuto dei suoi vari componenti:</p><ul><li>File di configurazione</li><li>Scheduler</li><li>File di lavoro</li><li>File di Log</li><li>Filtro</li><li>Driver della stampante</li><li>Backend.</li></ul><p>Imparerai a conoscere ciascuno di questi componenti nelle prossime pagine.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch13_screen_05.jpg" class="kg-image" alt="LFS01_ch13_screen_05" width="508" height="361" loading="lazy"><figcaption>Come Funziona CUPS</figcaption></figure><h4 id="scheduler">Scheduler</h4><p>CUPS è progettato attorno a uno scheduler di stampa che gestisce i lavori di stampa, e i comandi amministrativi, consente agli utenti di interrogare lo stato della stampante e gestisce il flusso di dati attraverso tutti i componenti CUPS.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch13_screen_06.jpg" class="kg-image" alt="LFS01_ch13_screen_06" width="510" height="340" loading="lazy"><figcaption>Scheduler</figcaption></figure><p>Esamineremo l'interfaccia basata sul browser che può essere utilizzata con CUPS, che consente di visualizzare e manipolare l'ordine e lo stato dei lavori di stampa in sospeso.</p><h4 id="file-di-configurazione">File di Configurazione</h4><p>Lo scheduler di stampa legge le impostazioni del server da diversi file di configurazione, i due più importanti dei quali sono <strong>cupsd.conf</strong> e <strong>printers.conf</strong>. Questi e altri file di configurazione relativi a CUPS sono conservati nella directory <strong><code>/etc/cups/</code></strong>.</p><p><strong>cupsd.conf</strong> è dove si trova la maggior parte delle impostazioni a livello di sistema; non contiene dettagli specifici della stampante. La maggior parte delle impostazioni disponibili in questo file si riferisce alla sicurezza di rete, ovvero a quali sistemi possono accedere alle capacità di rete di CUPS, come vengono esposte le stampanti sulla rete locale, quali funzionalità di gestione sono offerte e così via.</p><p><strong>printers.conf</strong> è dove troverai le impostazioni specifiche della stampante. Per ogni stampante collegata al sistema, una sezione corrispondente descrive lo stato e le funzionalità della stampante. Questo file viene generato o modificato solo dopo aver aggiunto una stampante al sistema e non deve essere modificato a mano.</p><p>Puoi visualizzare l'elenco completo dei file di configurazione digitando <strong><code>ls -lF /etc/cups</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/etccupsubuntu.png" class="kg-image" alt="etccupsubuntu" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/etccupsubuntu.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/etccupsubuntu.png 608w" width="608" height="295" loading="lazy"><figcaption>La Directory /etc/cups</figcaption></figure><h4 id="file-di-lavoro">File di Lavoro</h4><p>CUPS memorizza le richieste di stampa sotto forma di file nella directory <strong><code>/var/spool/cups</code></strong> (a cui si può effettivamente accedere prima che un documento venga inviato a una stampante). I file di dati sono prefissati con la lettera <strong>d</strong> mentre i file di controllo sono prefissati con la lettera <strong>c</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/varspoolcups.png" class="kg-image" alt="varspoolcups" width="514" height="314" loading="lazy"><figcaption>La Directory /etc/spool/cups</figcaption></figure><p>Dopo che una stampante gestisce correttamente un lavoro, i file di dati vengono rimossi automaticamente. Questi file di dati appartengono a ciò che è comunemente noto come <strong>coda di stampa</strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch13_screen_08.jpg" class="kg-image" alt="LFS01_ch13_screen_08" width="525" height="388" loading="lazy"><figcaption>Coda di Stampa</figcaption></figure><h4 id="file-di-log">File di Log</h4><p>I file di log vengono inseriti in <strong><code>/var/log/cups</code></strong> e sono utilizzati dallo scheduler per registrare attività che hanno avuto luogo. Questi file includono record di accesso, errore e pagina.</p><p>Per visualizzare quali file di log esistono, digita:</p><p><strong><code>$ sudo ls -l /var/log/cups</code></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/varlogcups.png" class="kg-image" alt="varlogcups" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/varlogcups.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/varlogcups.png 654w" width="654" height="257" loading="lazy"><figcaption>Visualizzare i File di Log Usando ls -l /var/log/cups</figcaption></figure><p>Nota che su alcune distribuzioni i permessi sono impostati in modo tale che non sia necessario utilizzare <strong>sudo</strong>. È possibile visualizzare i file di registro con i soliti strumenti.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch13_screen_09.jpg" class="kg-image" alt="LFS01_ch13_screen_09" width="328" height="340" loading="lazy"><figcaption>Visualizzare i File di Log Usando <code>$ sudo ls -l /var/log/cups</code></figcaption></figure><h4 id="filtri-driver-di-stampante-e-backend">Filtri, Driver di Stampante e Backend</h4><p>CUPS usa <strong>filtri</strong> per convertire i formati di file di lavoro in formati stampabili. I <strong>driver della stampante</strong> contengono descrizioni per le stampanti attualmente connesse e configurate e di solito sono conservate sotto <strong><code>/etc/cups/ppd/</code></strong>. I dati di stampa vengono quindi inviati alla stampante tramite un filtro e tramite un <strong>backend</strong> che aiuta a individuare i dispositivi collegati al sistema.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch13_screen_10.jpg" class="kg-image" alt="LFS01_ch13_screen_10" width="506" height="378" loading="lazy"><figcaption>File, Driver di Stampante e Backend</figcaption></figure><p>Quindi, in breve, quando si esegue un comando di stampa, lo scheduler convalida il comando ed elabora il lavoro di stampa, creando file di lavoro in base alle impostazioni specificate nei file di configurazione. Allo stesso tempo, lo scheduler registra le attività nei file di registro. I file di lavoro vengono elaborati con l'aiuto del filtro, del driver della stampante e del backend, quindi inviati alla stampante.</p><h3 id="gestire-cups">Gestire CUPS</h3><p>Supponendo che CUPS sia installato dovrai avviare e gestire il demone CUPS in modo che sia pronto per configurare una stampante. La gestione del demone CUPS è semplice, tutte le funzionalità di gestione possono essere eseguite con l'utility <strong>systemctl</strong> :</p><p><strong><code>$ systemctl status cups</code></strong></p><p><strong><code>$ sudo systemctl [enable|disable] cups</code></strong></p><p><strong><code>$ sudo systemctl [start|stop|restart] cups</code></strong></p><p><strong>NOTA</strong>: <em>la sezione seguente offre una dimostrazione in Ubuntu, ma è lo stesso per tutte le principali distribuzioni Linux correnti.</em></p><!--kg-card-begin: html--><h3>Video: Gestire il Demone CUPS</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V002100_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="configurare-una-stampante-dalla-gui">Configurare una Stampante dalla GUI</h3><p>Ogni distribuzione Linux ha un'applicazione GUI che consente di aggiungere, rimuovere e configurare stampanti locali o remote. Utilizzando questa applicazione, è possibile impostare facilmente il sistema per utilizzare stampanti locali e di rete. Le seguenti videate mostrano come trovare e utilizzare l'applicazione appropriata in ciascuna delle famiglie di distribuzione coperte in questo corso.</p><p>Quando configuri una stampante, assicurati che il dispositivo sia attualmente acceso e connesso al sistema; in tal caso, dovrebbe essere visualizzato nel menu di selezione della stampante. Se la stampante non è visibile, è possibile risolvere i problemi utilizzando strumenti che determineranno se la stampante è connessa. Per le stampanti USB comuni, ad esempio, l'utilità <strong>lsusb</strong> mostrerà una riga per la stampante. Alcuni produttori di stampanti richiedono anche l'installazione di software supplementare per rendere la stampante visibile a CUPS, tuttavia, a causa della standardizzazione in questi giorni, ciò è raramente richiesto.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/rh8settings.png" class="kg-image" alt="rh8settings" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/rh8settings.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/rh8settings.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/rh8settings.png 1048w" sizes="(min-width: 720px) 720px" width="1048" height="712" loading="lazy"><figcaption>Configurare una Stampante dalla GUI</figcaption></figure><!--kg-card-begin: html--><h3>Video: Aggiungere una Stampante di Rete</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LINILXXX2017-V002600_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="aggiungere-stampanti-dall-interfaccia-web-di-cups">Aggiungere Stampanti dall'Interfaccia Web di CUPS</h3><p>Un fatto che poche persone sanno è che CUPS è anche dotato del proprio server web, che rende disponibile un'interfaccia di configurazione tramite un insieme di script CGI.</p><p>Questa interfaccia web ti consente di:</p><ul><li>Aggiungere e rimuovere le stampanti locali/remote</li><li>Configurare le stampanti:</li><li>Stampanti locali/remote</li><li>Condividere una stampante come server di CUPS</li><li>Controllare i lavori di stampa</li><li>Monitorare i lavori</li><li>Mostrare lavori completati o in sospeso</li><li>Annullare o spostare i lavori.</li></ul><p>L'interfaccia web Cups è disponibile sul browser digitando: <a href="http://localhost:631/">http://localhost:631</a>.</p><p>Alcune pagine richiedono un nome utente e una password per eseguire determinate azioni, ad esempio per aggiungere una stampante. Per la maggior parte delle distribuzioni Linux, è necessario utilizzare la password di root per aggiungere, modificare o eliminare stampanti o classi.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/cups_web.png" class="kg-image" alt="cups_web" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/cups_web.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/cups_web.png 847w" sizes="(min-width: 720px) 720px" width="847" height="583" loading="lazy"><figcaption>Videata dell'Interfaccia Web di CUPS</figcaption></figure><h3 id="stampare-dall-interfaccia-grafica">Stampare dall'Interfaccia Grafica</h3><p>Molte applicazioni grafiche consentono agli utenti di accedere alle funzionalità di stampa utilizzando la scorciatoia <strong><code>CTRL-P</code></strong>. Per stampare un file, è necessario prima specificare la stampante (o un nome e una posizione del file se stai stampando verso un file) che si desidera utilizzare, quindi selezionare le opzioni di configurazione, qualità e colore della pagina. Dopo aver selezionato le opzioni richieste, puoi inviare il documento per la stampa. Il documento viene quindi inviato a CUPS. Puoi utilizzare il browser per accedere all'interfaccia web CUPS su [<a href="http://localhost:631/">http://localhost:631/</a>] per monitorare lo stato del lavoro di stampa. Ora che hai configurato la stampante, puoi stampare utilizzando le interfacce della riga grafica o di comando.</p><p>La seguente videata mostra l'interfaccia GUI aperta digitando <strong><code>CTRL-P</code></strong> per CentOS, altre distribuzioni Linux appaiono praticamente identiche.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/printingrhel7.png" class="kg-image" alt="printingrhel7" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/printingrhel7.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/printingrhel7.png 781w" sizes="(min-width: 720px) 720px" width="781" height="507" loading="lazy"><figcaption>Interfaccia GUI aperta con <code>CTRL-P</code> in CentOS</figcaption></figure><h3 id="stampare-dalla-riga-di-comando">Stampare dalla Riga di Comando</h3><p>CUPS fornisce due interfacce di riga di comando, discendenti dalle varianti di UNIX Syistem V e BSD. Ciò significa che è possibile utilizzare <strong>lp</strong> (System V) o <strong>lpr</strong> (BSD) per stampare. È possibile utilizzare questi comandi per stampare file di testo, postscript, pdf e immagine.</p><p>Questi comandi sono utili nei casi in cui le operazioni di stampa devono essere automatizzate (dagli script di shell, ad esempio, che contengono più comandi in un file).</p><p><strong>lp</strong> è solo un front-end da linea di comando dell'utilità <strong>lpr</strong> che passa l'input a <strong>lpr</strong>. Pertanto, discuteremo solo di <strong>lp</strong> in dettaglio. Nell'esempio mostrato qui, l'attività è stampare <strong><code>$ home/.emacs</code></strong>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/lprhel7.png" class="kg-image" alt="lprhel7" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/lprhel7.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/lprhel7.png 615w" width="615" height="105" loading="lazy"><figcaption>Stampare dall'Interfaccia di Riga di Comando</figcaption></figure><h3 id="usare-lp">Usare lp</h3><p><strong>lp</strong> e <strong>lpr</strong> accettano opzioni da riga di comando che ti aiutano a eseguire tutte le operazioni che la GUI può compiere. <strong>lp</strong> viene generalmente utilizzato con un nome di file come argomento.</p><p>Alcuni comandi <strong>lp</strong> e altre utility di stampa delle quali puoi usufruire sono elencate nella tabella:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>lp &lt;nomefile&gt;</code></strong></td>
<td>Stampa nomefile alla stampante predefinita</td>
</tr>
<tr>
<td><strong><code>lp -d stampante &lt;nomefile&gt;</code></strong></td>
<td>Stampa nomefile a una stampante specifica (utile se ci sono a disposizione più stampanti)</td>
</tr>
<tr>
<td><strong><code>programma | lp&lt;br&gt;echo stringa | lp</code></strong></td>
<td>Stampa il risultato di un programma</td>
</tr>
<tr>
<td><strong><code>lp -n numero &lt;nomefile&gt;</code></strong></td>
<td>Stampa n copie di nomefile</td>
</tr>
<tr>
<td><strong><code>lpoptions -d stampante</code></strong></td>
<td>Imposta la stampante predefinita</td>
</tr>
<tr>
<td><strong><code>lpq -a</code></strong></td>
<td>Mostra lo stato della code di stampa</td>
</tr>
<tr>
<td><strong><code>lpadmin</code></strong></td>
<td>Configura le code di stampa</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p><strong>lpoptions</strong> può essere utilizzato per impostare opzioni di stampante e impostazioni predefinite. Ogni stampante ha un insieme di valori ad essa associati, come il numero predefinito di copie e i requisiti di autenticazione. Puoi digitare <strong><code>lpoptions help</code></strong> per ottenere un elenco di opzioni supportate. <strong>lpoptions</strong> può anche essere utilizzato per impostare valori a livello di sistema, come la stampante predefinita.</p><!--kg-card-begin: html-->
<h3>Video: Stampare Usando lp</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/4cf89569-6b26-4f3e-b8ba-915db0f1a759-mp4_720p.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="gestire-i-lavori-di-stampa">Gestire i Lavori di Stampa</h3><p>Hai inviato un file alla stampante condivisa. Ma quando vai lì per raccogliere la stampa, scopri che un altro utente ha appena avviato un lavoro di 200 pagine che non è urgente. Il tuo file non può essere stampato fino al completamento di questo lavoro di stampa. Cosa fai adesso?</p><p>In Linux, i comandi di gestione del lavoro di stampa dalla riga di comando consentono di monitorare lo stato del lavoro, nonché di gestire l'elenco di tutte le stampanti e controllare il loro stato e annullare o spostare i lavori di stampa su un'altra stampante.</p><p>Alcuni di questi comandi sono elencati nella tabella.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>lpstat -p -d</code></strong></td>
<td>Ottiene una lista di stampanti disponibili e del loro stato</td>
</tr>
<tr>
<td><strong><code>lpstat -a</code></strong></td>
<td>Verifica lo stato di tutte le stampanti connesse, compreri i numeri dei lavori</td>
</tr>
<tr>
<td><strong><code>cancel job-id</code></strong><br>OPPURE<br><strong><code>lprm job-id</code></strong></td>
<td>Cancella un lavoro di stampa</td>
</tr>
<tr>
<td><strong><code>lpmove job-id nuovastampante</code></strong></td>
<td>Sposta un lavoro di stampa a una nuova stampante</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="lavorare-con-postscript-e-pdf">Lavorare con PostScript e PDF</h3><p>PostScript è un linguaggio di descrizione della pagina standard. Gestisce efficacemente il ridimensionamento di caratteri e grafica vettoriale per fornire stampe di qualità. È puramente un formato di testo che contiene i dati inviati a un interprete PostScript. Il formato stesso è un linguaggio sviluppato da Adobe nei primi anni '80 per consentire il trasferimento di dati alle stampanti.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_Ch13_Screen_42.jpg" class="kg-image" alt="LFS01_Ch13_Screen_42" width="314" height="390" loading="lazy"></figure><p><strong>Lavorare con PostScript e PDF</strong></p><p>Le caratteristiche di PostScript sono:</p><ul><li>Può essere utilizzato su qualsiasi stampante compatibile con PostScript; cioè qualsiasi stampante moderna</li><li>Qualsiasi programma che comprenda le specifiche PostScript può stampare</li><li>Informazioni sull'aspetto della pagina, ecc. sono incorporate nella pagina.</li></ul><p>PostScript è stato per la maggior parte sostituito dal formato PDF (Portable Document Format) che produce file molto più piccoli in un formato compresso per il quale il supporto è stato integrato in molte applicazioni. Tuttavia, si devono ancora gestire i documenti PostScript, spesso come formato intermedio verso la produzione di documenti finali.</p><h3 id="lavorare-con-enscript">Lavorare con enscript</h3><p><strong>enscript</strong> è uno strumento che viene utilizzato per convertire un file di testo in PostScript e altri formati. Supporta anche il formato RTF (Rich Text Format) e HTML (Hypertext Markup Language). Ad esempio, è possibile convertire un file di testo in un formato Postscript a due colonne (<strong>-2</strong>) usando il comando:</p><p><strong><code>$ enscript -2 -r -p psfile.ps textfile.txt</code></strong></p><p>Questo comando ruota anche (<strong>-r</strong>) l'output da stampare in modo che la larghezza della carta sia maggiore dell'altezza (cioè modalità "landscape" - paesaggio) riducendo così il numero di pagine richieste per la stampa.</p><p>I comandi che possono essere usati con <strong>enscript</strong> sono elencati nella tabella seguente (per un file chiamato <strong>textfile.txt</strong>).</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>enscript -p psfile.ps textfile.txt</code></strong></td>
<td>Converte textfile.txt in PostScript (salvato come <strong>psfile.ps</strong>)</td>
</tr>
<tr>
<td><strong><code>enscript -n -p psfile.ps textfile.txt</code></strong></td>
<td>Converte textfile.txt in Postscript a n colonne dove n=1-9 (salvato come <strong>psfile.ps</strong>)</td>
</tr>
<tr>
<td><strong><code>enscript textfile.txt</code></strong></td>
<td>Stampa textfile.txt direttamente alla stampante predefinita</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="convertire-tra-postscript-e-pdf">Convertire tra PostScript e PDF</h3><p>La maggior parte degli utenti oggi è molto più abituata a lavorare con i file in formato PDF, visualizzandoli facilmente su Internet attraverso il loro browser o localmente sulla loro macchina. Il formato PostScript è ancora importante per vari motivi tecnici che l'utente generale dovrà raramente affrontare.</p><p>Di tanto in tanto, potrebbe essere necessario convertire i file da un formato all'altro e ci sono utilità molto semplici per realizzare tale attività. <strong>ps2pdf</strong> e <strong>pdf2ps</strong> fanno parte del pacchetto <strong>ghostscript</strong> installato o disponibile su tutte le distribuzioni Linux. In alternativa, ci sono <strong>pstopdf</strong> e <strong>pdftops</strong> che di solito fanno parte del pacchetto <strong>poppler</strong>, che potrebbe essere necessario aggiungere tramite il gestore dei pacchetti. A meno che tu non stia facendo molte conversioni o hai bisogno di alcune delle opzioni più elaborate (che puoi leggere nelle pagine di manuale per queste utility), non importa davvero quali usi.</p><p>Un'altra possibilità è quella di utilizzare il programma <strong>convert</strong> molto potente, che fa parte del pacchetto <strong>ImageMagick</strong>. Alcune distribuzioni più recenti hanno sostituito questo con Graphics Magick, &nbsp;e il comando da usare è <strong><code>gm convert</code></strong>.</p><p>Alcuni esempi di utilizzo:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>pdf2ps file.pdf</code></strong></td>
<td>Converte <strong>file.pdf</strong>&nbsp;in <strong>file.ps</strong></td>
</tr>
<tr>
<td><strong><code>ps2pdf file.ps</code></strong></td>
<td>Converte <strong>file.ps</strong>in <strong>file.pdf</strong></td>
</tr>
<tr>
<td><strong><code>pstopdf input.ps output.pdf</code></strong></td>
<td>Converte <strong>input.ps</strong> in <strong>output.pdf</strong></td>
</tr>
<tr>
<td><strong><code>pdftops input.pdf output.ps</code></strong></td>
<td>Converte <strong>input.pdf</strong> in&nbsp;<strong>output.ps</strong></td>
</tr>
<tr>
<td><strong><code>convert input.ps output.pdf</code></strong></td>
<td>Converte <strong>input.ps</strong> in <strong>output.pdf</strong></td>
</tr>
<tr>
<td><strong><code>convert input.pdf output.ps</code></strong></td>
<td>Converts<strong>input.pdf</strong> in <strong>output.ps</strong></td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="visualizzare-contenuto-pdf">Visualizzare Contenuto PDF</h3><p>Linux ha molti programmi standard in grado di leggere file PDF, nonché molte applicazioni che possono facilmente crearli, comprese tutte le suite di ufficio disponibili, come LibreOffice.</p><p>I lettori PDF Linux più comuni sono:</p><ol><li><strong>evince</strong>, disponibile praticamente su tutte le distribuzioni ed è il programma più utilizzato.</li><li><strong>okular</strong>, che si basa sul vecchio kpdf ed è disponibile su qualsiasi distribuzione che fornisce l'ambiente KDE.</li></ol><p>Questi lettori PDF open source supportano e possono leggere i file che seguono lo standard PostScript. Il lettore proprietario di Adobe, Acrobat Reader, che una volta era ampiamente utilizzato sui sistemi Linux, per fortuna non è più disponibile, in quanto la presentazione del testo era difettosa, era instabile ed era scarsamente mantenuto.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch13_Screen_46.jpg" class="kg-image" alt="LFS01_ch13_Screen_46" width="500" height="289" loading="lazy"></figure><h3 id="manipolare-pdfs">Manipolare PDFs</h3><p>A volte potresti voler unire, dividere o ruotare i file PDF; non tutte queste operazioni possono essere compiute utilizzando un visualizzatore PDF. Alcune di queste operazioni includono:</p><ul><li>Combinare/dividere/ruotare documenti PDF</li><li>Riparare pagine PDF danneggiate</li><li>Estrarre singole pagine da un file PDF</li><li>Codificare e decodificare file PDF</li><li>Aggiungere, aggiornare ed esportare i metadati di un PDF</li><li>Esportare segnalibri in un file di testo</li><li>Compilare moduli PDF.</li></ul><p>Per svolgere questi compiti ci sono diversi programmi disponibili:</p><ul><li>qpdf</li><li>pdftk</li><li>ghostscript.</li></ul><p><strong>qpdf</strong> è ampiamente disponibile sulle distribuzioni Linux ed è molto completo. <strong>pdftk</strong> una volta era molto popolare ma dipende da un pacchetto obsoleto non mantenuto (<strong>libgcj</strong>) e un certo numero di distribuzioni l'hanno abbandonato; quindi ti consigliamo di evitarlo. <strong>Ghostscript</strong> (spesso lanciato usando <strong>gs</strong>) è ampiamente disponibile e ben mantenuto. Tuttavia, il suo utilizzo è un po' complesso.</p><h3 id="usare-qpdf">Usare qpdf</h3><p>Puoi svolgere un'ampia varietà di compiti utilizzando <strong>qpdf</strong> compreso:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>qpdf --empty --pages 1.pdf 2.pdf -- 12.pdf</code></strong></td>
<td>Unisce due documenti,&nbsp;<strong>1.pdf</strong>&nbsp;e<strong>2.pdf</strong>. Il risultato viene salvato su &nbsp;<strong>12.pdf</strong>.</td>
</tr>
<tr>
<td><strong><code>qpdf --empty --pages 1.pdf 1-2 -- new.pdf</code></strong></td>
<td>Scrive solo le pagine 1 e 2 di&nbsp;<strong>1.pdf</strong>. Il risultato viene salvato su &nbsp;<strong>new.pdf</strong>.</td>
</tr>
<tr>
<td><strong><code>qpdf --rotate=+90:1 1.pdf 1r.pdf</code></strong><br><br><strong><code>qpdf --rotate=+90:1-z 1.pdf 1r-all.pdf</code></strong></td>
<td>Ruota la pagina 1 di&nbsp;<strong>1.pdf</strong> di 90 gradi in senso orario e salva su <strong>1r.pdf</strong>.<br><br>Ruota tutte le pagine di&nbsp;<strong>1.pdf</strong> di 90 gradi in senso orario e salva su <strong>1r-all.pdf</strong></td>
</tr>
<tr>
<td><strong><code>qpdf --encrypt mypw mypw 128 -- public.pdf private.pdf</code></strong></td>
<td>Codifica a 128 bit&nbsp;<strong>public.pdf</strong>&nbsp;usando la password <strong>mypw</strong> scrive il risultato su <strong>private.pdf</strong>.</td>
</tr>
<tr>
<td><strong><code>qpdf --decrypt --password=mypw private.pdf file-decrypted.pdf</code></strong></td>
<td>Decodifica <strong>private.pdf</strong>, scrive il risultato su <strong>file-decrypted.pdf</strong>.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/qpdfcrypt.png" class="kg-image" alt="qpdfcrypt" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/qpdfcrypt.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/qpdfcrypt.png 732w" sizes="(min-width: 720px) 720px" width="732" height="266" loading="lazy"><figcaption>Usare qpdf per Codificare/Decodificare File</figcaption></figure><!--kg-card-begin: html--><h3>Video: Usare qpdf</h3>

<video controls="" width="100%" preload="none">

<source src="https://edx-video.net/LinuxFoundationXLFS101x-V000400_DTH.mp4">

Sorry, your browser doesn't support embedded videos.
</video>
<!--kg-card-end: html--><h3 id="usare-pdftk">Usare pdftk</h3><p><strong>pdftk</strong> ora è stato portato su Java! Marc Vinyals ha sviluppato e mantenuto un port per Java per <strong>pdftk</strong> che puoi trovare <a href="https://gitlab.com/pdftk-java/pdftk">qui</a>, oltre alle istruzioni di installazione. Alcune distribuzioni, come Ubuntu, potrebbero installare solo questa versione.</p><p>Puoi svolgere un'ampia varietà di attività utilizzando <strong>pdftk</strong> compreso:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Comando</strong></th>
<th><strong>Utilizzo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong><code>pdftk 1.pdf 2.pdf cat output 12.pdf</code></strong></td>
<td>Unire due docuemnti <strong>1.pdf</strong> e <strong>2.pdf</strong>. Il risultato viene salvato su <strong>12.pdf</strong>.</td>
</tr>
<tr>
<td><strong><code>pdftk A=1.pdf cat A1-2 output new.pdf</code></strong></td>
<td>Scrivere solo le pagine 1 e 2&nbsp;<strong>1.pdf</strong>. Il risultato viene salvato su <strong>new.pdf</strong>.</td>
</tr>
<tr>
<td><strong><code>pdftk A=1.pdf cat A1-endright output new.pdfabc</code></strong></td>
<td>Ruotare tutte le pagine di <strong>1.pdf</strong>&nbsp;di 90 gradi in senso orario e salvare il risultato su <strong>new.pdf</strong>.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="codificare-i-file-pdf-con-pdftk">Codificare i File &nbsp;PDF con pdftk</h3><p>Se stai lavorando con file PDF che contengono informazioni riservate e desideri assicurarti che solo determinate persone possano visualizzare il file PDF, è possibile applicare una password utilizzando l'opzione <strong>user_pw</strong>. Si può farlo digitando un comando come:</p><p><strong><code>$ pdftk public.pdf output private.pdf user_pw PROMPT</code></strong></p><p>Quando si esegue questo comando, riceverai un prompt per impostare la password richiesta, che può avere un massimo di 32 caratteri. Un nuovo file, <strong>private.pdf</strong>, verrà creato con contenuto identico a <strong>public.pdf</strong>, ma chiunque lo voglia visualizzare dovrà digitare la password.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/pdfencryptsuse.png" class="kg-image" alt="pdfencryptsuse" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/pdfencryptsuse.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/pdfencryptsuse.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/pdfencryptsuse.png 1001w" sizes="(min-width: 720px) 720px" width="1001" height="832" loading="lazy"><figcaption>Codificare un File PDF</figcaption></figure><h3 id="usare-ghostscript">Usare Ghostscript</h3><p>Ghostscript è ampiamente disponibile come interprete per i linguaggi PostScript e PDF. Il programma eseguibile ad esso associato è abbreviato in <strong>gs</strong>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/500px-Ghostscript.svg.png" class="kg-image" alt="500px-Ghostscript.svg" width="500" height="503" loading="lazy"></figure><p>Questa utility può fare la maggior parte delle operazioni che fa pdftk, così come molte altre; vedi la pagina di manuale di <strong>gs</strong> per i dettagli. L'uso è in qualche modo complicato dalla natura piuttosto lunga delle opzioni. Per esempio:</p><ul><li>Combinare tre file PDF in uno:</li></ul><p><strong><code>$ gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite &nbsp;-sOutputFile=all.pdf file1.pdf file2.pdf file3.pdf</code></strong></p><ul><li>Estrarre le pagine da 10 a 20 da un file PDF:</li></ul><p><strong><code>$ gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dDOPDFMARKS=false -dFirstPage=10 -dLastPage=20\</code></strong><br><strong><code>-sOutputFile=split.pdf file.pdf</code></strong></p><h3 id="usare-strumenti-addizionali">Usare Strumenti Addizionali</h3><p>È possibile utilizzare altri strumenti per lavorare con i file PDF, come ad esempio:</p><ul><li><strong>pdfinfo</strong><br>Può estrarre informazioni sui file PDF, specialmente quando i file sono molto grandi o quando un'interfaccia grafica non è disponibile.</li><li><strong>flpsed</strong><br>Può aggiungere dati a un documento PostScript. Questo strumento è specificamente utile per compilare i moduli o aggiungere brevi commenti nel documento.</li><li><strong>pdfmod</strong><br>È una semplice applicazione che fornisce un'interfaccia grafica per la modifica dei documenti PDF. Usando questo strumento, è possibile riordinare, ruotare e rimuovere le pagine, esportare immagini da un documento, modificare il titolo, l'oggetto e l'autore, aggiungere parole chiave e combinare documenti usando l'azione di drag-and-drop (trascinamento e rilascio).</li></ul><p>Ad esempio, per ottenere i dettagli di un documento, è possibile utilizzare il comando seguente:</p><p><strong><code>$ pdfinfo /usr/share/doc/readme.pdf</code></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_ch13_Screen_53.jpg" class="kg-image" alt="LFS01_ch13_Screen_53" width="559" height="314" loading="lazy"><figcaption>Usare Strumenti Addizionali: pdfinfo, flpsed, pdfmod</figcaption></figure><h3 id="riepilogo-del-capitolo-10">Riepilogo del Capitolo</h3><p>Hai completato il capitolo 17. Riassumiamo i concetti chiave trattati:</p><ul><li>CUPS fornisce due interfacce di comando: System V e BSD.</li><li>L'interfaccia CUPS è disponibile su <a href="http://localhost:631/">http://localhost:631</a>.</li><li><strong>lp</strong> e <strong>lpr</strong> vengono utilizzati per inviare un documento a CUPS direttamente dalla riga di comando.</li><li><strong>lpoptions</strong> può essere utilizzato per impostare opzioni e impostazioni predefinite della stampante.</li><li>PostScript gestisce con efficacia il ridimensionamento di caratteri e la grafica vettoriale per fornire stampe di qualità.</li><li><strong>enscript</strong> viene utilizzato per convertire un file di testo in postscript e altri formati.</li><li>PDF (Portable Document Format) è il formato standard utilizzato per scambiare documenti, garantendo al contempo un certo livello di coerenza nel modo in cui vengono visualizzati.</li><li><strong>pdftk</strong> unisce e divide i pdf, estrae singole pagine da un file, codifica e decodifica i file PDF, aggiunge, aggiorna ed esporta i metadati di un PDF, esporta segnalibri in un file di testo, aggiunge o rimuove gli allegati a un PDF, corregge un PDF danneggiato e compila i moduli PDF.</li><li><strong>pdfinfo</strong> può estrarre informazioni sui documenti PDF.</li><li><strong>flpsd</strong> può aggiungere dati a un documento PostScript.</li><li><strong>pdfmod</strong> è una semplice applicazione con un'interfaccia grafica che è possibile utilizzare per modificare documenti PDF .</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/LFS01_Summary--7-.jpg" class="kg-image" alt="LFS01_Summary--7-" width="330" height="306" loading="lazy"></figure><h2 id="parte-due"><strong>PARTE DUE</strong></h2><p>Questo articolo ha una seconda parte che puoi leggere qui: <a href="https://www.freecodecamp.org/italian/news/introduzione-a-linux-parte-2/">https://www.freecodecamp.org/italian/news/introduzione-a-linux-parte-2/</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Permessi sui File in Linux - Come Usare il Comando chmod ]]>
                </title>
                <description>
                    <![CDATA[ Proprio come ogni altro sistema operativo, più utenti possono creare account e condividere la stessa macchina con un sistema operativo Linux in esecuzione. Tuttavia quando utenti diversi condividono un sistema possono sorgere facilmente problemi di privacy. Ad esempio un utente potrebbe non volere che gli altri possano vedere, modificare o ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/permessi-sui-file-in-linux-come-usare-il-comando-chmod/</link>
                <guid isPermaLink="false">6423fd0fbdacb60671302655</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Roberto Pauletto ]]>
                </dc:creator>
                <pubDate>Mon, 03 Apr 2023 07:22:03 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/03/Banner---File-permission-blog-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/file-permissions-in-linux-chmod-command-explained/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">File Permissions in Linux – How to Use the chmod Command</a>
      </p><p>Proprio come ogni altro sistema operativo, più utenti possono creare account e condividere la stessa macchina con un sistema operativo Linux in esecuzione.</p><p>Tuttavia quando utenti diversi condividono un sistema possono sorgere facilmente problemi di privacy. Ad esempio un utente potrebbe non volere che gli altri possano vedere, modificare o cancellare i propri file.</p><p>Il terminale di Linux è dotato di alcuni super poteri quando si ha a che fare con i permessi sui file. Puoi concedere o revocare permessi per ciascun file e directory dal tuo terminale Linux.</p><h2 id="cosa-sono-i-permessi-sui-file-in-linux"><strong>Cosa Sono i Permessi sui File<strong> in Linux?</strong></strong></h2><p>I permessi sui file controllano quali azioni possono essere eseguite da ciascun utente. Lettura, Scrittura ed Esecuzione sono le tre possibili azioni per ogni file.</p><p>Gli utenti sono classificati in tre grandi categorie: Utenti normali, Gruppi e Altri. Linux consente agli utenti di impostare i permessi a livello molto granulare. Puoi mettere in sicurezza il tuo file o la tua directory in ogni posizione possibile in un filesystem.</p><p>Sembra utile, non è vero?</p><p>Ci sono tre importanti comandi che userai per la gestione dei permessi sui file:</p><ol><li><code>chmod</code> (Change mode - Cambia modalità)</li><li><code>chown</code> (Change ownership - Cambia proprietà)</li><li><code>chgrp</code> (Change group - Cambia gruppo)</li></ol><p>Tra questi, <code>chmod</code> è uno dei più importanti, e ne discuteremo qui, mentre esaminerò gli altri in prossimi articoli.</p><p>Esaminiamo nei dettagli il comando <code>chmod</code>.</p><h3 id="azioni-che-puoi-eseguire-su-un-file"><strong>Azioni che puoi eseguire su un file</strong></h3><p>Prima di proseguire oltre, voglio assicurarmi che per te sia chiaro come funzionano le azioni di lettura, scrittura ed esecuzione su un file. Lettura e scrittura sono piuttosto autoesplicativi – determinano se un utente può leggere e scrivere un file.</p><p>Ma cos'è un file eseguibile?</p><p>Un file viene detto eseguibile se ha una sequenza di istruzioni per ottenere qualcosa. Un buon esempio sono i file di script (Script di Shell).</p><h2 id="cos-il-comando-chmod"><strong>Cos'è il Comando<strong> <code>chmod</code>?</strong></strong></h2><p><code>chmod</code> è un comando che ti consente di cambiare i permessi per un file o directory per tutti i tipi di utenti.</p><p>Ecco la sintassi del comando:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">chmod &lt;Operazioni&gt; &lt;Nome File/Directory&gt;</code></pre><figcaption>Sintassi per l'uso del comando chmod</figcaption></figure><p>Puoi concedere o revocare i permessi sostituendo <code>Operazioni</code> nella sintassi sopra indicata.</p><h3 id="quali-sono-le-operazioni-che-puoi-eseguire"><strong>Quali sono le operazioni che puoi eseguire<strong>?</strong></strong></h3><p>Le operazioni sono divise in due categorie, che esploriamo qui sotto.</p><h4 id="permessi-a-livello-utente"><strong>Permessi a Livello Utente</strong></h4><p>Le opzioni che puoi usare per controllare i permessi a livello utente sono:</p><ul><li><code>u</code> – Concede permessi a un utente</li><li><code>g</code> – Concede permessi a un gruppo (un gruppo di utenti)</li><li><code>o</code> – Concede permessi agli altri (chi non appartiene a nessuna delle categorie precedenti).</li></ul><p><strong><strong>Not</strong>a<strong>:</strong> </strong>Se questa opzione viene lasciata vuota, i permessi saranno applicati all'utente connesso. Per la maggior parte dei casi non sarà valorizzata.</p><h4 id="permessi-al-livello-di-file"><strong>Permessi al Livello di <strong>File</strong></strong></h4><p>Queste opzioni controllano i permessi al livello di file.</p><ul><li><code>r</code> – Concede permessi di lettura</li><li><code>w</code> – Concede permessi di scrittura</li><li><code>x</code> – Concede permessi di esecuzione</li></ul><p>Queste opzioni devono essere precedute dall'operatore '<code>+</code>' o '<code>-</code>'.</p><p>'<code>+</code>' indica che si aggiunge un nuovo permesso, &nbsp;'<code>-</code>' &nbsp;indica che si revoca un permesso esistente.</p><p>Ecco un esempio:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">chmod +r sample.txt</code></pre><figcaption>Comando per aggiungere permessi di lettura a un file</figcaption></figure><p>Il comando qui sopra aggiunge permessi di lettura al file <code>sample.txt </code>.</p><p>Abbastanza semplice, giusto? Continuiamo.</p><h2 id="come-rendere-eseguibile-un-file-in-linux"><strong>Come Rendere Eseguibile un File in <strong>Linux</strong></strong></h2><p>Posso spiegarlo più chiaramente con un esempio tratto da una mia esperienza.</p><p>Linux è il sistema operativo predefinito per il mio team. Recentemente abbiamo assunto uno stagista, che non sapeva nulla di Linux ma era voglioso di imparare ed esplorare. Abbiamo cominciato a istruirlo chiedendogli inizialmente di scrivere qualche script di shell, visto che la maggior parte dei server eseguono Linux come sistema operativo. Ha trovato tutto il codice su internet e lo ha copiato (gli abbiamo affidato questo compito intenzionalmente).</p><p>Lo stagista ha salvato il file ma non era in grado di eseguire lo script. Non sapeva identificare il vero problema. Ha iniziato a togliere qualche blocco di codice e ha tentato di eseguirlo ancora e ancora.</p><p>Continuava a ricevere un errore che diceva "Command not found" (comando non trovato).</p><p>Alla fine ha sostituito la prima riga con una istruzione di stampa (il comando <code>echo</code>) e ha eseguito il file con la speranza di vedere il risultato alla console ma non aveva ancora trovato l'errore.</p><p>Ormai un po' frustrato, ha chiesto aiuto.</p><p>Esaminiamo il problema.</p><p>Fondamentalmente, possiamo eseguire i file <code>.sh</code> semplicemente eseguendoli in questo modo:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">./install.sh</code></pre><figcaption>Comando per eseguire lo script di shell</figcaption></figure><p>Vediamo il codice all'interno di <code>install.sh</code></p><figure class="kg-card kg-code-card"><pre><code class="language-bash">echo "This is executable file 🎉"</code></pre><figcaption>install.sh</figcaption></figure><p>Ha eseguito lo stesso comando ma non ha funzionato. Questo perché il file non era in formato eseguibile. Pertanto ho eseguito il comando magico per renderlo eseguibile:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">chmod +x install.sh</code></pre><figcaption>Comando per aggiungere permessi di esecuzione a un file</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://lh3.googleusercontent.com/trd4dTKoxhk9Ap9xLifsuo6bD9wj4kc_i5gtDudFLQyU1gNdJLGoLoyCuJLh1FF9Yah-IG43YuR3yrrtJq48xBEYEq0QQkHMFB1n1YBiv-_fWJT95gyihZD0tjAj0ScnEmF33WRFdHJbfzTSpxSnaimyUbHlK9a2hMujE8CeyT4AoliZY5XJ_wKOsIVrPw" class="kg-image" alt="trd4dTKoxhk9Ap9xLifsuo6bD9wj4kc_i5gtDudFLQyU1gNdJLGoLoyCuJLh1FF9Yah-IG43YuR3yrrtJq48xBEYEq0QQkHMFB1n1YBiv-_fWJT95gyihZD0tjAj0ScnEmF33WRFdHJbfzTSpxSnaimyUbHlK9a2hMujE8CeyT4AoliZY5XJ_wKOsIVrPw" width="600" height="400" loading="lazy"><figcaption>Istruzioni da terminale per rendere un file eseguibile</figcaption></figure><p>Ora è eseguibile. Mi ha guardato come se fossi un &nbsp;hacker 😂. In realtà è un concetto piuttosto semplice e di base.</p><h2 id="come-rimuovere-permessi-da-un-file-in-linux"><strong>Come Rimuovere Permessi da un File in <strong>Linux</strong></strong></h2><p>Lavoro con il mio collega Divad su molti progetti, e gli piace provare a prendermi in giro. Lavoriamo insieme su molti progetti per hobby e spesso scriviamo script di shell per una distribuzione veloce.</p><p>Ogniqualvolta scrive script di shell, rimuove sempre tutti i permessi dal file e invia le modifiche al repository remoto. Quindi ogni volta devo concedere i permessi usando i comandi qui sopra per qualsiasi azione debba fare.</p><p>Diamo una rapida occhiata al comando che usa per rimuovere i permessi sul file.</p><p>Qui abbiamo un file chiamato <code>install.sh</code> che ha tutti i permessi (Lettura, Scrittura, Esecuzione). Rimuoviamo il permesso di esecuzione per questo file di script.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">chmod -x install.sh</code></pre><figcaption>Comando per rimuovere i permessi di esecuzione per un file</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/12/image-136.png" class="kg-image" alt="image-136" width="600" height="400" loading="lazy"><figcaption>Istruzioni da terminale per rimuovere i permessi di esecuzione per un file</figcaption></figure><p>Ora non saresti in grado di eseguire il file. Se provi otterrai un errore come mostrato nella videata qui sopra.</p><p>Rimuoviamo i permessi di lettura dal file.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">chmod -r install.sh</code></pre><figcaption>Comando per rimuovere i permessi di lettura per un file</figcaption></figure><p>Con questo comando abbiamo rimosso i permessi di lettura. Ora cerchiamo di leggere quel file usando &nbsp;Nano (l'editor di file per il terminale di Linux). Dovresti ottenere l'errore "Permission Denied" (Permesso negato) indicato in basso.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://lh4.googleusercontent.com/DHdaIMmV0pcFiMO-9GiLwXbUes8QZs5v6uKDLfuCu9Ltt-0SitENOM8najXPaxMXFJSQAzlI7F1u1p8i6fbqq1timsCoVGVOBdEtzUlybcmoh0W6oHWrIKyUUJr1dOjDZ_vbo0WkGE3fcLa3T7ZfvymVKVZPoKvKrDDH7ZVFSSlyeyQ1ypLixkAdD5uroA" class="kg-image" alt="DHdaIMmV0pcFiMO-9GiLwXbUes8QZs5v6uKDLfuCu9Ltt-0SitENOM8najXPaxMXFJSQAzlI7F1u1p8i6fbqq1timsCoVGVOBdEtzUlybcmoh0W6oHWrIKyUUJr1dOjDZ_vbo0WkGE3fcLa3T7ZfvymVKVZPoKvKrDDH7ZVFSSlyeyQ1ypLixkAdD5uroA" width="600" height="400" loading="lazy"></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://lh3.googleusercontent.com/iphPcFoH9r0VnGArokWKexbVTzGtMkaOC-EgeXECKqHyE2QJMA49sh5HK_u_ZNKDDKc_hmFPe-dM8VVy0Xu-EKGT1VpBaABcUtPxCEipSvNVhwJQWfxisGBHJbvAcosK3kO8JNsWT9qSl2-7A0cK-A8gHjWIK4cfvNAx4iofZOOPOgevXbR8mVjmDZqk0w" class="kg-image" alt="iphPcFoH9r0VnGArokWKexbVTzGtMkaOC-EgeXECKqHyE2QJMA49sh5HK_u_ZNKDDKc_hmFPe-dM8VVy0Xu-EKGT1VpBaABcUtPxCEipSvNVhwJQWfxisGBHJbvAcosK3kO8JNsWT9qSl2-7A0cK-A8gHjWIK4cfvNAx4iofZOOPOgevXbR8mVjmDZqk0w" width="600" height="400" loading="lazy"></figure><p>Lo stesso vale per la rimozione del permesso di scrittura dal file:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">chmod -w install.sh</code></pre><figcaption>Comando per rimuovere il permesso di scrittura dal file</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide"><img src="https://lh5.googleusercontent.com/wVL6XdsMVVBrqw3dnrjELCIsqQyDkxtQWUKcD8HyXAUJktcBQyYAK1Ln-A9P517WW1b8tfm95HGd4NmRuP9fgs9QI6w9ZrR0ZeSNyMpWIlYlGld_Vq1-_m8fDDcV9Et-BJd99Jy3RI2cs6vm26Ywp9IFJzx1su8CGVgoe38-BNJp9qDooZe7XAbqv1S88A" class="kg-image" alt="wVL6XdsMVVBrqw3dnrjELCIsqQyDkxtQWUKcD8HyXAUJktcBQyYAK1Ln-A9P517WW1b8tfm95HGd4NmRuP9fgs9QI6w9ZrR0ZeSNyMpWIlYlGld_Vq1-_m8fDDcV9Et-BJd99Jy3RI2cs6vm26Ywp9IFJzx1su8CGVgoe38-BNJp9qDooZe7XAbqv1S88A" width="600" height="400" loading="lazy"></figure><p>Possiamo mettere tutto quanto sopra insieme usando questo comando:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">chmod -rwx install.sh</code></pre><figcaption>Comando per rimuovere i permessi di lettura, scrittura, esecuzione da un file</figcaption></figure><p>Questa è la parte fondamentale per quanto riguarda la gestione dei permessi in Linux. Ma ricorda che abbiamo appena sfiorato la superficie dell'argomento. Cerca di comprenderla e fai qualche esperimento con qualche semplice file. Perché, chissà, in futuro potresti avere un collega come Divad. :)</p><h2 id="come-aggiungere-o-rimuovere-permessi-per-directory-cartelle-in-linux"><strong>Come Aggiungere o Rimuovere Permessi per Directory (Cartelle) in<strong> Linux</strong></strong></h2><p>Se lavori con Linux, potresti esserti imbattuto in varie directory come &nbsp;<code>/etc</code>, <code>/var</code>, <code>/opt</code> e altre. Potresti tuttavia non essere a conoscenza del perché queste directory esistono.</p><p>Tutte queste cartelle hanno una cosa in comune, vale a dire che non sarai in grado di creare un file o una cartella al loro interno senza i privilegi di root.</p><p>Questa impostazione viene preconfigurata nel tuo sistema quando Linux viene installato.</p><p>Potresti tuttavia chiederti, posso applicare restrizioni su una cartella nella mia directory <code>/home</code> simili a quelle delle directory sopra citate? La risposta è sì. Puoi farlo modificando i permessi per la directory usando il comando <code>chmod</code>.</p><p>Capiamolo con un esempio.</p><p>Ho creato una directory chiamata <code>locked_directory</code> e da questa ho rimosso i permessi di lettura. Se cercassi di leggere il contenuto della cartella con il comando <code>ls</code> , vedrei il messaggio di errore "Permission Denied" (Permesso negato).</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">chmod -r locked_directory/</code></pre><figcaption>Comando per eliminare il permesso di lettura da una directory</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/pasted-image-0-1.png" class="kg-image" alt="pasted-image-0-1" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/pasted-image-0-1.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/pasted-image-0-1.png 671w" width="671" height="269" loading="lazy"><figcaption>Comandi dal terminale per eliminare il permesso di lettura da una directory</figcaption></figure><p>Ma sai che posso creare un'altra directory all'interno di <code>locked_directory</code> chiamata <code>dir1</code> e leggere i file e le cartelle in <code>dir1</code>?</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://lh6.googleusercontent.com/FMLRcjtvY-M1YVSANwmgdzdDwBJ9lrv4V7dLREva9RRUmal7PG8Q5p-l4XZMCi3zIznvSqIKpr68PwGlcripbREffgPzpmqOJ09OR-CvBEGrncBxYX9c9OTe0kq5-xL9rsGP1xQDO_sZP9iXPmHKpXFukFhTIYlXaFRnoHvdCRYA1FJDHcvXmFqP8dmshA" class="kg-image" alt="FMLRcjtvY-M1YVSANwmgdzdDwBJ9lrv4V7dLREva9RRUmal7PG8Q5p-l4XZMCi3zIznvSqIKpr68PwGlcripbREffgPzpmqOJ09OR-CvBEGrncBxYX9c9OTe0kq5-xL9rsGP1xQDO_sZP9iXPmHKpXFukFhTIYlXaFRnoHvdCRYA1FJDHcvXmFqP8dmshA" width="600" height="400" loading="lazy"></figure><p>Allora qual è lo scopo del comando che abbiamo eseguito appena prima? La rimozione del permesso di lettura su una directory genitore dovrebbe rimuovere lo stesso permesso anche sulle directory figlie, giusto?</p><p>Bene, è esattamente ciò che ti ho detto in precedenza. Linux gestisce il permesso sui file con un livello di granularità molto alto.</p><p>Se vuoi applicare i permessi alla directory genitore e a tutte le sue discendenti, devi passare una specifica opzione al comando <code>chmod</code>.</p><p>Questa opzione è <code>-R</code>. Praticamente significa che gli stessi permessi saranno applicati ricorsivamente a tutte le sottodirectory (le directory figlie). In questo modo i permessi verranno applicati fino all'ultima directory figlia.</p><p>Ecco la sintassi per fare questo:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">sudo chmod -R &lt;permessi&gt; &lt;nomedirectory&gt;</code></pre><figcaption>Sintassi per rimuovere i permessi di lettura da una directory ricorsivamente</figcaption></figure><p>Ricorda che l'esecuzione di un comando che effettua un'operazione ricorsiva, richiede i privilegi root. Pertanto devi aggiungere <code>sudo</code> all'inizio di questo comando. Ecco la sintassi:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">sudo chmod -R -r locked_directory</code></pre><figcaption>Comando per rimuovere i permessi di lettura da una directory ricorsivamente</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://lh3.googleusercontent.com/GZGisVgUxcZjYduKGlOaYHUaTRTgI7tf3nNzdpxL8QZvDDYV_PLgwaFipmbfxzDlziG_Gy7f5Gyeibc_E7IhGvEOmReUKUe3t7yYMXZKDsRnXcxivbepHpqww3y2YSLSyjvi83i_c5Z1rgQbc_ku-Bz5hy8lMl8idzg4MtfYtEZymPFTZBNceq9xgH79ZQ" class="kg-image" alt="GZGisVgUxcZjYduKGlOaYHUaTRTgI7tf3nNzdpxL8QZvDDYV_PLgwaFipmbfxzDlziG_Gy7f5Gyeibc_E7IhGvEOmReUKUe3t7yYMXZKDsRnXcxivbepHpqww3y2YSLSyjvi83i_c5Z1rgQbc_ku-Bz5hy8lMl8idzg4MtfYtEZymPFTZBNceq9xgH79ZQ" width="600" height="400" loading="lazy"><figcaption>Istruzioni da terminale per rimuovere i permessi di lettura da una directory ricorsivamente</figcaption></figure><p>Dalla videata qui sopra, puoi vedere che il tentativo di visualizzare i file della directory figlia fallisce dopo che è stato rimosso il permesso di lettura ricorsivamente a partire dalla directory genitore.</p><h2 id="un-altro-modo-di-gestire-i-permessi-sui-file-in-linux"><strong>Un Altro Modo di Gestire i Permessi sui File <strong>in Linux</strong></strong></h2><p>In alternativa, puoi usare una rappresentazione ottale per controllare i permessi di un file.</p><p>Possiamo usare numeri per rappresentare i permessi dei file (è il metodo più comunemente usato per impostare i permessi). Quando cambi i permessi usando la modalità ottale, rappresenti i permessi per ciascuna tripletta (utente/gruppo/altri) usando un numero (4, 2,1 o una combinazione degli stessi).</p><p>Vediamo la sintassi usando la modalità ottale:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">chmod &lt;utente&gt;&lt;gruppo&gt;&lt;altri&gt; install.sh</code></pre><figcaption>Sintassi per usare la modalità ottale</figcaption></figure><p>Ecco un esempio di modalità ottale:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">chmod 777 install.sh</code></pre><figcaption>Comando per concedere tutti i permessi usando la modalità ottale</figcaption></figure><h3 id="come-posso-rimuovere-i-permessi-usando-la-modalit-ottale"><strong>Come posso rimuovere i permessi usando la modalità ottale<strong>?</strong></strong></h3><p>Possiamo usare <code>0</code> per rimuovere i permessi da un file. Ecco un esempio:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">chmod 000 install.sh</code></pre><figcaption>Comando per rimuovere tutti i permessi usando la modalità ottale</figcaption></figure><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>Accesso</th>
<th>Modalità Simbolica</th>
<th>Modalità Ottale</th>
</tr>
</thead>
<tbody>
<tr>
<td>Lettura</td>
<td>r</td>
<td>4</td>
</tr>
<tr>
<td>Scrittura</td>
<td>w</td>
<td>2</td>
</tr>
<tr>
<td>Esecuzione</td>
<td>x</td>
<td>1</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>La tabella qui sopra mostra i codici simbolici e ottali per i permessi dei file.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>Accesso</th>
<th>Modalità Simbolica<br><strong>Es.:</strong><code>+rwx</code>,<code>g+rw</code>,<code>o+r</code></th>
<th>Modalità Ottale<br><strong>Es.:</strong><code>764</code> (Utente,Gruppo,Altri)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Utente</td>
<td>u</td>
<td>&lt;prima posizione&gt;</td>
</tr>
<tr>
<td>Gruppo</td>
<td>g</td>
<td>&lt;seconda posizione&gt;</td>
</tr>
<tr>
<td>Altri</td>
<td>o</td>
<td>&lt;terza posizione&gt;</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Potresti essere confuso😖. Continua a leggere per comprendere meglio.</p><p>Esaminiamo un caso di utilizzo.</p><p>Vuoi concedere i permessi di lettura, scrittura, esecuzione agli utenti, e permessi di lettura per i gruppi e per gli altri sul file <code>install.sh</code>.</p><p>Vediamo come farlo usando le due modalità sopra citate.</p><h3 id="come-gestire-i-permessi-in-modalit-simbolica"><strong>Come gestire i permessi in modalità simbolica</strong></h3><figure class="kg-card kg-code-card"><pre><code class="language-bash">chmod u+rwx,go+r install.sh</code></pre><figcaption>Comando per applicare la casistica sopra citata usando la modalità simbolica</figcaption></figure><p>Smembriamo ogni parte e cerchiamo di capirne il significato:</p><ul><li><code>u+rwx</code> rappresenta l'aggiunta dei privilegi di lettura, scrittura, esecuzione per gli utenti</li><li><code>go+r</code> rappresenta l'aggiunta dei privilegi di lettura per gruppi e altri</li></ul><h3 id="come-gestire-i-permessi-in-modalit-ottale"><strong>Come gestire i permessi in modalità ottale</strong></h3><figure class="kg-card kg-code-card"><pre><code class="language-bash"> chmod 744 install.sh</code></pre><figcaption>Comando per applicare la casistica sopra citata usando la modalità ottale</figcaption></figure><p>Analizziamo ogni numero e cerchiamo di capirne il significato:</p><ul><li>Il primo numero (7) rappresenta i permessi per l'utente: 7 = ( 4 (<code>lettura</code>) +2 (<code>scrittura</code>) +1 (<code>esecuzione</code>) )</li><li>Il secondo numero (4) rappresenta i permessi per i gruppi: 4 (<code>lettura</code>)</li><li>Il terzo numero (4) rappresenta i permessi per gli altri: 4 (<code>lettura</code>)</li></ul><h2 id="quale-modalit-la-migliore"><strong>Quale Modalità è la Migliore<strong>?</strong></strong></h2><p>La modalità simbolica risulta molto più potente di quella ottale.</p><p>La ragione è che nella modalità simbolica possiamo mascherare i bit di permesso che vogliamo cambiare mentre nella modalità ottale i permessi sono assoluti e non possono essere usati per modificare i singoli bit.</p><h2 id="come-trovare-i-permessi-di-un-file"><strong>Come Trovare i Permessi di un File</strong></h2><p>Possiamo trovare i permessi attualmente esistenti per un file usando il comando ls.</p><p>Spero che tu sappia tutto circa il comando <code>ls</code>. Aggiungendo l'opzione <code>-l</code> e il nome del file il comando &nbsp;<code>ls</code> ti mostra maggiori informazioni, compresi i permessi.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">ls -l install.sh</code></pre><figcaption>Comando per conosce i permessi esistenti di un file</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/12/image-137.png" class="kg-image" alt="image-137" width="600" height="400" loading="lazy"><figcaption>Istruzioni da terminale per conoscere i permessi esistenti di un file</figcaption></figure><p>Osserva la prima parte del risultato (<code>-rwxrwxrwx</code>) dalla videata qui sopra. Esaminiamo cosa significa:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/permissions-1-1.png" class="kg-image" alt="permissions-1-1" width="253" height="222" loading="lazy"></figure><p>Il primo carattere indica il tipo di elemento.</p><ul><li>"-" indica che è un file normale</li><li>"d" indica che è una directory</li><li>"l" indica che è un link simbolico (symlink, che è una scorciatoia a un file/directory)</li></ul><p>Il successivo insieme di lettere è raggruppato con un massimo di 3 per ciascun gruppo. Questi gruppi rappresentano i corrispondenti permessi per utente, gruppo e altri.</p><h2 id="conclusione"><strong><strong>Conclusion</strong>e</strong></h2><p>In questo articolo, hai imparato la gestione di base dei permessi di file e cartelle.</p><p>Spero ti sia piaciuto leggere questo tutorial. Ho una richiesta da farti: cerca di fare un tentativo con qualche situazione complicata come avere permutazioni e combinazioni di permessi 😂. Ti aiuterà sicuramente per la tua intera carriera.</p><p>Iscriviti alla mia newsletter visitando il mio <a href="https://5minslearn.gogosoon.com/">sito</a> e dai anche un'occhiata all'elenco di tutti i miei blog.</p><p>Saluti!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come Cercare File nel Terminale Linux in Modo Efficace – Guida Avanzata ]]>
                </title>
                <description>
                    <![CDATA[ Salve a tutti! Grazie per i fantastici feedback sul mio tutorial sulle basi del comando find [/italian/news/come-cercare-i-file-nel-terminale-di-linux-in-modo-efficace/]. Dopo averlo letto, molti mi hanno chiesto di scriverne una versione avanzata. Bene, eccola qui! È ora di portare le tue abilità al prossimo livello. In questo articolo, esploreremo versioni più avanzate del ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-cercare-file-nel-terminale-linux-con-efficacia-guida-avanzata/</link>
                <guid isPermaLink="false">640eec879896040622f6fbfd</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Roberto Pauletto ]]>
                </dc:creator>
                <pubDate>Wed, 15 Mar 2023 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/03/11.-Part-2--How-to-search-files-effectively-in-linux.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/how-to-search-files-effectively-in-linux/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Search Files Effectively in the Linux Terminal – Advanced Guide</a>
      </p><p>Salve a tutti! Grazie per i fantastici feedback sul mio tutorial sulle <a href="https://www.freecodecamp.org/italian/news/come-cercare-i-file-nel-terminale-di-linux-in-modo-efficace/">basi del comando <code>find</code></a>. Dopo averlo letto, molti mi hanno chiesto di scriverne una versione avanzata.</p><p>Bene, eccola qui! È ora di portare le tue abilità al prossimo livello. In questo articolo, esploreremo versioni più avanzate del comando <code>find</code>.</p><p>Se stai imparando a conoscere il comando <code>find</code>, ho trattato le basi della ricerca dei file ed esplorato alcuni potenti comandi per trovare i file velocemente usando Linux nel mio precedente tutorial. Se non l'hai ancora letto e non hai familiarità con il comando <code>find</code> ti consiglio caldamente di <a href="https://www.freecodecamp.org/italian/news/come-cercare-i-file-nel-terminale-di-linux-in-modo-efficace/">leggere prima quello</a> e poi tornare qui.</p><h1 id="come-cercare-file-di-propriet-dell-utente">Come Cercare File di Proprietà dell'Utente</h1><p>Il comando <code>find</code> accetta un argomento speciale chiamato <code>-user</code> che ti consente di filtrare i file di proprietà dell'utente (user).</p><p>La sintassi è questa:</p><pre><code class="language-bash">find [percorso] -user [username] [opzioni]</code></pre><p>Diciamo che vuoi cercare tutti i file di mia proprietà (il mio username su questo laptop è <code>aruna</code>). Lo puoi fare usando il comando seguente:</p><pre><code class="language-bash">find ./5minslearn/ -user aruna</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-37.png" class="kg-image" alt="image-37" width="600" height="400" loading="lazy"><figcaption>Ricerca di file di proprietà di un utente</figcaption></figure><p>Il comando qui sopra elencherà tutti i file il cui proprietario è <code>aruna</code> nella directory <code>5minslearn</code>.</p><p>Potresti notare le <code>[opzioni]</code> aggiunte alla fine nella sintassi del comando. In pratica vuol dire che puoi aggiungere qualsiasi argomento per rendere la tua ricerca un po' più efficace.</p><p>Per esempio, proviamo a filtrare solo le directory delle quali sono proprietario. Per attivare un filtro di questo tipo devi aggiungere l'opzione <code>-type</code> . Ecco il comando:</p><pre><code class="language-bash">find ./5minslearn/ -type d -user aruna</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-38.png" class="kg-image" alt="image-38" width="600" height="400" loading="lazy"><figcaption>Trova le directory di proprietà dell'utente</figcaption></figure><p>Dalla videata qui sopra puoi vedere che il comando elenca solo le directory e sotto-directory di mia proprietà all'interno della directory <code>5minslearn</code>.</p><h1 id="come-cercare-file-che-hanno-permessi-specifici">Come Cercare File che Hanno Permessi Specifici</h1><p>Usando l'argomento <code>-perm</code>, puoi cercare file che hanno permessi particolari.</p><p>Ecco la sintassi:</p><pre><code class="language-bash">find [percorso] -perm [permessi] [opzioni]</code></pre><p>Per esempio, ipotizziamo che tu voglia cercare tutti i file che hanno permessi di sola lettura nella directory corrente. Il codice per i file a sola lettura è <code>400</code>.</p><p><strong><strong>Not</strong>a<strong>: </strong></strong>se non conosci come viene generato questo codice (<code>400</code>) e sei curioso di saperlo, fai riferimento alla sezione "How can I remove permissions using Octal Mode?" nel mio blog <a href="https://www.freecodecamp.org/news/file-permissions-in-linux-chmod-command-explained/" rel="noopener">Linux File Permission</a> .</p><pre><code class="language-bash">find . -perm 400</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-39.png" class="kg-image" alt="image-39" width="600" height="400" loading="lazy"><figcaption>Trova file che hanno permessi di sola lettura</figcaption></figure><p>Ho creato il file <code>welcome.txt</code> con permessi di sola lettura diverso tempo fa. Puoi vedere dalla videata qui sopra che il comando <code>find</code> lo ha perfettamente identificato.</p><p>Vorrei condividere un'esperienza strana che ho affrontato nella mia carriera.</p><p>Stavo lavorando a un progetto che conteneva un gran numero (più di 200) file minimizzati. Tra questi, dovevo trovare tutti i file che non avevano permessi di sola lettura. Ero piuttosto sicuro che il numero sarebbe stato così basso che l'avrei potuto contare sulle dita di una sola mano.</p><p>Cercare tra oltre 200 file per trovarne un massimo di 5 è un processo che richiede tempo. Pertanto ho deciso di trovare un modo alternativo.</p><p>Ho cercato su Google e sono stato sorpreso dal risultato.</p><p>Ho imparato che avrei potuto farlo inserendo il flag <code>-not</code> prima dell'opzione <code>-perm</code> . Ecco il comando:</p><pre><code class="language-bash">find . -not -perm 400</code></pre><p>Il comando elenca tutti i file nella directory corrente che non hanno permessi di sola lettura.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-40.png" class="kg-image" alt="image-40" width="600" height="400" loading="lazy"><figcaption>Trovare tutti i file che non hanno permessi di sola lettura</figcaption></figure><p>Il vantaggio ulteriore è che puoi prefissare il flag <code>-not</code> prima di qualunque opzione del comando <code>find</code> per filtrare l'opposto della query di ricerca.</p><p>Ecco un altro esempio:</p><pre><code class="language-bash">find . -not -type f</code></pre><p>Eseguendo il comando qui sopra verranno elencati tutti gli elementi che non sono file (directory, link simbolici e così via) nella directory corrente.</p><h1 id="come-cercare-file-che-appartengono-a-un-gruppo-particolare">Come Cercare File che Appartengono a un Gruppo Particolare</h1><p>Come abbiamo visto nel mio tutorial precedente, potrebbero esserci più utenti che condividono un computer sul lavoro. Potrebbero essere raggruppati come Sviluppatori, ControlloQualità o altro.</p><p>Quindi, come fare se vuoi trovare tutti i file che gli utenti del gruppo <code>Developers</code> (sviluppatori) possono vedere? Difficile, giusto?</p><p>Non ti preoccupare. Ecco una semplice alternativa usando il comando <code>find</code>.</p><p>Con l'argomento <code>-group</code> del comando <code>find</code> puoi cercare tutti i file che appartengono a un gruppo.</p><p>La sintassi è questa:</p><pre><code>find [percorso] -group [nomegruppo] [opzioni]</code></pre><p>Ho un gruppo con il mio username sulla mia macchina. Cerchiamo i file che appartengono al mio gruppo.</p><pre><code class="language-bash">find . -group aruna</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-41.png" class="kg-image" alt="image-41" width="600" height="400" loading="lazy"><figcaption>Comando find per elencare tutti i file che appartengono a un gruppo</figcaption></figure><p>Puoi anche combinare l'opzione &nbsp;<code>-group</code> con altre opzioni del comando <code>find</code> per restringere la ricerca.</p><p>Per esempio puoi combinare l'opzione <code>-group</code> con l'opzione <code>-perm</code> per cercare i file che appartengono a un gruppo e hanno permessi specifici.</p><pre><code class="language-bash">find . -group aruna -perm 400</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-42.png" class="kg-image" alt="image-42" width="600" height="400" loading="lazy"><figcaption>Trova tutti i file che appartengono a un gruppo e hanno permessi di sola lettura</figcaption></figure><p>Il comando qui sopra elencherà tutti i file di sola lettura che appartengono al gruppo <code>aruna</code>.</p><p>Alla stessa stregua, come detto in precedenza, puoi anche combinare l'opzione <code>-group</code> con l'opzione &nbsp;<code>-not</code> per trovare i file che non appartengono a un particolare gruppo.</p><p>Proviamo a cercare i file che non appartengono al gruppo <code>sudo</code>.</p><pre><code class="language-bash">find . -not -group sudo</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/image-43.png" class="kg-image" alt="Trova i file che non appartengono al gurppo `sudo`" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/image-43.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/image-43.png 668w" width="668" height="215" loading="lazy"><figcaption>Trova i file che non appartengono al gruppo <code>sudo</code> </figcaption></figure><h1 id="come-trovare-file-modificati-pi-recentemente-di-un-certo-file">Come Trovare File Modificati più Recentemente di un Certo File</h1><p>L'opzione <code>-newer</code> cerca i file che sono stati modificati dopo la data di ultima modifica di un dato file.</p><p>La sintassi è questa:</p><pre><code class="language-bash">find [percorso] -newer [file_di_riferimento]</code></pre><p>Per esempio, se vuoi cercare tutti i file che sono stati modificati dopo il file <code>notes.txt</code> puoi usare il comando seguente:</p><pre><code>find . -newer notes.txt</code></pre><p>Questo comando cercherà tutti i file nella directory corrente che sono stati modificati dopo il file <code>notes.txt</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-44.png" class="kg-image" alt="image-44" width="600" height="400" loading="lazy"><figcaption>Trova file modificati più recentemente di un file di riferimento</figcaption></figure><h1 id="come-cercare-file-aperti-pochi-minuti-fa">Come Cercare File Aperti Pochi Minuti Fa</h1><p>Per cercare file con con data di accesso di pochi minuti fa, puoi usare l'argomento <code>-amin</code>, che accetta numeri che esprimono minuti e trova i file con data di accesso di <code>n</code> minuti fa.</p><p>La sintassi è:</p><pre><code>find [percorso] -amin [n] [opzioni]</code></pre><p>Per esempio proviamo a trovare file con data di accesso che risale agli ultimi 30 minuti:</p><pre><code>find . -amin -30</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-45.png" class="kg-image" alt="image-45" width="600" height="400" loading="lazy"><figcaption>Trova tutti i file con data di accesso inferiore a 30 minuti</figcaption></figure><p>Spero tu abbia notato il segno negativo (meno) prima del numero. Indica che il valore deve avere avuto un accesso nel passato.</p><h1 id="come-cercare-tutti-i-file-vuoti">Come Cercare Tutti i File Vuoti</h1><p>Puoi usare l'opzione <code>-empty</code> per cercare file e directory vuote.</p><p>Ecco la sintassi:</p><pre><code>find [percorso] -empty [opzioni]</code></pre><p>Per trovare tutti i file e directory vuote puoi usare il seguente comando:</p><pre><code>find . -empty</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-46.png" class="kg-image" alt="image-46" width="600" height="400" loading="lazy"><figcaption>Trova tutti i file e directory vuoti</figcaption></figure><p>Per cercare solo directory vuote, puoi combinare l'opzione &nbsp;<code>-empty</code> con l'opzione &nbsp;<code>-type</code> :</p><pre><code>find . -type d -empty</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-47.png" class="kg-image" alt="image-47" width="600" height="400" loading="lazy"><figcaption>Trova tutte le directory vuote</figcaption></figure><p>Questo comando elencherà tutte le directory vuote nella directory corrente.</p><p>Si può aggiungere l'opzione <code>-delete</code> all'opzione <code>-empty</code> &nbsp;per eliminare tutti i file e le directory vuote.</p><h1 id="come-trovare-file-che-corrispondono-a-una-specifica-espressione-regolare">Come Trovare File che Corrispondono a una Specifica Espressione Regolare</h1><p>L'argomento <code>-regex</code> consente di applicare un filtro usando un'espressione regolare (RegEx).</p><p>La sintassi è questa:</p><pre><code>find [percorso] -regex [espressione] [opzioni]</code></pre><p>Per esempio ipotizziamo che tu voglia cercare i file il cui nome inizia con la lettera <code>w</code>. Puoi usare il seguente comando per farlo:</p><pre><code>find . -regex "./w.*"</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2023/03/image-48.png" class="kg-image" alt="image-48" width="600" height="400" loading="lazy"><figcaption>Trova tutti i file che corrispondono a una espressione regolare specificata</figcaption></figure><h1 id="conclusione">Conclusione</h1><p>In questo articolo, hai imparato alcuni suggerimenti avanzati su come cercare file con efficacia ed eseguire varie operazioni su di essi.</p><p>Ti consiglierei di imparare il comando <code>find</code> provandolo. Identifica tu stesso qualche caso di utilizzo e cerca di trovare i file usando le tecniche che hai appreso.</p><p>Ti suggerisco alcune situazioni:</p><ul><li>Trova e cancella i file che finiscono per <code>.txt</code></li><li>Trova file dei quali non sei proprietario</li><li>Trova file che non corrispondono a un pattern</li><li>Trova tutti i file che iniziano per <code>log-</code> e hanno una dimensione tra 50MB e 100MB</li><li>Trova tutti i file che appartengono a un gruppo e che hanno avuto un accesso 10 minuti fa</li></ul><p>Spero ti sia piaciuto leggere questo articolo!</p><p>Per leggere altri blog interessanti, iscriviti alla mia newsletter via email oppure al mio <a href="https://5minslearn.gogosoon.com/?ref=fcc_advanced_find_command_part_2">sito</a> e seguimi sui social media.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come Cercare i File nel Terminale di Linux in Modo Efficace ]]>
                </title>
                <description>
                    <![CDATA[ Ti sai mai sentito frustrato cercando manualmente dei file suo tuo computer? Se sei uno sviluppatore oppure un ingegnere DevOps che lavora su un server Linux che non dispone di un'Interfaccia Grafica Utente (GUI), sarà difficile spostarti avanti e indietro per cercare dei file. Molte persone non sono consapevoli della ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-cercare-i-file-nel-terminale-di-linux-in-modo-efficace/</link>
                <guid isPermaLink="false">63f5efdf51d6f8065ddae320</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Roberto Pauletto ]]>
                </dc:creator>
                <pubDate>Tue, 14 Mar 2023 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/02/BB---How-to-search-files-effectively-in-linux.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/how-to-search-files-in-the-linux-terminal/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Search Files Effectively in the Linux Terminal</a>
      </p><p>Ti sai mai sentito frustrato cercando manualmente dei file suo tuo computer? Se sei uno sviluppatore oppure un ingegnere DevOps che lavora su un server Linux che non dispone di un'Interfaccia Grafica Utente (GUI), sarà difficile spostarti avanti e indietro per cercare dei file.</p><p>Molte persone non sono consapevoli della potenza dei terminali Linux. Linux ha una riga di comando incredibilmente potente che ti consente di cercare file e directory in una frazione di secondo.</p><p>Che tu sia un principiante o un esperto, se stai cercando di portare le tue doti di gestione dei file al livello superiore, sei nel posto giusto. Questo articolo ti aiuterà a capire le basi della sintassi dei comandi <strong>find</strong> maggiormente usati in Linux.</p><h2 id="cos-il-comando-find-in-linux"><strong>Cos'è il Comando<strong> <code>find</code> in Linux?</strong></strong></h2><p>Il comando <code>find</code> ti consente di cercare file e directory nel tuo computer. Aggiunge la flessibilità di cercare file in una directory specifica oppure ricorsivamente in tutte le sotto-directory.</p><p>Esploriamo la potenza del comando <code>find</code>.</p><h2 id="come-cercare-un-file-per-nome"><strong>Come Cercare un File per Nome</strong></h2><p>Diciamo che hai salvato un file chiamato <code>hello_world.html</code> da qualche parte e non ti ricordi neppure il nome della directory. Tuttavia il tuo capo ti chiede di inviargli il file immediatamente.</p><p>In genere, se ti dimentichi dove hai salvato il file, inizi a cercare cartella dopo cartella per vedere se trovi il file.</p><p>Ecco quando il comando <code>find</code> funziona alla grande. Invece di cercare il file manualmente nel tuo computer, puoi usare il comando <code>find</code> per automatizzare il processo.</p><p>Passando il nome del file all'opzione &nbsp;<code>-name</code> , il comando <code>find</code> cerca il file e ne restituisce la posizione.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">find -name &lt;nome_file&gt;</code></pre><figcaption>Sintassi del comando <code>find</code> per cercare file per nome</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://lh4.googleusercontent.com/hUG1ogKlPIlvUZZiCIOBO4x1ZTlGAujhGTe2v-KevAi3zU3z-ZuBA0VJvMWht0V-7cLha4beNzMIkENiN0ZiYZfa8Pc0O-XJMzmbfftY_bo9Csrz-4-7dvwJFgC59G94A2GbFpPTkfU6rxL9MrSOCVI" class="kg-image" alt="hUG1ogKlPIlvUZZiCIOBO4x1ZTlGAujhGTe2v-KevAi3zU3z-ZuBA0VJvMWht0V-7cLha4beNzMIkENiN0ZiYZfa8Pc0O-XJMzmbfftY_bo9Csrz-4-7dvwJFgC59G94A2GbFpPTkfU6rxL9MrSOCVI" width="600" height="400" loading="lazy"><figcaption>Comando dal terminale per cercare un file per nome</figcaption></figure><p>Ricorda che con l'opzione <code>-name</code> viene eseguita una ricerca che tiene conto delle minuscole/maiuscole. Per svolgere una ricerca che ignori se una lettera sia minuscola o maiuscola, puoi usare l'opzione <code>-iname</code>.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">find -iname &lt;nome_file&gt;</code></pre><figcaption>Sintassi del comando <code>find</code> per eseguire una ricerca che ignora maiuscole/minuscole</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://lh4.googleusercontent.com/Gxuso3qZslePPLMxKDtBuQWwQiliDpU2pHAzRTdiRob2OBKrdN1oWA_rTwe2thYiHeUmRo8SBNE2QR6G2kmdDlKhX14wFd9fYmfppZVQNprUHaGMWLB_GgGVSq7l4DQyP2STSFZcx0Rt5B6thvM7T3Y" class="kg-image" alt="Gxuso3qZslePPLMxKDtBuQWwQiliDpU2pHAzRTdiRob2OBKrdN1oWA_rTwe2thYiHeUmRo8SBNE2QR6G2kmdDlKhX14wFd9fYmfppZVQNprUHaGMWLB_GgGVSq7l4DQyP2STSFZcx0Rt5B6thvM7T3Y" width="600" height="400" loading="lazy"><figcaption>Comando dal terminale per eseguire una ricerca che ignora maiuscole/minuscole</figcaption></figure><p>Puoi anche usare <code>find</code> come alternativa al comando <code>ls</code> in alcune situazioni. Diciamo che ti serve trovare tutti i file che hanno un'estensione <code>.txt</code>. Puoi farlo con il comando <code>find</code> usando un pattern di espressione regolare (<code>*.txt</code>).</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">find /percorso/da/cercare -name "*.txt"</code></pre><figcaption>Comando <code>find</code> per cercare i file corrispondenti a un pattern</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://lh3.googleusercontent.com/xtbCKd-v83ytN4mnr35RbiWCgJuEiAt9LBO_Qq2IDwRPJaQWRfzBUe5YY63JEcLHS344TvGWRzK139n93upgh1ALKgRavsWwNe0iTh772rhGZwFXcpP5eyGz_iI6XPHuDK55Ch93rNe70fSIyJJcMmw" class="kg-image" alt="xtbCKd-v83ytN4mnr35RbiWCgJuEiAt9LBO_Qq2IDwRPJaQWRfzBUe5YY63JEcLHS344TvGWRzK139n93upgh1ALKgRavsWwNe0iTh772rhGZwFXcpP5eyGz_iI6XPHuDK55Ch93rNe70fSIyJJcMmw" width="600" height="400" loading="lazy"><figcaption>Comando dal terminale per cercare file che trovano corrispondenza con un pattern</figcaption></figure><p>Il comando qui sopra elenca tutti i file con estensione <code>.txt</code> nella tua directory corrente e sue sotto-directory.</p><p>Per trovare file con estensione <code>.txt</code> in una specifica directory e sotto-directory sostituisci <code>/percorso/da/cercare</code> con il percorso della directory dalla quale vuoi iniziare la ricerca, nell'esempio la directory corrente.</p><h2 id="come-cercare-directory-in-linux"><strong>Come Cercare<strong> Directory in Linux</strong></strong></h2><p>È possibile cercare una directory passando l'opzione &nbsp;<code>d</code> al parametro <code>-type</code> del comando <code>find</code>.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">find /percorso/da/cercare -type d</code></pre><figcaption>Sintassi del comando <code>find</code> per trovare una directory</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/pasted-image-0.png" class="kg-image" alt="pasted-image-0" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/pasted-image-0.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/03/pasted-image-0.png 734w" sizes="(min-width: 720px) 720px" width="734" height="271" loading="lazy"><figcaption>Comando da terminale per cercare una directory usando <code>find</code></figcaption></figure><p>Nella videata qui sopra, c'è il risultato della ricerca di una directory chiamata <code>zip</code> partendo dalla directory corrente.</p><p>In modo simile, l'opzione <code>-type</code> accetta altri parametri che consentono di semplificare il nostro processo di ricerca.</p><ul><li><code>f</code> trova i file normali</li><li><code>b</code> trova i file di dispositivi a blocchi</li><li><code>c</code> trova i file di dispositivi a caratteri</li><li><code>l</code> trova i link simbolici</li><li><code>s</code> trova i socket</li><li><code>p</code> trova le <a href="https://it.wikipedia.org/wiki/Pipe_(informatica)">named pipe</a> </li></ul><h2 id="come-cercare-un-file-per-dimensione-in-linux"><strong>Come Cercare un File per Dimensione in <strong>Linux</strong></strong></h2><p>Aggiungere l'opzione <code>-size</code> al comando <code>find</code> ti aiuta a trovare file in base alla loro dimensione. Anteponi un <code>+</code> o un <code>-</code> alla dimensione per rappresentare rispettivamente valori maggiori di o minori di.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">find /percorso/da/cercare -size &lt;dimensione_del_file&gt;</code></pre><figcaption>Sintassi del comando <code>find</code> per cercare file per dimensione</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://lh6.googleusercontent.com/5_gYC6AREIU77iDWAOY3uqfyCEPpICXenMzpxMv15oaOyNg2t4QhtH862wZeIRH3IgWxX1MJYwAOMGQZVeerY6HeNYjcmB_bdMiqPnoAsSyQ5JjQ75DqmCOsbcLQ8AeMk31MQb9Z1aC0Q-1CznPNRn8" class="kg-image" alt="5_gYC6AREIU77iDWAOY3uqfyCEPpICXenMzpxMv15oaOyNg2t4QhtH862wZeIRH3IgWxX1MJYwAOMGQZVeerY6HeNYjcmB_bdMiqPnoAsSyQ5JjQ75DqmCOsbcLQ8AeMk31MQb9Z1aC0Q-1CznPNRn8" width="600" height="400" loading="lazy"><figcaption>Ricerca da terminale di file per dimensione</figcaption></figure><p>Nella videata qui sopra stiamo cercando file con dimensione maggiore di &nbsp;1 GB.</p><p>Puoi anche cercare i file che rientrano in uno specifico intervallo di dimensioni.</p><p>Per esempio, se vuoi trovare tutti i file che hanno dimensione maggiore di 50 MB e inferiore a 100 MB, puoi eseguire il seguente comando:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">find /percorso/da/cercare -size +50M -size -100M</code></pre><figcaption>Sintassi del comando <code>find</code> per cercare file in un intervallo di dimensioni</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://lh6.googleusercontent.com/KylER-ErURtFf22PtpPhqT8yQofvlaA6s7XhP8FdHo4KqLTXYsDY5EL3LhVoyZKrHJGMHYWJ6CheD2PiaS_ynX_x-Ziho5eqK8YbEAqdAVvugE0RUWuOPvuwrUddCIw4TnoqLZDSI2qRak1kdDF6o40" class="kg-image" alt="KylER-ErURtFf22PtpPhqT8yQofvlaA6s7XhP8FdHo4KqLTXYsDY5EL3LhVoyZKrHJGMHYWJ6CheD2PiaS_ynX_x-Ziho5eqK8YbEAqdAVvugE0RUWuOPvuwrUddCIw4TnoqLZDSI2qRak1kdDF6o40" width="600" height="400" loading="lazy"><figcaption>Ricerca da terminale di file in un intervallo di dimensioni</figcaption></figure><p>Puoi specificare la dimensione nell'unità di misura che preferisci. Alcune di quelle a disposizione sono:</p><ol><li><code>K</code> rappresenta KB</li><li><code>M</code> rappresenta MB</li><li><code>G</code> rappresenta GB</li><li><code>b</code> rappresenta byte</li><li><code>c</code> rappresenta blocchi</li></ol><h2 id="come-cercare-file-in-base-alla-data-di-modifica"><strong>Come Cercare File in Base alla Data di Modifica</strong></h2><p>Ogni file ha una data/ora di creazione e ultima modifica associate. Supponiamo che tu abbia migliaia di file nella tua directory. Hai modificato un file negli ultimi due giorni ma hai dimenticato il suo nome. Ma sei sicuro che dopo quello hai modificato solo un altro paio di file.</p><p>In questi casi, puoi trovare tutti i file che sono stati modificati negli ultimi 7 giorni. Questo limita la ricerca da oltre 1000 file a un numero molto più gestibile. Riuscirai a trovare il file che hai modificato in pochi secondi dopo aver eseguito il comando.</p><p>Ciò è possibile usando l'opzione <code>-mtime</code> del comando <code>find</code> .</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">find /percorso/da/cercare -mtime &lt;-numero_giorni_fa&gt;</code></pre><figcaption>Sintassi del comando <code>find</code> per cercare file modificati dopo una certa data</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://lh3.googleusercontent.com/EOsirsBvBa83A2NeK1qGZ8g_FLriAngr4yso3nhOpuwT18zrkur92GKfMBfr8nA8ULrgdWvREvzJfSznVecNXZXONs3JXdG3gJFoqZ7PcqFmZe3T2IS0ka-bkSajpj3aXunMvTYYPZkLl4YjkYzx_1Y" class="kg-image" alt="EOsirsBvBa83A2NeK1qGZ8g_FLriAngr4yso3nhOpuwT18zrkur92GKfMBfr8nA8ULrgdWvREvzJfSznVecNXZXONs3JXdG3gJFoqZ7PcqFmZe3T2IS0ka-bkSajpj3aXunMvTYYPZkLl4YjkYzx_1Y" width="600" height="400" loading="lazy"><figcaption>Ricerca da terminale di file in base alla data di modifica</figcaption></figure><p>Consideriamo un altro caso, in cui la data odierna sia 10 febbraio 2023. Hai modificato un file prima del 3 febbraio 2023. Dopo quella data hai modificato molti file. Devi trovare il file che è stato modificato prima del 3 febbraio 2023. Praticamente devi cercare i file che sono stati modificati prima del 3 febbraio 2023.</p><p>Un caso un po' strano, vero?</p><p>Puoi eseguire questa ricerca con il comando <code>find</code>, sostituendo il segno meno (-) con il segno più (+).</p><p>Ecco il comando modificato:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">find /percorso/da/cercare -mtime +7</code></pre><figcaption>Sintassi del comando <code>find</code> per cercare file modificati prima di una certa data</figcaption></figure><h2 id="come-eseguire-un-comando-sui-file-filtrati-dal-comando-find"><strong>Come Eseguire un Comando sui File Filtrati dal Comando<strong> <code>find</code> </strong></strong></h2><p>Il titolo di questa sezione potrebbe confonderti. Prima di svelare la risposta, cerchiamo di capire chiaramente il contesto con uno scenario reale.</p><p>Supponiamo di avere 1000 file in una directory, ed eseguendo il comando <code>find</code> è stata trovata corrispondenza con 20 file. Vuoi spostare questi 20 file in una diversa directory. Come puoi farlo?</p><p>In termini semplici, dobbiamo eseguire un comando per ciascuno di questi file filtrati.</p><p>Puoi fare questo passando l'opzione <code>-exec</code> al comando <code>find</code>.</p><p>L'opzione <code>-exec</code> esegue un comando su ciascun file che è stato trovato nella ricerca. L'opzione <code>-exec</code> è seguita da un comando e dai suoi argomenti, con le parentesi graffe<code>{}</code> che rappresentano i file che saranno elaborati.</p><p>Per rappresentare la fine del comando <code>-exec</code>, dobbiamo aggiungere una barra rovesciata e un punto e virgola (<code>\;</code>) .</p><p>Ecco la sintassi:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">find /percorso/di/ricerca -name  -exec  {}  \;</code></pre><figcaption>Sintassi del comando <code>find</code> per eseguire un'operazione sui file filtrati</figcaption></figure><p>Cerchiamo di spostare i file filtrati dalla directory <code>5minslearn</code> alla directory <code>zip</code>.</p><p>Ecco il comando:</p><pre><code class="language-shell">find ./5minslearn -name "*.zip" -exec mv {} ./5minslearn/zip \;</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://lh5.googleusercontent.com/Oysc8VJqcheOL0uSk9t18SM1BBckLmZ1Sfs026TByvdQcHNFVDGssztFu13rHi0waaOUXCuKx1rsHbyWCXr190agnVEKZA3rMexuSH_m6myz38JhQ563hNLBKfTBOMklTt-aH5dd05CfXCVwKG0yiZI" class="kg-image" alt="Oysc8VJqcheOL0uSk9t18SM1BBckLmZ1Sfs026TByvdQcHNFVDGssztFu13rHi0waaOUXCuKx1rsHbyWCXr190agnVEKZA3rMexuSH_m6myz38JhQ563hNLBKfTBOMklTt-aH5dd05CfXCVwKG0yiZI" width="600" height="400" loading="lazy"></figure><p>Questo comando cerca tutti i file che hanno estensione <code>.zip</code> nella directory <code>./5minslearn</code> e li sposta nella directory <code>./5minslearn/zip</code>.</p><p>L'opzione <code>-exec</code> ti consente di eseguire una vasta gamma di operazioni sui file trovati. Puoi sostituire il comando di spostamento dell'esempio precedente con i comandi di copia, eliminazione o anche utilizzare il comando per cambiare i permessi del file.</p><h2 id="come-eseguire-un-comando-sui-file-filtrati-con-una-conferma"><strong>Come Eseguire un Comando sui File Filtrati con una Conferma</strong></h2><p>Molte persone preferiscono usare questo comando se non sono sicure del modo nel quale verranno applicate le operazioni su ciascun file.</p><p>L'opzione <code>-ok</code> è simile all'opzione <code>-exec</code> a eccezione del fatto che richiede una conferma prima di eseguire l'operazione specificata su ciascun file. Questo comando è particolarmente utile per verificare quali file siano interessati prima di eseguire l'operazione specifica. Puoi anche annullare l'operazione se non sei sicuro o non la vuoi eseguire.</p><p>Per esempio, questa volta cerchiamo di spostare i file con estensione <code>.txt</code> in un'altra directory.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">find /percorso/da/cercare -name "*.txt" -ok mv {} /percorso/nuova/destinazione \;</code></pre><figcaption>Sintassi del comando <code>find</code> per confermare prima di eseguire un'operazione sui file filtrati</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://lh3.googleusercontent.com/LR9SFYz9f90xR6_aMS_VKEQa7IS9cecwEAMRkNh5KJ1JSMaQCx0cIe-5XOonpOOdELbnU8549XkQ-HfYCQEoG9Epn8F89cA86o3BRFTR9cJtOLM7GgvKpWMNpkutX89sRtWs96wZ0pz-JHZTSGFBrq0" class="kg-image" alt="LR9SFYz9f90xR6_aMS_VKEQa7IS9cecwEAMRkNh5KJ1JSMaQCx0cIe-5XOonpOOdELbnU8549XkQ-HfYCQEoG9Epn8F89cA86o3BRFTR9cJtOLM7GgvKpWMNpkutX89sRtWs96wZ0pz-JHZTSGFBrq0" width="600" height="400" loading="lazy"><figcaption>Comando da terminale per spostare i file filtrati con conferma</figcaption></figure><p>Il comando qui sopra cerca tutti i file con estensione <code>.txt</code> nella directory <code>./5minslearn</code> e chiede all'utente di confermare prima di spostare ciascun file nella directory <code>./5minslearn/text_files</code>.</p><p>Per confermare l'operazione, digita <code>yes</code> e <code>no</code> per rinunciare e passare al file successivo.</p><p>L'opzione <code>-ok</code><strong><strong> </strong></strong>è utile quando vuoi essere cauto rispetto alle operazioni che devi effettuare sui file trovati, visto che ti consente di verificare ogni file e la sua posizione prima di eseguire il comando specifico.</p><h2 id="come-trovare-file-visualizzando-informazioni-dettagliate"><strong>Come Trovare File Visualizzando Informazioni Dettagliate</strong></h2><p>L'opzione <code>-ls</code> del comando <code>find</code> viene usata per visualizzare informazioni circa i file trovati nella ricerca, nel formato del comando <code>ls</code>. Questa opzione fornisce informazioni dettagliate sui file, come i loro permessi, il proprietario, la dimensione, e l'ultima data di modifica.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">find /percorso/da/cercare -name "*.&lt;estensione_file&gt;" -ls</code></pre><figcaption>Sintassi del comando <code>find</code> per elencare i file con il formato del comando <code>ls</code></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/03/pasted-image-0--1-.png" class="kg-image" alt="pasted-image-0--1-" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/03/pasted-image-0--1-.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/03/pasted-image-0--1-.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/03/pasted-image-0--1-.png 1040w" sizes="(min-width: 720px) 720px" width="1040" height="62" loading="lazy"><figcaption>Comando da terminale per elencare i file con il formato del comando <code>ls</code></figcaption></figure><h2 id="come-trovare-e-rimuovere-file"><strong>Come Trovare e Rimuovere File</strong></h2><p>Hai mai dovuto trovare file ed eliminarli dal tuo computer? L'opzione <code>-delete</code> di <code>find</code> fa questo per te. Ti consente di eliminare file che corrispondono a un certo criterio.</p><pre><code class="language-bash">find . -name "*.&lt;estensione&gt;" -delete</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://lh3.googleusercontent.com/W2DQEoEcNi0897Z99NPHyhx6RTPpO1hL0AVCAGCuKdabq8_eXbFtsL2BJdLn6MCqdYXTa7veSRhDj9gTU7Rbbz0vNoIbxF_N_IXmR45IHgH3DMXSnMBRPtLjIKK-G9af5FncqC2s28zqBfP6kcinXqY" class="kg-image" alt="W2DQEoEcNi0897Z99NPHyhx6RTPpO1hL0AVCAGCuKdabq8_eXbFtsL2BJdLn6MCqdYXTa7veSRhDj9gTU7Rbbz0vNoIbxF_N_IXmR45IHgH3DMXSnMBRPtLjIKK-G9af5FncqC2s28zqBfP6kcinXqY" width="600" height="400" loading="lazy"></figure><p>Nell'esempio qui sopra puoi vedere che il comando find ha eliminato i file con estensione <code>.html</code>.</p><p>Nota: questa operazione è irreversibile. Devi essere assolutamente sicuro quando esegui l'operazione di cancellazione.</p><p>Ti consiglio di eseguire il comando <code>find</code> senza l'opzione <code>-delete</code> una prima volta per assicurarti che vengano trovati solo i file che dovrebbero essere cancellati. Una volta che sei sicuro, puoi eseguire lo stesso comando aggiungendo l'opzione <code>-delete</code>.</p><h2 id="conclusione"><strong><strong>Conclusion</strong>e</strong></h2><p>In questo articolo, hai imparato come cercare i file con efficacia usando il tuo terminale Linux.</p><p>Queste sono solo le opzioni base del comando <code>find</code> che ogni sviluppatore dovrebbe conoscere. Credo che la padronanza dei fondamentali sia il primo passo per migliorare la conoscenza di Linux. Ho trattato delle basi su tutti i miei blog per aiutarti a creare solide fondamenta.</p><p>Per saperne di più su Linux, iscriviti alla mia newsletter via email sul mio <a href="https://5minslearn.gogosoon.com/?ref=fcc_find_command">sito</a> e seguimi sui social media.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come Cercare File dalla Riga di Comando di Linux ]]>
                </title>
                <description>
                    <![CDATA[ Cercare dei file è relativamente facile quando stai usando una Interfaccia Grafica Utente (GUI). Ma in alcuni ambienti, come i server che non sono dotati di GUI, devi cercare i file usando la riga di comando. C'è un comando potente in Linux che ti aiuta nella ricerca di file e ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-cercare-file-dalla-riga-di-comando-di-linux/</link>
                <guid isPermaLink="false">63ea128d87f2e0059ba2ca87</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Roberto Pauletto ]]>
                </dc:creator>
                <pubDate>Fri, 24 Feb 2023 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/02/come-cercare-file-dalla-riga-di-comando-di-linux.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/how-to-search-for-files-from-the-linux-command-line/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Search for Files from the Linux Command Line</a>
      </p><p>Cercare dei file è relativamente facile quando stai usando una Interfaccia Grafica Utente (GUI). Ma in alcuni ambienti, come i server che non sono dotati di GUI, devi cercare i file usando la riga di comando.</p><p>C'è un comando potente in Linux che ti aiuta nella ricerca di file e cartelle chiamato <code>find</code>. In questo articolo, esamineremo il comando <code>find</code> con alcuni esempi.</p><h2 id="cos-il-comando-find-in-linux"><strong>Cos'è il comando find in <strong>Linux?</strong></strong></h2><p>Il comando <code>find</code> ti consente di cercare con efficienza file, cartelle, dispositivi a caratteri e dispositivi a blocchi.</p><p>Qui sotto la sintassi base per il comando <code>find</code> :</p><pre><code class="language-bash">find /percorso/ -type f -name file-da-cercare
</code></pre><p>Dove:</p><!--kg-card-begin: markdown--><ul>
<li><code>/percorso</code> è il percorso dove ci si aspetta di trovare il file. Questo è il punto di partenza per la ricerca dei file. Il percorso può anche essere <code>/</code> o <code>.</code> che rappresenta rispettivamente la radice e la directory corrente.</li>
<li><code>-type</code> rappresenta il descrittore del file. Può essere uno dei seguenti:
<ul>
<li><code>f</code> - <strong>File normali</strong> come i file di testo, le immagini, i file nascosti.</li>
<li><code>d</code> - <strong>Directory</strong>: vengono prese in considerazione solo le directory.</li>
<li><code>l</code> - <strong>Link simbolici</strong>: i link simbolici puntano a dei file e sono simili a scorciatoie.</li>
<li><code>c</code> - <strong>Dispositivi a carattere</strong>: sono file usati per accedere a dispositivi a carattere. I driver comunicano con i dispositivi a carattere inviando e ricevendo singoli caratteri (byte, ottetti). Esempi sono le tastiere, le schede audio e il mouse.</li>
<li><code>b</code> – <strong>Dispositivi a blocco</strong>: sono file usati per accedere a dispositivi a blocco. I driver comunicano con i dispositivi a blocco inviando e ricevendo interi blocchi di dati. Esempi sono i dispositivi USB e i CD ROM</li>
</ul>
</li>
<li><code>-name</code> è il nome del file che vuoi cercare</li>
</ul>
<!--kg-card-end: markdown--><h2 id="esempi-del-comando-find"><strong>Esempi del comando find</strong></h2><p>Ora che conosciamo la sintassi del comando <code>find</code> vediamo alcuni esempi.</p><h3 id="come-cercare-file-per-nome-o-per-estensione"><strong>Come cercare file per nome o per estensione</strong></h3><p>Supponiamo di dover cercare file che contengono la stringa "style". Useremo questo comando:</p><pre><code class="language-bash">find . -type f -name "*style*"</code></pre><p><strong>Risultato</strong></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/02/find-01-out-2.png" class="kg-image" alt="image-59" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/02/find-01-out-2.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/02/find-01-out-2.png 890w" sizes="(min-width: 720px) 720px" width="890" height="190" loading="lazy"></figure><p>Ora supponiamo di dover cercare file con una particolare estensione, come <code>.html</code>. Modificheremo il comando in questo modo:</p><pre><code class="language-bash">find . -type f -name "*.html"</code></pre><p><strong>Risultato</strong></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/02/find-02-out-1.png" class="kg-image" alt="image-60" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/02/find-02-out-1.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/02/find-02-out-1.png 890w" sizes="(min-width: 720px) 720px" width="890" height="190" loading="lazy"></figure><h3 id="come-cercare-file-nascosti"><strong>Come cercare file nascosti</strong></h3><p>I file nascosti sono rappresentati da un puntino che precede il nome del file. Normalmente sono nascosti, ma possono essere elencati con il parametro <code>-a</code> del comando <code>ls</code>, per esempio per elencare file nascosti nella directory corrente digitare <code>ls -a</code>.</p><p>Per cercare file nascosti modifichiamo come segue il comando <code>find</code>.</p><pre><code class="language-bash">find . -type f -name ".*"</code></pre><p><strong>Risultato</strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/02/find-03-1.png" class="kg-image" alt="image-61" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/02/find-03-1.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/02/find-03-1.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/02/find-03-1.png 1239w" sizes="(min-width: 720px) 720px" width="1239" height="244" loading="lazy"><figcaption>Elenco di file nascosti nella mia directory home</figcaption></figure><h3 id="come-cercare-file-di-log-e-di-configurazione"><strong>Come cercare file di log e di configurazione</strong></h3><p>I file di log in genere hanno estensione <code>.log</code> e li possiamo cercare in questo modo:</p><pre><code class="language-bash"> find . -type f -name "*.log"</code></pre><p><strong>Risultato</strong></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/02/find-04-1.png" class="kg-image" alt="image-62" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/02/find-04-1.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/02/find-04-1.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/02/find-04-1.png 1239w" sizes="(min-width: 720px) 720px" width="1239" height="172" loading="lazy"></figure><p>In modo simile, per cercare file di configurazione (che in genere hanno estensione <code>.conf</code>) digitiamo:</p><pre><code class="language-bash"> find . -type f -name "*.conf"</code></pre><h3 id="come-cercare-file-per-tipo"><strong>Come cercare file per tipo</strong></h3><p>Possiamo cercare file di dispositivo a carattere passando <code>c</code> al parametro <code>-type</code>:</p><pre><code class="language-bash">find / -type c</code></pre><p>Analogamente i file di dispositivo a blocco si trovano passando <code>b</code>:</p><pre><code class="language-bash">find / -type b</code></pre><h3 id="come-cercare-directory"><strong>Come cercare directory</strong></h3><p>Nell'esempio che segue cerchiamo delle cartelle chiamate <code>lib</code>. Nota che usiamo <code>-type d</code>.</p><pre><code class="language-bash">find . -type d -name "lib*"</code></pre><p><strong>Risultato</strong></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/02/find-05-2.png" class="kg-image" alt="image-63" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/02/find-05-2.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/02/find-05-2.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/02/find-05-2.png 1239w" sizes="(min-width: 720px) 720px" width="1239" height="124" loading="lazy"></figure><p>💡 Suggerimento: possiamo identificare le directory cercando il flag <code>d</code> nel risultato del comando <code>ls -l</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/02/find-06-out.png" class="kg-image" alt="image-64" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/02/find-06-out.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/02/find-06-out.png 895w" sizes="(min-width: 720px) 720px" width="895" height="351" loading="lazy"></figure><h3 id="come-cercare-per-dimensione"><strong>Come cercare per dimensione</strong></h3><p>Un utilizzo incredibilmente utile del comando <code>find</code> è quello di elencare i file in base a una particolare dimensione.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">find / -size +250MB</code></pre><figcaption>Questo comando elenca file la cui dimensione supera i 250MB</figcaption></figure><p>Altre unità di dimensione sono:</p><ul><li><code>G</code>: GigaByte.</li><li><code>M</code>: MegaByte.</li><li><code>K</code>: KiloByte</li><li><code>b</code> : byte.</li></ul><p>Sostituisci semplicemente &lt;Tipo Unità&gt; con quella desiderata.</p><pre><code class="language-bash">find &lt;directory&gt; -type f -size +N&lt;Tipo Unità&gt;
</code></pre><h3 id="come-cercare-file-per-data-di-modifica"><strong>Come cercare file per data di modifica</strong></h3><pre><code class="language-bash">find /percorso -name "*.txt" -mtime -10 

</code></pre><ul><li><strong><strong>-mtime +10</strong></strong>: significa che vuoi cercare file modificati almeno 1o giorni fa.</li><li><strong><strong>-mtime -10</strong></strong>: significa meno di 10 giorni fa.</li><li><strong><strong>-mtime 10</strong></strong>:<strong><strong> </strong></strong>se ometti + o – vuol dire esattamente 10 giorni fa.</li></ul><p>Di seguito il contenuto della mia directory home:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/02/find-07.png" class="kg-image" alt="image-65" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/02/find-07.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/02/find-07.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/02/find-07.png 1239w" sizes="(min-width: 720px) 720px" width="1239" height="423" loading="lazy"></figure><p>Applichiamo l'esempio di ricerca sopra descritto nella mia directory home (ipotizzando che il comando sia stato eseguito il 17 febbraio)</p><pre><code class="language-bash">find . -type f -name ".*" -mtime +10</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/02/find-08.png" class="kg-image" alt="image-66" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/02/find-08.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/02/find-08.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/02/find-08.png 1239w" sizes="(min-width: 720px) 720px" width="1239" height="160" loading="lazy"><figcaption>Ecco i file che sono stati modificati più di 10 giorni fa.</figcaption></figure><h2 id="esempi-pratici-di-find-negli-script-bash"><strong>Esempi pratici di <strong><code>find</code> </strong>negli script bash</strong></h2><p>Possiamo combinare <code>find</code> con il comando di eliminazione <code>rm</code> o spostamento <code>mv</code> per creare script bash significativi che possono essere automatizzati.</p><p>Diciamo che vogliamo creare uno script che sposta i file di log più vecchi di 7 giorni in una cartella di backup e che nella cartella di backup elimina i file di log che sono più vecchi di 30 giorni. Possiamo creare uno script e pianificarne l'esecuzione con <code>cron</code>. Puoi saperne di più su <code>cron</code> <a href="https://www.freecodecamp.org/italian/news/come-automatizzare-attivita-in-linux-con-i-job-di-cron/">in questo articolo</a>.</p><p>Vediamo lo script:</p><pre><code class="language-bash">#!/bin/bash
# Script per spostare i file di log più vecchi di 7 
# giorni nel percorso di backup app/backup_logs/ESB0*

# sposta i log ESB01 nella cartella di backup
find /logs/esb01/audit  -name "*.tar.gz" -mtime +7 -exec mv {} app/backup_logs/ESB01/ \;

# Elimina i file di log più vecchi di 30 giorni
# dalla cartella di backup
find /app/backup_logs/ESB01 -name "*.tar.gz" -mtime +30  -exec rm {} \;
</code></pre><p>Nota che usiamo <code>exec</code> con <code>find</code>. Praticamente, <code>exec</code> esegue il comando fornito (<code>mv</code> e <code>rm</code> nel nostro caso). <code>{}</code> è il segnaposto che contiene l'elenco dei file ottenuti &nbsp;dalla ricerca sui quali eseguire il comando. Infine passiamo il separatore <code>;</code>. Visto che non vogliamo che la shell interpreti il punto e virgola lo facciamo precedere dalla sequenza di escape <code>\</code>.</p><p>Questo script che condivido è molto utile per archiviare ed eliminare i log.</p><h2 id="riepilogo"><strong>Riepilogo</strong></h2><p>In questo articolo, abbiamo esaminato in dettaglio il comando <code>find</code> e imparato come cercare i file per nome, tipo, dimensione e data di modifica.</p><p>Mi auguro che tu abbia trovato utile questo tutorial.</p><p>Dimmi cosa ne pensi su <a href="https://twitter.com/hira_zaira">Twitter</a>!</p><p>Puoi leggere i miei altri post <a href="https://www.freecodecamp.org/news/author/zaira/">qui</a>.</p><p>Risorse: Immagine del banner da <a href="https://storyset.com/office">Office illustrations by Storyset</a> e Canva.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come Automatizzare Attività in Linux con i Job di cron ]]>
                </title>
                <description>
                    <![CDATA[ Se ti occupi di tecnologia dell'informazione, potresti avere bisogno di pianificare diverse attività ripetitive come parte dei tuoi processi di automazione. Per esempio potresti pianificare una certa attività in modo che sia eseguita periodicamente a uno specifico orario del giorno. Questo è utile per eseguire backup giornalieri, archiviazione mensile dei ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-automatizzare-attivita-in-linux-con-i-job-di-cron/</link>
                <guid isPermaLink="false">63ca6cae0fb58706fd715c59</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Roberto Pauletto ]]>
                </dc:creator>
                <pubDate>Sat, 28 Jan 2023 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/01/automatizzare-attivita-con-i-job-di-cron-in-linux.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/cron-jobs-in-linux/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Automate Tasks with cron Jobs in Linux</a>
      </p><p>Se ti occupi di tecnologia dell'informazione, potresti avere bisogno di pianificare diverse attività ripetitive come parte dei tuoi processi di automazione.</p><p>Per esempio potresti pianificare una certa attività in modo che sia eseguita periodicamente a uno specifico orario del giorno. Questo è utile per eseguire backup giornalieri, archiviazione mensile dei log, eliminazione settimanale di file per creare spazio e così via.</p><p>Se Linux è il tuo sistema operativo, userai quello che viene chiamato "cron job" per pianificare un'attività.</p><h2 id="cos-cron"><strong>Cos'è<strong> cron?</strong></strong></h2><p>Cron è una utilità di pianificazione di attività presente nei sistemi tipo Unix. Il demone crond abilita le funzionalità e viene eseguito in background. Cron legge la <strong>crontab</strong> (tabella di cron) per eseguire script predefiniti.</p><p>Con l'utilizzo di una sintassi specifica puoi configurare un cron job per pianificare degli script o altri comandi affinché vengano eseguiti automaticamente.</p><p>Per ciascun utente, il servizio cron verifica il file <code><strong>/var/spool/cron/crontabs/&lt;username&gt;</strong></code></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/01/cronusers.png" class="kg-image" alt="Content of /var/spool/cron/crontabs " srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/01/cronusers.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/01/cronusers.png 957w" sizes="(min-width: 720px) 720px" width="957" height="344" loading="lazy"><figcaption>Contenuto della directory /var/spool/cron/crontabs</figcaption></figure><h3 id="cosa-sono-i-cron-job-in-linux"><strong>Cosa sono i cron job in<strong> Linux?</strong></strong></h3><p>Qualsiasi attività che tu pianifichi tramite cron viene detta cron job. I cron job ci aiutano ad automatizzare le nostre attività di routine, siano esse orarie, giornaliere, mensili o annuali.</p><p>Vediamo come funzionano i cron job.</p><h2 id="come-controllare-l-accesso-a-cron"><strong>Come controllare l'accesso a <strong>cron</strong></strong></h2><p>Per usare i cron job, un amministratore deve fare in modo che essi possano essere aggiunti per gli utenti nel file <code>/etc/cron.allow</code>.</p><p>Se esegui il comando <code>crontab -e</code> e ottieni un prompt tipo il seguente, vuol dire che non hai i permessi per usare cron.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/11/image-51.png" class="kg-image" alt="Cron job addition denied for user John." width="600" height="400" loading="lazy"><figcaption>Aggiunta di cron job negata per l'utente john.</figcaption></figure><p>Per fare in modo che l'utente con username john possa usare cron, occorre includere il suo username nel file <code>/etc/cron.allow</code>. Questo farà sì che l'utente possa creare e modificare i cron job.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/11/image-52.png" class="kg-image" alt="Allowing John in file cron.allow" width="600" height="400" loading="lazy"><figcaption>Aggiungere l'username john al file cron.allow</figcaption></figure><p>È anche possibile impedire agli utenti l'accesso ai cron job inserendo i loro username nel file <code>/etc/cron.d/cron.deny</code>.</p><h2 id="come-aggiungere-cron-job-in-linux"><strong>Come aggiungere cron job <strong>in Linux</strong></strong></h2><p>Innanzitutto, per usare i cron job, devi verificare lo stato del servizio cron. Se cron non è installato, puoi scaricarlo facilmente tramite il gestore di pacchetti della tua distribuzione. Usa questo comando per verificare:</p><pre><code class="language-bash"># Verifica del servizio cron su sistema Linux
sudo systemctl status cron.service</code></pre><h3 id="sintassi-di-crontab"><strong>Sintassi di <code>crontab</code><strong> </strong></strong></h3><p>Si utilizza il comando <code>crontab</code> per gestire i cron job con le seguenti opzioni:</p><ul><li><code><strong><strong><strong><strong>crontab -e</strong></strong></strong></strong></code>: consente di aggiungere, modificare, cancellare i cron job in tabella.</li><li><code><strong><strong><strong><strong>crontab -l</strong></strong></strong></strong></code>: elenca i cron job dell'utente corrente.</li><li><code><strong><strong>crontab -u username -l</strong></strong></code>:<strong><strong> </strong></strong>elenca i cron job dell'utente <code>username</code> (necessario essere <code>root</code>).</li><li><code><strong><strong>crontab -u username -e</strong></strong></code>: modifica i cron job dell'utente <code>username</code> (necessario essere <code>root</code>).</li></ul><p>Quando elenchi i cron job vedrai qualcosa di simile:</p><pre><code class="language-bash"># Cron job example
* * * * * sh /path/to/script.sh</code></pre><p>Nell'esempio qui sopra:</p><ul><li>gli asterischi <code>* * * * *</code> rappresentano rispettivamente minuto(i), ora(e), giorno(i), mese(i), giorno(i) della settimana.</li></ul><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th></th>
<th>VALORE</th>
<th>DESCRIZIONE</th>
</tr>
</thead>
<tbody>
<tr>
<td>Minuti</td>
<td>0-59</td>
<td>Il comando sarà eseguito al minuto specificato.</td>
</tr>
<tr>
<td>Ore</td>
<td>0-23</td>
<td>Il comando sarà eseguito all'ora specificata.</td>
</tr>
<tr>
<td>Giorni</td>
<td>1-31</td>
<td>Il comando sarà eseguito in questi giorni di ogni mese.</td>
</tr>
<tr>
<td>Mesi</td>
<td>1-12</td>
<td>I mesi nei quali saranno eseguite le attività.</td>
</tr>
<tr>
<td>Giorni della settimana</td>
<td>0-6</td>
<td>Giorni della settimana nei quali sarà eseguita l'attività. Qui 0 è domenica</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><ul><li><code>sh</code> indica che si tratta di uno script bash e dovrebbe esser eseguito da <code>/bin/bash</code>.</li><li><code>/path/to/script.sh</code> specifica il percorso dello script.</li></ul><p>Di seguito un riassunto della sintassi di un cron job.</p><pre><code class="language-bash">*   *   *   *   *  sh /percorso/allo/script/script.sh
|   |   |   |   |              |
|   |   |   |   |      Comando o Script da Eseguire
|   |   |   |   |
|   |   |   |   |
|   |   |   |   |
|   |   |   | Giorno della settimana (0-6)
|   |   |   |
|   |   | Mese dell'anno(1-12)
|   |   |
|   | Giorno del mese(1-31)  
|   |
| Ora(0-23)  
|
Minuto(0-59)</code></pre><h2 id="esempi-di-cron-job"><strong>Esempi di c<strong>ron job</strong></strong></h2><p>Ecco alcuni esempi di pianificazione di cron job.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>PIANIFICAZIONE</th>
<th>VALORE PIANIFICATO</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>5 0 * 8 *</code></td>
<td>Alle 00:05 in Agosto.</td>
</tr>
<tr>
<td><code>5 4 * * 6</code></td>
<td>Alle 04:05 di Sabato.</td>
</tr>
<tr>
<td><code>0 22 * * 1-5</code></td>
<td>Alle 22:00 di ogni giorno della settimana, da lunedì a venerdì.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Va bene se non riesci ad afferrare questo tutto in una volta. Puoi esercitarti e generare job pianificati con <a href="https://crontab.guru/">crontab guru</a>, un sito che offre un editor semplificato per generare cron job.</p><h3 id="come-impostare-un-cron-job"><strong>Come impostare un<strong> cron job</strong></strong></h3><p>In questa sezione daremo un'occhiata a un esempio di come pianificare un semplice script con un cron job.</p><ol><li>Crea uno script chiamato <code>date-script.sh</code> che stampa la data e l'ora di sistema e la accoda a un file. Il contenuto dello script è il seguente:</li></ol><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/11/image-67.png" class="kg-image" alt="Script for printing date." width="600" height="400" loading="lazy"><figcaption>Script per accodare data e ora di sistema a un file.</figcaption></figure><p>2. &nbsp;Rendi lo script eseguibile dandogli i permessi di esecuzione:</p><pre><code class="language-bash">chmod 775 date-script.sh</code></pre><p>3. &nbsp;Aggiungi lo script alla tabella di crontab usando <code>crontab -e</code>.</p><p>In questo caso lo abbiamo pianificato per essere eseguito ogni minuto.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/11/image-68.png" class="kg-image" alt="Adding a cron job in crontab every minute." width="600" height="400" loading="lazy"><figcaption>Aggiungere un cron job in crontab per un'esecuzione ogni minuto.</figcaption></figure><p>4. &nbsp;Verifica il contenuto del file <code>date-out.txt</code>. In base allo script, la data di sistema dovrebbe essere scritta nel file ogni minuto.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/01/cron-job-output-1.png" class="kg-image" alt="Output of our cron job." srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/01/cron-job-output-1.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/01/cron-job-output-1.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/01/cron-job-output-1.png 1252w" sizes="(min-width: 720px) 720px" width="1252" height="322" loading="lazy"><figcaption>Il risultato del nostro cron job</figcaption></figure><h2 id="come-risolvere-i-problemi-con-i-cron-job"><strong>Come risolvere i problemi con i cron job</strong></h2><p>I cron job sono davvero utili, ma potrebbero non funzionare sempre come previsto. Per fortuna ci sono metodi efficaci che puoi usare per risolvere eventuali problemi.</p><ol><li><strong>Verifica la pianificazione</strong></li></ol><p>Per prima cosa cerca di verificare la pianificazione impostata per il cron job. Puoi farlo verificando la sintassi che hai visto nelle sezioni precedenti.</p><p>2.<strong><strong> </strong>Verifica i log di cron</strong></p><p>Dovresti innanzitutto verificare se il cron job è stato eseguito all'orario prestabilito oppure no. Puoi farlo consultando il file di log <code>var/log/cron</code>, oppure <code>/var/log/syslog</code>, a seconda della distribuzione di Linux, dove sono registrate, tra l'altro, le esecuzioni dei comandi dei cron job.</p><p>Se esiste una voce in questo log all'orario corretto, vuol dire che il cron job è stato eseguito come pianificato.</p><p>Di seguito, dei log relativi al nostro esempio di cron job. Nota la prima colonna che mostra la marca temporale. Il percorso dello script è registrato alla fine della riga.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/11/image-69.png" class="kg-image" alt="Cron job logs" width="600" height="400" loading="lazy"><figcaption>Stampa del log con i cron job evidenziati.</figcaption></figure><p><strong><strong>3. </strong>Dirottare il risultato del comando di un cron job a un file</strong></p><p>Puoi dirottare il risultato del comando di un cron job in un file e verificare questo file per possibili errori.</p><pre><code class="language-bash"># Dirotta il risultato del comando eseguito dal cron job a un file
* * * * * sh /path/to/script.sh &amp;&gt; log_file.log</code></pre><h2 id="riepilogo"><strong>Riepilogo</strong></h2><p>L'automazione delle attività tramite i cron job riduce il lavoro ripetitivo che devi fare. Consente anche alle macchine di curare se stesse e lavorare 24 ora su 24 senza l'intervento umano.</p><p>L'automazione in Linux si affida pesantemente ai cron job, quindi dovresti sicuramente imparare a gestirli e sperimentare con essi.</p><p>Grazie per avere letto fino in fondo. Un feedback è sempre bene accetto.</p><p>Se hai trovato utile questo articolo, condividilo con i tuoi amici.</p><p>Connettiamoci su <a href="https://twitter.com/hira_zaira">Twitter</a>!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Shell Scripting per Principianti – Come Scrivere Script Bash in Linux ]]>
                </title>
                <description>
                    <![CDATA[ Lo Shell scripting è una parte importante del processo di automazione in Linux. Lo scripting ti aiuta a scrivere sequenze di comandi in un file, per poi eseguirli. Questo ti fa risparmiare tempo, in quanto non devi scrivere tutte le volte certi comandi. Puoi eseguire attività giornaliere con efficienza e ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/shell-scripting-per-principianti/</link>
                <guid isPermaLink="false">63bee0880a4f0206bd4656ef</guid>
                
                    <category>
                        <![CDATA[ Bash ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Roberto Pauletto ]]>
                </dc:creator>
                <pubDate>Fri, 20 Jan 2023 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-post-image.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/shell-scripting-crash-course-how-to-write-bash-scripts-in-linux/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Shell Scripting for Beginners – How to Write Bash Scripts in Linux</a>
      </p><p>Lo Shell scripting è una parte importante del processo di automazione in Linux. Lo scripting ti aiuta a scrivere sequenze di comandi in un file, per poi eseguirli.</p><p>Questo ti fa risparmiare tempo, in quanto non devi scrivere tutte le volte certi comandi. Puoi eseguire attività giornaliere con efficienza e anche pianificarle per una esecuzione automatica.</p><p>Puoi anche impostare certi script per essere eseguiti all'avvio come ad esempio mostrare un particolare messaggio quando si lancia una nuova sessione oppure impostare determinate variabili di ambiente.</p><p>Le applicazioni e gli utilizzi dello scripting sono numerosi, quindi iniziamo subito.</p><p>In questo articolo imparerai:</p><ol><li>Cos'è una shell bash.</li><li>Cos'è uno script bash e come identificarlo.</li><li>Come creare ed eseguire il tuo primo script bash.</li><li>La sintassi base dello shell scripting.</li><li>Come scoprire gli script pianificati in un sistema.</li><li>Come automatizzare gli script pianificandoli tramite job di cron.</li></ol><p>Il modo migliore per apprendere è l'esercizio. Ti consiglio vivamente di seguire gli esempi dell'articolo usando &nbsp;<a href="https://replit.com/~">Replit</a>. Puoi avere accesso a una shell di Linux in esecuzione nel giro di minuti.</p><h2 id="introduzione-alla-shell-bash"><strong>Introduzione alla Shell Bash</strong></h2><p>La riga di comando di Linux è fornita da un programma chiamato shell. Nel corso degli anni, questo programma si è evoluto per soddisfare diverse esigenze.</p><p>Utenti diversi possono essere configurati per utilizzare shell diverse. Tuttavia la maggior parte degli utenti preferisce rimanere con la shell predefinita, che per molte distribuzioni Linux è la GNU Bourne-Again Shell (bash). Bash ha sostituito la Bourne shell (sh).</p><p>Quando la shell viene lanciata, utilizza uno script di partenza che si trova nel file <code>.bashrc</code> o nel file <code>.bash_profile</code> nella tua directory home, che ti consente di personalizzare il comportamento della shell.</p><p>Quando una shell è usata in modo interattivo, viene mostrato il simbolo <code>$</code> quando è in attesa di un comando dall'utente. Questo è chiamato prompt della shell.</p><p><code>[username@host ~]$</code></p><p>Se la shell viene eseguita dall'utente come root, il prompt viene modificato in &nbsp;<code>#</code>. Il prompt della shell del superuser assomiglia a questo:</p><p><code>[root@host ~]#</code></p><p>Bash è molto potente e può semplificare alcune operazioni che sono difficilmente realizzabili con una GUI (Interfaccia Utente Grafica). Ricorda che molti server non hanno una GUI, ed è meglio imparare a usare la potenza di una interfaccia da riga di comando (CLI).</p><h2 id="cos-uno-script-bash"><strong>Cos'è uno Script Bash</strong></h2><p>Uno script bash è una serie di comandi scritti in un file, che vengono letti ed eseguiti dal programma bash, riga per riga.</p><p>Per esempio, puoi portarti in un certo percorso, creare una cartella e generare un processo al suo interno usando la riga di comando.</p><p>Puoi eseguire la stessa sequenza di passi salvando i comandi in uno script bash, quindi eseguendolo. Non ci sono limiti al numero di volte nelle quali puoi eseguire lo script.</p><h2 id="come-identificare-uno-script-bash"><strong>Come Identificare uno Script Bash</strong></h2><h3 id="estensione-file-sh-"><strong>Estensione file <code>.sh</code>.</strong></h3><p>Per convenzione di denominazione, gli script bash hanno un'estensione <code>.sh</code>. Tuttavia gli script bash possono essere eseguiti senza problemi anche senza l'estensione <code>sh</code>.</p><h3 id="script-che-iniziano-con-bash-bang-"><strong>Script che iniziano con bash bang.</strong></h3><p>Gli script sono anche identificati con uno <code>shebang</code> al loro interno. Shebang è la combinazione dei termini inglesi <code>bash #</code> e <code>bang !</code> seguito dal percorso della shell bash. Questa è la prima riga dello script. Shebang dice alla shell di eseguire lo script tramite la shell bash. Shebang è semplicemente il percorso assoluto all'interprete bash.</p><p>Di seguito un esempio di una istruzione shebang.</p><pre><code class="language-bash">#! /bin/bash</code></pre><p>Il percorso del programma bash può variare. Vedremo in seguito come identificarlo.</p><h3 id="permessi-di-esecuzione"><strong>Permessi di esecuzione</strong></h3><p>Gli script hanno permessi di esecuzione per l'utente che li esegue.</p><p>Un permesso di esecuzione è rappresentato da una <code>x</code>. Nell'esempio che segue l'utente "zaira" ha permessi di lettura, scrittura, esecuzione (<code>rwx</code> ) per il file <code>test_script.sh</code></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/03/image-98.png" class="kg-image" alt="image-98" width="600" height="400" loading="lazy"></figure><h3 id="colorazione-del-file"><strong>Colorazione del file</strong></h3><p>Nella maggior parte delle shell delle distribuzioni Linux, gli script eseguibili appaiono in colori diversi rispetto al resto di file e cartelle.</p><p>Nel mio caso gli script con privilegi di esecuzione appaiono di colore verde.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/03/image-99.png" class="kg-image" alt="image-99" width="600" height="400" loading="lazy"></figure><h2 id="come-creare-il-tuo-primo-script-bash"><strong>Come Creare il Tuo Primo Script Bash</strong></h2><p>Creiamo un semplice script in bash che stampa <code>Hello World</code>.</p><h3 id="crea-un-file-chiamato-hello_world-sh"><strong>Crea un file chiamato hello_world.sh</strong></h3><pre><code class="language-bash">touch hello_world.sh</code></pre><h3 id="trova-il-percorso-della-tua-shell-bash"><strong>Trova il percorso della tua shell bash</strong></h3><pre><code class="language-bash">which bash</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/03/image-100.png" class="kg-image" alt="image-100" width="600" height="400" loading="lazy"></figure><p>Nel mio caso il percorso è &nbsp;<code>/usr/bin/bash</code>, che includerò nello shebang.</p><h3 id="scrivi-il-comando"><strong>Scrivi il comando</strong></h3><p>Stamperemo con il comando <code>echo</code> "hello world" alla console.</p><p>Il nostro script è il seguente:</p><pre><code class="language-bash">#! usr/bin/bash
echo "Hello World"</code></pre><p>Modifica il file <code>hello_world.sh</code> usando un editor testo di tua scelta e aggiungi le righe qui sopra.</p><h3 id="fornisci-permessi-di-esecuzione-al-tuo-utente"><strong>Fornisci permessi di esecuzione al tuo utente</strong></h3><p>Modifica i permessi del file per consentire l'esecuzione dello script tramite il comando seguente:</p><pre><code class="language-bash">chmod u+x hello_world.sh</code></pre><p><code>chmod</code> modifica i permessi esistenti di un file per un dato utente. Stiamo aggiungendo <code>+x</code> all'utente che è proprietario del file (<code>u</code>).</p><h3 id="eseguire-lo-script"><strong>Eseguire lo script</strong></h3><p>Puoi eseguire lo script nei seguenti modi:</p><p><code>./hello_world.sh</code> (se il file ha permessi di esecuzione)</p><p><code>bash hello_world.sh</code> (non è necessario che il file abbia permessi di esecuzione)</p><p><strong>Ecco il risultato<strong>:</strong></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/03/image-160.png" class="kg-image" alt="Two ways to run scripts" width="600" height="400" loading="lazy"><figcaption>Due modi di eseguire uno script</figcaption></figure><h2 id="la-sintassi-base-dello-scripting-bash"><strong>La Sintassi Base dello Scripting Bash</strong></h2><p>Proprio come ogni altro linguaggio di programmazione, lo scripting bash segue un insieme di regole per creare programmi che possono essere compresi dal computer. In questa sezione, studieremo la sintassi dello scripting bash.</p><h3 id="come-definire-variabili"><strong>Come definire variabili</strong></h3><p>Possiamo definire una variabile usando la sintassi <code>nome_variabile=valore</code>. Per ottenere il valore di una variabile aggiungi <code>$</code> davanti al nome della stessa.</p><pre><code class="language-bash">#!/bin/bash
# Un semplice esempio di variabili
saluto=Ciao
nome=Tux
echo $saluto $nome
</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_1-1.png" class="kg-image" alt="image-104" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/01/shell-scripting-crash-course-ex_1-1.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_1-1.png 780w" width="780" height="251" loading="lazy"></figure><p>Tux è &nbsp;il nome della mascotte di Linux, il pinguino.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/03/image-119.png" class="kg-image" alt="Hi, I am Tux." width="600" height="400" loading="lazy"><figcaption>Ciao, sono Tux.</figcaption></figure><h3 id="espressioni-aritmetiche"><strong>Espressioni Aritmetiche</strong></h3><p>Sotto sono indicati gli operatori supportati da bash per le operazioni di calcolo matematico:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>OPERATORE</th>
<th>UTILIZZO</th>
</tr>
</thead>
<tbody>
<tr>
<td>+</td>
<td>addizione</td>
</tr>
<tr>
<td>-</td>
<td>sottrazione</td>
</tr>
<tr>
<td>*</td>
<td>moltiplicazione</td>
</tr>
<tr>
<td>/</td>
<td>divisione</td>
</tr>
<tr>
<td>**</td>
<td>esponenziale</td>
</tr>
<tr>
<td>%</td>
<td>resto</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Eseguiamo qualche esempio.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/03/image-108.png" class="kg-image" alt="Note the spaces, these are part of the syntax" width="600" height="400" loading="lazy"><figcaption>Nota che gli spazi sono parte della sintassi</figcaption></figure><p>Le espressioni numeriche possono anche essere calcolate e salvate in una variabile usando la sintassi seguente:</p><p><code>variabile=$((espressione))</code></p><p>Proviamo un esempio:</p><pre><code class="language-bash">#!/bin/bash

var=$((3+9))
echo $var
</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_2.png" class="kg-image" alt="image-109" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/01/shell-scripting-crash-course-ex_2.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_2.png 780w" width="780" height="251" loading="lazy"></figure><p>Le frazioni non sono calcolate correttamente utilizzando i metodi di cui sopra e sono troncate.</p><p>Per &nbsp;<strong>calcoli decimali </strong>possiamo usare il comando <code>bc</code> per ottenere il risultato con un determinato numero di cifre decimali. <code>bc</code> (Bash Calculator) è una calcolatrice da riga di comando che supporta calcoli fino a un certo numero di posizioni decimali.</p><p><code>echo "scale=2;22/7" | bc</code></p><p>Dove <code>scale</code> definisce il numero di posizioni decimali richieste nel risultato.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/03/image-110.png" class="kg-image" alt="Getting output to 2 decimal places" width="600" height="400" loading="lazy"><figcaption>Ottenere un risultato con due cifre decimali</figcaption></figure><h3 id="come-leggere-l-input-utente"><strong>Come leggere l'input utente</strong></h3><p>Talvolta occorre acquisire un input utente per eseguire certe operazioni.</p><p>In bash, possiamo ottenere l'input dall'utente con il comando <code>read</code>.</p><pre><code>read nome_variabile</code></pre><p>Per mostrare all'utente un messaggio personalizzato usa l'opzione &nbsp;<code>-p</code>.</p><p><code>read -p "Digita la tua età" nome_variabile</code></p><p><strong><strong>E</strong>sempio<strong>:</strong></strong></p><pre><code class="language-bash">#!/bin/bash

echo "Digita un numero"
read a

echo "Digita un numero"
read b

var=$((a+b))
echo $var
</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_3.png" class="kg-image" alt="image-111" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/01/shell-scripting-crash-course-ex_3.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_3.png 780w" width="780" height="300" loading="lazy"></figure><h3 id="operatori-logici-per-confronti-numerici"><strong>Operatori logici per confronti numerici</strong></h3><p>Il confronto viene usato per verificare se le istruzioni si valutano come vere o false. Possiamo usare gli operatori qui sotto per confrontare due istruzioni:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>OPERAZIONE</th>
<th>SINTASSI</th>
<th>DESCRIZIONE</th>
</tr>
</thead>
<tbody>
<tr>
<td>Uguaglianza</td>
<td>num1 -eq num2</td>
<td>num1 è uguale a num2</td>
</tr>
<tr>
<td>Maggiore di o uguale a</td>
<td>num1 -ge num2</td>
<td>num1 è maggiore di o uguale a num2</td>
</tr>
<tr>
<td>Maggiore di</td>
<td>num1 -gt num2</td>
<td>num1 è maggiore di num2</td>
</tr>
<tr>
<td>Minore di o uguale a</td>
<td>num1 -le num2</td>
<td>num1 è minore di o uguale a num2</td>
</tr>
<tr>
<td>Minore di</td>
<td>num1 -lt num2</td>
<td>num1 è minore di num2</td>
</tr>
<tr>
<td>Non Uguale a</td>
<td>num1 -ne num2</td>
<td>num1 non è uguale a num2</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p><strong><strong>S</strong>i<strong>nta</strong>ssi</strong>:</p><pre><code class="language-bash">if [ condizioni ]
    then
         comandi
fi</code></pre><p><strong><strong>E</strong>se<strong>mp</strong>io</strong>:</p><p>Confrontiamo due numeri e troviamo qual è la loro relazione:</p><pre><code class="language-bash">#!/bin/bash

read x
read y

if [ $x -gt $y ]
then
echo X è maggiore di Y
elif [ $x -lt $y ]
then
echo X è minore di Y
elif [ $x -eq $y ]
then
echo X è uguale a Y
fi</code></pre><p>Output:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_4.png" class="kg-image" alt="image-112" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/01/shell-scripting-crash-course-ex_4.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_4.png 780w" sizes="(min-width: 720px) 720px" width="780" height="393" loading="lazy"></figure><h3 id="istruzioni-condizionali-processo-decisionale-"><strong>Istruzioni Condizionali (Processo Decisionale)</strong></h3><p>Le condizioni sono espressioni che sono valutate come un'espressione booleana. Per verificare la condizione possiamo usare <code>if</code>, <code>if-else</code>, <code>if-elif-else</code>, anche annidati.</p><p>La struttura delle istruzioni condizionali è la seguente:</p><ul><li><code>if...then...fi</code> istruzioni</li><li><code>if...then...else...fi</code> istruzioni</li><li><code>if..elif..else..fi</code></li><li><code>if..then..else..if..then..fi..fi..</code> (condizionali annidati)</li></ul><p><strong><strong>S</strong>i<strong>nta</strong>ssi</strong>:</p><pre><code class="language-bash">if [[ condizione ]]
then
	istruzione
elif [[ condizione ]]; then
	istruzione 
else
	fai questo per default
fi</code></pre><p>Per creare confronti significativi possiamo usare AND <code>-a</code> e OR <code>-o</code>.</p><p>L'istruzione seguente si traduce in: se <code>a</code> è maggior di 40 e <code>b</code> è minore di 6.</p><p><code>if [ $a -gt 40 -a $b -lt 6 ]</code></p><p><strong><strong>E</strong>se<strong>mp</strong>io</strong>: troviamo il tipo di triangolo leggendo le lunghezze dei suoi lati.</p><pre><code class="language-bash">#!/bin/bash

read a
read b
read c

if [ $a == $b -a $b == $c -a $a == $c ]
then
echo EQUILATERO

elif [ $a == $b -o $b == $c -o $a == $c ]
then 
echo ISOSCELE
else
echo SCALENO

fi</code></pre><p><strong>Risultato</strong>:</p><p>Caso di test #1</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_5.png" class="kg-image" alt="image-113" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/01/shell-scripting-crash-course-ex_5.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_5.png 780w" sizes="(min-width: 720px) 720px" width="780" height="430" loading="lazy"></figure><p>Caso di test #2</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_6.png" class="kg-image" alt="image-114" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/01/shell-scripting-crash-course-ex_6.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_6.png 780w" sizes="(min-width: 720px) 720px" width="780" height="430" loading="lazy"></figure><p>Caso di test #3</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_7.png" class="kg-image" alt="image-115" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/01/shell-scripting-crash-course-ex_7.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_7.png 780w" sizes="(min-width: 720px) 720px" width="780" height="430" loading="lazy"></figure><h3 id="cicli"><strong>Cicli</strong></h3><p>I cicli for ti consentono di eseguire istruzioni per uno specifico numero di volte.</p><h4 id="eseguire-cicli-con-i-numeri-"><strong>Eseguire cicli con i numeri:</strong></h4><p>Nell'esempio che segue il ciclo verrà eseguito per 5 volte.</p><pre><code class="language-bash">#!/bin/bash

for i in {1..5}
do
    echo $i
done</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/06/Looping-with-numbers.png" class="kg-image" alt="Looping-with-numbers" width="600" height="400" loading="lazy"></figure><h4 id="eseguire-cicli-con-le-stringhe-"><strong>Eseguire cicli con le stringhe:</strong></h4><p>Possiamo eseguire cicli anche con le stringhe.</p><pre><code class="language-bash">#!/bin/bash

for X in verde bianco rosso  
do
	echo $X
done</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_9.png" class="kg-image" alt="Looping-with-strings" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/01/shell-scripting-crash-course-ex_9.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_9.png 780w" sizes="(min-width: 720px) 720px" width="780" height="247" loading="lazy"></figure><h4 id="cicli-while"><strong>Cicli while</strong></h4><p>I cicli while verificano una condizione ed eseguono il ciclo fino a quando la condizione rimane vera. Occorre fornire un'istruzione che incrementi un contatore per controllare l'esecuzione del ciclo.</p><p>Nell'esempio qui sotto <code>(( i += 1 ))</code> è l'istruzione che gestisce il contatore, che viene incrementato del valore di <code>i</code>.</p><p><strong><strong>E</strong>sempio<strong>:</strong></strong></p><pre><code class="language-bash">#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
   echo "$i"
  (( i += 1 ))
done
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_10.png" class="kg-image" alt="image-153" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/01/shell-scripting-crash-course-ex_10.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_10.png 780w" sizes="(min-width: 720px) 720px" width="780" height="247" loading="lazy"></figure><h3 id="leggere-file"><strong>Leggere file</strong></h3><p>Supponi di avere un file <code>file_di_esempio.txt</code> che contiene quanto segue:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_11-1.png" class="kg-image" alt="image-151" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/01/shell-scripting-crash-course-ex_11-1.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_11-1.png 659w" width="659" height="199" loading="lazy"></figure><p>Possiamo leggere il file riga per riga e stampare il risultato nella console.</p><pre><code class="language-bash">#!/bin/bash

LINE=1

while read -r CURRENT_LINE
	do
		echo "$LINE: $CURRENT_LINE"
    ((LINE++))
done &lt; "file_di_esempio.txt"</code></pre><p><strong>Risultato<strong>:</strong></strong></p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_12.png" class="kg-image" alt="Lines with line number printed" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/01/shell-scripting-crash-course-ex_12.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_12.png 714w" width="714" height="205" loading="lazy"><figcaption>Stampa del numero di riga seguito dal contenuto di ogni riga</figcaption></figure><h3 id="come-eseguire-comandi-racchiusi-tra-caratteri-backtick-accento-grave-"><strong>Come eseguire comandi racchiusi tra caratteri backtick (accento grave)</strong></h3><p>Se devi includere il risultato di un comando complesso nel tuo script, puoi scrivere l'istruzione racchiusa tra caratteri backtick (`)</p><h4 id="sintassi-"><strong>Sintassi:</strong></h4><p>var= ` <code>commandi</code> `</p><p><strong><strong>E</strong>sempio</strong>: supponi di voler ottenere il risultato di un elenco di punti di mount che contengono <code>tmpfs</code> nel loro nome. Possiamo confezionare un'istruzione come questa: <code>df -h | grep tmpfs</code>.</p><p>Per includerla nello script bash e ottenerne il risultato, possiamo racchiuderla tra caratteri backtick.</p><pre><code class="language-bash">#!/bin/bash

var=`df -h | grep tmpfs`
echo $var</code></pre><p>Risultato:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_13.png" class="kg-image" alt="image-118" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/01/shell-scripting-crash-course-ex_13.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_13.png 908w" width="908" height="199" loading="lazy"></figure><h3 id="come-ottenere-argomenti-per-gli-script-da-riga-di-comando"><strong>Come ottenere argomenti per gli script da riga di comando</strong></h3><p>È possibile passare argomenti allo script per l'esecuzione.</p><p><code>$@</code> rappresenta la posizione dei parametri, a partire da uno.</p><pre><code class="language-bash">#!/bin/bash

for x in $@
do
    echo "Il parametro digitato è $x"
done</code></pre><p>Eseguilo in questo modo:</p><p><code>./nome_script arg1 arg2</code></p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_14.png" class="kg-image" alt="image-155" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/01/shell-scripting-crash-course-ex_14.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/01/shell-scripting-crash-course-ex_14.png 908w" width="908" height="199" loading="lazy"></figure><h2 id="come-automatizzare-gli-script-pianificandoli-con-job-di-cron"><strong>Come Automatizzare gli Script Pianificandoli con Job di cron</strong></h2><p>Cron è un'utilità presente nei sistemi Unix che consente di &nbsp;pianificare delle attività (job). Si possono pianificare job per un'esecuzione giornaliera, settimanale, mensile o a un dato momento del giorno. L'automazione in Linux si appoggia pesantemente sui job di cron.</p><p>Di seguito la sintassi per pianificare un job in cron:</p><pre><code class="language-bash"># Esempio di job per Cron
* * * * * sh /percorso/dello/script.sh</code></pre><p>Qui gli asterischi rappresentano rispettivamente il minuto, l'ora, il giorno del mese, il mese, il giorno della settimana.</p><p>Qui sotto alcuni esempi di pianificazione di job.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>PIANIFICAZIONE</th>
<th>DESCRIZIONE</th>
</tr>
</thead>
<tbody>
<tr>
<td>5 0 * 8 *</td>
<td>Alle 00:05 di ogni giorno in agosto</td>
</tr>
<tr>
<td>5 4 * * 6</td>
<td>Alle 04:05 di ogni sabato</td>
</tr>
<tr>
<td>0 22 * * 1-5</td>
<td>Alle 22:00 di ogni giorno della settimana da lunedì a venerdì</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>Puoi avere maggiori informazioni su cron leggendo questa <a href="https://guide.debianizzati.org/index.php/Utilizzo_del_servizio_di_scheduling_Cron">guida</a>.</p><h2 id="come-verificare-script-gi-esistenti-in-un-sistema"><strong>Come Verificare Script Già Esistenti in un Sistema</strong></h2><h3 id="usare-crontab"><strong>Usare crontab</strong></h3><p><code>crontab -l</code> elenca gli script già pianificati per l'utente connesso.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/03/image-103.png" class="kg-image" alt="My scheduled scripts" width="600" height="400" loading="lazy"><figcaption>I miei script programmati</figcaption></figure><h3 id="usare-il-comando-find"><strong>Usare il comando find</strong></h3><p>Il comando <code>find</code> aiuta a localizzare dei file in base a certi modelli. Visto che la maggior parte degli script ha estensione <code>.sh</code>, possiamo usare il comando find per trovare degli script in questo modo:</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">find . -type f -name "*.sh"</code></pre><figcaption>`</figcaption></figure><p>Dove:</p><ul><li><code>.</code> rappresenta la directory corrente, ma puoi modificare il percorso secondo necessità</li><li><code>-type f</code> indica che il tipo di file che stiamo cercando è un file di testo</li><li><code>*.sh</code> dice di trovare corrispondenza con tutti i file il cui nome finisce per <code>.sh</code>.</li></ul><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/03/image-159.png" class="kg-image" alt="image-159" width="600" height="400" loading="lazy"></figure><p>Se vuoi saperne di più circa il comando find puoi consultare <a href="https://www.freecodecamp.org/news/how-to-search-for-files-from-the-linux-command-line/"></a><a href="https://guide.debianizzati.org/index.php/Pagina_principale">questo articolo</a>.</p><h2 id="riepilogo"><strong>Riepilogo</strong></h2><p>In questo tutorial abbiamo imparato le basi dello shell scripting. Abbiamo esaminato esempi e sintassi che possono esserci utili per scrivere programmi.</p><p>Cosa preferisci tra quello che hai imparato in questo tutorial? Fammelo sapere su <a href="https://twitter.com/hira_zaira">Twitter</a>!</p><p>Puoi leggere i miei altri post <a href="https://www.freecodecamp.org/news/author/zaira/">qui</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Il comando Linux SCP – Come trasferire File via SSH da Remoto a Locale e Viceversa ]]>
                </title>
                <description>
                    <![CDATA[ Quando stai lavorando con un computer o qualunque altro dispositivo elettronico che abbia capacità di conservazione dati, potresti avere bisogno di distribuire o condividere informazioni e file in vari modi. Alcuni del file più comunemente condivisi sono file audio, immagine, video, pdf o qualunque altro formato di documento. La maggior ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/il-comando-linux-scp-come-trasferire-file-via-ssh-da-remoto-a-locale/</link>
                <guid isPermaLink="false">6391a143f2fe0506fb9b7568</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Roberto Pauletto ]]>
                </dc:creator>
                <pubDate>Mon, 19 Dec 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/12/uide-to-writting-a-good-readme-file--3-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/scp-linux-command-example-how-to-ssh-file-transfer-from-remote-to-local/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">SCP Linux Command – How to SSH File Transfer from Remote to Local</a>
      </p><p>Quando stai lavorando con un computer o qualunque altro dispositivo elettronico che abbia capacità di conservazione dati, potresti avere bisogno di distribuire o condividere informazioni e file in vari modi.</p><p>Alcuni del file più comunemente condivisi sono file audio, immagine, video, pdf o qualunque altro formato di documento.</p><p>La maggior parte delle volte, l'informazione condivisa sarà privata o confidenziale, ovvero riservata a una specifica persona o gruppo di persone, quindi la protezione dell'informazione è essenziale.</p><p>Quando si tratta di dispositivi come i cellulari, abbiamo app che facilitano il trasferimento di file come xender, appshare e talvolta si utilizza il bluetooth. Quando si parla di computer la situazione non è diversa, abbiamo software e anche siti che facilitano l'operazione.</p><p>Per quanto riguarda la condivisione di dati in sistemi operativi tipo Unix, come Linux, ci sono molteplici comandi tra i quali scegliere per condividere informazioni. Oggi ci concentriamo sul comando <strong><strong><strong><strong>SCP</strong></strong></strong></strong>, che ti consente di condividere file e dati facilmente e in modo sicuro.</p><p>Nel mercato odierno, avere competenze di Linux è essenziale, e ancora più utile se sei un amministratore di sistema. Come tale, la condivisione dei dati costituirà una delle tue attività giornaliere e dovrai assicurarti che i dati condivisi siano sicuri; usando il comando SCP sarai in grado di ottenere tutto questo.</p><p>Prima di partire, iniziamo capendo cos'è SCP, poi impareremo alcuni comandi che si possono usare per trasferire i file.</p><h2 id="cosa-sono-i-comandi-scp"><strong>Cosa sono i comandi SCP?</strong></h2><p>SCP è l'acronimo di Secure Copy Protocol (Protocollo di Copia Sicuro). È una utilità da riga di comando che consente all'utente di copiare in modo sicuro file e directory tra due sistemi, in genere unix o linux.</p><p>Il protocollo assicura che la trasmissione dei file sia criptata per evitare che qualunque malintenzionato possa ottenere informazioni sensibili.</p><p>In parole povere, possiamo dire che SCP costituisce un'opzione più sicura rispetto al comando di copia <code>cp</code>.</p><p>È anche importante notare che SCP usa la codifica con una connessione SSH (Shell Sicura), che fa in modo che i dati trasferiti siano protetti da attacchi.</p><h2 id="sintassi-di-scp"><strong>Sintassi di SCP</strong></h2><p>Proprio come qualunque altro comando usato nel terminale, anche SCP ha un formato da utilizzare affinché l'esecuzione sia positiva. Comprendendo la sintassi, per te sarà facile scrivere i comandi:</p><pre><code class="language-bash">scp [OPZIONI] [[user@]src_host:]file1 [[user@]dest_host:]file2
</code></pre><ul><li><code>scp</code> - Inizializza il comando e assicura che si attivi una shell sicura.</li><li><code>OPZIONI</code> - Concedono diversi permessi a seconda di come sono usate. Alcune delle più comuni sono:</li><li><strong><strong><strong><strong>P</strong></strong></strong> </strong>(maiuscola) - specifica la porta per stabilire la connessione via host remoto.</li><li><strong><strong><strong><strong>p</strong></strong></strong> </strong>(minuscola) - mantiene la marca temporale per facilitare modifica e accesso.</li><li><strong><strong><strong><strong>r</strong></strong></strong></strong> - copia una intera directory ricorsivamente.</li><li><strong><strong><strong><strong>q</strong></strong></strong></strong> - copia i file in modalità silenziosa, non mostra i messaggi di avanzamento.</li><li><strong><strong><strong><strong>C</strong></strong></strong></strong> - per la compressione dei dati durante la trasmissione.</li></ul><p>Per ulteriori informazioni sulle opzioni del comando leggi &nbsp;la <a href="https://linux.die.net/man/1/scp">pagina di manuale con le opzioni complete per scp</a> (in lingua inglese)</p><ul><li><code>src_host</code> - dove si trova il file da copiare. La sorgente può essere sia un client che un server a seconda dell'origine del file.</li><li><code>dest_host</code> - dove verrà copiato il file.</li></ul><p>Visto che stiamo avendo a che fare con trasmissioni di file, significa che avremo coinvolta più di una macchina per rendere possibile il processo. Possiamo usare SCP nei casi seguenti:</p><ul><li>Copiare file nella stessa macchina.</li><li>Copiare file da un host locale a un host remoto e viceversa.</li><li>Copiare file tra server remoti diversi.</li></ul><p>A questo punto è giusto affermare che prima di usare un qualsiasi comando SCP devi avere sistemato alcune cose:</p><ul><li>SSH installato sulle macchine server e client.</li><li>Accesso root sulle macchine server e client.</li></ul><p>Con queste due cose a posto, puoi partire. Iniziamo vedendo i comandi in azione.</p><h2 id="comuni-utilizzi-di-scp"><strong>Comuni Utilizzi di SCP</strong></h2><h3 id="copiare-file-da-host-locale-a-server-remoto"><strong>Copiare File da Host Locale a Server Remoto</strong></h3><p>Quando si copiano file, essere in grado di trasferire file/dati da locale verso un server remoto è essenziale. Quando usi il comando SCP dovrai specificare alcune cose affinché possa funzionare.</p><p>Dovrai specificare il percorso del file da copiare oltre al percorso dell'host remoto, dove il file sarà copiato.</p><p>Esaminiamo uno scenario nel quale abbiamo il file <code>test.txt</code> e abbiamo bisogno di farne una copia su un server remoto, la sintassi del nostro comando sarà la seguente:</p><pre><code>scp test.txt userbravo@destination:/location2
</code></pre><p>Non abbiamo limiti rispetto al numero di file che possiamo copiare. Supponiamo di avere sul nostro desktop una cartella chiamata <code>web</code> dove abbiamo dei file con estensione <code>.php</code> che dobbiamo copiare nella directory home di un server remoto. Una volta posizionati nella cartella <code>web</code>, il nostro comando sarà:</p><pre><code>scp *.php userbravo@destination_host:/~/
</code></pre><p><strong><strong><strong><strong>*.php</strong></strong></strong></strong> - copia tutti i file della directory corrente con estensione .php nella cartella specificata:<br><strong><strong><strong><strong>/~/</strong></strong></strong></strong> - significa copiali nella directory <code>home</code>.</p><p>Diciamo che vuoi copiare un file chiamato <code>test.txt</code> su un server remoto salvandolo con un nome diverso, in questo caso specificando anche la porta usata da SSH per la trasmissione, il comando sarà:</p><pre><code>scp -P 8080 test.txt userbravo@host_destinazione:/user/home/test2.txt
</code></pre><p>In questo esempio abbiamo copiato il file <code>test.txt</code> dalla macchina locale a quella remota, dove sarà salvato con il nome <code>test2.txt</code>, utilizzando la porta 8080.</p><h3 id="copiare-file-da-remoto-a-locale"><strong>Copiare File da Remoto a Locale</strong></h3><p>Usiamo un esempio per comprendere meglio questo caso. Abbiamo una situazione in cui vogliamo copiare dei file dal sistema remoto. Per copiare i file prima devi chiamare SCP, seguito da username@indirizzoIP (o nome host) del server remoto, e poi dal percorso dei file da trasferire, preceduto dal simbolo <code>:</code>.</p><p>Se non specifichi il percorso, viene considerata come default la directory home dell'utente remoto specificato, poi segue l'indicazione del percorso verso il quale si vuole salvare il file localmente.</p><p><strong>La Sintassi</strong></p><pre><code>scp &lt;username_remoto&gt;@&lt;IPoNomeHost&gt;:&lt;PercorsoAlFileRemoto&gt;   &lt;PosizioneFileSuLocale&gt; 
</code></pre><p>Diciamo che voglio copiare un file chiamato <code>linuxcheatsheet</code> da un dispositivo remoto il cui indirizzo IP è <em><em>192.168.1.100</em></em>.</p><p>Il file <code>linuxcheatsheet</code> è conservato nella directory home dell'utente <code>lary</code> con il quale sono autenticato nella macchina remota. Pertanto, dopo i due punti, non ho bisogno di specificare il percorso in quanto corrisponde a quello predefinito, vale a dire la directory home, e digito semplicemente il nome del file (“linuxcheatsheet”). Di seguito, specifico la directory corrente della macchina locale come posizione nel quale salvare il file identificandola con un puntino.</p><pre><code>scp lary@192.168.1.100:linuxcheatsheet .
</code></pre><h3 id="copiare-file-tra-host-remoti"><strong>Copiare File tra Host Remoti</strong></h3><p>Il bello di usare SCP per trasferire i file è che non solo consente connessioni tra macchine locali e remote, ma anche tra server remoti.</p><p>Diciamo che vogliamo copiare un file chiamato <code>test.txt</code> da un host remoto verso un altro host remoto. La sintassi del comando sarà questa:</p><pre><code>scp user1@host1.com:/files/test.txt user2@host2.com:/files
</code></pre><p>Ciò che farà questo comando è copiare <code>test.txt</code> dalla cartella <code>files</code> dell'utente <code>user1</code> dall'host remoto <code>host1.com</code> verso l'host remoto <code>host2.com</code> nella cartella <code>files</code> dell'utente <code>user2</code>.</p><h3 id="copiare-pi-file"><strong>Copiare più File</strong></h3><p>Quando si copiano più file da locale a remoto, tutto quello che devi fare è specificare il loro percorso come sorgente. </p><p><strong>La Sintassi</strong></p><pre><code>scp file1 file2 ... user@&lt;nome_host&gt;:Destinazione
</code></pre><p>Se volessimo copiare i file <code>file1.txt</code>, <code>file2.txt</code>, <code>file3.txt</code> e <code>file4.txt</code> dalla directory locale corrente verso l'host remoto <code>host1.com</code> nella directory <code>Desktop</code> dell'utente <code>user1</code> il comando sarà il seguente:</p><pre><code>scp file1.txt file2.txt file3.txt file4.txt user1@host1.com:/home/user1/Desktop
</code></pre><h2 id="punti-da-ricordare-"><strong>Punti da Ricordare:</strong></h2><ul><li>Per poter copiare i file devi avere il permesso di lettura sulla sorgente e di scrittura sulla destinazione.</li><li>Il comando SCP si affida a <a href="https://it.wikipedia.org/wiki/Secure_Shell">SSH</a> per il trasferimento sicuro dei dati, il che vuol dire che è necessaria una password per autenticarsi nel sistema remoto (oppure avere configurato SSH in modo che accetti <a href="https://it.wikipedia.org/wiki/Secure_Shell#Autenticazione_via_chiave_pubblica">connessioni con chiavi</a>).</li><li>Attento quando copi file che hanno stesso nome e percorso di sorgente e destinazione, visto che SCP li sovrascrive se esistono già, senza avvertimento.</li><li>Per separare il nome dell'host remoto dal percorso del file usa i due punti <strong><strong><strong><strong>:</strong></strong></strong></strong>.</li></ul><h2 id="riepilogo"><strong>Riepilogo</strong></h2><p>Che tu sia un ingegnere di supporto, un amministratore di sistema o anche uno sviluppatore in crescita come me, che usa Linux e vuole imparare questo sistema operativo, è probabile che a un certo punto dovrai trasferire file. E conoscere questi semplici comandi SCP ti tornerà utile.</p><p>In questo articolo, abbiamo trattato alcuni degli scenari più comuni in cui puoi utilizzare SCP, spero che tu abbia imparato qualcosa di nuovo.</p><p>Buona Programmazione ❤</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Il comando cp di Linux – Come copiare file su Linux ]]>
                </title>
                <description>
                    <![CDATA[ Esistono un paio di modi per copiare e incollare del contenuto quando stai lavorando al computer. Se passi più tempo sull'interfaccia del tuo dispositivo, probabilmente usi il mouse per farlo. Puoi copiare i file facendo click con il tasto destro e selezionando "Copia" e poi andando in un'altra cartella e ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/il-comando-cp-di-linux-come-copiare-file-su-linux/</link>
                <guid isPermaLink="false">63528cdcfd2ade062092978f</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Dario Di Cillo ]]>
                </dc:creator>
                <pubDate>Fri, 28 Oct 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/10/linux-cp-command.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/the-linux-cp-command-how-to-copy-files-in-linux/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The Linux cp Command – How to Copy Files in Linux</a>
      </p><p>Esistono un paio di modi per copiare e incollare del contenuto quando stai lavorando al computer.</p><p>Se passi più tempo sull'interfaccia del tuo dispositivo, probabilmente usi il mouse per farlo. Puoi copiare i file facendo click con il tasto destro e selezionando "Copia" e poi andando in un'altra cartella e selezionando "Incolla".</p><p>Per gli amici del terminale, è possibile eseguire un'operazione copia e incolla anche senza lasciare il terminale. In un terminale basato su Linux, puoi farlo usando il comando <code>cp</code>.</p><p>In questo articolo, spiegherò cos'è il comando <code>cp</code> e come puoi copiare e incollare file e cartelle usando direttamente il terminale su Linux.</p><h2 id="cos-il-comando-cp"><strong>Cos'è il comando <code>cp</code>?</strong></h2><p>Puoi usare il comando <code>cp</code> per copiare file da una posizione a un'altra. Questo comando può anche copiare delle cartelle.</p><p>La sintassi del comando è:</p><pre><code class="language-bash">cp [...file/directory-sorgente] [destinazione]
</code></pre><p><code>[file/directory-sorgente]</code> specifica la sorgente del file o della cartella che vuoi copiare. E l'argomento <code>[destinazione]</code> specifica la posizione in cui vuoi che il file sia copiato.</p><p>Per il resto di questo articolo, utilizzerò la seguente struttura di cartelle di esempio. Diciamo che una cartella chiamata <strong><strong>DirectoryA</strong></strong> ha due cartelle al suo interno: <strong><strong>DirectoryA_1</strong></strong> e <strong><strong>DirectoryA_2</strong></strong>. Queste sotto-cartelle hanno molti file e sotto-cartelle al loro interno.</p><p>Assumerò che nel terminale siamo attualmente nella posizione di <strong><strong>DirectoryA</strong>,</strong> quindi assicurati di trovarti anche tu in questa posizione:</p><pre><code class="language-bash">cd DirectoryA
</code></pre><h2 id="come-copiare-file-con-il-comando-cp"><strong>Come copiare file con il comando <code>cp</code></strong></h2><p>Se vuoi copiare il file <strong><strong>README.txt</strong></strong> da <strong><strong>DirectoryA_1</strong></strong> in <strong><strong>DirectoryA_2</strong></strong>, puoi usare il comando <code>cp</code> in questo modo:</p><pre><code class="language-bash">cp ./DirectoryA_1/README.txt ./DirectoryA_2
# ./DirectoryA_1/README.txt è il file sorgente
# ./DirectoryA_2 è la destinazione
</code></pre><p>Se vuoi copiare più di un file da <strong><strong>DirectoryA_1</strong></strong> in <strong><strong>DirectoryA_2</strong></strong>, puoi usare il comando <code>cp</code> in questo modo:</p><pre><code class="language-bash">cp ./DirectoryA_1/README.txt ./DirectoryA_1/ANOTHER_FILE.txt ./DirectoryA_2
</code></pre><p>Come puoi vedere, mettiamo tutti i file sorgente all'inizio e l'ultimo argomento sarà la destinazione.</p><h2 id="come-copiare-delle-cartelle-con-il-comando-cp"><strong>Come copiare delle cartelle con il comando <code>cp</code></strong></h2><p>Di default, il comando <code>cp</code> funziona con i file. Quindi se tenti di copiare una cartella in questo modo:</p><pre><code class="language-bash">cp ./DirectoryA_1/Folder/ ./DirectoryA_2
</code></pre><p>Otterrai un errore che ti comunica:</p><p><strong><strong>./DirectoryA_1/Folder/ is a directory</strong></strong></p><p>Per copiare delle cartelle, devi passare il flag <code>-r</code>, che informa il comando <code>cp</code> di copiare ricorsivamente una cartella e il suo contenuto (che può essere costituito da file o altre sotto-cartelle). Quindi puoi aggiungere al precedente comando il flag prima della cartella sorgente, in questo modo:</p><pre><code class="language-bash">cp -r ./DirectoryA_1/Folder/ ./DirectoryA_2
</code></pre><p>Questo comando copierà ricorsivamente la cartella <strong><strong>Folder</strong></strong> in <strong><strong>./DirectoryA_1/</strong></strong> così come tutti i file e le cartelle contenute nella cartella <strong><strong>Folder</strong></strong>.</p><h2 id="copiare-copiare-file-che-corrispondono-a-un-glob-pattern"><strong>Copiare copiare file che corrispondono a un glob pattern</strong></h2><p>Un glob pattern è simile a un'espressione regolare, che ci permette di trovare più nomi di file corrispondenti a un modello specifico. Per conoscere meglio la differenza: <a href="https://dillionmegida.com/p/regex-vs-glob-patterns/">Regex vs Glob patterns</a> (risorsa in lingua originale inglese).</p><p>Ad esempio, se vuoi copiare tutti i file della <strong><strong>DirectoryA_1</strong></strong> che hanno l'estensione <strong><strong>.txt</strong></strong>, puoi eseguire questo comando:</p><pre><code class="language-bash">cp ./DirectoryA_1/*.txt ./DirectoryA_2
</code></pre><p><code>./DirectoryA_1/*.txt</code> corrisponde ai file che hanno nel loro nome l'estensione <code>.txt</code> e il comando <code>cp</code> può copiarli tutti nella destinazione desiderata.</p><p>Per imparare di più suoi glob pattern e i caratteri che puoi usare, puoi dare un'occhiata alla <a href="https://linux.die.net/man/7/glob">documentazione</a>.</p><p>Adesso sai come copiare dei file (o delle cartelle) direttamente dalla riga di comando.</p><p>Grazie per aver letto questo articolo!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Il processo di avvio di Linux - 6 fasi descritte in dettaglio ]]>
                </title>
                <description>
                    <![CDATA[ Un sistema operativo (OS) è un software di basso livello che gestisce le risorse, controlla le periferiche e fornisce servizi di base ad altri software. In Linux il processo di avvio si divide in 6 fasi distinte. 1. BIOS BIOS è l'acronimo di Basic Input/Output System. In altre parole, il ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/il-processo-di-avvio-di-linux-6-fasi-descritte-in-dettaglio/</link>
                <guid isPermaLink="false">63246f60f91c6d07327f6e08</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Alessandro Cipriani ]]>
                </dc:creator>
                <pubDate>Tue, 27 Sep 2022 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/09/5f9c9cef740569d1a4ca34fc.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/the-linux-booting-process-6-steps-described-in-detail/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The Linux Booting Process - 6 Steps Described in Detail</a>
      </p><p>Un sistema operativo (OS) è un software di basso livello che gestisce le risorse, controlla le periferiche e fornisce servizi di base ad altri software. In Linux il processo di avvio si divide in 6 fasi distinte.</p><h3 id="1-bios"><strong>1. BIOS</strong></h3><p>BIOS è l'acronimo di Basic Input/Output System. In altre parole, il BIOS carica ed esegue il boot loader presente nel Master Boot Record (MBR).</p><p>Quando si accende il computer per la prima volta, il BIOS esegue innanzitutto alcuni controlli di integrità dell'unità disco o dell'unità SSD.</p><p>Successivamente, il BIOS cerca, carica ed esegue il programma di boot loader, che si trova nel Master Boot Record (MBR). L'MBR si trova talvolta su una chiavetta USB o su un CD-ROM, come nel caso di un'installazione live di Linux.</p><p>Una volta individuato il programma di boot loader, questo viene caricato in memoria e il BIOS gli affida il controllo del sistema. &nbsp;</p><h3 id="2-mbr"><strong>2. MBR</strong></h3><p>MBR è l'acronimo di Master Boot Record ed è responsabile del caricamento e dell'esecuzione del boot loader GRUB.</p><p>L'MBR si trova nel primo settore del disco di avvio, che di solito è <code>/dev/hda</code> o <code>/dev/sda</code>, variabile a seconda dell'hardware. L'MBR contiene anche informazioni su GRUB, o LILO in sistemi molto vecchi.</p><h3 id="3-grub"><strong>3. GRUB</strong></h3><p>GNU GRUB, abbreviazione di GNU GRand Unified Bootloader, è il boot loader più diffuso nella maggior parte dei sistemi Linux moderni.</p><p>La schermata iniziale di GRUB è spesso la prima cosa che si vede quando si avvia il computer. Include un semplice menu in cui è possibile selezionare alcune opzioni. Se sono presenti più immagini del kernel, è possibile utilizzare la tastiera per selezionare quella con cui si desidera avviare il sistema. Per impostazione predefinita, viene selezionata l'immagine del kernel più recente.<br><br>Il sistema da all'utente alcuni secondi per effettuare una scelta. Se la scelta non viene effettuata, verrà caricata l'immagine del kernel predefinita.</p><p>Generalmente la posizione del file di configurazione di GRUB si trova <code>/boot/grub/grub.conf</code> o <code>/etc/grub.conf</code>. Di seguito un esempio di contenuto di un file <code>grub.conf</code>:</p><pre><code class="language-text">#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-194.el5PAE)
      root (hd0,0)
      kernel /boot/vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/
      initrd /boot/initrd-2.6.18-194.el5PAE.img</code></pre><p><strong>4. Kernel</strong></p><p>Il kernel è letteralmente il nucleo di un sistema operativo e quindi l'interfaccia tra software e hardware. È il componente centrale di un sistema operativo: permanentemente necessario e costantemente in uso.<br><br>In questa fase del processo di avvio, il kernel selezionato da GRUB si collega innanzitutto con il file system di root specificato nel file <code>grub.conf</code>. Quindi esegue il programma <code>/sbin/init</code>, che è sempre il primo programma a essere eseguito. Infatti il suo id di processo (PID) è sempre 1. Il kernel stabilisce quindi il file system di root, che è stato specificato nel file <code>grub.conf</code>.<br><br>Il kernel crea quindi un file system root temporaneo utilizzando Initial RAM Disk (initrd) fino a quando non viene montato il file system reale.</p><h3 id="5-init"><strong>5. Init</strong></h3><p>In questa fase, il sistema esegue una sequenza di azioni in base a livello di esecuzione (Runlevel). I livelli di esecuzione di Linux sono definiti in un file di init, che di solito si trova in <code>/etc/inittab</code>.<br>I sistemi Linux moderni utilizzano invece systemd per scegliere il livello di esecuzione. Fonte <a href="https://www.tecmint.com/change-runlevels-targets-in-systemd/">TecMint</a>, questi sono i livelli di esecuzione disponibili:</p><blockquote><strong>Run level 0</strong> Questo runlevel avvia la sequenza di arresto del sistema o shutdown (<strong><strong>poweroff.target</strong></strong>).<br><br><strong>Run level 1</strong> Questo runlevel rappresenta la modalità singolo utente, nessun altro utente può collegarsi, il servizio di rete è disabilitato (<strong><strong>rescue.target</strong></strong>).<br><br><strong>Run level</strong> <strong>3</strong> &nbsp;In genere è quello predefinito quando si opera in modalità testuale, tutti i servizi sono attivi (<strong><strong>multi-user.target</strong></strong>).<br><br><strong>Run level 5</strong> &nbsp;È il runlevel predefinito quando si vuole avviare Linux in modalità grafica (<strong><strong>graphical.target</strong></strong>).<br><br><strong>Run level 6</strong> Il runlevel 6 è quello di reboot (<strong><strong>reboot.target</strong></strong>).<br><br><strong>Emergency</strong> È il runlevel di emergenza (<strong>emergency.target)</strong>.</blockquote><p><code>systemd</code> si occuperà di eseguire programmi e/o servizi in base al loro runlevel. &nbsp; &nbsp;</p><h3 id="6-runlevel"><strong>6. Runlevel</strong></h3><p>A seconda della distribuzione Linux installata, è possibile che vengano avviati diversi servizi a seconda del livello di esecuzione (Runlevel). Ad esempio, si potrebbe notare <code>starting sendmail …. OK</code>.<br><br>Ognuno dei 6 livelli di esecuzione sopra descritti ha una propria directory e ogni directory contiene un insieme di programmi e/o servizi che devono essere eseguiti, le directory sono:</p><ul><li>Run level 0 – <code>/etc/rc0.d/</code></li><li>Run level 1 – <code>/etc/rc1.d/</code></li><li>Run level 2  – <code>/etc/rc2.d/</code></li><li>Run level 3  – <code>/etc/rc3.d/</code></li><li>Run level 4 – <code>/etc/rc4.d/</code></li><li>Run level 5 – <code>/etc/rc5.d/</code></li><li>Run level 6 – <code>/etc/rc6.d/</code></li></ul><p>Attenzione, la posizione esatta di queste directory varia da distribuzione a distribuzione.<br><br>Se si guarda alle diverse directory di livello di esecuzione, si troveranno programmi che iniziano con una "S" o una "K", rispettivamente per startup e kill. I programmi di avvio vengono eseguiti durante l'avvio del sistema, mentre i programmi di disattivazione vengono eseguiti durante lo spegnimento.<br><br>Questo è tutto quello che c'è da sapere sul processo di avvio di Linux. Ora provate Linux e rendete <a href="https://it.wikipedia.org/wiki/Tux_(mascotte)">Tux</a> orgoglioso.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Il comando LS in Linux: come elencare file e cartelle + le flag di opzione ]]>
                </title>
                <description>
                    <![CDATA[ Sin dalla creazione di Unix negli anni '70, molti sistemi operativi l'hanno usato come fondazione. Molti di questi sistemi operativi sono falliti, mentre altri hanno avuto successo. Linux è uno dei sistemi operativi basati su Unix più popolari. È open source ed è usato in tutto il mondo in molte ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/il-comando-ls-in-linux-come-elencare-file-e-cartelle-le-flag-di-opzione/</link>
                <guid isPermaLink="false">626279a6f05a77054a49186b</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilenia Magoni ]]>
                </dc:creator>
                <pubDate>Sun, 24 Apr 2022 16:59:32 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/04/article-banner-7.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/the-linux-ls-command-how-to-list-files-in-a-directory-with-options/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The Linux LS Command – How to List Files in a Directory + Option Flags</a>
      </p><p>Sin dalla creazione di Unix negli anni '70, molti sistemi operativi l'hanno usato come fondazione. Molti di questi sistemi operativi sono falliti, mentre altri hanno avuto successo.</p><p>Linux è uno dei sistemi operativi basati su Unix più popolari. È open source ed è usato in tutto il mondo in molte attività.</p><p>Una funzionalità fantastica del sistema operativo Linux è l'Interfaccia della Riga di Comando (Command Line Interface - CLI) che permette agli utenti di interagire con il loro computer da una shell. La shell di Linux è un ambiente REPL (<strong><strong>R</strong></strong>ead, <strong><strong>E</strong></strong>valuate, <strong><strong>P</strong></strong>rint, <strong><strong>L</strong></strong>oop - Leggi, Valuta, Stampa, Itera) dove gli utenti possono inserire un comando e la shell lo esegue e restituisce un risultato.</p><p>Il comando <code>ls</code> è uno dei molti comandi Linux che permettono ad un utente di elencare i file o le directory dal CLI.</p><p>In questo articolo andremo in profondità sul comando <code>ls</code> e su alcune delle più importanti flag di cui avrai bisogno tutti i giorni.</p><h2 id="prerequisiti"><strong>Prerequisiti</strong></h2><ul><li>Un computer con file e cartelle</li><li>Una delle distribuzioni Linux installata</li><li>Una conoscenza base sull'uso del CLI</li><li>Un sorriso :)</li></ul><h2 id="il-comando-ls-in-linux"><strong>Il comando <code>ls</code> in Linux</strong></h2><p>Il comando <code>ls</code> è usato per elencare file o cartelle in Linux o in altri sistemi operativi basati su Unix.</p><p>Proprio come navighi con <em>Esplora</em> o <em>Cerca</em> con una interfaccia grafica, il comando <code>ls</code> ti permette di elencare tutti i file e le cartelle nella cartella corrente di default, e ti permette di interagire ulteriormente con loro attraverso la riga di comando.</p><p>Avvia il terminale e digita <code>ls</code> per vederlo in azione:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screenshot-2020-08-20-at-9.40.29-PM.png" class="kg-image" alt="Screenshot-2020-08-20-at-9.40.29-PM" width="600" height="400" loading="lazy"></figure><h2 id="come-elencare-una-lista-di-file-in-una-cartella-con-opzioni"><strong>Come elencare una lista di file in una cartella con opzioni</strong></h2><p>Il comando <code>ls</code> accetta alcune flag (note anche come opzioni) che sono informazioni addizionali che cambiano come i file o le cartelle sono elencati nel tuo terminale.</p><p>In altre parole, le flag cambiano come il comando <code>ls</code> funziona:</p><pre><code> ls [flags] [directory]</code></pre><blockquote>PS: La parola <strong>contenuti</strong> usata in tutto l'articolo si riferisce ai <strong>file e cartelle</strong> che stanno venendo elencati, non al contenuti di questi file/cartelle ⚠️</blockquote><h3 id="elenca-i-file-nella-cartella-attuale"><strong>Elenca i file nella cartella attuale</strong></h3><p>Scrivi il comando <code>ls</code> per elencare la lista di contenuti della cartella attuale:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screenshot-2020-08-20-at-9.40.29-PM.png" class="kg-image" alt="Screenshot-2020-08-20-at-9.40.29-PM" width="600" height="400" loading="lazy"></figure><h3 id="elencare-i-file-in-un-altra-cartella"><strong>Elencare i file in un'altra cartella</strong></h3><p>Scrivi il comando <code>ls [qui percorso della cartella]</code> per elencare il contenuto di un'altra cartella:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screenshot-2020-08-20-at-10.32.52-PM.png" class="kg-image" alt="Screenshot-2020-08-20-at-10.32.52-PM" width="600" height="400" loading="lazy"></figure><h3 id="elencare-i-file-nella-cartella-di-root"><strong>Elencare i file nella cartella di root</strong></h3><p>Scrivi il comando <code>ls /</code> per elencare il contenuto della cartella root:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screenshot-2020-08-20-at-10.46.10-PM.png" class="kg-image" alt="Screenshot-2020-08-20-at-10.46.10-PM" width="600" height="400" loading="lazy"></figure><h3 id="elencare-i-file-nella-cartella-genitrice"><strong>Elencare i file nella cartella genitrice</strong></h3><p>Scrivi il comando <code>ls ..</code> per elencare il contenuto della cartella genitrice un livello sopra. Usa <code>ls ../..</code> per il contenuto due livelli sopra:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screenshot-2020-08-20-at-10.48.22-PM.png" class="kg-image" alt="Screenshot-2020-08-20-at-10.48.22-PM" width="600" height="400" loading="lazy"></figure><h3 id="elencare-i-file-nella-cartella-home-home-utente-"><strong>Elencare i file nella cartella home (/home/utente)</strong></h3><p>Scrivi <code>ls ~</code> per elencare i contenuti nella cartella home dell'utente:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screenshot-2020-08-20-at-10.51.19-PM.png" class="kg-image" alt="Screenshot-2020-08-20-at-10.51.19-PM" width="600" height="400" loading="lazy"></figure><h3 id="elencare-solo-cartelle"><strong>Elencare solo cartelle</strong></h3><p>Scrivi il comando <code>ls -d */</code> per elencare solo cartelle:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screenshot-2020-08-21-at-12.53.05-PM.png" class="kg-image" alt="Screenshot-2020-08-21-at-12.53.05-PM" width="600" height="400" loading="lazy"></figure><h3 id="elencare-file-con-sottocartelle"><strong>Elencare file con sottocartelle</strong></h3><p>Scrivi il comando <code>ls *</code> per elencare il contenuto della cartella con le sue sottocartelle:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screenshot-2020-08-21-at-1.07.54-PM.png" class="kg-image" alt="Screenshot-2020-08-21-at-1.07.54-PM" width="600" height="400" loading="lazy"></figure><h3 id="elencare-file-ricorsivamente"><strong>Elencare file ricorsivamente</strong></h3><p>Scrivi il comando <code>ls -R</code> per elencare tutti i file e le cartelle con le corrispondenti sottocartelle fino all'ultimo file:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/Screenshot-2020-09-01-at-9.04.56-AM.png" class="kg-image" alt="Screenshot-2020-09-01-at-9.04.56-AM" width="600" height="400" loading="lazy"></figure><blockquote>Se hai molti file questo comando può richiedere un sacco di tempo per finire visto che ogni singolo file in ogni cartella viene elencato. Puoi specificare in quale cartella eseguire questo comando, così: <code>ls Downloads -R</code></blockquote><h3 id="elenca-file-con-la-loro-dimensione"><strong>Elenca file con la loro dimensione</strong></h3><p>Scrivi il comando <code>ls -s</code> (la <strong>s</strong> è minuscola) per elencare i file o cartelle con la loro dimensione:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screenshot-2020-08-21-at-12.30.19-PM.png" class="kg-image" alt="Screenshot-2020-08-21-at-12.30.19-PM" width="600" height="400" loading="lazy"></figure><h3 id="elencare-file-in-formato-esteso"><strong>Elencare file in formato esteso</strong></h3><p>Scrivi il comando <code>ls -l</code> per elencare i file della cartella in un formato a tabella con colonne che includono:</p><ul><li>permessi dei contenuti</li><li>numero di link ai contenuti</li><li>proprietario dei contenuti</li><li>proprietario del gruppo dei contenuti</li><li>dimensione dei contenuti in byte</li><li>ultima modifica del contenuto</li><li>nome del file o della cartella</li></ul><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screenshot-2020-08-20-at-10.52.37-PM.png" class="kg-image" alt="Screenshot-2020-08-20-at-10.52.37-PM" width="600" height="400" loading="lazy"></figure><h3 id="elencare-file-in-formato-esteso-con-dimensioni-di-file-leggibili"><strong>Elencare file in formato esteso con dimensioni di file leggibili</strong></h3><p>Scrivi il comando <code>ls -ls</code> per elencare i file o le cartelle nello stesso formato a tabella di sopra, ma con una colonna diversa rappresentante la dimensione di ogni file/cartella:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screenshot-2020-08-21-at-12.14.33-PM.png" class="kg-image" alt="Screenshot-2020-08-21-at-12.14.33-PM" width="600" height="400" loading="lazy"></figure><p>Nota che le dimensioni sono elencare in byte (B), megabyte (MB), gigabyte (GB) o terabyte (TB) quando i file o le cartelle hanno una dimensione maggiore di 1024 byte.</p><h3 id="elencare-i-file-includendo-i-file-nascosti"><strong>Elencare i file includendo i file nascosti</strong></h3><p>Scrivi il comando <code>ls -a</code> per elencare tutti i file o le cartelle, inclusi file o cartelle nascosi. In Linux, qualsiasi cosa che inizia con <code>.</code> è considerato un file nascosto:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screenshot-2020-08-21-at-11.12.26-AM.png" class="kg-image" alt="Screenshot-2020-08-21-at-11.12.26-AM" width="600" height="400" loading="lazy"></figure><h3 id="elencare-file-in-formato-esteso-includendo-i-file-nascosti"><strong>Elencare file in formato esteso includendo i file nascosti</strong></h3><p>Scrivi il comando <code>ls -l -a</code> o <code>ls -a -l</code> o <code>ls -la</code> o <code>ls -al</code> per elencare tutti i file o le cartelle nel formato a tabella con informazioni extra, includendo i file nascosti o le cartelle:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screenshot-2020-08-21-at-12.17.01-PM.png" class="kg-image" alt="Screenshot-2020-08-21-at-12.17.01-PM" width="600" height="400" loading="lazy"></figure><h3 id="elencare-i-file-per-ordine-di-data"><strong>Elencare i file per ordine di data</strong></h3><p>Scrivi il comando <code>ls -t</code> per elencare i file o cartelle in ordine discendente di ultima modifica (dal più grande al più piccolo).</p><p>Puoi anche aggiungere un flag <code>-r</code> per invertire l'ordine, così: <code>ls -tr</code>:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screenshot-2020-08-21-at-12.20.09-PM.png" class="kg-image" alt="Screenshot-2020-08-21-at-12.20.09-PM" width="600" height="400" loading="lazy"></figure><h3 id="elencare-i-file-e-le-cartelle-per-dimensione"><strong>Elencare i file e le cartelle per dimensione</strong></h3><p>Scrivi il comando <code>ls -S</code> (la <strong>S</strong> è maiuscola) per elencare file e cartelle ordinati per dimensione in ordine discendente (dal più grande al più piccolo).</p><p>Puoi anche aggiungere un flag <code>-r</code> per invertire l'ordine, così: <code>ls -Sr</code>:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/08/Screenshot-2020-08-21-at-12.20.38-PM.png" class="kg-image" alt="Screenshot-2020-08-21-at-12.20.38-PM" width="600" height="400" loading="lazy"></figure><h3 id="elencare-i-file-e-scrivere-il-risultato-in-un-file"><strong>Elencare i file e scrivere il risultato in un file</strong></h3><p>Scrivi il comando <code>ls &gt; output.txt</code> per scrivere l'output del comando precedente in un file <code>output.txt</code>. Puoi usare qualsiasi delle flag discusse in precedenza come <code>-la</code>; il punto chiave è che il risultato sarà scritto in un file e non scritto sulla riga di comando.</p><p>Poi puoi il file come vuoi, o puoi visualizzare il contenuto del file con <code>cat output.txt</code>:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/09/Screenshot-2020-09-01-at-9.12.59-AM.png" class="kg-image" alt="Screenshot-2020-09-01-at-9.12.59-AM" width="600" height="400" loading="lazy"><figcaption>.</figcaption></figure><h1 id="conclusione"><strong>Conclusione</strong></h1><p>Ci sono un sacco di altri comandi e combinazioni che puoi esplorare per elencare file e cartelle a seconda delle tue necessità. Una cosa da ricordare è l'abilità di combinare più flag assieme.</p><p>Immagina di voler elencare i file in formato esteso, includendo i file nascosti e ordinando per dimensione. Il comando sarebbe <code>ls -alS</code>, che è una combinazione di <code>ls -l</code>, <code>ls -a</code>, e <code>ls -S</code>.</p><p>Se dimentichi i comandi o non sei sicuro di cosa fanno, puoi eseguire <code>ls --help</code> o <code>man ls</code> che visualizzano un manuale con tutte le possibili opzioni per il comando <code>ls</code>:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/Screenshot-2020-09-01-at-9.57.37-AM.png" class="kg-image" alt="Screenshot-2020-09-01-at-9.57.37-AM" width="600" height="400" loading="lazy"></figure><p>Grazie per aver letto quest'articolo!</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
