Sezione 1 : Introduzione
1. IMPORTANTE! - Presentazione del corso
LPI sta per Linux Professional Institute. Il corso segue i consigli di LPI per ottenere la certificazione LPI Linux Essentials.
Sezione 2 : Conoscenze pregresse / propedeutiche
TODO 2. 0.1 - Scaricare, installare e configurare VirtualBox
3. 0.2 - Download ed installazione di Linux
Installato Debian ed Arch su macchina reale.
TODO 4. 0.3 - Installazione VirtualBox Guest Additions e risoluzione problemi comuni
5. IMPORTANTE : Problemi con VirtualBox
Elenco di alcuni problemi comuni utilizzando Virtualbox (e relativa soluzione). Se dopo aver seguito le istruzioni per l’installazione delle VirtualBox Guest Additions alcune funzionalità come:
- appunti bidirezionali;
- cartelle condivise;
- drag and drop;
- copia/incolla.
Non dovessero funzionare, non preoccupatevi. Queste funzionalità sono state mostrate per completezza e per massimizzare il vostro comfort nel caso in cui voleste scambiare dati da e verso la macchina virtuale, ma non sono necessari ai fini dello svolgimento del corso, in quanto non andremo mai a fare uso di tali funzionalità. Se volete comunque provare a risolvere, l’approccio generalmente consigliato alla risoluzione dei problemi è il seguente:
- Ricerca VirtualBox nella sezione D&R, ci sono già numerosi casi trattati (e future richieste non riceveranno considerazione in quanto duplicate);
- Ricerca del codice dell’errore di VirtualBox (se presente) o descrizione della problematica (a più riprese e con diversi sinonimi) nella barra di ricerca di Google. Come informatici o aspiranti tali è indispensabile imparare ad usare i motori di ricerca in maniera efficace. Serve perseveranza: non si trova sempre tutto al primo tentativo, è normale.
VirtualBox funziona solo a 32 bit
Questo problema è tipicamente causato dalle impostazioni del BIOS: alcuni produttori disabilitano la funzionalità Virtualizzazione o VT-x ed è necessario andare ad abilitarla manualmente. Questa particolare procedura varia da computer a computer in base a marca e modello. Questo problema può anche essere causato da una delle seguenti cause:
- abbinamento “sfortunato” tra versione di Windows e versione di Virtualbox;
- incorretta/corrotta installazione di VirtualBox;
- incompatibilità dell’hardware: non tutte le CPU supportano la virtualizzazione.
Questo genere di problema a seconda dei casi può essere più tedioso da risolvere, perciò sarà necessario un quantitativo non indifferente di ingegno da parte vostra: anche in questo caso valgono i consigli 1 e 2 del punto precedente.
Sezione 3 : 1 - Evoluzione di Linux
6. 1.1 - Evoluzione di Linux e principali distribuzioni
Differenza tra filosofia OpenSource e Proprietaria
Nella filosofia OpenSource vengono fatte richieste di modifica software e chiunque può contribuire a modificare il codice sorgente introducendo per tutti la modifica richiesta.
Ciò non avviene per codice proprietario dove le modifiche vengono rilasciate solamente dalla =software-house= che ne detiene la licenaza e che non mette a disposizione di tutti il codice sorgente.
Linux
E’ un kernel rilasciato nel 1991 sotto licenza OpenSource da Linus Torvalds. Dal 1992 è rilasciato sotto licenza GNU ed integrato con le utility GNU viene distribuito insieme ad altri software di base.
Distribuzioni Linux
Hanno tutte in comune il kernel Linux.
Vengono rilasciate generalmente con un installer, le utility GNU Linux e con software addizionale (Desktop Environment e altri applicativi), vediamone alcune. Distribuzioni Linux per il Business:
- Red Hat Enterprise Linux (RHEL);
- SUSE Enterprise Linux.
Ad uso generale:
- Ubuntu;
- Debian;
- Fedora;
- Linux Mint.
Vedi https://distrowatch.com .
Sistemi embedded:
- TvBox multimediali;
- NAS;
- Server di stampa;
- Smartphone Android (solo il kernel).
7. 1.1 - Linux nel Cloud
La caratteristica principale del Cloud è la scalabilità.
Questa è importante perchè ci permette di incrementare la potenza del nostro server a seconda delle nostre necessità che possono variare nel tempo. DigitalOcean è un provider che offre diverse distribuzioni Linux.
Anche Ubuntu offre servizi in Cloud.
8. Estratto da LPIC-1 : La terminologia del Cloud

- SaaS, Software as a Service, destinato agli utenti finali;
- PaaS, Platform as a Service, destinato agli sviluppatori;
- IaaS, Infrastructure as a Service, destinato agli amministratori.
Per meglio chiarire il significato delle sigle menzionate vediamo l’immagine seguente dove si evidenzia cosa viene gestito dal provider e cosa viene ‘autogestito’ passando progressivamente da TUTTO a NULLA.

Alcuni termini:
- load balancing, si frappone tra le richieste di accesso al servizio ed i server che lo erogano bilanciando equamente il lavoro tra i vari server.
- cloud computing istances, sono le richieste ai provider di aggiungere risorse al cloud quando le richieste di accesso dovessero aumentare (la citata scalabilità).
- block storage, si può aumentare o diminuire la capienza del nostro disco senza dover cambiare lo stesso.
- cloud networking, al crescere del traffico posso richiedere un aumento di banda disponibile.
9. 1.1 - Rasperry Pi - Raspbian

