AlNao Debian HandBook

Nao Alberto (www.alnao.it)

December 28, 2019

AlNao Debian 9 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 Kile

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

Contents

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

2 Installazione di Debian 9 10 2.1 Come e dove trovare Debian ...... 10 2.1.1 Attuale versione ...... 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 Prima login e aggiornamento del sistema ...... 13

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

4 Applicazioni per GNU Linux 23 4.1 File di testo ...... 23 4.2 File explorer ...... 24 4.3 Sistema di compressione dei file (Tar, Zip e Rar) ...... 24 4.4 Programmi per l’ufficio ...... 25 4.5 Navigazione web e Mail Client ...... 25 4.6 Multimedialit`a ...... 25 4.7 Visualizzatori ed editor di immagini ...... 27 4.8 Applicazioni varie ...... 27 4.9 Giochi per GNU Linux e Cedega ...... 28

5 Demoni 30 5.1 Sistema di stampa (demone CUPS) ...... 30 5.2 Condivisione di rete (demone Samba) ...... 31 5.3 LAMP (demoni Apache e Mysql) ...... 32 5.4 Altri demoni ...... 34 5.5 Systemd e i runlevel ...... 35 5.6 Lo schedulazione crontab ...... 36

6 Programmazione 37 6.1 Programmazione della shell ...... 37 6.2 CeC++ ...... 38 6.3 e Tomcat ...... 38 6.4 Didattica, scienza e calcolo numerico ...... 39 6.5 Programmazione WEB ...... 40

5 CONTENTS 6

6.6 Macchine virtuali ...... 41

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

8 Comandi della Shell di Gnu Linux 49 8.1 Tabella dei comandi ...... 50 8.2 Editor di testo ...... 57 8.3 Rinominare gruppi di files ...... 57 8.4 Gestione processi e memoria ...... 58 8.5 Gestione della rete ...... 58 8.6 Creazione di alias ...... 59 8.7 Comandi del demone MySql ...... 59 8.8 Manipolazione immagini e video da riga di comando ...... 60 8.9 Configurazione del path base ...... 61 8.10 Manipolazione PDF da riga di comando ...... 61 8.11 Notifiche e finestre di dialogo ...... 62 Chapter 1

Introduzione

1.1 Perch`equesto manuale

Questo “manuale” nasce dagli anni di utilizzo dei sistemi GNU Linux e dalla necessit`adi riordinare il contenuto di grossi blocchi di appunti sparsi in raccolte di pagine web o articoli di riviste, in particolare dal sistema Debian su che uso da ormai pi`udi dieci anni. Dopo aver sentito la necessit`adi dover mettere ordine in questi appunti, ho deciso di scrivere un documento che poi io chiamo “manuale” che, prima di tutto mi permetta di aver ordine nei miei appunto e che vuole essere una mia condivisione di esperienze e conoscenze, seguendo proprio lo spirito base del mondo GNU Linux: la condivisione delle proprie conoscenze in modo tale che tutti possano leggerle e migliorarle. L’opera `ediretta principalmente all’utente semplice, che usa il computer per scrivere, giocare, navigare, che ha la possibilit`adi approfondire alcune tematiche evolute di un sistema operativo, come l’installazione di alcuni server e le configurazioni base del sistema. Un programmatore, anche non alle prime armi, potr`atrovare molti spunti da questo manuale, essendo presente un capitolo dedicato a questo argomento e riferimenti continui alla programmazione visto che chi scrive `eun sopratutto 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 “opera” completa cercando di realizzare una facile esposizione, facendo per`ol’importante assunzione che il lettore sia a conoscenza dei concetti base dell’informatica, come ad esempio quelli di hardware, periferica, software di sistema e software applicativo. Molti argomenti complessi, come la compilazione dei programmi dal codice sorgente, sono accennati a livello introduttivo, in modo che il lettore li possa comunque sperimentare, apprezzare, per poi eventualmente approfondirli per proprio conto tali argomenti anche trattati in altri miei scritti. 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 `eun “amatoriale” e che non pretenda troppo da questo manuale, ovviamente le cose scritte sono (quasi) sempre corrette e verificate.

1.2 Note e Convenzioni

Per chiarezza e per completezza in questo manuale saranno adottate queste convenzioni:

- Viene usato # per indicare un comando eseguito da un utente con privilegi di amministratore di sistema (per esempio il superutente root). - Viene usato $ per indicare un comando eseguito da un utente non amministratore (cio`el’utente dell’utente).

- Viene usato lo stile macchina di scrivere per indicare quanto mostrato 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.

7 CHAPTER 1. INTRODUZIONE 8

- Viene usato lo stile corsivetto quando si vogliono segnalare azioni che l’utente deve eseguire oppure 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 fare distinzione tra utenti amministratori (root) e utenti normali. Si assume 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. E` fondamentale che, un utilizzatore di GNU Linux, impari fin dall’inizio l’importante distinzione tra maiuscole e minuscole, infatti tutti i sistemi basati sul Kernel GNU Linux fanno sempre distinzione fra minuscole e maiuscole nei nomi di file, cartelle, programmi e comandi, durante la lettura di questo manuale bisogna sempre prestare attenzione alla differenza e fare sempre attenzione a cosa si digita con la tastiera.

1.3 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. 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 (l’insieme di tutti quei programmi essenziali al funzionamento del sistema base), poi 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 quasi 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. Le distribuzioni di GNU Linux sono community o aziende che preparano DVD o Mirror Web per installare e usare GNU Linux pi`uvelocemente, ogni distribuzione ha le proprie caratteristiche anche se il cuore del sistema operativo (il KernelLinux) `esempre lo stesso e i programmi preparati su una distribuzione possono essere installati anche su un altra, 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 di Debian, ma leggendo questa guida potrete trovare spunti per qualsiasi distribuzione anche non derivata da Debian.

1.4 Correttezza di questo manuale

Essendo un opera 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, soprattutto la sezione riguardante la configurazione dei demoni e la configurazione CHAPTER 1. INTRODUZIONE 9 della rete sono sicuramente molto approssimative e spesso non viene approfondita la sezione sulla sicurezza. 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 dove possibile ma spesso alcuni dettagli vengono tralasciati per evitare un documento troppo lungo. Un ulteriore problema che `esorto in questi anni `eche, col passare degli anni, 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 riprendere il documento dall’inizio e analizzarlo per correggere le modifiche, per questo motivo sono gi`aalla quinta edizione di questo documento e, in particolare con il salto dalla versione 8 alla versione 9 di Debian sono stati modificati molti pacchetti per l’aggiornamento alle nuove versioni del sistema e ho dovuto rivedere tutta la parte sui demoni Apache e MySql. Chapter 2

Installazione di Debian 9

In questo capitolo `edescritta la fase di installazione di una versione di GNU Linux, pi`uin particolare andremo ad installare la versione 9 di Debian chiamata Stretch. Il primo passo da eseguire sar`aquello di scaricare il primo DVD del sistema dal sito ufficiale, per poi installare il sistema, seguendo passo per passo le fasi di installazione, troverete alcune descrizioni ai passi che sono pi`urilevanti. L’installazione di un sistema operativo `esicuramente una cosa complicata e molto 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 avremo un sistema funzionante e ben configurato per iniziare ad usare GNU Linux. 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 in un disco, 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. Bisogna notare che tale guida `evalida anche per le precedenti versioni di Debian e anche per le successive quando usciranno, 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; in realt`aogni nuova versione del programma di installazione viene aggiornato con nuovi aggiornamenti per aumentare la compatibilit`acon le tanti componenti e i vari dispositivi di nuova generazione ma l’utente finale non si accorge di questi cambiamenti. 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 in maniera veloce, all’interno del sito ufficiale di Debian www.debian.org potete trovare tutte le “immagini” del DVD di installazione e tutte le informazioni sul sistema operativo; `epossibile trovare i DVD di Debian anche pubblicate su varie riviste o manuali, l’ovvio vantaggio di usare un sito web `eil costante aggiornamento delle versioni 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 debian.org, entrare nella sezione ”Getting Debian” (in italiano Ottenere debian) e cliccare su ”Download large installation images” (Scaricare un file immagine), scegliendo poi la versione di computer che possedete, se possedete un sistema recente scaricate la versione amd64 anche se disponete di un processore intel perch`equesta versione comprende tutti i processori a 64 bit, se invece avete un sistema vecchio potete scaricare la versione a 32 bit chiamata i386. Scaricare un DVD attraverso un browser pu`oessere una cosa non semplice perch´ela maggior parte dei browser non da la possibilit`adi farlo essendo file molto grandi e superiori ai 4Gb di dimensione, il mio consiglio `edi usare un sistema peer-to-peer come BTorrent (oppure KTorrent per chi usa gi`aGNU Linux), con esso pu`oessere scaricato un file di grandi dimensioni senza problemi anche in pi`ugiorni, dal sito ufficiale di Debian potete scaricare i parametri per il download dell’immagine ISO dai sistemi torrent. 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 questi sono coperti copyright e/o coperti da licenza proprietaria.

10 CHAPTER 2. INSTALLAZIONE DI DEBIAN 9 11

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, potete trovare anche analoghe versioni per MicroCD oppure per chiavette USB ma anche in questi casi io li sconsiglio.

2.1.1 Attuale versione Le versioni di Debian sono divise in stable, testing e unstable che, come dice il nome stesso, sono le varie fasi dei pacchetti, un pacchetto prima viene inserito nella versione chiamata unstable, poi passa nella testing e, quando viene valutato abbastanza stabile e senza anomalie, viene inserita nel “ramo stabile” di Debian, solamente le versioni stabili vengono numerate (cio`egli viene dato un numero di versione) mentre alla versione “testing” viene assegnato il numero e il nome della successiva versione stabile, la versione “unstabile” non ha un numero di versione. Ad ogni versione viene assegnato anche un nume 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 Toys Story rompeva i giocatoli). L’elenco delle versioni di Debian disponibile qui https://www.debian.org/releases/index.it.html `eriassunto in questa tabella:

unstable sid - testing buster previsto per il 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, le immagini DVD scaricate dal sito sono sempre auto-avvianti, cio`ebasta inserire il DVD nel lettore e il programma di installazione viene avviato automaticamente all’avvio del sistema per`oi dischi auto-avvianti funzionano solamente se il sistema BIOS del PC `e configurato correttamente: per questa configurazione bisogna entrare nella finestra di setup del BIOS, premendo un tasto all’accensione del sistema 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 `e proprio 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 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 tra l’invio e le lettere) 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 CHAPTER 2. INSTALLAZIONE DI DEBIAN 9 12 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 step, il programma di installazione prevede gli step base per la configu- razione delle cose pi`uimportanti del sistema, i primi step importanti sono la configurazioni della rete, se disponete di una rete minima e classica (per esempio un router modem ADSL e/o una Wifi) potete farvi guidare dal programma che vi presenta delle configurazioni base, altrimenti potete inserire a mano i dati del server di rete DHCP e l’indirizzo di rete 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) potete identificare nella rete la vostra Debian con questo nome. I passi successivi sono i passi pi`udelicati di tutta la fase di installazione e prevedono 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 e formattate le partizioni stesse, per il sistema bastano sono sufficienti 25 Gb per il sistema operativo e i programmi e poi serve anche una seconda partizione chiamata di SWAP, per questa partizione bastano 5Gb. In questo manuale viene spiegata la teoria dei FileSystem ma Linux prevede 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 c’`esolo la nostra Debian conviene fare tutte 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 con nessuna operazione.

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 `ela pi`uimportante visto che con questa utenza `epossibile lanciare qualsiasi comando e modificare qualsiasi file, `eimportante non perderla e non darla a nessuno in modo da evitare brutte sorprese. Dopo aver inserito la password di root due volte per conferma, il programma di installazione prevede la creazione di un utente, questo utente avr`auna username e una password che sono le credenziali del primo utente normale che user`ail sistema, ovviamente in un secondo momento sar`apossibile creare altri utenti o modificare quello creato durante la fase di installazione.

2.4 Copia del sistema base e impostazioni finali

