AlNao Debian HandBook

Nao Alberto (www.alnao.it)

December 5, 2020

AlNao Debian 10 HandBook Autore Nao Alberto ([email protected]) Disponibile su www.alnao.it

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Docu- mentation License, Version 1.2 or any later version published by the Foundation. E` garantito il permesso di copiare, distribuire e/o modificare questo documento in base ai termini della GNU Free Documentation License, Versione 1.2 o ogni versione successiva pubblicata dalla .

Scritto da Nao Alberto (www.alnao.it - [email protected]) con LATEX con l’editor

Forse un giorno riuscir`oa finire questa maledetta cosa che chiamo manuale

Prima edizione (solo appunti, versione Debian 3.1 Sarge): 2006 Seconda edizione (versione Debian 4 Etch): 2008 Terza edizione (in inglese, incompleta, Debian 5): 2011/2012 Quarta edizione (versione Debian 8): 2015/2016 Quinta edizione (versione Debian 9): 2018 Sesta edizione (versione Debian 10): 2020

Contents

1 Introduzione 7 1.1 Perch`equesto manuale? ...... 7 1.2 Perch´eLinux? ...... 7 1.3 Note e Convenzioni ...... 8 1.4 Correttezza di questo manuale ...... 9

2 Installazione di Debian 10 2.1 Come e dove trovare Debian ...... 10 2.1.1 Le versioni di Debian ...... 11 2.2 Avvio dell’installazione ...... 11 2.3 Configurazioni del sistema (rete, partizioni ed utenti) ...... 12 2.4 Copia del sistema base e impostazioni finali ...... 12 2.5 Il primo avvio ...... 13 2.6 Installazione dalla versione live ...... 13

3 Configurazioni base 15 3.1 Gestione di cartelle e file ...... 15 3.1.1 Diritti sui file ...... 16 3.2 La shell e i desktop ...... 16 3.3 Montaggio delle partizioni ...... 17 3.3.1 Montaggi permanenti ...... 18 3.4 Gestione dei pacchetti di Debian ...... 18 3.5 Il pannello di controllo WebMin ...... 19 3.6 Login manager, processi e rete ...... 20

4 Applicazioni 21 4.1 Editor di testo ...... 21 4.2 Gestione dei file ...... 21 4.3 Compressione dei file (Tar, Zip e Rar) ...... 22 4.4 Programmi per l’ufficio ...... 22 4.5 Navigazione web e Mail Client ...... 23 4.6 Multimedialit`a ...... 23 4.7 Immagini e editing ...... 25 4.8 Applicazioni varie ...... 25 4.9 Giochi ...... 25

5 Demoni 27 5.1 Sistema di stampa (demone CUPS) ...... 27 5.2 Condivisione di rete (demone Samba) ...... 28 5.3 Systemd e i runlevel ...... 29 5.4 Lo schedulazione crontab ...... 30 5.5 Controllo remoto ...... 31 5.6 Altri demoni ...... 31

5 CONTENTS 6

6 Programmazione 33 6.1 Programmazione della shell ...... 33 6.2 CeC++ ...... 35 6.3 LAMP (Apache e Mysql con Php) ...... 35 6.4 e Tomcat ...... 37 6.5 GIT ...... 38 6.6 NodeJS e NPM ...... 38 6.7 ...... 39 6.8 PostgreSQL e MongoDB ...... 39 6.9 Postman ...... 41 6.10 ...... 41 6.11 Didattica, scienza e calcolo numerico ...... 42 6.12 Macchine virtuali ...... 43

7 Configurazioni particolari e HowTo 44 7.1 Il BootLoader Grub ...... 44 7.2 Configurazioni del demone grafico X e accelerazione grafica ...... 45 7.3 Backup e restore dei dati ...... 46 7.4 Il sistema sotto controllo ...... 47 7.5 Il cestino ...... 47 7.6 Configurazione del comando SUDO ...... 47 7.7 Configurazione base delle quote ...... 48 7.8 Programmi di partizionamento dischi ...... 49

8 Comandi della Shell 50 8.1 Tabella dei comandi ...... 51 8.2 Configurazione del path base ...... 58 8.3 Creazione di alias ...... 58 8.4 Gestione processi e memoria ...... 58 8.5 Gestione della rete ...... 59 8.6 Modifica ai nomi di files ...... 60 8.7 Comandi del demone MySql ...... 60 8.8 Manipolazione immagini e video da riga di comando ...... 61 8.9 Manipolazione file PDF da riga di comando ...... 61 8.10 Notifiche e finestre di dialogo ...... 62 Chapter 1

Introduzione

1.1 Perch`equesto manuale?

Questo documento nasce negli anni di utilizzo dei sistemi GNU e dalla necessit`adi riordinare il contenuto di grossi blocchi di appunti sparsi in raccolte di pagine web, in particolare gli appunti riguardanti i sistemi Debian su che uso da ormai pi`udi quindici anni. Dopo aver sentito la necessit`adi dover mettere ordine agli appunti, ho deciso di scrivere un documento che poi io chiamo “manuale” con lo scopo anche di condivisione di esperienze e conoscenze, seguendo proprio lo spirito base del mondo GNU Linux. L’opera `ediretta principalmente all’utente semplice, che usa il computer per scrivere, navigare, che ha la possibilit`a o la necessit`adi approfondire alcune tematiche avanzate di un sistema operativo come l’installazione di alcuni demoni e le configurazioni base. Un programmatore, anche non alle prime armi, pu`otrovare molti spunti da questo manuale, essendo presenti capitoli dedicati a questo argomento e riferimenti alla programmazione visto che, chi scrive questo documento, `esopratutto un programmatore. La dispersione delle informazioni e la troppa documentazione non adatta alle mie conoscenze, a volte troppo evoluta e a volte troppo semplice, sono stati i motivi che mi hanno spinto a scrivere un documento completo dalla prima installazione alle ultime configurazioni cercando di realizzare una facile esposizione, facendo per`ol’importante assunzione che il lettore sia a conoscenza dei concetti base dell’informatica e di alcune basi della programmazione se il lettore `einteressato a quella sezione. Molti argomenti complessi, come la compilazione dei programmi dal codice sorgente, sono accennati a livello introduttivo e teorico, in modo che il lettore li possa comunque sperimentare, per poi eventualmente approfondire l’argomento per conto proprio in altri documenti pi`uspecifici. A volte si danno per scontate alcune nozioni, come per esempio la conoscenza di alcuni linguaggi di programmazione (come , HTML, PHP, Perl e SQL) che chi scrive questo documento trova ovvie, mentre ad un lettore meno esperto potrebbero essere molto complicate ma questo non deve spaventare in quanto questo documento non `eun manuale sulla programmazione e le nozioni richieste non sono fondamentali al fine di capire gli argomenti e gli esempi proposti servono solo per verificare il corretto funzionamento dei demoni installati. Ho sempre cercato il tempo per scrivere e per correggere gli errori di grammatica e di battitura di cui questo documento `epieno, cerco anche di essere chiaro e non ripetitivo ma non sempre trovo il tempo e le energie per fare tutto e poi sistemare tutto, non avendo nessun scopo di guadagno mi auguro che il lettore comprenda che questa `e un documento “amatoriale” e che non pretenda troppo da questo manuale, ovviamente le cose scritte sono (quasi) sempre verificate anche se ovviamente si possono trovare guide con maggiori dettagli. Il documento `estato aggiornato dal 2006, visto che ogni due anni esce una versione nuova del sistema operativo Debian, questo mi porta a dover rivedere tutte le parti da zero per correggere e sistemare gli aggiornati e gli errori, per questo motivo `epossibile trovare parti con datazioni diverse e versioni precedenti. Spero di finire questo documento prima o poi.

1.2 Perch´eLinux?

Durante i miei anni di studi ho avuto la grande fortuna di essere costretto ad iniziare ad usare i sistemi GNU Linux, all’inizio del millennio le cose non erano cos`ı semplici: senza i motori di ricerca il metodo risolutivo dei problemi era molto pi`uarduo e non essendoci linee veloci non esistevano mirror da cui scaricare aggiornamenti continui; informazioni e pacchetti si trovavano solo su riviste e libri ed `eproprio stato questo che mi ha spinto a scrivere la prima versione di questo manuale, infatti le informazioni che avevo e che mi servivano erano sparse su varie riviste e sui libri ma non avevano un punto centrale dove raccogliere tutte le informazioni che io avevo trovato e che mi servivano.

7 CHAPTER 1. INTRODUZIONE 8

Non voglio eseguire confronti con altri sistemi e le aziende che producono altri sistemi operativi perch`enon credo sia questa l’occasione per farlo, la filosofia principale del mondo GNU Linux `ela condivisione delle proprie idee e delle proprie conoscenze, questo documento `escritto proprio con questo spirito. Tecnicamente c’`emolta di differenza tra un sistema operativo classico (come MS Windows e/o Apple Mac OS) e quello che viene comunemente chiamato Linux: siamo abituati a dire giustamente che MS Windows `eun sistema operativo mentre il pacchetto MS Word compreso nel pacchetto MS Office `eun programma, GNU Linux invece comprende entrambe le parti, esiste il cuore centrale di GNU Linux, chiamato KernelLinux che pu`oessere definito come il sistema operativo (cio`el’insieme di tutti quei programmi essenziali al funzionamento del sistema base), nei sistemi GNU Linux sono compresi anche tutti i programmi di uso pi`ucomune, come quelli per l’ufficio, la navigazione web, giochi, grafica, ecc..., al termine di una installare di un sistema GNU Linux l’utente si ritrova installati tutti i programmi base e, dai DVD o dai Mirror presenti su internet, pu`oscaricare altri programmi senza dover cercare su altri siti, questa filosofia di unire sistema operativo e programmi `estata molto rimarcata in questi anni, basti pensa che i Mirror Debian contengono oltre 50.000 pacchetti e circa 10.000 programmi diversi. In un pc o in un notebook, `epossibile installare GNU Linux anche se `egi`apresente un sistema MS Windows senza creare grossi problemi e i due sistemi possono essere installati in parallelo, alcune distribuzioni permettono persino di installare i due sistemi nella stessa partizione di disco, ma io sconsiglio vivamente questo approccio nonostante la convivenza di pi`upartizioni nello stesso sistemi `eormai una cosa stabile e ben funzionante. Nella appendice sar`a scritta una guida di come eseguire l’installazione di Debian in un sistema dove `epresente anche un altro sistema operativo, mentre gli altri capitoli del documenti prevedono una installazione pulita in un sistema dove non `epresente nessun altro sistema operativo. Le distribuzioni di GNU Linux sono community o aziende che preparano DVD oppure Mirror Web dove scaricare il sistema di installazione pi`uvelocemente, ogni distribuzione ha le proprie caratteristiche ma bisogna sempre ricordare che il cuore del sistema operativo (KernelLinux) `esempre lo stesso, l’elenco completo e la storia delle distribuzioni che si basano sul KernelLinux possono essere trovati su internet in qualsiasi sito specializzato. In questo documento si parla tipicamente solo della distribuzione Debian, ma leggendo questa guida potrete trovare spunti per qualsiasi distribuzione anche non derivata da Debian visto.

1.3 Note e Convenzioni

Per chiarezza di esposizione e per garantire anche precisione delle descrizioni, in tutto questo documento saranno adottate le convenzioni classiche usate in quasi tutti i documenti i siti disponibili sugli argomenti trattati:

- Viene usato il carattere # per indicare un comando eseguito da un utente con privilegi di amministratore di sistema (il superutente root). - Viene usato il carattere $ per indicare un comando eseguito da un utente non amministratore (un utente non root per esempio quello creato in fase di installazione).

- Viene usato lo stile macchina di scrivere per indicare messaggi mostrati a video dal sistema, tutti i caratteri inseriti da tastiera e i nomi dei file, facendo sempre attenzione alla distinzione fra lettere minuscole e maiuscole. - Viene usato lo stile Grassetto quando si indicano, per la prima volta, nomi di programmi o dei pacchetti di particolare importanza. - Viene usato lo stile corsivetto quando si vogliono evidenziare commenti personali.

- Vengono usati dei riquadri quando si vogliono inserire delle note importanti che meritano maggiore attenzione dall’utente. - Viene usato lo stile Nao Alberto quando viene nominato, per la prima volta, il nome di una persona di particolare importanza oppure quando viene segnalato una scritta di particolare importanza, come il testo di un bottone o la scritta di un link.

Dopo la scrittura di ogni comando `esottintesa la pressione del tasto invio (enter). Questi standard possono essere non convenzionali ad un utente alle prime armi ma scopriremo subito che i caratteri # e $ vengono usati dal sistema per distinguere la shell di utenti amministratori (root) e utenti normali. Si da per scontato che il lettore abbia la possibilit`adi collegarsi a internet con una linea abbastanza veloce da poter scaricare i DVD di Debian e che possa scaricare aggiornamenti e pacchetti non compresi nei DVD (una linea ADSL anche base `eperfetta e sufficiente per questo). Si assume anche che il lettore disponga di un masterizzatore DVD per masterizzare il DVD di installazione o che abbia gi`ail DVD pronto oppure una chiavetta USB. Un utilizzatore di GNU Linux deve imparare fin da subito a prestare attenzione a come vengono scritti e inseriti nomi, perch`ei CHAPTER 1. INTRODUZIONE 9 sistemi basatati su GNU Linux sono sempre case-sensitive, cio`efanno distinzione tra caratteri maiuscoli e minuscoli: durante la lettura di questo manuale bisogna sempre prestare attenzione alla differenza e fare sempre attenzione a cosa si digita con la tastiera.

1.4 Correttezza di questo manuale

Essendo un documento amatoriale ed essendo un testo scritto nei miei ritagli di tempo libero, mi auguro che il lettore non abbia la pretesa che questo manuale descriva con precisione il modo migliore per installare e configurare un sistema perfettamente funzionante. Questo manuale vuole essere una descrizione di passi per far funzionare il sistema base con alcune brevi spiegazioni sulle componenti pi`uusate o pi`uimportanti, i passi descritti sono sempre verificati e controllati ma alcuni dettagli vengono tralasciati per evitare un documento troppo lungo o troppo dettagliato. Le sezioni riguardanti i demoni demoni e le configurazioni della rete sono dettagliate ma spesso non viene approfondita la sezione sulla sicurezza di rete alla quale forse in futuro dedicher`oun capitolo dedicato. Un ulteriore problema sorto in questi anni `eche, col passare del tempo, il sistema GNU Linux e Debian si evolvono molto velocemente, infatti molti pacchetti e programmi cambiano: ogni due anni circa esce una nuova versione stabile e questo comporta dover revisionare tutto il documento correggendo le imprecisioni, per questo motivo sono gi`aalla sesta edizione di questo documento. Con l’evoluzione della tecnologia e degli ambienti di sviluppo sono aggiunti nelle ultime edizioni di questo documento nuovi demoni (come PostgreSQL, MongoDB e i Docker) nel tentativo di rimanere aggiornato con le ultime tecnologie e per rendere questo documento il pi`uutile e completo possibile. Anche per quanto riguarda i programmi base dei desktop c’`eil tentativo di tener aggiornato il documento con la speranza di rendere completo l’elenco delle applicazioni disponibili ed utilizzabili anche da utenti non programmatori. Chapter 2

Installazione di Debian

In questo capitolo `edescritta tutta la fase di installazione della versione 10 di Debian chiamata Buster. Il primo passo da eseguire sar`ail download del primo DVD del sistema dal sito ufficiale, il passo successivo sar`al’avvio del programma di installazione, seguendo passo per passo le fasi di installazione. L’installazione di un sistema operativo `esicuramente una cosa non semplicissima e delicata, infatti si possono settare molti parametri del sistema ma non bisogna pensare che sia una cosa impossibile anche per chi ha poca esperienza in materia: seguendo i passi descritti in questo articolo l’installazione sar`aun gioco da ragazzi. Durante la fase di installazione, la fase pi`ucomplicata sar`asicuramente il partizionamento del disco, in quanto c’`esempre il rischio di perdere tutti i dati gi`apresenti, se possedete un computer nuovo (o uno vuoto) potete stare tranquilli, se invece `eun sistema gi`ausato in precedenza `esempre consigliabile eseguire un backup di tutti i dati prima di procedere con l’installazione di un nuovo sistema. Prima di procedere con l’installazione bisogna controllare se il computer dove si vuole installare Debian dispone dei requisiti minimi, sicuramente un computer recente non avr`aproblemi, infatti questo sistema operativo necessita di meno risorse rispetto ad altri sistemi, bastano infatti pochi GB di Ram e un processore anche non recente. Ricordo che se disponete di sistemi a 64 Bit (AMD o Intel serie I3, I5 o I7) dovete scegliere la versione amd64 mentre se disponete di altri sistemi dovete controllare nel sito ufficiale la versione adatta al vostro sistema. Bisogna notare che tale guida `evalida anche per le precedenti versioni di Debian e anche per le successive, infatti dalla mitica versione 3.1 di Debian, chiamata Sarge, il programma di installazione ha subito poche variazioni grafiche quindi risulta molto simile ai programmi di installazioni delle precedenti versioni: se qualcuno possiede una guida di installazione delle precedenti versioni o una vecchia versione di questo capitolo trover`apochissime di differenze. Una guida ufficiale per l’installazione pu`oessere trovata nel sito ufficiale di Debian, alla pagina www.debian.org/releases/stable/i386/ questo capitolo vuole esserne un riassunto semplice ma completo.

2.1 Come e dove trovare Debian

Molte distribuzioni di GNU Linux sono gratuite e possono essere scaricate direttamente da internet senza problemi, all’interno del sito ufficiale di Debian www.debian.org `epossibile trovare tutte le immagini del DVD di installazione e tutte le informazioni sul sistema operativo; `epossibile trovare i DVD di Debian anche pubblicati su riviste o manuali, l’ovvio vantaggio di usare un sito web `eil costante aggiornamento dei pacchetti e il fatto che sarete sempre aggiornati all’ultima versione del sistema. Per scaricare il DVD per l’installazione basta andare nel sito, entrare nella sezione Getting Debian (in italiano Ottenere debian) e cliccare su ”Download large installation images” (Scaricare un file immagine), scegliendo poi la versione che cercate, se il sistema `erecente `epossibile scaricate la versione amd64, se invece il sistema `evecchio o a 32 bit, la versione da scegliere `ela i386. Le immagini scaricate sono in formato ed estensione ISO, questi file possono essere portati su DVD da qualsiasi programma di masterizzazione compresi i programmi nativi di tutti i sistemi operativi. Scaricare un DVD attraverso un browser pu`oessere una operazione non semplice perch´ela maggior parte dei browser non da la possibilit`adi farlo per la dimensione dei file superiori ai 4Gb, il mio consiglio `edi usare un sistema peer-to-peer come BTorrent (oppure KTorrent per chi usa gi`aGNU Linux), con questi sistemi `epossibile scaricare file di grandi dimensioni senza problemi, dal sito ufficiale di Debian potete scaricare i parametri per il download dell’immagine ISO dai sistemi torrent.

10 CHAPTER 2. INSTALLAZIONE DI DEBIAN 11

IMPORTANTE: Scaricare l’immagine ISO di Debian da un sistema Torrent (o da qualsiasi altro sistema di peer-to-peer) non `eillegale in quanto Debian `efree e coperto da licenza GNU che permette il download e l’uso delle immagini. Scaricare film, musica, software con piattaforme peer-to-peer pu`oessere illegale se i contenuti scaricati sono coperti copyright e/o coperti da licenza proprietaria.

Potete tranquillamente selezionare l’immagine da 4 Gb anche se potrete selezionare una versione pi`ulight del sistema (di circa 180 Mb) che poi provveder`aa scaricare da internet i componenti mancanti, io sconsiglio la versione pi`upiccola perch´erende molto lenta la fase di installazione allungando i tempi. Nel sito ufficiale `epossibile trovare e scaricare anche la versione dell’installer su chiavetta USB, nell’appendice `epossibile trovare una guida su come scaricare e utilizzare la versione USB del sistema operativo.

2.1.1 Le versioni di Debian Le versioni di Debian sono divise tra la categorie di stable, testing e unstable; come dice il nome stesso, sono le varie fasi dei vita pacchetti: un pacchetto prima viene inserito nella versione chiamata unstable, poi passa nella testing e, quando viene valutato stabile senza anomalie, un pacchetto viene inserito nella successiva versione stabile di Debian, solamente le versioni stabili vengono numerate mentre alla versione “testing” viene assegnato il numero e il nome della successiva versione stabile mentre la versione “unstabile” non ha un numero di versione. Ad ogni versione viene assegnato anche un nome ispirato ai mitici personaggi del film Toys Story, la versione unstable porta sempre il nome Sid (che era il nome del bambino che nel film si divertiva a rompere i giocatoli del protagonista). L’elenco delle versioni di Debian `edisponibile nel sito ufficiale https://www.debian.org/releases/index.it.html e riassunto in questa tabella

unstable sid - testing bullseye fine 2021 10 buster 9 Maggio 2019 9.0 stretch 17 Giugno 2017 8.0 jessie 26 Aprile 2015 7.0 wheezy 5 Maggio 2013 6.0 squeeze 6 Febbraio 2011 5.0 lenny 14 Febbraio 2009 4.0 etch 8 Aprile 2007 3.1 sarge 6 Giugno 2005 3.0 woody 19 Luglio 2002 2.2 potato 15 Agosto 2000 2.1 slink 9 Marzo 1999 2.0 hamm 24 Luglio 1998 1.3 bo 5 Giugno 1997 1.2 rex 12 Dicembre 1996 1.1 buzz 17 Giugno 1996 1.0 — mai rilasciata

2.2 Avvio dell’installazione