Monta un System On a Chip (SOC) con architettura ARM che comprende tutto quanto montato su una scheda grande come una carta di credito.
10. 1.1 - SUSE Linux
Requisito della certificazione LPI è la conoscenza di SUSE Linux.
SUSE è finanziata da Helwet Packard che produce computer Server. In questo modo offre cloud computing fornendo il software (SUSE) e l’hardware (i server HP). Fornisce anche l’immagine da installare su Rasperry Pi.
Esiste anche la versione Open SUSE che non ha il supporto tecnico ed è scaricabile gratuitamente.
11. 1.2 - I principali applicativi Open Source
Applicativi server
- Web server, Apache HTTPD, Nginx, Stack LAMP (racchiude le funzionalità Linux, Apache, MySQL e Php in un unico pacchetto);
- Database, PostgreSQL, MySQL, MariaDB;
- Unix File Server, NFS;
- Windows File Server, Samba;
- Directory server, OpenLDAP.
Applicativi Desktop
- Suite Office, LibreOffice, OpenOffice;
- Browser, Firefox, Chromium;
- Client Email, Thunderbird;
- Grafica/Foto, Inkscape, Gimp;
- Audio, Audacity.
Gestory pacchetti e repository
- DNF, Red Hat e derivate;
- APT, Debian e derivate;
- ZYPPER, SUSE.
Linguaggi di sviluppo
- C, con cui è stato scritto Unix (file.c);
- Java, per le applicazioni Android (file.jar);
- Perl, multipiattaforma (file.pl);
- Bash, nativo Linux (file.sh);
- Python, dinamico ad oggetti (file.py).
12. 1.2 - Javascript
Esistono linguaggi server-side e client-side.


Il linguaggio client-side viene eseguito lato client nella navigazione web. Naturalmente in questo modo può essere eseguito codice arbitrario sul nostro computer. Vi sono pertanto estensioni dei vari browser che inibiscono Javascript quando visitiamo un sito web tipo Quick Javascript Switcher.
I file Javascript hanno estensione .js.
13. 1.2 - OwnCloud - NextCloud
Sono 2 servizi analoghi a DropBox o GoogleDrive con la differenza che ci permettono di gestire in casa tali servizi, ossia sul nostro computer/server.
Possono essere installati anche su RasperryPi.
Naturalmente dovremo occuparci noi in prima persona della manutenzione di tutto (dischi e tutto l’hardware necessario) e proteggerci dai virus ecc… A favore sta il fatto che i nostri dati non sono su server esteri che non conosciamo.
NextCloud è un fork di OwnCloud del 2016 ed offre mediamente più servizi.
14. 1.3 - Licenze Open Source
Se Linux è il kernel, GNU fornisce lo userspace.
Licenza GPL v3 dal 2007:
- v1, dal 1989;
- v2, dal 1991;
- v3, dal 2007.
Caratteristiche generali della licenza GPL:
- Libertà di usare il software per qualsiasi motivo;
- Libertà di modificare il software;
- Libertà di condividere il software modificato;
- Clausola di viralità : non possiamo realizzare un progetto non GPL usando parti di codice GPL.
Licenza BSD - 1993
- Manca la clausola di viralità;
- Ha permesso di creare il Sistema Operativo di Apple;
- Apple ha preso il codice BSD ed applicato una licenza più restrittiva.
Licenza Creative Commons
Ideata per opere quali ad esempio manuali, howto, musica ed immagini, un paio di caratteristiche:
- può essere imposto di riportare il nome del creatore nella ridistribuzione dell’opera;
- può essere impedito l’uso commerciale.
Modelli di business
Quando viene acquistato Red Hat Enterprise Linux in realtà si acquista il pacchetto dell’assistenza.
15. 1.3 - CopyLeft e Permissive
Tutte le licenze copyleft hanno in comune le seguenti libertà:
- Libertà di usare un opera o artefatto;
- Libertà di studiare quell’opera o artefatto;
- Libertà di copiarlo o condividerlo con altri;
- Libertà di modificare o derivare l’opera e distribuirla.
Le licenze c.d. permissive permettono di redistribuire il software con licenza non libera e copyright. Grado di protezione della licenza

