Sei sulla pagina 1di 179

3

VANNI DAGHINI

I 10 ComandaMenti
Il Potere del Terminale Linux
4
5

INDICE

ComandaMento 0 : Che cosa imparerai da questo corso di

formazione pg 11

1 - Installazione di linux pg 15

• Creare l’immagine ISO

• LVM su Ubuntu Desktop

• LVM su Ubuntu Server

• Disabilitare l’interfaccia grafca

2 – Che cos'è la Shell pg 47

• Il Prompt

• Tipi di Shell

• Alias e Unalias

• Modifcare il comportamento della Shell

3 – Il sistema Linux pg 67

• Il Kernel

• Il fle-system

• Directory radice e /bin


6

• /home

• /usr

• /sbin e /usr/sbin

• /usr/man

• /etc

• /lib

• /mnt e /proc

• /tmp e /var

• Devices /cdrom e /dev

• Dispositivi e fle speciali

• Utenti e Gruppi

• La shell

4 – I comandi fondamentali pg 77

• Navigare nel Sistema

• Comandi di sistema

• Cartelle e File

• Internet

• Archivi

• Uffcio

• Multimedia
7

5 – Il Superutente o Amministratore pg 100

• Il comando sudo e su

• Comandi base per l'Amministratore

• Alias Globali e Privati

• Repository e Meta-Pacchetti

6 – Come creare un comando con il linguaggio C pg 124

• Pacchetto Built-Essential

• Che cos’è un sorgente

• Esempio : Da Programma in C a Comando Shell

7 – Come creare una Man Page pg 138

• Il comando Man

• I tag per creare una Man Page

• Creare Documentazione con POD di Perl

8 – Come iniziare a programmare con la shell pg 144

• Quando non devi usare gli script

• Il Comando Set

• Il comando Echo e primo script


8

• Variabili Locali e variabili d’ambiente


• I Metacaratteri

• Cenni alle strutture

9 – Connessione SSH pg 158

• OpenSSH

• Comandi di base

• Connessione con chiave pubblica/privata

10 – Antivirus e Firewall pg 168

• Antivirus Clamav

• Firewall UFW

9
9
10
ComandaMento 0

Scrivere 10 ComandaMenti, 1 comandamento al giorno per 10

giorni per farti diventare esperto nell'uso del Terminale Linux!!! E'

una fantastica sfdaa Ricordo la prima volta che all'età di 15 anni

ho acceso il computer, dopo aver visto apparire sigle, contatori,

scritte in inglese, tutto ad un tratto vedo lo schermo nero e un

cursore che lampeggiaa Credetemi è stato il PANICOa

Ho iniziato a studiare informatica quando l'unico sistema

operativo in uso era il DOS e lo schermo era fatto da 80 righe e

25 colonne, i pixel come li intendiamo oggi non esistevanoa

Di fatto se ci pensi, era come lavorare sul terminale e senza

nessuna grafca!

Ora voglio dirti perché ho voluto scrivere questo libro e perché è

diverso dai soliti manuali di informatica che conoscia

Per anni ho sempre trovato diffcoltà a reperire manuali in italiano

e quando li trovavo, erano spesso molto complicatia

Ecco perché “I 10 ComandaMenti” è diverso:

11

1 – E' adatto anche a chi è un principiante


2 – E' in lingua italiana

3 – Gli esempi sono utili e possono servire nella realtà

4 - Alla fne del libro sarai un esperto del Terminale

5 - Imparerai a creare comandi e programmi utili

Inoltre, acquisire le competenze del Terminale, può aiutarti a

gestire meglio il tuo sistema operativo Linux, a prescindere dalla

distribuzione che hai scelto, può aiutarti professionalmente e cosa

ancora più importante se prima evitavi il terminale perchè ti

intimoriva, dopo aver letto questo libro, non ti fermerà più

nessunoa

12
Ora ti starai domandando: Ma cosa signifca “Comandamento

zero”? La domanda successiva sarà: Cosa centrano “I 10

ComandaMenti” con il terminale?

Alla prima domanda rispondo con semplicità: a nessuno piace la

dicitura “Introduzione”a In questo modo sono convinto di averti

incuriosito e sicuramente sei arrivato a leggere fno quia

La seconda domanda: “I 10 ComandaMenti” è una analogia che si

presta bene ed è comprensibile con facilità a tuttia

Dio da a Mosè le tavole con scritto le 10 regole di base, le

fondamenta per vivere nella pienezza, senza le quali, l'uomo si

perderebbe nel caosa

Il Terminale ha molte regole, molti comandamenti ma, senza i

primi 10, senza le fondamenta, è davvero diffcile non perdersi nel

caosa Il mio obiettivo è quello di insegnarti in modo semplice e

intuitivo partendo dalle basi per arrivare alla conoscenza

profonda, l’uso dello strumento in assoluto più potente: Il

Terminalea
14
15

1° ComandaMento

Installazione di Linux

In questo libro voglio guidarti passo passo e farti raggiungere il

tuo scopo, diventare esperto del Terminalea

Ho scelto la distribuzione Ubuntu perché ritengo sia un buon

punto di partenza e le risorse in rete sono davvero tantea Voglio

subito lasciarti quella che io ritengo sia la più importante:

https://wwwaubuntu-itaorg/

Questo è il link della comunità italiana dal quale puoi scaricare

l'ultima versione di Ubuntu, ottenere il supporto della community

con il forum e la chata La voce “Derivate” ti permette di scegliere

diverse distribuzioni derivate appunto da Ubuntu, come ad

esempio: Kubuntua La voce “Ultime News” ti suggerisco di

guardarla spesso perché trovi aggiornamenti e molto materiale

utilea
16

Ora iniziamo a “sporcarci un po' le mani”a Scarica Ubuntu dal link

che ti ho lasciato, una volta terminato il download, segui passo

passo quanto ti dirò per installare la tua distribuzione linux sul tuo

computera Non temere, che tu sia già un utente esperto di linux

oppure che, sia per te la prima volta che lo installi, per ogni step

dell'installazione ti spiegherò tutto quello che ti servea

Scaricato? Bene!

Come puoi notare hai scaricato un fle con estensione ISO e così

com'è, non puoi utilizzarlo per installare Ubuntua

Comincio col chiederti, sai che cos'è un fle ISO?

Il fle ISO spesso chiamato anche IMMAGINE ISO, è un archivio

molto ma molto grande in cui è compresso di solito un sistema

operativoa

Per decomprimere questo archivio non è suffciente “estrarlo”

come probabilmente sei abituato a fare, ma occorre come si dice

in gergo: “bisogna montarlo”a

Una volta terminato il download dobbiamo quindi procurarci un

programma in grado di masterizzare il fle ISO di Ubuntu e di

rendere il DVD “bootable” all'avvioa


17

In rete ci sono molti programmi gratuiti ma io ti suggerisco di

usare : https://cdburnerxpase/it/home se sei un utente Windows!

Se al contrario sei già un utente linux il programma che ti

suggerisco è Brasero che puoi scaricare dall'Ubuntu software

center ma che tra poco imparerai a scaricare anche da terminalea

Da Terminale digita:

sudo apt-get install brasero

semplice vero? Ma vedremo in seguito tutti i dettaglia

Ora hai tutti gli strumenti per creare il tuo dvd ed installare la tua

distribuzionea

Dopo aver creato il tuo dvd di installazione, riavvia il computer

con il dvd inserito, assicurandoti che nel Bios venga letto come

primo disco il dvda

Ora partirà l'installazione e la prima schermata che troverai sarà

questa:
18

Dopo qualche secondo apparirà la seconda schermata:


19

Da qui seleziona sulla colonna di sinistra la lingua Italiana, dopo di

che, puoi scegliere di vedere come funziona Ubuntu, premendo

sul pulsante “Try Ubuntu”a In questo modo viene avviata la

distribuzione in modalità “live”, che puoi utilizzare come se già

fosse installata sul tuo pc e ti renderai conto se fa per te oppure

noa

Se invece premi il pulsante “Install Ubuntu” ovviamente partirà il

programma di installazione e la successiva fnestra sarà questa:

Una cosa che ho imparato nel tempo è quella di non aver fretta e

di leggere sempre prima prima di svolgere qualunque azionea


20

Qui è tutto molto intuitivo! Spunta le due caselle e premi su

Avantia

In questa schermata abbiamo 4 voci e voglio analizzarle tutte

perché un'installazione fatta con cura e attenzione, ti permetterà

di avere il sistema operativo stabilea Ho visto persone esperte,

che conoscono linux da tempo e che non leggono nemmeno

cosa appare sulle schermate dando spesso tutto per scontato!

Non di rado, gli stessi “esperti” li ho visti reinstallare più volte

Ubuntu (o altre distribuzioni) o perdere i dati perché avevano

avuto troppa fretta!!!


21

1 voce : sembra molto intuito vero? Se decidete di cancellare il

disco, per esempio per passare da Windows a Ubuntu, la cosa

fondamentale è aver già fatto il backup dei vostri datia Infatti se

leggete sotto, verranno cancellati documenti, foto, musica e altri

fle presentia

2 voce: Cifrare la partizione signifca CRIPTARLA, ovvero renderla

inaccessibile se non si ha la chiave di sicurezzaa

Ma ti chiedo prima di tutto perché dovresti criptare il tuo disco?

E' davvero necessario?

La risposta a queste domande si riassume in un solo concetto:

Maggiore Sicurezzaa

Ma perché installare Ubuntu criptato, quali vantaggi e svantaggi

comporta?

Vantaggi
Come ho detto poco sopra il vero ed unico grande vantaggio è la

Sicurezzaa Un disco o un'intera partizione criptata sono

praticamente inaccessibilia

Ora ti starai chiedendo ma non basta la password di login? La

password di login serve molto poco, perché con un cd live di una

qualsiasi distribuzione, chiunque potrebbe accedere ai dati del


22

tuo disco e prelevarlia Invece, criptando il disco, se non conosci la

password non ci riuscirai maia

Ovviamente la password, di cifratura deve essere robusta! Se

decidi di criptare il disco e mettere “pluto” come password

risparmiati la faticaa

Svantaggi
Se hai criptato il disco e per esempio si guasta il pc, ma il vostro

disco è sano, conoscendo la password recuperare i dati è ostico,

ma si può farea Se non avete criptato il disco, è davvero banalea

Sui moderni computer poiché i software di criptazione sono

notevolmente migliorati, non dovresti avere ripercurssioni sulle

prestazioni del tuo pca Se al contrario hai un pc datato,

sicuramente avrai una perdita molto forte sulle prestazionia

Voglio portarti un esempio che è capitato a me: io ho diversi

computer, ma quelli che uso di più sono due: uno è un desktop

l'altro è un portatilea Mi sono posto le stesse domande che ho

fatto a te! Quindi per il computer desktop mi sembrava esagerato

criptare l'intero disco in quanto è fsso in casa, ma avevo alcune


23

cartelle che ritenevo meritassero più sicurezza e ho criptato solo

quellea

Il portatile invece, lo porto spesso con me per lavoro e credimi se

ti dico che i furti dei pc si verifcano molto spesso in Autogrill, in

una biblioteca, in un bar ecca

Quindi ho preferito criptare l'intero discoa

Fare tutto questo con Ubuntu Linux, è estremamente facilea

Spuntando la casella “Cifra l'installazione di Ubuntu per maggiore

sicurezza” ti verrà chiesto di inserire la password di cifratura e il

gioco è fattoa

Dopo puoi proseguire ad installare Ubuntu normalmentea Al

riavvio del pc però, prima di arrivare al tuo login ti verrà chiesto di

inserire la password per accedere al disco e soltanto dopo ti verrà

chiesto di inserire la password di logina

Senza la password per il disco, anche con un cd live, non si potrà

accedere ai datia

Ora la scelta è tua, sta a te decidere cosa farea

3 voce: LVM è un acronimo e signifca : Logical Volume Managera

Conviene installare e confgurare LVM su Ubuntu ?


24

Per i puristi di linux, Ubuntu è spesso snobbata come

distribuzione ma questo sistema operativo si sta diffondendo

sempre di più, sopratutto in ambito server, ma non soloa

Il supporto ad Ubuntu è di 5 annia Questo lo rende una valida

alternativa a Red-hat/CentOSa

Le distribuzioni che ho appena citato, sono pensate per lavorare

solo come server, invece Ubuntu ha diverse versioni desktop

molto belle e naturalmente anche una versione servera

Quindi alla domanda: conviene installare LVM su Ubuntu ? Come

va confgurato ? La risposta è certamente sia A mio giudizio, è

meglio dividere tra installazione LVM per desktop e quella per

servera

LVM su Ubuntu Desktop


La cosa più semplice se è la prima volta che usate LVM, è

spuntare in fase di installazione, la casella che specifca che

vogliamo usare Logical Volume Managera In questo modo Ubuntu

installa LVM in automaticoa

Se invece hai esigenze particolari, puoi anche installare LVM con

una procedura manualea Questo comporta l'uso del terminale e


25

per iniziare a darti un'idea, in modo per ora generico, ti illustro

cosa devi farea

Quando hai avviato il tuo cd di installazione, avevi a disposizione

due pulsanti uno era “Try Ubuntu” e l'altro “Install Ubuntu”a

Per confgurare manualmente LVM devi premere su Try Ubuntu in

modo da avviare linux in modalità di provaa Una volta avviato, devi

aprire il terminale e diventare utente “root” con il comando:

sudo -s

Attenzione: Questi argomenti verranno sviluppati tutti nel corso

del libro quindi se ora ti sembra diffcile, non preoccupartia

Il vantaggio dell'installazione manuale è che sarà opportuno

creare almeno 2 flesystem diversi tra loroa Il primo servirà per il

sitema operativo e i programmi, il secondo flesystem per la

directory /home e i dati personalia

Con l'installazione di LVM in automatico, questo approccio non

sarebbe possibilea

Tutti i comandi che vedrai di seguito, dovranno essere dati da

terminale come utente roota


26

Il primo comando è “fdisk”, con il quale si crea una partizione

grande quanto l'intero discoa Come tipo di partizione imposta

“8e” (linux LVM)a

Non devi preoccuparti di creare una partizione separata per il

/boota Questo si faceva con le vecchie versioni di grub, mentre

oggi Grub2 è in grado di avviare linux direttamente da LVMa

Una volta creata la partizione devi creare i relativi physical volume

e il volume group utilizzando i seguenti comandi:

pvcreate /dev/sda1

vgcreate sysvg /dev/sda1

Ora devi creare i volumi root (sistema operativo), swap (memoria

virtuale) e home (dati personali) in questo modo:

lvcreate -L 20G -n lvroot sysvg

lvcreate -L 2G -n lvswap sysvg

lvcreate -L 200G -n lvhome sysvg

Supponiamo che il disco sia grande 500gb, hai creato 3 volumi:

1- root da 20gb
27

2- swap da 2gb

3- home da 200gb

Come hai sicuramente notato non hai utilizzato l'intero disco,

questo perché LVM ti permette, anche in seguito, di ingrandire in

modo molto semplice un qualsiasi volume, utilizzando lo spazio

che hai lasciato libero, in base alle tue necessitàa

Ora non ti resta che proseguire con l'installazione, utilizzando i

volumi creatia

Linux LVM su Ubuntu Server


Tutto quello che ti ho spiegato per LVM desktop vale anche per

LVM server con una differenza importante: se parliamo di server

sicuramente parliamo di molti dischi quindi dovranno essere

creati molti flesystem (volumi) in base a specifche esigenzea

Ti consiglio di tenere sempre separati In flesystem il sistema

operativo dai dati, dove I dati sono quelli che deve gestire il

servera

Se il nostro server ha molti dischi potrebbe essere importante

creare dei volumi in mirror, per aumentare le prestazioni e la

sicurezza dei datia


28

Concludendo il Logical Volume Manager è uno strumento

indispensabile in quanto facilita la gestione del tuo sistemaa

4 voce: Selezionando la casella “Altro”, l'installazione ti porterà

allo strumento di partizionamento avanzatoa Con questo

strumento è possibile scegliere partizionamenti del disco

personalizzatia

Nota: utilizzando questo strumento avanzato, non è possibile

installare LVM e crittografare il discoa

Si aprirà una fnestra dove potrai vedere tutte le partizioni

esistenti ed l’eventuale spazio non allocatoa

Seleziona il pulsante “Nuova tabella di partizione”, se il disco è

vuoto dovresti vedere un messaggio che ti avvisa che stai per

creare una nuova partizionea

A questo punto è importante sapere che se il disco, ha uno

schema basato su MBR, puoi creare un massimo di 4 partizioni

logiche primariea

Per creare più partizioni devi impostare la quarta partizione come

partizione estesaa In questo modo, ti sarà possibile creare più

sotto-partizioni (unità logiche) all'interno di essaa


29