Dopo aver configurato le partizioni, le impostazioni di rete e gli utenti, il sistema comincia a scrivere sul disco fisso nella partizione principale root, durante la copia del sistema base non bisogna intervenire in nessuna maniera e non bisogna interrompere l’avanzamento della copia, il programma poi procede con le fasi di censimento degli altri DVD se disponibili e dei mirror ufficiali: Debian infatti avrebbe pi`uDVD di installazione ed `epossibile configurarli in questa fase, il programma di installazione cerca anche automaticamente di collegarsi ad internet grazie alle configurazioni di rete inserite negli step precedenti e di configurare fin dall’inizio il collegamento ai mirror ufficiali per lo scarico degli aggiornamenti periodici, in fase di installazione verranno configurati solo i mirror ufficiali del ramo “stabile”, al termine del programma di installazione sar`apossibile aggiungere mirror non ufficiali e anche di rami delle versioni “testing” di Debian. Se disponete solo del primo DVD non dovete inserire nulla e il sistema automaticamente cercher`a CHAPTER 2. INSTALLAZIONE DI DEBIAN 9 13

i mirror in rete, se vi chiede il paese, potete scegliere quelli italiani ma la scelta comunque `eindifferente visto che i mirror sono sempre sincronizzati tra loro. Dopo la configurazione dei mirror il programma di installazione, il programma di installazione vi permette di aggiungere alcune parti aggiuntive, il mio consiglio `equello di non installare nessun server per una installazione pi`uveloce ma l’unica cosa davvero indispensabile `eil server grafico che prevede di default il sistema GNOME, ma `egi`apossibile installare anche altri desktop grafici come KDE, XFCE e LXTE, io mio consiglio `edi installare tutti i desktop e di provarli tutti prima di decidere quale usare. 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 auto-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 Prima login e aggiornamento del sistema

Al primo avvio la prima schermata caricata `equella del bootloader GRUB che abbiamo installato poco prima del termine dell’installazione, se avete solo un sistema operativo comparir`asolo l’opzione di Debian ma se avete pi`u sistemi operativi vi comparir`ala lista con la possibilit`adi scegliere quale avviare muovendovi nel men`ucon le frecce della tastiera. Se avete pi`uversioni del Kernel Linux installate sul sistema Debian, vi comparir`ala lista delle versioni con la possibilit`adi scegliere quale versione caricare, questa opzione `emolto utile se utilizzate la versione testing dove, ad ogni aggiornamento del Kernel, compare una nuova riga. Una volta scelta l’opzione sui GRUB, il sistema carica tutto il Kernel Linux e i programmi di avvio, in una videata da riga di comando che, se disponete di un sistema veloce, durer`apochi secondi, al termine compare la videata grafica di login, questa videata `eil GDM (Gnome Desktop manager) che `eil pacchetto che vi permette di fare la login su un desktop e carica il desktop selezionato. Nella Videata di login basta inserire 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. Una delle prime cose da fare quando si effettua il primo accesso `econfigurare Debian per gli aggiornamenti ed eventualmente eseguire il primo aggiornamento, questo perch´eDebian prevede una continua serie di aggiornamenti legati alla sicurezza ma anche alla stabilit`adel sistema, attivando poi gli aggiornamenti automatici avrete sempre l’ultima versione stabile del sistema, se invece usate la versione testing o sid di Debian, gli aggiornamenti saranno quotidiani e consiglio la disattivazione degli aggiornamenti automatici per poter controllare cosa viene installato nel sistema. Il gestore dei pacchetti di Debian si chiama apt mentre nei desktop grafici `epossibile usare il programma Synaptic, maggiori dettagli su questi due programmi saranno esposti nei prossimi capitoli, se volete avere un sistema aggiornato e completo dovete aggiungere alcuni mirror (siti) al vostro archivio in modo da avere anche repository non ufficiali ma indispensabili. Per aggiungere mirror potete farlo da Synaptic (usando i men`u)oppure, aprendo una shell (il programma Terminale), digitando la serie di comandi: $ su inserire la password dell’utente root # gedit /etc/apt/sources.list & con questo comando avete aperto come utente root u n file di configurazione del sistema apt, in questo file potete modificare e/o aggiungere mirror, ogni mirror `euna riga del file, se non presenti dovete inserire queste righe:

deb http://ftp.it.debian.org/debian/ stretch main deb-src http://ftp.it.debian.org/debian/ stretch main deb http://security.debian.org/debian-security stretch/updates main contrib deb-src http://security.debian.org/debian-security stretch/updates main contrib deb http://ftp.it.debian.org/debian/ stretch-updates main contrib CHAPTER 2. INSTALLAZIONE DI DEBIAN 9 14 deb-src http://ftp.it.debian.org/debian/ stretch-updates main contrib deb http://http.us.debian.org/debian/ jessie non-free contrib main deb http://http.us.debian.org/debian/ wheezy non-free contrib main deb http://http.us.debian.org/debian stable main contrib non-free deb http://ftp.debian.org/debian/ stretch main contrib deb http://www.deb-multimedia.org stretch main non-free deb http://deb.opera.com/opera/ stable non-free deb http://download.videolan.org/pub/debian/stable/ / una volta modificato il file vi basta salvarlo, riaprire Synaptic (se lo avete aperto meglio chiuderlo e riaprirlo) e cliccare sul tasto Aggiorna, dopo alcuni secondi avrete un sistema pronto per essere aggiornato, dovete solamente premere sul tasto Marca tutti gli aggiornamenti e poi cliccare sul bottone Applica per avviare l’aggiornamento del sistema, durante la fase di aggiornamento compare una videata che mostra l’avanzamento delle operazioni compresa la fase di scarico dei pacchetti dai siti web dei mirror inseriti poco fa. Ad ogni aggiornamento non `eindispensabile riavviare il sistema, serve solamente per rendere effettive gli aggiornamenti del sistema base come il Kernel mentre basta riavviare un determinato programma per rendere effettive le modifiche degli aggiornamenti su programma stesso. Nei prossimi capitoli vedremo come usare da riga di comando il programma apt e il programma Synaptic per installare nuovi programmi e demoni al vostro sistema. Terminata questa fase sarete pronti per usare GNU Linux e Debian. Chapter 3

Configurazioni base di GNU Linux e Debian

Dopo l’installazione del sistema Debian, un utente si trova un sistema quasi completo, infatti all’interno dell’installazione base `ecompreso almeno il Desktop GNOME che `el’ambiente grafico di default di Debian e una serie di applicativi base che possono essere trovati sul men`uprincipale, in questo capitolo vedremo alcune 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: impossibile infatti usare bene GNU Linux senza avere qualche base sistemistica e un po’ di manualit`asu file e cartelle del sistema compresi i diritti di lettura e scrittura su file. Inizialmente, un utente poco esperto potrebbe spaventarsi e demoralizzarsi di fronte alle nozioni base che sono poco familiari ma, con il tempo, si prende confidenza con la shell e i file di sistema e tutte le configurazioni base risultano semplici e basilari. La parte pi`uimportante di questo capitolo `esicuramente la sezione dedicata al “montaggio” delle partizioni, argomento fondamentale e centrale: questo argomento diventa semplice se spiegato bene passo per passo. 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: sui sistemi basti su Unix (e quindi tutti i sistemi basati sul Kernel Linux) i file sono tutto: file, directory, periferiche come stampanti, memorie fisse e persino i processi in esecuzione sono visti 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: abbiamo gi`avisto il file sources.list, spesso infatti viene usata l’estensione per evidenziare cosa contiene un file, esistono per`oanche file senza estensione come il file fstab che vedremo in seguito, quindi l’estensione del file `esolo una parte del nome e certi programmi di file manager possono cercare di usare l’estensione per capire il tipo di contenuto ma non sempre `ecorretto questo ragionamento. 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 `emolto importante la differenza tra maiuscole e minuscole, sia sui comandi sia sui file `efondamentale scrivere sempre con attenzione i nomi ed eventuali parametri, sulla stessa cartella possono persino esistere file con lo stesso nome ma scritto 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 tenta di impostare 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 allo standard, ma questo ha il supporto della maggior parte, se non di tutte, le distribuzioni GNU Linux, quindi non `euna buona idea discostarsi da esso se non per ragioni molto particolari. Il FSSTND tenta di seguire la tradizione Unix e le tendenze pi`urecenti, rendendo i sistemi Linux familiari per chi ha esperienza con altri sistemi Unix e viceversa. Lo scopo di questo capitolo `equello di dare una visione del sistema dal punto di vista del filesystem. Ulteriori informazioni sui singoli file possono essere trovate in altre parti di questo libro o nelle pagine man. 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 le cose in dipendenza dalla dimensione dei dischi stessi e per rendere pi`usemplice il backup e l’amministrazione. 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

15 CHAPTER 3. CONFIGURAZIONI BASE DI GNU LINUX E DEBIAN 16

root e sempre indicata con il carattere / `especifica per ciascun sistema (generalmente rappresenta l’intero sistema e sempre viene salvata in una partizione dell’Hard-Disk), contiene i file necessari per avviare il sistema e per portarlo ad uno stato tale da poter montare gli altri filesystem. La root contiene tutte le altre cartelle e si fa sempre alla root come punto di partenza iniziale per ogni file, come gi`adetto ogni cosa in GNU Linux `eun file quindi anche le periferiche e i processi sono contenuti nella root. Si pu`odire (anche se in maniera un po’ superficiale) che la root sostituisce quello che nei sistemi MS Windows `e il ”Risorse del computer”, infatti in Linux non potete trovare i dischi (C,D,E, ecc..), le principali sottodirectory della root sono:

/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, quindi l’immagine (vmlinux) e la initrd, ovviamente contiene GRUB

/dev: Contiene i riferimenti a tutti i dispositivi e le periferiche (HarkDisk, CdRom, stampanti, periferiche di rete, ecc...)

/etc: Contiene i files di configurazione degli applicativi e i server presenti nel sistema, compresi gli script di inizializzazione dell’ambiente (init script)

/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 usato per effettuare il mount (cio`eil collegamento) con tutte le unit`adi memoria presenti (HardDisk, cdrom, memorie usb, ecc.. ), potete 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 (come gi`adetto 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, nel tempo questi contenuti tendono a cambiare di posizione e forma perch`edipendono dall’applicativo e dal demone che li gestisce.

3.1.1 Caratteristiche e gestione dei diritti sui file Ogni file, quindi ogni cosa nel vostro sistema, appartiene ad un utente che ha sempre i tutti i diritti su quel file, questo utente `edi solito l’utente che ha creato il file. Esistono 3 tipi di diritti su un file: scrittura, lettura ed esecuzione rispettivamente detti , W, X. Per vedere i diritti su un file basta eseguire il comando sulla shell $ ls -la e questo comando restituir`auna 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, lo si pu`ocapire dal fatto che la prima lettera `euna d, i successivi tre caratteri indicano i diritti sull’utente che ha creato quel file, i secondi tre su tutti gli utenti dello stesso gruppo dell’utente creatore del file, gli ultimi tre sono i diritti di tutti gli altri utenti. Se `epresente la lettera significa che il diritto `e attivo se c’`eil trattino vuol dire che non l’utente non ha il diritto. Da notare che l’utente root root ha sempre tutte CHAPTER 3. CONFIGURAZIONI BASE DI GNU LINUX E DEBIAN 17