TODO 16. 1.4 - Lavorare con Linux
17. Test sul capitolo 1
Lezioni da n. 6 a n. 16.
Risposte giuste: 6 su 7.
Sezione 4 : 2 - Muovere i primi passi in Linux
18. 2.1 - Le basi della riga di comando
echo $0 # nome del processo in esecuzione
echo $$ # numero del PID del processo
nome-variabile="contenuto" # definizione di una variabile
export nome-variabile="contenuto" # rende disponibile la variabile anche nelle shell figlie di bash
echo $nome-variabile # visualizza contenuto variabile
env # visualizza tutte le variabili d'ambiente
which <nome-comando> # percorso dove si trova il comando
type <nome-comando> # restituisce se il comando è interno o estero alla shellGlobbing:
- *, copre qualsiasi carattere;
- ?, copre solo 1 carattere.
Comandi Linux spiegati nella lezione:
- pwd
- ping
- ls
- history
- alias
19. 2.2 - Ottenere aiuto dalla CLI
help (programmi interni alla shell)
E’ un comando cercare aiuto sui documenti inerni alla shell, esempio:
help aliasPer i comandi della shell non sono quindi disponibili le pagine di man.
man (programmi esterni alla shell)
Per i comandi generalmente si può cercare info con:
man <nome-comando>Le pagine di manuale si trovano all’interno della directory /usr/share/man mentre i file sui singoli comandi sono all’interno di /usr/share/doc/.
nomecomando –help
Molti programmi hanno l’argomento –help.
info nome-comando
Il pacchetto info fornisce informazioni sui comando come man ma non è la stessa cosa e può contenere informazioni diverse, esempio:
info <nome-comando>Lanciato da solo mostra un elenco di tutti i file info installati.
20. 2.3 - Usare directory ed elencare file dalla CLI
Per guardare la struttura delle cartelle usare il comando tree.
TODO 21. 2.4 - Creare, spostare, eliminare file dalla CLI
22. Test sul capitolo 2
Lezioni da n. 18 a n. 21.
Risposte giuste: 7 su 11.
Sezione 5 : 3 - La potenza della riga di comando (CLI)
23. 3.1 - Archiviazione file da CLI
Nota sulle opzioni del comando =tar=:
- c, crea archivio;
- t, mostra archivio;
- x, estrai archivio.
Esempi di archiviazione/compressione ed estrazione:
tar -cvf <archivio.tar> * # crea un archivio tar
file <archivio.tar> # informazioni su tipo file e tipo di archivio
tar -tf <nome-file-archivio> # contenuto archivio
tar -cjf <archivio.tar.bz2d> * # crea un archivio bz2
tar -xjf <archivio.tar.bz2> -C <cartella-di-destinazione> # estrazione
tar -cJf <archivio.tar.xz> # crea archivio xz
tar -xJf <archivio.tar.xz> # estrazione file nella cartella corrente
zip <archivio.zip> * # crea archivio.zip
unzip <archivio.zip> # decomprime archivioCompressione singolo file:
gzip <nome-file> # comprime in nome-file.gz
gunzip <nome-file.gz> # decomprime il file
bzip2 <nome-file> # comprime in nome-file.bz2
bunzip2 <nome-file.bz2> # decomprime il file
gzip * # comprime singolarmente ogni file della cartella corrente
gunzip * # analogamente estrae ogni singolo file compresso
zip <archivio.zip> * # crea archivio.zip
unzip <archivio.zip> # decomprime archivio24. 3.2 - Ricerca ed estrazine dati da file
head <nome-file> -n # visualizza prime # righe
tail <nome-file> -n # visualizza ultime # righe
grep "ricerca" <nome-file> # stampa le righe che contengono la stringa di ricerca
cat <nome-file> | less # legge un file potendolo 'scorrere'
cat <nome-file> | sort # stampa le righe del file in ordine alfabetico
cat <nome-file> | sort -r # stampa le righe del file in ordine alfabetico inverso
cat <nome-file> | sort -n # stampa le righe del file in ordine numerico crescente
cat <nome-file> | cut -d":" -f2 # dato un file con all'interno dei record, stampa il secondo campo ('f2') di tutte le righe le quali hanno come delimitatore ':'
wc -l <nome-file> # conta le righe di 'nome-file'
wc -c <nome-file> # conta i caratteri in 'nome-file'
wc <nome-file> # restituisce numero righe, parole e caratteri di 'nome-file'25. 3.3 - Trasformare i comandi in degli script
Scrivere ed eseguire uno script
I vari comandi possono essere inseriti in script tali e quali aggiungendo anche delle funzioni logiche o condizionali per dare una sorta di sequenza da seguire in base ad alcune variabili che verranno verificate.
All’inizio del file script deve essere inserita la c.d. shebang: #! a cui segue il percorso assoluto della =shell= che dovrà interpretare i comandi del file script, ad esempio:
#!/bin/bash
#!/bin/shPer poter eseguire uno script dobbiamo aggiungere i permessi di esecuzione tramite il seguente comando:
chmod +x <nome-script>Per esguire lo script:
./<nome-script>Condizione if
##!/bin/bash
nome=$1
cognome=$2
if [[ $nome == "Moreno" ]]
then
echo "Ciao Morro"
else
echo "Non ti conosco"
fiCiclo for
##!/bin/bash
for i in {1..5}
do
echo "Conto $i"
donePer eseguire quanto sopra in emacs selezionare lo script seguito da M-x (sh-execute-region).
Argomenti
Gli argomenti, ossia i parametri passati, vengono indentificati con $1, $2, e via di seguito.
Il seguente script passa in rassegna tutti file all’interno di una cartella passata come primo parametro:
##!/bin/bash
for nomefile in $1/*
do
...comandi...
doneExit status
Il valore di exit status pari a 0 significa nessun errore, script eseguito correttamente.
Se vogliamo verificare malfunzionamento dobbiamo cambiare il codice di uscita.
Per visualizzare il valore della variabile di uscita dell’ultimo comando eseguito:
echo $?Per cambiare il valore della variabile di uscita devo inserire nello script:
exit N # dove 'N' è il codice di uscitaTODO 26. 3.3 - Editor vi
27. Test sul capitolo 3
Lezioni da n. 23 a n. 26.
Risposte giuste: 6 su 10.
Sezione 6 : 4 - Il sistema operativo Linux
28. 4.1 - Ciclo di vita di Debian [Scegliere un sistema operativo]
Le release di Debian sono 3.

Workflow Debian (2016).

Esistono poi altri criteri di rilascio delle versioni di una distribuzione, ad esempio:
- con cadenza fissa, come per esempio =Ubuntu= che rilascia una nuova versione ogni 6 mesi;
- aggiornando sempre la versione corrente agli aggiornamenti disponibili (c.d. rolling release come ArchLinux) dove avremo sostanzialmente sempre una distribuzione pari alla unstable di Debian.
29. 4.1 - Distro Linux - Quale scegliere? - Scegliere un sistema operativo
Per maggiori informazioni sulle varie distribuzioni vedi il seguente LINK .
30. 4.2 - Comprendere l’hardware di un computer (e come si collega col software)
Scheda Madre di un computer

Comandi per visualizzare informazioni sui vari elementi:
lspsci # informazioni sul bus
lsusb # informazioni sui dispositivi usb
usb-devices # altre info sui dispositivi usb
lsblk # visualizza i block devices (hard-disks e chiavette)
ip addr # informazioni sulla rete
cat /proc/meminfo # informazioni sulla RAM
free -m # informazioni sulla RAM
cat /proc/cpuinfo # informazioni sul processore31. 4.3 - I Processi
definizione di processo
Un processo è la rappresentazione da parte del sistema operativo di un’istanza di un programma in esecuzione.
Un processo è caratterizzato da un numero PID (Process ID) univoco.
monitoraggio top
Alcune note sul programma top:
- minore è il valore di nice maggiore è la priorità (quella normale è impostata ad un valore di 20);
- refresh ogni 3 secondi;
- ordinamento di default per utilizzo di CPU;
- digitare M per ordinare per utilizzo di memoria (P per tornare ad un ordinamento per utilizzo di CPU);
- tasto k per terminare il processo con valore sigterm 15 (manda il segnale di terminazione normale mentre sigterm 9 è il segnale di terminazione forzata).
monitoraggio ps
Lanciato da solo visualizza solamente i processi della sessione in cui viene lanciato.
Per mostrare tutti i processi in esecuzione:
ps -elf # mostra tutti i processi in esecuzione
ps aux # simile al precedente ma con le colonne più significative
ps aux | grep "ricerca" # solitamente lanciato con la stringa di ricerca del processo o utente (o altro) che stiamo cercandomonitoraggio htop
Esattamente come top ma un po’ più bello esteticamente e nella visualizzazione, si può utilizzare anche il mouse e si può scorrere anche a destra e sinistra.
Alcune funzioni utili:
, per cercare un processo per nome; , per “uccidere” il processo, si sceglie in un secondo momento quale tipo di segnale di kill mandare (15 oppure 9).
ricerca pgrep
pgrep <nome-processo> # restituisce il numero (oppure i numeri) di PID dei vari processi in corso che contengono la stringa indicatauccisione kill
kill <PID> # uccide il processo utilizzando di default il codice di terminazione processo '15'
kill -9 <PID> # per la terminazione forzata del processodirectory /proc
Elenco dei numeri di PID di tutti i processi in esecuzione.
ls /proc/All’interno di ogni numero di PID (che è una cartella) vi sono tutte le varie informazioni da cui attingono le varie applicazioni di monitoraggio.
32. 4.3 - I log di sistema
dmesg # messaggi del kernel
dmesg -w # segue in tempo reale i messaggi del kernel
cd /var/log # cartella dei log
cat /var/log/auth.log # log delle autenticazioni sul sistema
cat /var/log/dpkg.log # log delle installazioni dei pacchettilogrotate è il programma che permette di archiviare e cancellare i log più vecchi per evitare che la cartella cresca troppo in dimensioni.
Chi si occupa di gestire la registrazione dei log?
systemctl status rsyslog33. 4.3 - Impostazioni di sistema e dei software
Impostazioni globali
Le impostazioni globali si trovano generalmente all’interno della directory /etc/, ad esempio le impostazioni di rsyslog si trovano all’interno del file /etc/rsyslog.conf. Possiamo modificarle (non sono altro che un file di testo) e, per renderle effettive, riavviamo il servizio con:
sudo systemctl restart rsyslog.serviceImpostazioni utente
Le impostazioni per utente invece saranno all’interno della cartella home dei vari utenti generalmente in cartelle nascoste (che iniziano con un punto) tipo:
- .config;
- .
.
Directory /dev
Contiene la rappresentazione, sotto forma di file, dei vari dispositivi quali, ad esempio:
- dischi;
- chiavette;
- tty (terminali).
Nel senso che, modificando il file si modifica proprio il dispositivo, ad esempio:
dd /dev/sda <destinazione>Copia il disco identificato dal file /dev/sda/ in
Directory /sys
Utilizzata prima dell’avvento della directory /proc/ (a partire dal kernel 2.6) contiene varie informazioni sui dispositivi suddivisi in cartelle e sottocartelle. Ad esempio la directory /sys/class/ suddivide i dispositivi per classi.
Per fare un esempio è possibile impostare manualmente la luminosità dello schermo con il seguente comando:
echo 50 > /sys/class/backlight/<scheda-grafica>/brightnessDirectory /boot
Per analizzare l’avvio del sistema guardiamo alla cartelle /boot/ dove sono presenti i seguenti file/cartelle:
- il kernel, che è chiamato vmlinuz-
; - il file initrd, che è una piccola immagine disco, che contiene utility e driver per fare il primissimo avvio del sistema;
- grub, che viene caricato dal BIOS (oggi UEFI) e lancia il kernel che, a sua volta, lancia init (che è il primo processo).
34. 4.4 - Indirizzo IP : Cos’è e come funziona
Un indirizzo di rete è identificato da quattro numeri in formato decimale: 192.168.1.13.
I primi 3 numeri identificano la rete, il quarto numero identifica il PC.
Possiamo rappresentare la rete di casa ed il suo accesso ad internet con la seguente immagine:

Un paio di considerazioni:
- tutti i computer della nostra rete comunicano tra di loro utilizzando l’indirizzo IP della rete locale (192.168.1.*) tramite lo switch;
- gli stessi comunicano con il resto del mondo utilizzando l’indirizzo IP del provider internet che utilizziamo per collegarci (nell’esempio 79.19.41.37).
35. 4.4 - IPv4 vs IPv6 - Cosa cambia?
Gli indirizzi di rete identificati con il protocollo IPv4 (es. 79.19.41.37) possono al massimo ricomprendere 4,3 miliardi di indirizzi che si stanno esaurendo (4,3 moltiplicato 10^9).
Pertanto si è dovuto ricorrere ad un nuovo metodo per identificare gli indirizzi di rete ossia mediante 8 cifre esadecimali a 128bit, come ad esempio fe80::fc54:ff:feb5:35c. In questo modo gli indirizzi disponibili sono un numero enormemente maggiore pari a 3,4 x 10^38.
36. 4.4 - Router e routing

Funzione dello switch
Far comunicare tutti i computer collegati alle sue porte all’interno della stessa rete, ossia PC che hanno tutti la stessa classe di indirizzi.
Ad esempio tra di loro tutti i computer con indirizzo 192.168.0.x oppure (anche contemporaneamente) tra di loro tutti quelli che appartengono alla rete 192.168.1.x.
I computer possono comunicare contemporaneamente collegati allo stesso switch ma non possono comunicare tra loro se appartengono a reti o classi di indirizzo diverse.
Funzione del router
Fa comunicare computer appartenenti a 2 classi di indirizzo diversi, ossia a 2 reti differenti.
Diamo pertanto alle porte del router l’indirizzo di rete (quello che finisce con 1, ad esempio 192.168.0.1).
Le porte del router hanno quindi indirizzo pari a quello della rete del computer che è collegato e che comunica con esso.
I singoli computer devono però conoscere l’indirizzo IP del router o gateway pertanto è necessario inserire questa informazione per poter avere una comunicazione.
37. 4.4 - Networking di base in Linux
ip addr show
Sostituisce il deprecato ifconfig e mostra le varie interfacce, tra cui troviamo:
- interfaccia di loopback 127.0.0.1 che serve a riferirsi a se stessi;
- interfaccia ethernet (eth) in cui si può leggere l’indirizzo assegnato al nostro computer all’interno della rete domestica.
ip route
Visualizza la tabella di routing dove si può generalmente leggere che il traffico viene canalizzato di default verso il nostro router (default via router-IP-address).
netstat -altu
Deprecato in favore del comando ss, visualizza lo stato delle porte in ascolto sul nostro computer. Le opzioni -altu significano:
- (a)ll;
- (l)istening;
- (t)cp-port;
- (u)dp-port.
ping morrolinux.it
Il comando ping, oltre a darci delle informazioni di prestazione del server, ci aiuta a capire se lo stesso è (banalmente) raggiungibile.
Ad esempio constatare che un server risulta raggiungibile nonostante non riusciamo a visualizzare una determinata pagina web caricata su di esso, ci può aiutare nella ricerca del problema (per esempio) in quanto il problema non sta sicuramente in un malfunzionamento del server.
sudo vi /etc/hosts
Questo file serve ad indirizzare a determinati indirizzi ip i nomi che digitiamo nella barra del browser (es. google.com).
Può essere utile, tra le altre cose:
- come parental control;
- per lavorare in locale pagine internet prima di pubblicarle.
sudo vi /etc/resolv.conf
I Server DNS servono unicamente a trasformare il nome in forma descrittiva di una pagina internet (ad esempio google.com) nel suo corrispondente indirizzo ip.
Nel file /etc/resolv.conf vengono inseriti gli indirizzi di server che (appunto) “risolvono” la url descrittiva restituendo l’indirizzo ip della pagina che stiamo cercando e che abbiamo inserito nella barra del browser.
Dalla lettura del file scopriamo che anche il nostro router (se ce l’abbiamo) funge da server DNS (in realtà ha una funzione per cui va ad interrogare altri server DNS).
Si possono specificare più server DNS che verranno interrogati in sequenza e possono essere identificati anche tramite indirizzo IPv6.
Il server 8.8.8.8 è quello di Google.
host morrolinux.com
Restituisce informazioni su un determinato host tra cui (anche) il nome dell’host che gestisce la posta elettronica del sito.
38. 4.4 - Il comando route
route
Il comando route mostra la tabella di routing.
Da notare che il comando va eseguito necessariamente come amministratore e non tramite sudo in quanto si trova nella directory /usr/sbin/ che generalmente non è nel PATH degli utenti ordinari.
Per tutto quanto non è indirizzato nella rete locale si fa riferimento alla riga default che di solito è il gateway, ossia generalmente il router.
Nel mio caso si tratta di Linkem_B1C860 che, se pingato, restituisce ovviamente 192.168.1.1.
route -n
A differenza del comando route non visualizza i nomi pertanto non vedo il mio router ma 192.168.1.1.
Altra ovvietà (ma è bene sottolinearlo) per poter comunicare con il gateway/router dobbiamo trovarci sulla stessa rete.
route add default gw 192.168.1.200
Serve per aggiunge un default gateway alla tabella di routing (provare di nuovo ad eseguire il comando route).
La colonna Metric dovrebbe indicare la priorità di esecuzione delle varie linee elencate nell’output del comando.
A parità di istruzioni di instradamento quindi, verrà eseguita quella con un valore di Metric inferiore.
route del default gw 192.168.1.200
Elimina quanto inserito con il comando precedente.
39. 4.4 - Il comando ip addr - AVANZATO
Interfacce di rete
ifconfig
ip addr showIl comando ifconfig oggi è deprecato e sostituito da ip.
All’esecuzione di questi comandi (generalmente) ci vengono restituite informazioni riguardanti:
- l’interfaccia di loopback lo;
- le altre interfacce di rete.
L’interfaccia di rete spesso viene denominata diversamente a seconda della distribuzione, ad esempio Debian chiama l’interfaccia ethernet eth0 mentre CentOS/RedHat la chiamano qualcosa tipo enp0s3.
L’esecuzione del comando ci restituisce anche altre informazioni come il MAC address e l’indirizzo ip assegnato all’interfaccia.
I seguenti comandi:
ifconfig <nome-interfaccia>
ip addr show <nome-interfaccia>Restituiscono le informazioni solamente dell’interfaccia specificata.
Collegare/scollegare una interfaccia di rete
ifdown <nome-interfaccia>
ifup <nome-interfaccia>
ip link set <nome-interfaccia> down
ip link set <nome-interfaccia> upSono comandi che servono a scollegare o collegare un’interfaccia e quindi assegnargli un indirizzo ip.
I primi due comandi si riferiscono al deprecato ifconfig mentre i secondi due si riferiscono all’equivalente di ip.
Assegnare un indirizzo ip ad una interfaccia di rete
ifconfig eth0 <nuovo-indirizzo-ip>
ip address change <nuovo-indirizzo> dev eth0Posso anche contestualmente impostare la netmask o l’indirizzo di broadcast aggiungendo i relativi parametri, ad esempio:
ifconfig eth0 192.168.1.17 netmask 255.255.255.0 broadcast 192.168.1.0E’ probabile che l’assegnazione tramite il comando ip permetta la coesistenza di entrambi gli indirizzi assegnati nel permettendo al vecchio indirizzo ip di completare tutte le operazioni in corso.
Quello descritto è un cambiamento momentaneo dell’indirizzo ip, al riavvio della rete (ifdwon, ifup) l’indirizzo tornerà come da configurazione della rete stessa.
Configurazione di rete
Per cambiare in modo persistente l’indirizzo ip, va modificato un file all’interno della directory /etc il cui nome cambia a seconda della distribuzione utilizzata. Ad esempio per le distribuzioni Debian si tratta di /etc/network/interfaces.
Bisogna poi vedere nella singola macchina chi gestisce l’interfaccia in quanto, ad esempio nel mio caso, la rete WiFi viene gestita dal comando iwc azzerando totalmente la configurazione di wlan0 nel file interfaces.
L’assegnazione di un determinato indirizzo ip (statico o dinamico) può anche essere eseguita dal router o, meglio, dallo switch che si trova incorporato nel router, indicando che un certo MAC-address avrà sempre un determinato indirizzo ip.
40. Test sul capitolo 4
Lezioni da n. 28 a n. 39.
Risposte giuste: 7 su 10.
Sezione 7 : 5 - Sicurezza e permessi sui file
41. 5.1 - Sicurezza di base e riconoscimento dei vari tipi di utente
Utenti e gruppi
In linux esistono 3 tipi di utenti:
- utenti di sistema;
- utenti standard;
- utente amministratore root.
L’elenco completo degli utenti è contenuto nel file /etc/passwd.
Il file è composto dall’elenco di tutti gli utenti e, per ogni riga, sono presenti le seguenti informazioni separate dal simbolo dei due punti (:):
- nome utente;
- password (non visibile);
- UserID;
- GroupID;
- commenti separati da virgola;
- percorso della directory home;
- comando della shell utilizzata.
Un’altra differenza tra i vari utenti la possiamo vedere guardando al UserID:
- root ha UserID e GroupID pari a zero;
- gli utenti di sistema hanno un valore <1000;
- tutti gli altri utenti (standard) >=1000.
Il file /etc/group contiene il nome di tutti i gruppi con le seguenti informazioni separate, come per il file che contiene l’elenco degli utenti, dal simbolo dei 2 punti (:):
- nome gruppo;
- password del gruppo;
- GroupID.
id nome-utente
Mostra tutti i gruppi di cui fa parte l’utente.
Fare parte di un gruppo permette di accedere a funzioni/file di quel gruppo senza dover avere i privilegi di root/sudo in quanto si fa, appunto, parte di quel gruppo.
Differenze su/sudo
- Per sudo basta conoscere la nostra password mentre per su serve la password di root.
- Con il comando
su - <nome-utente>si fa il login, previo inserimento della relativa password, con le credenziali dell’utente indicato acquisendo tutte le relative variabili di sistema. Per questa ragione con il comandosu -si fa il login come utente root.
Altri comandi
- who, mostra gli utenti collegati alla macchina;
- w, fornisce qualche informazioni in più rispetto al comando precedente;
- last, mostra lo storico dei login sulla macchina.
42. 5.2 - Creazione di utenti e gruppi
Creazione utente
La cartella /etc/skel contiene file e cartelle che verranno create e messe a disposizione di qualsiasi nuovo utente.
La creazione di utenti avviene per mezzo dei comandi:
adduser <nome-utente> # interattivo
useradd <nome-utente> # non interattivoIl comando non interattivo è utile per creare utenti tramite una procedura automatizzata mentre quello interattivo è comodo per creare un utente (appunto) interattivamente con l’utente stesso che viene guidato nel procedura di creazione del suo account.
La creazione di un utente genera l’aggiunta una nuova riga nei seguenti files:
- /etc/passwd, elenco utenti;
- /etc/group, elenco gruppi;
- /etc/shadow, password criptate.
Esempio di creazione di un utente:
useradd <nome-utente> -c "commento" -d /home/directory -m -G <altri-gruppi>L’opzione -m crea il percorso della cartella home se questa non esiste.
Per cambiare la password di un utente si esegue il comando passwd con i permessi di root (sudo/su).
Eliminazione utente
userdel <nome-utente>In questo modo vengono conservati i files personali presenti nella cartella home ed anche una serie di altri dati quali gli spool di stampa e della email.
Con l’aggiunta dell’opzione =-r= vengono eliminati anche detti files.
I gruppi
groupadd <nome-gruppo> # per creare un gruppo
usermod <nome-utente> -aG <gruppo> # per aggiungere un utente ad un gruppo
groupdel <nome-gruppo> # per eliminare un gruppo43. 5.3 - Gestione dei permessi dei file
Alcune informazioni sul comando ls -l:
- Il numero nella seconda colonna dell’elenco (quella dopo i permessi) rappresenta il numero dei collegamenti che puntano al file;
- Il primo bit dei permessi invece rappresenta il tipo di file, ad esempio:
-, un file normale;l, un link simbolico;d, una directory;s, un socket;b, un block devices;c, character devices (es. stampanti).
Il permesso di eseguire una cartelle significa poterci entrare o poterla attraversare.
Le triplette dei permessi si riferiscono a (u)ser, (g)roup e (o)thers.
TODO 44. 5.3 - Gestione dei proprietari dei file : ‘chown’
45. 5.4 - Directory e file speciali
Cartella /tmp
Analogamente alla cartelle =/var/tmp= è una cartelle temporanea nel senso che generalmente viene cancellata all’inizio della sessione.
Tutti (programmi ed utenti) hanno accesso a questa cartella e possono scriverci.
Queste cartelle vengono usate anche per creare i file di =cache= dei vari programmi.
Comando ln
ln -s <TARGET> <LINK>Permette di creare un collegamento tramite la creazione del file LINK (i link simbolici hanno il primo carattere dei permessi pari a l) ed il file originale TARGET a cui è collegato.
Sticky-bit
E’ un bit che si aggiunge ai permessi di un file che lo contrassegna impossibile da eliminare o rinominare se non dal proprietario del file stesso.
chmod +t <file>L’ultimo carattere dei permessi diventa T, quindi anche se ci sono i permessi di scrittura per il gruppo o gli altri utenti, questi non possono rinominare o eliminare il file ma lo può fare solo il proprietario.
La cancellazione del file è comunque permessa al proprietario della cartella in cui si trova il file.
46. Test sul capitolo 5
Lezioni da n. 41 a n. 44.
Risposte giuste: 6 su 10.
Sezione 8 : EXTRA
47. BONUS : Linux sotto la scocca dal processo di boot all’avvio di un browser
BIOS/UEFI
Il BIOS cerca nel primo settore del disco principale dove c’è il bootloader GRUB.
UEFI invece legge in una partizione del disco chiamata EFI e formattata Fat32 con il flag boot ed il flag esp.
In questa partizione ci sono vari programmi con estensione .efi che è sempre un bootloader e, nel caso di Linux, è sempre GRUB in formato EFI.
Quindi tutte le varie voci del menu UEFI possono essere anche obsolete nel senso che non servono più e si riferiscono a installazioni rimosse successivamente. Ci potrebbe dunque essere la necessità di rimuoverle.
efibootmgr -v # mostra le varie voci del menu UEFIDove:
- BootCurrent, è la scelta di default;
- BootOrder, è l’ordine di avvio.
efibootmgr -b <voce-uefi> -B # serve per cancellare le voci del menu che non esistono piùLe voci fanno riferimento a dei file eseguibili .efi che risiedono nella partizione UEFI Fat32 citata e che solitamente è montata sotto la cartella /boot/efi/EFI.
Per ciascuna voce eliminata nel menu possiamo quindi cancellare in sicurezza le relative cartelle con il comando:
sudo rm -rf <cartella>BOOTLOADER
Nel caso di Linux è solitamente GRUB il quale carica un mini disco iniziale chiamato initial ram disk (initrd.img oppure initramfs.img) che carica i driver indispensabili per montare la partizione dove si trova il sistema operativo ed interagire tramite tastiera e video.
Il bootloader spesso carica direttamente il kernel.

Il kernel interpreta i comandi delle applicazioni (generici) e li passa all’hardware (specifico per ogni macchina).
Il kernel si trova nella directory /boot ed il nome del file è nella forma vmlinuz-
uname -r # fornisce la versione del kernel in esecuzioneDi solito ve ne sono sempre più di uno perchè, in caso di instabilità del nuovo kernel appena aggiornato, si può utilizzare quello vecchio selezionandolo all’interno del menu di GRUB.
Posso rimuovere un kernel vecchio tramite il package manager:
sudo apt <kernel-da-rimuovere>L’importante è non rimuovere il kernel in esecuzione.
I driver per le periferiche sono generalmente scritti all’interno del codice del kernel stesso mentre driver aggiuntivi sono scritti in pezzi di codice (detti moduli) che vengono caricati alla bisogna per espandere le funzionalità del kernel.
Questi moduli sono generalmente driver che permettono al kernel di controllare le periferiche e sono file che si trovano nella directory /lib/modules/
Si tratta di files che finiscono per:
.ko, (kernel objects);.ko.xz, (in forma compressa).
Per elencare e scorrere tutti i moduli compressi posso utilizzare la seguente istruzione:
find /lib/modules/5.10.0-19-amd64/ -iname \[dq]*.ko.*\[dq] | lessINIT SYSTEM
Si occupa di lanciare tutti i servizi che devono partire in background, tipo i servizi che gestiscono la rete o la stampa:
- init, è il primo processo ad essere lanciato e lancia tutti gli altri;
- systemd, è sviluppato da RedHat e, negli ultimi tempi, ha preso il sopravvento;
- /sbin/init –version è il comando da eseguire per sapere quale init system utilizziamo, comando che però, pur essendo un collegamento al prossimo comando, non funziona nel mio caso, invece funziona il comando al prossimo punto;
- /lib/systemd/systemd –version.
Il seguente comando serve a fare partire, stoppare, abilitare e tutto il resto i vari servizi del sistema:
sudo systemctl [status|start|stop|enable|disable|restart|reload] <nome-servizio>Il seguente invece vede tutti i log di un determinato servizio:
sudo journalctl -u <nome-servizio>DISPLAY MANAGER
Detto anche Login Manager.
Posso sapere quale sto usando tramite il comando:
ls -l /etc/systemd/system/display-manager.serviceSe, come nel mio caso, non ho un Display Manager non troverò neanche il link simbolico al relativo servizio.
Il successivo comando ci restituisce il Display Manager in uso che, nel mio caso non utilizzandolo, restituisce tty perchè la variabile non viene modificata dopo che, all’accensione del computer, ho effettuato il login alla console testuale detta appunto tty:
echo $XDG_SESSION_TYPEPiccolo inciso, il comando startx esegue nell’ordine:
- ~/.xinitrc, se presente nella home directory dell’utente (io non l’ho configurato);
- /etc/X11/xinit/xinitrc, il quale esegue il comando della riga successiva;
- /etc/X11/Xsession, che non contiene attribuzione di valori alla variabile XDG_SESSION_TYPE che pertanto rimane quello attribuito all’accensione, ossia tty.
DISPLAY SERVER
Collegato con il Display Manager c’è anche il Display Server che gestisce la sessione grafica di Linux.
Da sempre (ed anche oggi) viene utilizzato X11 (oppure detto Xorg) mentre recentemente è sempre più utilizzato WAYLAND.
Piccolo inciso, il seguente comando:
sudo lshw -c videoRestituisce informazioni sulla scheda video che se, come nel mio caso (notebook ASUS), si tratta di una scheda video NVIDIA, vedo il driver open source denominato nouveau.
DESTOP ENVIRONMENT
E’ qualcosa di più di un =Window Manager= e gestisce tutta la sessione fornendo vari servizi ed utilità.
Naturalmente in Linux esistono diversi =Desktop Environment= come, solo per fare qualche esempio: KDE, Gnome, LXDE ed XFCE.
Analizziamo qualche file e directory:
- /etc/passwd, contiene l’elenco utenti;
- /etc/shadow, contiene le password cifrate;
- /etc/pam.d, contiene le priorità di autenticazione nelle varie situazioni.
Il seguente comando restituisce il valore della variabile d’ambiente che, nel mio caso, è ovviamente vuota visto che non utilizzo un Desktop Environment:
echo $DESKTOP_SESSIONUtilizzando invece anche un Display Manager questa variabile d’ambiente ci dice quale file possiamo modificare per personalizzare ulteriormente il nostro desktop manager, tipo farlo partire con un particolare Window Manager e non con quello di default.
Generalmente questi file sono all’interno della cartella /usr/share/xsessions.
APPLICATIONS
Nella directory /usr/share/applications ci sono i nomi delle applicazioni che appaiono nel menu del Desktop Environment con tutte le varie personalizzazioni compresa la icona.
RIEPILOGO
screenfetch
neofetchEntrambi i comandi espongono un riepilogo delle varie informazioni che abbiamo visto nel capitolo.
Tra i due risulta essere preferibile il secondo che visualizza più correttamente le scheda grafica e la presenza di più schermi (il primo comando fa la somma dei pixel schermi presenti).