MBR è un acronimo e signifca Master Boot Record, considerato

da molti lo standard per la gestione delle partizioni del discoa

Nota: L'alternativa al MBR si chiama GPT, che signifca Guid

Partition Table e ha la stessa funzionea

Le 3 partizioni principali da creare, sono le stesse che abbiamo

visto in precedenza:

1 partizione per la root

1 partizione per swap (memoria virtuale)

1 partizione per la home (dati)

Una volta create le partizioni del disco nei 4 modi spiegati in

precedenza, l'installazione prosegue e si arriva alla seguente

schermata:
30

In questa schermata è tutto molto intuitivo, si tratta solo di

selezionare la località per impostare il fuso orarioa

Una volta impostata la località, verrà presentata la seguente

schermata:
31

Anche qui è tutto intuitivoa Devi selezionare il tipo di tastiera che

utilizzia Nel caso trovi diffcoltà, puoi premere il pulsante “Rileva

disposizione tastiera” e digitare nell'apposita casella per provare

il funzionamento corretto della tastiera individuataa

Premendo sul pulsante “Avanti” si prosegue con l'installazione e

si presenta la seguente schermata:


32

In questa schermata, vengono richieste le informazioni personali ,

che voglio analizzarle tutte con te:

Il vostro nome: Potete inserire il vostro nome e cognome per

esteso, oppure, un nome di fantasia o della vostra aziendaa

In automatico Ubuntu genera il valore del secondo campo “Il

nome del computer”a

Il nome del computer: Questo campo come detto, viene

generato in automatico, puoi comunque modifcarlo e il nome


33

che darai, sarà il nome utilizzato per essere identifcato da altri

computera

Scegliere un nome utente: Linux nasce come sistema

multiutente, l'utente di tutto il sistema è l'utente roota

In questo campo stai per creare un utente e il suo flesystem di

riferimento con la sua /homea Se installi Ubuntu per uso

“domestico”, puoi mettere il tuo nome o un nome di fantasia e

proseguirea

Se invece, per esempio, vieni assunto da un'azienda, sicuramente

sarà l'amministratore della rete a creare il tuo flesystem con il tuo

nomea L'utente root quindi crea il nuovo utente e crea le tue

password di login provvisorie, ti darà i permessi relativi al ruolo

che occupi e alle mansioni che ti sono state affdatea

Facciamo un esempio: sei assunto in una casa editrice, in qualità

di scrittorea L'utente che l'amministratore di rete crea per te ti

permetterà all'interno del tuo flesystem di utilizzare Word per

scrivere i tuoi articoli, libri ecc a Potrai accedere a internet per fare

eventuali ricerche, ma se cerchi di accedere a documenti di

contabilità, non potrai farloa Tutto questo non viene fatto in fase di

installazione come stiamo facendo ora, ma ho voluto


34

anticipartelo, perché queste operazioni si fanno sempre dal

Terminalea

Scegliere una password : Qui dovrai scegliere la tua password di

logina In questa scelta molte persone usano il proprio nome + le

ultime due cifre dell'anno di nascita, piuttosto che il nome del

proprio animale domestico, questo per fare piccoli esempia

Io suggerisco sempre di utilizzare una password robustaa

Le caratteristiche di una password robusta sono:

1 – da 6 a 8 caratteri minimo

2 – usate sia lettere maiuscole sia minuscole

3 – usate dei numeri

4 – usate simboli

La voce che segue è: Conferma la password e si tratta

semplicemente ti riscrivere la password per confermarea

Ora puoi selezionare 2 possibili modalità di accesso al tuo

flesysteme selezionando “Accedere automaticamente”, al riavvio

del computer, non ti verrà chiesta la password di login, mentre

selezionando “Richiedi la password personale per accedere”, ti

verrà chiesta la password che hai appena creatoa


35

Cifrare la cartella personale: Con questa funzionalità, ti verrà

chiesto se vuoi criptare la tua /homea Se decidi di fare questo i

tuoi dati saranno al sicuro ma l'accesso alla tua home sarà più

lento perché per ogni accesso, il computer dovrà prima

decriptare i datia Questa operazione può essere fatta anche

successivamente attraverso il Terminalea

Ancora una volta il potere del Terminale!

Come criptare da Terminale la tua homea

1 – scarica il tool da terminale che ti permetterà di compiere tutte

le operazioni, con il seguente comando:

sudo apt-get install ecryptfs-utils

Nota: il comando sudo verrà spiegato nel corso del libro

separatamente, quindi non preoccupartia

2 – Ora, per crittografare la tua home, questa non deve essere

attiva, quindi dovrai creare un account provvisorioa In una azienda

questo passaggio non sarebbe necessario in quanto sarebbe

l'amministratore di rete cioè l'account root a compiere questa

operazionea
36

Vai in Impostazioni di sistema → account utente premi su sblocca

e clicca sul + per aggiungere un nuovo account utente come

amministratorea

Questo metodo fa uso dell'interfaccia grafca di ubuntu, ma

questo libro ha come scopo insegnarti tutto sul Terminalea Quindi

apri il Terminale e crea un nuovo account utente con questo

comando:

sudo adduser NOME_UTENTE

Ora termina la sessione, loggati con il nuovo utente creato, apri

nuovamente il Terminale e digita:

sudo ecryptfs-migrate-home -u username

dove al posto di username, dovrai mettere l'username della tua

home da criptarea

Ti verrà chiesto di confermare l'operazione di criptaggio, dopo

non ti resta che aspettare che termini l'operazionea

Se non si apre la fnestra di dialogo basta digitare:


37

ecryptfs-add-passphrase

Al termine avremo la nostra home criptataa

Ho voluto mostrarti come criptare la tua home da Terminale

perché come ti ho promesso, alla fne di questo libro, sarai un

esperto del Terminalea

In questa fase, non ho voluto di proposito approfondire i comandi

usati perché stiamo ancora installando Ubuntua

Dunque, proseguiamo con l'installazione e premi il pulsante

“Avanti”a
38

Benvenuto in Ubuntu! Ora non ti resta che attendere che Ubuntu

venga installato sul tuo computera

Durante questa fase, verranno copiati ed installati i fle e verrà

creato tutto quello che precedentemente abbiamo fattoa

Come ti ho detto fn dall'inizio non avere fretta, non perdere

tempo, mentre prosegue l'installazione, vedrai diverse slide nello

schermoa Leggi bene ogni schermata, se sei un nuovo utilizzatore

di Ubuntu ti aiuterà e avrai una visione generale di questa

fantastica distribuzionea

Quando l'installazione sarà terminata ti comparirà l'ultima

schermata come segue:

Prima di premere su “Riavvia ora” , togli il cd di installazione! In

ogni caso se ti dimentichi non preoccuparti, verrai comunque

avvisato con una scritta a video dove ti verrà chiesto di togliere il

cd e premere su INVIO per riavviare il sistemaa


39

Riepilogo

1 – Ho analizzato per te ogni fase dell'installazione di Ubuntu,

perché una buona installazione è fondamentalea

2 – Ho anticipato alcuni comandi fondamentali del Terminale per

farti capire che l'interfaccia grafca è certo comoda, ma conoscere

il Terminale rende molte operazioni più veloci e più precisea

Avere le competenze del Terminale, ti apre la strada in ambito

professionalea

3 – Lo studio della crittografa meriterebbe un intero libroa I

migliori hacker ti direbbero che è una competenza fondamentalea

Ho analizzato alcuni aspetti della crittografa perché Ubuntu fn

dall'installazione, offre la possibilità di avere “Maggiore

Sicurezza”a

Questa è l'installazione standard di Ubuntu, in ogni sua fase, ma

se volessi installare Ubuntu senza interfaccia grafca, sappi che è

possibile?
40

Certamente sia Tuttavia se utilizzi Ubuntu come privato e vuoi

diventare un esperto del Terminale, non è necessario complicarsi

la vitaa Una volta entrato nella tua home è suffciente aprire il

Terminale e seguire questo libro per apprendere tutto quello che

ti servea

Se conosci già il mondo linux e vuoi approfondire per motivi

professionali il potere del Terminale, puoi operare 2 scelte:

1 – Per terminare il 1° Comandamento, ti spiego cosa fare per

avere Ubuntu senza interfaccia grafcaa

2 – In una azienda, spesso la rete è divisa in Server e Clienta I client

sono i singoli pc utilizzati dai dipendentia I server (spesso sono più

di uno) vengono gestiti da personale competente che amministra

la rete aziendalea Immagina un server dedicato al backup dei dati,

uno dedicato alle email, uno dedicato al web ecca

Quindi se vuoi, puoi installare Ubuntu Server che non ha

interfaccia grafcaa

Nel corso de “I dieci ComadaMenti”, ti svelerò il potere del

Terminale, imparerai che dal Terminale si può fare tuttoa


41

Potresti obbiettare dicendo che ormai tutti vogliono la grafca e

che il Terminale non è più necessarioa In ambito professionale ti

dico subito che non è cosìa Come privato, conoscere il Terminale

ti aiuta a risolvere molti imprevisti, come per esempio: Non ti è

mai capitato di avviare la tua distribuzione Linux e per qualche

misteriosa ragione non vedere la tua interfaccia grafca? Anche in

una situazione così banale conoscere il Terminale ti aiuta moltoa

Chiediti invece, come mai nell'era della grafca i colossi

dell'informatica come Microsoft, Linux, Apple, continuano a

mettere il Terminale nelle loro distribuzionia

Disabilitare l'interfaccia grafca di Ubuntu

Ho scelto di spiegarti come disabilitare l'interfaccia grafca perchè

può tornarti utile se ad esempio installi Ubuntu desktop in un

computer di appoggio datato e hai esigenza di risparmiare

memoriaa

Se hai installato Ubuntu Server, tutto quello che ti dirò avviene in

automaticoa
42

Attivazione manuale

E' possibile eseguire questa operazione manualmente attraverso

il GRUBa

All'avvio del tuo computer tieni premuto il tasto “shift” di sinistra,

prima dell'avvio del sistema operativoa

Ti verrà mostrato il menu del Grub e potrai selezionare il kernel di

interesse, di solito il primoa Dopo aver selezionato il kernel premi

il tasto “E” a

Vedrai una schermata con diversi comandi, quello che interessa a

te è il seguente:

linux /vmlinuz-2.6.32-22-generic root=UUID=45e...83a quiet

splash

cancella “quiet splash” e sostituiscilo con “text”a

Ora premi CTRL+ X e il sistema verrà avviato in modalità testoa

Il sistema si fermerà alla console, dove ti verrà chiesto di loggartia

Questo tipo di modifca è provvisoria e dovrà essere ripetuta

dopo ogni avvioa

Attivazione automatica
43

Per confgurare Grub ed avviare automaticamente il sistema in

modalità testuale, devi aprire il terminale e fare quanto segue:

sudo gedit /etc/default/grub

Nota: gedit è un editor testuale, puoi anche usare nanoa

Verrà aperto il fle nell'editor e dovrai modifcare la seguente riga:

GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”

in questo modo:

GRUB_CMDLINE_LINUX_DEFAULT=”text”

Se vuoi nascondere i messaggi di avvio del sistema, ti basterà

modifcare la riga in questo modo:

GRUB_CMDLINE_LINUX_DEFAULT=”quiet text”

Fatta la modifca salva ed esci dall'editor di testo e digita dal

terminale:

sudo update-grub
44

Dal successivo riavvio del sistema, in modo automatico, tutto

verrà avviato in modalità testualea

Se volessi riavviare manualmente l'interfaccia grafca, ti basterà

digitare:

startx oppure sudo start gdm

La procedura che ti ho appena descritto non funzionerà su

Ubuntu 16a04 LTS e non funzionerà se come me avete installato

Ubuntu su Virtualbox come macchina virtualea

Per Ubuntu 16a04 LTS si può fare come segue:

Apri il terminale e digita → sudo systemctl disable

lightdm.service

a seguire digita: reboot

Il sistema si riavvia ed entrerà in modalità solo testoa

Per riavviare la modalità grafca, devi dalla modalità testo in cui ti

trovi, digitare:

sudo systemctl start lightdm.service


45

L'interfaccia grafca verrà riavviata immediatamentea

Si può rendere permanente la modalità testo, andando nel Grub

e facendo le dovute modifche in questo modo:

sudo nano /etc/default/grub

Modifca le seguenti righe in questo modo:

GRUB_CMDLINE_LINUX_DEFAULT=”quiet”

GRUB_CMDLINE_LINUX=”3”

CTRL+X per salvare e uscire dall'editora

Da terminale salva le modifche fatte così:

sudo update-grub

reboot per riavviare la macchina

Da questo momento in poi Ubuntu 16a04 LTS verrà sempre

avviato in modalità testoa

Per avviare l'interfaccia grafca hai diversi comandi a disposizione:

sudo service lightdm restart


46

oppure

sudo systemctl start lightdm

Entrambi testati su questa distribuzionea

Ottimo, ora ti suggerisco di provare perchè soltanto mettendo in

pratica, tutto sarà chiaro e acquisitoa


47

2° ComandaMento

Che cos’é la shell

La Shell è un interprete di comandia I comandi che tu digiti

vengono letti dalla shell e vengono inviati al kernel per essere

eseguitia

Voglio farti un esempio chiarifcatore: se tu vuoi parlare con un

inglese, o parli inglese oppure ti serve un interprete. La Shell è

una sorta di interprete che traduce i comandi nel linguaggio del

tuo computera

La riga in cui tu puoi digitare i comandi si chiama Prompt ed è un

insieme di caratteri che possono essere personalizzatia Il prompt

dell’utente root (superuser o amministratore) inizia con il carattere

# mentre il prompt di un utente qualunque inizia con il carattere $

Operazioni della shell


Esempio: tuoNome@computer:$
48

Questo prompt può essere personalizzato modifcando la

variabile PS1 nel fle (nascosto) di confgurazione .bashrc a

Per esempio potresti modifcare il tuo prompt così:

Esempio: Scrivi il tuo comando:_

Puoi anche modifcare temporaneamente il prompt, dal tuo

prompt attuale in questo modo:

Apri il terminale e scrivi PS1=“Scrivi il tuo Comando: “ e premi

invio

La Shell Bash (il tuo terminale linux di default) , permette di

personalizzare il prompt con caratteri speciali di escape che

vengono interpretati come segue:

a il carattere ASCII beep (07)

d la data nel formato "Giorno-della-settimana Mese Data"

(e.g., "Tue May 26")

e un carattere di escape ASCII (033)

h l'hostname fno al primo `.'


49

H l'hostname

n il carattere "newline"

r il carattere "carriage return"

s il nome della shell, il nome base di $0

(la parte che segue lo slash fnale)

t l'ora corrente nel formato 24-ore HH:MM:SS

T l'ora corrente nel formato 12-ore HH:MM:SS

@ l'ora corrente nel formato 12-ore am/pm

u lo username dell'utente corrente

v la versione di bash (e.g., 2.00)

V la release di bash, versione + patchlevel

(e.g., 2.00.0)

w la directory di lavoro corrente

W il nome di base della directory di lavoro corrente

! il numero cronologico (history number) di questo comando

# il numero di questo comando

$ se l'UID effettivo è 0, un #, altrimenti un $

nnn il carattere corrispondente al numero ottale nnn

\ un backslash

[ comincia una sequenza di caratteri non stampabili, che


50

potrebbero essere usati per inserire una sequenza di

controllo del terminale nel prompt

] termina la sequenza di caratteri non stampabili

Puoi anche cambiare il colore in questo modo:

Nero 0;30 Grigio Scuro 1;30

Blu 0;34 Blu Chiaro 1;34

Verde 0;32 Verde Chiaro 1;32

Ciano 0;36 Ciano Chiaro 1;36

Rosso 0;31 Rosso Chiaro 1;31

Viola 0;35 Viola Chiaro 1;35

Marrone 0;33 Giallo 1;33

Grigio Chiaro 0;37 Bianco 1;37

I colori sono caratteri escape non stampabili, quindi devono

essere racchiusi da :