le autorizzazioni quindi lui riuscir`asempre a leggere e a scrivere su tutti i file. Nell’appendice potrete trovare una guida al comando chmod che serve per cambiare i diritti sui file. Altra cosa che un utente GNU Linux deve sapere `eche le estensioni sono praticamente inutili o comunque non hanno molto valore, cio`ei famosi file .exe, .doc, .dll non hanno molto significato: i file eseguibili sono indicati attraverso il permesso sul file (come appena `eindicato dal permesso X) e non c’`edistinzione tra gli altri file, per questo motivo incontreremo file con estensioni molto bizzarre, altre invece renderanno bene l’idea di quale sia l’utilit`a, per esempio il file sources.list `e,dome dice il nome, la lista delle sorgenti oppure il file apache2.conf `eil file di configurazione di apache2. Che sia ben chiaro che l’uso delle estensioni non `evietato l’uso, anzi `esempre buona norma usarle, ma il sistema sar`adel tutto indifferente a queste estensioni, faccio notare che in GNU Linux potremmo trovare file con pi`uestensioni come i file di tipo esempio.tar.gz. Lo standard FSSTND impone due caratteristiche molto importanti ai file: la differenza tra maiuscole e minuscole: il famoso Keys-Sensitive, infatti dovrete sempre stare attenti a cosa scrivete e se scrivete in maiuscolo o in minuscolo, si deve sempre prestare molta attenzione a questi particolari a differenza di Windows che, nelle varie versioni, ha mostrato un disordine in questo senso e spesso alcuni sistemi mostravano problemi in tal senso. Seconda cosa importante che un utente Linux deve tenere a mente `eche i file il cui nome inizi con il carattere punto `eun file nascosto e normalmente tutte le applicazioni non mostrano tali file (ls, Konqueror, Gnome File Manager), ma se, i nomi vengono inseriti a mano, tutti i programmi sono in grado di aprire e di gestire tali file. Il comando da riga di comando per leggere tutti i file `e ls -la.

3.2 Montaggio delle partizioni

Una delle esigenze maggiori di ogni utente `equello di poter accedere ai propri dati che sono salvati in varie posizioni, gli utenti di altri sistemi operativi sono abituati a identificare le memorie (anche chiavette USB) con delle lettere come C, D, E, ecc... mentre nei sistemi GNU Linux la gestione delle partizioni e delle periferiche di memoria (come le chiavette USB, hardDisk esterni e lettori CDROM/DVD) sono completamente diverse: la fase di configurazione delle memorie (di qualsiasi tipo) 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, sono presenti pi`ufile che devono essere montati, tipicamente questi file hanno il nome del tipo hda1, hda2, hdb1, hdc1, hdd1 oppure sda1, sda2, sdb1, dove la prima lettera del nome rappresenta se sono h=EIDE s=SATA cio`erappresentano il tipo di memoria, la seconda lettera `esempre d che significa DISK, 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”), mentre il numero 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 oppure # fdisk -l da riga di comando. Questi programmi presentano l’elenco di tutte le partizioni e, se possibile, anche il tipo. Per poter eseguire il mount, bisogna avete una cartella vuota che sar`ala destinazione dell’operazione, cio`ela memoria sar`adisponibile accedendo a quella cartelle, come default viene usato sempre (e solo) la cartella /mnt che `evuota alla fine dell’installazione per poter essere usata a questo scopo. 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 abbiamo montato la partizione /dev/hda2 sulla cartella Dati (bisogna sempre prestare at- tenzione alla differenza tra minuscole e maiuscole), 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 sempli- fica la vita, lasciando al sistema il compito di selezionare quello corretto. Ora possiamo accedere alla memoria con un file manager in un desktop oppure con il comando da riga di comando: $ cd /mnt/Dati $ ls dove il comando ls visualizza semplicemente la lista dei file nella cartella. Il problema del comando mount `eche, allo spegnimento o riavvio del sistema, il montaggio NON verr`arieseguito auto- maticamente, nella prossima sezione vedremo come eseguire i montaggi permanenti delle partizione e delle periferiche CHAPTER 3. CONFIGURAZIONI BASE DI GNU LINUX E DEBIAN 18 di memoria.

3.2.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 da almeno 20 anni, da notare che questo file di sistema `esprovvisto di estensione e si trova nella cartella /etc, noi andremo direttamente a modificare questo file, per esempio da desktop si pu`oavviare come utente root un editor con: # gedit /etc/fstab & a questo punto si apre un file che all’apparenza sembra strano ma basta notare che ad ogni riga corrisponde una memoria “montata”, a noi basta aggiungere una riga per ogni partizione che vogliamo configurare, per esempio: /dev/sdb3 /mnt/Dati ext4 user,suid,dev,rw,exec 0 0 questa riga indica il punto di mount (sorgente e destinazione), il tipo di partizione (mettere auto se non si conosce il tipo) e i vari parametri della partizione per esempio umask=000 oppure rw indicano che si pu`oscrivere e leggere la partizione. Se volete inserire una partizione di tipo ext3 non serve indicare l’umask, se invece volete indicare gi`a sul file le chiavette USB potete indicare la riga: /dev/sdd1 /mnt/Usb auto user,suid,dev,exec,umask=000,rw,noauto 0 0 dove il parametro noauto 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, dovreste trovarvi il file gi`aben configurato con tutti i parametri compresi i parametri per le memorie USB quindi questo file non deve essere modificato se trovate gi`ae vostre partizioni con- figurate correttamente. Da notare che i lettori DVD/CD oppure le memorie USB non vengono montate sulla cartella /mnt ma, tipicamente, vengono montate sulla cartella /media per separare le memorie fisse da quelle rimovibili.

3.3 Il pannello di controllo WebMin

Nei sistemi Debian `epossibile trovare diversi programmi che vi permettano di configurare facilmente il sistema, nei vari menu dei desktop si possono trovare varie voci per le varie configurazioni o anche un panello di controllo unico, per GNU Linux `estato sviluppato un potentissimo programma per il controllo del sistema, WebMin prevedete moltissimi moduli al proprio interno e, ognuno dei quali, permette dall’utente di amministrare uno specifico compo- nente del sistema, l’applicazione `euna applicazione web quindi per usarla basta un browser ed `eusabile da qualsiasi distribuzione Linux, questo programma permette di amministrare praticamente tutto senza dover conoscere ogni file di configurazione e ogni dettaglio ed `ecostantemente aggiornata con le ultime versioni dei componenti quindi risulta sempre stabile e semplice da usare. WebMin non `epi`uall’interno dei mirror ufficiali di Debian rispetto alle precedenti versioni e, anche quando era presente nell’elenco ufficiale dei pacchetti, io consigliavo sempre di scaricare l’ultima versione del sito ufficiale, ora invece basta aggiungere un mirror particolare alla nostra lista delle sorgenti dei pacchetti per scaricare il pacchetto aggiornato, prima di tutto bisogna installare un paio di pacchetti propedeutici tramite e poi procediamo con tutte l’installazione del mirror e del pacchetto webmin, tramite i comandi # apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python apt-transport-https # echo "deb http://download.webmin.com/download/repository sarge contrib" tutto in una riga ... tee /etc/apt/sources.list.d/webmin.list # wget http://www.webmin.com/jcameron-key.asc # apt-key add jcameron-key.asc # apt-get update # apt-get install webmin dopo averlo installato proviamo subito a vedere lo stato del programma demone con il comando # systemctl status webmin Se non dovesse avviarsi automaticamente all’avvio del sistema basta, per avviarlo basta lanciare il comando # systemctl start webmin Per poter accedere al pannello di controllo basta lanciare da un browser l’url https://localhost:10000/ se nell’accedere a questo indirizzo il firewall dovesse bloccarlo per qualche motivo basta lanciare i comandi si blocco # firewall-cmd --permanent --add-port=10000/tcp # firewall-cmd --reload CHAPTER 3. CONFIGURAZIONI BASE DI GNU LINUX E DEBIAN 19

# 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 potente ma forse anche troppo potente... fate sempre attenzione a quello che fate e pensateci due volte prima di fare qualcosa di cui non siete veramente sicuri perch´epotreste rovinare le configurazioni del sistema.

3.4 Gestione dei pacchetti di Debian

E’ impossibile usare un sistema Debian senza conoscere almeno le basi della gestione dei pacchetti, infatti `eun argomento fondamentale per chi vuole usare un sistema GNU Linux e in particolar modo un sistema Debian, comprese le derivate anche Ubountu e Knoppix: i pacchetti sono un insieme di file organizzati e compressi in directory in modo che possano essere installati nel sistema velocemente senza problemi; 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 (altre distribuzioni possono avere altri formati come RPM per RedHat). Debian `efamosissima per la sua 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 lista di dipendenze cio`eogni pacchetto 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, quindi non riuscirete ad installare il pacchetto mpm-prefork senza aver prima installato common e non riuscirete ad installarlo se `egi`apresente 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 (APT e Synaptic) gestiscono automaticamente queste dipendenze e riescono a gestire i pacchetti con ordine e precisione quindi mai riuscirete ad installare un pacchetto se non sono rispettate le regole di dipendenza da altri pacchetti. La gestione di Debian si basa su DPKG (l’abbreviazione di Debian PacKaGe) ed `eil componente principale della distribuzione Debian: `eusato per installare, disinstallare ed ottenere informazioni sul singolo pacchetto in formato standard deb. Dpkg per`o`eun tool di basso livello cio`eriesce ad eseguire poche operazioni e sempre su un solo pacchetto mentre Advanced Packaging Tool, conosciuto come APT, `eil gestore standard di pacchetti software della distribuzione Debian che viene utilizzato per installare, aggiornare, verificare e rimuovere software del sistema operativo in maniera intuitiva e aiuta a risolvere le dipendenze tra i pacchetti, ha la particolarit`adi sfruttare contemporaneamente diverse sorgenti di pacchetti (sorgenti remote FTP e HTTP, cdrom, DVD e hard disk), di gestire autonomamente diverse distribuzioni di pacchetti e di permettere velocemente l’aggiornamento del sistema operativo ad una particolare distribuzione. Tutti i comandi che vi serviranno per gestire i pacchetti da riga di comando sono: • # apt-get update aggiorna la lista dei pacchetti (da eseguire dopo aver modificato il file sources.list) • # apt-get install nomepacchetto installa il pacchetto nel sistema, scegliendo l’ultima versione disponibile ed andando a risolvere eventuali dipendenze installando i pacchetti necessari e togliendo i file che entrerebbero in conflitto con il pacchetto • # 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 • # apt-get moo regala all’utente un simpatico messaggio • # apt-get install -f verifica che tutti i pacchetti siano installati e configurati correttamente, da usare se qualche pacchetto non l’installazione non termina con successo • # apt-get clean cancella tuti i file temporanei di apt-get cio`ei file deb scaricati e gi`ainstallati • # dkpg --configure -a come il precedente ma funziona anche in casi estremi e risolve tutti i problemi di conflitto tra i pacchetti CHAPTER 3. CONFIGURAZIONI BASE DI GNU LINUX E DEBIAN 20

• # dpkg-reconfigure pacchetto riconfigura un pacchetto installato • # 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) Come abbiamo gi`avisto in precedenza tutta la gestione dei mirror e delle sorgenti dei pacchetti dipende dal file /etc/apt/sources.list ovviamente essendo un file di sistema pu`oessere modificato solo dall’utente root, poi esiste anche la cartella /etc/apt/sources.list.d dove si possono creare dei file con estensione list per aggiungere altri mirror specifici come abbiamo fatto poco fa con webmin e come andremo a fare in seguito per altri grandi programmi. Nei file list di apt, ad ogni riga, corrisponde una sorgente che pu`oessere un DVD, un mirror in internet, una cartella del sistema locale oppure una cartella nella rete locale. Per modificare l’elenco delle sorgenti da cui APT andr`aad attingere le informazioni, `epossibile modificare il file e ogni voce dell’elenco dovr`aseguire uno di questi formati: 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), che sono i pacchetti gi`acompilati che normalmente vengono usati; oppure indica se l’archivio contiene i pacchetti sorgente (deb-src), che sono il codice sorgente originale del programma; mentre la seconda parola indica l’indirizzo della sorgente. Al posto di distribuzione deve essere indicata la distribuzione che si vuole gestire (di solito uno dei tre rami di sviluppo stable, testing o unstable, oppure esplicitamente la versione, come etch, sid o sarge). Le sezioni indicheranno quali parti della distribuzione dovranno essere gestite, tipicamente si trova main (i pacchetti completamente liberi, la maggioranza), non-free (i pacchetti rilasciati sotto una licenza non libera) e contrib (pacchetti liberi che per`odipendono da altri non liberi). Al termine di ogni modifica del file `enecessario lanciare il comando: # apt-get update oppure cliccare sul pulsante Aggiorna dei gestori grafici, perch´ei programmi di gestione dei pacchetti riconoscano le modifiche e le applichino. APT e DPKG non sono stati studiati per essere interfacciati graficamente, quindi sono nati diversi strumenti grafici che permettono di gestire il contenuto del sistema attraverso una interfaccia grafica che pu`orisultare pi`u intuitiva 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, questo programma `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,...) 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 La shell e i desktop