Per far partire il programma di installazione bisogna avere un DVD auto-avviante oppure una chiavetta USB con all’interno le immagini scaricate dal sito, basta infatti inserire il DVD nel lettore e il programma di installazione verr`a avviato automaticamente al successivo avvio (o riavvio) del sistema. I dischi auto-avvianti funzionano solamente se il sistema BIOS del PC `econfigurato correttamente: per questa configurazione bisogna entrare nella finestra di setup del BIOS, premendo un tasto all’avvio del sistema tipicamente indicato nella prima videata con una scritta del tipo “Press XX to enter in the setup”, all’interno del programma di setup del BIOS bisogna indicare il DVD come “main boot” (il termine da cercare `eproprio il termine boot). Una volta avviato il sistema con il DVD, compare una schermata che chiede a quale tipo di installazione eseguire, muovendosi con le frecce della testiera si dovrebbe scegliere la voce Graphical installation, altrimenti verrebbe avviato il programma di installazione da riga di comando senza nessun componente grafico, l’installatore Debian consiste di un numero di passi dedicati ad eseguire i passi dell’installazione, ogni componente esegue il proprio compito, ponendo domande all’utente per quanto necessario a svolgere il proprio lavoro, a queste domande sono date delle priorit`ae la priorit`adelle domande da porre `eimpostata all’avvio dell’installatore, quando si esegue un’installazione predefinita, solo le domande essenziali (ad alta priorit`a)saranno poste. Ne risulta un processo di installazione CHAPTER 2. INSTALLAZIONE DI DEBIAN 12 altamente automatizzato e con poca interazione da parte dell’utente e i componenti sono eseguiti automaticamente in sequenza; quali componenti siano eseguiti dipende principalmente dal metodo di installazione usato e dall’hardware ma vengono calcolati automaticamente senza che l’utente si accorga di nulla. I primi passi che vengono proposti sono la scelta della lingua (dove inglese `esempre il valore di default) e il tipo di tastiera che avete (anche in questo caso la tastiera inglese `ela scelta predefinita), ovviamente se disponete della classica tastiera italiana (con le lettere accentate vicino al tasto invio) dovete selezionare la tastiera italiana, queste scelte non sono vincolanti in quanto `epossibile cambiare lingua e tastiera anche una volta terminata l’installazione ma ovviamente `epi`usemplice e pratico selezionare la lingua corretta. Se si sceglie la tastiera sbagliata alcuni tasti potrebbero non corrispondere con quanto compare a video come i tasti di punteggiatura la cui posizione dipende dalla nazione della tastiera. Un volta superati i primi due passi compare una barra di avanzamento con il messaggio Copia del sistema base in corso, non bisogna fermare il processo aspettando i successivi passi dell’installazione.

2.3 Configurazioni del sistema (rete, partizioni ed utenti)

Dopo aver selezionato la lingua nel primo , il programma di installazione prevede step ulteriori dove `epossibile configurare le componenti pi`uimportanti del sistema. Il primo componente da configurare `ela scheda di rete: `e possibile farsi guidare dal programma di installazione per le impostazioni di una rete domestica classica (router ADSL/Fibra con o senza una rete Wifi), per configurare una rete pi`ucomplessa `epossibile inserire server di rete DHCP e l’indirizzo del Gateway, per esempio una configurazione semplice pu`oessere: Indirizzo IP 192.168.1.2 SubnetMask 255.255.255.0 Gateway 192.168.1.1 Dopo la configurazione delle rete, `eprevisto un passo dove bisogna inserire un nome del sistema, questo nome `e puramente indicativo ed `eusato solo nei servizi di rete ma comparir`aspesso nelle videate quindi conviene mettere un nome parlante (il nome non deve avere spazi o caratteri di punteggiatura), se disponete di una rete domestica con pi`unodi (pi`ucomputer o dispositivi collegati) il nome sar`ausato per identificare il sistema dagli altri. I passi successivi sono i passi pi`udelicati di tutta la fase di installazione perch`eprevedono la configurazione del disco fisso HardDisk per la creazione delle partizioni, questo pu`ocausare la perdita di dati se viene modificata la struttura delle partizioni. Per il sistema operativo bastano circa 30 Gb e poi `econsigliata anche una seconda partizione chiamata di SWAP, per questa partizione bastano appena 8Gb anche se nei sistemi di ultima generazione con tanta memoria RAM questa partizione pu`oanche non essere creata. In questo manuale non viene spiegata la teoria dei FileSystem ma i sistemi GNU Linux prevedono vari tipi di partizioni: `epossibile utilizzare gli stessi tipi usati su Windows ed `eindispensabile usare questo tipo se sul sistema ci sono pi`usistemi operativi, in questo caso l’utente dovr`aseleziona NTFS; se invece nel sistema `epresente solo una Debian, `econveniente creare le partizioni di tipo Ext4 che `eil sistema pi`umoderno usato da GNU Linux, la partizione SWAP ha il proprio tipo dedicato e quello non potr`aessere cambiato. Il programma di installazione vi presenta una proposta di partizionamento che prevede solo le due partizioni necessarie e che si pu`oconfermare se nel sistema `epresente solamente il sistema Debian, se volete modificare la struttura delle partizioni proposte, dovete farle indicando sempre il tipo e le dimensioni delle partizioni che volete creare; da notare che la partizione principale viene sempre indicata con il simbolo “/” chiamata root e indica la cartella madre di tutto il sistema. Per confermare le modifiche scelte basta selezionare la voce dedicata, il programma di installazione provveder`aa scrivere le modifiche sul disco, la fase di scrittura su disco pu`o durare parecchi minuti nei quali non bisogna interferire in nessuna maniera. Attenzione: le operazione di creazione e modifica delle partizioni del vostro disco HardDisk potrebbe causare la perdita dei dati all’interno del vostro sistema, `esempre raccomandato eseguire una copia backup dei dati prima di eseguire l’installazione di Debian e la creazione delle partizioni dedicate. Dopo aver creato e configurato le partizioni, il sistema vi chieder`ala password dell’utente principale che anche questo viene chiamato root, questa password `emolto importante visto che con questa utenza `epossibile lanciare qualsiasi comando e modificare qualsiasi file, `eimportante non perderla. Dopo aver inserito la password di root due volte per conferma, il programma di installazione prevede la creazione di un utente, questo avr`auna username e una password, queste credenziali saranno usate per accedere la prima volta, ovviamente in un secondo momento sar`a possibile creare altri utenti o modificare quello creato durante la fase di installazione.

2.4 Copia del sistema base e impostazioni finali

Dopo gli step di configurazione del sistema base, sono previste la scrittura delle partizioni e la copia del sistema base. Il programma di installazione poi procede con le fasi di censimento degli altri DVD se disponibili e dei CHAPTER 2. INSTALLAZIONE DI DEBIAN 13

mirror ufficiali: Debian infatti pu`oconfigurare pi`uDVD di installazione ed `epossibile fin da questi passi configurare un sito dove il programma di installazione cerca automaticamente aggiornamenti e nuovi pacchetti. In fase di installazione sono configurati solo mirror ufficiali del ramo “stabile”, al termine del programma di installazione `e possibile aggiungere mirror non ufficiali e anche di rami delle versioni “testing” di Debian. Se disponibili solo del primo DVD o una chiavetta USB non `enecessaria nessuna altra operazione e il sistema automaticamente cercher`a i mirror ufficiali in internet, durante questa fase l’unica scelta `equella della nazione del mirror, `epossibile scegliere anche il mirror italiano che `esempre molto stabile e sempre disponibile. Dopo la configurazione dei mirror, il programma di installazione permette di aggiungere alcune sezioni aggiuntive, il mio consiglio `equello di non installare nessun server/demone per velocizzare la fase di installazione del sistema base ma l’unica cosa davvero indispensabile `eil server grafico: questo prevede di default il sistema GNOME, ma `egi`a possibile installare anche altri desktop grafici come KDE, XFCE e LXTE, se disponibile sufficiente spazio nel disco `e consigliato di installare tutti i desktop in modo da porterli provare e giudicare. Il passo successivo prevede l’adesione ad un programma per il raccoglimento delle informazioni dell’utente con l’invio automatico al sito ufficiale Debian di alcune statistiche dell’uso di Debian compresi bug ed errori dei programmi principali, se non volete aver problemi potete tranquillamente non aderire al programma senza aver nessuno svantaggio, al massimo potete riconfigurare l’adesione dopo la fine dell’installazione con il comando da riga di comando: # dpkg-reconfigure popularity-contest L’installazione prosegue con la copia dei pacchetti selezionati in precedenza e ovviamente questa fase non deve essere interrotta per nessun motivo. L’ultima fase di installazione `ela configurazione del programma di avviamento del sistema chiamato bootloader, nei sistemi Debian `eprevista l’installazione di Grub, se disponete pi`usistemi operativi sul sistema questo programma vi permetter`adi selezionare quale sistema operativo avviare quando accedente il PC mentre se avete installato solo del sistema Debian vi verr`asolo visualizzata una schermata che vi avvisa del caricamento del sistema, in ogni caso GRUB `emolto stabile e si configura automaticamente, durante la fase di installazione l’utente deve solo selezionare l’opzione installare il bootloader nel MBR dell’hardDisk per installare GRUB nel proprio sistema. Il programma di installazione termina con l’installazione del bootloader e il riavvio del sistema, ora Debian `e disponibile per l’utilizzo.

2.5 Il primo avvio

Al primo avvio la schermata di caricamento `equella del bootloader GRUB che `estata configurata nell’ultimo passo del programma di installazione, se presente un solo sistema operativo compare solo l’opzione di Debian ma se presenti pi`usistemi operativi compare la lista dei sistemi disponibili con la possibilit`adi scegliere quale avviare muovendovi nel men`ucon le frecce della tastiera. Se disponibili pi`uversioni del Kernel Linux installate nel sistema Debian, compare la lista delle versioni con la possibilit`adi scelta della versione da avviare, questa opzione `emolto utile si vuole utilizzare anche la versione testing. Una volta avviata l’opzione sul sistema GRUB, il sistema operativo avvia tutto il Kernel Linux e i programmi di avvio, in una videata da riga di comando che, se dura pochi secondi in sistemi veloci e recenti, al termine compare la videata grafica di login, questa videata `echiamata GDM (Gnome Desktop manager) che `eil componente che permette la login su un desktop: nella videata basta l’username e password dell’utente creato durante la fase di installazione e verr`acaricato il desktop Gnome che di default viene installato e configurato, un utente alle prime armi deve avete la pazienza di aprire i men`udi Gnome per famigliarizzare con il Desktop principale di Debian. Nelle precedenti versioni di questo documento, come primo passo dopo la prima login, era quello di procedere con la configurazioni di mirror e siti per l’installazione di programmi non Debian (come browser, multimedia, ecc...), questa configurazione `estato spostata nelle sezioni dedicate ad ogni programma in modo da avere pi`uordine nel file di configurazione dei mirror. Il programma per gli aggiornamento e le installazioni dei pacchetti `e Synaptic dove `epossibile vedere l’elenco di tutti i pacchetti disponibili divisi per sezioni e per stato, tramite questo programma grafico `eanche possibile tenere aggiornato il sistema scaricando le ultime versioni dei pacchetti dai mirror configurati nel sistema. Terminata questa fase sarete pronti per usare GNU Linux e Debian.

2.6 Installazione dalla versione live

La versione live di un sistema operativo `euna versione che pu`oessere avviata da DVD o chiavetta USB che non necessita di nessuna installazione e si avvia senza necessit`adi alcun disco fisso, fino a qualche anni fa era difficile trovare versioni live, la famosa Knoppix era il progetto live derivato da Debian che era molto famoso negli anni 90 e nei primi del nuovo secolo. Da circa il 2010 in poi quasi tutte le versioni di GNU Linux hanno la propria live, persino Debian ha superato il progetto Knoppix per creare una versione live Debian pura, infatti scaricando dal sito ufficiale la versione Debian si scarica il DVD o la chiavetta USB della versione Live installabile. Una volta caricata la CHAPTER 2. INSTALLAZIONE DI DEBIAN 14

versione Live `epossibile procedere all’installazione direttamente dal desktop, questa versione presenta alcune piccole differenze dalla versione pura installata dall’installer come visto nei punti precedenti. La principale differenza `eche nella versione live e nella sua installazione non `eabilitato l’utenza root del superutente, per abilitare l’utenza root con una password specifica bisogna lanciare il comando $ sudo passwd root Una nota: nelle versioni live quasi sempre `eabilitato e configurato il comando sudo che permette di lanciare comandi da un utente normale senza i permessi di superutente, in una installazione su un sistema questo comando `esconsigliato ed `econsigliato usare l’utenza root per i comandi importanti. In fase di installazione dalla live, `epossibile anche configurare una login diretta all’utente creato durante la fase di installazione ma questa opzione `esempre sconsigliata per ragioni di sicurezza. Altra piccola ma grande differenza `eche installando la versione live , verr`ainstallato il server grafico Gnome, per poter usare altri desktop bisogna installarli manualmente dal gestore dei pacchetti. Chapter 3

Configurazioni base

Dopo aver completato tutti i passi del programma di installazione, il sistema `egi`aquasi completo: di default nell’installazione base `ecompreso almeno un Desktop comprendente tutte le parti dell’ambiente grafico e sono com- presi anche una serie di applicativi che possono essere trovati sul men`uprincipale, in questo capitolo sono descritte le nozioni base che un utente deve avere per potere usare senza problemi una qualsiasi versione di GNU Linux, queste nozioni sono le pi`uvarie ma sono indispensabili: risulta impossibile usare GNU Linux senza avere qualche base sistemistica e un po’ di manualit`asu file e cartelle come la gestione i diritti di lettura e scrittura su file e cartelle. Un utente poco esperto potrebbe spaventarsi e demoralizzarsi di fronte alle nozioni base che sono poco familiari ma, con il tempo, si pu`oprendere confidenza con la shell e i file di sistema cos`ıda poter eseguire tutte le configurazioni nec- essarie. La parte pi`uimportante di questo capitolo `esicuramente la sezione dedicata al “montaggio” delle partizioni, argomento fondamentale e centrale. La prima nozione fondamentale che un utente di GNU Linux deve avere sempre presente `eche tutto `eun file, il Kernel Linux infatti vede e gestisce tutto come un file: le cartelle, le periferiche come le stampanti, memorie fisse e persino i processi in esecuzione sono interpretati come file che il FileSystem gestisce e amministra. A differenza di altri FileSystem, in GNU Linux le estensioni non sono rilevanti, spesso capiter`adi trovare file con estensioni “strane” ad un utente non abituato a tale libert`a:un esempio classico `eil file sources.list che conterr`auna lista di sorgenti come dice il nome e l’estensione: spesso infatti viene usata l’estensione per evidenziare se il file ha un contenuto specifico come liste o configurazioni. Esistono anche file senza estensione come il file fstab, per i sistemi basati su e GNU Linux l’estensione di un file `esolo una parte del nome. I file il cui nome inizia per . (punto) sono file nascosti, cio`etipicamente i file manager non vedono questi file a meno di comandi specifici, questi nomi vengono usati dai programmi per creare cartelle e file di configurazioni ma di non dare la possibilit`aall’utente di modificarli “per sbaglio”. Altra nozione fondamentale `eche in tutti i sistemi GNU Linux la differenza tra maiuscole e minuscole `erile- vante: sia i comandi, sia i file `erilevante la presenza di caratteri maiuscoli e bisogna scrivere sempre con attenzione i nomi, tanto che sulla stessa cartella possono persino esistere file con lo stesso nome se scritti con lettere con maiuscole/minuscole diverse.

3.1 Gestione di cartelle e file

Lo standard per il file system usato in tutti i sistemi GNU Linux si chiama FSSTND, che impone uno standard per l’organizzazione dell’albero delle directory nei sistemi: viene usato per la facilit`adel porting del software per GNU Linux e l’amministrare dei sistemi, dato che tutto si trova nel posto designato per qualsiasi distribuzione che usa questo stardard. Per essere precisi, non c’`enessuna autorit`ache impone di uniformarsi a questo schema, ma `e molto raro trovare distribuzioni che non rispettano. Ulteriori informazioni sui singoli file possono essere trovate in altre parti di questo documento o nelle pagine man dei comandi. L’albero delle directory completo `econcepito in modo che possa essere diviso in parti pi`upiccole, ciascuna sulla sua partizione o nel suo disco se necessario, per ottimizzare i dischi e ridurre le dimensioni delle partizioni. L’albero delle directory `estato strutturato in modo che funzioni bene in una rete di macchine Linux che condividano delle parti del filesystem su un dispositivo a sola lettura (ad esempio un CD-ROM), o sulla rete con NFS. La struttura del filesystem si basa su una radice che viene chiamata root e viene sempre indicata con il carattere / questa cartella `especifica per ciascun sistema e rappresenta l’intero sistema: contiene tutti i file necessari per avviare il sistema e per portarlo ad uno stato tale da poter gestire tutte le altre memorie e tutti i dispositivi. Si pu`o affermare, anche se in maniera un po’ superficiale, che la root sostituisce quello che nei sistemi MS Windows `eil ”Risorse del computer”, infatti in Linux non potete trovare i dischi (C,D,E, ecc..) ma si possono trovare le principali sottodirectory:

15 CHAPTER 3. CONFIGURAZIONI BASE 16

/bin: Contiene i programmi di sistema utilizzati sia dall’amministratore che dai normali utenti, come ad esempio: ls, cat, cp

/boot: Contiene tutto quello che `enecessario per eseguire il processo di boot del kernel (l’immagine vmlinux e la initrd), configurata in fase di installazione di GRUB

/dev: Contiene i riferimenti a tutti i dispositivi e le periferiche (HarkDisk, CdRom, stampanti, rete, ecc...) /etc: Contiene i files di configurazione degli applicativi e i demoni presenti nel sistema /home: Contiene le home directory degli utenti, cio`ele informazioni e i file di ogni utente /lib: Contiene le librerie necessarie al boot del sistema e all’esecuzione dei programmi /mnt: Inizialmente `evuota, come standard viene usata per effettuare il collegamento (mount) di tutte le unit`adi memoria presenti (HardDisk, cdrom, memorie usb, ecc.. ), talvolta `epossibile trovare anche la cartella /media che tipicamente viene usata solo per i dispositivi rimovibili (CdRom, Floppy, USB Disk).

/opt: Dovrebbe essere vuota perch`enon pi`uusata, in passato veniva usata per gli applicativi del sistema base /proc: Contiene i riferimenti ai programmi in esecuzione (anche i processi in esecuzione vengono trattati come file) /root: La home directory dell’utente root /sbin: Contiene i programmi di sistema (system binaries) utilizzati dall’amministratore /srv: Contiene alcuni file di configurazione /sys: Contiene dei file di sistema /tmp: Cartella dei file temporanei (ogni volta che si spegne il pc questa cartella viene svuotata) /usr: Contiene le applicazioni (non di sistema) installate nel sistema /var: Contiene vari files di sistema come i log e le carelle della posta

3.1.1 Diritti sui file Nei sistemi Unix e GNU Linux esistono tre tipi di diritti su un file: scrittura, lettura ed esecuzione rispettivamente identificati con la lettera , w, x. Ogni file, quindi ogni cosa nel sistema, appartiene all’utente che ha creato quel file che ha sempre i tutti i diritti su quel file. Per ottenere i diritti su un file basta eseguire il comando sulla shell $ ls -la che elenca i diritti in una schermata simile a questa: drwxr-xr-x 2 alnao alnao 4096 2 feb 14:09 DIR1 -rw------1 alnao alnao 2615 2 feb 16:28 file1 -rw-r--r-- 1 alnao alnao 1162966 2 feb 19:50 file2 -rwxr-xr-x 1 alnao alnao 1162966 2 feb 19:50 file3 la prima riga descrive una directory, la si pu`oriconoscere dal fatto che la prima lettera `euna d, i successivi tre caratteri sono indicati i diritti sull’utente che ha creato quel file, il secondo gruppo di tre si riferisce agli utenti dello stesso gruppo dell’utente creatore del file, mentre l’ultima tripletta descrive i diritti di tutti gli altri utenti. Se `e presente la lettera significa che il diritto `eattivo mentre se c’`eil trattino vuol dire che il diritto che dovrebbe essere presente non `eattivo. Da notare che l’utente root root ha sempre tutte le autorizzazioni quindi riuscir`asempre a leggere e a scrivere su tutti i file e su tutte le cartelle. Per cambiare i diritti su un file si pu`ousare il comando chmod, nell’appendice vengono elencati tutti i parametri di questo comando. Da notare che il diritto x sostituisce l’estensione su altri sistemi, infatti le estensioni non hanno significato quindi per capire se un file `eeseguibile o meno bisogna osservare questo diritto.

3.2 La shell e i desktop

Per eseguire le configurazioni base bisogna usare la riga di comando che in informatica viene comunemente chiamata shell e pi`uin particolare noi abbiamo a disposizione il tipo chiamato bash, non bisogna fare confusione: con shell si intende una riga di comando mentre bash `el’interprete dei comandi, in questo manuale faremo sempre riferimento a bash e non verranno introdotte altre tipi di shell anche se in altri manuali potete trovare guide pi`u complete di bash e di altri tipi di shell per GNU Linux. Tipicamente nelle architetture basate sul KernerLinux con la bash sono disponibili 8 “canali” detti anche tty (abbreviazione di TeleTYpewriter), nei sistemi basati su GNU CHAPTER 3. CONFIGURAZIONI BASE 17

Linux il primo canale `eusato dal KernelLinux e in questo canale compaiono i messaggi del sistema mentre il server grafico tipicamente si trova nel settimo canale, nella versione 10 di Debian il server grafico viene caricato al secondo canale mentre nel primo c’`euna seconda versione del server grafico se si vuole utilizzare la funzionalit`amultiutente; `epossibile passare da un canale ad un altro con la sequenza di tasti ALT + CTRL + F1 dove l’F1 `eil numero del canale (ovviamente per il settimo canale si pu`ousare F7). Il server grafico viene chiamato X-WindowSystem o pi`usemplicemente spesso indicato con X, gestisce l’interfaccia utente ma bisogna ricordare che non esiste un unico desktop: esistono diversi desktop che possono essere installati ed usati anche parallelamente, per passare da un desktop ad un altro basta selezionare il tipo nella schermata durante la fase di login all’avvio del sistema; tranne per qualche raro caso, tutte le applicazioni, possono essere eseguite da qualsiasi tipo di desktop perch´etutte le applicazioni si basano sulle librerie del server grafico X (come le librerie Xlib, GTK e ), nel prossimo capitolo verranno elencate e descritte le pi`uimportanti e utili programmi per GNU Linux. Da dentro un desktop grafico `epossibile accedere alla shell-bash con i programmi che tipicamente si trovano con il nome di terminal o console, come lxTerminal oppure per il desktop KDE. I principali desktop per GNU Linux basati sul server grafico X sono: GNOME, KDE e XFCE mentre quelli leggeri e studiati per essere veloci sono MATE e LXDE, `econsigliato di provarli tutti per un po’ di tempo per avere una scelta pi`uaccurata, `epossibile anche provare i nuovi componenti grafici di Gnome chiamati Gnome Shell con il comando $ gnome-shell --replace oppure `epossibile attivarle nel pannello di controllo di Gnome stesso.

3.3 Montaggio delle partizioni

Una delle esigenze primarie di ogni utente `equello di poter accedere ai propri dati che sono salvati nei vari dischi, gli utenti di altri sistemi operativi sono abituati a identificare le memorie fisiche con delle lettere come C, D, E, ecc... mentre nei sistemi GNU Linux la gestione delle partizioni e delle periferiche di memoria `ecompletamente diversa: la gestione viene chiamata mounting (in Italiano spesso viene tradotto con montaggio), nome che deriva dal comando mount che viene utilizzato per eseguire le configurazioni, infatti le memorie vengono viste dal Kernel Linux come un normale file dentro alla cartella /dev/ e, attraverso il comando mount, si possono collegare ad una cartella per permettere l’accesso al contenuto della memoria. I file che si trovano dentro alla cartella dev non rappresentano tutta la memoria fisica ma rappresentano una partizione, cio`ese in una memoria ci sono pi`upartizioni significa che sono presenti pi`ufile che devono essere montati separatamente. Tipicamente questi file hanno il nome del tipo hda1, hda2, hdb1, hdc1, hdd1 oppure sda1, sda2, sdb1, dove la prima lettera del nome rappresenta il tipo con h=EIDE s=SATA, la seconda lettera `esempre d che significa DISK mentre la terza lettera `eun incrementale se ci sono pi`udispositivi dello stesso tipo (se ci sono due HardDisk il primo sar`a“a” mentre il secondo sar`a“b”), il numero finale rappresenta la partizione all’interno della stessa memoria fisica. Per poter sapere l’elenco delle partizioni e la struttura delle memorie si pu`ousare il programma gparted dal desktop da installare oppure con il comando # fdisk -l Questi programmi presentano l’elenco di tutte le partizioni e, se possibile, anche il tipo, con gparted `eanche possibile modificare. Nei desktop recenti, il mount risulta automatico, per esempio con un programma come , l’elenco dei dispositivi fissi (come gli hardDisk interni) e i dispositivi mobili (come le chiavette USB) sono elencate nelle risorse ma a volte `enecessario eseguire il mount manualmente. Per poter eseguire il mount manualmente, bisogna disporre di una cartella vuota che sar`ala destinazione dell’operazione di montaggio, come default viene usata una sotto-cartella di /mnt . Per esempio si pu`ocreare una cartella a mano da un file manager oppure da riga di comando con le istruzioni # mkdir /mnt/Dati # chmod 666 /mnt/Dati da notare il comando chmod assegna a tutti gli utenti la possibilit`adi accedere a tale cartella, questo `eindispens- abile altrimenti solo l’utente root potrebbe accedere alla memoria montata. Ora siete pronti per lanciare il vostro montaggio, con il comando dalla shell: # mount -t auto /dev/sda2 /mnt/Dati con questa istruzione viene montata la partizione hda2 sulla cartella Dati, come parametro mount ha bisogno anche di sapere il tipo di Filesystem della partizione (come ad esempio Fat32, Ext3, NTFS) ma esiste anche il parametro auto che ci semplifica la vita lasciando al sistema il compito di selezionare quello corretto. Il problema del comando mount `eche, allo spegnimento o riavvio del sistema, il montaggio NON verr`arieseguito automaticamente, nella prossima sezione saranno configurati i mount in maniera permanente. CHAPTER 3. CONFIGURAZIONI BASE 18

3.3.1 Montaggi permanenti Eseguire manualmente il mount da riga di comando ogni volta che si avvia il sistema `epalesemente una cosa noiosa e scomoda, esiste il modo per rendere queste operazioni automatiche: per rendere definitive queste impostazioni esistono vari modi ma tutti quanti modificano il file di configurazione /etc/fstab questo `eun file storico dei sistemi GNU Linux e si trova sempre nello stesso posto fin delle prime versioni del sistema, da notare che questo file `esprovvisto di estensione e si trova nella cartella /etc, per modificare questo file da desktop si pu`oavviare come utente root un editor con: # gedit /etc/fstab & e si pu`ovedere il contenuto del file che all’apparenza complicato ma basta sapere che ad ogni riga corrisponde una memoria “montata”, nel file infatti basta aggiungere una riga per ogni partizione, per esempio: /dev/sdb3 /mnt/Dati ext4 user,suid,dev,rw,exec 0 0 dove nella riga sono elencati in ordine: il punto di mount (sorgente e destinazione), il tipo di partizione (con la possiblit`adi inserire il valore auto) e i vari parametri della partizione, nel nostro esempio “umask=000” oppure “rw” indicano che la partizione `ein scrittura e lettura. Per le partizioni di formato GNU Linux come ext non serve indicare l’umask. Per le chiavette USB o memorie rimovibili si configura la riga: /dev/sdd1 /mnt/Usb auto user,suid,dev,exec,umask=000,rw,noauto 0 0 con il parametro noauto si indica che il mount non deve essere eseguito automaticamente all’avvio del sistema ma deve essere caricato manualmente. Per rendere effettive le modifiche del file fstab bisogna riavviare il sistema. Nelle ultime versioni di Debian questa operazione viene eseguita durante la fase di installazione e, una volta terminata l’installazione del sistema base, `epossibile vedere il file gi`aben configurato con tutti i parametri. Da notare che i lettori DVD/CD “mnt” ma, tipicamente, vengono montate sulla cartella “media” per separare le memorie fisse da quelle rimovibili.

3.4 Gestione dei pacchetti di Debian

E’ impossibile utilizzare un sistema Debian senza conoscere almeno le basi della gestione dei pacchetti: si tratta di un argomento fondamentale per chi vuole usare un sistema i pacchetti sono un insieme di file organizzati e compressi in directory in modo che possano essere installati nel sistema velocemente e con ordine; esistono molti modi di compilare e preparare i pacchetti, Debian ha imposto da anni un suo standard che `efacilmente riconoscibile per i file di estensione deb mentre altre distribuzioni possono avere altri formati come rpm. Debian `emolto famosa per la gestione eccellente dei pacchetti perch´epur contando oltre 25.000 pacchetti riesce a gestire le dipendenze in modo semplice e ordinato, in quanto ogni pacchetto ha una versione e una lista di dipendenze, cio`eogni pacchetto al sup interno ha l’informazione di quali pacchetti sono necessari e con i quali entra in conflitto, per esempio il pacchetto apache2-mpm-prefork dipende dal pacchetto apache2.2-common e entra in conflitto con il pacchetto apache2-mpm, tutto questo dipende anche delle versioni, cio`eogni pacchetto `esegnato anche da una versione, per esempio nel mio sistema `einstallato il pacchetto apache2-mpm-prefork alla versione 2.2.8-3: questo vuol dire che il pacchetto `ealla versione 2.2.8 ma `ela terza compilazione del pacchetto. Per fortuna i programmi che andremo ad usare gestiscono automaticamente con ordine e precisione i pacchetti quindi l’utente non deve mai preoccuparsi di risolvere le dipendenze. La gestione di Debian si basa su DPKG (che `el’abbreviazione di Debian PacKaGe), componente principale della distribuzione Debian: `eusato per installare, disinstallare ed ottenere informazioni sul singolo pacchetto in formato standard deb. Questo `eun tool di basso livello e viene sempre affiancato da Advanced Packaging Tool, conosciuto come APT, che `eil gestore standard di pacchetti software della distribuzione Debian. Con APT `epossibile anche configurare diversi mirror-sorgenti di pacchetti (sorgenti remote in internet, cdrom, DVD). Tutti i comandi dei due programmi sono:

• # apt-get update aggiorna la lista dei pacchetti dopo la configurazione di un nuovo mirror • # apt-get install nomepacchetto installa il pacchetto nel sistema, scegliendo l’ultima versione disponibile ed risolvendo le dipendenze in maniera automatica (installando i pacchetti necessari e togliendo i pacchetti in conflitto)

• # apt-get remove nomepacchetto rimuove il pacchetto e tutti i pacchetti che dipendono da esso

• # apt-get --purge remove nomepacchetto rimuove il pacchetto e tutti i pacchetti che dipendono da esso compresi anche tutti i file di configurazione eventualmente presenti

• # apt-get upgrade aggiorna tutti i pacchetti se sono disponibili aggiornamenti e verifica tutte le dipendenze delle nuove versioni CHAPTER 3. CONFIGURAZIONI BASE 19

• # apt-get clean cancella tuti i file temporanei di apt-get cio`ei file deb scaricati e gi`ainstallati • # apt-get install -f verifica che tutti i pacchetti siano installati e configurati correttamente, in caso di errori sistema automaticamente le dipendenze

• # dkpg --configure -a come il precedente ma funziona anche in casi estremi e risolve tutti i problemi di conflitto tra i pacchetti

• # dpkg-reconfigure pacchetto riconfigura un pacchetto gi`ainstallato • # dpkg -i pacchetto installa un pacchetto da un file deb • # dpkg -r pacchetto rimuove un pacchetto • # dpkg --get-selections > nomefile.txt salva su un file l’elenco dei pacchetti installati • # dpkg --set-selections < nomefile.txt imposta (installandoli) i pacchetti presenti sul file (ovviamente non installa pacchetti gi`apresenti)

• # apt-get moo regala all’utente un simpatico messaggio La lista dei mirror-sorgenti `eelencata nel file /etc/apt/sources.list e da tutti i file contenuti nella sotto-cartella /etc/apt/sources.list.d si possono creare dei file con estensione list per aggiungere altri mirror specifici. In questi file list, ad ogni riga corrisponde una sorgente che pu`oessere un DVD, un mirror in internet oppure una cartella del sistema locale. Ogni riga di questi file `edel tipo deb http://host/debian distribuzione sezione1 sezione2 sezione3 deb-src http://host/debian distribuzione sezione1 sezione2 sezione3 La prima parola di ogni riga (deb o deb-src) indica il tipo di archivio: se contiene pacchetti binari (deb) oppure indica se l’archivio contiene i pacchetti sorgente (deb-src), la seconda parte della riga indica l’indirizzo della sorgente. Nel terzo parametro si indica la distribuzione : di solito si tratta di uno dei tre rami di sviluppo: stable, testing o unstable, oppure `epossibile indicare esplicitamente il nome della versione come etch, sid o sarge). L’elenco delle sezioni indicano quali parti della distribuzione dovranno essere gestite, tipicamente si trova main (i pacchetti completamente liberi) oppure non-free (cio`ei pacchetti rilasciati sotto una licenza non libera) oppure contrib (pacchetti liberi che per`odipendono da altri non liberi). Al termine di ogni modifica del file `enecessario lanciare il comando: # apt-get update In precedenti versioni di questo documento si indicava all’utente di modificare manualmente i file di list per inserire i mirror manualmente, questa operazione manuale `estata sostituita da operazioni che verranno introdotte man mano che sar`anecessario installare pacchetti specifici non compresi nei mirror ufficiali di Debian che sono inseriti in automatico all’installazione del sistema base. I gestire APT e DPKG non sono stati studiati per essere interfacciati graficamente, quindi sono stati sviluppati e sono presenti in Debian diversi strumenti grafici che permettono di gestire i pacchetti attraverso una interfaccia grafica che pu`orisultare pi`uintuitiva all’utente meno esperto: il pi`uimportante programma per desktop per la gestione dei pacchetti `e Synaptic che spesso si pu`otrovare nei men`uanche con il nome di ”Gestore pacchetti”, la potenza di questo programma `ela semplicit`ad’uso rispetto ad altri programmi simili come Aptitude e Adept che sono molto pi`upoveri di funzioni. Con Synaptic `epossibile vedere la lista dei pacchetti divisi in sezione per argomento (sistema, grafici, editor,...), per stato (installati, aggiornabili, non installati, corrotti), per origine (DVD, debian.org, mfgames.com, ecc...) e la possibilit`adi cercare i pacchetti con una semplice ricerca testuale sui nomi e sulle descrizioni dei pacchetti stessi. La comodit`aprincipale di questo programma `ela possibilit`adi gestire gli aggiornamenti del sistema con un semplice click su pulsante.

3.5 Il pannello di controllo WebMin

Nei sistemi Debian `epossibile trovare diversi programmi che permettano la configurazione del sistema, nei vari menu dei desktop si possono trovare diverse voci all’interno della categoria Strumenti di sistema per`oper GNU Linux `estato sviluppato un potentissimo programma per il controllo generale: WebMin che prevedete moltissimi moduli al proprio interno e permette all’utente di amministrare tutti i componenti del sistema, uno dei grandi vantaggi di questo pacchetto `eche si tratta di una applicazione web quindi viene usata tramite browser anche da remoto. Rispetto alle precedenti versioni, WebMin non `epi`uall’interno dei mirror ufficiali di Debian e quindi bisogna configurare un Mirror esterno con i comandi: # apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl CHAPTER 3. CONFIGURAZIONI BASE 20

apt-show-versions python apt-transport-https # cd /etc/apt/sources.list.d/ # echo "deb http://download.webmin.com/download/repository sarge contrib tee webmin.list # wget http://www.webmin.com/jcameron-key.asc # apt-key add jcameron-key.asc # apt-get update # apt-get install webmin con questi comandi abbiamo installato dei pacchetti propedeutici, abbiamo scaricato il file list del mirror e la sua chiave di sicurezza, poi con il comando di apt abbiamo aggiornato l’elenco dei pacchetti e installato il programma. Dopo l’installazione `epossibile gi`avedere se `edisponibile e funzionante con il comando: # systemctl status webmin Se non dovesse essere avviato `epossibile lanciare lo start con il comando: # systemctl start webmin Per poter accedere al pannello di controllo basta lanciare da un browser l’url: https://localhost:10000/ questo url potrebbe essere bloccato dal firewall di Debian, per sbloccare l’indirizzo `enecessario lanciare i comandi: # firewall-cmd --permanent --add-port=10000/tcp # firewall-cmd --reload # systemctl restart firewalld # ufw allow 10000/tcp # ufw reload da notare che dentro le ultime versioni di Webmin, c’`ela possibilit`adi collegarsi alla console shell con l’icona > presente nel men`udi sinistra al tab ”dashbord” questo permette di usare il terminale da remoto e da web.

WebMin `euno strumento molto potente ma anche troppo! Bisogna sempre prestare attenzione alle configurazioni eseguite e controllare pi`uvolte le operazioni potenzialmente distruttive per il sistema.

3.6 Login manager, processi e rete

Il programma di installazione prevede la creazione di un primo utente che viene utilizzato al primo accesso, attraverso i vari tool di controllo disponibili `epossibile creare e configurare altri utenti se necessario con la possibilit`a di raggrupparli e gestire l’accesso. Il gestore della login che compare all’avvio del sistema grafico si chiamata GDM (abbreviazione di Gnome Desktop Manager) esistono anche altri gestori ma `esconsigliato l’utilizzo per utente non esperti. La definizione base che un utente deve sempre aver a mente `eche tutto `eun file, sorprender`amolto gli utenti meno esperti ma anche i processi e i programmi in esecuzione sono visti come file, potete vederli e ”toccarli” accedendo nella cartella /proc: il sistema di permessi del KernerLinux permette ad un utente di vedere solo i processi da lui lanciati mentre l’utente root pu`ovedere tutti i processi in esecuzione. Ogni processo `erappresentato da un file che contiene un numero identificativo (ID) che pu`oessere usato dai vari comandi della shell per gestire o interrompere il processo tramite i comandi term oppure kill, per chi usa un desktop `epossibile terminare un singolo programma con i vari gestori dei processi presenti nei men`udei desktop con il nome di Monitor di sistema mentre se `eutilizzata la shell `econsigliato l’uso del programma top che di fatto `eun piccolo task manager semplice ed efficiente. In GNU Linux tutte le interfacce di rete sono amministrate da due componenti del Kernel chiamate netfilter e iptables e possono configurate dalla shell oppure da programmi grafici compreso WebMin, dalla shell potete usare i comandi # ifconfig # route per avere delle informazioni sulle configurazioni base per`onei vari men`udei desktop potete trovare i programmi di gestione come Net configuration. Per le reti WiFi, i componenti base si chiamano wireless-tools e wicd (comando iwconfig) ma i due programmi principali per la gestione sono incompatibili e bisogna decidere quale dei due usare, io consiglio il primo che viene installato di default assieme ad iptables ma potete decidere per il secondo per installarlo vi baster`ainstallare i pacchetti # apt-get install wireless-tools network-manager-gnome oppure per il secondo # apt-get install wicd e lanciando il comando # iwlist scan potete visualizzare tutte le reti wireless che il vostro dispositivo riesce a trovare. Dovete per`oprima ricordarvi di configurare correttamente la vostra interfaccia WiFi (scheda interna o penna USB), l’elenco dei dispositivi compatibili `edisponibile all’indirizzo web https://wiki.debian.org/it/WiFi Chapter 4

Applicazioni

Uno degli errori pi`ucomuni degli utenti comuni `epensare che esistono applicazioni per il normale utilizzo di un computer, la verit`a`eche esistono migliaia di applicazioni che rendono i sistemi GNU Linux completi e perfettamente utilizzabili senza alcun problema. Basta infatti aprire il programma di gestione dei pacchetti Synaptic e usare la funzionalit`adi raggruppamento per categoria per rendersi conto delle migliaia di applicazioni disponibili nei repository Debian: oltre alla numerosit`adelle applicazioni, grazie a Synaptic, `epossibile sfruttare la gestione dei pacchetti di Debian per evitare il problema delle dipendenze quindi un utente non deve preoccuparsi di nulla e non deve nemmeno preoccuparsi del desktop utilizzando: tutte le applicazioni sono compatibili con tutti i desktop disponibili (KDE, Gnome, Xfce, Lxde, ecc...) e sar`apossibile passare da un desktop ad un altro utilizzando le stesse applicazioni senza notare differenze, tutto questo perch`ele librerie grafiche si basano sul demone grafico X e non sul singolo desktop. Tutti i pacchetti disponibili sui server mirror di Debian sono totalmente gratuiti e scaricabili dai mirror internet, su altri mirror non ufficiali `epossibile scaricare altri programmi gratuitamente, per esempio il mirror di Google permette il download e l’installazione del browser Chrome, mentre se un utente vuole acquistare e installare un programma a pagamento deve installarlo manualmente, per fortuna i produttori creano dei pacchetti Debian pregenerati gi`a installabili. Purtroppo non esiste un elenco completo ed ufficiale di tutti i programmi disponibili, questo perch´e i programmi vengono creati quotidianamente e certi progetti chiudono per l’insuccesso di una applicazione o la sua scarsa utilit`a,un elenco molto completo e mia personale fonte di ispirazione per questo capitolo `ela pagina disponibile al sito http://guide.debianizzati.org/index.php/Tabella_Software con tutti i link alle varie pagine di dettaglio.

4.1 Editor di testo

Gli utenti di GNU Linux devono aver bisogno di prendere confidenza con i file di testo per modificare alcuni vari file di configurazione, anche se pu`osembrare “antiquato” agli utenti meno esperti, in realt`a`emolto pi`usemplice e veloce di quanto possa sembrare. Sui sistemi basati su Debian `epossibile trovare facilmente alcuni editor di testo pi`uo meno complicati a seconda delle esigenze: per la shell da riga di comando esistono i famosi (e storici) programmi e , forse troppo complicati per utenti poco esperti, il programma pi`usemplice da usare `e pico che risulta molto semplice da usare visto che con la pressione del tasto CTRL `epossibile cambiare dalla modalit`aeditor a men`ue viceversa. Per gli ambienti grafici desktop sono disponibili vari programmi nei men`u,tipicamente ogni desktop ha il proprio programma di default ma nessuno vieta di usare altri programmi anche di altri desktop, per esempio il programma di default di KDE `e kEdit ma `epossibile usare anche i programmi di GNOME come gEdit oppure mousepad. Tuttavia il programma pi`ucompleto `e che, oltre ad essere un semplice editor di testo, pu`oessere usato per programmare grazie al suo plugin di riconoscimento dei linguaggi di programmazione oppure pu`oessere usato per la scrittura di documenti. Come gi`avisto pi`uvolte, i file possono avere nomi ed estensioni ad apparenza “strani” e molti file di testo non hanno estensione il classico “txt” che di solito si trova su altri sistemi operativi, dobbiamo sempre tenere a mente che sui sistemi basati su GNU Linux le estensioni non hanno molto valore se non per pura naming-convention o estetica: molti file hanno estensione “conf” e tipicamente si trovano nella cartella /etc o una sottodirectory ma alcuni file hanno nomi non parlanti o posso essere senza estensione come il file fstab.

4.2 Gestione dei file

Per esplorare e navigare tra le varie cartelle del sistema, oltre che alla riga di commando, `epossibile utilizzare i tanti programmi file manager, tipicamente ogni Desktop ha il proprio file manager di default e spesso in un desktop `e

21 CHAPTER 4. APPLICAZIONI 22 possibile trovarne anche pi`udi uno, il programma predefinito sul Desktop KDE `e e pu`oessere usato anche in altri desktop, anche se `eun programma molto vecchio `eancora usatissimo come file exploper ed `estato migliorato molto tanto da diventare uno dei miglioro programmi per muoversi tra le varie cartelle del sistema.La potenzialit`a maggiore `equella di poter visualizzare l’albero delle cartelle, inoltre nelle versioni pi`urecenti sono stati integrati anche un visualizzatore di immagini, un piccolo editor di testo e il sistema veloce per gestire i file archivi (come zip e tar), un semplice visualizzatore di file PDF `estato integrato proprio di recente anche se non `emolto pratico da usare, nelle impostazioni del programma nel men`uSettings `epossibile trovare e gestire tutti i vari plug-in. Grazie a Konqueror `epossibile anche gestire i pi`ucomuni protocolli di rete, per collegarsi ad un altro computer tramite il protocollo Samba basta inserire il comando: smb://nomeserversamba per collegarsi ad un altro computer di rete. Oppure si pu`ousare il classico: ftp://ftp.debian.org per collegarsi ad un server attraverso il protocollo ftp, oppure: sftp://ssh.sito.org per collegarsi attraverso il protocollo ssh/stp ad un server. Altra applicazione da provare `e dolphin che presenta una interfaccia molto semplice e veloce, pur non disponendo di plugin, rimane il pi`uintuitivo programma per navigare tra le cartelle, anche in questo programma sono disponibili i plugin per visualizzare l’albero delle cartelle, ovviamente questo `ecompatibile con tutti i Desktop e permette anche di avere una shell in basso alla finestra che segue l’utente nella navigazione dell’utente nelle cartelle. Ovviamente un utente pu`obenissimo usare un qualsiasi altro programma disponibile sui Desktop oppure basta aprire Synaptic per installarne decine, lo storico commander pu`oessere trovato con il nome di Midnight Commander oppure Gnome Commander.

4.3 Compressione dei file (Tar, Zip e Rar)

Gli standard di compressione del mondo GNU Linux si chiamano TAR, gz e bz), ma possono essere usati anche altri formati come i pi`ufamosi ZIP e RAR, per riconoscere in quale formato `ecompresso un file basta guardare l’estensione del file, da notare che le estensioni possono essere composte: per esempio un file pu`oavere estensione nomefile.tar.gz oppure il semplice nomefile.zip. Visto che rar `eun algoritmo proprietario e non free, per poterlo usare `enecessario installare i pacchetti rar, rar-2.80, unar e unace-nonfree che potete trovare nei repository ”non free” nel mirror. Per usare lo standard TAR da riga di comando, i principali comandi sono: $ tar -cf namefiletar.tar file1 file2 ... per creare un file non compresso nel formato tar $ tar -xf namefiletar.tar per estrarre un file non compresso nel formato tar $ tar -czf namefiletar.tar.gz file1 file2 ... per creare un file compresso nel formato tar e gzip $ tar -xzf namefiletar.tar.gz per estrarre un file compresso nel formato tar e gzip I principali parametri del comando tar sono: c per creare x per estrarre v per vedere la lista dei file contenuti in un TAR z per creare/estrarre un file compresso con gzip j per creare/estrarre un file compresso con bzip2 Z per creare/estrarre un file compresso con compress Per chi usa invece un desktop ci sono varie possibilit`a,il migliore programma che avete a disposizione `eun programma chiamato Gestore di archivi che potete trovare sul men`uAccessori di tutti i desktop (potete trovarlo anche con il nome file-roller), con questo semplice programma potete creare, comprimere e decomprimere file compressi in tutti i formati. Se invece usate Konqueror o Dolphin, potete usare il sistema integrato per la gestione dei sistemi di compressione chiamato che deve essere installato dal gestore dei pacchetti Synaptic e vi permetter`adi gestire tutti i formati con pochi click: basta cliccare con il tasto destro del mouse su file o directory per avere la funzionalit`a”Comprimi” o su un singolo file compresso per avere la funzionalit`adi decompressione.

4.4 Programmi per l’ufficio

Ci sono diversi suite che possono essere usati per l’ufficio, il principale gruppo di applicazioni per il mondo GNU Linux `estato per tanti anni il famoso OpenOffice.org che potete trovare sui repository, di default per`onon `einstallato ma potete invece trovare la suite ufficiale: LibreOffice che `euna versione pi`uleggera ma allo stesso tempo completa e funzionante, le due versioni differiscono di poco per un utente poco esperto quindi `econsigliato usare LibreOffice. Entrambi i pacchetti comprendono una serie di programmi per l’elaborazione di testi, fogli di calcolo, presentazioni, grafici e disegni, database e formule matematiche e sono compatibili anche con le altre suite per ufficio, tra cui CHAPTER 4. APPLICAZIONI 23

Microsoft Office. Una delle caratteristiche maggiori di questi programmi `eche rispettano gli standard ISO e quindi `epossibile salvare i documenti nei formati standard tra cui ODP e PDF. Questi in realt`anon sono le uniche suite per l’ufficio presente nella nostra distribuzione, per la gestione di progetti (project management) potete usare TaskJuggler con il quale potete creare documenti utilizzando un linguaggio di programmazione dichiarativo molto semplice (chiamato TJP). Per la contabilit`apotete provare GnuCash che registra i movimenti finanziari in modalit`adi libro giornale a partita doppia; altri programmi per la gestione delle finanze da provare sono kMyMoney, Grisbi e MoneyDance. Esistono molti programmi per la gestione aziendale, nonostante siano liberi e nonostante siano poco famosi, possono diventare molto utili per qualsiasi tipo di azienda o ufficio, tra i tanti ci sono Promogest, Passpartout, Phasis, Gazie-web, TeamMosaico e Openbravo, il consiglio `edi provarli per vedere le varie funzionalit`adisponibili.

4.5 Navigazione web e Mail Client

Nel mondo GNU Linux e Debian potete trovare moltissimi programmi per la navigazione internet e la gestione delle mail, il browser pi`ufamoso in assoluto per GNU Linux `eFirefox ma sui sistemi Debian, per questioni di policy sul software libero, `epossibile trovarlo anche con il nome di IceWeasel. E’ consigliato di installare da Synaptic anche il pacchetto flashplayer-mozilla se necessario avere il plugin per l’esecuzione dei flash e di installare il pacchetto totem-mozilla per la visualizzazione di video e filmati direttamente sul browser. Sui sistemi GNU Linux potete usare anche altri programmi come Amaya, Konqueror ed Epiphany. Per installare il browser Opera `enecessario aggiungere il repository proprietario e poi installare il pacchetto con i comandi: # wget -qO- https://deb.opera.com/archive.key | sudo apt-key add - # add-apt-repository "deb [arch=i386,amd64] https://deb.opera.com/opera-stable/ stable non-free" # apt install opera-stable Per il browser Google Chrome `econsigliato scaricare e installare la versione attuale: # wget https://dl.google.com/linux/direct/google-chrome-stable current amd64.deb # apt install ./google-chrome-stable current amd64.deb da notare che questa installazione va automaticamente ad aggiungere il repository per i successivi aggiornamenti. Nei repository ufficiali di Debian `edisponibile anche : un web browser open source da cui deriva Google Chrome, inizialmente l’idea di Google era quella di mantenere un solo progetto ma alla fine si sono creati due progetti paralleli che hanno sviluppi simili ma non uguali tanto che i browser hanno comportamenti non uguali. Per quanto riguarda i programmi per gestire le mail potete usare il programma di Firefox che potete trovare con il nome di Thunderbind Mail oppure con il nome IceDove, per`opotete usare anche altri programmi nativi come Evolution, Balsa, Gnus e Pine. I migliori programmi per le chat e l’instant messaging per GNU Linux sono Pidgin (ex Gaim), kMess e aMSN, per installare il programma Skype nel sistema basta scaricare e installare il pacchetto con i comandi: # wget https://go.skype.com/skypeforlinux-64.deb # wget apt install skypeforlinux-64.deb per`o`epossibile usare anche altri VoIP-client come Ekiga, WengoPhone e Asterisk. Per Discord basta scaricare il pacchetto dal sito ufficiale, con i comandi: # wget "https://discordapp.com/api/download?platform=linux&format=deb" -O discord.deb # dpkg -i discord.deb

4.6 Multimedialit`a

Anche per quanto riguarda la multimedialit`anei sistemi GNU Linux sono presenti moltissimi programmi, non solo per la visualizzazione dei video ma anche per l’editing video e sono disponibili plugin per tutti i formati; inoltre in tutte le distribuzioni sono presenti i programmi e i driver per vedere la TV con il computer, ovviamente questo `e possibile se, nel proprio pc, `epresente un dispositivo di acquisizione TV come le chiavette USB. Prima di tutto bisogna scaricare ed installare i Codec, cio`ele librerie necessarie per poter codificare i vari formati, per questa installazione basta usare Synaptic e controllare che i seguenti pacchetti siano gi`ainstallati nel vostro sistema:

• libavcodec57

• libavdevice57 • libdvdnav4 • libdvdread4 CHAPTER 4. APPLICAZIONI 24

• mpeglib (se presente) • libavformat57 • libxvidcore4 La base del sistema audio `eil sottosistema ALSA, responsabile di tutti i suoni prodotti dal sistema, ad oggi non ci sono pi`uproblemi per la compatibilit`acon le varie schede audio delle tante marche di computer quindi automaticamente il sistema installer`aALSA e vi installer`aanche una serie di pacchetti per l’uso della stessa scheda, compreso il programma per gestire i volumi e la riproduzione dei suoni base, `epossibile trovare la lista dei programmi nella categoria Multimedia. Per la visualizzazione dei video c’`el’imbarazzo della scelta: il pi`ufamoso `e Totem - Lettore Multimediale, lettore molto semplice e comodo, in tutti i desktop `eil programma di default. La lista dei player di file multimediali `elunghissima ed eviter`odi annoiare il lettore (come sempre ho cercato di fare in questo documento), sono elencati solo i programmi degni di nota: • VLC famoso player gratuito disponibile anche su altre piattaforme • Codeine programma molto semplice e con le scalette di produzione • KPlayer simile a Totem anche se incompleto in alcuni punti • programma per ascoltare musica avendo la possibilit`adi creare una playlist • Kaffeine buon programma per ascoltare musica • MPlayer player di video • Noatun player di video • gtk-recordmydesktop programma che permette di registrare il dekstop Per poter visualizzare i filmati nel formato di RealPlayer bisogna scaricare e installare il pacchetto disponibile sul sito RealPlayer, esistevano delle librerie che permettevano la visione dei file RealPlayer anche su Totem e su tutti i player di Linux ma sono stati rimossi perch`enon rispecchiamo le linee guida di Debian. Chi dispone di una scheda di acquisizione TV di tipo DDT (digitale terrestre) pu`otranquillamente vedere i canali: Debian contiene dei programmi per guardare la tv e registrare i propri programmi preferiti, una lista parziale dei programmi a disposizione: • kradio per ascoltare la radio • kdetv il pi`usemplice programma funzionante per vedere la tv • XawTV semplice anche con qualche bug • XdTV programma non ufficiale di Debian • KPlayer normale player che riesce anche a sfruttare una scheda tv riproducendo i canali • Zapping semplice programma per vedere la tv • MythTV `ecertamente il pi`ufamoso ed il pi`uusato Per GNU Linux esistono anche una lunga lista di programmi per la manipolazione e l’editing audio e video che si basano tutti sui comandi da riga di comando convert, i quattro programmi principali sono Sweep, Kwave, Audacity e Avidemux, i primi tre sono utili per modificare file audio come mp3, il quarto `eun semplice programma che serve per modificare, concatenare i file video, in particolare Avidemux `eun programma molto utile anche perch´e `ecompatibile con tutti i formati se i codec sono installati nel sistema. Per chi volesse creare il proprio DVD pu`o provare ad usare il programma mandvd, questo programma permette di aggiungere i tuoi video al progetto del DVD, assegnare un immagine per creare il tasto di selezione di ciascun video, creare dei video slideshow delle tue foto (con o senza musica di sottofondo); alla fine del progetto, si converte il tutto nella classica struttura DVD, e si sceglie se masterizzare il progetto con oppure creare un immagine ISO, scelta utile in caso ci sia la necessita di fare pi`ucopie. Per chi volesse invece rippare un DVD pu`ousare dvdriv, un piccolo programma di utilit`ache permette la copia di DVD su Linux. Per chi volesse installare ed usare spotify pu`oconfigurare il mirror ufficiale e installare il player con le istruzioni: # add-apt-repository "deb [arch=i386,amd64] http://repository.spotify.com stable non-free" # apt-get update # apt-get install spotify CHAPTER 4. APPLICAZIONI 25

4.7 Immagini e editing

Su Synaptic potete trovare un elenco completo di tutte le applicazioni disponibili su Debian per la visualizzazione e l’editing di immagini e foto, dovete tenere presente anche che ogni desktop manager ha il proprio programma di visualizzazione delle immagini, `econsigliato provare tutti i programmi gi`adisponibili prima di scegliere un uno specifico. Per prima cosa dovete sapere che lo standard di GNU Linux per le immagini `eil png anche se potete trovare e usare tranquillamente i formati jpg o gif. Tra i programmi per la modifica delle immagini `edisponibile il famoso programma GIMP (GNU Image Manipu- lation Program), che `eil pi`ufamoso programma di GNU Linux per la modifica delle immagini e uno dei pi`uusati al mondo visto che `edisponibile su tutte le piattaforme ed `ecompletamente gratuito, le ultime versioni sono veramente all’altezza dei rivali. Per la grafica 3D `edisponibile il famoso Blender mentre `epossibile usare Dia che permette di creare diagrammi di flusso, circuiti elettrici, grafici UML, diagrammi di rete, diagrammi E-R ed altri ancora. Per la gestione dello scanner sono disponibili i programmi sane e xSane ma `epossibile usare anche lo stesso GIMP.

4.8 Applicazioni varie

In questa sezione sono elencate tutte quelle applicazioni molto utili che non rientrano in nessun altra categoria gi`a presentata ma che meritano di essere brevemente descritte e provate. All’interno dei desktop manager principali `e possibile trovare installati automaticamente dei PDF reader per`osi possono installare programmi evoluti come kPDF e pdfedit, questo secondo permette di modificare file in formato PDF. Senza alcun dubbio K3B `ela migliore applicazione per GNU Linux per la masterizzazione di CD-ROM e DVD, sorprende sempre la velocit`ae la semplicit`ad’uso di questa applicazione anche se per masterizzare `epossibile scegliere anche altri programmi come GnomeBaker, Nero for GNU Linux, oppure i comandi da riga di comando cdrecord e growisofs mentre per creare dischi-video potete provare VCDImager. Per i servizi dropbox esiste il pacchetto dedicato ufficiale, purtroppo non `enei repository ufficiali `enecessario scaricare il pacchetto manualmente perch`enon esiste repository dedicato, per l’installazione veloce basta eseguire i comandi # apt install nautilus-dropbox $ wget -O - "https://www.dropbox.com/download?plat=lnx.x86 64" | tar xzf - $ ./.dropbox-dist/dropboxd al termine dell’installazione dovrebbe aprirsi automaticamente un browser per la autenticazione e la configurazione della cartella base del sistema di dropbox, al termine bisogna comunque riavviare. Se si usa il browser GNOME `enecessario installare la estensione topicons plus e il pacchetto libclouldproviders0 per visualizzare l’icona di dropbox nella barra del sistema. Per il controllo remoto dei sistemi `epossibile usare i vari programmi e protocolli: con i sistemi GNU Linux si usa il protocollo specifico RDC con i vari programmi di gestione come KRDC, `epossibile usare anche i protocolli di per collegarsi a sistemi Windows sempre con il programma KRDC oppure `epossibile installare ed usare teamviewer, bisogna per`oscaricare il pacchetto deb dal sito ufficiale ed installarlo manualmente con i comandi # apt-get install qml-module-qtquick-controls qml-module-qtquick-layouts # apt-get install qml-module-qtquick-dialogs qml-module-qtquick-controls # apt --fix-broken install # dpkg -i teamviewer 15.3.2682 amd64.deb

4.9 Giochi

A differenza di quello che si pensa, GNU Linux ha una grandissima variet`adi giochi ed `eormai superfluo dire che questi giochi possono funzionare indipendentemente dal desktop usato, questa lista comprende passatempi, come solitari e arcade, oppure giochi pi`ucomplicati, come gare d’auto e sparatutto, non poteva mancare anche una versione di Mame, il famoso emulatore di ROM di giochi delle vecchie console, ricordando che `eillegare giocare con queste ROM se non si possiede il gioco originale. Una lista completa di tutti i giochi disponibili `edisponibile nel sito ufficiale https://blends.debian.org/games/tasks/packagelist.it.html e una lista dei migliori: - SuperTux: versione di SuperMario con un pinguino (simbolo di GNU Linux) come protagonista

- SupertuxKart: semplice gare d’auto sempre con pinguini come protagonisti - KMines: versione di Minesweeper detto anche campo minato o fiorito CHAPTER 4. APPLICAZIONI 26

- FreeCiv: versione (molto semplice) di Civilization

- Flight Gear: simulatore di volo - Wormux: versione semplice di Worms - Torcs: gioco di gare d’auto 3D

- Nequiz versione di Quake - Urban terror gioco sparatutto, simile a Unreal Tournament, non disponibile sui mirror ufficiali - KSirk: versione di Tetris - Mame: motore per l’emulazione dei giochi-ROM arcade

Alcuni di questi giochi necessitano della accelerazione grafica quindi `enecessario installare i driver della scheda video (come ATI o NVIDIA), nella sezione dedicata `espiegato come installare questi driver. Il gioco Minecraft `e disponibile per GNU LINUX: dal sito ufficiale `epossibile scaricare che risulta molto veloce, una volta scaricata la versione basta lanciare il jar auto-installante per avere il gioco disponibile nel proprio sistema. Cedega `estato un progetto per far funzionare giochi e programmi compilati per sui sistemi GNU Linux, il progetto era a pagamento acquistabile direttamente dal sito ufficiale, purtroppo da qualche anno il progetto `estato abbandonato e non `epi`uconsigliato usare tale programma. Per i sistemi GNU Linux e Debian `edisponibile l’installer di Steam direttamente nei mirror ufficiali, purtroppo per`odisponibile solo per le architeture i386 e non per i sistemi a 64bit come i pi`urecenti, per installare il pacchetto infatti basta aggiungere l’architettura per poi toglierla se necessario: # dpkg --add-architecture i386 # apt-get update # apt-get install steam # dpkg --remove-architecture i386 E’ possibile installare anche il programma di EpicGames per l’installazione di giochi, prima di iniziare per`o`e necessario installare il famoso tool di wine con i pacchetti # apt-get install wine e wine-tools e poi bisogna configurare il repository # echo "deb http://download.opensuse.org/repositories/home:/strycore/Debian 10/ ./" | sudo tee /etc/apt/sources.list.d/lutris.list # wget -q https://download.opensuse.org/repositories/home:/strycore/Debian 10/Release.key -O- | sudo apt-key add - # sudo apt-get update # sudo apt-get install lutris poi basta scaricare il programma installer dal sito ufficiale di Epic e installarlo con il Apri con di wine. All’interno de Lutrus bisogna cercare Epic Games Store e procedere con la installazione indicando la home dell’utente. Alla fine di questo processo basta lanciare l’icona disponibile nel men`uper avviare il programma di Epic che poi permette di scaricare e installare i giochi nel sistema. L’installer di Epic potrebbe avere dei problemi perch`ewine presenta dei bug che impediscono il corretto funzionamento su alcuni sistemi Chapter 5

Demoni

In informatica non esiste uno standard che definisca esattamente cosa `eun server e cosa `eun servizio, la differenza spesso non `ecos`ıevidente e i termini vengono spesso confusi anche a causa di traduzioni non precisissime, in questo documento non sono presenti definizioni o trattati tecnici a riguardo e verr`ausato il termine textsfdemoni (deamon in inglese), termine usato quasi sempre nel mondo GNU LINUX. Con le dovute cautele prendiamo per vera la definizione pi`uusata cio`eche un demone `eun processo in esecuzione in background sempre attivo, senza il bisogno di un gestione diretta dell’utente e che risponde quando viene invocato, un esempio classico `eil demone CUPS che gestisce le stampe, questo rimane attivo in background e resta in ascolto finch`equalcuno non lo invoca lanciando una stampa. GNU Linux e Debian forniscono una numerosa proposta di demoni e anche di programmi per l’iterazione con i quelli attivi sul sistema, per esempio il programma netstat permette di monitorare l’interfaccia di rete e di elencare tutte le informazioni utili (socket aperti, routing tables, processi, ecc...) visto la maggior parte dei demoni `edisponibile via rete con i protocolli TCP/IP, per ottenere l’elenco completo di tutti i processi attivi in un sistema basta lanciare il comando: # netstat -l | grep tcp Per avere un quadro completo della situazione, bisogna anche guardare il file: /etc/services dove sono indicate tutte le porte numeriche ad una descrizione del servizio associato. Una caratteristica base di tutti i sistemi operativi derivati da Unix (tra i quali appunto GNU Linux e Debian) `e che qualsiasi elemento del sistema viene visto come se fosse un file, anche i demoni sono dei file anche se un bel po’ speciali e si possono osservare in maniera dettagliata: lo strumento principe per questo scopo `e lsof (LS Open Files), per esempio se con netstat abbiamo visto che netbios `earrivo sul nostro sistema, basta lanciare il comando: # lsof -i | grep netbios-ssn per avere la risposta: smbd 4089 root 21u IPv4 8082 TCP *:netbios-ssn (LISTEN) quindi `epossibile sapere che il demone netbios `ein realt`aun eseguibile di nome smbd ed `eattivo (in listening) nel sistema. E’ anche possibile lanciare il comando: # lsof -i | grep www per vedere se il demone Apache `eattivo nel sistema. Da notare che in GNU Linux quasi tutto `eun demone, il sistema di stampa e la condivisione di file in rete sono gli esempi pi`usemplici e in questo capitolo vedremo come installare i pi`usemplici e utili demoni disponibili nella nostra distribuzione, notare che quando abbiamo installato il sistema base, abbiamo gi`ainstallato alcuni demoni tra qui il demone grafico X (con i desktop) e il sistema della shell che usiamo per lanciare i comandi. Per quanto riguarda i demoni specifici di web-server e database vengono presentati nella sezione dedicata alla programmazione, in questa sezione sono presentati solo i demoni utili per l’utilizzo generico in modo da permettere ad un lettore di poter saltare il capitolo della programmazione se non interessato all’argomento.

5.1 Sistema di stampa (demone CUPS)

In GNU Linux la gestione dei servizi per stampare e la gestione delle stampanti come periferiche viene gestito dal progetto CUPS che mette a disposizione un insieme di demoni e programmi per stampare, il problema principale `eche non tutte le case produttrici di stampanti sviluppano driver per i sistemi GNU Linux, la situazione `emolto migliorata nell’ultimo decennio e ormai tutte le stampanti di ultima generazione hanno driver disponibili automaticamente su Debian oppure `epossibile usare un driver generico che funziona su tutti i modelli di una generazione. Il demone CUPS (acronimo di Common UNIX Printing System) `esemplice come installare tutte le applicazioni che abbiamo gi`a visto: con Synaptic bisogna installare i pacchetti cups, apsfilters e foomatic-db senza il pacchetto lpr che `eun

27 CHAPTER 5. DEMONI 28 sostituto molto vecchio di CPL. Una volta installato il tutto, basta aprire un browser e andare all’indirizzo: http:\\localhost:631\ per accedere al programma web di gestione del server di stampa. Da questa comoda interfaccia si possono gestire le stampanti (installarle, cancellarle, fermarle) e si possono anche gestire i processi di stampa. Oltre all’interfaccia web di CUPS, i vari Desktop manager mettono a disposizione vari programmi per la configurazione le stampanti ancora velocemente. Per condividere una stampante locale in rete basta installare anche SAMBA e dal condivisione potr`a essere configurata direttamente dal pannello di amministrazione.

5.2 Condivisione di rete (demone Samba)

Il servizio per la condivisione di file, cartelle periferiche in una rete LAN `ecompreso nel KernelLinux e non deve essere installato nessun pacchetto supplementare: il protocollo SSL `edisponibile grazie ai pacchetti openssh-server e openssh-client, tuttavia il protocollo ssh funziona solo tra sistemi Unix e GNU Linux mentre se disponete di una rete con computer che hanno installato un altro sistema operativo dovete usare il servizio di rete Samba che permette di condividere file e stampanti tra i vari sistemi operativi, per attivarlo vi basta installare il pacchetto Samba: il demone della condivisione con il protocollo NetBios usato dal sistema operativo MsWindows e anche dai sistemi operativi di Apple. La configurazione del demone pu`oessere fatta nel file specifico /etc/samba/smb.conf oppure tramite i programmi di configurazione. Modificando il file manualmente si pu`oinserire la sezione: [global] workgroup = nomeRete server string = Linux Samba Server %v netbios name = nomeComputer security = user dns proxy = no encrypt passwords = yes alla riga workgroup `eindicato il nome della rete o del dominio, in server-string una breve descrizione della rete che verr`avisualizzata nella rete, netbios-name `eil nome con cui gli altri punti raggiungeranno quest, le altre configurazioni devono essere copiate cos`ıcome indicate. Per aggiungere una cartella condivisa basta aggiungere il blocco di configurazioni [Dati] comment = Dati condivisa path = /mnt/Dati/ writeable = yes browseable = yes guest ok = no #guest ok = yes #valid users = singoloUtente #valid users = @gruppoUtenti #read only = no #guest ok = yes #guest only = no #create mask = 0666 #directory mask = 0777 dove il nome tra parentesi quadre sar`ail nome visualizzato sugli altri computer cos`ıcome il commento, su path si deve indicare la cartella locale, gli alti parametri sono molto autoparlanti, notare che le righe che iniziano con il carattere # sono tutti commenti e non sono attivi, sono presenti in questo esempio per elencarvele; `epossibile inserire pi`ucondivisione inserendo pi`ublocchi di questo tipo. Per le condivisioni delle stampanti basta aggiungere il blocco di configurazioni [printers] comment = All Printers path = /usr/spool/samba browseable = no guest ok = yes writeable = yes printable = yes Fino alle versione 8 di Debian era presente anche un software web per la configurazione di Samba ma swat `estato tolto dai repository quindi vi sconsiglio di installarlo perch`enon pi`uaggiornato. CHAPTER 5. DEMONI 29

Tipicamente il firewall di GNU Linux `econfigurato di default per bloccare tutte le connessioni ”sconosciute”, comprese le connessioni generate dalla rete nella LAN, quindi una volta configurate le condivisioni SAMBA `econ- sigliato di controllare il firewall: per abilitare la rete basta verificare che i nodi della rete (gli indirizzi IP) non vengano bloccati, in tal caso dovete abilitare gli indirizzi IP ad accedere al vostro sistema, potete usare il programma e inserire l’IP del vostro sistema nella sezione Trust per abilitare le condivisioni.

5.3 Systemd e i runlevel

Un runlevel `euno stato logico del sistema in cui `epossibile eseguire un insieme di operazioni, nei sistemi basati su Debian si usa lo standard SysV ed esistono 7 livelli, tutti i livelli sono basati su script eseguiti come link e contenuti in una cartella predefinita /etc/init.d questi script vengono usati anche per controllare i demoni: avviare un demone all’avvio del sistema e poi spegnere il demone prima dello spegnimento del sistema, nel dettaglio per esaminare come `ecomposta questa sezione basta osservare il contenuto della cartella # ls -la /etc/init.d/ questi script devono prevedere almeno uno dei tre parametri: start, stop e restart, eventualmente possono avere anche reload, stats e status; per esempio per avviare il demone apache basta lanciare lo script corrispondente con il parametro ”start”. Tutti questi script sono collegato con un link in alcune directory dedicare al singolo demone, questo per differenziare i vari comandi e permettere le esecuzioni degli script in maniera automatica al momento giusto. I livelli dei demoni sono : 0 = Quando il sistema si trova in questo in questo stato, vengono arrestati tutti i demoni, smontate le periferiche e viene preparato per lo spegnimento. 1 = In questo stato, `econsentito l’accesso ad un utente solo, e gran parte dei servizi non vengono avviati; `eusato prevalentemente per la manutenzione straordinaria del sistema. 2-5 = Modalit`aNormali: In Debian non esistono distinzioni tra gli stati 2, 3, 4 e 5 e viene lasciata all’utente la possibilit`adi modificarli. Di default viene utilizzato il 2. 6 = Quando il sistema si trova questo stato, viene preparato per un riavvio; avvengono tutte le cose indicate per il runlevel zero, ma viene inviato un segnale di reboot invece che di shutdown. S = Runlevel speciale, che viene eseguito sempre al boot della macchina, prima di passare al runlevel di default. Nelle precedenti versioni di Debian i runlevel erano configurabili tramite un sistema chiamato inittab e le config- urazioni del sistema erano indicate nel file /etc/inittab dove venivano definiti i comportamenti principali del sistema e per ogni riga del file: id:runlevel:azione:comando venivano definire le informazioni: id = identificativo di rappresenta di una voce specifica dell’inittab runlevel = quali runlevel deve essere analizzata l’istruzione, con uno o pi`urunlevel azione = l’azione da compiere (per es. ”wait” per attende il termine dell’esecuzione del comando, ”respawn” il co- mando indicato viene eseguito ciclicamente ogni volta che esso termina, ”boot” il comando viene eseguito durante il boot e il contenuto di runlevel viene ignorato); comando = il comando da eseguire. ed erano presenti gli script /etc/init.d/rcS con la funzione di invocare tutti gli script ”S*” (cio`efile che iniziano per S maiuscola) contenuti nella cartella /etc/rcS.d/ in ordine numerico/alfabetico; lo script /etc/init.d/rc si occupa di lanciare, in ordine numerico/alfabetico, gli script presenti in /etc/rcX.d/ partendo per quelli ”K*” per passare a quelli ”S*” e accetta come parametro il numero del runlevel. Il nuovo sistema di gestione introdotto con la versione 8, si chiama Systemd e sostituisce inittab, questo nuovo demone per la gestione centralizzata del sistema definisce alcuni comandi molto utili: $ systemctl la lista di tutti i demoni disponibili $ systemctl status mostra lo stato del sistema generale $ systemctl status apache2 mostra lo stato di un particolare demone # systemctl start apache2 lancia l’avvio di un demone # systemctl stop apache2 ferma immediatamente un demone in esecuzione # systemctl restart apache2 ferma e poi avvia un demone in esecuzione per maggiori informazioni sul questo sistema di gestione dei demoni `edisponibile la pagina ufficiale https://wiki. debian.org/systemd. Anche se `econsiderato deprecato dalla versione di Systemd, `eancora possibile usare il file /etc/rc.local CHAPTER 5. DEMONI 30 che contiene tutti i comandi eseguiti all’avvio del sistema, `esempre sconsigliato modificare questo per evitare di compromettere l’avvio del sistema e il corretto funzionamento del sistema ma se necessario `epossibile aggiungere righe con istruzioni da eseguire all’avvio dei demoni prima della riga ”exit 0”, per esempio `epossibile aggiungere la cancellazione di tutti i file dentro alle cartelle del cestino, questo `epossibile inserendo la riga #rm -r /home/alnao/.local//Trash/files/* Per amministrare al meglio questi componenti potete modificare i file e gli script a mano oppure io consiglio di usare il pannello webmin dove `edisponibile tutta una sezione per la gestione e la modifica dei componenti dei runlevel, nell’ambiente grafico `epossibile trovare l’applicazione rcconf disponibile sui repository Debian e quindi installabili tramite Synaptic.

5.4 Lo schedulazione crontab

Un demone base di tutti i sistemi GNU Linux si chiama crontab e permette la schedulazione e l’esecuzione di comando ad un orario e/o frequenze prefissati, tale demone viene lanciato in backgrouond all’avvio del sistema e si basa sul file di configurazione /etc/crontab per le voci di sistema (chiamate entry) e i file contenuti nelle cartelle: /etc/cron.d/ /var/spool/cron/crontabs in questa ultima cartella si trova un file per ogni utente dove sono contenute le schedulazioni personalizzate dall’utente visto che di default tutti gli utenti su Debian possono eseguire il comando crontab e possono schedulare script o programmi a meno che non siano censiti nel file /etc/cron.deny, tutti i job di ciascun file sono caricati in memoria e rimangono finch`enon il demone crontab non viene spento o riavviato. Ci sono alcune cartelle di Cron molto importanti: /etc/cron.hourly: in questa directory sono contenuti gli script da eseguire ogni ora /etc/cron.daily: in questa directory sono contenuti gli script da eseguire ogni giorno /etc/cron.weekly: in questa directory sono contenuti gli script da eseguire ogni settimana /etc/cron.monthly: in questa directory sono contenuti gli script da eseguire ogni mese La data/ora in cui vengono eseguiti gli script contenuti in queste directory `equella specificata nel file /etc/crontab In questi file ogni riga corrisponde ad un comando da eseguire e devono seguire il seguente schema: * * * * * comando dove in questo schema ogni carattere * corrisponde ad una ”colonna” di schedulazione: la prima colonna sono i minuti (indicata con m) con il range 0-59 la seconda colonna sono le ore (indicata con h) con il range 0-23 la terza colonna `eil giorno del mese (indicato con dom) con il range 1-31 la quarta colonna `eil mese (indicato con mon) con il range 1-12 la quinta colonna `eil il giorno della settimana (indocato con dow) con il range 0-6 dove 0 `ela domenica per esempio la riga 12 * * * * /mnt/Dati/daEseguire.sh esegue il comando tutti i giorni, a tutte le ore al minuto 12, oppure 30 * 7 * * /mnt/Dati/daEseguire.sh esegue il comando il settimo giorno del mese a qualsiasi ora ma al minuto 30 Si possono anche mettere combinazioni di numeri, per esempio un range indicando ”1-10” si indica tutti i minuti da 1 al 10; un elenco per esempio ”1,12,31” avvia ai minuti 1,21 e 31; indicare la frequenza per esempio ”*/2” indica da eseguire ogni due minuti, un esempio pratico `e: 6-12 */2 1,3,6,10 * * /comando/da/eseguire dove vengono indicati tutti i minuti da 6 a 12, ogni due ore, nei giorni 1,3,6,10 del mese, di tutti i mesi. Altro esempio */30 13,20 * 1-7,9-12 1-5 /comando/da/eseguire il comando verr`aeseguito nei giorni feriali (da luned`ıa venerd`ı)di tutti i mesi tranne agosto, alle 13,00 - 13,30 - 20,00 - 20,30. Quando si scrivono questi comandi bisogna ricordarsi di analizzare anche dove vengono eseguiti: di default vengono eseguiti in background e un utente eventualmente collegato al sistema non si accorge di nulla, per esempio se si vuole visualizzare la finestra ad una certa ora questa non verr`avisualizzata sul desktop se non si indicano i giusti parametri nel comando cron: prima del comando bisogna indicare ”DISPLAY=:0.0 ” che indica al cron di eseguire il comando indicato nel desktop attivo e non in background, in questo caso un esempio `e: 23 21 * * 1 DISPLAY=:0.0 /home/alnao/messaggio.exe Bisogna sempre tenere conto che cron esegue gli script al momento indicato solo se il sistema `eacceso e il server crontab `eavviato, se il sistema `espento o se il demone crontab viene arrestato, il comando non viene eseguito nemmeno quando crontab viene avviato successivamente. CHAPTER 5. DEMONI 31

Come indicato per altri demoni, anche questo demone pu`oessere facilmente configurato da WebMin senza la necessit`adi modificare il file a mano ma basta utilizzare l’interfaccia web per configurare il demone della schedulazione.

5.5 Controllo remoto

Per il controllo da remoto dei sistemi potete usare rdesktop che `ecompatibile con quello di MsWindows e potete provare il programma TeamViwever che permette di controllare da remoto in maniera indipendente. Uno dei programmi pi`uusati `e VNC, per installare VNC dovete installare i pacchetti x11vnc vnc-java impostare la password con il comando: # x11vnc -storepasswd poi dovete controllare sul vostro eventuale firewall se avete ”aperte” le porte 5800 e 5900, per avviare il server nella sessione corrente basta lanciare il comando $ x11vnc -forever -usepw per avviare il server vnc all’avvio del sistema bisogna modificare il file: /etc/gdm3/Init/Default e aggiungere la seguente riga prima del comando exit 0 (senza l’andata a capo): x11vnc -noxdamage -noxfixes -noxdamage -passwd PASSWORD -display :0 -forever -o /var/log/x11vnc.log -bg -rfbport 5900 Il pacchetto xrdp `euna implementazione per GNU Linux del protocollo RDP sviluppato da Microsoft, grazie a questo demone `epossibile utilizzare un sistema GNU Linux come server RDP quindi una postazione di un sistema di desktop remoto, dando la possibilit`aad un sistema Windows di collegarsi con il suo client di Remote-Desktop. Per funzionare correttamente, il sistema xrdp necessita del server grafico X e di un desktop manager configurato. Da notare che il collegamento con questo sistema non usa la stessa sessione, come con VNC, ma con Xrdp si crea una nuova sessione sfruttando la tecnica del multi-utente oltre all’ovvio multi-tasking. Dopo la installazione del demone bisogna attivare la sicurezza, perch`eil pacchetto base non imposta alcuna sicurezza e chiunque pu`ocollegarsi al sistema, per impostare la sicurezza basta modificare il file #nano /etc/xrdp/xrdp.ini e bisogna aggiungere la riga encrypt level=high Tipicamente la porta usata dal server `ela 3389, che nei sistemi GNU Linux `ebloccata, per sbloccarla basta modificare il file /etc/polkit-1/localauthority.conf.d/02-allow-colord.conf aggiungendo la riga ufw allow 3389/tcp Come client `epossibile utilizzare il programma Remmina, grazie al quale `epossibile utilizzare il protocollo RDP.

5.6 Altri demoni

In questa sezione sono brevemente elencati i pi`ucomuni demoni che possono essere installati e configurati su un sistema GNU Linux, un lettore interessato a questi demoni pu`ocercare maggiori informazioni nelle varie documen- tazioni ufficiali. Se si vuole installare un demone FTP, la scelta pi`usemplice `e ProFTPD che si installa semplicemente scegliendo il pacchetto proftpd- da Synaptic (oppure da riga di comando tramite apt), l’installazione del pacchetto il sistema configurer`aautomaticamente tutto con dei valori di default che permettono gi`adi usare il protocollo, grazie alle configurazioni base ogni utente di sistema pu`oaccedere con un client FTP alla home directory degli utenti (/home/username) con le credenziali del sistema. Se volete approfondire e configurare il server manualmente, il file principale delle configurazioni `e /etc/proftpd/proftpd.conf ma vi consiglio di usare WebMin per le varie configurazioni avanzate. Se si necessita di un Proxy per la vostra rete LAN, i sistemi GNU Linux dispongono di un server molto potente di nome Squid, ma vi sconsiglio di installarlo se non ne avete bisogno in quanto il server potrebbe rallentare il sistema anche se non lo utilizzate, questo demone ha una vasta variet`adi usi: rendere pi`uveloce un demone web usando una cache per richieste ripetute e fornisce un servizio di ottimizzazione per la cache di rete anche per l’uso di risorse condivise all’interno della rete e, infine, filtri sul traffico permesso o bloccato. Per quanto riguarda i sistemi di protocolli cifrati, Linux dispone di SSH (Secure SHell) che permette di stabilire una sessione remota cifrata ad interfaccia a linea di comando con un altro host. Il client SSH ha una interfaccia a linea di comando simile a quella di telnet e rlogin, ma l’intera comunicazione (ovvero sia l’autenticazione che la sessione di lavoro) avviene in maniera cifrata, per questo motivo, SSH `ediventato uno standard di fatto per l’amministrazione CHAPTER 5. DEMONI 32

remota di sistemi Unix e GNU Linux e di dispositivi di rete. SSH `esempre installato di default all’installazione del sistema base e potete usarlo (da rete), per attivare SSH su Apache (per attivare l’https) bisogna andare nella cartella /etc/apache2/mods/ e lanciare # a2enmod ssl e generare il cerficato ssl # apache2-ssl-certificate oppure # apache-modconf apache-ssl (dovrebbe creare due file nella cartella /etc/apache2/ssl/) per gestire tali certifi- cati conviene usare WebMin. Postfix `eun server mail e potete installarlo dal pacchetto omonimo e per le configurazioni conviene sempre usare WebMin oppure cercare i vari file di configurazioni a mano, per i servizi pop e imap `enecessario installare e configurare courier sempre tutto tramite WebMin, `econsigliato anche provare PostfixAdminm: una applicazione web per la gestione del server mail ma solamente se `everamente usato, altrimenti `esconsigliata l’installazione di un demone cos`ıpesante se inutile. Il famoso demone Mono `eil progetto di lunga data per far funzionare codice e programmi scritti con linguaggio Microsoft .NET negli ambienti GNU Linux, per installarlo consiglio di riferirsi alla documentazione ufficiale in quanto `eun progetto in continua evoluzione e presenta molto frequentemente aggiornamenti anche corposi, anche in questo caso `esconsigliata l’installazione se non usato. Chapter 6

Programmazione

In questo capitolo non sono esposte le varie teorie sulla programmazione e non `enemmeno una guida ai vari linguaggi di programmazione ma sono esposti solamente gli strumenti e i comandi che un programmatore ha a disposizione per lavorare e divertirsi (perch´edovrebbe essere anche un divertimento oltre che un lavoro) e sono presenti anche semplici esempi di codice nei vari linguaggi di programmazione solo per le verifiche base. La base della programmazione `ela scelta dell’editor e del SDK: anche i pi`usemplici editor testuali come Gedit e Mousepad, che mettono a disposizione la formattazione automatica dei vari linguaggi di programmazione: gli editor riconoscono dal tipo di file il tipo di linguaggio con cui dovrebbe essere scritto e il codice viene automaticamente formattato con colori e indentazioni, questa funzionalit`apu`orisultare molto comoda. Bisogna sempre ricordare che il linguaggio nativo con cui `escritto GNU Linux e la maggior parte dei programmi `eil C e il C++, tanto che la maggior parte delle API del sistema operativo sono scritte in questi linguaggi ed `e possibile trovare molta documentazione a riguardo in internet, tuttavia negli ultimi anni, con la diffusione dei nuovi linguaggi di programmazione, `epossibile lavorare in java, in perl o in pyton con la massima compatibilit`adelle API del sistema operativo. Oltre ai tradizionali linguaggi di programmazione possiamo scrivere semplici script per la shell in un linguaggio unico nel suo genere: sh che risulta il pi`uimportante linguaggio di scripting, verranno esposti alcuni semplici esempi. In questo capitolo `estata inserita anche la sezione riguardante il motore Qemu che `eun semplice ma efficace emulatore di macchine virtuali, indispensabile per alcuni programmatori come me che lavorano su varie piattaforme.

6.1 Programmazione della shell

Nei sistemi operativi GNU Linux `epossibile creare semplici ed efficaci script in un linguaggio chiamato sh, basta infatti creare un file con estensione sh, anche se l’estensione `einfluente `esempre buona norma usarla, il file appena creato deve essere impostato come eseguibile con il comando chmod: #chmod a+x file.sh Spesso questi script vengono usati per creare funzioni di installazione, oppure per semplificare la vita ad un utente creando dei veri e propri piccoli programmi per la gestione del sistema (per esempio gli script per l’avvio e l’arresto di un demone o di un singolo programma). I file di script si possono riconoscere semplicemente perch`einiziano per con: #! che indica al kernel che lo script `edirettamente eseguibile, e lo si fa immediatamente seguire a quel simbolo il nome della shell o del programma da eseguire, per esempio il pi`uusato `e sh e tutti gli script che usano sh iniziano con la prima riga #!/bin/sh In questo tipo di script, oltre a tuttu i comandi della shell, `epossibile usare le variabili utilizzando il suffisso $ e con i simboli $# si indicano i parametri arrivati da riga di comando oppure $- indicano le opzioni della shell oppure $$ indicano il pid del processo, per l’elenco completo delle variabili disponibili `epossibile cercare nelle varie guide on-line. Per interagire da riga di comando l’utente si pu`outilizzare il comando read per permettere all’utente di inserire dei valori da tastiera, per esempio un semplice programma: #!/bin/sh echo "Inserisci una frase "¸ read param echo param=$param C’`eanche la possibilit`adi creare funzioni con lo standard nomeFunzione () comando1; comando2; e anche la possibilit`adi utilizzare la programmazione strutturata con i comandi standard della programmazione, IF,

33 CHAPTER 6. PROGRAMMAZIONE 34

CASE, FOR, WHILE, ecc..., riporto qui un elenco dei comandi pi`ucomuni: #!/bin/sh if [ $# -ge 2 ] then echo $2 elif [ $# -eq 1 ]; then echo $1 else echo Nessun input fi case $1 in a|ab) echo A;; b) echo B;; c*) echo C;; *) echo D;; esac for file in *.old do newf=‘basename $file .old‘ cp $file $newf.new done while [ $# -gt 0 ] do echo $1 shift done Un piccolo esempio di script che io uso per eseguire il backup del mio sistema `e #!/bin/sh #backup.sh script di AlNao FileDest="/mnt/Dati/backup/"‘eval date +%Y%m%d‘"" echo "Informazioni sul sistema:" echo -e "hostname: $HOSTNAME" echo -e "hardware: $HOSTTYPE" echo -e "OS: $OSTYPE" echo "Informazioni sull’utente:" echo -e "logname: $LOGNAME" echo -e "homedir: $HOME" echo -e "shell: $SHELL" echo -e "path: $PATH" echo "Backup totale nella cartella $FileDest" mkdir $FileDest du -H -m -d1 /home/alnao/ > $FileDest"/homeAlnao.txt" df -a > $FileDest"/situazioneDischi.txt" cp -R /home/alnao/.thunderbird/ $FileDest"/thunderbird" echo "IceDove-thunderbird FATTO " cp /etc/apache2/apache2.conf $FileDest cp /etc/fstab $FileDest cp /etc/rc.local $FileDest cp /mnt/Dati/backup.sh $FileDest cp /home/alnao/.bashrc $FileDest"/bashrc.txt" cp /mnt/Dati/akane.sh $FileDest"/akane.sh" echo "File di Sistema FATTO " cp -R /mnt/Dati/AlNaoDebianHandBook $FileDest"/AlNaoDebianHandBook/" echo "AlNaoDebianHandBook FATTO " mysqldump -u root -p’A.1234qaz’ --opt MyDb > $FileDest"/MyDb.sql" mysqldump -u root -p’A.1234qaz’ --opt AlNaoWordpress > $FileDest"/AlNaoWordpress.sql" chmod 777 -R $FileDest"/" echo "Permessi impostati su 777 su tutta la cartella" echo "Finito" CHAPTER 6. PROGRAMMAZIONE 35

6.2 C e C++

I linguaggi C e il C++ sono i due linguaggi base di tutto il mondo GNU Linux e chiunque voglia scrivere e/o modificare programmi deve conoscere un po’ di questi linguaggi, il compilatore principale e pi`uusato `e g++ (g plus plus), che si trovare anche con il nome di gpp nell’elenco pacchetti. Il compilatore viene sempre installato in automatico nell’installazione del sistema base e non pu`oessere tolto perch`eserve a moltissime applicazioni e risulta spesso indispensabile per il funzionamento del sistema base. Esistono due metodi principali per eseguire la compilazione di un file C/C++: via terminale oppure utiliz- zare un ambiente di sviluppo integrato, per poter compilare dei sorgenti `econsigliabile installare il pacchetto build-essential infatti, dopo averlo installato, potete tranquillamente scrivere il vostro codice in un editor di testo qualunque, come Gedit, poi salvarlo con estensione .cpp per poi eseguire i comandi: $ g++ nomef.cpp comando che lancia la compilazione del file .cpp e, se la compilazione non da errori, genera un file chiamato a.out che `eil nostro eseguibile, per lanciarlo basta eseguire $ ./a.out ed ecco il nostro programma in esecuzione nel terminale. Essendo C e C++ molto usati in GNU Linux, esistono moltissimi ambienti di sviluppo grafici (IDE) che permetto all’utente di scrivere progetti, anche di grandi dimensioni, e di compilare senza dover usare la riga di comando, alcuni presentano anche dei correttori automatici, autocomplete (nel caso del C++) ed altre funzionalit`amolto utili, i pi`ufamosi sono , Kdevelop, e BlueFish anche se in realt`a`econsigliato utilizzare con l’estensione per C/C++ scaricabile dal sito ufficiale oppure Visual studio Code.

6.3 LAMP (Apache e Mysql con Php)

LAMP `eun acronimo che indica una piattaforma per lo sviluppo di applicazioni web che prende il nome dalle iniziali dei componenti software con cui `erealizzata: • Linux: il sistema operativo • Apache: il Web server • MySQL: il database management system • Php, Perl e/o Python: i linguaggi di scripting Anche se i primi tre componenti sono demoni vengono posizionati in questo capitolo in quanto `eimpossibile dividere i demoni Apache e Mysql dal linguaggio Php (o Perl). Per l’installazione di tutta l’architettura bisogna installare in sequenza i componenti del demone web Apache e del demone database MySql assieme alle librerie per il linguaggio PHP, la configurazione `emolto pi`ucomplicata di come `edescritta di seguito e lo scopo di questo documento `esolamente quello di mostrare una installazione funzionante con le configurazioni base, se vengono usati questi demoni in aziende per scopi commerciali `enecessario approfondire l’argomento affidandovi anche alla guida ufficiale di Apache e di Mysql nei rispettivi siti web, se invece un lettore non fosse interessato ad usare un demone web/database pu`obenissimo saltare questa sezione perch`el’installazione e l’uso del server Apache `euna cosa indipendente dal resto del manuale. Secondo alcuni articoli in internet il vero matrimonio del secolo `etra Apache-PHP-MySQL. Per l’installazione basta installare i pacchetti: # apt-get install apache2 mariadb-client mariadb-server php7.3 php7.3-mysql libapache2-mod-php7.3 A questo punto abbiamo gi`aterminato l’installazione in quanto i pacchetti sono gi`aauto-configurati per funzionare dopo l’installazione ed `epossibile verificare il funzionamento del demone web, andando all’indirizzo in un browser: http://localhost/ e dovrebbe comparire la pagina di benvenuto di apache dal titolo Apache2 Debian Default Page. Se un programmatore vuole configurare Apache inserendo una nuova cartella web deve andare a modificare i file di configurazione del server Apache, purtroppo non ho ancora trovato una applicazione in grado di farlo in maniera efficiente e completa questo perch`equesti file sono molto complicati. Per attivare una nuova applicazione web `e necessario modificare il file di configurazione di Apache /etc/apache2/apache2.conf controllando che nel file siano presenti le seguenti righe: ServerName localhost DirectoryIndex index.html index.cgi index.pl index. index.xhtml AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps e, se si vuole configurare la cartella per ogni utente CHAPTER 6. PROGRAMMAZIONE 36

UserDir public html Options Indexes SymLinksIfOwnerMatch IncludesNoExec notare che alcune righe potrebbero essere gi`apresenti ma precedute dal simbolo # che `eil simbolo per commentare una riga, in questo caso basta cancellare il carattere cancelletto. Con l’ultimo blocco `estato configurato una cartella web per ogni utente configurato nel sistema, cio`ebaster`a andare sulla home di un utente, creare una cartella con il nome public html e questo sar`aaccessibile dal web all’indirizzo: http://localhost/$\sim$nomeutente/ A questo punto, per rendere effettive le modifiche fatte sul file, dobbiamo riavviare il server con l’istruzione: # systemctl restart apache2 La cartella web virtuale di default `ela cartella /var/www/ ma `econsigliato non utilizzarla in fase di sviluppo ed `epossibile configurare sottocartelle: per creare una propria cartella web basta modificare il file di configurazione aggiuggendo Alias "/Php/""/mnt/Dati/Php/" Options Indexes FollowSymLinks Includes AllowOverride All Order deny,allow Allow from all Require all granted dove `estata creata una cartella web virtuale con il nome Php e che punta alla cartella /mnt/Dati/Php (bisogna sempre ricordarsi di prestare la massima attenzione alla differenza maiuscole/minuscole!). Dopo aver riavviato il server si pu`oaccedere alla nuova cartella web all’indirizzo http://localhost/Php/ Dopo aver configurare Apache si pu`oconfigurare anche il demone database MySql, che `edisponibile sui repository con il nome di MariaDB per questioni di tipo legali e copyright, abbiamo gi`ainstallato i pacchetti principali (mariadb- client e mariadb-server) quindi ci basta accedere per la prima volta alla console di mysql dalla shell con il comando $ mysql secure installation oppure impostando a mano le password di root con i comandi dalla console mysql use mysql; UPDATE user SET password=PASSWORD(’A.1234qaz’) where User=’root’; GRANT ALL ON *.* TO ’alnao’@’localhost’ IDENTIFIED BY ’A.1234qaz’; FLUSH PRIVILEGES; quit; poi bisogna riavviare il demone database con il comando # systemctl restart mariadb per rendere effettive le modifiche alla password di root. Altro piccolo script da eseguire per prova sul database `e: $ mysql USE test; SHOW TABLES; CREATE TABLE prova (Nome char(120), Sito char(120)); INSERT INTO prova (Nome,Sito) VALUES (’Alberto Nao’,’www.alnao.it’); SELECT * FROM prova; e il risultato dovrebbe essere questo: Nao Alberto www.alnao.it 1 row in set (0.01 sec) Con questi comandi abbiamo creato una piccola tabella nel database test, `estata inserita una riga sulla tabella e l’ultima query visualizza la riga appena inserita, in questo modo sono state eseguite tutte le istruzioni base del demone MySql. Per quanto riguarda PhpMyAdmin, dalla versione 10 di Debian, non `epi`udisponibile nei repository ufficiali e deve essere scaricato manualmente dal sito ufficiale https://www.phpmyadmin.net/downloads/ e posizionare il file scaricato nella cartella /opt/phpmyadmin/ poi bisogna eseguire alcuni comandi per la configurazione: # chmod 777 /opt/phpmyadmin # chown -Rfv www-data:www-data /opt/phpmyadmin CHAPTER 6. PROGRAMMAZIONE 37 poi nel file /etc/apache2/ports.conf bisogna aggiungere la riga Listen 9000 e nel file /etc/apache2/sites-available/phpmyadmin.conf bisogna aggiungere il pezzo ServerAdmin webmaster@localhost DocumentRoot /opt/phpmyadmin Options Indexes FollowSymLinks AllowOverride none Require all granted ErrorLog $APACHE LOG DIR/error phpmyadmin.log CustomLog $APACHE LOG DIR/access phpmyadmin.log combined e poi bisogna lanciare il comando # a2ensite phpmyadmin.conf Poi basta andare nel sito http://localhost:9000/ per usare il famoso tool php per MySql. Per poter permettere a PhpMyAdmin di caricare file di backup molto grandi bisogna modificare il file /etc/php/7.3/apache2/php.ini modificando il parametro upload max filesize e poi riavviare il demone apache con il comando /etd/init.d/apache2 restart Per quanto riguarda la programmazione Web con i linguaggi di scripting Php o gli altri linguaggi, ci sono moltissimi programmi grafici che permettono lo sviluppo, alcuni esempi sono: screem, BlueFish, QuantaPlus anche se `e consigliato l’utilizzo di Eclipse o Visual studio Code.

6.4 Java e Tomcat

Il rapporto tra GNU Linux e Java `esempre stato un po’ travagliato e in certe distribuzioni non si pu`oinstallare le versioni ufficiali del compilatore e della JVM, questo perch`ela Sun e Oracle, che hanno da anni i diritti sul linguaggio e sui compilatori, non hanno mai rilasciato versioni free ma solamente versioni proprietarie e alcune a pagamento, questo port`omolte distribuzioni a togliere le versioni ufficiali java e comprendere alcune JVM (Java Virtual Machine) alternative e libere (come Cacao, Javacc, Gcj). Fortunatamente, Oracle ha deciso di rendere libero delle ultime versioni della JVM, rilasciando alcuni componenti che sono stati aggiunti nelle liste ufficiali dei pacchetti Debian, questi pacchetti portano il nome sun-java oppure oracle-java e comprendono anche del codice sorgente di esempio e un semplice kit di development. L’ambiente Java runtime in Debian, cio`eil famoso JRE, si pu`otrovare nei pacchetti openjdk-6-jre,openjdk-7-jre oppure openjdk-8-jre a seconda della versione che volete installare, ma dovrebbe essere istallato in automatico all’installazione iniziale del sistema base, se volete installare nei browser la versione di JVM per le applet dovete installare i pacchetti icedtea-6-plugin o icedtea-7-plugin o icedtea-8-plugin, a seconda della versione di openjdk che avete installato. Per la programmazione java il primo e il pi`ufamoso SDK `eEclipse che pu`oinstallato direttamente da Synaptic nella lista dei pacchetti ufficiali ma il mio consiglio `equello di scaricarlo dal sito ufficiale e utilizzarlo senza nessuna installazione visto che tale passaggio non `eindispensabile e il programma si aggiorna da solo all’avvio. Se avete installato LAMP e volete aggiungervi anche il demone Tomcat per utilizzare le vostre applicazioni web che usano servlet e JSP, i passi da seguire sono veloci: Debian mette a disposizione dei pacchetti gi`apreconfigurati con delle impostazioni base adatte a chi vuole programmare in locale, `eovvio che Tomcat necessita di configurazioni avanzate se il server deve essere usato come server di produzione ma se volote usarlo come server di sviluppo potete sfruttare le configurazioni base che Debian vi mette a disposizione; dopo aver verificato di aver installato il LAMP correttamente, vi basta installare tutti i pacchetti che iniziano con il nome tomcat9 e l’installazione `eterminata, poi dovete modificare il file: /etc/tomcat9/tomcat-users.xml dove vengono censiti gli utenti che possono accedere alla console di amministrazione di Tomcat, per esempio dovete aggiugnere la riga: ovviamente all’interno del root-tag , fatto questo dovete riavviare Tomcat con il comando: CHAPTER 6. PROGRAMMAZIONE 38

# systemctl restart tomcat9 e provare ad accedere alla console all’indirizzo web http://localhost:8080/manager/html, potete installare le vostre applicazioni web sotto forma di file WAR (Web Application aRrchives) oppure nel formato EAR (Enterprise ARchives) oppure all’indirizzo http://localhost:8080/docs/manager-howto.html `epossibile trovare una piccola documentazione su Tomcat. Se usate eclipse per lo sviluppo di applicazioni Java J2EE, potete collegare il vostro ambiente di sviluppo con il server web per gestire il demone direttamente dalla vista Server di Eclipse, bisogna infatti configurare il server nelle preferenze ma, per praticit`ae semplicit`a,`econsigliato creare un duplicato del server installato: in questo modo ci saranno due demoni Tomcat attivi nel sistema: quello del sistema gi`aautoconfigurato automaticamente e quello gestito da eclipse in parallelo per lo sviluppo, per configurare questa logica basta creare una cartella di link virtuali da di comando: cd /usr/share/tomcat9 ln -s /var/lib/tomcat9/conf conf ln -s /etc/tomcat9/policy.d/03catalina.policy conf/catalina.policy ln -s /var/log/tomcat9 log ln -s /var/lib/tomcat9/common common ln -s /var/lib/tomcat9/server server ln -s /var/lib/tomcat9/shared shared chmod -R 777 /usr/share/tomcat9/conf e bisogna poi impostare nelle preferenze di Eclipse un server di tipo ”Tomcat 9” nella cartella /usr/share/tomcat9/bin successivamente nel workspace viene creato da Eclipse in automatico un progetto Servers con alcuni file di configu- razione del demone, in questo progetto `epresente un file server.xml dove `eindispensabile impostare le porte HTTP diverse da quelle di default perch`esono gi`aoccupate dal demone del sistema, per esempio basta cambiare 8080 in 8081 (per le applicazioni) e 8005 in 8082 (per la parte amministrativa del demone).

6.5 GIT

Il sistema GIT `eil programma per il controllo di versionamento e distribuzione pi`uusato al mondo, inizialmente proprio creato per la gestione degli sviluppi del KernelLinux, ad oggi `eusato in tutto il mondo anche delle grandi aziende per i progetti di grandissimi progetti. Il sistema pu`oessere installato con l’omonimo pacchetto e per la configurazione basta lanciare i comandi $ git config --global user.email "[email protected]" $ git config --global user.name "Your Name" per poi usare GIT per scaricare e inviare file basta lanciare i comandi $ git clone https://gitlab.com/name/name.git $ cd alnaowordpress $ touch README.md $ git add README.md $ git commit -m "add README" $ git push -u origin master `epossibile anche usare il plugin dedicato di Eclipse o Visual Studio Code per la gestione dei repository e la gestione dei commit/push. Inoltre esistono dei piccoli grandi tool grafici come git-cola o gitg, sono sicuramente da provare ed `eda notare anche la simpatica descrizione el gitCola in Synaptic.

6.6 NodeJS e NPM

Per gli sviluppi delle nuove tecnologie web i moduli pi`uutilizzati sono NodeJs e NPM che sono indispensabili per sviluppare con tecnologie come Angular e React, per l’installazione pu`oessere fatta con i pacchetti ufficiali con i comandi # apt-get install nodejs npm curl # curl -sL https://deb.nodesource.com/setup 12.x | sudo bash - # apt-get install -y nodejs # node --version # nodejs --version # npm install -g @angular/cli Per testare il funzionamento di angular basta creare il progetto vuoto con: $ ng new prova $ cd prova CHAPTER 6. PROGRAMMAZIONE 39

$ ng serve e poi andare all’indirizzo della applicazione web locale: http://localhost:4200/ Per testare il funzionamento di react basta creare il progetto vuoto con $ npx create-react-app prova $ cd prova $ npm start e poi andare all’indirizzo della applicazione web locale: http://localhost:3000/

6.7 Visual Studio Code

Oltre ad Eclipse pu`oessere utilizzato il programma di sviluppo Visual Studio Code, programma rilasciato da Microsoft gratuitamente anche per la piattaforma GNU Linux, per quasi tutti i linguaggi `eoggi il miglior programma gratuito e pu`oessere facilmente scaricato dal sito di microsoft, le istruzione per l’installazione variano spesso quindi bisogna sempre controllare alla pagina ufficiale https://code.visualstudio.com/docs/setup/linux la sezione dedicata a Debian. Ad oggi esistono pi`umodi di configurare il repository e installare il programma, per esempio: # apt-get install software-properties-common apt-transport-https curl # curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - # add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" # apt-get update # apt-get install Poi infatti basta lanciare il comando dal men`udel desktop. Da notare che questo programma ha integrato il plug-in per usare GIT e una console integrata per il lancio dei server NPM e NG per React e Angular. Come per gli altri sistemi operativo anche su GNU Linux `epossibile scaricare i plug-in disponibili per tutti i linguaggi come Java o C.

6.8 PostgreSQL e MongoDB

Sugli ambienti GNU Linux sono disponibili molti diversi DBMS, oltre al MySql che gi`a`estato indicato nella sezione dedicata `epossibile usare facilmente altri tipi basi di dato. Per quanto riguarda il PostgreSQL sono disponibili i pacchetti pronti, infatti basta installare i pacchetti # apt-get install pgadmin3 postgresql-11 ufw e poi bisogna modificare il file di configurazione # pico /etc/postgresql/11/main/postgresql.conf e verificare le porte della base di dati listen addresses=’*’ port = 5432 e poi aprire le porte di rete e configurare le utenze # ss -tunelp | grep 5432 # ufw allow 5432/tcp # systemctl restart postgresql # su - postgres $ psql -c "alter user postgres with password ’parolaSegreta’" > ALTER ROLE $ pssql createuser dbuser1 $ pssql createdb testdb -O dbuser1 $ pssql alter user dbuser1 with password ’DBPassword’; $ pssql create table test table ( id int,first name text, last name text ); $ pssql insert into test table (id,first name,last name) values (1,’Alberto’,’Nao’); # systemctl restart postgresql con questi semplici comandi si crea un utente , un database e una tabella, infatti poi basta lanciare la query select * from test table; per vedere la tabella, con il comando iniziale `estato installato anche pgAdmin3 che `eun programma disponibile sul men`udel desktop per accedere alla base dati postgresql locale o anche ad un server remoto. La versione 4 che `edi tipo web e non desktop verr`aintrodotta con i docker quando si scaricher`aproprio la versione pacchetto di questa versione. CHAPTER 6. PROGRAMMAZIONE 40

Per quanto riguarda il MongoDB l’installazione `eun attimo pi`ucomplicata perch`esi deve scaricare da un repos- itory proprietario e non da quelli ufficiali di Debian. # apt-get install dirmngr gnupg apt-transport-https software-properties-common ca-certificates curl # curl -fsSL https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add - # add-apt-repository ’deb https://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main’ # apt get update # apt-get install mongodb-org # systemctl enable mongod --now # mongo --eval ’db.runCommand( connectionStatus: 1 )’ poi bisogna subito configurare la rete per permettere l’accesso, il file di configurazione `e /etc/mongod.conf e bisogna controllare le configurazioni bindip = 127.0.0.1,indirizziIpCheUsanoMongo #port = 27017 #auth=true e poi riavviare il server concat # restart mongodb poi si accede alle collezioni di mongo con i comandi $ mongo > show dbs; > show collections; > show users; > use admin; > db.createUser(user:"alnao",pwd:"bello",roles:[role:"userAdminAnyDatabase",db:"admin"] ) > db.auth("alnao", "bello") > db.grantRolesToUser("alnao", [ role: "read", db: "admin" ]) > db.grantRolesToUser("alnao",[ role: "root", db: "admin" ]) $ mongo -u alnao --authenticationDatabase admin -p --port 27017 > show dbs; > use admin > db.createUser(user:"alberto",pwd:"bellissimo",roles:[role:"readWrite",db:"ms-users"] ) $ mongo -u alberto --authenticationDatabase admin -p --port 27017 > use ms-users > db.auth("alnao", "bello") > db.grantRolesToUser("alnao",[ role: "root", db: "ms-users" ]) > db.auth("alnao", "bello") > use collectiondemo > use admin > db.grantRolesToUser("alnao",[ role: "readWrite", db: "collectiondemo" ]) > use collectiondemo > db.elenco.insert(nome:"Alberto") > db.elenco.find() e il risultato deve essere l’oggetto inserito come Alberto. Un tool grafico per poter usare mongo `e Robomongo che purtroppo non `edisponibile nei pacchetti pronti per debiam ma deve essere scarico un file installer in formato tar.gz dal sito ufficiale https://robomongo.org/download per poi eseguire i comandi # mkdir /usr/local/bin/robomongo # chmod /usr/local/bin/robomongo 777 $ mv robo3t-1.3.1-linux-x86 64-7419c406.tar.gz /usr/local/bin/robomongo $ cd /usr/local/bin/robomonogo $ tar -xvzf robo3t-1.3.1-linux-x86 64-7419c406.tar.gz $ cd cartelle $ ./robo3t Per creare l’icona nel menu basta creare un file desktop $ cat > ∼/.local/share/applications/robomongo.desktop <

Icon=/usr/share/icons/breeze/mimetypes/16/application-vnd.ms-access.svg Terminal=false Type=Application Categories=Development; EOL

6.9 Postman

Anche per PostMan non esiste il pacchetto Debian ufficiale ma bisogna scaricare l’installer in formato tar.gz dal sito ufficiale https://dl.pstmn.io/download/latest/linux e poi installare il programma con i comandi: # tar -xzf Postman-linux-x64-7.32.0.tar.gz # sudo rm -rf /opt/Postman # sudo mv Postman /opt/Postman # sudo ln -s /opt/Postman/Postman /usr/bin/postman $ cat > ∼/.local/share/applications/postman.desktop <

6.10 Docker

Per la installazione del demone dei Docker basta installare i pacchetti omonimi: docker e docker-compose presenti nei repository ufficiali e poi possono i vari comandi dei docker per gestire il demone: # systemctl status docker # systemctl start docker e poi si pu`oanalizzare il contenuto del demone con il comando: # docker ps se si dispone di un file YAM con la configurazione del docker basta lanciare i comandi # docker-compose up -d per scaricare e avviare il demone dei contenitori, per esempio usare pgAdmin4 su un docker basta: # mkdir ∼/dockerPadmin4 # cd ∼/dockerPadmin4 # docker pull dpage/pgadmin4 # docker run -p 5050:80 -e "PGADMIN DEFAULT EMAIL=alnao" -e "PGADMIN DEFAULT PASSWORD=bello" -d dpage/pgadmin4 # docker-compose up -d # docker ps in questa sequenza di comandi si `escaricato e attivato il docker PgAdmin4 sul demone locale con la configurazione delle porte, ovviamente bisogna prestare attenzione che non siano gi`aoccupate da altri server, in particolare potrebbe essere necessario aprire le porte del firewall locale per le porte con i comandi: # /usr/sbin/iptables -I INPUT 1 -i eth0 -p tcp --dport 5432 -j ACCEPT # /usr/sbin/service iptables save # /usr/sbin/iptables --list e sul server PostgreSql `enecessario aggiungere la riga listen addresses = ’*’ se non presente nel file di configurazione /etc/postgresql/11/main/postgresql.conf e aggiungere la porta host all all 0.0.0.0/0 md5 CHAPTER 6. PROGRAMMAZIONE 42 nel file di configurazione /etc/postgresql/11/main/pg hba.conf e poi riavviare il server con # /etc/init.d/postgresql restart alla fine `epossibile collegarsi al PgAdmin4 via web all’indirizzo http://localhost:5050/browser/ e nella login bisogna inserire username e password indicati in creazione del docker, per collegarsi al PostgreSql bisogna configurare l’indirizzo IP (il valore localhost non sempre funziona) e selezionando la voce ”SSL Compression”. Per fermare il docker bisogna lanciare il comando # docker stop NUMERO dove il NUMERO `eil valore ritornato dal comando ps che mostra l’elenco di tutti i docker attivi nel demone.

6.11 Didattica, scienza e calcolo numerico

Essendo GNU Linux una piattaforma molto usata negli ambienti universitari e nei centri di ricerca, nel tempo si sono sviluppate tantissime applicazioni scientifiche anche molto complesse, nel tempo questi programmi si sono arricchiti e sono diventati veramente molto potenti e complicati. Per la didattica elenco alcune applicazioni usatissime nelle scuole e nelle universit`adi tutto il mondo, sfortunatamente poco in Italia: - Celestia Simulazione astronomica - Chemtool Programma per il disegno di molecole organiche - Elem Tavola periodica degli elementi - Ghemical Software di chimica computazionale - GPeriodic Tavola periodica degli elementi - KStars Planetario stellare - KTurtle Interprete del linguaggio LOGO per l’ambiente grafico KDE - Octave Ambiente per il calcolo numerico mod - Oregano Disegno e simulazione di circuiti elettronici mod - SNNS Simulatore di reti neurali - Stellarium Simulazione di volte celesti Per quanto riguarda il calcolo numerico la scelta `emolto varia e il mondo GNU Linux dispone di molte applicazioni che possono essere utili, tra cui Scilab, Octave e MatLab, programmi opensource e usatissimi a scopo didattico nelle universit`adi tutto il mondo anche se sicuramente il programma pi`ufamoso in assoluto per il calcolo numerico `e un programma chiamato Mathematica, che non `egratuito e nemmeno opensource ma `eanche un potente linguaggio di programmazione interpretato, sicuramente la sua completezza e la sua potenza si paga notevolmente, visto che il prezzo del programma ha superato i 3000 euro ma, da ”matematico” posso assicurare che li vale tutti quanti. Il pacchetto del programma non `edisponibile sui mirror Debian, essendo non opensource e a pagamento ma, viene distribuito con un file unico autoinstallante, con estensione sh (quindi eseguibile): basta copiarlo in una cartella del sistema, per esempio /etc/mathematica e basta lanciare il file eseguibile per lanciare il setup. Una volta terminato il setup, il programma risulter`ainstallato e potrete lanciare il programma da riga di comando scrivendo: $ mathematica oppure lanciando l’icona sul menu del vostro desktop. Per chi vuole utilizzare il famosissimo linguaggio LATEXper creare documenti, ci sono alcuni programmi che lo aiuteranno notevolmente alla gestione dei documenti, per prima cosa bisogna andare ad installare tutti i pacchetti necessari: bisogna installare i pacchetti che iniziano per latex evitando di selezionare le estensioni per le lingue orientali se non servono, poi si pu`olanciare la compilazione da riga di comando oppure usare un ambiente grafico che esegua la compilazione con un semplice click su un bottone. Per la compilazione a mano, dopo aver scritto il documento con un semplice editor di testo (come kEdit o gEdit), la compilazione `elanciata con il comando: $ latex miodocumento.tex Il risultato saranno alcuni file (con estensione .aux, .log, .idx) e viene generato anche un file con estensione e formato DVI, questo file pu`oessere letto direttamente tramite il programma di visualizzazione documenti oppure pu`oessere aperto grazie all’interprete di Konqueror, se si desidera invece ottenere un file PostScript, bisogna, dopo aver prodotto il DVI, lanciare il comando CHAPTER 6. PROGRAMMAZIONE 43

$ dvips -t -o miodocumento.ps miodocumento.dvi che permette di ottenere il file PostScript con estensione ps ma bisogna tener presente che `enecessario aver installato un interprete PostScript come GhostScript. Per ottenere un documento in formato PDF bisogna processare il file sorgente con il comando $ pdflatex miodocumento.tex Un’altra opzione `equella di usare l’utilissimo programma Kile: il miglior programma per GNU Linux per scrivere documenti in linguaggio LATEX: consigliato e indispensabile per chi vuole scrivere documenti di grandi dimensioni, da usare anche la possibilit`adi creare dei progetti in modo tale da dividere i documenti in file pi`upiccoli e pi`usemplici da gestire, notare anche che con la seconda barra in alto si evita di dover andare a scrivere i comandi sulla shell ma basta fare un click con il mouse.

La versione PDF di questo documento `escritta in LATEXutilizzando l’editor Kile.

6.12 Macchine virtuali

Per GNU Linux esiste un sistema di emulazione di macchine virtuali molto particolare chiamato Qemu/Kdm la cui interfaccia utente `ela Virsh, per installare questi componenti basta installare i pacchetti: # apt-get install qemu qemuctl virtinst virt-manager aqemu # apt-get install libvirt-clients libvirt-daemon-system virtinst e poi lanciare i comandi per avviare e vedere lo stato del sistema: # systemctl start libvirtd # virsh net-list --all mentre per impostare l’avvio automatico del Virsh all’avvio del sistema: # virsh net-start default # virsh net-autostart default per creare la macchina virtuale bisogna lanciare il comando con tutti i parametri di configurazione $ virt-install --name server01 --os-type linux --os-variant ubuntu16.04 --ram 1024 --disk /mnt/Virtuali/kvm/server01.img,device=disk,bus=virtio,size=10,format=qcow2 --graphics vnc,listen=0.0.0.0 --noautoconsole --hvm --cdrom /mnt/Virtuali/SistemiOperativi/debian-live-10.3.0-amd64-lxde.iso --boot cdrom,hd dove si devono impostare la quantit`adi memoria Ram, il path del disco e il CdRom o la iso di installazione. Per notare la macchina virtuale creata basta lanciare il comando $ virsh list --all e si pu`oaccedere alla macchina virtuale con il comando $ virsh vncdisplay server01 se ovviamente il VNC `einstallato nel sistema. In alternativa si pu`oleggere l’indirizzo IP della virtualizzata con il comando $ ip a notando l’indirizzo ip alla riga inet e poi andando nel programma Visualizzatore desktop remoti e accedere alla virtu- alizzata con il tipo VNC. Per sospendere e distruggere la virtualizzata basta lanciare i comandi $ virsh suspend server01 $ virsh destroy server01 La configurazione e creazione con Qemu viene spostata nella sezione obsoleta in quanto nelle ultime versioni di Debian 10 non si usa praticamente mai questo tipo di configurazione. Per quanto riguarda il programma VMware `epossibile scaricarlo dal sito ufficiale https://www.vmware.com/products/workstation-player.html il file scaricato ha un formato bundle, come gi`avisto pi`uvolte l’estensione `esolo una descrizione, infatti questo `e uno script auto-installante, prima per`odi lanciare l’installazione bisogna verificare l’installazione di alcuni pacchetti: # apt-get install gcc-6-locales gcc-6-cross-base gcc-6 linux-headers-4.9.0-3-amd64 build-essential e poi procedere con l’installazione vera e propria con i comandi # chmod +x VMware-Player*.bundle # ./VMware-Player*.bundle poi basta lanciare il programma nel men`u,se mancano pacchetti nella installazione compare un messaggio di avviso all’avvio del programma che indica il pacchetto da installare come per esempio il pacchetto linux-headers alla versione richiesta da VmWare. Chapter 7

Configurazioni particolari e HowTo

Un utente che usa GNU Linux nell’uso quotidiano si pu`otrovare di fronte dei problemi di configurazioni dei vari pacchetti e del sistema, al giorno d’oggi la comunit`amondiale GNU Linux ha risolto praticamente tutte le problematiche che un utente si pu`oritrovare e le informazioni possono essere trovate grazie ad una semplice ricerca sui pi`ucomuni motori di ricerca; la difficolt`amaggiore di questo periodo `ediventata riuscire a trovare le informazioni di cui si ha bisogno tra i tanti (troppi) siti e forum che parlano di GNU Linux e anche di Debian: spesso infatti si trovano documenti troppo dettagliati oppure siti che parlano di argomenti in maniera troppo superficiale. Questo capitolo cerca di colmare almeno alcuni buchi e trattare argomenti non trattati negli altri capitoli perch`e le configurazioni particolari non rientrano in nessun tema gi`avisto in precedente.

7.1 Il BootLoader Grub

Durante l’installazione al passo Copia del sistema base e impostazioni finali `estato installato nel proprio sistema il sistema Grub, questo `eil componente della piattaforma GNU Linux che avvia il sistema operativo all’accensione del sistema: dopo l’accensione infatti compare con una schermata che permette di avviare il sistema GNU Linux in diverse modalit`aed eventualmente sistemi operativi diversi se sono installate diverse versioni del KernelLinux o altri sistemi operativi, un utente non esperto deve modificare nulla e selezionare sempre quella di default ma un utente pi`uesperto potr`aavviare il sistema ottimizzato a seconda delle proprie esigenze. Questo pacchetto `eimportante perch`epermette di installare pi`usistemi operativi nello stesso sistema e poi scegliere quale avviare al momento dell’accensione (chiamata appunto boot del sistema oppure bootloader), in tutti gli altri sistemi operativi (come MS Windows e MacOX) questo componente non `epresente per questo un utente non abituato a GRUB non riesce a capirne l’utilit`a,`epersino possibile installare pi`uversioni di Debian o diverse distribuzioni nel sistema e poi gestirne l’avvio di sistemi operativi con GRUB . Per gli utenti Debian di oggi, Grub viene installato durante la fase di installazione del sistema base e viene autoconfigurato quindi l’utente non deve inserire nessuna configurazione: l’autoconfigurazione rileva la presenza di altri sistemi operativi e li inserisce nell’elenco di quelli che GRUB pu`oavviare, ovviamente se il sistema operativo `e stato installato dopo l’installazione di Grub bisogna rilanciarne la configurazione. Il men`udi avvio viene regolato dal file /boot/grub/grub.cfg ma non bisogna MAI modificarlo a mano visto che ci sono una serie di comandi che permettono di modificare le configurazioni, come per esempio lo sfondo e il carattere usato infatti di default viene usato uno sfondo semplice e un tema base. Per maggiori dettagli sulla configurazione del bootloader vi rimando al sito ufficiale http://www.gnu.org/software/grub/grub.html oppure ad una guida italiana http://guide.debianizzati.org/index.php/Guida_a_GRUB_2 Il problema principale di GRUB `eche, se si cambiano i componenti del sistema come gli HardDisk, pu`osuccedere che GRUB rimanga disallineato rispetto all’effettiva architettura del sistema, per ripristinare il bootloader bisogna seguire una guida molto chiara all’indirizzo https://help.ubuntu.com/community/Grub2/Installing\#Fixing_a_Broken_System dove sono spiegati tutti i passi per il ripristino e la riattivazione, in particolare il comando # grub-install --root-directory=/mnt /dev/sdX ripristina la versione di GRUB2 nel sistema, ovviamente mnt e sdX devono essere modificati con la configurazione del sistema.

44 CHAPTER 7. CONFIGURAZIONI PARTICOLARI E HOWTO 45

7.2 Configurazioni del demone grafico X e accelerazione grafica

Come gi`adetto nei precedenti capitoli, l’ambiente grafico e i desktop vengono gestiti da un demone chiamato X Window System, spesso chiamato semplicemente X, da molti anni `ediventato il demone principale su tutti i sistemi GNU Linux e ovviamente anche su Debian, si parla sempre di demone in quanto un utente esperto pu`o notare la famosa struttura client-server dove il server X mette a disposizione l’interfaccia e delle librerie per lo sviluppo di applicazioni come le GTK+; come tutti i demoni di GNU Linux, anche X necessita sempre di una buona configurazione per funzionare correttamente e permettere agli ambienti desktop di caricarsi correttamente, negli anni i tool di configurazione sono stati evoluti molto e oggi il server grafico si autoconfigura da solo ad ogni avvio e l’utente non deve fare nessuna configurazione, nelle versioni passate del sistema la configurazione doveva essere fatta manualmente sul file di configurazione /etc/X11/xorg.conf oppure, per configurare X, basta lanciare uno dei vari tool di configurazione: # Xorg -configure oppure con il comando: # dpkg-reconfigure --priority=low xserver-xorg Nelle vecchie versioni, ad ogni modifica dei file di configurazione, bisognava sempre ricordarsi di fermare e far ripartire il demone grafico lanciando i comandi # /etc/init.d/gdm3 stop # /etc/init.d/gdm3 start dove GDM `eil Gnome Desktop Manager che gestire il ”dialogo” tra il demone X e i desktop che di default `einstallato su Debian anche se usate KDE o XFCE. Nelle ultime versioni, se il file xorg.conf non `epresente, il demone esamina l’hardware ad ogni avvio e si autoconfigura da solo quindi tale file non `epi`upresente nei sistemi nelle ultime versioni, per maggiori informazioni rimando alle guide ufficiali http://www.debian.org/doc/manuals/debian-reference/ch07.it.html e https://wiki.debian.org/it/Xorg. Per la gestione dei sistemi con pi`umonitor basta utilizzare i programmi di configurazione nei vari desktop, per esempio sui sistemi Gnome basta cliccare sul desktop e selezionare Display settings per accedere al programma che permette la configurazione dei monitor e la disposizione delle applicazioni. Per la configurazione da shell si pu`ousare il comando xrandr, per esempio la configurazione di default si ottiene con: # xrandr --auto mentre altri esempi di configurazione con due monitor pu`oessere # xrandr --output HDMI-1 --right-of VGA-1 --rotate normal,inverted,left,right # xrandr --output HDMI-1 --right-of VGA-1 --rotate right Trattandosi di un sistema client-server e disponendo di una rete (abbastanza veloce) ci si pu`ocollegare da un sistema X ad un altro sistema dove `einstallato il demone X attraverso il protocollo SSH con il comando ssh -q -X nomelogin@hostremoto ovviamente per poter usare questo comando bisogna lanciarlo da un sistema GNU Linux con demone grafico X verso un altro sistema GNU Linux con demone grafico X in ascolto. Il demone grafico X `estato scritto con i driver base delle schede video e quasi mai il demone gestisce automatica- mente le accelerazioni grafiche previste da alcune marche di schede video, infatti serve installare i driver specifici per ogni tipo di scheda video, le maggiori tre case di schede video sono Nvidia, Ati e Intel, per le prime due si possono trovare dei driver ben funzionanti mentre per le schede Intel il demone grafico X dovrebbe funzionare in maniera ottimale automaticamente. Per capire la marca e il modello della propria scheda video si pu`olanciare il comando $ lspci -nn | grep VGA se avete una scheda NVidia comparire una riga con il nome e il modello, per esempio: NVIDIA Corporation G80 [GeForce 8800 GTS] mentre se avete una Intel compare la riga: Intel Corporation Haswell Integrated Graphics Controller Per quanto riguarda le schede Nvidia si possono installare i driver direttamente da Synaptic (o apt) dopo aver ag- giunto nel proprio file sources.list la riga deb http://httpredir.debian.org/debian/ stretch main contrib non-free e poi si devono installare i pacchetti # install linux-headers-$(uname -r| sed ’s/[^-]*-[^-]*-//’) nvidia-driver nvidia-glx nvidia-kernel-dkms nvidia-kernel-common dove il comando uname serve per installare l’headers della corretta versione del KernelLinux installata, poi forse bisogna lanciare il comando # nvidia-xconfig CHAPTER 7. CONFIGURAZIONI PARTICOLARI E HOWTO 46 per creare il famoso file di configurazione del demone grafico X, una volta creato bisogna riavviare il server grafico per rendere effettive le modifiche, per maggiori informazioni vi rimando alla guida wiki su nvidia https://wiki.debian.org/it/NvidiaGraphicsDrivers Per le schede di marca AMD/ATI, dopo aver aggiunto nel proprio file /etc/apt/sources.list la riga deb http://http.debian.net/debian/ stretch main contrib non-free bisogna installare i paccchetti # apt-get install linux-headers-$(uname -r| sed ’s/[^-]*-[^-]*-//’) fglrx-driver xserver-xorg-video-ati e poi lanciare il comando # aticonfig --initial per maggiori informazioni vi rimando alla pagina Wiki https://wiki.debian.org/it/ATIProprietary

7.3 Backup e restore dei dati

Qualsiasi uso si faccia di un sistema informatico `esempre importante disporre di un sistema di backup ed eventualmente il restore dei dati, grazie ai tanti cloud come Dropbox o GoogleDrive `epossibile fare tutto tramite internet in maniera veloce, nel mondo GNU Linux esistono molti strumenti che servono proprio per eseguire i backup dei sistema, una lista incompleta di strumenti disponibili su Debian: • amanda: Advanced Maryland Automatic Network Disk Archiver cio`eun sistema di archiviazione dei dischi • backupninja: sistema di meta-backup leggero ed estensibile • bacula: backup, ripristino e verifica in rete • duplicity: backup automatici incrementali • dump: lo storico programma per eseguire backup e dump dei dischi • xfsdump: programma per eseguire backup e dump dei dischi E’ possibile anche costruire un mini script personalizzato, scritto in linguaggio sh, per la copia di backup dei file base, questo script pi`uessere utile per salvare solamente le configurazioni e non tutto il sistema. Per prima cosa per un backup delle configurazione bisogna salvare i file di sistema che possono essere modificati come visto nei precedenti capitoli: • /etc/apache2/apache2.conf • /etc/cups/cupsd.conf • /etc/samba/smb.conf • /etc/apt/source.list • /etc/fstab • /etc/rc.local questi file possono essere salvati e sovrascritti in caso di emergenza. Poi ovviamente serve salvare i dati base delle utenze: • La configurazione del browser Iceweasel se usato (come segnalibri, cronologia, password e cookies)nella cartella /home/nomeutente/.mozilla/firefox/ • La posta di Icedove se usata: tutte le mail e tutte le impostazioni nella cartella /home/nomeutente/.mozilla-thunderbird/ • La cartella di Chrome se usato, se il sistema di sincronizzazione con google-drive `eattivo questa cartella pu`o non essere compresa in un eventuale backupm, nella cartella /home/nomeutente/.config/google-chrome • Tutta la cartella home di ogni utente se ci sono dati interessanti Se si usa il MySql/MariaDb come demone per lo sviluppo non bisogna dimenticarsi di comprendere nel proprio backup anche i database usati, l’esportazione dei dati viene eseguita con il comando: $ mysqldump --database nomedatabase > nomefile.sql -u root -p password (dove poi bisogna inserire la password di root o dell’utente indicato), viene eseguito in salvataggio nel file sql di tutto il db compresa la struttura e gli indici. Per eseguire il restore si pu`ousare il comando da riga di comando oppure si pu`ousare pi`ucomodamente il software web PhpMyAdmin oppure altri tool che possono eseguire gli script sql di BackUp. CHAPTER 7. CONFIGURAZIONI PARTICOLARI E HOWTO 47

7.4 Il sistema sotto controllo

Esistono molti programmi per la gestione e per tenere sotto controllo le risorse e lo stato del proprio sistema, soprattutto se state usando Debian come demone e/o server: nella shell potete usare il programma top, utilissimo programma che permette di monitorare tutti processi attivi sul sistema, l’elenco delle funzionalit`aviene elencata semplicemente premendo il tasto ”h”. Se utilizzate un desktop, potete provare a configurare i vari widget di controllo sulla barra delle applicazioni e potete provare il programma Monitor di sistema che trovate sul men`u Sistema, tramite questo programma potete monitorare memoria e processore, avete anche la possibilit`adi vedere ed eventualmente uccidere i vari processi e programmi in esecuzione nel vostro sistema. Il primo programma particolare `e Ntop, un bellissimo ma complicatissimo programma web di statistiche sul traffico di rete, utilissimo per un demone di rete e per chi vuole controllare il traffico internet, per usarlo basta installare il pacchetto Ntop e poi accedere, tramite browser, all’indirizzo http://localhost:3000/ Il secondo programma consigliato `e PhpSysInfo, per usarlo serve aver installato il demone web Apache e dopo aver installato l’omonimo pacchetto, basta accedere, tramite browser, all’indirizzo: http://localhost/phpsysinfo/ tramite queste viste di tipo web, avete la possibilit`adi scoprire tutte le informazioni utili sul vostro sistema, dalle periferiche al processore, dalla ram agli harddisk e vedere i livelli di utilizzo. Se avete una rete di computer con molti sistemi GNU Linux installati e potete tenere sotto controllo tutta la rete, creando un server di rete e utilizzare il programma Nagios, le sue potenzialit`asono elevate ma permette solo una visione della situazione dei nodi della rete per il monitoraggio senza poter modificare le impostazioni base del sistema mentre con WebMin potete monitorare il sistema ma anche modificare le varie configurazioni e amministrare i vari demoni.

7.5 Il cestino

La gestione del cestino viene gestita dai vari Desktop (GNOME, KDE o XFCE), e come per altri sistemi, anche in Debian il cestino in realt`a`euna semplice cartella particolare dove vengono parcheggiati temporaneamente i file in attesa di una cancellazione definitiva, in realt`ail Kernel di GNU Linux non gestisce nativamente il cestino, infatti se un utente usa i comandi $ rm oppure $ rmdir la cancellazione di file o delle cartelle `edefinitiva e il file non viene spostato in nessun cestino temporaneo quindi bisogna sempre prestare attenzione quando si usano questi comandi. Bisogna sempre tenere conto che il cestino dei Desktop pu`olasciare della sporcizia nei sistemi, cio`eil cestino potrebbe non essere svuotato oppure capita che alcuni desktop non eseguano la cancellazione definitiva ma postano i file in un altra cartella nascosta nonostante il lancio della funzione di svuota il cestino, questa sporcizia pu`oessere lasciata in una cartella specifica che potete trovare al path /home/nomeutente/.local/share/Trash/file/. che dovrebbe essere controllata e svuotata periodicamente con il comando $ rm -rf ∼/.local/share/Trash/files/* per esempio `epossibile inserire questo comandi nello script rc.local per svuotare il cestino (in maniera definitiva) ad ogni avvio del sistema. Se avete dei dischi montati con il comando mount, i vari desktop manager e i programmi di gestione dei file come Dolphin creano delle directory Trash (cestino) all’interno dei volumi montati, per esempio /mnt/Dati/.Trash-1000/files e anche in questo caso basta pulire queste cartelle a mano oppure semplicemente svuotare il cestino dal desktop.

7.6 Configurazione del comando SUDO

Il comando sudo consente agli utenti senza privilegi di amministratore, di eseguire i comandi come super-utente senza dover effettuare la login come super-utente e senza conoscere la password dell’utente amministratore, in alcune distribuzioni derivate da Debian come Knoppix o Ubuntu questo comando `eimpostato di default perch`enon viene usato l’utente root mentre per chi usa Debian o altre distribuzioni GNU Linux questo comando `esconsigliato ma `e possibile configurare il comando sudo, di default questo comando non viene installato durante la fase di installazione del sistema base e per averlo a disposizione basta installare il pacchetto sudo, con il comando # apt-get install sudo per poi lanciare il comando # visudo e inserire alla fine del file la riga CHAPTER 7. CONFIGURAZIONI PARTICOLARI E HOWTO 48 nomeutente ALL=(ALL:ALL) ALL dove ovviamente nomeutente `el’username dell’utente da abilitare per questo comando, questo comando va a scrivere un file sudoers che contiene le impostazioni del comando. Ogni volta che viene lanciato il comando sudo viene chiesta una password, che non `ela password dell’utente root, ma `ela password dell’utente, l’uso di sudo in Debian pu`odiventare utile per chi vuole scrivere script (in sh per esempio) utilizzando comandi che solo il superutente pu`olanciare, un esempio classico `ela modifica veloce del file /etc/fstab, usando invece un semplice script in sh la cosa si fa molto pi`uveloce e interessante, infatti basta creare un file, dandogli estensione sh (solo per comodit`aperch`ecome sempre visto le estensioni non sono significative) e scrivere al suo interno le righe: #/bin/sh sudo /etc/fstab purtroppo questo non funziona al meglio perch`erichiede la password dell’utente che lancia lo script, per risolvere il problema dell’inserimento della password basta inserire il comando echo che simula la digitazione di caratteri nel sistema: #/bin/sh echo password | sudo -S kwrite /etc/fstab e lo script digiter`aautomaticamente la password al posto dell’utente, in questo modo si ha a disposizione uno script per eseguire il comando sudo che digita automaticamente la password. Se la installazione del sistema Debian viene avviata dalla versione live, il comando sudo viene installato di default e non viene impostata la password dell’utenza root, per impostarla basta lanciare il comando $ sudo passwd root questo perch`ein quasi tutte le live il comando sudo viene usato al posto dell’utenza root e questo viene ereditato nelle installazioni che vengono avviate da sistemi live.

7.7 Configurazione base delle quote

Tramite la configurazione delle quote sui sistemi basati sui Kernel GNU Linux, `epossibile imporre dei limiti all’uso delle memorie e delle stampanti agli utenti che usano un sistema, questo pu`oessere molto utile quando un pc viene usato da molti utenti diversi magari in una rete LAN e si rischia di vedere lo spazio nei dischi ridursi sempre pi`uvelocemente a causa dei troppi file creati e salvati dagli utenti, uno dei requisiti indispensabili per il sistema di quote `eche, durante la fase di installazione, sia stata creata una partizione dedicata per la cartella home e quindi, nel file fstab, sia presente una riga che indica quale partizione viene montata sulla cartella /home, in alternativa `e possibile impostare il sistema delle quote su una partizione diversa, per esempio la partizione che viene montata sulla cartella root, anche se questo `eassolutamente sconsigliato. Prima di tutto bisogna installare il pacchetto quota e poi modificare la riga del file fstab corrispondente alla partizione da limitare, aggiungendo nelle propriet`ae i parametri della partizione i parametri: ,usrquota,grpquota e poi basta lanciare il comando: $ quote per verificare la situazione delle quote, oppure un amministratore pu`oavere lo schema di tutti gli utenti con il co- mando: # repquota -a Per impostare una quota da un utente o ad un gruppo si usa il programma edquota che permette l’impostazione di quote in maniera iterattiva mentre il comando setquota permette di impostare il sistema quote da riga di comando senza sistema iterattivo, per esempio: # setquota -u utente 3000 4000 0 0 /home/disco dove i vari parametri sono spiegati nella pagina man del comando setquota. Il sistema quote prevede anche un periodo in cui l’utente possa sforare i limiti, questa parametrizzazione `econfig- urabile con il comando: # edquota -t oppure con: # setquota -t In alternativa `epossibile usare il programma quotatool sempre da riga di comando oppure uno dei (pochi) programmi disponibili sui desktop per la gestione delle quote. Con i comandi quotaon e quotaoff si pu`oabilitare e disabilitare la gestione delle quote sui filesystem precedentemente configurati: # quotaon -v --all # quotaoff -v --all da notare che il sistema quote `eun normale demone quindi pu`oessere fermato anche a mano con lo script init: # /etc/init.d/quota stop CHAPTER 7. CONFIGURAZIONI PARTICOLARI E HOWTO 49

Una guida pi`ucompleta del sistema quote pu`oessere trovata nella documentazione ufficiale Debian oppure sulla pagina http://guide.debianizzati.org/index.php/Attivare_le_quote_su_un_filesystem

7.8 Programmi di partizionamento dischi

Modificare lo schema delle partizioni `esempre una cosa non semplice e ad alto rischio di perdita di dati, perch´ela modifica delle partizioni potrebbe modificare anche altre partizioni su un disco fisico con possibili perdite di dati; la mia esperienza mi ha portato a non modificare mai le partizioni dei dischi se su questo `einstallato il sistema operativo e, quando si deve modificare una qualsiasi partizione contenente dati, conviene sempre eseguire una copia di backup di tutte le partizioni comprese quelle non modificate. Le cose si complicano ancora di pi`uquando nello stesso disco ci sono pi`upartizioni di tipo diverso come quelle di MsWindows (come NTFS o FAT32) e partizioni GNU Linux (come le Ext3 o Ext4), questo perch´ei programmi di partizionamento di un sistema operativo difficilmente trattano al meglio le partizioni degli altri sistemi con l’ovvio rischio di perdere partizioni che un programma non riconosce, per evitare questi contrasti fra sistemi operativi si possono usare programmi specializzati che cercano di gestire al meglio le partizioni di tutti i tipi, il pi`ustorico programma `e Partition Magic che purtroppo `estato abbandonato dal produttore gi`adal 2009 ma ancora usato perch`eil migliore del suo tipo. Se invece avete un solo sistema operativo nel vostro sistema e questo `edi tipo GNU Linux come Debian, potete tranquillamente usare il programma di installazione per partizionare il disco come gi`avisto all’inizio di questa guida senza aver nessun tipo di problemi, dopo l’installazione potete comunque modificare lo schema delle partizioni con i programmi • fdisk storico programma da riga di comando per il partizionamento di GNU Linux • partman strumento di partizionamento raccomandato da Debian, permette di gestire, modificare, creare e montare le varie partizioni • gparted programma per desktop grafici che permette di fare (pi`uo meno) tutto con pochi click Esiste anche una versione live di GNU Linux chiamata GParted LiveCD che permette di usare il programma da una versione live, questo permette di salvare dati e partizioni in caso il sistema operativo base si sia danneggiato e non risulti funzionante. E’ possibile anche usare le versioni live di Debian che all’interno contengono gi`ail programma di partizione oppure si pu`ofacilmente installare con il comando apt. Chapter 8

Comandi della Shell

In questo capitolo sono raggruppati i tantissimi comandi per i sistemi GNU Linux, comprendendo non solo i comandi della shell previsti dal KernelLinux base ma alcuni particolari comandi di altri ambienti e specifici per Debian o di alcuni programmi che possono risultare molto utili, questa lista non `eassolutamente completa perch´e non basterebbe una vita per elencare e spiegare tutti i comandi per Debian ma sono elencati i pi`uutili, pi`uusati e pi`uinteressanti. Bisogna sempre ricordare che l’uso di certi comandi `econcesso solo all’utente root mentre altri possono essere eseguiti da tutti gli utenti, questa non `eun dettaglio da sottovalutare, soprattutto se si usa GNU Linux come personal computer con un singolo utente, potrebbe essere scomodo dover sempre passare dall’utente normale al super-utente, per`o`epossibile configurare il comando sudo per concedere agli utenti non amministratori di lanciare qualsiasi comando. Una delle cose pi`uutili nelle Shell di GNU Linux `eil famoso sistema di autocompletamento (autocomplete) della console, cio`ese si scrivono le prime lettere di un comando e poi si preme il tasto TAB, il sistema vi presenter`ala lista di tutti i possibili comandi a disposizione e se `erimasto solo una scelta far`ail completamento automatico senza necessit`adi inserire altri caratteri, questo sistema funziona anche con il nome dei file e delle directory. Seconda cosa da tenere sempre in considerazione quando si usa la Shell di GNU Linux: c’`e SEMPRE differenza tra minuscole e maiuscole, visto che il KernelLinux `edi tipo Case Sensitive: sempre prestare attenzione a come viene scritto un comando o il nome di un file. Terza cosa da tenere sempre a mente `eche il carattere / rappresenta la cartella radice del sistema chiamata root, per`obisogna fare attenzione a non fare confusione tra l’utente root, la cartella root e la cartella home dell’utente root che si trova nella cartella /root/, da tenere sempre a mente che la cartella / rappresenta la cartella madre di tutto il sistema e non esiste un livello superiore alla root-directory, mentre la cartella /root/ contiene solo i file dell’utenza root.

50 CHAPTER 8. COMANDI DELLA SHELL 51

8.1 Tabella dei comandi Files e Directories cd dir entrare nella sottodirectory dir della cartella corrente cd /home entrare nella directory /home cd .. risalire di un livello cd ../.. risalire di due livelli cd vai alla home directory cd - vai alla directory precedente pwd visualizzare il path della directory di lavoro ls visualizzare file e directory ls -F visualizzare file e directory separandoli ls -l visualizzare i dettagli di file e directory ls -a visualizzare anche i file nascosti ls *a* visualizzare file e cartelle il cui nome contiene il carattere a ls -lSr |more visualizzare la dimensione dei file ordinandoli per dimensione tree visualizzare file e directory in un albero a partire da root(1) mkdir dir1 creare la directory dir1 mkdir dir1 dir2 creare due directory contemporaneamente mkdir -p /tmp/dir1/dir2 creare un’albero di directory rm -f file1 eliminare il file file1 rmdir dir1 eliminare la directory dir1 rm -rf dir1 eliminare ricorsivamente la directory dir1 e sul contenuto mv dir1 new dir rinominare/muovere una directory o file cp file1 file2 copiare un file da file1 a file2 cp dir/* . copiare tutti i file di una directory dentro la directory corrente cp -a /tmp/dir1 . copiare una directory dentro la directory di lavoro corrente cp -a dir1 dir2 copiare una directory ln -s file1 lnk1 creare un link simbolico al file(o directory) file1 chiamato lnk1 ln file1 lnk1 creare un link fisico al file(o directory) file1 chiamato lnk1 find / -name file1 cercare un file partendo dalla radice / find / -user user1 cercare tutti i file appartenenti all’utente user1 find /usr/bin -type f -atime +100 cercare tutti i file non utilizzati negli ultimi 100 giorni find /usr/bin -type f -mtime -10 cercare tutti i file creati o modificati entro 10 giorni locate .ps cercare tutti i file con una determinata estensione CHAPTER 8. COMANDI DELLA SHELL 52

Visualizzazione e manipolazione dei file cat file1 visualizzare il contenuto di un file partendo dalla prima riga tac file1 visualizzare il contenuto di un file partendo dall’ultima riga more file1 visualizzare il contenuto di un file lungo less file1 visualizza il contenuto in avanti che indietro head -2 file1 visualizzare le prime due righe di un file tail -2 file1 visualizzare le ultime due righe di un file tail -f /var/log/messages visualizzare in tempo reale ci`oche viene aggiunto ad un file dos2unix filedos.txt fileunix.txt convertire un file di testo MSDOS in formato UNIX unix2dos fileunix.txt filedos.txt convertire un file di testo UNIX in formato MSDOS recode HTML page.html convertire un file di testo in formato html cat file1 |comando > result.txt sintassi per elaborare il testo di un file e scrivere il risultato su un nuovo file cat file1 |comando >> result.txt sintassi per elaborare il testo di un file ed appendere il risultato su un file esistente grep Aug /dir/file cercare la parola Aug all’interno del file grep ^Aug /dir/file cercare le parole che cominciano con Aug grep [0-9] /dir/file selezionare tutte le righe che contengono numeri grep Aug -R /var/log/* estendere la ricerca della stringa Aug dentro la directory /var/log e sottodirectory sed ’s/stringa1/stringa2/g’ file.txt rimpiazzare stringa1 con stringa2 nel file sed ’/^$/d’ example.txt rimuovere tutte le righe vuote da example.txt sed -e ’1d’ result.txt elimina la prima riga dal file example.txt sed -n ’/stringa1/p’ visualizza solo righe che contengono stringa1 sed -e ’s/ *$//’ example.txt rimuovi i caratteri vuoti alla fine di ogni riga sed -e ’s/stringa1//g’ example.txt cancella solo la parola stringa1 da tutte le righe lasciando inalterato il resto sed -n ’1,5p;5q’ example.txt stampare a video dalla riga 1 alla 5 sed -n ’5p;5q’ example.txt stampare a video la riga numero 5 sed -e ’s/00/0/g’ example.txt sostituire pi`uzeri con un solo zero cat -n file1 numerare le righe di un file cat example.txt | awk ’NR%2==1’ rimuove tutte le righe pari da example.txt echo a b c | awk ’print $1’ stampare a video la prima colonna di una riga echo a b c | awk ’print $1,$3’ stampare la prima e la terza colonna di una riga paste file1 file2 fondere il contenuto di due file per colonne paste -d ’+’ file1 file2 fondere il contenuto di due file per colonne con il delimitatore + tra apici sort file1 file2 ordinare i contenuti di due file sort file1 file2 | uniq ordinare omettendo le linee ripetute sort file1 file2 | uniq -u ordinare stampando solo le line univoche sort file1 file2 | uniq -d ordinare stampando solo le line duplicate comm -1 file1 file2 comparare i contenuti di due file sopprimendo soltanto le righe univoche del file1 comm -2 file1 file2 comparare i contenuti di due file sopprimendo soltanto le righe univoche del file2 comm -3 file1 file2 comparare i contenuti di due file sopprimendo soltanto le righe che appaiono su entrambi i file CHAPTER 8. COMANDI DELLA SHELL 53

Gestione sistema, programmi e processi shutdown -h now arresto del sistema init 0 arresto del sistema telinit 0 arresto del sistema shutdown -h ore:minuti arresto programmato del sistema shutdown -c cancellare un arresto programmato del sistema shutdown -r now riavvio del sistema reboot riavvio del sistema logout abbondonare la sessione top visualizza i processi di sistema che utilizzano pi`ucpu ps -eafw visualizza i processi di sistema ps -e -o pid,args --forest visualizza i processi sistema in maniera gerarchica pstree mostra un albero dei processi sistema kill -9 IDProcesso forzare la chiusura del processo e terminarlo kill -1 IDProcesso forzare il processo a ricaricare la configurazione lsof -p $$ visualizza la lista dei file aperti dai processi lsof /home/user1 la lista dei file aperti in una determinato path di sistema strace -c ls >/dev/null mostra le chiamate di sistema fatte e ricevute da un processo strace -f -e open ls >/dev/null visualizza le chiamate alle librerie watch -n1 ’cat /proc/interrupts’ mostra gli interrupts in tempo reale last reboot mostra lo storico dei reboot lsmod visualizza i mooduli del kernel caricati free -m visualizza lo status della ram in megabyte smartctl -A /dev/hda monitorare l’affidabilit`adi un hard-disk mediante SMART smartctl -i /dev/hda verificare se SMART `eattivo su un hard-disk tail /var/log/dmesg visualizzare gli eventi inerenti al processo di boot del kernel tail /var/log/messages visualizzare gli eventi di sistema

Informazioni sul sistema arch mostra l’architettura della macchina uname -m mostra l’architettura della macchina uname -r mostra la versione del kernel in uso dmidecode -q mostra componenti hardware di sistema - (SMBIOS/DMI) hdparm -i /dev/hda mostra le info e le caratteristiche di un hard-disk hdparm -tT /dev/sda eseguire un test di lettura su un hard-disk cat /proc/cpuinfo visualizzare informazioni sulla cpu cat /proc/interrupts visualizzare gli interrupts cat /proc/meminfo verificare la memoria in uso cat /proc/swaps visualizzare i filesystem(s) swap cat /proc/version visualizzare la versione del kernel cat /proc/net/dev visualizzare gli adattori di rete cat /proc/mounts visualizzare i filesystem(s) montati lspci -tv visualizzare le periferiche pci lsusb -tv visualizzare le periferiche usb date visualizzare la data di sistema cal 2008 visualizzare il calendario dell’anno 2008 date 041217002007.00 impostare data e ora - MeseGiornoOreMinutiAnno.Secondi clock -w salvare definitavamente le modifiche della data sul BIOS CHAPTER 8. COMANDI DELLA SHELL 54

Mount di partizione e gestione dischi mount /dev/hda2 /mnt/hda2 montare il disco hda2 nella directory /mnt/hda2 umount /dev/hda2 smontare il disco hda2 (prima uscire da /mnt/hda2) fuser -km /mnt/hda2 forzare umount quando il device `eoccupato mount /dev/fd0 /mnt/floppy montare un floppy-disk mount /dev/cdrom /media/cdrom montare un cdrom/dvdrom mount -o loop file.iso /media/cdrom montare un file ISO9660 o Immagine iso mount -t vfat /dev/hda5 /mnt/hda5 montare un filesystem windows FAT32 mount /dev/sda1 /mnt/usbdisk montare una pendrive usb o flash df -h visualizzare l’elenco delle partizioni montate du -sh dir1 conoscere lo spazio su disco occupato dalla directory dir1 du -sk * | sort -rn visualizzare la dimensione dei file ordinanti per dimensione badblocks -v /dev/hda1 verifica bad blocks sul disco hda1 fsck /dev/hda1 ripara e verifica l’integrit`adel filesystem linux sul disco hda1 fsck.ext2 /dev/hda1 ripara e verifica l’integrit`adel filesystem ext2 sul disco hda1 e2fsck /dev/hda1 ripara e verifica l’integrit`adel filesystem ext2 sul disco hda1 e2fsck -j /dev/hda1 ripara e verifica l’integrit`adel filesystem ext3 sul disco hda1 fsck.ext3 /dev/hda1 ripara e verifica l’integrit`adel filesystem ext3 sul disco hda1 fsck.vfat /dev/hda1 ripara e verifica l’integrit`adel filesystem fat sul disco hda1 fsck.msdos /dev/hda1 ripara e verifica l’integrit`adel filesystem dos sul disco hda1 dosfsck /dev/hda1 ripara e verifica l’integrit`adel filesystem dos sul disco hda1 mkfs /dev/hda1 creare un filesystem di tipo linux sulla partizione hda1 mke2fs /dev/hda1 creare il filesystem di tipo linux ext2 sulla partizione hda1 mke2fs -j /dev/hda1 creare il filesystem di tipo linux ext3 sulla partizione hda1 mkfs -t vfat 32 -F /dev/hda1 creare un filesystem di tipo FAT32 fdformat -n /dev/fd0 formattare un floppy disk mkswap /dev/hda3 creare un filesystem di tipo swap swapon /dev/hda3 attivare una nuova partizione di swap swapon /dev/hda2 /dev/hdb3 attivare due partizioni di swap mkisofs /dev/cdrom > cd.iso creare l’immagine iso di un cdrom sull’hard-disk mkisofs /dev/cdrom | gzip > cd iso.gz creare l’immagine iso compressa di un cdrom mkisofs -J -allow-leading-dots -R -V creare l’immagine iso di una directory LabelCD -iso-level 4 -o ./cd.iso data cd da masterizzare cdrecord -v dev=/dev/cdrom cd.iso masterizzare un immagine iso mount -o loop cd.iso /mnt/iso montare un’immagine iso cd-paranoia -B rippare le traccie audio da un cd in file wav cd-paranoia -- ’’-3’’ rippare le prime tre traccie audio da un cd cdrecord --scanbus scansionare il bus per identificare il canale scsi

Utenti e gruppi groupadd nomegruppo creare un nuovo gruppo groupdel nomegruppo eliminare un gruppo groupmod -n nuovogruppo vecchiogruppo rinominare un gruppo useradd -c "Nome Cognome" -g admin creare un nuovo utente appartente al gruppo admin -d /home/user1 -s /bin/bash user1 useradd user1 creare un nuovo utente userdel -r user1 eliminare un utente (-r elimina la home directory) usermod -c "User FTP" -g system modificare gli attributi utente -d /ftp/user1 -s /bin/nologin user1 passwd modificare la password passwd user1 modificare la password di un utente(solo da root) chage -E 2005-12-31 user1 impostare la scadenza password per un utente chsh --list-shells mostra gli utenti loggati da remoto who -a mostra gli utenti loggati in maniera dettagliata CHAPTER 8. COMANDI DELLA SHELL 55

Backup dump -0aj -f /tmp/home0.bak /home backup full della directory /home dump -1aj -f /tmp/home0.bak /home backup incrementale della directory /home restore -if /tmp/home0.bak ripristino di un backup in maniera interattiva rsync -rogpav --delete /home /tmp sincronizzazione tra directory rsync -rogpav -e ssh --delete rsync via ssh tunnel /home ip address:/tmp rsync -az -e ssh --delete sincronizzare una directory locale ip addr:/home/public /home/local con una directory remota via ssh e compressione rsync -az -e ssh --delete sincronizzare una directory remota con una directory /home/local ip addr:/home/public locale via ssh e compressione dd bs=1M if=/dev/hda | gzip | ssh backupare il contentuo di un hardisk locale user@ip addr ’dd of=hda.gz’ su un host remoto via ssh dd if=/dev/sda of=/tmp/file1 backupare il contenuto di un hardisk su un file locale tar -Puf backup.tar /home/user backup incrementale della directory /home/user dd if=/dev/hda of=/dev/fd0 bs=512 count=1 creare una copia dell’MBR su floppy dd if=/dev/fd0 of=/dev/hda bs=512 count=1 ripristinare l’MBR dalla copia salvata su floppy

Permessi su files e cartelle usare + per impostare i permessi e - per rimuoverli ls -lh visualizzare i permessi chmod ugo+rwx directory1 impostare i permessi di lettura(r), scrittura(w) ed accesso(x) per gli utenti proprietario(u), gruppo(g) e altri(o) chmod go-rwx directory1 rimuovere i permessi di lettura(r), scrittura(w) ed accesso(x) per gli utenti gruppo(g) e altri(o) chown user1 file1 modificare il proprietario di un file chown -R user1 directory1 modificare l’utente proprietario di una directory e tutti i file e directory contenuti al suo interno chgrp group1 file1 modificare il gruppo di appartenenza di un file chown user1:group1 file1 modificare utente e gruppo proprietario di un file find / -perm -u+s visualizzare tutti i file presenti sul sistema con SUID impostato chmod u+s /bin/file1 impostare il bit SUID su un file binario l’utente che esegue quel file ottienegli stessi privilegi del proprietario chmod u-s /bin/file1 disattivare il bit SUID su un file binario chmod g+s /home/public impostare il bit SGID su una directory simile a SUID ma impostato sulla directory chmod g-s /home/public disattivare il bit SGID su una directory chmod o+t /home/public impostare il bit STIKY su una directory consente la cancellazione dei file solo ai legittimi proprietari chmod o-t /home/public disattivare il bit STIKY su una directory chattr +a file1 consente su un file l’apertura in scrittura solo in modalit`aappend chattr +c file1 consente che un file venga compresso dal kernel automaticamente chattr +d file1 fa in modo che il programma Dump ignori il file durante un backup chattr +i file1 rende un file immutabile, ovvero non potr`aessere eliminato, alterato, rinominato o linkato chattr +s file1 consente ad un file di essere cancellato in maniera sicura, azzerandone i blocchi sul disco chattr +S file1 fa in modo che se un file viene modificato i cambiamenti vengano scritti in maniera sincrona sul disco come con sync chattr +u file1 permette di recuperare il contenuto di un file anche se questo viene cancellato lsattr visualizzare gli attributi speciali CHAPTER 8. COMANDI DELLA SHELL 56

Archivi e file compressi bunzip2 file1.bz2 decomprimere il file denominato file1.bz2 bzip2 file1 comprimere il file denominato file1 gunzip file1.gz decomprimere il file denominato file1.gz gzip file1 comprimere il file denominato file1 gzip -9 file1 comprimere con la massima compressione rar a file1.rar testfile creare un archivio rar chiamato file1.rar rar a file1.rar file1 file2 dir1 comprimere in rar simultaneamente file1, file2 e dir1 rar x file1.rar decomprimere un archivio rar unrar x file1.rar decomprimere un archivio rar tar -cvf archive.tar file1 creare un archivio tar non compresso tar -cvf archive.tar file1 file2 dir1 creare un archivio contenente file1, file2 e dir1 tar -tf archive.tar visualizzare il contenuto di un archivio tar -xvf archive.tar estrarre un archivio tar tar -xvf archive.tar -C /tmp estrarre un archivio tar dentro /tmp tar -cvfj archive.tar.bz2 dir1 creare un archivio tar compresso in bzip2 tar -xvfj archive.tar.bz2 decomprimere un archivio tar compresso in bzip2 tar -cvfz archive.tar.gz dir1 creare un archivio tar compresso in gzip tar -xvfz archive.tar.gz decomprimere un archivio tar compresso in gzip zip file1.zip file1 creare un archivio compresso in zip zip -r file1.zip file1 file2 dir1 zippare pi`ufile e directory contemporaneamente unzip file1.zip decomprimere un archivio zip

Pacchetti DEB (solo per Debian) dpkg -i pacchetto.deb installare/aggiornare un pacchetto deb dpkg -r nomepacchetto rimuovere un pacchetto deb dal sistema dpkg -l visualizzare tutti i pacchetti deb installati sul sistema dpkg -l | grep httpd visualizzare tutti i pacchetti col nome httpd dpkg -s nomepacchetto ottenere informazioni su un determinato pacchetto installato dpkg -L nomepacchetto la lista dei file forniti da un pacchetto installato dpkg --contents pacchetto.deb la lista dei file forniti da un pacchetto non installato dpkg -S /bin/ping verificare a quale pacchetto appartiene un dato file dpkg-query -W -f=’${Installed-Size visualizzare la dimensione dei pacchetti deb installati ;10}t${Package}n’ | sort -k1,1n ordinanti per dimensione(ubuntu, debian e deriviate) APT package updater (solo per Debian) apt-get install nomepacchetto installare/aggiornare un pacchetto deb apt-cdrom install nomepacchetto installare/aggiornare un pacchetto deb da cdrom apt-get update aggiorna la lista dei pacchetti(non installati) apt-get upgrade aggiorna tutti pacchetti deb installati apt-get remove nomepacchetto rimuovere un pacchetto deb dal sistema apt-get check verifica la corretta risoluzione delle dipendenze apt-get clean ripulire la cache dai pacchetti scaricati apt-cache search nomepacchetto ritorna la lista dei pacchetti con la stringa CHAPTER 8. COMANDI DELLA SHELL 57

Rete - LAN e WiFi ifconfig eth0 visualizza configurazione di una scheda di rete ethernet ifup eth0 attiva interfaccia eth0 ifdown eth0 disattiva interfaccia eth0 ifconfig eth0 192.168.1.1 configura ip address netmask 255.255.255.0 ifconfig eth0 promisc configura eth0 in modalit`apromiscua dhclient eth0 active interface eth0 in dhcp mode route -n visualizza tabella di routing route add -net 0/0 gw IPGateway configura default gateway route add -net 192.168.0.0 configura route statica netmask 255.255.0.0 gw 192.168.1.1 route del 0/0 gw IPgateway rimuovi route statica echo "1" > /proc/sys/net/ipv4/ipforward activate ip routing ip link show mostra status link di tutte le interfaccie mii-tool eth0 mostra status link dell’interfaccia ’eth0’ ethtool eth0 mostra statistiche scheda di rete ’eth0’ netstat -tup tutte le connessioni di rete attive e rispettivi PID netstat -tupl tutt i servizi di rete sul sistema e rispettivi PID tcpdump tcp port 80 visualizza tutto il traffico http iwlist scan visualizza le reti wireless iwconfig eth1 visualizza configurazione di una scheda rete wireless hostname mostra l’hostname del sistema host www.example.com risoluzione hostname in ip address e viceversa nslookup www.example.com risoluzione hostname in ip address e viceversa whois www.example.com lookup sul database Whois nbtscan ipaddr risoluzione nome netbios nmblookup -A ipaddr risoluzione nome netbios smbclient -L ipaddr/hostname visualizza le condivisioni remote di un host windows smbget -Rr smb://ipaddr/share permette di scaricare file da un host windows via smb mount -t smbfs -o montare una condivisione di rete windows username=user,password=pass //WinClient/share /mnt/share

La shell bash mette a disposizione una serie di scorciatoie che `epossibile usare da riga di comando:

Le scorciatoie della shell tasto TAB espande il nome di un file o di un comando !! ri-esegue l’ultimo comando eseguito !n riesegue l’ennesimo comando presente nella storia, dove ’n’ e’ il numero del comando da rieseguire !stringa riesegue l’ultimo comando che inizia con i caratteri specificati in stringa !stringa:p visualizza l’ultimo comando che inizia con i caratteri specificati in stringa !?comando? ricerca il comando specificato tra punti interrogativi history visualizza l’elenco di tutti i comandi eseguiti CTRL-U cancella tutta la riga dalla posizione del cursore all’inizio della riga CTRL-K cancella tutta la riga dalla posizione del cursore alla fine della riga CTRL-W cancella una parola dalla posizione del cursore all’inizio della riga CTRL-A sposta il cursore all’inizio della riga CTRL-E sposta il cursore alla fine della riga CTRL-T inverte gli ultimi due caratteri a sinistra del cursore (T sta per transpose) ALT-U trasforma in maiuscolo la parola su cui si trova il cursore (U sta per uppercase) ALT-L trasforma in minuscolo la parola su cui si trova il cursore (L sta per lowercase) CHAPTER 8. COMANDI DELLA SHELL 58

8.2 Configurazione del path base

Nei sistemi basati su GNU Linux, tutte le shell hanno un path base utilizzato per abbreviare i comandi ed evitare all’utente di dover inserire il path dei comandi base ogni volta che esegue un comando. Per esempio cp, utilizzato per copiare files o cartelle, si trova quasi sempre nella cartella /bin/ e, per evitare che l’utente inserisca il path ogni volta, viene impostato nel path base la cartella bin cos`ıla shell cerca i comandi inseriti dall’utente anche in quella cartella. In poche parole il path base `el’elenco delle cartelle dove la shell deve cercare un comando inserito dall’utente, questo elenco `emodificabile e personalizzabile: un utente pu`oaggiungere e togliere cartelle da questo elenco visto che questo valore `esalvato in una variabile d’ambiente chiamata $PATH e il cuo contenuto pu`oessere visualizzato con il comando $ echo $PATH e si visualizza l’elenco delle cartelle in sequenza con il separatore duepunti, per esempio: /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games$ Se si vuole aggiungere all’elenco una cartella basta lanciare il comando $ export PATH=$PATH:/cartella/da/aggiungere ma eseguendo questo comando la modifica sarebbe solo temporanea fino al successivo riavvio del sistema, per rendere definitiva la modifica al path base bisogna modificare il file /home//.bashrc aggiungendo lo stesso comando, in questo modo verr`aeseguito ad ogni login dell’utente.

8.3 Creazione di alias

Gli alias sono dei comandi personalizzati che la shell bash permette di creare, questo pu`oessere una chiamata ad un comando standard GNU Linux o ad un comando eseguibile (per esempio ad uno script sh), per esempio per creare un nuovo alias che cancella i file di una determinata cartella basta lanciare il comando: alias cancella="rm -fr /mnt/Dati/toDel/*" poi basta scrivere nella bash il comando cancella per eseguire il comando indicato nell’alias appena creato e, nell’esempio, lanciare la cancellazione di tutti i file che si trovano nella cartella tmp. Questo alias viene per`operso al riavvio del sistema e/o alla logout dell’utente, per rendere effettivo e duraturo il comando appena creato occorre modificare il file: ∼/.baschrc che si trova dentro la cartella home dell’utente (∼), quindi capite che ogni utente pu`oavere i propri alias compreso l’utente root, si pu`oaggiungere in questo file una riga per ogni alias (meglio alla fine del file), per esempio (se non esistono gi`a)si possono aggiungere queste righe: alias ls=’ls --color=auto’ alias cancella="rm -fr /tmp/* " dopo aver salvato il file, baster`ache scriviate sul terminale il nuovo alias affinch´evenga eseguito il comando, si pu`o utilizzare questa semplice procedura potete crearvi tutti i comandi che vi servono, comprese alias che richiamino script sh oppure programmi eseguibili non standard della shell bash.

8.4 Gestione processi e memoria

Per la gestione e il monitoraggio dei processi in esecuzione su un sistema GNU Linux esistono una lunghissima lista di comandi, l’elenco di tutti i processi attivi ed in esecuzione `evisualizzabile con il comando ps ma viene quasi sempre usato con il parametro aux che filtra tutti i processi attualmente attivi sul proprio sistema, quindi basta lanciare il comando $ ps aux. Per avere un taskmanager sulla shell basta si pu`ousare il programma top che mostra visione in tempo reale del sistema compreso l’utilizzo delle risorse come la CPU e la memoria, il comando service permette di gestire i vari demoni attivi, come il sendmail o apache, per lo stato basta lanciare il comando # service nomedemone status mentre per le varie operazioni basta usare il parametro ”stop” oppure ”start” per fermare o far partire un servizio. Il comando kill vi consente di bloccare l’esecuzione di un processo sapendo per`oil numero PID del processo da fermare mentre killall permette di bloccare l’esecuzione di un processo utilizzando il suo nome e non attraverso il suo PID, per chi usa un desktop manager pu`ousare il comando xkill che permette di uccidere un programma ”visuale” in esecuzione sul server X facendo click sulla finestra del programma con il puntatore del mouse che assume la forma di un teschio simile al classico Jolly Roger dei pirati. CHAPTER 8. COMANDI DELLA SHELL 59

Per la gestione della memoria RAM, `epossibile usare il comando free per avere una visione completa della situazione e che offre inoltre dettagli sulla memoria libera nella partizione di swap, utilizzata come supplemento alla memoria RAM disponibile sul sistema, suggerisco di usarlo con i parametri ”-l” che mostra lo stato della memoria e ”-k” che mostra l’output in KByte oppure ”-m” che mostra l’outout in MByte. Per la gestione dei dischi esiste il comando df che permette di eseguire un’operazione simile a free ma sui dispositivi di archiviazione: il suo scopo `einfatti quelli di fornire informazioni sullo stato dell’hard disk del computer in uso e di ogni altro file system montato (pen drive, hard disk esterni e qualsiasi altra periferica esterna montata). Il comando df pu`oessere eseguito sia senza alcun dispositivo target che seguito dal percorso di determinati file system: nel primo caso mostra lo spazio libero su ogni file system montato, nel secondo invece si limita a quelli selezionati manualmente. Consiglio l’uso del parametro ”-h” che mostra un output pi`usemplice da leggere, con valori in KiloByte, MegaByte o GigaByte e ”-T” che mostra anche il tipo di file system montato.

8.5 Gestione della rete

Esistono diversi tool per configurare del demone di rete: editare i singoli file di configurazione, usare comandi shell come ifconfig, usare gli strumenti con interfaccia grafica oppure l’uso di web webmin: GNU Linux e Debian mettono a disposizione moltissimi comandi per la gestione della rete, in particolare si pu`ofare qualsiasi cosa anche senza ambiente grafico o Desktop, ovviamente bisogna ben sapere cosa fare e quindi conoscere tutte le teorie sulla rete, i protocolli (IP/TCP) e le impostazioni di sicurezza. In questo documento elenco solo alcuni comandi base che possono essere utili a tutti gli usi, i principali file di configurazione del demone di rete sono: /etc/sysconfig/network contiene le principali configurazioni per il Networking /etc/hosts contiene il mapping fra indirizzi e hostname ed alias. Segue un esempio /etc/services contiene il mapping tra i numeri di porta e i nomi dei servizi Mentre i principali comandi comandi lanciabili della shell sono: ip addr visualizza tutte le interfacce di rete attive e le relative impostazioni ifconfig eth2 192.168.0.56 netmask 255.255.255.0 configura l’interfaccia di rete eth2 con indirizzo ip 192.168.0.56 route -n visualizza informazioni di routing evitando di risolvere gli ip route add -net 192.56.76.0 netmask 255.255.255.0 gw 192.168.0.1 aggiunge una route statica per la rete 192.56.76.0, usando 192.168.0.1 come gateway route add -net 0.0.0.0/0 gw 192.168.0.1 imposta 192.168.0.1 come default gateway /etc/init.d/network (start|stop) script di avvio o fermo del demone networking. per il firewall viene usato il demone IPTables: si tratta di uno dei migliori firewall attualmente disponibili non solo per ambienti GNU Linux, interamente configurabile tramite riga di comando, l’elenco delle policy presenti `edisponibile tramite: # iptables -L Mentre per modificare le configurazioni del firewall si usano dei parametri particolari del comando: # iptables -A INPUT -p [PROTOCOLLO] --dport [PORTA] -j ACCEPT dove PROTOCOLLO `eil tipo di protocollo da abilitare (udp oppure tcp). Volendo,`epossibile anche aprire alcune porte solo a determinati IP, tramite il passaggio di un apposito parametro seguito dall’IP o dal range di IP, in questo modo: # iptables -A INPUT -p [PROTOCOLLO] --dport [PORTA] -s 192.168.1.0/24 -j ACCEPT in questo modo verr`aabilitato il traffico proveniente dagli IP del tipo 192.168.1.X sulla porta selezionata mentre per abilitare un solo IP `enecessario inserirlo per intero (al posto dello zero). Per monitorare una eventuale rete wireless c’`ea disposizione il comando wavemon che mostra la banda, la qualit`a del segnale, statistiche e le informazioni base, programma molto utile se si deve monitorare la rete senza fili da riga di mando. Non i dilungo molto in questi discorsi visto che non `eil mio campo e conviene sempre avere sottomano webmin o i tool grafici dei vari desktop che risultano sempre pi`ucomodi, consiglio sempre l’uso di firestarter per la configurazione del firewall. Pu`oinoltre capitare di dover impostare un limite all’uso della rete, cio`eimpostare che un sistema utilizzi al massimo un valore costante di banda in download o upload, per questo si pu`ousare il comando wondershaper installabile dal gestore dei pacchetti e poi da riga di comando basta lanciare il comando $ wondershaper -a nomeInterfaccia -d limiteDowlonad -u limiteUpload per esempio $ wondershaper -a enp3s0 -d 10000 -u 6500 da notare che i limiti sono in Kbps. Per sapere la configurazione di un sistema basta lanciare il comando $ wondershaper -sa enp3s0 se non c’`enessuna configurazione attiva compare un messaggio del tipo Wondershaper queues have been cleared. CHAPTER 8. COMANDI DELLA SHELL 60

8.6 Modifica ai nomi di files

Pu`oessere necessario rinominare un gruppo di file dentro una cartella specifica, per farlo `epossibile con uno semplice script per la shell Bash per evitare di dover ripetere l’operazione per ogni file, per esempio per modificare l’estensione di tutti i file si pu`ousare $ for i in *.from; do mv $i $(basename $i .from).to; done oppure scrivere lo script for file in *.from; do mv $file $file%.from.to done Esiste anche un comando molto pi`uveloce e sicuro, mmv (Multiple Move) che serve a spostare o copiare file multipli e che possano essere raggruppati con un carattere jolly, questa azione viene effettuata in modo sicuro, ovvero non ci sono cancellazioni di file inaspettate dovute a collisioni dei nomi dei file di destinazione con nomi di file gi`a esistenti, inoltre non ci sono problemi nel caso in cui i nomi dei file contengano spazi. Un esempio di utilizzo `e: $ mmv ’aaa*bbb?’ ’pinco#1pallino#2’ e con questo comando vengono rinominati tutti i file contenenti le stringe ”aaa” e ”bbb” e terminanti con un carattere e verr`adato il nome ”pinco” + ci`oche trova l’asterisco + ”pallino” + ci`oche trova il punto di domanda, l’azione di sopra diventa poi: $ mmv ’*.ps’ ’#1.eps’ verranno quindi rinominati tutti i file da .ps a .eps, per maggiori informazioni e una guida completa potete vedere il comando man mmv. Il metodo pi`usemplice rimangono i programmi di gestione file del desktop che tutti quanti usano mmv ma basta un semplice click per eseguire il comando, `epossibile provare in Dolphin, Konqueror, Total Commander o qualsiasi altro filemanager presente nel sistema Debian.

8.7 Comandi del demone MySql

I comandi per il demone Mysql sono indispensabili se si vuole usarlo e configurarlo come base dati per sviluppi o applicazioni in esercizio, in particolar modo agli sviluppatori sviluppatori `eutile avere conoscere i comandi base, per esempio per avviare o fermare il demone: # /etc/init.d/mysqld start stop condrestart restart per controllare lo stato del server basta lanciare il comando: # service mysqld status che dovrebbe rispondere con una frase simile a mysqld is running, per verificare che il server stia correttamente sulla porta prescelta si pu`outilizzare il comando # netstat -nlp | grep 3306 che dovrebbe rispondere con tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2879/mysqld Per accedere alla console interattiva di mysql basta lanciare il comando $ mysql -u root -p oppure $ mysql --user=user name --password=my password my db mentre per uscire dalla console basta lanciare uno di questi comandi: exit oppure bye. Quando ci si trova dentro la console di mysql, nella console non compare il classico simbolo $ oppure il # (che identifica l’utente della shell), ma compare il ”suffisso” mysql> per esempio, per sapere lo stato del server dall’interno della console, si pu`olanciare il comando mysql> status; infatti bisogna sempre ricordarsi che, se ci si trova all’interno della console di mysql, bisogna sempre terminare i comandi con il simbolo del ; (puntovirgola). Ora vediamo un elenco di comandi che si possono usare nella console:

• mysql> show databases; Mostra l’elenco di tutti i database disponibili

• mysql> connect mysql; Riconnettersi al database (se si `epersa la sessione) • mysql> use database name; Selezionare un database per i prossimi comandi • mysql> CREATE DATABASE new db ; Creare un nuovo database dal terminale interattivo

• mysql> DROP DATABASE my db; Cancellare un database • mysql> show tables; Visualizzare l’elenco delle tabelle (bisogna aver selezionato un database) CHAPTER 8. COMANDI DELLA SHELL 61

• mysql> describe tables; Mostra la struttura di una tabella • mysql> CREATE USER ’newuser’@’localhost’ IDENTIFIED BY ’password’ creare un utente Nelle varie guide ufficiali potete trovare l’elenco completo di tutti i comandi per definire i vari permessi sulle tabelle e manipolare gli utenti legando gli utenti alle varie tabelle. Per effettuare il backup di un database non si usa la console ma si usa un altro programma scritto proprio per fare backup e restore dei dati, per fare il backup di un database basta lanciare il comando # mysqldump -u user -p password nomeDatabaseSorgente > file.sql dove il backup viene eseguito in un file con estensione sql, per eseguire il restore (dallo stesso file sql) basta lanciare il comando # mysql -u user -p password nomeDatabaseDestinazione < file.sql poi il comando mysqldump permette anche di mettere in collegamento due server MySql e far in modo che i dati vengano trasferiti da uno all’altro, per questo vi rimando alla documentazione ufficiale MySql. Per eseguire delle query sulle varie tabelle nei database del server si pu`ousare la console e, dopo aver selezionato un database, si pu`oscrivere la query: mysql> SELECT tb.rownum1, tb.Name, tb.Section, tb.NameDescription FROM products as tb limit 10 ; da notare che `epossibile scriverla anche su pi`urighe, andando a capo con il tasto ”Invio” ma la query non verr`a eseguita finch`enon viene inserito il carattere ”;” (puntovirgola).

8.8 Manipolazione immagini e video da riga di comando

Negli ambienti GNU Linux sono a disposizione alcuni comandi da riga di comando per la manipolazione di gruppi di immagini e file video, questi risultano molti utili quando `enecessario modificare un elenco di file molto numeroso e sarebbe una perdita di tempo dover aprire tutti i file con GIMP o altri editor per eseguire le modifiche specifiche su ogni file. Per modificare le immagini `epossibile usare il comando mogrify che permette di ridimensionare i file immagine, per esempio per impostare una larghezza dell’immagine a 640 px orizzontali basta usare il comando $ mogrify -resize ’640’ immagine.jpg per dimezzarne le dimensioni si usa il comando: $ mogrify -resize 50% rose.jpg per cambiare il formato ad un file $ mogrify -format jpg *.png `epossibile anche ruotare, tagliare, unire e molto altro: una guida completa delle azioni possibili `edisponibili a https://www.imagemagick.org/script/mogrify.php. Per la manipolazione video `epossibile usare i comandi ffmeg e mencoder, per esempio per estrapolare un pezzo di video si pu`ousare il comando $ ffmpeg -i input.avi -ss 00:00:00 -t 00:03:00 -acodec copy -vcodec copy output.avi dove i parametri indicano input, inizio, fine, codec auto, codec video e il file di destinazione; per fare la stessa operazione `epossibile usare anche mencoder con la sintassi simile: $ mencoder -i input.avi -ss 00:00:00 -endpos 00:03:00 -acodec copy -vcodec copy -o output.avi Il modo pi`usemplice per unire file video `equello di usare FFmpeg con il filtro concat e passando l’elenco dei file da concatenare in un file di testo, in questo file bisogna indicare l’elenco degli spezzoni deve essere nel seguente formato: $ file ’video1.avi’ file ’video2.avi’ e poi concatenarli con il comando $ ffmpeg -f concat -i list.txt -c copy output.avi dove l’opzione -f indica il filtro da usare (concat). Se invece si vuole ridurre le dimensioni di un video scalando i frame si pu`ousare il comando $ ffmpeg -i input.mkv -vf "scale=iw/2:ih/2" halfFrameSize.mkv dove l’opzione iw/2:ih/2 indica di quanto scalare le immagini, in questo esempio tutti i frame vengono dimezzati sia in altezza (h) sia in larghezza (w). Guide complete dei comandi si possono trovare in tante pagine internet.

8.9 Manipolazione file PDF da riga di comando

Esistono molti comandi per la manipolazione di file PDF, infatti pu`ocapitare di dover modificare un file e si possono usare i vari tool, gratuiti o a pagamento. Un file PDF con moltissime pagine pu`orisultare anche molto grande come dimensioni in Mb: tipicamente si ha 1 Mb ogni pagina quindi file di 500 pagine possono arrivare anche a mezzo Gb se le pagine hanno tante immagini, `epossibile con ghostscript ridurre la dimensione del file con un inevitabile diminuzione della qualit`adelle immagini. Per fare questo, dopo aver installato il pacchetto ghostscript, CHAPTER 8. COMANDI DELLA SHELL 62 basta usare il comando: $ gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=FileDestinazione.pdf FileSorgente.pdf Si possono ottenere diversi livelli di compressione modificando il parametro ”-dPDFSETTINGS” con i valori : -dPDFSETTINGS=/screen : qualit`aper lo schermo, immagini convertite a 72 dpi -dPDFSETTINGS=/ebook : bassa qualit`a,immagini convertite a 150 dpi -dPDFSETTINGS=/printer : alta qualit`a,immagini convertite a 300 dpi dPDFSETTINGS=/prepress : alta qualit`apreservando il colore, immagini convertite a 300 dpi Se si vogliono unire pi`ufile PDF creando un nuovo PDF, `epossibile usare il programma pdfsam e il comando pdftk, per esempio con il comando da riga di comando: $ pdftk File1.pdf File2.pdf File3.pdf cat output FileSomma123.pdf per modificare un file PDF ed eliminare alcune pagine `epossibile usare il programma con interfaccia grafica PDF- Shuffler oppure il comando pdftk da riga di comando indicando le pagine da tenere e portare nella versione del file: $ pdftk FileSorgente.pdf cat 3 10-20 25 28 32 45-end output FileDestinazione.pdf E’ talvolta necessario modificare solo le pagine pari o solo le dispari di un file, per fare questo `epossibile usare il comando: $ pdftk FileDispari.pdf burst output %04d A.pdf $ pdftk FilePari.pdf burst output %04d B.pdf per poi poterle unire per creare un unico file ordinato con il comando $ pdftk *.pdf cat output FileDestinazione.pdf Se vi `ela necessit`adi creare una versione PDF per la stampa in formato opuscolo (booklet in inglese), c’`ela possibilit`a di trasformare il documenti in ps, usare i comandi dedicati ps e poi riconvertire tutto in pdf $ pdftops documento.pdf output.ps $ psbook output.ps tmp.ps $ psnup -pA4 -2 tmp.ps booklet.ps $ rm output.ps tmp.ps $ ps2pdf booklet.ps $ rm booklet.ps Per ridimensionare o ritagliare le dimensioni delle pagine `epossibile usare i programmi grafici oppure usare una sequenza di comandi un po’ macchinosa $ pdftops documento.pdf output.ps $ pstops "1:[email protected]" output.ps scalato.ps $ psresize -w 21cm -h 29.7cm -W 14.85cm -H 21cm scalato.ps ridimensionato.ps $ ps2pdf ridimensionato.ps $ rm output.ps scalato.ps ridimensionato.ps Per estrarre tutto il testo da un PDF `epossibile usare il comando $ pdftotxt documento.pdf e per estrarre le immagini da un PDF `epossibile usare il comando $ pdfimages documento.pdf estratta Operazioni pi`uspecifiche come la modifica dei metadati, l’estrazione dei font o delle immagini `epossibile tramite i vari comandi gi`acitati oppure i vari programmi grafici.

8.10 Notifiche e finestre di dialogo

Se si utilizza un sistema con un gestore desktop `epossibile usare dei comandi base per visualizzare dei messaggi tramite notifiche o tramite piccole finestre di dialogo, per esempio per visualizzare una notifica nel desktop basta lanciare il comando $ notify-send ’Titolo’ ’Messaggio’ e comparir`auna notifica nel desktop (ogni desktop manager visualizza la notifica in maniera diversa). Per quanto riguarda le finestre di dialogo, se si vuole visualizzare una finestra nella shell (e non nel desktop) si pu`o usare il comando whiptail, per esempio: $ whiptail --title "Esempio" --msgbox "Messaggio nella shell" 8 78 Mentre per visualizzare finestre di dialogo esiste il programma base xmessage, per esempio: $ xmessage -center "Messaggio da visualizzare" oppure il programma grafico “evoluto” zenity, che permette di visualizzare finestre informative e anche domande, per esempio: $ zenity --info --text="Messaggio da visualizzare" --title="Info" --width=600 $ zenity --error --text="An error occurred" --title="Warning" $ zenity --question --text="Do you wish to continue/?"