1 - \[\033[

2 - 0;34m

3 - \]
51

Il punto 1 è la sintassi di apertura, il punto 2 è il colore (come da

tabella) seguito da una ‘m’ , il punto 3 è la chiusuraa

Quindi se vuoi avere il colore blu scrivi il seguente comando dal

tuo prompt:

PS1=“\[\033[0;34m\]Digita il tuo comando: “

I comandi sono dei programmi contenuti in directory speciali per

esempio /bin e /sbina

Quando tu digiti il nome del comando e premi invio, la shell cerca

il comando nelle directory sopra citate e se lo trova lo eseguea

Se non lo trova produce un errore come segue:

Bash: nome-comando : command not found

Ovvero, comando non trovatoa

Il comando è composto da:

Nome del comando + opzioni + argomenti


52

Esempio : ls (nome comando) -l (l’opzione è preceduta dal

simbolo -) fatturaatxt (argomento)

Tipi di shells
In Ubuntu la shell di default è la Bash, ma se vuoi sapere quali

sono tutte le shells installate nella tua distribuzione devi

semplicemente visualizzare il fle /etc/shells digitando:

cat /etc/shells

Per invocare una delle shells elencate non devi fare altro che

digitare il suo nomea Per uscire dalla shell digita exit o CTRL+D a

Ora voglio lasciarti il sommario delle scorciatoie della shell,

combinazioni di tasti che ti saranno di grande aiuto e renderanno

spesso il tuo lavoro molto più velocea

Come dico sempre, il modo migliore di imparare è 80% pratica e

20% teoria, quindi prova queste scorciatoie e fai esercizioa


53

• !! esegue l'ultimo comando appena eseguito

• !n esegue l'ennesimo comando presente nella storia, dove 'n' e' il


numero del comando da eseguire

• !stringa esegue l'ultimo comando che inizia con i caratteri specifcati


in 'stringa'

• !stringa:p visualizza l'ultimo comando che inizia con i caratteri


specifcati in 'stringa'

• !?comando? ricerca il comando specifcato tra punti interrogativi

• fc 4 permette di modifcare in comando numero 4 con l'editor


predefnito (solitamente vi)

• fc -e 'nome' 4 permette di modifcare in comando numero 4 con


l'editor 'nome' specifcato

• ^comando1^comando2 esegue l'ultimo comando eseguito che


contiene la parola 'comando1' sostituendola con 'comando2'.

• 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 fne della
riga

• CTRL-W cancella una parola dalla posizione del cursore all'inizio della
riga

• ALT-D cancella una parola dalla posizione del cursore alla fne della
riga

• freccia sinistra sposta il cursore di un carattere a sinistra

• freccia destra sposta il cursore di un carattere a destra

• freccia su scorre la storia dei comandi a ritroso


54

• freccia giù scorre la storia dei comandi in avanti

• tasto home sposta il cursore all'inizio della riga

• CTRL-A sposta il cursore all'inizio della riga

• tasto fne sposta il cursore alla fne della riga

• CTRL-E sposta il cursore alla fne della riga

• ALT-F sposta il cursore alla fne della parola successiva (F sta per
forward, successivo)

• CTRL-B sposta il cursore all'inizio della parola precedente (B sta per


backward, precedente)

• CTRL-T inverte gli ultimi due caratteri a sinistra del cursore, cioe' ab
diventa ba (T sta per transpose)

• ALT-T inverte le ultime due parole a sinistra del cursore, cioe' cp pippo
pluto diventa cp pluto pippo

• ALT-U trasforma in maiuscolo la parola su cui si trova il cursore (U sta


per uppercase, cioè maiuscolo)

• ALT-L trasforma in minuscolo la parola su cui si trova il cursore (L sta


per lowercase, cioè minuscolo)

• tasto TAB espande il nome di un fle o di un comando

Visto che il 2 ComandaMento è dedicato all’introduzione della

shell, voglio spiegarti un altro concetto importante che potrà

tornarti sempre utile, parliamo quindi di alias !


55

Ti capiterà spesso di digitare continuamente comandi complessi

con opzioni, inizialmente va bene perché in questo modo prendi

dimestichezza con l’uso dei comandi, ma dopo un po’ diventa

fastidiosoa

Voglio farti subito alcuni esempi chiarifcatori per spiegarti come

ancora una volta con il terminale si può fare davvero di tuttoa

Nel ComandaMento 4, ti spiegherò nel dettaglio i comandi

fondamentalia Nel frattempo ne uso alcuni per spiegarti il

signifcato di aliasa

Usare l’alias può tornare utile anche per limitare operazioni

pericolose, ti faccio alcuni esempi:

Il comando rm, cancella i fle in modo irreversibile senza chiedere

alcuna conferma, a meno che non si usi l’opzione -ia

Il signifcato di alias è equivalente al signifcato di sinonimo per

cui è possibile creare un sinonimo del comando rm digitando nel

terminale:

alias cancella=‘rm -i’


56

Da questo momento in poi, digitando nel terminale il

comando/alias cancella + nome_fle il sistema ci chiederà

conferma prima di cancellare qualsiasi flea

Da questo piccolo esempio, puoi comprendere come potrai

creare infniti sinonimi di comando che ti semplifcheranno il

lavoro e cosa importante, potrai dare loro nomi in italiano, il che

non guastaa

Per eliminare l’alias creato,m digita semplicemente nel terminale:

unalias cancella

Dove cancella, è il nome dell’aliasa

Il comando cp, è un comando che serve a copiare, il comando

pwd serve a sapere dove ti trovi. Quindi, se hai diffcoltà a

ricordare questi comandi o semplicemente vuoi dare loro un

nome in italiano, potresti ricorrere all’utilizzo dell’alias/sinonimoa

Esempio: alias copia=‘cp’

Esempio: alias dove_mi_trovo=‘pwd’


57

Bene, ora voglio spiegarti come modifcare il comportamento

della shella Quanto ti dirò, può tornarti utile ma occorre prestare

attenzionea

1 - Per evitare di uscire dalla shell digitando senza volerlo

CTRL+D, puoi ricorrere all’opzione ignoreeof. Per usare questa

opzione devi usare il comando set a Questo comando ha due

parametri -o e o a

Per impostare l’opzione ignoreeof digita:

set -o ignoreeof

Per tornare al comportamento normale della shell digita:

set o ignoreeof

Per impostazione predefnita la shell bash di Ubuntu ha valore 10a

Quindi dovrai premere 10 volte CTRL+D per uscirea Se vuoi

impostare ad esempio il valore a 1 dovrai scrivere nel terminale:

export ignoreeof=1 e premere invio


58

Ti suggerisco tuttavia di leggere la documentazione della shell

che usi, per conoscere con esattezza la semanticaa

2 - Ci sono altre due opzioni interessanti per modifcare il

comportamento della shell, queste sono : noclobber e nogloba

La prima opzione serve ad evitare di cancellare inavvertitamente

un fle da una operazione di redirezionea

Esempio: cat fatture > ddt

Potrebbe accadere che il contenuto di ddt sovrascriva fatturea Se

imposti l’opzione noclobber con il comando set, non potrai più

sovrascrivere il fle perchè la shell ti darà un errorea

Esempio: ls > ddt

set -o noclobber

ls > ddt

pluto: fle exist ( la shell mi dice che il fle già esiste)

L’opzione noglob, disattiva i caratteri speciali della shell, *,?,[,] e


59

~ a Per farti un esempio, se scrivo un fle di nome fatture*, la shell

espanderebbe fatture con tutti i nomi di fle che iniziano con

fatture e terminano con una sequenza qualunque di caratteria

Impostando noglob, questo non sarà più possibilea

Come hai appena letto, la shell è ricca di sorprese, un mondo

davvero particolarea

Ecco perché ora voglio spiegarti un’altra sua caratteristica che

riguarda i Caratteri Specialia

Abbiamo appena visto che con l’opzione noglob, è possibile

disattivare questi caratteri, ora voglio spiegarti il loro signifcato e

il loro uso in modo da rendere veloci le tue operazioni e

comprendere meglio il potere del Terminalea

Ti elenco alcuni caratteri che la shell interpreta con regole ben

precise:

. / $ & ? ~ ! < > * .. ; [ ] |

Ognuno di questi caratteri è particolare e voglio spiegarti di

seguito il loro signifcato:


60

1a Il ‘a’ Signifca la directory corrente

2a Il ‘aa’ Signifca la directory superiore

3a Il ‘~’ rappresenta la home

4a Il ‘e’ viene usato per separare più comandi nella stessa riga

5a Il ‘*’ 0 o più caratteri

6a Il ‘?’ Un carattere singolo

7a [] espressione

8a < ridirezione dell’input

9a > ridirezione dell’output

10a & esegue comando in background

11a$ identifca una variabile d’ambiente

12a| esegue più comandi a cascata

Ci sono molti altri caratteri speciali e quindi cosa puoi fare di

speciale per utilizzarli? Per ora ti voglio fare un esempio semplice,

nel ComandaMento 8 approfondiremo tuttoa

Supponi di avere nella tua home 5 fle: fatture01atxt, fatture02atxt,

fatture03atxt, letteraatxt, reportatxt e di voler fare una copia

soltanto dei fle fatture, in una directory chiamata ˜/Fatturea

Ecco come fare:


61

/home/bianchi/ : ls -F e premo invio

fatture01atxt fatture02atxt fatture03atxt letteraatxt reportatxt

In questo modo vedi tutti i fle presenti nella mia home e eventuali

directorya

mkdir ˜/Fatture e premo invio

Con questo comando creo la directory Fatture

cp fatture* ˜/Fatture e premo invio

Ora copia tutti i fle (fatture) utilizzando il carattere speciale ‘*’ ,

nella directory Fatturea

Cosa fa secondo te il comando : cp f*t ˜/Fatture .

Non resterai deluso !

All’inizio del ComandaMento 2, ti ho spiegato che cos’è un alias e

come sfruttare questo comandoa

Ora, l’esempio che ti ho appena fatto può sembrare banale, in

realtà se unisci tutte le competenze che hai appena acquisito puoi

già fare la differenzaa


62

Immagina di essere in un uffcio, di ricevere durante ogni giornata

della settimana 100 fle in formato PDF, ognuno dei quali è un

documento di trasportoa Ogni giorno della settimana, a fne

giornata, devi fare la copia di questi fle per ragioni di sicurezzaa

Secondo me, non vedi l’ora di volare via dall’uffcio e la fretta a

volte ti fa commettere erroria Ecco che il potere del Terminale

solo con queste piccole competenze, ti può già aiutare moltoa

Usa il comando alias per crearti un piccolo comando di copia

automatizzatoa

Scrivi sul terminale: ‘copia’ e premi invio, lascia che l’ultima fatica

della giornata, in tutta sicurezza, la faccia il computer al posto tuoa

Con queste piccole competenze, puoi creare già grandi comandi

personalizzati e precisi che svolgono lavori monotoni, che devi

ripetere ogni giorno, senza più navigare nell’interfaccia grafca a

colpi di click, rischiando nella fretta o per la stanchezza, di

sbagliarea
63

Riepilogo

1a Ti ho spiegato che cos’è la shell in modo semplice

2a Ti ho spiegato alcune operazioni che puoi fare subito per

prendere confdenza con questo fantastico strumentoa Ho

introdotto alcuni comandi (esa alias) e concetti che vedremo

nel dettaglio nel seguito del libro con esempi simili alla realtà

quotidianaa

3a Ti ho spiegato come sapere quanti e quali tipi di shell sono

presenti nel tuo sistema linuxa

4a Ti ho spiegato i caratteri speciali, la loro funzione e come usarli

fn da subito per agevolare il tuo lavoroa

Prima di proseguire con la lettura del libro, fai delle prove, utilizza

le competenze acquisite per approfondire gli argomenti di tuo

interesse e prova a creare, per esempio, un alias utile al tuo

lavoroa
64

La maggior parte dei manuali che troverai nelle librerie, ti

spiegano la sintassi, usano esempi che non servono nella vita

reale e sono diffcili da assimilarea Quelli che troverai nel corso del

libro, sono per uso quotidianoa Ti spiegherò anche la sintassi,

cercando di essere semplice e praticoa Il Terminale nasce con lo

scopo di semplifcare molte operazioni, rendendole precise e

rapidea

Con il Terminale, puoi anche modifcare alcuni parametri

dell’interfaccia grafca, per esempio:

gsettings set com.canonical.Unity.Launcher launcher-position

Bottom

Questo comando testato sulla distribuzione Ubuntu 16a04 LTS,

permette di spostare il menu (dash), dalla posizione verticale, alla

posizione orizzontale in bassoa (come il menu di Windows o Mac)

Un altro esempio di come la conoscenza del Terminale sia

importantea
65
66
67

3° ComandaMento

Il sistema Linux

Tutti gli argomenti che ti spiegherò in questo ComandaMento, ti

saranno utili per comprendere in generale come è composto il

sistema operativo Linux, ma anche per sapere cosa e dove

cercare, quello che ti occorre al momento opportunoa

Il kernel

Che cos’è il kernel? Volendo usare una metafora, il kernel è un

mediatore che serve a far interagire il software con l’hardwarea Il

kernel si occupa della gestione della RAM, della CPU, dei fle

System e delle periferichea Ho voluto da subito semplifcarti la

vita, ma ora andrò un po’ più nel dettaglioa

Ci sono 3 categorie di kernel: Monolitico, Microkernel, Ibridoa

Linux ha un kernel Monolitico, mentre per esempio Windows e

Mac hanno un kernel Ibrido, anche se per Mac alcuni lo

defniscono come Microkernela


68

Io amo la semplicità, quindi non voglio andare troppo nello

specifco e comunque non è questo lo scopo del libroa

Ti voglio dare un’informazione utile, il kernel in Ubuntu si trova

nella cartella (directory) boot/ e si chiama vmlinuz-version, dove

version, sono numeri e lettere della versionea In questa cartella ci

sono altri fle importanti: initrdaimg-version, Systemamap-version,

confg-versiona

Il fle initrd serve per caricare il kernel, il fle confg serve per

gestire le opzioni e i moduli da caricare, il fle Systemamap serve

per la gestione della memoria, prima che il kernel si carichia

Un modulo kernel serve per aggiungere funzioni al kernel di base

per la gestione, ad esempio, di driver o flesystem ecca

Il kernel è modulabile, quindi può essere personalizzato e si può

decidere cosa caricare e cosa noa

L’architettura del sistema Linux, si basa su 2 livelli: kernel space e

user space e può essere suddivisa in ulteriori 3 livellia

Se desideri approfondire questi argomenti cerca in google con

queste parole chiave: BSP cioè Board Support Packagea

Per approfondire i moduli cerca su google “modules.dep linux”

e il suo programma di riferimento “depmod”.


69

Il fle-system

Nel mondo Linux tutto è considerato un fle, non c’è distinzione

tra hardware e softwarea Linux ha una struttura gerarchica e inizia

con una singola directory / e ogni directory del sistema è fglia

della cartella / radice chiamata roota La root è anche la username

dell’amministratore di sistemaa

Se digiti da Terminale il comando: stat / e premi invio, avrai in

output una serie di informazionia

Il fle si chiama / ed è grande 4096 bytes, è diviso in 8 blocchi, il

disco fsso è rappresentato dalla scritta Device 801h/2049d

(questo valore può cambiare), è collegato all’i-mode 2 che ha in

se altre 24 cartelle meno 2 che sono “a” e “aa” a

Se a Terminale digiti stat /home e premi invio, avrai i valori per la

tua homea

Ogni utente, ha la sua directory personale e tutte le directory

personali si trovano nella cartella home che è modifcabile o

eliminabile solo dall’utente roota

Se il tuo nome utente è Bianchi, la tua cartella sarà:

/home/Bianchia

In ogni directory personale saranno presenti le sotto-directory

Documenti, Immagini, Musica ecca


70

Quando ti colleghi facendo il login, accedi alla directory home e

alla tua sotto-directory Bianchi, che non è la root, ma un’area

privataa

/bin : E’ la directory che contiene i programmi principali del

sistema, quelli che devono essere subito accessibile

all’accensione per avviare il sistemaa

/home: Come ho già detto, questa directory serve per gestire gli

utenti e ha come sotto-directory l’utente stessoa

/usr: Questa directory ha diverse sotto-directory : bin, games,

include, lib, local, locale, sbin, share, srca

Qui c’è tutto il sistema, i programmi installati, il fle del manuale, la

documentazione e molto altroa

In genere i fle della directory usr possono essere solo lettia

/sbin e /usr/sbin : Queste directory hanno davanti la “s” che

signifca Superuser, infatti contengono soprattutto comandi per

l’amministrazione del sistemaa


71

/usr/man : contiene le pagine del manuale in linea più altre sotto-

directory (in alcune distribuzioni come Ubuntu il percorso può

variare)a

/etc : Contiene tutti i fle di confgurazione del sistema compresi

quelli per l’accensionea

/lib : Contiene tutte le librerie del sistema, comprese quelle del

linguaggio C e di altri linguaggi di programmazionea

/mnt e /proc : la /mnt è una directory vuota predisposta per

montarci dispositivi un po’ come la directory /cdroma

La /proc è usata per montare un fle-system virtuale che permette

di accedere a tutte le informazioni di sistema come la CPU,

dispositivi disponibili, quantità di memoriaa

/tmp e /var : La directory /tmp viene caricata di fle temporanei

appartenenti alle varie elaborazionia Ad ogni accensione questa

cartella viene cancellataa

La directory /var contiene nelle sue sotto-directory gli eventi di

sistema per esempio i fle log, le code di stampa e i fle di sistema

che vengono modifcatia


72

Devices /cdrom e /dev : La directory /cdrom è vuota e serve

all’amministratore per “montare” l’unità cda

La directory /dev contiene dei fle speciali che servono ad

indicare al sistema i dispositivia

Dispositivi e fle speciali: Alcuni fle speciali della directory /dev

sono:

1a fd0 : corrisponde all’unità foppy A

2a fd1 : corrisponde all’unità foppy B

3a hda, hdb, hdc, hdd sono i 4 possibili dischi IDE

4a hda1, hda2, hda3, hda4, sono le 4 partizioni primarie possibili

del primo disco IDEa

Utenti e Gruppi

Linux è un sistema multi-utente, la gerarchia prevede la /root

come utente amministratore del sistema e N utenti con la

propria /home e mansioni diversea

Tu, se sei un utente privato, installando ad esempio Ubuntu come

abbiamo visto nel ComandaMento 1, ottieni un sistema che è

costituito dalla /root, dalla tua cartella di lavoro /home/Bianchi e

visto che sei solo tu, lavori nella tua home e all’occorrenza fai

anche l’amministratore del sistemaa Infatti, nella tua home, in


73

genere, puoi modifcare, leggere e scrivere fle e digitare solo

alcuni comandi che non infuiscono sul sistemaa Per poter avere

pieni poteri in tutto il sistema, devi loggarti come /root cioè come

amministratore del sistemaa

Ogni utente deve appartenere a un gruppo ma può anche

appartenere a più gruppia

Se pensiamo ad una azienda, ci sarà sicuramente un server con

installato ad esempio Ubuntu server e diversi client, in genere

tanti quanti sono gli operatoria

L’amministratore di sistema è colui che ha pieni poteri sul server,

mentre i client sono tutti i dipendenti che da altre postazioni

accedono al server ognuno con il proprio username e passworda

Esempio: Amministratore del sistema, impiegata, capo uffcio,

centralinistaa

L’impiegata potrà accedere al server e registrare i documenti di

trasporto, ma non potrà né vedere né modifcare i fle del capo

uffcioa Allo stesso modo sempre nella logica delle mansioni, il

centralinista avrà accesso al server per registrare le entrate dei

dipendenti ma non avrà accesso né ai fle dell’impiegata né a

quelli del capo uffcioa

La gestione degli accessi/mansioni e la gestione del server stesso,

spetta solo all’amministratore del sistemaa Solo lui per esigenza,


74

potrà dare i permessi all’impiegata di vedere i fle del capo uffcio

temporaneamente, perché ad esempio, per un certo periodo, è in

malattiaa

Ho voluto fare questo esempio per farti comprendere il signifcato

di multi-utente, con un esempio realea Nel tuo piccolo, come

privato potresti fare la stessa cosa creando tanti utenti quante

sono le persone che usano il computer in casaa Questo approccio

ti permetterebbe diversi vantaggi:

1a Ogni utente avrebbe la sua area privata, la sua home, con i

suoi flea

2a Ogni utente non corre il rischio di cancellare inavvertitamente i

fle di un altro membro della famigliaa

3a Ogni utente può operare in sicurezza e privacy

4a Tu, oltre ad avere la tua home per lavorare, sei anche

l’amministratore del sistema e come tale, potrai decidere che

tipo di operazioni può fare ogni singolo utente, mantenendo

sempre il sistema aggiornato e stabilea

La shell

Nella maggior parte delle distribuzioni Linux, la shell di default è

la Basha Nel corso del libro sarà questa shell che prenderò in

considerazione e che utilizzeròa Nel ComandaMento 2 ti ho detto


75

che cos’è la shell e ti ho fatto alcuni esempi delle operazioni che si

possono farea

Dal ComandaMento 4 in poi, inizierai ad utilizzare la shell per

muoverti all’interno del sistema che ti ho appena spiegato e step

by step, arriverai a creare programmi utili e a programmare la

shell per plasmare il sistema per le tue esigenzea


76
77

4° ComandaMento

I Comandi Fondamentali

Navigare nel sistema


Inizio con i comandi che ti permettono di vedere e spostarti

all’interno del sistema che ti ho appena illustrato: in questo modo

oltre ad imparare i comandi, potrai scoprire come è composto

tutto il sistema linux o solo la tua homea

Il primo comando si chiama ls e si utilizza per visualizzare le

directory e i flea Questo comando ha molte opzioni, quindi apri il

Terminale e digita nella tua home ls + invioa Dovresti ottenere

qualcosa del genere:


78

Le voci in blu sono le directory, gli altri sono i flea

Questo comando è ricco di opzioni ti faccio alcuni esempi pratici :

ls -F : Distingue i fle dalle directory aggiungendo alle directory /

ls -a : visualizza fle e directory nascoste

ls -lh : visualizza i dettagli di fle e directory compreso i gruppi e i

permessia

Il comando cd ti permette di muoverti tra le cartelle e puoi

utilizzarlo come segue:

cd nome_percorso/ : si sposta nella directory indicata

cd .. : risale di un livello

cd ../.. : risale di due livelli

Ti metto una immagine in modo che tu possa fare la stessa cosaa

Supponi di voler vedere il contenuto della tua cartella

Immagini/ , per poter vedere le tue foto, devi aprire la cartella

con il comando cd + nome_cartella in questo modo:

cd Immagini/ e premi invio


79

Ora vedrai che il tuo prompt è cambiato e verrà aggiunto che ti

trovi nella cartella Immaginia Digitando il comando ls , potrai

vedere l’elenco di tutte le tue fotoa

Per salire di un livello non dovrai fare altro che digitare cd .. e

premere invioa

Attenzione: devi scrivere cd + spazio + aa altrimenti riceve un

errorea

Dopo aver digitato un po’ di comandi, potresti voler pulire lo

schermo del tuo terminalea Lo puoi fare con il comando :

clear + invio

Usa tutte le competenze acquisite e crea un alias per questo

comandoa Io per comodità ho fatto in questo modo:

alias c=“clear” + invio

Così non dovrò più digitare clear per pulire lo schermo ma

semplicemente la lettera c seguita da invioa


80

Il comando mkdir ti permette di creare una directorya Supponi di

voler creare una nuova directory che chiami lavoro/ dove al suo

interno metterai tutti i fle che riguardano la tua professionea

mkdir lavoro + invio

Ora per vedere se la cartella è stata creata, usa il comando ls +

invio.

Attenzione: per Linux scrivere “lavoro” e “Lavoro” non è la stessa

cosa! Se scrivi mkdir lavoro e mkdir Lavoro , crei 2 cartelle diverse

tra loroa

Per cancellare una directory usa il comando :

rmdir + nome_directory e premi invio (se la directory è vuota)

Ora che hai creato la nostra cartella “lavoro”, sicuramente ti

capiterà di dover creare un nuovo fle, per esempio un fle di testo

vuoto dove scriverci una lettera o un documentoa


81

Per creare un fle vuoto puoi usare il seguente comando:

touch + nome_fle e premi invio

touch lettera.txt + invio

Successivamente puoi aprire il tuo fle e scrivere la tua lettera con

un editor di testoa Io ad esempio uso l’editor nano che su Linux è

di defaulta

nano lettera.txt + invio

Verrà aperto il fle e tu potrai scrivere la tua letteraa


82

Le operazioni che ti capiterà di fare più spesso, sono quelle di

copiare, cancellare, spostare, rinominare fle e directory a

Il comando cp viene utilizzato per copiare fle e directorya Se

volessi copiare il fle letteraatxt che abbiamo creato nella cartella

lavoro, nella cartella Scrivania dovrei svolgere le seguenti

operazioni:

cd lavoro + invio

cp lettera.txt ../Scrivania + invio


83

Se voglio copiare la directory lavoro con i suoi fle, dentro la

directory Scrivania dovrò digitare:

cp -a lavoro Scrivania + invio

-a è una opzione che possiamo dare al comando cpa

Il comando rm serve per cancellare fle e directory e anche lui ha

diverse opzioni utili ad esempio -ia

rm + nome_fle + invio

In questo modo il fle viene cancellato senza alcuna richiesta di

conferma e può essere pericolosoa

rm -i + nome_fle + invio

Ti verrà chiesto di confermare se davvero vuoi cancellare il flea

Anche per questo comando potrebbe tornarti utile creare un

alias, questo perché come hai visto, quasi ogni comando ha

diverse opzioni e a volte ci si dimenticaa Quindi potresti creare un

alias in questo modo:


84

alias cancella=“rm -i”

Così potrai in tutta sicurezza scrivere:

cancella lettera.txt

E dopo aver premuto Invio, ti verrà chiesto di confermare la

cancellazione del flea Molto più sicuro non trovi ?

Ora voglio indicarti alcuni comandi utili per ottenere delle

informazioni:

df -h : visualizza l’elenco delle partizioni montate

du -sh nome_directory: ti permette di sapere quanto spazio

occupa su disco quella specifca directorya

du -sk* | sort -rn: visualizza le dimensioni di fle e directory

ordinate per dimensione

ls -l | wc -l: conta gli elementi presenti nella cartella in cui ci si

trovaa
85

top: è un semplice monitor di sistema molto utilea

Adesso, entra nella directory lavoro che hai creato e dove si trova

il tuo fle letteraatxt e digita:

chmod -xwr lettera.txt e premi invio

Ora prova ad aprire il fle con l’editor nano o dalla tua interfaccia

grafca! Vedrai che ti verrà dato un errore: permesso negatoa

Questo perché, il comando che ti ho fatto digitare toglie i

permessi di lettura, scrittura ed apertura del flea Per poter

nuovamente utilizzare il tuo fle letteraatxt digita:

chmod +xwr lettera.txt e premi invio

Ecco ora abbiamo ridato i permessi necessaria

Avresti potuto togliere solo il permesso di modifcare/scrivere il

fle digitando:

chmod -w lettera.txt e premi invio


86

Finora ti ho fatto vedere alcuni comandi utili mischiati tra loro e ti

ho spiegato come utilizzarlia Adesso ti scriverò un elenco di

comandi diviso per argomento, in modo tale tu possa provarli e

far praticaa

Hai imparato che un comando ha una sua sintassi:

nome_comando + opzioni + caratteri speciali + argomento

A volte utilizzerai tutta la sintassi, altre solo una partea

Comandi di Sistema

top Mostra i processi in esecuzionea

free Mostra lo stato della memoriaa

free -m Mostra lo stato della memoria in Mb

sudo halt Spegne il PC da terminalea

sudo reboot Riavvia il PC da terminalea

Mostra tutte le informazioni disponibili sul


uname -a
sistemaa

uname -s Mostra il nome del Kernel in usoa


uname -r Mostra la release del Kernel in usoa

uname --help Per conoscere le altre funzioni di uname

sudo fdisk -l Stampa le partizioni sul discoa

lsusb Stampa i dispositivi usb connessia

sudo lshw -c video Stampa informazioni sulla scheda videoa

ifconfg Informazioni sulla retea

iwconfg Informazioni sulla rete senza flia

Reimposta la rete dopo confgurazioni


sudo /etc/initad/networking restart
manualia

Apre, e consente di modifcare, il fle di


sudo /etc/network/interfaces
confgurazione manuale della retea

lspci Elenca le periferiche e i bus PCIa

Stampa l'elenco completo dell'hardware di


lshw
sistemaa

cat /proc/cpuinfo Mostra informazioni sul processorea

cat /proc/meminfo Mostra informazioni sulla memoriaa

cat /proc/swaps Mostra la partizione di swapa

cat /proc/mounts Mostra i flesystem montatia

sudo lshw > Crea un documeto “Hardwareatxt” sulla


~/Scrivania/Hardwareatxt scrivania con le info sull'hardwarea

lspci | grep VGA Vede la compatibilità della scheda video


pstree Mostra un diagramma ad albero dei processia

du Visualizza l’occupazione del discoa

sudo nautilus Apre il fle manager con permessi di roota

xkill Termina la fnestra selezionata dal puntatorea

sudo shutdown hh:mm Spegne il PC all'orario specifcatoa

sudo shutdown -c Elimina uno spegnimento pianifcatoa

whoami Mostra l'utente con cui si è loggatia

Mostra tutte le informazioni sulla


lsb_release -a
distribuzionea

lsb_release -d Mostra la descrizione della distroa

lsb_release --help Per conoscere le altre funzioni di lsb_

Mostra lo spazio libero di tutti i File System


df -h
montatia

ps aux | awk '{print $2, $4, $11}' | sort Stampa informazioni sui programmi in
-k2r | head -n 20 esecuzione e il loro consumo di rama

Chiude la shell senza chiudere il programma


nohup nome_programma &
lanciato dal terminalea

ps Stampa l' elenco dei processi correntia

Stampa l' elenco dei processi correnti, in


ps -l
formato estesoa

ps -r Stampa i soli processi attivia


Stampa anche i processi non controllati dal
ps -x
terminalea

ps --help Per conoscere tutte le funzioni di psa

ps -e | grep nome_programma Indica se un programma è attivo a

Terminare un processoa Bisogna sostituire


kill XXX
XXX con il PID ricavato da ps-xa

Per terminare un processo con il nome del


killall -9 nome_programma
programmaa

Elenca i job fermati o in sottofondoe ripristina


bg
un job fermato e messo in sottofondo a

fg Porta il job più recente in primo piano a

fg n Porta il job n in primo piano a

sudo update-grub Per aggiornare il bootloadera

rsync -auv --exclude=alocal --


effettua un back-up della home di
exclude=athumbnails --
NOMEUTENTE in
exclude=amldonkey --delete --stats /
home/NOMEUTENTE/ /media/PERCORSO/ col nome BACKUP-
/media/PERCORSO/BACKUP- UTENTE
UTENTE

sudo dpkg-reconfgure tzdata Reimposta la dataa

fnd /home/nomeutente/Musica/ - Trova ed elimina tutti i fles Thumbsadb lasciati


name Thumbsadb -delete da Windows in Musicaa

Apre, e consente di modifcare, il fle di


sudo gedit /boot/grub/grubacfg
confgurazione del bootloader gruba

Riavvia il server X e ritorna alla schermata di


sudo /etc/initad/gdm restart
accesso (GNOME)a
Riavvia il server X e ritorna alla schermata di
sudo /etc/initad/kdm restart
accesso (KDE)

Apre, e consente di modifcare, il fle di


sudo gedit /etc/X11/xorgaconf
confgurazione del server grafco Xa

sudo dpkg-reconfgure -phigh


Reimposta la confgurazione del server X
xserver-xorg

Cartelle e fle

cd /percorso/cartella Entra nella cartella specifcataa

cp fle_da_copiare
/home/utente/cartella_in_cui_copiar Copia il fle indicato nella cartella specifcataa
e

cp -r sottocartella
/home/utente/cartella_in_cui_copiar Copia la sottocartella nella cartella specifcata
e

cp --help Per conoscere tutte le altre funzioni di cpa

mv fle_da_spostare
/home/utente/cartella_in_cui Per spostare un fle o una cartellaa
spostare

mv nome_vecchio nome_nuovo Per rinominare un flea

ls
Stampa i fles e le cartelle presenti nella
/home/utente/cartella_da_esaminar
cartella indicataa
e

Stampa fles e cartelle , anche nascosti,


ls -A
presenti nella cartella indicataa

ls --help Per conoscere tutte le altr funzioni di lsa


Per creare una nuova cartella al percorso
mkdir /home/utente/nuova_cartella
specifcatoa

mkdir --help Per conoscere le altre funzioni di mkdira

rmdir
Per eliminare la cartella vuotaa
/home/utente/cartella_da_eliminare

rmdir --help Per conoscere le altre funzioni di rmdira

rm -rf Per eliminare la cartella e gli eventuali fles a


/home/utente/cartella_da_eliminare suo internoa

rm --help Per conoscere le altre funzione di rma

pwd Mostra directory di lavoro corrente a

Crea un collegamento simbolico “link” al fle


ln -s fle1 link
“fle1”a

touch fle 1 Crea o modifca il fle “fle1”a

cat > fle1 Redireziona lo standard input nel fle “fle1”a

more fle1 Mostra il contenuto del fle “fle1”a

head fle1 Mostra le prime 10 linee del fle “fle1”a

tail fle1 Mostra le ultime 10 linee del fle “fle1”a

Mostra il contenuto del fle “fle1” mentre


tail -f fle 1 viene aggiornato iniziando dalle ultime 10
linee a
93

Internet

w3m wwwaindirizzo_websiteait Browser testualea

Elenca le connessioni tcp/udp in ascolto o


netstat -tupan
stabilite nel sistema a

Apre in modalità grafca la pagina di cui si


links2 -g googleacom
fornisce il link a

host wwwaindirizzo_websiteait Mostra l'IP del sito in questionea

Scarica un sito internet con i suoi links


wget -r -l 2 Hwwwaindirizzo_websiteait
ricorsivamente fno al livello 2

sudo nast -i wlan0 -m Indica chi è connesso alla retea

Fornisce informazioni sul determinato IP


sudo nmap -A XXXaXXXaXXXaXXX
ricavato dal comando precedente a

nc -l -p 2342 | tar -C /target/dir -xzf – Dati nell'ordine, trasferiscono il contenuto di /


(nel server di destinazione) source/dir dalla partenza alla destinazione
attraverso la porta 2342a I fles vengono
tar -cz /source/dir | nc
automaticamente compattati all'invio e
ip_server_di_destinazione 2342 (nel
scompattati alla ricezione a
server di partenza)

ufw enable Attiva il frewall a

ufw disable Disattiva il frewall

Consenti tutte le connessioni per


ufw default allow
impostazione predefnita

Blocca tutte le connessioni per impostazione


ufw default deny
predefnita

ufw status Stato corrente e regole


ufw allow xx Consenti traffco sulla porta “xx”a

ufw deny xx Blocca traffco sulla porta “xx”a

ufw allow from xxxaxxxaxxxaxxx Consenti l'indirizzo ip “xxxaxxxaxxxaxxx”a

ufw deny from xxxaxxxaxxxaxxx Blocca l'indirizzo ip “xxxaxxxaxxxaxxx”

Archivi

cat fleazipapart1 fleazipapart2 Unisce gli i fles divisi in vari archivi che spesso
fleazipapart3 > fleazip si trovano nei siti di sharing a

lxsplit -s grossofleaestensione 15M Divide in archivi di 15Mb un fle molto grandea

ricompone un archivio partendo dal fle


lxsplit -j pezzettinoaestensionea001 pezzettinoaestensionea001 ed andando a
cercarsi 002 aaa 00n

Crea un archivio “archivioarar” che comprende


rar a archivioarar fleaxxx
“fleaxxx”a

rar a archivioarar fle1axxx fle2axxx Crea un archivio “archivioarar” che comprende


flenaxxx “fle1axxx,fle2axxx,flenaxxx”

rar x archivioarar Comprime l'archivio rar “archivioarar”a

Unrar x archivioarar Decomprime l'archivio rar “archivioarar”

Crea un archivio “archivioazip” che comprende


zip archivioazip fle1axxx
fle1azip

Crea un archivio “archivioazip” che comprende


zip -r archivioazip fle1 fle2 car1
i fle “fle1,fle2” e la cartella “car1”a

unzip archivioazip Decomprime l'archivio zip “archivioazip”


Uffcio

pdftk fle_unoapdf fle_dueapdf


Unisce più pdf in un unico flea
fle_treapdf cat output 123apdf

pdftk *apdf output unitoapdf Unisce tutti i pdf della cartella in questionea

cal Visualizza il calendario del mesea

Converte pdf in un'immagine apng o in altri


convert inputapdf outputapng
formatia

echo "testo della mail" | mutt -s Manda una mail da terminalea Il client e-mail
"oggetto"indirizzo@emailacom mutt deve essere confguratoa

echo "testo della mail" | mutt -s


Manda una mail con allegato da terminalea Il
"oggetto" -a /percorso/del/fle
client e-mail mutt deve essere confguratoa
-- indirizzo@emailacom

ps2pdf nomefle Converte il fle da Postscript a apdfa

Stampa in pdf più pagine in un unico foglio


pdfnup flenameapdf --nup mxn
disponendole in m righe ed n colonne
96

Multimedia

alsamixer Gestisce l'audio da terminalea

dd if=/dev/dvd of=imageaiso Crea un immagine ISO del DVD nel lettore a

dd if=/dev/cdrom of=imageaiso Crea un'immagine ISO del CD nel lettorea

growisofs -Z /dev/scd0 -R -J
Scrive i dati specifcati dal percorso su discoa
/percorso/dati_da/masterizzarea

dvd+rw-format -force[=full]
Formatta un DVD riscrivibile a
/dev/scd0

converte dei fle musicali awaw in afac


shnconv ` shnsplit -f CDImageacue -t (compressione lossyless) da un formato
%t CDImageaape ` -o fac *awav immagine aape (avendo a disposizione anche
il acue)

converte i Divx dichiarandone il formato come


mencoder nome_fle -ffourcc DX50 - MPEG4 ed aumentandone quindi le
ovc lavc -oac mp3lame -o nome_fle possibilità di riconoscimento da parte dei
lettori multimediali, sia del PC che da tavolo a

vlc -I ncurses Avvia vlc da terminalea

smv_encode -g 220x176 -f 24 -n 11 - Crea un'immagine asmv (unica letta dai lettori


r -1 -q 80 /percorso/del/fleaxxx multimediali Philips) di una video a