In precedenza abbiamo avuto la necessit`adi aprire la riga di comando, questo `eindispensabile almeno nelle fasi di configurazione di un sistema GNU Linux, la riga di comando 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`ucomplete 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 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 nostra versione 9 di Debian il server grafico si trova 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). Un utente pu`oabituarsi a navigare sui canali oppure rimanere sempre sul settimo che di solito viene attivato di default, utilizzare il programma grafico della riga di comando, ogni utente infatti si abitua in un modo ma poi pu`ousarli entrambi come fa la persona che scrive questo testo. CHAPTER 3. CONFIGURAZIONI BASE DI GNU LINUX E DEBIAN 21

Nei successivi capitoli potete trovare una lista completa dei comandi riconosciuti e usabili nella bash, nel prosegui- mento di questo manuale introdurr`osempre pi`ucomandi cercando di descriverli, la bash mette anche a disposizione un linguaggio di scripting (chiamato sh) e in questo documento useremo qualche script scritti in questo linguaggio e cercando sui motori di ricerca potete trovare script molto utili. Il server grafico viene chiamato X-WindowSystem o pi`usemplicemente spesso indicato con X, gestisce l’interfaccia utente e non esiste un unico desktop, infatti esistono pi`udi un desktop che l’utente pu`oinstallare ed usare 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 compilate per GNU Linux, possono essere eseguite da qualsiasi tipo di desktop perch´etutte le applicazioni si basano sulle librerie del server grafico X (librerie Xlib, GTK e Qt), nel prossimo capitolo vedremo i pi`uimportanti e utili programmi per GNU Linux. 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, invito sempre tutti gli utenti ad installarli e provarli per un po’ di tempo per poi scegliere quello pi`ucomodo e che pi`upiace, se si vuole provare le nuovissime componenti grafiche di Gnome 3D chiamate Gnome Shell dovete avviare Gnome e lanciare il comando $ gnome-shell --replace oppure attivarle nel pannello di controllo di Gnome stesso.

3.6 Login manager, processi e rete

Durante l’installazione `estato creato un primo utente che poi `eutilizzato al primo accesso ma attraverso i vari tool di controllo, come WebMin e il gestore degli utenti nel men`u,`epossibile creare e configurare nuovi utenti, gestendo anche diversi gruppi di utenti, per fare un accesso con questi utente potete utilizzare la login della shell (usando la sequenza di tasti CTRL+ALT+Fn) oppure usando la login grafica, chiamata GDM (Gnome Desktop Manager) che compare quando si accende un sistema: GDM `eil gestore di default di Debian, esistono anche altri gestori della login grafica ma ne sconsiglio l’utilizzo per gli utenti 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, da notare che 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, se usate la shell vi consiglio anche di provare il comando top che di fatto `eun piccolo task manager molto 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 e # 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), i due programmi 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), potete trovare l’elenco di tutti i dispositivi compatibili e le guide per l’installazione all’indirizzo web https://wiki.debian.org/it/WiFi per esempio io ho lanciato il comando per la mia scheda e tutto si `econfigurato in un attimo per`ocerte chiavette USB - WIFI hanno bisogno di un driver particolare e quindi bisogna andare ad installare i pacchetti che iniziano per “firmware” presenti su Synaptic. Alla fine dell’installazione del componente WiFi dovete manualmente configurare la rete WiFi e potete farlo attraverso il solito programma Net configuration (o in italiano Connessioni di rete). Per monitorare la rete potete usare il comodo “Monitor di Sistema” del desktop oppure usare il programma wavemon (da installare il pacchetto) oppure usare i comandi CHAPTER 3. CONFIGURAZIONI BASE DI GNU LINUX E DEBIAN 22

# iwconif wlan0 oppure # watch -n 1 cat /proc/net/wireless Il firewall nativo di GNU Linux `eproprio il componente iptables, se volete configurare il vostro firewall (che `e sempre buona cosa fare) potete usare i programmi grafici Firestarter oppure GuardDog, se siete utenti un po’ pi`uesperti potete usare i comandi da riga di comando oppure modificando i vari file di configurazione, per esempio seguendo la guida che trovate all’indirizzo http://wiki.ubuntu-it.org/Sicurezza/Iptables. Chapter 4

Applicazioni per GNU Linux

Uno degli errori pi`ucomuni degli utenti che non conoscono bene i sistemi GNU Linux `epensare che non disponga delle pi`ucomuni applicazioni per il normale utilizzo, in realt`aesistono migliaia di applicazioni che rendono i sistemi completi e perfettamente utilizzabili senza problema e senza dover rinunciare a nulla, basta infatti aprire Synaptic e raggruppare i pacchetti per categoria per rendersi conto di quante applicazioni sono 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 tra le applicazioni quindi un utente non deve preoccuparsi di nulla, non deve nemmeno preoccuparsi di quale desktop viene utilizzato: tutte le applicazioni “standard” sono compatibili con tutti i desktop disponibili (KDE, Gnome, Xfce, 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, disponibili su Synaptic, sono totalmente gratuiti e scaricabili dai mirror internet, su altri mirror non ufficiali Debian `epossibile scaricare altri programmi gratuitamente come per esempio il mirror di Google permette il download e l’installazione del browser Chrome, se un utente vuole per`oacquistare e installare un programma a pagamento deve acquistarlo per poi installarlo manualmente, spesso i produttori creano i pacchetti Debian cos`ıbasta installarlo con il gestore dei pacchetti con una semplice riga di comando. Non esiste un elenco completo ed ufficiale di tutti i programmi disponibili, questo perch´ei 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 File di testo

Un utente che usa GNU Linux ha prima di tutto bisogno di usare e prendere confidenza con i file di testo per modificare i vari file di configurazione come abbiamo gi`afatto in alcuni punti precedenti di questa guida, 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 possiamo trovare facilmente molti editor di testo pi`uo meno complicati a seconda delle esigenze: sulla shell esistono i famosi (e storici) programmi e ma questi programmi necessitano di conoscente avanzate per poter essere usati in quanto i comandi per l’editor sono diversi dai classici comandi che si trovano in altri editor, il programma pi`usemplice da usare `e pico che pu`oessere usato anche da utenti meno esperti in quanto basta usare il tasto CTRL per passare dalla modalit`aeditor alla modalit`amen`u. Chi invece usa un desktop manager, pu`ousare i vari programmi grafici che sono messi a disposizione nei vari 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 migliore di tutti `e Kate che oltre ad essere un semplice editor di testo, attraverso alcune componenti grafiche, pu`oessere usato per programmare visto che possiede un sistema di riconoscimento dei linguaggi di programmazione oppure per scrivere documenti, ovviamente l’utente non deve aspettarsi le grandi potenzialit`adi un word-processor. 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 senza estensione come il file fstab che abbiamo gi`avisto in precedenza nella sezione dedicata al comando mount, nonostante i nome e le estensioni poco chiare, qualsiasi file pu`oessere aperto e modificato con un qualsiasi file di editor ma bisogna sempre tenere a mente che i file non semplici come i file di un

23 CHAPTER 4. APPLICAZIONI PER GNU LINUX 24 word-processor o qualsiasi tipo di file non testuale non deve essere modificato per evitare di perdere informazioni o rovinare il file in maniera definitiva.

4.2 File explorer

Per esplorare e navigare tra le varie cartelle del Sistema, oltre che alla riga di commando, `epossibile utilizzare i tanti file manager che si possono trovare nel sistema, tipicamente ogni Desktop ha il proprio file manager e spesso in un desktop `epossibile trovarne anche pi`udi uno, il programma predefinito sul Desktop KDE `e Konqueror e pu`oessere usato anche in altri desktop, anche se `eun vecchio browser web, `eancora usatissimo come file exploper ed `estato migliorato molto tanto da diventare uno dei miglioro programmi per muoversi tra le varie cartelle del sistema. Una delle potenzialit`amaggiori `equella di visualizzare l’albero delle cartelle cosa molto rara da trovare in altri programmi per la navigazione nei filesystem, inoltre nelle versioni pi`urecenti sono stati integrati anche un visualizzatore di immagini, un piccolo editor di test 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 (voce Configure Extensions 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 alternativa che io consiglio `e dolphin che presenta una interfaccia molto semplice e veloce, pur non disponendo di plugin, rimane il pi`uintuitivo programma per navigare tra files e directories, 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 Sistema di compressione dei file (Tar, Zip e Rar)

Lo standard di compressione del mondo GNU Linux si chiama TAR che in realt`a`eun algoritmo di aggregazione e non di compressione, cio`equesto tipo di standard non comprime ma li accorpa in un unico file contenitore, per eseguire una compressione si usano altri standard (cio`ealgoritmi di compressione) come gz oppure 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. Se volete 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 ark (deve essere installato da 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. CHAPTER 4. APPLICAZIONI PER GNU LINUX 25

4.4 Programmi per l’ufficio

Ci sono varie suite che si possono usare per avere i classici programmi per l’ufficio, il principale gruppo di applicazioni per l’ufficio per il mondo GNU Linux `estato per tanti anni il famoso OpenOffice.org che potete trovare sui repository, di default non `einstallato subito ma potete invece trovare di default l’altra 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 consiglio di lasciare LibreOffice senza installare il gigante. 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 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 da segnalare e provare sono kMyMoney, Grisbi e MoneyDance (a pagamento). 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 (forse il migliore), Gazie-web, TeamMosaico (il pi`ufamoso e il pi`uusato), Openbravo, il mio consiglio `edi provarli tutti se ne avete bisogno guardando le funzionalit`adisponibili e poi fare una scelta a seconda delle proprie esigenze.

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, lo trovate sotto il nome di IceWeasel e con un icona diversa rispetto alla volpe rossa. Vi consiglio subito di installare da Synaptic anche il pacchetto flashplayer-mozilla per installare il plugin per permettere l’esecuzione dei flash e di installare il pacchetto totem-mozilla per poter vedere video e filmati direttamente sul browser. Sui sistemi GNU Linux potete usare anche altri programmi come Amaya, Konqueror (anche se un po’ vecchio) e Epiphany che risulta essere il pi`uveloce programma per la navigazione web ed `eil browser di default sul desktop GNOME. Per installare il browser Opera direttamente da Synaptic, deve essere presente la riga nel file sources.list: deb http://deb.opera.com/opera/ stable non-free Per installare il browser Google Chrome direttamente da Synaptic, deve essere presente la riga nel file sources.list: deb http://dl.google.com/linux/chrome/deb/ stable main oppure `epossibile installare , 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 molto simili ma non uguali, le differenze maggiori sono l’assenza di un player flash, un visualizzatore interno di PDF e il sistema automatico degli aggiornamenti che viene delegato al sistema operativo tramite il pacchetto ”chromium”, notare che in alcune sotto-distribuzioni minori `epersino il browser di default come nella Lubuntu e presto lo sar`aanche di Debian. 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 (quest’ultimo `elo storico programma di UNIX/GNU Linux da riga di comando). I migliori programmo per le chat e l’instant messaging per GNU Linux sono Pidgin (il programma una volta si chiamava Gaim), kMess e aMSN, mentre per installare Skype direttamente da Synaptic, deve essere presente la riga nel file sources.list: deb http://download.skype.com/linux/repos/debian/ stable non-free per`opotete usare anche altri VoIP-client come Ekiga, WengoPhone e Asterisk. I programmi qui elencati non sono dedicati per uno specifico desktop quindi potete usarli indipendentemente dall’ambiente grafico usato.

4.6 Multimedialit`a

A differenza di quello che si pensa in Debian sono presenti moltissimi programmi multimediali, non solo per vedere video e ascoltare musica ma anche per fare editing video e ho trovato decoder e/o 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 `epossibile se, nel proprio pc, `epresente un dispositivo di acquisizione TV come le chiavette USB. CHAPTER 4. APPLICAZIONI PER GNU LINUX 26

Prima di tutto bisogna scaricare ed installare i Codec, cio`ele librerie necessarie per poter codificare i vari formati standard (e anche non standard), per questa installazione basta usare Synaptic e controllare che i seguenti pacchetti siano gi`ainstallati nel vostro sistema: • libavcodec57 • libavdevice57 • libdvdnav4 • libdvdread4 • mpeglib (se presente) • libavformat57 • w32codec (scaricabile dal mirror non ufficiali Nerim, non pi`unecessario nell’ultima versione) • libxvidcore4 Per prima cosa un utente deve sapere che il sistema Debian affida la gestione dell’audio al sottosistema ALSA che `eresponsabile di tutti i suoni, 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, potete trovare sulla lista dei programmi nella categoria Multimedia e vi accorgerete che ve ne sono pi`ud’uno, ovviamente a voi usare quello che pi`uvi piace. C’`ela possibilit`adi scegliere il programma che pi`uvi piace e avrete l’imbarazzo della scelta: il primo programma che voglio descrivere `eil famoso Totem - Lettore Multimediale, lettore molto semplice e comodo, `esicuramente il pi`uusato e il pi`ufamoso, infatti da proprio la possibilit`adi gestire i file multimediali in modo molto intuitivo, faccio notare che Totem funziona su tutti i desktop manager dove `equasi sempre il player predefinito per i file di tipo video. La lista dei player di file multimediali `elunghissima ed eviter`odi annoiare il lettore (come sempre ho cercato in questo documento) anche perch`ela lista completa risulterebbe incomprensibile per la sua lunghezza, elenco solo quei programmi che io ho avuto la possibilit`adi usare pi`uvolte e che meritano di essere provati: • VLC famoso player disponibile anche su altre piattaforme • Codeine programma molto semplice e intuitivo anche se non ha la possibilit`adi crearsi una scaletta • KPlayer giovane programma simile a Totem anche se incompleto in alcuni punti • Amarok programma per ascoltare musica avendo la possibilit`adi creare una playlist e mantenere il programma attivo su una icona vicino all’orologio, da provare se ascoltate molta musica con file mp3 • Kaffeine buon programma per ascoltare musica • MPlayer player di video per linux • Noatun player di video per linux Ovviamente potete guardare su Synaptic la lista completa dei programmi. Per poter visualizzare i filmati nel formato di RealPlayer baster`aandare ad installare il pacchetto chiamato proprio RealPlayer, un po’ di tempo fa esistevano delle librerie che permettevano la visione dei file RealPlayer anche su Totem e su tutti i player di Linux, ora invece il pacchetto di RealPlayer installer`aun programma apposta per poter guardare i filmati con estensione rm. In un futuro (non tanto lontano) questo pacchetto verr`acancellato dai mirror ufficiali Debian, in quanto RealPlayer non rispetta la famosa filosofia di Debian cio`enon `eopensource. Chi dispone di una scheda di acquisizione TV, in Italia siamo costretti ad usare il sistema digitale terrestre, potr`atranquillamente utilizzarlo: Debian contiene automaticamente dei programmi per guardare la tv e anche per registrare i propri programmi preferiti, faccio solo una lista dei programmi che potete provare ed usare: • kradio ascoltare la radio con una semplice e piccola applicazione, usando la scheda di acquisizione tv • kdetv il pi`usemplice programma funzionante per vedere la tv, comoda la barra laterale che permette di cambiare canale con un semplice click, Consigliato • XawTV storico programma, semplice anche se spesso non funziona e non sempre `ecompatibile con i driver delle schede video Nvidia • XdTV programma non ufficiale di Debian (presente nei mirror alternativi), bello e semplice programma CHAPTER 4. APPLICAZIONI PER GNU LINUX 27

• 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. Permette di schedulare le registrazione, televideo e molte altre cose, da provare, necessita dell’accelerazione grafica, per configurarlo basta lanciare il comando $ mythtv-setup 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 K3B 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`oinstallare il plugin ufficiale che funziona veramente molto bene, per averlo basta aggiungere nel file /etc/apt/sources.list la riga se non presente: deb http://repository.spotify.com stable non-free oppure lanciare il comando che lo fa in automatico e poi lanciare i comandi # apt-get update # apt-get install spotify-client per poi andare ad avviare l’applicazione dal men`uoppure inserendo spotify nell’elenco delle applicazioni che si avviano all’inizio della sessione del desktop.

4.7 Visualizzatori ed editor di immagini

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 e anche Konqueror possiede un proprio visualizzatore interno, quindi vi consiglio di provare 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 mentre pochi programmi supportano le bmp. Per la visualizzazione delle immagini io usavo un programma molto vecchio chiamato KuickShow: un sempli- cissimo ma velocissimo programma per la visualizzazione delle immagini con la possibilit`adi scorrere file contenute in una directory attraverso i tasti, il programma non `epi`udisponibile su Synaptic perch`eritenuto troppo vecchio ma potete trovarlo e scaricarlo da internet (dovete scaricare i pacchetti imlib-base 1.9.15-7, imlib11 1.9.15-7 e kuickshow 3.5.9-3+lenny3). Tra i programmi per modificare le immagini, avrete sicuramente sentito parlare di GIMP (GNU Image Manip- ulation Program), il pi`ufamoso programma di GNU Linux per la modifica delle immagini e, ad oggi, uno dei pi`u usati al mondo visto che `edisponibile su tutte le piattaforme ed `ecompletamente gratuito, le ultime versioni sono veramente all’altezza dei rivali. Se avete bisogno di grafica 3D potete provare Blender, potete provare anche il programma Dia che permette di creare diagrammi di flusso, circuiti elettrici, grafici UML, diagrammi di rete, diagrammi E-R ed altri ancora. Se avete uno scanner potete usare i programmi sane e xSane ma potete usare anche GIMP (installando il pacchetto xsane-gimp, se il pacchetto xsane-gimp non `epresente nella lista dei pacchetti vuol dire che Gimp comprende automaticamente questa utility).

4.8 Applicazioni varie

In questa sezione voglio racchiudere tutte quelle applicazioni molto utili che non rientrano in nessun altra categoria gi`apresentata ma che meritano di essere brevemente descritte e provaten, all’interno dei desktop manager principali come GNOME o KDE potete trovare installati automaticamente dei PDF reader per`osi possono installare (come kPDF) e potete provare pdfedit per provare a modificare un file di tipo PDF. Senza alcun dubbio K3B `ela migliore applicazione per GNU Linux per la masterizzazione di CD-ROM e DVD, mi ha sempre sorpreso la velocit`ae la CHAPTER 4. APPLICAZIONI PER GNU LINUX 28 semplicit`adi questa applicazione anche se per masterizzare potete usare anche GnomeBaker, Nero for GNU Linux, oppure i comandi da riga di comando cdrecord e growisofs, per creare dischi-video potete provare VCDImager. Per il controllo da remoto dei sistemi potete usare rdesktop che `ecompatibile con quello di MsWindows e potete provare TeamViwever oppure 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 Se utilizzare il servizio dropbox non dovete aver paura in quanto esiste il pacchetto che fa al caso nostro, purtroppo non `esui repository ufficiali ma dovete scaricare il pacchetto dal sito web ufficiale di Dropbox https://www.dropbox. com/it/install?os=lnx, una volta scaricato il pacchetto vi baster`ainstallarlo con il semplice comando: # dpkg -i dropbox160.deb per avere dropbox installato, al primo accesso avrete la possibilit`adi agganciare una cartella del vostro disco come se fosse la vostra cartella di Dropbox e da quel momento sar`aintegrata con qualsiasi file manager utilizzate di qualsiasi tipo di desktop, potrete anche attivare un’icona nella barra principale per avere sempre la vostra cartella dropbox a portata di mano e verrete sempre aggiornati se altri utenti aggiornano la vostra cartella.

4.9 Giochi per GNU Linux e Cedega

A differenza di quello che si pensa, Linux ha una grandissima variet`adi giochi per il suo sistema ed `eormai super- fluo dire che questi giochi possono funzionare indipendentemente dalla piattaforma e dal desktop che si usa, questa lista comprende passatempi, come solitari e arcade, oppure giochi pi`ucomplicati, come gare d’auto o sparatutto, non poteva mancare anche una versione di Mame, il famoso emulatore di ROM di giochi delle vecchie console. Presento una breve lista di tutti i principali giochi che io ho avuto il tempo di provare - 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

- 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 - xPilot semplice gioco di battaglia navale

- KSirk: versione di Tetris - Mame: motore per l’emulazione dei giochi arcade vecchi (non contiene le rom con i giochi) Alcuni di questi giochi necessitano della accelerazione grafica quindi dovete installare i driver della vostra scheda video (ATI o NVIDIA), nella seconda parte di questo manuale, spiegher`ocome installare i driver. Per quanto riguarda il gioco Minecraft `epossibile acquistare dal sito ufficiale il gioco e poi scaricare la versione per i sistemi GNU Linux che `epersino pi`uveloce delle altre versioni, una volta scaricata la versione basta lanciare il jar auto-installante per poi avere il gioco disponibile nel proprio sistema. Cedega `eun programma per far funzionare giochi e programmi compilati per MsWindows sui sistemi GNU Linux, ad oggi la esiste una lunghissima lista di giochi che possono essere usati e ben configurati, `ea pagamento e pu`oessre acquistato direttamente dal sito ufficiale: CHAPTER 4. APPLICAZIONI PER GNU LINUX 29 www.cedega.com Dovete sempre stare attenti ad aver ben configurato il server grafico X e l’accelerazione grafica che risulta indispens- abile alla maggior parte dei giochi per Windows, per chi fosse interessato esiste una versione di cedega anche per Mac e per le console (playstation e xbox) ma non posso assicurarne il funzionamento perch`enon le ho mai provate. Dopo averlo acquistato, potete scaricare la versione per debian del software, infatti potrete scaricare il file deb e installarlo nel sistema con il comando: # dpkg -i cedega-small 6.0 all.deb Nel men`udel vostro desktop potete trovare la voce Cedega nella sezioni Giochi. Da notare che nella cartella Home di ogni utente viene creato un collegamento ad una cartella chiamata TransGaming Drive, a voi l’onore e il piacere di andare a vedere cosa `econtenuto dentro a questa strana cartella, durante la prima esecuzione il wizart-setup bisogna andare ad installare il famoso local-package, cio`ele librerie che fanno funziona il programma. Ovviamente basta selezionare il file adatto che si chiama cedega-engine-6.0, come ultima impostazione dovete controllare che Cedega riconosca regolarmente la scheda grafica, l’accelerazione grafica e i driver alsa per l’audio, per fare questo controllo basta andare su Test di Sistema del menu Strumenti. A questo punto possiamo tranquillamente provare ad installare un gioco, possiamo lanciare il setup direttamente da cd ma consiglio di copiare il contenuto da una memoria fissa, per lanciare il setup del gioco dobbiamo aprire una console (rimanendo sempre dentro al desktop), accedere alla console come superutente root (lanciando il solito comando su) e lanciare il comando: # cedega setup.exe Una volta installati potete lanciarli dal programma Cedega che trovate nel men`udel vostro desktop. 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 voglio di certo filosofeggiare con definizioni anche perch`edi certo non sono un teologo dell’informatica e nemmeno un il pi`uesperto, in questo verr`aevitata il pi`upossibile la parola server ma verr`ausato il sinonimo usato nel mondo GNU LINUX: demoni che `ela traduzione del termine inglese deamon. Con le dovute cautele prendiamo per vera la definizione pi`uusata cio`eche un demone `eun processo in esecuzione in background che risulta sempre attivo, senza che l’utente debba gestirlo o controllarlo manualmente con una interazione ridotta ma che risponde quando viene invocato dall’utente o da un altro demone, un esempio classico `e il demone Apache (chiamato anche httpd) che gira in background e resta in ascolto finch`equalcuno non lo invoca, per esempio aprendo una pagina web da browser inserendo il corretto indirizzo oppure il servizio database MySql che rimane sempre attivo e rende disponibili database e tabelle invisibile all’utente che quando chiama una pagina PHP questa richiama il database per avere i dati. 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 server grafico X (quindi i desktop) e il sistema della shell che usiamo per lanciare i comandi, molti ”filosofi” dell’informatica definiscono anche il KernelLinux un demone ma voglio evitare frasi filosofiche su questo accostamento sia corretto o meno, lascio al lettore, se interessato, a cercare ed informarsi in internet nei vari siti specializzati e nei blog dove le discussioni sono sicuramente pi`uinteressanti di questo documento.

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 eseguire una stampa, il problema principale `eche non tutte le case produttrici di stampanti sviluppano i driver per i sistemi GNU Linux e che alcuni

30 CHAPTER 5. DEMONI 31 modelli di stampanti vecchie non funzionano sui sistemi GNU Linux, c’`eda dire che la situazione `emolto migliorata in questi ultimi anni e ormai tutte le stampanti di ultima generazione hanno in driver disponibile sui sistemi GNU Linux oppure `epossibile usare un driver generico della marca che funziona su tutti i modelli dei una generazione. Il demone CUPS (acronimo di Common UNIX Printing System) `esemplice come installare tutte le applicazioni che abbiamo gi`avisto: con Synaptic bisogna selezionare un elenco di pacchetti: - tutti pacchetti che iniziano per cups (tranne cupssys-driver-gimpprintdata) - apsfilters - ppdfilt - db (all’ultima versione disponibile, per esempio db5.3) - foomatic-db Questo elenco `emolto completo e sicuramente comprende componenti che non verranno mai usati ma in questo caso `emolto importante installare tutti i componenti per evitare di perdere pezzi, oltre a questi pacchetti potete cercare in Synaptic i driver per una stampante (di solito il pacchetto si chiama come la marca) oppure alcune marche mettono a disposizione i pacchetti direttamente sui siti web e poi vi basta installare il pacchetto con il comando dpkg. Cosa importante `enon installare il pacchetto lpr e, se gi`apresente, Synaptic andr`aa rimuoverlo durante l’installazione di CUPS. 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 pi`uvelocemente. Una volta installata una stampante (locale o di rete) si possono scegliere tutte le impostazioni (come Bianco-Nero/Colore, la qualit`ae il tipo di carta) direttamente sul sito di CUPS o sui vari programmi dei desktop mananger. Per condividere una stampante locale in rete basta installare anche SAMBA e dal condivisione potr`aessere configurata direttamente dal pannello di amministrazione. Oltre al sito web indicato `epossibile anche usare i vari programmi di gestione delle stampanti disponibili nel desktop, per esempio nel men`u,all’interno della categoria Preferenze, potete trovare le Impostazioni di stampa che `esemplice come il sito web nativo di CUPS.

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 aggiunto nulla, infatti basta usare il protocollo SSL ed installare i pacchetti openssh-server e openssh-client per avere a disposizione nei vari file manager le condivisioni a portata di mano, tuttavia il protocollo ssh funziona solo su 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 vi permetter`adi condividere file e stampanti tra i vari sistemi operativi, per attivarlo vi basta installare il pacchetto Samba che `eil demone della condivisione con il protocollo NetBios usato dal sistema operativo MsWindows e anche dai sistemi operativi di Apple, una volta installato il pacchetto `epossibile configurare a il servizio dal file di configurazione /etc/samba/smb.conf all’interno del quale possiamo trovare varie configurazioni, prima di tutto bisogna definire il server con il gruppo di parametri [global] workgroup = nomeRete server string = Linux Samba Server netbios name = nomeComputer security = user dns proxy = no encrypt passwords = yes dove alla riga workgroup dobbiamo mettere 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 basta copiarle cos`ıcome sono. Per aggiungere una cartella condivisa basta aggiungere il blocco di configurazioni [Dati] comment = Dati condivisa path = /mnt/Dati/ writeable = yes CHAPTER 5. DEMONI 32 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. Per esperienza, vi segnalo che 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 vi consiglio di controllare il vostro firewall, per abilitare la rete vi 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 Firestarter e inserire l’IP del vostro sistema nella sezione Trust per permettere le condivisioni.

5.3 LAMP (demoni Apache e Mysql)

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 (e questo lo avete gi`a)

• Apache: il Web server • MySQL: il database management system • Perl, PHP e/o Python: i linguaggi di scripting

Il primo demone da installare `eil famoso Apache, assieme ad esso andremo immediatamente ad usare il demone per il database MySql e i pacchetti necessari per programmare con il linguaggio PHP, la configurazione `emolto pi`u complicata di come `edescritta qui di seguito, lo scopo `esolamente quello di mostrare come installare un sistema base 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 il server web pu`obenissimo saltare questa sezione perch`el’installazione e l’uso del server Apache `euna cosa indipendente dal resto del manuale. E` preferibile installare Apache assieme a MySql e all’interprete Php perch`ei pacchetti sono dipendenti fra loro e chi vuole usare Php ha la necessit`adel server web e del server database, questa scelta non `eassolutamente vincolante e possono essere installati anche altri database, come interbase o PostgreSQL, ma (come `espesso soprannominato) il matrimonio del secolo `etra Apache-PHP-MySQL. Per prima cosa andiamo ad installare i pacchetti necessari, si pu`ofare con Synaptic oppure nella shell dobbiamo eseguire i comandi: # apt-get install mariadb-client mariadb-server # apt-get install php7.0 php7.0-mysql apache2 phpmyadmin 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, andando all’indirizzo in un browser: CHAPTER 5. DEMONI 33 http://localhost/ e dovrebbe comparire la pagina di benvenuto di apache dal titolo Apache2 Debian Default Page. E’ anche possibile accedere all’applicazione web phpmyadmin, anche se il demone database non `eancora configurato, tramite l’indirizzo: http://localhost/phpmyadmin/ Se un programmatore vuole configurare Apache inserendo una nuova applicazione 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 dobbiamo modificare il file di configurazione di Apache /etc/apache2/apache2.conf una volta aperto, sembrer`astrano ma `eil contenitore di (quasi) tutte le configurazioni del nostro server web, comprese le impostazioni di rete e la lista delle applicazioni web presenti nel sistema. Ora bisogna controllare 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 poi dobbiamo andare ad inserire a fine del file le seguenti righe (tutte in un blocco alla fine del file) 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. Faccio notare anche che anche in questo caso c’`e differenza tra maiuscole e minuscole. Con l’ultimo blocco abbiamo semplicemente creato un sito web per ogni utente che usa il computer, 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/~nomeutente/ A questo punto, per rendere effettive le modifiche fatte sul file, dobbiamo riavviare il server con l’istruzione: # systemctl restart apache2 possiamo andare a controllare se il demone `eattivo come abbiamo fatto in precedenza. In questo momento la cartella virtuale `equella di default cio`ela cartella /var/www/ e il mio consiglio `edi non modificarla ma di crearne una nuova in modo da separare tutte le applicazioni web di sistema (che vengono installate sulla cartella di default) dalle vostre applicazioni web, per creare una propria applicazione web dobbiamo rientrare nel file di configurazione e aggiungere alla fine del file il blocco di righe Alias "/Php/""/mnt/Dati/Php/" Options Indexes FollowSymLinks Includes AllowOverride All Order deny,allow Allow from all Require all granted in questo modo abbiamo creato 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 vedremo anche come fare una piccola e semplice configurazione del database MySql, che `edisponibile sui repository con il nome di MariaDB dalla versione 9 di Debian 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 -u root -p e una volta entrati bisogna lanciare i comandi: CREATE DATABASE newdb; CREATE USER ’username’@’localhost’ IDENTIFIED BY ’userpassword’; CREATE USER ’phpmyadmin’@’localhost’ IDENTIFIED BY ’phpmyadmin’; GRANT ALL PRIVILEGES ON newdb.* to ’username’@’’; GRANT ALL PRIVILEGES ON newdb.* to ’phpmyadmin’@’localhost’; use mysql; UPDATE user SET password=PASSWORD(’your new password’) where User=’root’; CHAPTER 5. DEMONI 34

UPDATE mysql.user SET authentication string=PASSWORD(’your new password’), plugin=’mysql native password’ WHERE User=’root’ AND Host=’localhost’; FLUSH PRIVILEGES; quit; poi bisogna riavviare il demone database con il comando # systemctl restart mariadb per rendere effettive le modifiche alla password di root e per poter accedere con phpmyadmin e per accedere da un sito costruito con php. 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 siamo entrati nella shell di mysql, siamo entrati nel database test (che esiste per default), abbiamo creato una tabella chiamata prova e abbiamo inserito un record nella tabella e alla fine abbiamo visto il risultato, chi conosce il linguaggio SQL trover`aquesto banale mentre chi non lo conosce non avr`acapito nulla ma, volevo solo far vedere che il server MySql funziona correttamente. Su LAMP `epossibile anche aggiungere il famoso server Tomcat per l’utilizzo di applicazioni Java J2EE (con le servlet e JSP), per chi fosse interessato a tale opzione rimando al capitolo sulla programmazione alla sezione Java dove `espiegato brevemente come installare e configurare Tomcat su LAMP.

5.4 Altri demoni

In questa sezione voglio brevemente elencare i pi`ucomuni demoni che possono essere installati e configurati su un sistema GNU Linux, un lettore interessato a questi demoni deve cercare nelle varie documentazioni ufficiali oppure cercare guide pi`ucomplete da fonti anche 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 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 vi sconsiglio di installare un server mail per evitare di appesantire un sistema inutilmente. CHAPTER 5. DEMONI 35

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.

5.5 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 (come utente root) vedere il contenuto della cartella # ls -la /etc/init.d/ e tutti questi file, che sono script eseguibili, prevedono almeno uno dei tre parametri: start, stop e restart, eventual- mente possono avere anche reload, stats e status; per esempio per avviare il server apache basta lanciare lo script corrispondente con il parametro ”start”. Tutti questi script sono linkati in alcune directory particolari, questo per differenziare i vari comandi e permettere le esecuzioni degli script in maniera automatica al momento giusto, vengono definiti alcuni livelli (chiamati runlevel): 0 = Quando la macchina viene messa in questo stato, vengono arrestati tutti i demoni, smontate le periferiche e la macchina viene preparata 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 della macchina. 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 la macchina viene portata in questo stato, viene preparata 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 del sistema i runlevel erano configurabili tramite un sistema chiamato inittab e le con- figurazioni 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 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 CHAPTER 5. DEMONI 36 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 solito webmin dove `edisponibile tutta una sezione per la gestioe e la modifica dei componenti dei runlevel, per l’ambiente grafico `epossibile trovare l’applicazione rcconf disponibile sui repository Debian e quindi installabili tramite Synaptic.

5.6 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 vengon 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 6

Programmazione

In questo capitolo non sono esposte le varie teorie sulla programmazione e non `enemmeno una guida ai vari linguaggi di programmazione che possono essere usati ma, in questo capitolo, sono esposti 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) visto che GNU Linux mette molti ambienti e tools con i quali sviluppare e sono presenti qualche esempio di codice nei vari linguaggi di programmazione. La base di tutto sono gli editor, anche i pi`usemplici come Gedit e Kedit, che mettono a disposizione la format- tazione automatica dei vari linguaggi di programmazione: gli editor riconoscono dal tipo di file il tipo di linguaggio con cui `escritto e il codice viene automaticamente formattato con colori e indentazioni, questa `euna straordinaria capacit`adei programmi che risulta molto comoda ai programmatori. 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. Bisogna sempre ricordare che il linguaggio nativo con cui `escritto GNU Linux e la maggior parte dei programmi `eil C e soprattutto il C++, tanto che la maggior parte delle API del sistema operativo sono scritte in questi linguaggi ed `epossibile 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.

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 `einfluenate `esempre buona norma usarla, e poi indicare che `eun eseguibile con il comando chmod: #chmod a+x file.sh in modo tale da rendere eseguibile il file. 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 del demone Apache). 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 ai comandi della shell, `epossibile usare le variabili utilizzando il suffisso $ e con i simboli $# si indicano i parametri arrivati da riga di comando oppure $- incicano 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 iteragire 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,

37 CHAPTER 6. PROGRAMMAZIONE 38

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

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 i vari programmi deve conoscere un po’ di questi linguaggi, il compilatore principale e pi`uusato `e g++ (g plus plus), che si pu`oanche con il nome di gpp nell’elenco pacchetti. Il compilatore viene sempre installato in automatico all’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 (oppure C++): via terminale oppure utilizzare 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 in una cartella e poi eseguire i seguenti 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 andare ogni volta da riga di comando, alcuni presentano anche dei correttori automatici, autocomplete (nel caso del C++) ed altre funzionalit`a molto utili, i pi`ufamosi sono , Kdevelop, e BlueFish, in realt`aio consiglio l’utilizzo di con l’estensione per C/C++ scaricabile dal sito ufficiale.

6.3 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 il compilatore Java, rilasciando alcuni componenti che sono stati immediatamente 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. CHAPTER 6. PROGRAMMAZIONE 39

L’ambiente Java runtime in Debian, cio`eil famoso JRE, si pu`otrovare nei pacchetti openjdk-6-jre oppure 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 tomcat8 e l’installazione `eterminata, poi dovete modificare il file: /etc/tomcat8/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: # systemctl restart tomcat8 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 cio`equello del sistema gi`aautoconfigurato automaticamente e quello gestito da eclipse in parallelo per lo sviluppo, per configurare un demone di tomcat parallelo basta creare una cartella di link virtuali da di comando, per esempio se non esiste si pu`ousare la cartella: cd /usr/share/tomcat8 ln -s /var/lib/tomcat8/conf conf ln -s /etc/tomcat8/policy.d/03catalina.policy conf/catalina.policy ln -s /var/log/tomcat8 log ln -s /var/lib/tomcat8/common common ln -s /var/lib/tomcat8/server server ln -s /var/lib/tomcat8/shared shared chmod -R 777 /usr/share/tomcat8/conf e poi impostare nelle preferenze di Eclipse un server di tipo ”Tomcat 8” nella cartella /usr/share/tomcat8 in questo modo nel workspace viene creato un progetto Servers con alcuni file di configurazione 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.4 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 CHAPTER 6. PROGRAMMAZIONE 40

- 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 $ 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 documentto `escritta in LATEXutilizzando l’editor Kile.

6.5 Programmazione WEB

L’ambiente GNU Linux offre moltissime possibilit`ae strumenti ad un programmatore Web per eseguire il pro- prio lavoro in maniera ottimale, come gi`adetto i pi`usemplici file editor (Kedit, Gedit e Mousepad) riconoscono il codice HTML, CSS, Javascript e persino i linguaggi ”server” come il PHP ma questi programmi sono troppo semplici e non adatti per la creazione e lo sviluppo di progetti complessi come un sito web o un’applicazione web di media/grande dimensione, nei repository Debian ci sono a disposizione moltissime applicazioni per un program- matore web e moltissimi piccoli strumenti che sono d’aiuto ad un programmatore web, il primo esempio `e screem, programma non troppo completo ma con la straordinaria presenza di un tool che permette di controllare tutte le propriet`adei TAG del codice HTML ed `emolto intuitivo anche se pecca per quanto riguarda la gestione dei progetti e si fa molta fatica a navigare attraverso file e cartelle. CHAPTER 6. PROGRAMMAZIONE 41

Un altro utile programma `e BlueFish, forse lo storico programma per la programmazione web del mondo GNU Linux, sicuramente il pi`uusato fino a qualche anno fa, mette a disposizione un’interfaccia semplice e intuitiva e un’ottima barra laterale per navigare tra file e cartelle, dispone di un men`uchiamato TAG che permette ad un programmatore di inserire un codice (o un gruppo di codici) senza far tanta fatica e senza doversi sempre ricordare il nome di tutti i tag e di tutte le propriet`a. Questo programma `ecompatibile con tantissimi linguaggi di programmazione come C, Pascal, Java e Pyton anche se funziona solo come editor e non come compilatore non disponendo di nessuna funzione per la compilazione del codice. Altro programma molto famoso per programmare in PHP `eil famoso QuantaPlus, un programma che mette a disposizione la possibilit`adi creare un progetto e gestirlo con una semplice barra laterale con la funzionalit`adi una finestrella che elenca le funzioni PHP e adirittura, nelle ultime versioni, la lista di tutte le variabili della pagine che si sta programmando, questa utilit`arisulta comodissima dopo poco che la si utilizza e una volta che vi sarete abituati ad essa non ve ne staccherete mai! Ovviamente questi programmi sono stati pensati e disegnati per GNU Linux ma sicuramente il pi`ufamoso e il pi`uusato negli ultimi anni per applicazioni di qualsiasi linguaggio `e Eclipse che `eormai diventato l’ambiente di sviluppo pi`uusato al mondo, oltre ai pacchetti ufficiali disponibili su Debian `epossibile anche scaricare il programma direttamente dal sito ufficiale e copiati nel sistema senza bisogno di installazione, `esempre consigliata questa seconda opzione che permette di avere anche pi`uversioni diverse disponibili nel sistema, per esempio `epossibile scaricare ed utilizzare la versione per Java e Php in parallelo senza conflitti. Ovviamente con eclipse `epossible lavorare con LAMP e Totem se installati nel proprio sistema.

6.6 Macchine virtuali

Per GNU Linux ci sono alcuni programmi per l’avvio e la gestione di una macchina virtuale, i pi`ufamosi sono i programmi commerciali come VMware Player e VirtualBox che mettono a disposizione anche le versioni per gli ambienti GNU Linux il cui funzionamento `eidentico alle versioni per gli altri sistemi operitivo, ma il motore nativo per le macchine virtuali si chiama QEMU, per installarlo `eopportuno controllare se l’hardware di cui disponiamo supporta l’accelerazione hardware con il comando: $ egrep ’(vmx|svm)’ --color=always /proc/cpuinfo se vi compare elenco con indicato in rosso la dicitura vmx e/o svm allora il processore `edotato delle istruzioni hardware necessarie per poter lanciare una macchina virtuale con QEMU, tutti i pacchetti necessari si trovano comodamente nei mirror e quindi installabili con apt oppure su Synaptic, l’installazione quindi risulta molto semplice infatti basta installare i pacchetti con il comando: # apt-get install qemu qemu-launcher qemulator qemuctl qtemu virtinst virt-manager aqemu Per installare e avviare un sistema operativo all’interno della macchina virtuale, prima di tutto bisogna creare l’immagine del disco virtuale lanciando il comando da riga di comando: $ qemu-img create -f qcow /mnt/Dati/sistemaOperativo.img 5G dove 5G `ela dimensione massima della macchina virtuale, dopo aver inserito il CD di installazione, avviamo la nuova VM con il comando: $ qemu -localtime -cdrom /dev/cdrom -m 1000 -boot d /mnt/Dati/sistemaOperativo.img dove 1000 `ela memoria RAM espressa in Mbyte che vogliamo dare a disposizione della macchina virtuale. E’ possibile utilizzare anche solo l’immagine ISO del CD di installazione, avviando la macchina virtuale con il comando $ qemu -localtime -cdrom /percorso/nomefile.iso -m 1000 -boot d sistemaOperativo.img Come visto qemu `eun insieme di comandi da riga di comando quindi bisognerebbe ogni volta ricordarsi tutti i comando per lanciare la VM, con i numerosi parametri che sono necessari questo risulta proprio scomodo e spesso si possono commettere errori, potete vedere tutti i parametri del comando lanciando il comando $ man qemu ma fortunatamente esistono dei programmi che possono renderci pi`ucomodo l’uso delle macchine virtuali di QEMU: Qemu Launcher, aQemu e QtEmu servono semplicemente a creare o avviare le macchine virtuali, con tutti questi programmi possiamo connettere periferiche, salvare lo stato della macchina, smontare e montare CD-ROM etc. Una volta avviata una macchina virtuale, per uscire dalla finestra di Qemu senza chiuderla basta premere la combinazione di tasti Ctrl + Alt, tenete conto che su QEMU potete far girare qualsiasi sistema operativo: altre versioni di Debian o altre distribuzioni di GNU Linux, come per esempio potete provare la stessa Knoppix o anche versioni di sistemi operativi molto vecchie, dovete per`osempre tener d’occhio le dimensioni delle vostre immagini (i file di dimensioni img) usate dal sistema di virtualizzazione: inizialmente non dovete crearle troppo piccole per aver sufficiente spazio per poter usarle nella maniera corretta ma dovete sempre stare attenti a non creare file troppo grandi che rischiano di rallentare troppo il sistema. Ovviamente i file immagine (img) sono dei file normali e quindi possono essere eseguite delle copie di backup e dei duplicati: fate attenzione a non montarvi la testa quando installate una VM, il primo motivo che vi deluder`amolto `ela velocit`a:essendoci due o pi`usistemi operativi funzionanti contemporaneamente la memoria e la capacit`adel processore verr`adivisa quindi si rischia di rallentare entrambi. CHAPTER 6. PROGRAMMAZIONE 42

In questi ultimi anni QEMU si `emolto evoluto tanto che viene spesso affiancato da kvm (Kernel-based Virtual Machine) che `eun’infrastruttura di virtualizzazione del kernel Linux che funziona su tutte le piattaforma (Intel e AMD), per installarle basta andare ad installare il pacchetto kvm e poi eseguire i comandi # modprobe kvm # modprobe kvm-intel # addgroup ’whoami’ kvm $ addgroup ’whoami’ kvm se disponete di un processore amd dovete lanciare kvm-amd, se a questi comandi ricevete un errore, lanciando il comando # dmesg potete vedere se kvm non `eabilitato nel BIOS (infatti bisogna attivare la IVT - Intel Virtualization Tecnology nel BIOS). Dovete anche ricordarvi di aggiungere i moduli sul file /etc/modules se non presenti, cio`ele righe kvm kvm-intel (oppure kdm-amd a seconda del processore) per rendere definitivo l’installazione dei moduli di kvm; si pu`olanciare le macchine virtuali da riga di comando $ kvm -hda virtualdisk.img -m 1024 -net nic -net user -soundhw all oppure utilizzando i programmi grafici gi`aelencati per sfruttare l’accoppiata Qemu-KVM. Una guida completa a QEMU e KVM pu`oessere trovata a questo indirizzo http://www.debianitalia.org/guide/kvm/la-guida-galattica-kvm-qemu-libvirt-e-spice. 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 `euno script auto-installante, prima per`odi lanciare l’installazione bisogna verifi- care l’installazione di alcuni pacchetti, lanciando il comando # apt-get install gcc-6-locales gcc-6-cross-base linux-headers-4.9.0-3-all 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 che indica cosa installare. Chapter 7

Configurazioni particolari e HowTo

Un utente che usa GNU Linux durante la fase di installazione ma anche nell’uso quotidiano, si trova spesso di fronte dei problemi di configurazioni dei vari pacchetti o programmi nel proprio sistema, al giorno d’oggi la comunit`a mondiale GNU Linux ha risolto praticamente tutte le problematiche che un utente si ritrova e le informazioni possono essere trovate grazie ad una semplice ricerca sui pi`ucomuni motori di ricerca, nonostante in Italia siamo ancora molto indietro su questo aspetto ci sono sempre pi`usiti che parlano di questi argomenti e raccolgono informazioni; 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 che ho trovato negli altri capitoli e racchiude argomenti non inseriti in altri capitoli per evitare di appesantire la lettura e inserire in questo capitolo tutti quegli articoli particolari che possono essere saltati da un lettore non interessato a tali argomenti.

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 `emai presente 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 con- figurazione del bootloader vi rimando al sito ufficiale http://www.gnu.org/software/grub/grub.html (in inglese) oppure a due guide italiane molto chiare http://www.debianitalia.org/guide/installazione-configurazione/ guida-alla-configurazione-di-grub e http://guide.debianizzati.org/index.php/Guida_a_GRUB_2.

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 anche X11 oppure semplicemente X, da anni diventato il demone principale su tutti i sistemi GNU Linux e ovviamente anche su Debian, si parla sempre di demone in quanto un programmatore esperto pu`onotare la famosa struttura client-server dove il server X mette a disposizione l’interfaccia e delle librerie per lo sviluppo di applicazioni (come le librerie GTK+); come tutti i demoni di GNU Linux, anche X necessita sempre di una buona configurazione per funzionare correttamente e permettere agli ambienti desktop (GNOME, KDE, XFCE)

43 CHAPTER 7. CONFIGURAZIONI PARTICOLARI E HOWTO 44 di caricarsi correttamente, negli anni i tool di configurazione sono evoluti moltissimo tanto che oggi il server grafico si autoconfigura da solo e non crea problemi all’utente, mentre 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 # 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 server 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. Essendo 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 [email protected] 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 server 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 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: • Duplicity: backup automatici incrementali • backupninja: sistema di meta-backup leggero ed estensibile CHAPTER 7. CONFIGURAZIONI PARTICOLARI E HOWTO 45

• backup-manager: strumento per il backup per GNU Linux a riga di comando • Unison: uno strumento di sincronizzazione di file per Unix e Windows • rsync: programma veloce di copia di file in remoto • amanda-server: Advanced Maryland Automatic Network Disk Archiver (Server) • bacula-server: backup, ripristino e verifica in rete • rdiff-backup: Rdiff-backup • fsarchiver: salva il contenuto di un file system in un file archivio compresso E’ possibile anche costruire un mini programma personalizzato, scritto in linguaggio sh per la copia di backup dei file base, questo perch`ele configurazioni sono salvate in dei file molto precisi e i dati in delle cartelle predefinite. Per prima cosa per un backup completo bisogna salvare i file principali di sistema che abbiamo modificato a mano 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), basta copiare la cartella /home/nomeutente/.mozilla/firefox/ • La posta di Icedove, se usata, per copiare tutte le mail e tutte le impostazioni (comprese eventuali regole) basta copiare la cartella /home/nomeutente/.mozilla-thunderbird/ • La cartella di Chrome se usato /home/alnao/.config/google-chrome • Tutta la cartella home di ogni utente se ci sono dati interessanti Se si usa il MySql 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.

7.4 Installazione di font

Al termine dell’installazione del sistema base di Debian `epossibile che manchino alcuni font usati nelle pagine internet o nei file nei vari formati (come un file di testo), per evitare di vedere pagine web e documenti in maniera non corretta `epossibile installare i font dai vari pacchetti disponibili oppure copiando e installando vari file in formato TrueType che di solito sono disponibili in altri sistemi operativi, per fare questo la procedura `esemplice e veloce: # apt-get install xfstt copiare i file font (di estensione fon o ttf) su una cartella sul vostro sistema Debian, `econsigliata una nuova cartella, per esempio: /usr/share/font/truetype/new/ e poi eseguire i comandi # cd /usr/share/font/truetype/new/ # chmod 666 * # xfstt --sync al termine dell’operazione i nuovi font dovrebbero essere stati installati e diventano attivi al successivo riavvio del sistema. Da notare che durante la fase di installazione abbiamo impostato i diritti dei file a 666 perch`epu`ocapitare che durante le fasi si copia vengano persi i permessi e, gli utenti non amministratori, potrebbero non aver accesso in lettura a questi file. CHAPTER 7. CONFIGURAZIONI PARTICOLARI E HOWTO 46

7.5 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.6 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, il Kernel di GNU Linux non gestisce nativamente il cestino, infatti se un utente da riga di comando prova ad usare i comandi $ rm oppure $ rmdir la cancellazione di file o cartelle sar`adefinitiva e il file non verr`aspostato in nessun cestino temporaneo quindi fate sempre attenzione quando utilizzate questo comando. Bisogna sempre tenere conto che il cestino dei Desktop pu`olasciare della ”sporcizia” nei nostri 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 svuota il cestino, questa sporcizia pu`o (in alcuni casi) essere 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.7 Configurazione del comando SUDO

Il comando sudo consente agli utenti normali, senza privilegi particolari, di eseguire i comandi come super-utente (utente root) senza dover ogni volta 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 domani `eimpostato di default perch`enon viene usato l’utente root mentre per chi usa Debian o altre distribuzioni GNU Linux questo comando `esconsigliato ma `epossibile 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 CHAPTER 7. CONFIGURAZIONI PARTICOLARI E HOWTO 47

# visudo e inserire alla fine del file la riga 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 lancerete il comando sudo vi verr`achiesta una password che non `ela password dell’utente root, ma `ela password del vostro 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 kwrite /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.

7.8 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 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 CHAPTER 7. CONFIGURAZIONI PARTICOLARI E HOWTO 48

7.9 Programmi di partizionamento dischi

Modificare lo schema delle partizioni `esempre una cosa non semplice da fare e ad alto rischio di perdita di dati, perch´etoccare una partizione in alcuni casi potrebbe voler dire modificare anche le altre partizioni su un disco fisico; 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, bisogna sempre eseguie una copia di backup di tutte le partizioni comprese quelle non modificate per sicurezza. 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 e Acronis Disk Director che per`o`ea pagamento. 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

7.10 Configurazioni veloci delle sorgenti di apt

In tutte le sezioni di questo manuale `eprevista la modifica delle sorgenti di apt, cio`equei siti web dove il sistema di installazione e di aggiornamento software cerca i programmi, questo di solito `efatto direttamente nel file di sistema /etc/apt/sources.list ma `epossibile automatizzare l’inserimento di nuove fonti in maniera automatica, oltre che al programma Synaptic che permette di modificare la lista da interfaccia grafica `epossibile usare anche altri programmi per la gestione delle chiavi di sicurezza perch`etutti (o quasi) le sorgenti impongono delle chiavi. Per l’aggiunta dei repository da riga di comando senza aprire il file delle sorgenti, `epossibile creare dei minifile con all’interno l’url della sorgente dei pacchetti con il comando tee: # echo deb http://sito.com/cartella/ stable non-free | tee /etc/apt/sources.list.d/nomesito.list Se non sono correttamente configurate le chiavi delle sorgenti apt, in fase di aggiornamento dei pacchetti, apt stesso segnala un warning non bloccante del tipo: W: The key(s) in the keyring /etc/apt/trusted.gpg are ignored as the file is not readable by user ’apt’ executing apt-key oppure W: Le seguenti firme non sono state verificate perch´ela chiave pubblica non `edisponibile: NO PUBKEY D97A3AE911F63C51 per risolvere questo problema `epossibile installare libssl1 dall’url https://packages.debian.org/jessie/libssl1.0.0 e poi, per esempio, inserire la chiave del repository di spotify (se conosciuta con i comandi): # apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys BBEBDCB318AD50EC6865090613B00F1FD2C19886 # echo deb http://repository.spotify.com stable non-free | tee /etc/apt/sources.list.d/spotify.list # apt-get update # apt-get install spotify-client oppure, sempre per esempio, per configurare il repository google per chrome con la chiave su apt si usano i comandi: # wget -q -O - https://dl-ssl.google.com/linux/linux signing key.pub | apt-key add - # sh -c ’echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list’ # apt-get update # apt-get install google-chrome-stable oppure, sempre per esempio con apera la chiave `eancora pi`usemplice da trovare # echo deb http://deb.opera.com/opera/ stable non-free | tee /etc/apt/sources.list.d/opera.list # wget -qO- http://deb.opera.com/archive.key | apt-key add - # apt-get install opera-stable Chapter 8

Comandi della Shell di Gnu Linux

In questo capitolo verranno 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 il pinguino e per Debian ma cercher`odi elencare quelli pi`uutili, pi`uusati e pi`uinteressanti; con una breve ricerca, in internet, potrete trovare delle liste pi`ucomplete e dettagliate ma credo che sia spesso inutile avere liste troppo lunghe e dettagliate. Da notare 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`opotete usare il comando sudo gi`a visto in precedenza 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 scrivete le prime lettere di un comando e poi premete 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 Kernel `edi tipo Case Sensitive, dovete sempre prestare attenzione a come scrivete un comando o il nome di un file, perch´epotreste lanciare comandi sbagliati oppure non trovare uno specifico 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.

49 CHAPTER 8. COMANDI DELLA SHELL DI GNU LINUX 50

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 DI GNU LINUX 51

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 DI GNU LINUX 52

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 DI GNU LINUX 53

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 DI GNU LINUX 54

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 DI GNU LINUX 55

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 DI GNU LINUX 56

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 DI GNU LINUX 57

8.2 Editor di testo

In questo documento spesso sono stati modificati semplici file di configurazione, questo vuol dire che un utente deve aver padronanza con gli editor di testo e bisogna sempre conoscere cosa modificare e come, nella riga di comando, ho quasi sempre usato l’editor pico perch`eil mio preferito ed `el’editor pi`usemplice da usare ma la scelta `evaria, in un desktop `epossibile usare i vari programmi grafici come Kedit, Kate, Gedit e Mousepad a seconda del desktop manager usato mentre da riga di comando la scelta `eancora pi`uvaria ed i principali sono:

• Emacs `eun editor di testo libero molto popolare fra i programmatori perch`e`estato sviluppato originariamente dal 1976 e quindi tutti gli storici programmatori sanno usarlo ma il mio consiglio `edi non usare Emacs per gli utenti alle prime armi l’uso di Emacs pu`orisultare complicato a causa della sequenza di tasti da usare. • L’editor storico di GNU Linux `e vi (che si legge all’inglese, si pronuncia lettera per lettera come [ vi:ai ]), sicuramente il pi`ucomplicato da usare perch`enon una la classica sequenza di tasti ma vi `eun editor modale e quindi come ogni altro programma modale assegna differenti azioni ai tasti a seconda della modalit`aattiva nel momento in cui vengono premuti: le principali modalit`asono insert (inserimento) e command (comando): in modalit`ainserimento, quando si preme un tasto, il carattere corrispondente viene inserito normalmente, premendo il tasto di ESC dal modo inserimento si passa al modo comando; in modalit`acomando, ad ogni carattere corrisponde un movimento del cursore o una funzione di modifica, per esempio, con j il cursore si sposta alla linea successiva, con k si sposta alla linea precedente, x cancella un carattere e i ritorna alla modalit`ainserimento; per uscire dal programma (dalla modalit`acomando) i tasti sono :q, per salvare sono :w mentre per uscire senza salvare sono :q!, in fase di comando alla pressione di un tasto non corrisponde nessun carattere visualizzato, questo `ela principale causa di confusione per i nuovi utilizzatori. Ovviamente vi `el’editor meno indicato per utenti meno esperti e con poca confidenza con la shell.

• Pico `eun editor di testo per sistemi operativi Unix, molto semplice e offre funzioni di impaginazione, copia/incolla e un piccolo controllore di sintassi, non supporta la gestione contemporanea di pi`ufiles e di conseguenza non permette la copia del testo da un file all’altro o la ricerca di testo attraverso pi`ufiles ma supporta la sostituzione di stringhe di testo all’interno di un singolo file. • Nano `eun editor di testo libero che trae ispirazione da Pico, se siete un utente poco esperto potete usarlo come editor quando siete di fronte alla necessit`adi modificare un file di testo da riga di comando in quanto la sua semplicit`a`eincredibile.

8.3 Rinominare gruppi di files

Se avete un gruppo di file dentro una cartella e dovete rinominarli tutti potete usare un paio di trucchi e scrivere un 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 Ma esiste 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. Per esempio la sintassi `e: $ mmv ’aaabbb?’ ’pinco#1pallino#2’ con questo comando verranno 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 ora: $ 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. CHAPTER 8. COMANDI DELLA SHELL DI GNU LINUX 58

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 pi`uo meno utili, 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 compeso 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 paramtro ”stop” oppure ”start” per fermare o far partire un servizio. 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. 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. 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.

8.5 Gestione della rete

Esistono pi`utool per configurare il demone di rete: editare i singoli file di configurazione del networking, us- are comandi shell come ifconfig oppure utilizzare strumenti di configurazione con interfaccia grafica o oppure usare l’interfaccia 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/sysconfig/network-script/ directory contenente i file di configurazione delle singole interfacce /etc/hosts contiene il mapping fra indirizzi e hostname ed alias. Segue un esempio /etc/resolv.conf il lato client del sistema DNS /etc/services contiene il mapping tra i numeri di porta e i nomi dei servizi Mentre i principali comandi comandi lanciabili della shell sono: ifconfig visualizza tutte le interfacce di rete attive e le relative impostazioni ifconfig eth0 up/down attiva o disattiva l’interfaccia eth0 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 si usa sempre 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 `e disponibile tramite: $ sudo iptables -L Mentre per modificare le configurazioni del firewall si usano dei paramtri particolari del comando: $ sudo 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 CHAPTER 8. COMANDI DELLA SHELL DI GNU LINUX 59 modo: $ sudo 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.

8.6 Creazione di alias

Gli alias sono 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.7 Comandi del demone MySql

Anche se il demone MySql non fa parte del Kernel GNU Linux, i comandi per Mysql sono utili e indispensabili se volete usarlo come base dati per le vostre applicazioni, in particolar modo se siete sviluppatori e dovete amministrare le varie tabelle e le viste, di base il comando base del demone `e: # /etc/init.d/mysqld start stop status condrestart restart e 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 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) CHAPTER 8. COMANDI DELLA SHELL DI GNU LINUX 60

• 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) • 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 ; faccio notare che potete scriverla anche su pi`urighe, andando a capo con il tasto ”Invio” ma la query non verr`a eseguita finch`enon inserite il carattere ”;” (puntovirgola). Ovviamente nella console potete eseguire qualsiasi query, anche quelle annidate e condizionali. Per l’amministrare pi`urapida e veloce consiglio l’uso di PhpMyAdmin che permette tutto in maniere semplice e molto pi`uintuitiva.

8.8 Manipolazione immagini e video da riga di comando

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 lunghissima dover aprire tutti i file con GIMP e con altri editor per eseguire le modifiche. Per modificare le immagini `epossibile usare il comando mogrify che permette di ridimensionare le immagini, 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 moltro altro: una guida completa delle azioni possibili `edisponibili a https://www.imagemagick.org/script/mogrify.php Per manipolare video invece `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). CHAPTER 8. COMANDI DELLA SHELL DI GNU LINUX 61

8.9 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 il comando 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 un path base dove la shell cerca i comandi inseriti dall’utente. In poche parole il path base `el’elenco delle cartelle dove la shell va a 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.10 Manipolazione PDF da riga di comando

Esistono molti comandi per la manipolazione di file PDF, pu`ocapitare di dover modificare un file e si possono usare i vari tool, gratuiti o a pagamento, ma esistono anche comandi specifici da riga di comando per i file PDF. Se si ha un file PDF con moltissime pagine pu`orisultare anche molto grande come dimensioni in Mb, tipicamente si ha 1 Mb ogni pagine quindi file di 500 pagine possono arrivare anche a mezzo Gb se le pagine hanno tante immagini, `e possibile con ghostscript ridurre la dimensione del file con la ovvia diminuzione della qualit`adelle immagini. A tale scopo, dopo aver installato il pacchetto ghostscript se non presente, 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 voglino 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 Invece se si vuole modificare un file PDF per 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 CHAPTER 8. COMANDI DELLA SHELL DI GNU LINUX 62

$ 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 disponibili su Synaptic.

8.11 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/?"