mencoder mf://*ajpg -mf


w=640:h=480:fps=25:type=jpg -ovc
lavc -lavcopts Crea un flmato di immaginia
vcodec=mpeg4:mbd=2:trell -oac
copy -o outputaavi

Aggiunge l'attributo “i” ad un fle, rendendolo


chattr +i nomefle
incancellabile anche da un amministratore a
bchunk fleabin fleacue fleaiso Trasforma un'immagine acue aisoa

ccd2iso fleaimg immagineaiso Trasforma un'immagine aimg in aisoa

poweriso convert immagineadaa -o


Trasforma un'immagine adaa in aisoa
immagineaiso

iat archivoaXXX immagineaiso Trasforma un'immagine mdf/mds, bin, mdf,


pdi, cdi, nrg, e b5I in aiso

growisofs -use-the-force-luke=dao -
use-the-force-luke=break:1913760 - Masterizza le immagini dei dischi
dvd-compat -speed=1 -Z dell'XBox360a
/dev/dvd=nomefleaiso

Molti di questi comandi sono di default, mentre per gli altri dovrai

scaricare i relativi pacchetti, argomento che ti spiegherò nel

ComandaMento 5a

Per vedere quali sono le opzioni di un comando puoi digitare:

nome_comando - - help

Ci sono molti altri comandi utili, io ho voluto raggrupparne alcunia

Presto sarai in grado di crearti dei comandi su misura per le tue

esigenze e perché no, potresti creare un comando che è utile non

solo a te, ma anche ad altria


98

Mentre sto scrivendo questo libro, ne sto leggendo uno che ha

scritto Bruno Editorea Voglio condividere con te un concetto

molto bello e particolare, preso dal suo libro:

“Mettere a disposizione le proprie conoscenze per aiutare gli altri

è la più grande ricchezza che tu possa averea”

Ti ho scritto questo perché io ho come obiettivo insegnarti a

programmare la shell e fart diventare un esperto del Terminalea

Non potrò dirti tutto, questo è un settore in continua evoluzione e

dovrai aggiornarti sempre, ma posso darti le basi per

comprendere questo mondo così affascinante…il Terminalea


99

Riepilogo

1a Ti ho insegnato i comandi per muoverti dentro il sistema

2a I comandi per creare, cancellare, copiare fle e directory

3a Ti ho spiegato la sintassi di un comando

4a Ho scritto una lista di comandi divisi per categoria per tea


100
101

Il 5 ComandaMento

Il Superutente o Amministratore

I comandi sudo e su

L’Amministratore del sistema ha il compito di mantenere la

sicurezzaa Quindi è importante proteggere il proprio server

attraverso semplici tecnichea

Per quanto riguarda Ubuntu, hanno deciso di disattivare per

default l’account amministratorea Quindi l’accesso come root non

è immediatamente possibilea

Gli utenti devono usare il comando sudo per eseguire comandi

da amministratore, per poter temporaneamente elevare i propri

privilegia In questo modo gli utenti non sono tenuti a sapere la

password di roota Questo metodo dà responsabilità agli utenti e

un maggior controllo per l’amministratorea

Per attivare l’account root è suffciente assegnargli una password:


102

sudo passwd + invio

Ti verrà chiesto di inserire la tua password utente e subito dopo,

di inserire la password per la roota

Alla fne comparirà il messaggio : password aggiornata

correttamente.

Per disabilitare l’account root digita:

sudo passwd -l root

Per avere maggiori informazioni sul comando sudo, puoi anche

consultare il manuale di Linux, digita:

man sudo

Per loggarti come root digita : su

Per impostazione predefnita, l’utente che hai creato in fase di

installazione di Ubuntu fa parte del gruppo “admin” e viene

aggiunto al fle /etc/sudoers come utente che può utilizzare sudoa

Per poter autorizzare altri utenti all’uso di sudo, devi aggiungerlo

al gruppo admina
103

Comandi base per l’Amministratore

Vediamo ora come aggiungere un nuovo utente:

sudo adduser NOME_UTENTE

Se vuoi aggiungere l’utente ad un gruppo specifco digita:

sudo adduser NOME_UTENTE NOME_GRUPPO

Di seguito i comandi per eliminare un utente e/o un gruppo:

sudo deluser NOME_UTENTE

sudo deluser NOME_GRUPPO

Quando elimini un account utente, la sua home non viene rimossa

perché questa è una decisione che spetta all’amministratorea

Prima di aggiungere nuovi gruppi e nuovi utenti, occorre

guardare i seguenti fle:


104

/etc/passwd

/etc/group

Il primo, contiene le informazioni dell’utente, compresa la

password, il nome reale, la shell e la directory homea

Il secondo, contieni tutti i nomi dei gruppi e i relativi parametria

Nel fle /etc/passwd c’è un numero assegnato da Linux che si

chiama UID = Identifcatore utente , serve per identifcare

l’utente nel sistema e determinare a quali risorse può accederea

Le informazioni nel fle /etc/passwd sono divise in campi, l’UID è il

terzo campoa L’utente root ha UID 0a Quasi tutte le distribuzioni

Linux riservano i primi 100 UID per il sistemaa Ai nuovi utenti,

vengono assegnati UID che partono da 500 o da 1000a Per

Ubuntu il primo utente che crei in fase di installazione, ha come

UID 1000a

Per verifcarlo digita:

cat /etc/passwd | grep Nome_Utente

Quindi, se dopo l’installazione creiamo nuovi utenti, questi,

avranno come UID 1001, 1002 ecca


105

I gruppi defniti nel fle /etc/group sono defniti da GID = id

gruppoa

I primi 100 GID sono riservati al sistema e il GID 0 corrisponde al

gruppo radicea Anche i GID si trovano nel terzo campo e partono

da l valore 1000a

Digita:

cat /etc/group | grep Nome_Utente

Per modifcare la confgurazione di sudo, è possibile digitare:

sudo visudo

Questo comando apre nell’editor nano il fle /etc/sudoersa

Questo fle ha 3 sezioni: alias, opzioni di default, autorizzazionia In

questo fle puoi defnire i seguenti alias:

1a User_Alias : defnisci l’alias per un elenco di utenti

2a Cmnd_Alias : defnisci l’alias per un elenco di comandi

3a Host_Alias : defnisci l’alias per un elenco di host


106

Puoi modifcare il comportamento di sudo attraverso la parola

chiave “Defaults” : ci sono molti parametri :

• rootpw : indica a sudo di richiedere la password di root invece

della password utente per l’autenticazionea

• passwd_timeout : imposta il tempo in minuti dopo il quale

sudo dimentica la password inserita dall’utentea

• timestamp_timeout : imposta il tempo in minuti dopo il quale

verrà nuovamente richiesta la passworda Se la imposti a 0 ad

ogni comando verrà richiesta la passworda

Per sapere se hai privilegi di amministratore, ti basta digitare da

terminale il comando groups. Se hai creato un utente per tua

moglie e uno per tuo fglio, potresti fare in modo che loro non

abbiano questi privilegi digitando:

deluser nome_utente sudo

Con questo comando hai appena dichiarato che l’utente X non

potrà usare il comando sudoa Tutto questo devi farlo come utente

roota
107

Loggandoti come root, puoi utilizzare il comando chage per

controllare gli altri utentia Questo comando funziona solo come

utente root, tranne per la sua opzione -l, che può essere usata

anche da un utente senza privilegi per controllare quando deve

sostituire la passworda Infatti, con questo comando, puoi

impostare la durata della password di login per i tuoi utentia In

questo modo gli utenti, per ragioni di sicurezza, sono avvisati che

la password sta per scadere e che devono sostituirla con una

nuovaa Per vedere le impostazioni di un utente digita:

chage -l nome_utente

Per modifcare i valori dell’utente digita:

chage nome_utente

Nel corso del librio, ti ho sempre parlato del comando alias e di

come questo sia utilea Ora che, abbiamo attivato l’utente root e

abbiamo tolto agli utenti “normali” la possibilità di usare il

comando sudo, possiamo iniziare a parlare di alias globali e alias

privatea
108

Se digiti a terminale: alias c=“clear”, potrai per la durata della

sessione, digitare c al posto di clear per pulire lo schermo del

terminalea Quando però spegni il computer, la volta dopo, questo

alias non sarà più presente, dovrai ricrearloa Per rendere i tuoi

alias permanenti puoi fare in 2 modi, usando criteri diversia

Puoi creare alias globali, cioè in modo tale che ogni utente possa

utilizzarlia Per fare questo devi agire come root e aggiungere i tuoi

alias nel seguente fle:

/etc/bash.bashrc

Alla fne di questo fle, aggiungi i tuoi alias in questo modo:

#Alias Globali

alias c =“clear”

alias cancella=“rm -i”

alias spegni=“shutdown -h now”

alias riavvia=“shutdown -r now”

La prima riga è un semplice commento, inseriti i tuoi alias, salvi e

per rendere effettive le modifche, riavvia la sessionea

Questi comandi che hai aggiunto, poiché sono globali, potranno

essere utilizzati da qualsiasi utentea


109

Se invece, vuoi crearti degli alias solo per il tuo utente, quindi

disponibili solo dentro la tua home, devi modifcare il fle bashrc.

Per vedere questo fle nella tua home, devi procedere come

segue:

ls -a

Poi lo apri con l’editor nano:

nano bashrc

e modifchi il fle come spiegato precedentementea In questo caso

però, gli alias sono privati, disponibili solo per il singolo utente e

non per tuttia

Ci sono molti altri comandi utili per l’amministratore di sistemaa

Voglio spiegarne alcuni:

wall

E’ un comando molto utile per l’amministratore di rete, perché

permette di inviare un messaggio ad ogni terminale di ciascun

utente collegato alla retea Quando occorre avvertire gli utenti che
110

a causa di un problema bisogna arrestare la sessione, questo

comando si usa così:

wall Tra 10 minuti il sistema verrà sospeso per manutenzione!

In questo modo ogni utente collegato alla rete sarà avvisato e

avrà il tempo di chiudere la propria sessionea

dmesg

Elenca tutti i messaggi generati durante la fase di boot del

sistemaa Questo comando è molto utile per fare “debugging” e

può essere utilizzato all’interno di script con i comandi grep, sed

o awka

stat

Fornisce dettagli su un dato fle o directory o dispositivoa Se il fle

non esiste, da un errorea Puoi utilizzare questo comando anche

dentro a script, per ricavare informazioni anche su fle-system e

impostare variabilia

dump e restore
111

Dump serve per il backup del fle-system e in genere viene

utilizzato su reti di grandi dimensionia Legge le partizioni del disco

e scrive un fle di backup in formato binarioa Il comando Restore

ripristina i backup effettuatia

Env

Se non specifchi nessuna opzione, questo comando elenca le

impostazioni di tutte le variabili d’ambientea Questo comando

può essere usato per modifcare o impostare variabili d’ambiente

soltanto per la durata di uno script, evitando così di modifcare

l’intero ambiente di sistemaa

Watch

Esegue un comando ripetutamente, ad intervallo di tempo

specifcati per esempio: watch -n 5 /var/log/messagesa Visualizza

la parte fnale del fle di log di sistema ogni 5 secondia

Who

Visualizza gli utenti connessi al sistemaa

Sia che tu abbia attivato l’account root, sia che per flosofa, tu

decida di usare semplicemente sudo, occorre cghe tu abbia le


112

idee chiare su come installare nuovi programmi, rimuoverli, che

cosa sono i fle adeb e i fle arpm , repository ecca

Ubuntu ha molti pacchetti software aggiuntivi oltre quelli presenti

dopo l’installazionea Questi software sono contenuti in archivi,

chiamati repositorya Questi, possono essere consultati con

applicazioni di sistema che funzionano come un catalogo

softwarea

Questo sistema permette di evitare all’utente ricerche su internet,

almeno il più delle voltea

Quando si installa un software, ci sono molti fle richiesti per

avviare il programma, quindi è necessario che i fle siano

posizionati nei giusti percorsia Alcuni di questi fle, devono essere

modifcati in base al tipo di computer in usoa

Tutti questi processi, sono gestiti da Ubuntu in modo automaticoa

Nei pacchetti, oltre ai fle necessari per avviare un programma,

sono presenti fle detti “script di installazione” che copiano i fle

nelle posizioni richiestea

Quando viene creato il pacchetto per un programma, di solito,

viene inserito anche il codice sorgente del programma dentro il

pacchettoa Il codice sorgente è quello scritto dai programmatoria

Per poter interpretare questo codice, occorre compilarlo in un

formato binario in modo tale che il computer possa


113

comprenderloa Un formato binario, non è uguale per tutti i

computera Se si compila un pacchetto per una certa architettura,

non funzionerà su un’altraa

Per conoscere il tipo di architettura del tuo computer digita:

uname -m

Molti programmi fanno uso degli stessi fle per funzionare e per

questo motivo vengono chiamati “dipendenze”a Usando le

dipendenze, molti pacchetti possono essere ridotti e semplifcati,

impedendo di trovare nel sistema fle duplicatia Ubuntu gestisce

tutto questo in modo automatico, se mancano delle dipendenze

le scarica e le installaa Se invece di usare i repository uffciali,

scarichi software di terze parti, allora è necessario controllare le

dipendenze mancanti e scaricarlea

Oltre ai pacchetti normali, esistono i meta-pacchetti: essi sono

utili per installare un intero “set” di programmia

Un esempio di meta-pacchetto è un ambiente desktop completo

dei suoi plugina Il meta-pacchetto kubuntu-desktop installa in

Ubuntu l’intero ambiente desktop di Kubuntua


114

I repository sono archivi web e sono organizzati in 4 componentia I

repository sono annotati nel fle /etc/apt/sources.list a

Di seguito i 4 componenti dei repository di Ubuntu :

• main: software supportato uffcialmente

• restricted: software supportato ma non disponibile nei termini

del software liberoa

• universe: mantenuto dalla comunità, non uffcialmente

supportato

• multiverse: software non libero

Il sistema di gestione dei pacchetti predefnito di Ubuntu, si

chiama APT = Advanced Package Tool a

Il programma più utilizzato da terminale di questo pacchetto è

apt-get , ma ce ne sono molti altri utili che ti farò vedere a brevea

In Ubuntu 16a04 LTS il gestore di pacchetti è apt e si consiglia di

utilizzare tale comando in alternativa a apt-get, che comunque

resta disponibilea

Di seguito i comandi per aggiornare il sistema:


115

apt-get update Aggiorna la lista dei pacchetti


disponibili dal repositorya Va lanciato
dopo aver apportato delle modifche a /
etc/apt/sourcesalist, /etc/sourcesalist o
apt update /etc/apt/preferencesa Può essere
eseguito periodicamente per verifcare
che la propria lista di pacchetti sia
aggiornataa

apt-get upgrade Scarica e installa gli aggiornamenti per


tutti i pacchetti installatia Non sarà
rimosso alcun pacchetto installato: se
un aggiornamento di un pacchetto
apt upgrade richiede la rimozione di un altro
pacchetto, l'aggiornamento non sarà
effettuatoa

Aggiorna l'intero sistema ad una nuova


versionea Delega APT a svolgere tutti i
compiti necessari all'aggiornamento
apt-get dist-upgrade
dell'intera distribuzione, se necessario,
anche l'eventuale rimozione di
pacchetti installatia
Esegue le stesse funzioni di apt
upgrade, ma rimuove i pacchetti
apt full-upgrade
attualmente installati se richiesto per
aggiornare il sistemaa

Di seguito i comandi per installare e rimuovere pacchetti:

apt-get install packagename


Installa un nuovo pacchettoa
apt install packagename
apt-get remove packagename Rimuove un pacchetto, senza rimuovere
apt remove packagename i fle di confgurazionea

apt-get purge packagename Rimuove un pacchetto, compresi tutti i


apt purge packagename fle di confgurazionea

apt-get autoremove Rimuove tutti i pacchetti che sono stati


automaticamente installati per
soddisfare le dipendenze di altri
pacchetti, ma che ora non sono più
richiestia Questo può essere dovuto ad
un cambio di dipendenze, oppure
apt autoremove perché i pacchetti che li richiedevano
sono stati rimossia Prima di procedere
con le modifche, controllare che la lista
di pacchetti indicata per la rimozione
non contenga applicazioni importantia

apt-get autoremove Rimuove un pacchetto e tutte le


packagename dipendenze inutilizzatea
Tenta di riparare i pacchetti con delle
apt-get -f install
dipendenze non soddisfattea
apt-get --reinstall install Reinstalla pacchetti che sono già
packagename installati e all'ultima versionea

Di seguito i comandi per la pulizia della cache:

Eseguito periodicamente, cancella tutti


gli archivi adeb dei pacchetti che non
apt-get autoclean
sono più installati nel sistemaa È utile
per liberare spazio su discoa
È molto più radicale, poiché rimuove
dalla cache di APT ogni fle adeb, anche
quelli relativi ai pacchetti
correntemente installatia Generalmente,
apt-get clean
una volta installato un pacchetto, non si
necessiterà più dei fle adeb, quindi
potrebbe essere una buona soluzione
per risolvere problemi di spazioa

Altri comandi utili:

apt-cache search string Cerca una stringa nella lista dei


apt search string pacchetti conosciutia

apt-cache show pkgs Visualizza tutte le informazioni


riguardanti un pacchetto, similmente a
apt show pkgs dpkg --print-avail

Mostra alcune informazioni riguardo ai


apt-cache showpkg pkgs
pacchettia
Stampa una lista di tutti i pacchetti
apt-cache dumpavail
disponibilia
Visualizza le dipendenze e i confitti dei
apt-cache depends pkgs
pacchetti selezionatia
Nel caso siano disponibili numerose
versioni dei pacchetti selezionati,
apt-cache policy pkgs
visualizza la versione attualmente
installata e il repository di originea
Lista veloce di ogni pacchetto del
apt-cache pkgnames
sistemaa
apt-fle search flename Cerca un pacchetto (anche non
installato) che contenga i fle individuati
dalla stringaa Apt-fle è un pacchetto
indipendente, e deve essere installato
tramite il comando sopra citatoa Una
volta installato, è utile aggiornare il
database dei pacchetti con il comando
apt-fle updatea Se apt-fle search
flename mostra troppe informazioni, si
può provare con il comando apt-fle
search flename | grep -w flename
(che mostra solo i fle che contengono
suddetta parola) o una variante come
apt-fle search flename | grep /bin/
che mostra solo i fle localizzati nelle
directory come /bin o /usr/bin, utile nel
caso che l'obiettivo della ricerca sia un
particolare eseguibilea

I comandi di seguito sono diversi da apt, ma comunque utili:

Visualizzatore di tutti i pacchetti installati


o disponibilia Aptitude può essere
usato da linea di comando nello stesso
Aptitude {update | upgrade} modo di apt-get, ma solo per alcuni
aptitude {install | remove} comandi, i più usati sono install e
<pacchetto> removea Poichè tiene traccia di molte
più informazioni di apt-get, aptitude ha,
in certe situazioni, un maggiore grado
di affdabilitàa
Lista dei pacchetti individuati dalla
dpkg -l package-name-pattern
stringa di ricercaa
Dato un fle, mostra il pacchetto che ha
dpkg -S fle provveduto alla sua installazione nel
sistemaa
dpkg -L package Lista dei fle presenti nel pacchettoa
119

Il sistema di gestione di pacchetti, usa un database per tenere

traccia dei pacchetti installati: quali sono e quali non sono

disponibilia Apt-get usa questo database per capire come

installare i pacchetti richiestia

Per aggiornare questo elenco, si usa il comando apt-get update.

Questo comando, l’elenco in /etc/apt/sources.list a

Usa questo comando regolarmente, in modo tale che il tuo

sistema sia sempre informato su possibili aggiornamenti, in

particolare quelli di sicurezzaa

Il comando che aggiorna i pacchetti è apt-get upgradea Io ti

consiglio ti utilizzare apt-get -u upgrade, questa opzione -u ,

forza apt a mostrare la lista completa dei pacchetti che saranno

aggiornatia

Ti lascio un link molto utile per approfondire questo argomento:

https://www.debian.org/doc/manuals/apt-howto/index.it.ht

ml

Questa guida si chiama Howto, ed è molto utile per comprendere

tutto quello che riguarda apta

In alternativa ad apt, si può usare aptitude per la gestione dei

pacchettia In alcuni casi, questo programma è preferibile ad ape

perchè ha molte funzionalità avanzate e il suo uso è molto simile

ad apta
120

Per installare aptitude digita : apt install aptitude a

Se ora digiti : aptitude e premi invio verrà aperto il programma

dove potrai vedere l’elenco dei pacchetti installati, pacchetti non

installati, pacchetti virtualia

Di seguito, ti metto i comandi utili per usare aptitude:

u Aggiorna la lista dei pacchettia


Scorre l'elenco di una riga verso il
j
bassoa
k Scorre l'elenco di una riga verso l'altoa
Torna alla schermata precedentea Esce
q da aptitude se nella schermata
principalea

Espande il gruppo selezionato e tutti i


[
sotto gruppia
Chiude il gruppo selezionato e tutti i
]
sottogruppia
Espande o chiude il gruppo
Invio
selezionatoa
d Mostra le dipendenze del pacchettoa
Mostra i pacchetti che dipendono dal
r
pacchetto selezionatoa
Maiusc+c Scarica e visualizza il changeloga
Mostra informazioni relative al
Invio
pacchetto selezionatoa

/ Cerca un termine o un nome di


pacchettoa
\ Ripete l'ultima ricercaa
~b Ricerca pacchetti difettosia
Ricerca pacchetti parzialmente
~c
disinstallatia
~ahold Ricerca pacchetti bloccatia
Limita la vista dei pacchetti a quelli
l
cercatia
+ Marca il pacchetto per l'installazionea
- Marca il pacchetto per la rimozionea
Marca il pacchetto per la rimozione
_
completaa
= Marca il pacchetto come bloccatoa
Visualizza le modifche apportatea
g Premuto una seconda volta applica le
modifche
122

Riepilogo

1a Ti ho spiegato come attivare l’account di root

2a Ti ho spiegato come aggiungere nuovi utenti e gruppi e ho


analizzato con te i fle /etc/passwd e /etc/group a

3a Ti ho spiegato come rendere permanenti i tuoi alias


spiegando la differenza tra alias globali e alias privati

4a Ti ho parlato dei pacchetti e dei programmi che ti permettono


di tenere aggiornato il tuo sistemaa Ho voluto spiegarti meglio
apt e aptitudea
123
124
125

Il 6° ComandaMento

Creare un comando shell con C

Fino a questo momento, ti ho spiegato come è composto Linux,

quali sono i suoi comandi più utili, i comandi per l’amministratore,

come puoi sfruttare questo ambiente per lavorare al meglioa

Ovviamente, tutti i comandi che hai visto, sono i più comuni,

quelli con cui avrai spesso a che fare per muoverti all’interno del

sistema e svolgere operazioni di basea Sebbene ci siano molti

software di terze parti per Linux, in questo ComandaMento,

voglio spiegarti come tu possa plasmare il sistema per le tue

necessitàa

In genere, dentro ogni distribuzione Linux, vengono anche

installati per default alcuni linguaggi di programmazione, tra

questi il C e Python a

Io prenderò in esame il C, per farti capire come sia possibile

creare nuovi comandi utili per le tue necessitàa

Se non conosci il linguaggio C, questo argomento sarà

sicuramente complicatoa Cercherò comunque, di farti degli


126

esempi per capire quanto l’ambiente Linux sia estremamente

plasmabile e potentea

Molte parti di linux, sono state scritte in linguaggio C, altre in

linguaggi come assembly a Un argomento sicuramente

interessante se sei un neofta, è quello di approfondire quali sono

i linguaggi di programmazione defniti di “alto livello” e quelli di

“basso livello”a Per fare un minimo di chiarezza, ti dico questo: Si

può dire che i linguaggi di programmazione di basso livello, sono

orientati alla macchinaa Il loro scopo è di poter essere eseguiti

direttamente dal processore o di essere tradotti facilmente in

programmi eseguibili dal processorea

I linguaggi ad alto livello, sono orientati al programmatore, il loro

scopo è quello di essere facilmente usati da programmatori

umania

Il linguaggio C, è un giusto compromessoa Posso dirti che in

forma relativa è da considerarsi una via di mezzo, un linguaggio

vicino alla macchina ma anche vicino all’uomoa

Se desideri installare il pacchetto necessario per programmare in

C, digita da terminale:

sudo apt install built-essential


127

Con questo comando, scarichi il compilatore C e C++ con tutte le

librerie necessarie per programmare in questo fantastico

linguaggioa

Come ho anticipato, nel sistema operativo Linux, sono presenti

diversi linguaggi di programmazionea La differenza che c’è tra un

sistema Linux e Windows, è la disponibilità dei sorgenti dei vari

programmi, anche del sistema operativo stessoa

Un sorgente è semplicemente la traduzione del linguaggio

comprensibile dalla macchina, in linguaggio comprensibile

all’essere umanoa

Per capire bene cos’è un sorgente, occorre fare chiarezzaa

Partiamo dunque dal microprocessorea

Ogni computer contiene la CPU = Central Processing Unit , detto

anche microprocessorea Le istruzioni che può compiere la CPU

sono prestabilitea In gergo si dice che il microprocessore ha un

“set di istruzioni”a Il microprocessore Intel riconosce istruzioni che

sono diverse da un AMDa Queste istruzioni sono codifcate in

numeri binaria Che cos’è dunque un programma? Un programma

è un insieme di istruzioni che “diamo in pasto” al microprocessore

e può essere considerato un fle che contiene una sequenza di 0 e

1a
128

In origine, poiché i programmi erano semplici, i programmatori

scrivevano i sorgenti direttamente in codice binario, una

sequenza di istruzioni così: 0100001000011100 a Quando i

programmi scritti in seguito sono diventati più corposi, era

diffcile scriverli con il codice binario, così si è passato inizialmente

al sistema esadecimalea Un sorgente veniva scritto con una serie

di numeri e lettere così: AF10GH36C012 a Chiaramente, anche in

questo modo, era tutt’altro che facile scrivere i programmi,

perché sia il sistema binario sia quello esadecimale, erano diffcili

da comprendere per l’essere umanoa

Così, è stato creato un linguaggio più vicino al nostro, un

linguaggio mnemonicoa Il rapporto era 1 a 1, cioè ogni riga scritta

in binario, corrispondeva ad una istruzione più leggibile e

comprensibile per l’uomoa Questo primo linguaggio si chiama

Assemblera Pur rimanendo complesso, le cose vanno avanti così

fnché, non si comprende che si possono creare micro-istruzioni,

ovvero, insiemi di istruzioni elementari Assemblera

Compreso questo, nascono i linguaggi di programmazione di

seconda generazione, in grado di essere più lontani dal

linguaggio macchina e più comprensibili all’uomoa Il rapporto

non era più 1 a 1 ma 1 a N, cioè ad ogni micro-istruzione

corrispondono diverse istruzioni elementari Assemblera


129

Successivamente, vengono creati linguaggi di programmazione

di terza generazione tra i quali il Ca Le istruzioni scritte in C,

corrispondono a N istruzioni elementaria Un programma scritto in

C, impartisce al microprocessore istruzioni scritte in un fle di

testoa Questo fle si chiama sorgentea Il fle che contiene istruzioni

eseguibili dalla macchina, si chiama eseguibile o binarioa Quindi

la domanda è: come tradurre questo fle C in linguaggio

comprensibile alla macchina? E’ per questo che viene creato il

compilatore che volendo semplifcare, altro non è che un

programma che legge un sorgente e lo traduce in cifre binarie

leggibili dalla macchina ed eseguibilia

I programmatori, si resero conto che all’interno dei loro sorgenti,

alcune funzioni generali venivano ripetute spessoa Programmi che

fanno cose diverse in realtà hanno istruzioni ugualia

Ti voglio fare questo esempio: se creo un programma che somma

2 numeri e li stampa a video, e successivamente creo un

programma che mi calcola la radice quadrata di un numero e lo

stampa a video, otterrò sicuramente risultati diversi ma di fatto c’è

un punto in comune: visualizzo a video un risultatoa

Accade quindi che i programmatori decidono di creare piccoli

programmi generici capaci di svolgere l’azione di visualizzare a

video un risultato, qualunque esso siaa Sono stati creati molti


130

programmi generici da poter essere riutilizzati in programmi più

complessia Questi piccoli programmi sono chiamati Moduli e

sono stati inseriti dentro a contenitori chiamati Libreriea Questi

programmini sono parzialmente eseguibili perché sono dei fle

oggettoa Quindi come si possono collegare i programmi che

scrivo alle librerie? Lo puoi fare utilizzando uno strumento che si

chiama linker, che non fa altro che cucire dei moduli oggetto tra

loroa Unendo il tuo programma scritto in C ai fle oggetto

contenuti nella libreria, il linker crea il fle eseguibilea Quando

usiamo questi programmi ( fle oggetto), si dice che stiamo

usando una funzione di libreriaa

Ti faccio un esempio: la funzione di C “printf” è un programmino

che stampa a video dei dati forniti in inputa Si usa spesso in tutti i

programmi ed è una funzione di libreriaa Ora dovrebbe esserti

chiaro che per ogni fle eseguibile deve esistere un fle sorgentea

Qui entra in gioco Linuxa Infatti, Linux oltre ai programmi

eseguibili, offre gratuitamente i fle sorgentia

Tu che stai per imparare a creare programmi in C, puoi anche

guardare i programmi che compongono Linux ed esaminarli,

migliorarli, modifcarli, addirittura riscriverlia

Cosa ti serve dunque per scrivere un programma in C?


131

Ti serve un editor di testi e il compilatorea Il compilatore che viene

installato su Linux per default si chiama GCC = GNU Compiler

Collectiona Naturalmente il compilatore comprende già il linkera

Ora che ti ho fatto un po’ di storia e un po’ di teoria, devi passare

all’azionea Voglio creare con te un programma in C e fare in modo

che questo programma, possa essere eseguito come comando in

tutto il sistema, naturalmente da terminalea

Come ogni comando, anche il tuo, avrà dei parametri che nel tuo

caso specifco, sono obbligatoria

Come ti ho sempre detto in questo libro, voglio darti esempi utili

e quello che ti faccio oggi, non è un semplice esempio, ma ho

dovuto crearlo per risolvere un problema realea

Il programma deve essere capace di leggere un fle di testo, i

famosi nomefleatxt, dopo di che leggendo una riga alla volta,

deve stampare a video tutte le righea Inoltre, deve dividere ogni

riga in stringhe (campi) per poter successivamente prelevare

soltanto le stringhe/campi che mi interessano e copiarle in un

nuovo fleatxt a In pratica faccio una migrazione dei dati di mio

interesse da un fle_origine ad un nuovo fle_destinazionea

Il fle che mi è stato dato era fatto in questo modo:

Nome Cognome Codice Fiscale Partita iva


132

Qui sotto trovi tutto l’elencoa

Lo scopo del programma è quello di creare un nuovo fle con i

seguenti valori:

Nome Cognome Partita iva

Tutto questo deve avvenire dando un comando da terminale

come questo:

sudo migrare fle_origine fle_destinazione

Ho deciso di iniziare creando una cartella di lavoro :

makdir nome_cartella

Qui dentro ho copiato il fle_origineatxt carico di dati e ho creato

un fle_destinazione vuoto con il comando:

touch fle_destinazione.txt
133

Fin qui nulla di nuovo! Come ho detto, per scrivere un

programma in C, ci serve un editor e Linux ha per default nanoa Io

ho usato questo, ma ti consiglio di usare editor più specifci se

devi creare programmi complessia

nano migrare.c

Dentro questo fle con estensione “.c”, ti metto di seguito il

codice che ho scritto a

Ecco il codice:

#include <stdioah>

#include <stdlibah>

#defne dim 100

int main(int argc, const char * argv[]) {

FILE* fle_inpute

FILE* fle_outpute

char riga[dim]e

char nome[25]e

char cognome[25]e

char cf[17]e

char iva[12]e
134

if(argc !=3){

printf("Attenzione!!! Devi dare 2 parametri al programma: fle input e fle outputa\n\

n")e

exit(0)e

fle_input=fopen(argv[1], "r")e

fle_output=fopen(argv[2], "w")e

if (fle_input==NULL || fle_output == NULL) {

printf("Impossibile aprire il fle!!!")e

exit(0)e

printf("\nELENCO DI TUTTE LE RIGHE LETTE NEL FILE %s\n\n", argv[1])e

printf("NOME\tCOGNOME\tCODICE FISCALE\tPaIVA\n\n")e

while(fgets(riga,dim,fle_input)!=NULL){

printf("%s\t\n",riga)e

sscanf(riga,"%s %s %s %s",nome,cognome,cf,iva)e

fprintf(fle_output,"%s %s %s\n\n",nome,cognome,iva)e

printf("\nHO COPIATO NEL FILE %s LE COLONNE: NOME, COGNOME, PaIVA\n\n",

argv[2])e

printf("IL PROGRAMMA HA ESEGUITO LA MIGRAZIONE CON SUCCESSO!!!\n")e


135

printf("GRAZIE PER AVER USATO IL COMANDO %s SCRITTO DA TUO NOMEa\n\n",

argv[0])e

fclose(fle_input)e

fclose(fle_output)e

return 0e

Una volta scritto il tuo programma, dovrai eseguire alcuni

comandi per far in modo che il programma possa essere eseguito

ovunque tu ti trovi nel sistemaa

Per prima cosa dovrai compilare il tuo sorgente per ottenere il fle

eseguibilea Ecco come:

gcc -o migrare migrare.c

gcc è il compilatore, con l’opzione -o puoi assegnare un nome al

tuo eseguibile, che non necessariamente deve essere uguale al

fle sorgentea

Ora che hai creato il fle eseguibile, devi assegnargli i permessi di

esecuzione, in modo tale da poter eseguire il comando da

qualsiasi punto del tuo flesystem ti trovia


136

Il comando che fa tutto questo è il seguente:

chmod 777 nome_eseguibile

Ora non ti resta che copiare il tuo comando dentro la cartella

/bin :

sudo cp migrare /bin/migrare

Perfetto, ora da terminale puoi eseguire il tuo comando:

migrare fle_origine.txt fle_destinazione.txt

Ecco, hai creato il tuo primo comando! Nel mondo Linux, ci sono

molti programmi creati da programmatori e resi disponibili nei

repositorya Non di rado, facendo una ricerca su internet, puoi

trovarne già di prontia Ma non è sempre così! Inoltre, se come me

ti piace programmare, puoi crearti comandi di ogni tipo e credimi

anche se non sono perfetti, l’importante è che siano funzionali-

funzionantia
137
138
139

Il 7° ComandaMento

Come creare una Man Page

Dopo aver creato il tuo programmino, voglio parlarti di un

comando utilissimo, il comando “man”a Man sta per “manual” e

ogni programma presente in Linux ha la sua Man Page associata,

grazie ad essa puoi sapere ogni dettaglio su ogni eseguibile

presente sulla tua macchinaa Man racchiude anche la sintassi

completa di tutte le funzioni e le system call unixa Queste sono

fondamentali per chi programma in C/C++a

Quindi visto che hai scritto il tuo primo programma, il tuo primo

comando, perché non dovresti creare la man page? Se dovessi

dare il tuo programma a qualcuno, sono sicuro che ti

ringrazierebbe se oltre al programma, tu gli dessi la man pagea Se

fai un programma complesso e articolato, nella man page puoi


140

scrivere tutto quello che può fare il tuo programma e come farloa

Oltre tutto, è molto professionale non credi?

Creare una Man Page è molto semplicea Di seguito ti scrivo le

istruzioni di markup di base che ti servonoa

• .TH - Indica il titolo della man pagea

• .SH - Indica il titolo della sezione

• .SS - Indica il titolo della sotto-sezione

• .pp - Indica l’inizio di un nuovo paragrafo

• .B - Metto il testo in grassetto

• .I - Mette il testo in corsivo

• .” - Indica che la riga è un commento( non viene visualizzata nel

manuale)a

Ora sei pronto per scriverea Apri un editor di testo, io uso nanoa

aTH Mio Programma

aSH Migrare

aSH Descrizione di cosa fa il programma

aI Migrare è un programma semplice da usare e molto utile

aSH Visita il mio sito : wwwanome_sitoait


141

Ora salva il fle come migrareatxt a Adesso per renderlo

disponibile al comando man nel sistema, devi copiarlo nella

cartella di sistemaa

In genere la cartella è /usr/share/man a

In questa cartella sono presenti diverse sotto-cartelle, per indicare

le categorie di manualia Queste cartelle sono segnate da man1,

man2, man3, ecca

Le categorie associate ad ogni numero variano da sistema a

sistema ma di solito son queste:

• 0 - File Header

• 1 - Comandi Standard

• 2 - Kernel system call

• 3 - Funzioni standard della libreria C

• 4 - Device speciali

• 5 - Formati di fle e convenzioni

• 6 - Giochi

• 7 - Varie, standard(ISO)

• 8 - Comandi root

• 9 - Dettagli del kernel


142

Quindi seguendo la tabella per completare il tutto non ti resta che

copiare il fle di manuale nella cartella di riferimento:

sudo cp migrare.txt /usr/share/man/man1/migrare.1

Hai fnito! Ora per vedere il risultato fnale digita:

man migrare

Adesso puoi goderti la tua pagina professionalea

Se vuoi aprire la man page del comando man, scrivi a terminale:

man man

In questo modo puoi approfondire questo argomento e allo

stesso tempo, migliorare la tua man pagea

Alcuni programmatori trovano strano scrivere le man page con un

editor di testoa Preferiscono generarlea Tra i vari linguaggi

presenti nel sistema Linux c’è anche perla Il formato di

documentazione Perl POD è una buona sceltaa


143

Puoi scrivere la tua man page in formato POD e lanciare il

comando:

pod2man la_tua_manpage.pod > la_tua_manpage.1

Per poter approfondire questo modo di creare le man page

usando il linguaggio perl, digita da terminale:

man perlpod

Adesso hai tutto quello che ti serve per lavorare in modo

professionalea Crea i tuoi comandi e crea le man page di

riferimentoa Ogni persona che userà i tuoi comandi, potrà contare

anche sulla documentazione e sopratutto su una man page in

lingua italianaa
144
145

8° ComandaMento

Come iniziare a programmare la Shell

Scrivere scripting di shell è fondamentale se anche tu sei tra

coloro che vogliono diventare esperti amministratori di sistemaa

Quando accendi una macchina Linux, questa esegue degli script

contenuti in questa cartella: /etc/rcad a

Scrivere degli script di per se non è diffcile, la sintassi è molto

semplice, molto simile ai comandi che già usi dal prompta

Uno script è un modo grezzo di testare prototipi di applicazioni,

un metodo facile per testare piccole funzionalità che in seguito

possono diventare utili per sviluppare un vero programma,

magari scritto in C/C++ , Perl o Javaa

Prima di spiegarti i fondamenti, voglio spiegarti quando secondo

me, non devi usare gli script di shella

Ti faccio un piccolo elenco:

• Quando la velocità è importante


146

• Quando usi operazioni matematiche complesse, virgola mobile,

numeri complessi ecca ( meglio usare C++)

• Se è necessaria la programmazione strutturata ad esempio

prototipi di funzionea

• Quando necessiti della portabilitàa

• Se il tuo progetto è fatto da diversi componenti e dipendenzea

• Quando devi eseguire operazioni su fle di grandi dimensionia

• Se ti occorre il supporto agli array multi dimensionalia

• Se devi usare grafci o GUIa

• Se è necessario un socket a

Se ti trovi di fronte a queste situazioni che ti ho descritto, usa un

linguaggio di programmazione più effciente come C, Perl, Ruby,

Pythona

Come prima cosa, devi creare un “fleash” , e dargli i permessi di

esecuzione con il comando “chmod +x fleash”a L’estensione “ash”,

non è obbligatoria, ma è una buona abitudine usarlaa

La prima istruzione che devi mettere dentro il tuo fle, è quella che

stabilisce che tipo di shell si prende in considerazionea In pratica

con la prima istruzione, indichi quale programma interpreterà il

tuo scripta Nel corso del libro ho sempre considerato la shell

Bash, quindi :
146

#!/bin/bash

Questa sarà la prima istruzionea Con questa istruzione stai

dicendo di voler usare la shell Bash come interprete dei tuoi

scripta

Per semplifcare, uno script è una sequenza di comandi,

programmi o altri script, organizzati in una strutturaa Quindi una

conoscenza di base dei comandi Linux è fondamentalea

Uno degli scopi principali di uno script, è quello di velocizzare e

automatizzare operazioni quotidianea

Come piace a me, ti invito ad usare le conoscenze acquisite nel

corso di questo libroa Se ci pensi puoi già scrivere script molto

particolari! Il primo esempio consiste nello sfruttare le variabili

d’ambiente di cui ho fatto cenno spiegando i comandi del

terminalea

Apri il terminale e digita questo comando:

set | more
147

Con questo comando, visualizzi una pagina alla volta tutte le

variabili d’ambientea Molte di queste già le conosci, ti faccio una

piccola lista di cosa dovresti vedere:

BASH=/bin/bash

HOME= /home/Rossi

HOSTNAME=“nome del tuo computer”

HOSTTYPE= “architettura del tuo computer” tipo x86_64

L’elenco è molto lungo in genere e ti suggerisco di dargli uno

sguardoa

Ogni processo in esecuzione ha un proprio ambiente in base alle

variabili d’ambientea

Per vedere il valore della variabile HOME scrivi a terminale:

echo $HOME

Con il comando “echo” possiamo visualizzare singolarmente le

variabili di nostro interessea

Con queste poche conoscenze ti scrivo di seguito un esempio di

script:
148

#! /bin/bash

# Questo script stampa a video l’output di alcuni comandi

echo “Data corrente”e datee

echo “Utenti collegati”e whoe

echo “Lista dei fle”e ls -l | moree

echo “Directory corrente”e pwde

echo “Numero di Utenti collegati:”e who | wc -le

La prima riga dice che voglio usare l’interprete della shell basha

La seconda riga inizia con “#” , che indica un commentoa

Dalla 4 alla 8 riga ci sono in sequenza i comandia

Se esegui questo script, esso stamperà a video la data, il nome

dell’utente collegato in quel momento, la lista delle directory e in

quale directory di lavoro ti trovia Per ultimo, il numero

complessivo degli utenti collegatia

Tutto questo in modo rapido e automaticoa

Questo è un esempio banale, ma tra poco sarai in grado di

trasformarlo in un esempio molto utilea


149

Le variabili sono contenitori attraverso i quali il linguaggio di

scripting identifca i datia La variabile altro non è che una

locazione di memoria del computer che contiene un datoa

Hai visto che per leggere il valore di una variabile si digita:

echo $NOME_VARIABILE

Adesso supponi di dover creare una variabile che deve contenere

come valore il nome di una persona:

Persona = “Rossi”

Se ora digiti a terminale:

echo persona

Il risultato sarà:

persona

Questo per ricordarti che per visualizzare il valore di una variabile,

devi sempre mettere davanti il “$” a


150

echo $persona —> risultato —> Rossi

Le variabili possono essere “locali” se sono visibili all’interno di un

blocco di codice, mentre sono “variabili d’ambiente” quelle

relative al comportamento della shell o dell’interfaccia utentea

La shell Bash, contiene alcune variabili speciali che sono

aggiornate rispetto a specifche operazionia Queste variabili non

possono essere assegnatea Ecco l’elenco:

• $?: contiene lo stato d’uscita dell’ultimo processo eseguito

• $0: il nome della procedura in esecuzione

• $#: il numero degli argomenti posizionali

• $$: identifca il PID della shell

• $!: l’ultimo processo eseguito in background

• $-: i fag (opzioni) utilizzati dalla shell in esecuzione

• $*: tutti i parametri posizionali in un unica stringa

• $@: tutti i parametri posizionali divisi in stringhe

I comandi possono essere divisi in più parole usando il “|”, ecco

un esempio:
151

who | wc -l

In apparenza i comandi di un sistema Linux e i comandi built-in,

sembrerebbero la stessa cosa, ma non è cosìa

Con built-in si intendono i comandi che sono parte integrante

della shell stessaa I comandi built-in sono insiti nella shell e

indipendenti dall’architetturaa I comandi di un sistema Linux,

invece, possono essere dipendenti dal sistema in usoa

Un modo effcace per verifcare se un comando è built-in o meno,

è l’utilizzo di “type”a

Di seguito voglio metterti una versione migliorata del primo

esempio di script che ti ho fatto:

#! /bin/bash

# Scopo dello script: Informazioni del sistema in uso

echo “*****************************************************”

echo “ [ $(date) ]”

echo “*****************************************************”

echo “Sistema in uso: $MACHTYPE”

echo “Hostname: $HOSTNAME”


152

echo “Numero di Utenti loggati al sistema: $(who | wc -l)”

echo “UID utente $USER: $UID”

echo “ID processo padre: $PPID”

echo “ID processo in corso della procedura corrente ($0): $$”

echo “Home directory utente $USER: $HOME”

Il compito dell’amministratore di sistema può essere molto

stressante, sopratutto se deve manipolare molti fle, quando c’è

l’esigenza di creare archivi compressi per il backup o quando

deve occuparsi della gestione degli utentia

I Metacaratteri, sono caratteri speciali con i quali è possibile

gestire diverse operazioni, anche complesse, su fle, stringhe e

tutto quello che può essere manipolato in input e outputa

Di seguito ti metto una breve lista:

• * : qualsiasi stringa di caratteri

• ? : qualsiasi carattere singolo

• [abc] : ogni carattere tra parantesi quadre

• [!abc] : è la negazione del punto 3a Il punto esclamativo indica

proprio una negazionea


153

• [a-b] : qualsiasi carattere compreso tra il primo e l’ultimo

indicato

• {abc, def, ghi} : qualsiasi stringa indicata tra le parentesi

Anche per la programmazione della shell, sono previste le

strutture di controllo che consentono di decidere quali porzioni di

codice eseguire, una sola volta o più volte, in base a specifche

condizionia

Le strutture di controllo sono le seguenti:

• If, then, else

• I cicli for e while

• Il costrutto “case”

Queste strutture di controllo sono essenziali per creare script

complessia La loro gestione è molto simile alla sintassi del

linguaggio Ca

Un’altro strumento che si può usare nella programmazione della

shell è l’arraya

Un array, è una collezione ordinata di elementia Puoi accedere ad

ogni elemento per mezzo di un indicea


154

Un array potrebbe essere dichiarato come segue:

ARRAY=(“$USER” “$HOME” “$PATH” “$UID”)

Potresti dichiarare lo stesso array in modo molto più semplice e

intuitivo:

ARRAY[0]=“$USER”

ARRAY[1]=“$HOME”

ARRAY[2]=“$PATH”

ARRAY[3]=“$UID”

Il risultato naturalmente sarà lo stessoa Nella seconda

dichiarazione ho semplicemente messo tra le parentesi quadre

l’indicea

Quando crei i tuoi script, puoi fare anche uso di funzionia Le

funzioni sono utili qualora specifche operazioni devono essere

ripetute più volte nel corso del programmaa

• Una funzione può essere dichiarata ovunque nel listato.

• Si possono dichiarare funzioni all’interno di funzioni.


155

• La defnizione di una funzione deve precedere la sua

eventuale chiamata.

• Le funzioni restituiscono un valore defnito come

exit_status.

Ho voluto fare una rapida panoramica di tutti gli strumenti che

puoi usare per scrivere i tuoi script e di fatto le competenze

necessariea

Non ho voluto trattare nello specifco tutti questi argomenti, ma

darti solo un’idea generale perchè la programmazione della shell

merita certamente un libro a partea

Tuttavia, con gli elementi che ti ho messo a disposizione puoi

creare piccoli script utili al tuo lavoroa


156
157
158

Il 9° ComandaMento

Server OpenSSH

Ci sono diversi strumenti potenti per il controllo remoto di un

computer in rete e per il trasferimento dei datia Lo strumento di

cui voglio parlarti si chiama OpenSSH.

Openssh signifca : Secure SHell.

Gli strumenti tradizionali usati per trasferire fle sono Telnet

oppure rcpa Questi strumenti però, sono meno sicuri in quanto

trasmettono la password dell’utente in chiaroa

Openssh facilita tutte le operazioni di controllo remoto e

trasferimento fle in sicurezza e con crittografa, sostituendo tutti

gli strumenti tradizionali di cui ti ho fatto cennoa


159

Questo potente strumento permette inoltre, diversi metodi di

autenticazione, password semplice, chiave pubblica e ticket

kerberosa

Per installare su Ubuntu questa applicazione sia server che client

è molto semplicea Digita a terminale:

sudo apt install openssh-client

sudo apt install openssh-server

Puoi anche usare questo comando:

sudo apt install ssh

Per usare ssh devi avere la porta 22 apertaa I fle che devi

controllare per la confgurazione sono:

/etc/ssh/sshd_confg

/etc/ssh/ssh_confg

Nel primo controlla che ci siano questi valori:

Port 22
160

Protocol 2

SyslogFacility AUTH

Loglevel INFO

PasswordAutentication yes

x11Forwarding yes

x11UseLocalhost yes

Subsystem sftp /usr/lib/openssh/sftp-server

Nel secondo, assicurati che siano abilitati questi valori:

Forwardx11 yes

Port 22

Protocol 2,1

SendEnv LANG LC_*

HashKnownHosts yes

GSSAPIAuthentication yes

GSSAPIDelegateCredentials no

Prima di fare qualsiasi modifca, ti suggerisco di fare una copia dei

fle di confgurazione e proteggerli da scrittura in questo modo:

sudo cp /etc/ssh/sshd_confg /etc/ssh/sshd_confg.originale


161

sudo chmod a-w /etc/ssh/sshd_confg.originale

La stringa per connetterti ad un sistema remoto:

ssh USERNAME@IP

Oppure

ssh IP -l USERNAME 22

Dopo ti verrà chiesta la password per accedere al pca

Per copiare fle o directory da una macchina Ubuntu remota su

una macchina locale, si usa il comando scpa

Immagina che nella macchina remota sia installato il servizio ssh

server e che l’indirizzo ip sia 192a168a1a10a I fle si trovano in

/home/utente/fleremotoatxt e devi copiarli nella tua cartella

locale correntea

scp -r utente@192.168.10:/home/utente/fleremoto.txt
162

Per copiare fle o directory da una macchina locale a una

macchina Ubuntu remota devi fare in questo modo:

scp -r flelocale.txt utente@192.168.1.10:/home/utente

Ti voglio fare alcuni esempi di come puoi eseguire i comandi che

hai imparato nel corso del libro direttamente su una macchina

remotaa Immagina di avere 2 computer, uno è il server Ubuntu sul

quale vuoi lavorare, l’altro è il pc dal quale ti colleghi ovvero il

clienta

La prima cosa che voglio è avere informazioni sul disco remoto:

ssh utente@192.168.0.10 df -h

Adesso voglio sapere quali porte sono aperte sull’host remoto:

ssh utente@192.168.1.10 netstat -vatn

Puoi anche riavviare il server mysql sulla macchina remotaa

Questo è molto utile per chi gestisce i servizi di hostinga

ssh root@192.168.1.10 ‘/etc/init.d/mysql restart’


163

Come vedi, non ho messo “utente”, perché per compiere certe

azioni devi poterti connettere come roota

Ssh è un protocollo, (come HTTP) che ti permette di stabilire una

connessione cifrata con un host remoto gestito da riga di

comandoa

Se utilizzi Windows, devi scaricare un software ad hoce questo

software si chiama PUTTYa Se utilizzi Linux o Mac, il client ssh è già

integratoe ti basterà aprire il terminale e digitare ssh a

Quando hai terminato il tuo lavoro, devi ricordarti di chiudere la

sessione di lavoro usando il comando exita

Esistono 4 modi per chiudere una sessione di lavoro:

• Digiti exit

• Premendo CTRL+D

• Digiti shutdown

• Premi CTRL + ALT + CANC

Attenzione: nei primi 2 casi si esce dal sistema e questo resta in

esecuzionee con gli ultimi 2, invece, il sistema si riavviaa Per poter


164

riavviare il sistema occorre essere utenti root cioè con i massimi

privilegi, diversamente otterrai un messaggio di errorea

Le impostazioni predefnite di openssh, consentono l’accesso

tramite autenticazione con nome utente e password dell’utente

remotoa

Questo signifca che se qualcuno viene in possesso di nome

utente e password dell’utente del computer remoto, potrà

connettersi dall’esterno, compromettendo la sicurezzaa

La soluzione a questo problema è una creare una connessione a

chiave pubblica/privata, dove solo il computer in possesso della

chiave privata, (la persona deve conoscere la passphrase), può

accedere al computer remoto in cui risiede la corrispondente

chiave pubblicaa

Per creare la tua coppia di chiavi (privata e pubblica) sul computer

locale, apri il terminale:

ssh-keygen -t dsa

Ti verrà chiesto dove salvare la chiave privata e di scegliere una

passphrase (una password)a Per default, la posizione predefnita è


165

/.ssh/id_dsaa Insieme alla chiave privata viene creata la

corrispondente chiave pubblica, che per default, si trova in

/.ssh/id_dsa.pub sul computer localea Questa chiave pubblica la

devi inserire nel tuo computer remoto usando il seguente

comando:

ssh-copy-id -i percorsoLocaleChiavePubblica

nomeUtenteRemoto@indirizzoIPremoto

Esempio

ssh-copy-id -i /.ssh/id_dsa.pub rossi@192.168.1.10

Dopo aver aggiunto la chiave pubblica sul computer remoto, non

verrà più chiesta la password dell’utente del computer remoto

che si trova in /etc/password ma verrà chiesta la passphrase che

hai in localea

Se decidi di usare l’autenticazione a chiave pubblica, per

aumentare la sicurezza puoi disabilitare l’autenticazione tramite

password utentea Per farlo apri il fle /etc/ssh/sshd_confg con i

privilegi di root e aggiungi la seguente riga:

PasswordAuthentication no
166

Fatta questa modifca, dovrai riavviare il server ssha

A questo punto potresti fare in modo che la passphrase ti venga

chiesta una sola volta per tutta la durata della sessionea Questo ti

può tornare utile se usi spesso comandi come scpa In questo

modo eviti di dover inserire la password ogni volta che lanci un

comandoa

Per aggiungere la tua passphrase al gestore delle identità devi

usare il seguente comando:

ssh-add

Ti verrà chiesta la passphrase e dopo la chiave privata, sarà

sempre disponibilea

Attenzione: se ti allontani dal computer, blocca lo schermo con i

tasti CTRL+ALT+La

Ora non ti resta che sperimentare e fare pratica utilizzando e

approfondendo questo fantastico strumentoa


167
168

10° ComandaMento

Antivirus e Firewall

Per molto tempo mi è stato detto che per il sistema operativo

Linux, quindi anche Ubuntu, non servisse un antivirus, poiché

immune da virusa Io non la penso cosìa La maggior parte dei virus

attaccano l’ambiente Windows da sempre e sono i più diffusia

Devi tener presente un aspetto importante: lo scambio di fle da e

verso sistemi operativi diversia Se tu usi Linux e un tuo amico che

usa Windows ti invia un fle che ha un virus, molto probabilmente

tu non avrai ripercussioni ma avrai comunque il virus e se a tua

volta spedisci quel fle ad un altro diventi un mezzo di contagio

senza precedentia

Per questo motivo secondo me è bene installare anche su Linux

un antivirusa

Ci sono diversi antivirus gratuiti, ma quello di cui voglio parlarti io

si chiama CLAMAV.
169

Clamav è un ottimo antivirus e può competere con i più blasonati

antivirus commercialia

Per installare clamav apri il terminale e digita:

sudo apt install clamav

Il tool di clamav ti fornisce uno strumento per aggiornare il

database dei virusa Questo strumento si chiama freshclam e può

funzionare in 2 modi:

• Interattivo - lanciato manualmente da shell

• Daemon - avviato come servizio di sistema

Questo tool è molto avanzato e supporta la verifca delle

signature e del database attraverso DNS, oltre che

l’autenticazione via proxy server, le frme digitali e ha una

gestione avanzata degli erroria

Per verifcare che funzioni correttamente digita:

Freshclam

Senza parametria
170

Se non hai riscontrato errori, puoi lanciarlo in modalità demone

digitando:

freshclam -d

Per specifcare un proxy server, vai nel fle di confgurazione /etc/

clamav/freshclam.conf e aggiungi le seguenti righe:

HTTPProxyServer iltuoproxyserveracom

HTTPProxyPort la porta scelta

HTTPProxyUsername iltuousername

HTTPProxyPassword latuapassword

Se vuoi fare una scansione di tutti i fle, cartelle e sotto cartelle

presenti sul computer digita:

clamscan -r /

Se vuoi fare la scansione di tutti i fle, cartelle e sotto cartelle

presenti nella tua /home digita:

comascan -r /home
171

Come vedi è molto intuitivoa Puoi usare diverse opzioni di

scansione, da inserire nei comandi precedenti a

Descrizione
Mostra nel terminale solo i fle risultati
-i
positivi alla scansionea
Riproduce il suono di un campanello
--bell
quando vengono trovati fle infettia
Crea il fle clamavlogatxt nella propria
/home contenente il resoconto della
--log=clamavlogatxt scansionea I fle risultati positivi alla
scansione saranno indicati con la scritta
FOUNDa
--exclude-dir='/percorso/da/
Esclude una cartella dalla scansionea
escludere'
Stabilisce una dimensione massima di
--max-flesize=750M
750 MB dei fle da analizzarea

Anche per Clamav, puoi usare il comando man per conoscere


tutto quello che puoi farea

Firewall
Se vuoi proteggere il tuo computer da accessi non autorizzati,

diventa utile installare un frewalla

I frewall sono strumenti che bloccano le connessioni in entrata sul

proprio computer, aumentandone la sicurezzaa Se utilizzi un


172

router per connetterti a internet, questo dovrebbe già avere un

frewall capace di fltrare le connessioni da internet verso la tua

retea

Il programma standard per confgurare il frewall in Ubuntu si

chiama UFW ed è a riga di comandoa Esiste anche una versione

grafca che si chiama Gufwa In alternativa a questo strumento è

possibile usare il comando iptablea

Il programma ufw è stato realizzato per semplifcare la

confgurazione di iptable, esso offre un modo semplice per creare

un frewall basato su protocolli ipv4 e ipv6a

Il kernel Linux, include un sottosistema chiamato netflter che

serve per decidere la sorte del traffco di rete diretto all’interno o

attraverso un servera In pratica questo sistema si basa sul fltraggio

dei pacchettia Un amministratore di rete sicuramente preferirà

utilizzare iptablea Quando un pacchetto arriva al tuo server,

questo viene affdato a netflter perché venga accettato o

manipolato secondo regole stabilite attraverso l’uso di iptablea

Ufw per default è disabilitato quindi la prima cosa da fare è

renderlo abile:
173

sudo ufw enable

Per aprire una porta ad esempio quella ssh :

sudo ufw allow 22

Per chiudere una porta:

sudo ufw deny 22

Per eliminare una regola precedentemente impostata si usa il

comando delete seguito dalla regola:

sudo ufw delete deny 22

Per disabilitare ufw devi digitare:

sudo ufw disable

I registri del frewall sono utili per riconoscere gli attacchi e

verifcare attività sospette nella propria retea Devi mettere delle

regole per far si che vengano eseguite le registrazionia


173

Per attivare la registrazione con ufw digita:

sudo ufw logging on

Se non hai particolari esigenze puoi usare ufw in quanto è molto

più semplice rispetto a iptablea

Ci sono comunque molte altre alternative : frestarter, fwbuilder.

Questi hanno una interfaccia grafca e sono facili da utilizzarea

Se invece preferisci la riga di comando ci sono le seguenti

alternative: shorewall, ipkungfu, freeiera

In ogni momento puoi verifcare lo stato del frewall ufw

digitando:

sysstemctl status ufw

Dovresti vedere in verde la dicitura Active che signifca che il

software di sicurezza è in esecuzionea Per default ufw blocca tutte

le connessioni in ingresso, quindi se usi software peer to peer

come ad esempio bittorent devi aprire la specifca porta per

renderlo contattabile dai client esternia


174

Per vedere tutte le regole in uso devi digitare:

sudo ufw status numbered

Se hai identifcato qualcuno che tenta di attaccare il tuo sistema, il

frewall può bloccare sul nascere ogni tentativo dell’attaccante

lanciando il comando:

sudo ufw insert 1 deny from numero_ip to any

Al posto di numero_ip, ovviamente, devi mettere l’ip di chi sta

tentando l’attaccoa

Se per qualche ragione desideri eliminare tutta la confgurazione

e quindi ripristinare la situazione originale di ufw devi digitare:

sudo ufw - - force reset

In questo modo, ufw crea in automatico una copia di sicurezza

delle regole in quel momento in uso nella cartella /etc/ufw.


175

Bene, sono arrivato al termine dei 10 ComandaMentia Tutto

quello che ho scritto ti sarà sicuramente utile e sono sicuro che ti

potrà aiutare moltoa Questo libro, non ha la pretesa di essere

esaustivo, tuttavia ritengo che proprio per la sua semplicità possa

essere un valido strumento di base sia per chi desidera scoprire il

mondo Linux in particolare Ubuntu, sia per chi è già un

appassionatoa

Ho sempre faticato molto a trovare documentazione in italiano,

oggi sicuramente è più facile, ma spesso sono manuali adatti ad

esperti del settore, ricchi di tecnicismi e non alla portata di tuttia

Con questa piccola guida confdo ti sia più facile conoscere

questo mondo fatto di comandi e regole e poi sarai tu ad

approfondire i temi che sono più di tuo interessea

Se sono riuscito a semplifcarti lo studio del terminale Linux, allora

ho raggiunto il mio scopoa

Adesso non fermarti, non smettere mai di essere curioso e resta

sempre aggiornatoa

Buon lavoro