1. COMANDI DA RICORDARE PDF 1
Help function of a command
Parentesi quadre [] accerchiano elementi opzionali
Qualsiasi cosa seguita da ... rappresenta una lista di lung. arbitraria
I | indicano una scelta multipla
Gli angle brackets <> rappresentano dati variabili
Killare una shell ssh freezata
Enter + ~ + .
Shortcut per spostarsi
ctrl+a inizio della command line
ctrl+efine della command line
ctrl+u cancella fino all'inizio
ctrl+k cancella fino alla fine
ctrl+sx vai alla parola precedente
ctrl+dx vai alla parola seguente
ctrl+r cerca nella history
Directory importanti
usr software installati, librerie.
o bin comandi utente
o sbin comandi admin
o local software localmente customizzato
etc file di configurazione specifici al sistema
var Dati variabili al sistema che dovrebbero rimanere tra boots, come DB, cache...
run Dati di runtime per i processi avviati since boot, come ID, lock...
home Dirs per il salvataggio dei dati per gli utenti
root Home per root
tmp Spazio temporaneo dalla durata di 10 gg (per 30gg, /var/tmp)
boot File necessari per il boot
dev Contiene file speciali per accedere ai device
Path assoluti
Un path assoluto comincia alla / root
Path relativi
Un path che non comincia per / specifica il path partendo dalla dir in cui siamo.
2. File Globbing
Processo per il pattern matching/wildcards.
* ogni stringa di 0+ caratteri
? ogni carattere singolo
~ home dello user corrente
~user home dell'utente user
~+ directory corrente
~- directory precedente
[abc] un carattere tra abc
[!abc] un carattere esclusi abc
[^abc] un carattere esclusi abc
[[:alpha:]] ogni carattere alfabetico
[[:lower:]] ogni carattere lower-case
[[:upper:]] ogni carattere upper-case
[[:alnum:]] un carattere alfanumerico
[[:punct:]] ogni carattere di punteggiatura
[[:digit:]] ogni numero
if [[ $VAR = *[[:digit:]]* ]]; then
[[:space:]] ogni carattere di whitespace (tabs, newline, cr)
Brace Expansion
Utilizzata per generare stringhe arbitrarie di caratteri
contengono una lista comma-separated o una sequenza.
es. {Sunday,Monday,Thursday} {1..10}
Command substitution
Sostituiamo l'espressione $(comando) con l'output del comando.
Si possono usare anche i backticks comando, ma ha due svantaggi: fa confusione, e non è
nestable
Evitare l'expansion
escapa un singolo carattere
'' escapa un'espressione sempre
"" escapa espressioni ma permette command e variable substitution
Redirectare gli output a file
Tramite > possiamo redirectare un output a file.
> sovrascrive
>> appende
3. 2> specifica stderr
&> redirige stdout e stderr e sovrascrivono il file
es. >file 2>&1 = &>file
&>> redirige stdout e stderr e si appendono al file
Pipeline
Una pipeline | permette di passare l'output di un comando all'input di un altro
Comandi
date mostra i correnti data/ora. Puoi specificare con + il formato desiderato (esempio: +%Y
- %M -%D)
o -d “+ x giorni” per vedere la data tra tot giorni
passwd passwd modifica la password dell'utente corrente. root può modificarle tutte.
file su linux le estensioni sono inutili. file analizza l'header di un file per vedere l'estensione
head Prende le prime 10 linee di un file. Con argomento -n specifichi il numero.
tail vedi head, ma alla fine del file.
wc conta linee, parole, caratteri. Prende parametro -l, -l, -c per mostrarne solo uno dei tre.
history mostra una lista dei comandi già eseguiti
pwd mostra il full path name corrente
ls mostra i contenuti della directory corrente
o -a mostra tutti i file
o -R è ricorsivo
o -l per vedere gli utenti associati ad un file
cd cambia directory, .. indica la directory padre
touch updata il timestamp di un file al tempo corrente. Possiamo usarlo per creare files.
cp copia un file. Per file multipli, l'ultima deve essere la directory.
mv sposta o rinomina un file.
rm elimina un file.
o -r elimina ricorsivamente directories
o -f forza l'operazione suddetta.
rmdir elimina una directory vuota
mkdir crea una directory
o -p crea le subdirectories necessarie
man mostra la pagina di manuale per il comando specificato, è diviso in 9 categorie
stdin buffer che legge dalla tastiera
stdout buffer che invia output al terminare
stderr invia messaggi di errore al terminale
tee permette di creare una pipeline mantenendo l'output a terminale o a un file specificato
come argomento
yum permette di installare pacchetti da una repo. La configurazione è
in /etc/yum.conf o /etc/yum.repos.d
find per cercare qualcosa in una particolare directory. Scrivere find pathluogo -(opzioni)
o -type f: un file normale
o d: directory
o l: collegamento simbolico
4. o c: dispositivi di carattere
o b: dispositivi di blocco
o p: named pipe (FIFO)
o s: socket
o name
Per verificare se un file esiste scrivi:
test -f "$1"
if [ $? -eq 0 ]; then
repolist elenca le repo, pacchetti, gruppi
help aiuto
list pacchetti installati/disponibili
search cerca pacchetti per nome/summary
search all cerca anche nella description
info restituisce informazioni su un pacchetto
provides pacchetti che matchano il pathname
install installa il pacchetto
update updata pacchetti
Utenti
Informazioni
/etc/passwd: Mantiene le informazioni sugli utenti
Gruppi
Hanno un nome e un GID, ogni user ha un gruppo principale.
Il gruppo primario possiede i file creati dall'utente
Solitamente il primary group è un gruppo con il nome dell'utente
L'utente può essere in altri gruppi salvati in /etc/group
Root: L'utente root ha potere sul sistema, con privilegi massimi. La maggior parte dei device
devono essere controllati da root, tranne i removibili.
Ranges di UID
0 sempre assegnato a root
1-200 assegnato ai system users (processi)
201-999 system users senza file
1000+ utenti regolari
5. Password
/etc/shadow Contiene le password nel formato:
login_name:password:data_di_modifica_since1970:giorni_minimi_cambio:giorni_massimi_cambio:giorn
i_warning:giorni_eccezione:scadenza_account_since1970:blank
Per modificarla utilizzare chage opzione nomeutente:
-d: impongo la data dell’ultima modifica possibile
-m: modifico il numero minimo di giorni di modifica pw
-M: modifico il numero massimo di giorni di modifica pw
-W: inserisco il warn dello scadere pw
-I: oltre questo limite dopo lo scadere della pw l’account sparisce
-E data: l’account sparisce in quella data
$PATH
Contiene le location contenenti eseguibili -> per vederlo scrivere echo $PATH
$HOME
Contiene la home dir -> per vederlo scrivere echo $HOME
Comandi
su permette di cambiare utente
o – nomeutente: setta l'environment a quello dell'utente nuovo, senza rimane uguale
o – : si passa a root
sudo permette di eseguire un comando come root
useradd crea un utente con i campi di default (specificati in /etc/login) se non specificato
diversamente
Per vedere tutti gli utenti presenti scrivi cat /etc/passwd
usermod modifica un utente
o -c Aggiunge un campo al GECOS field, es. nome completo
o -g Specifica il gruppo primario
o -G Specifica i gruppi aggiuntivi
o -a Usato con -G, appende i gruppi senza rimuoverlo da altri
o -d Specifica l'home dir
NOTA: PRIMA DI SPECIFICARLA DEVI CREARLA! Poi imposta i giusti permessi con
chmod e solo POI puoi metterla come home dir
o -m Sposta la home a una nuova location, va usato con -d
o -s Specifica una nuova login shell
o -L Blocca l'utente
o -U Sblocca l'utente
userdel elimina l'utente da /etc/passwd, ma lascia la home dir
o -r elimina anche la home
groupadd crea un gruppo
o -g specifica il GID
o -r crea un system group con un GID disponibile
groupmod modifica un GID o un nome
o -n specifica il nuovo nome
6. o -g specifica il nuovo GID
groupdel elimina un gruppo
per eliminare utente da gruppo: sudo gpasswd -d username groupname
Per cambiare il possesso di una directory ad un gruppo fai chmod :nomegruppo
pathdirectory
Permessi
Possiamo settare impostazioni diverse per il creatore, il gruppo creatore, e gli altri. Un file appena
creato è di proprietà del creatore, con gruppo primario del creatore.
Permessi di default
I permessi default per i file sono settati dai processi che li creano. Ma per file/dir creati da shell?
Essi vengono filtrati dalla umask della shell, che rimuove i campi specificati.
002 per impedire la scrittura agli utenti che non sono proprietari del file e che non fanno
nemmeno parte del gruppo assegnato al file
022 per impedire la scrittura a utenti diversi dal proprietario (valore di default)
044 per impedire la lettura a utenti diversi dal proprietario
077 per impedire lettura, scrittura ed esecuzione a utenti diversi dal proprietario
Per rendere la umask invariata al logout dell’utente:
vim /etc/bashrc
vim /etc/profile
Esempio:
useradd -g opensource linux
echo "umask 0077" >> /home/linux/.bashrc
Comandi
chmod modifica i permessi di di un file (-R per directory ricorsivamente) WhoWhatWhich
o Who u(ser), g(roup), o(ther), a(ll)
o What +, -, =
o Which r, w, x
Metodo numerico: r=4, w=2, x=1
PS: Per controllare l’effettivo valore usa ls -la o -lad per directory
chown modifica il possessore del file (il possessore solo root, il gruppo anche user che vi
appartengono) : specifica il possessore/gruppo
(-R per farlo in maniera ricorsiva su una directory)
7. Processi
Stati di un processo
Running
o R TASK_RUNNING: sta eseguendo sulla CPU o attendendo di eseguire
Sleeping
o S TASK_INTERRUPTIBLE: sta aspettando qualche condizione hw/sw
o D TASK_UNINTERRUPTIBLE: non risponde ai segnali. condizioni eccezionali.
o K TASK_KILLABLE: identico a D, ma risponde ai SIGKILL
Stopped
o T TASK_STOPPED: il processo è stato stoppato e può essere ripristinato
o T TASK_TRACED: appare durante le pause di debug
Zombie
o Z EXIT_ZOMBIE: segnala al parent mentre esce. Tutte le risorse eccesso il PID rilasciate
o X EXIT_DEAD: una volta che il parent ha pulito, il processo è rimosso del tutto.
Transitorio.
Job
Associato ad ogni pipeline, tutti i processi della pipeline sono parte del job.
Un terminale supporta un job alla volta.
Un processo in background di un terminale è membro di un altro job di quel terminale.
I processi background non possono ricevere input ma possono scrivere.
Un job bg può essere interrotto, se prova a leggere l'input avviene in automatico.
Ciascun terminale può avere un foreground e più background.
8. Segnali di kill
HUP 1 Hangup: reporta la terminazione del processo controllante di un terminale
INT 2 Keyboard: causa il termine con ctrl+c
QUIT 3 Come INT ma produce un dump del processo. Ctrl+D
KILL 9 Termina il programma forzatamente
TERM 15 Causa il termine. Può essere però bloccato, ignorato.
CONT 18 Resuma il processo
STOP 19 Sospende il processo forzatamente.
TSTP 20 Uno STOP più educato, bloccabile, ignorabile... Ctrl+Z
Mandare processi in background
Per mandare un processo in background, Ctrl+z
Load Averages
Rappresenta il carico del sistema negli ultimi 1,5,15 minuti, sulla base dei running e uninterruptible
Tutte le CPU sono sommate, in quanto i processi si potrebbero spostare da una all'altra Linux
conta ogni core/hyperthread come una CPU a parte, con request queues separate Possiamo
ottenere i load averages tramite top, uptime e w Una CPU idle ha load 0; ogni processo aggiunge
1.
Comandi
ps mostra i processi correnti.
o -a processi associati al terminale
o -u mostra l'utente collegato al processo
o aux mostra tutti i processi, con user e processi senza terminale
o lax mostra tutti i processi con dettagli
o j mostra i jobs
o –sort /-O sorta i processi
& Possiamo avviare un comando in background inserendo una & alla fine. Ci verrà mostrato
il PID.
jobs Permette di vedere i jobs della sessione
fg Permette di portare un job in foreground tramite il suo id (%ID)
bg Permette di avviare un job stoppato, in background
kill Invia un segnale a un processo selezionato da ID
kill -l kill -numkill %numprocesso
killall Invia un segnale a tutti i processi che matchano un pattern
pkill Come killall ma con filtri più avanzati
o - killa tutti i processi di un utente
w lista gli utenti correntemente loggati e le loro attività cumulative (mostra anche il load
average).
o -f mostra il connecting system
pgrep -l -u student : tira fuori per student i processi attivi e il loro pid
9. top mostra i processi di sistema dinamicamente, con un refresh continuo. (mostra anche il
load average).
Dati mostrati in colonna:
o PID Process ID
o USER username
o VIRT memoria virtuale utilizzata, includendo il resident set, shared libs, swap
o RES memoria fisica utilizzata
o S Process state: D (uninterruptable), R (running), S (sleeping), T (stopped/traced),
Z(zombie)
o TIME Tempo di processo CPU
o COMMAND command name
systemd fornisce un metodo per attivare risorse di sistema, daemons...
systemctl gestisce gli oggetti di systemd, detti units. Alcune tipologie di units:
o .service rappresenta un system service -> avvia frequently accessed daemons
o .socket rappresenta socket di comunicazione inter-processo.
o .path utilizzati per ritardare l'attivazione di un servizio finché avviene uno specifico
cambiamento di file
Opzioni:
o status Mostra lo status di un servizio
o –type=service | socket | path Mostra lo status del determinato type
(service/socket/path)
o is-active
o is-enabled
o list-units
o list-unit-files
o –failed mostra solo i servizi falliti
o --all per far vedere anche le unità inattive
Comandi:
o mask : maschera un servizio per impedirne l'avvio
o unmask : unmaschera un servizio
o disable : disabilita a boot
o enable : avvia a boot
o stop
o start
o restart
o reload ricarica config
o list-dependencies
Daemon
Processo che gira in background, avviato al boot, funziona fino allo shutdown. Per convenzione,
finiscono per d
Socket
Canale di comunicazione con client locali e remoti. Creabile da daemons, o separati. Passato al
daemon quando viene istanziata una connessione.
10. Service
Si riferisce di solito a uno o più daemon, ma avviare/stoppare un servizio fa un one-time change
allo stato del sistema, che non richiede un daemon.
Ricerca
grep permette di utilizzare RegEx per isolare dati matchanti
utilizzo basic: grep 'RegEx' /file
utilizzo piped: ps aux | grep '^student'
Opzioni:
o -i disattiva case sensitivity
o -v Inverti la ricerca
o -r ricerca ricorsiva
o -A mostra n linee dopo il match
o -B mostra n linee prima del match
o -e multiple regex con or
REGEX:
o ^ inizio di una riga
o $ fine di una riga
o [abc…..] identifica o a o b o c o …
o * qualsiasi stringa di caratteri
o serve per non fare interpretare alla bash dei simboli come comandi, ma solo come
simboli
which mostra il path dell'eseguibile di un comando
Scripts
echo serve per stampare a monitor una stringa
# È un commento per script bash, a meno che non sia escapato. Non viene stampato con
echo
Variabili: Possiamo creare variabili con l'uguale NOMEVARIABILE=x e richiamarle con
$NOMEVARIABILE oppure ${NOMEVARIABILE}, preferibile in caso di ambiguità.
In /etc/profile si possono inserire le variabili d’ambiente che dovranno essere disponibili per tutti
gli utenti del sistema, mentre in ~/.bashrc o ~/.bash_profile si possono inserire delle variabili
specifiche per l’utente (ricordo che ~/ identifica la directory base dell’utente corrente). A questo
punto bisognerà effettuare un logout e poi il login per avere le variabili impostate, oppure
rileggere il file modificato con il comando source.
11. Arithmetic Expansion:
Possiamo anche eseguire arithmetic expansion grazie alle doppie parentesi, come $((2+2)). Gli
operatori sono i soliti.
For loop: Il for scorre gli argomenti di uno ad uno. Sintassi:
for VARIABLE in LIST; do
<COMMAND>
done
RICORDA:
LIST: {1..3}
cut -d: -f1 divide la parola nei : e si estrae il primo elemento
cut -c 1 prende la prima lettera della parola
tr ‘A-Z’ ‘a-z’ trasforma il maiuscolo in minuscolo
PER STAMPARE UN FILE RIGA PER RIGA
1. for ENTRY in $(cat $FILE); do
2. while IFS="" read -r p || [ -n "$p" ]
do
printf '%sn' "$p"
done < peptides.txt
Debug:
Aggiungiamo -x a #!/bin/bash per attivare il debug, o -x all'esecuzione. Possiamo anche usare
l'istruzione "set +x" e "set -x" nello script.
Parametri posizionali:
Quando passo argomenti ad un file a riga di comando avremo che 0 corrisponde allo script stesso,
1 al primo argomento, 2 al secondo e così via. Essi possono essere richiamati con $1, $2…
Se uso $* vedo l’insieme degli argomenti come un’unica parola. Se uso $@ vedo ogni argomento
come una parola separata.
$# identifica il numero degli argomenti passati.
Exit codes:
Ogni script termina con un codice di uscita. Codice pari a 0 rappresenta un’uscita senza errori.
Codici tra 1 e 255 rappresentano errori diversi. All’interno di un file (o di uno script) è possibile
forzare un codice di uscita usando il comando exit numero. Per verificare quale è il codice di uscita
scrivere echo $?.
Test degli input
Per comparare delle espressioni testuali si usano degli operatori binari di comparazione. Usiamo la
seguente sintassi
12. [ITEM1 OPERATOR ITEM2]
Opzioni per gli interi:
o -eq uguale
o -ne diverso
o -gt maggiore
o -lt minore
o -ge maggiore uguale
o -le minore uguale
Opzioni per stringhe:
o = uguale a
o == uguale a
o != diverso
[ UNARY OPERATOR ITEM ]
Opzioni unary per stringhe :
o -z lunghezza zero
o -n not null
Opzioni unary per file:
o -b il file esiste ed è block special
o -c il file esiste ed è char special
o -d esiste ed è una directory
o -e esiste
o -f file regolare
o -L esiste ed è un symbolic link
o -r esiste ed è permessa la lettura
o -s esiste ed ha size > 0
o -w esiste ed è permessa la scrittura
o -x esiste ed è permessa l'esecuzione
Opzioni binarie per file:
o -ef stesso device ed inode
o -nt modification date più nuova
o -ot modification date più vecchia
Leganti:
o $$ and
o || or
Strutture condizionali
1. if permette di definire le condizioni così:
if <CONDITION>; then
<COMMAND>
fi
13. 2. else
if <CONDITION>; then
<COMMAND>
else <COMMAND>
fi
3. elif
if <CONDITION>; then
<COMMAND>
elif <CONDITION>;
then <COMMAND>
else <COMMAND>
fi
4. case utilizzato per evitare di inserire troppo if elif ele
case <VALUE> in
<PATTERN1>)
<COMMAND> ;;
<PATTERN2>)
<COMMAND>;;
*) <DEFCOMMAND> ;;
esac
export:
export VARIABILE permette di esportare la variabile all'environment in maniera che resti presente
anche alla fine della sessione presente.
alias:
alias permette di definire comandi personalizzati alias mycomm=’comando da eseguire’.
Per renderli permanenti, li aggiungiamo a ~/.bashrc scrivendo vi ~/.bashrc.
Per renderli disponibili ad ogni utente di sistema entra in root e modifica il file /etc/bashrc
Funzioni:
possiamo definire semplici funzioni con la notazione classica di C. Definirle in ~/.bashrc equivale
ad usarle come comandi.
Function_name () {
<COMMAND>
}
Firewall
firewalld è il metodo di default di CentOS7 per gestire host-level firewalls.
Separa l'incoming traffic in zone, ognuna avente il suo set di regole.
In ordine, matcha: indirizzo source, interfaccia, default.
La zona di default è di solito la zona public.
Il firewall può essere modificato in due modi: a riga di comando tramite firewall-cmd oppure
usando il file /etc/firewalld/
14. Configurazioni di default:
firewall-cmd
Opzioni:
o --get-default-zone auto-explainatory
o --set-default-zone=ZONE cambia sia runtime che permanent
o --get-zones lista tutte le zone disponibili
o --get-services lista i servizi predefiniti
o --add-source=<CIDR> routa tutto il traffico dall'ip alla zona specificata con --zone=<>, o
default
o --remove-source=<CIDR> rimuove la rule legata al CIDR. possiamo specificare la zona
da rimuovere
o --add-interface=<INT> routa tutto il traffico dall'interfaccia alla zona, se non spec.
default
o --change-interface=<INT> associa l'interfaccia con la zona specificata al posto di
quella di ora
o --list-all lista tutte le interfacce, source, servizi, porte per --zone=<ZONE>
o --list-all-zones lista tutto per tutte le zone
o --add-service=<SERV> permette il traffico a <SERV>, possibile specificare --zone
o --add-port=<PORT> permette traffico alla porta/protocollo. Permette –zone
Esempio:
firewall-cmd --add-port=8080/tcp –permanent
firewall-cmd --reload
o --remove-service=<SERV> rimuove il servizio dai permessi della zona specificata
o --remove-port=<PORT> rimuove la porta/protocollo dai permessi della zona specificata
15. o --reload droppa la configurazione runtime e carica la persistent
o --add-rich-rule='RULE' aggiunge una rich rule
VEDI SOTTO LE RICH RULES
o --remove-rich-rule='R' rimuove una rich rule
o --query-rich-rule='RULE' ritorna 0 se la rule è presente nella zona, 1 se no
o --list-rich-rules outputta tutte le tule nella zona specificata
Rich rules
Le rich rules permettono sintassi più complesse per le rules del firewall.
Struttura:
o rule
o [source]
o [destination]
o service|port|protocol|icmp-block|masquerade|forward-port
o [log]
o [audit]
o [accept|reject|drop] Per altre regole, firewalld.richlanguage(5) Possiamo usare le rich
rules anche per loggare roba
Ordine delle rules
L'ordinamento basic prevede
[port farwarding/masquerading]
[logging]
[deny]
[allow] Il primo match vince. Se un pacchetto non matcha nulla, di solito è denied. Le direct
rules vengono parsate prima di tutte.
Logging con rich rules
Possiamo loggare le connessioni a syslog o al kernel audit.
La sintassi basic per syslog è log [prefix=""] [level=<LEV>] [limit
value="<RATE/DURATION>"]
Esempio: firewall-cmd --permanent --zone=work --add-rich-rule='rule service name="http" log
prefix="Exercise9 " level="notice" limit value="5/s" accept'
Con loglevel= emerg, alert, crit, error, warning, notice, info, debug
duration in s, m, h, d (es. 3/m è 3 al minuto) *
Sintassi simile è usabile con audit: audit [limit value="<RATE/DURATION>"]
NAT con firewalld
firewalld supporta due tipi di NAT: masquerading (IPv4 only) e port forwarding. Col primo
inoltriamo pacchetti non diretti a noi ad un altro IP, modificandone la source. Quando la risposta
arriva, li modifichiamo di nuovo con la destination giusta. attiviamo con firewall-cmd --permanent
--zone=<ZONE> --add-masquerade o con rich rules.
16. Port forwarding
Questo, invece, inoltra il traffico di una porta ad un'altra porta, interna o esterna. Per
attivarlo, firewall-cmd --permanent --zone=<ZONE> --add-forward-
port=port=<PORTNO>:proto=<PROTOCOL>[:toport=<PORTNO>][:toaddr=<IPADDR>] Uno dei due tra toport e
toaddr va messo.
Apache HTTPD
Il webserver Apache implementa un server con supporto http, estensibile con moduli. Una volta
installato httpd-manual (incluso in httpd), e httpd.service avviato, basta vedere localhost/manual
La configurazione default è in /etc/httpd/conf/httpd.conf. Questa serve i contenuti
di /var/www/html Per attivare apache systemctl enable httpd.service, poi systemctl start
httpd.service Bisogna poi aprire firewalld:firewall-cmd --permanent --add-service=http --add-
service https e ricaricarlo firewall-cmd –reload
PER MODIFICARE LA DOCUMENT ROOT UTILIZZA LA VIRTUAL HOST.
Esempio:
cat /etc/httpd/conf.d/exercise6.conf
<VirtualHost *:8080>
DocumentRoot /exam/exercise6/
</VirtualHost>
<Directory /exam/exercise6/>
Require all granted
</Directory>
Esempio 2:
cat /etc/httpd/conf.d/exercise6.conf
<VirtualHost *:80>
ServerName www.mrwebmaster.it
ServerAlias mrwebmaster.it
DocumentRoot /exam/exercise6/
</VirtualHost>
<Directory /exam/exercise6/>
Require all granted
</Directory>
Virtual Hosts
I virtual hosts permettono di hostare più domini sullo stesso apache, in base a ip o nome. Per
comodità, definiamo i virtual hosts in file a parte in /etc/httpd/conf.d/site1.conf
genkey
genera un set di chiavi per TLS con il parametro obbligatorio , il nome di dominio completo.
chiede inoltre una lunghezza della chiave (scegliere minimo 2048 bits)
17. sputa fuori 3 file:
o <fqdn>.key (chiave privata, deve avere perm 0600 o 0400)
o <fqdn>.csr file necessario per richiedere la firma a una CA
o <fqdn>.crt il certificato pubblico per i self-signed. Permessi 0644
HTTPS su Apache
Dobbiamo prima installare il modulo mod_ssl, che genererà una configurazione default ssl.conf
18. 31/01/22, 12:22 Impara a utilizzare Docker da zero | Udemy
https://www.udemy.com/course/impara-a-utilizzare-docker-da-zero/learn/lecture/28357026#notes 1/10
(https://www.udemy.com/home/my-courses/) Impara a utilizzare Docker da zero
Contenuto del corso Panoramica D&R Note Annunci
0:10 2. Parliamo di Docker e procediamo alla sua installazione 2. Cos'è Docker
Vantaggi di docker:
isolamento -> permette di creare un sistema indipendente dall'ambiente in cui
viene installato (il container contiene tutto ciò che serve all'applicazione per
funzionare autonomamente)
portabilità -> tutte le dipendenze dell'applicazione si trovano all'interno del
container e quindi è facilmente portabile su altre piattaforme
leggerezza -> docker offre la possibilità di virtualizzare soltanto il processo
che serve e non l'intera macchina come accade nelle macchine virtuali
Crea una nota al minuto 0:04
Tutte le lezioni Ordina per più recenti
19. 31/01/22, 12:22 Impara a utilizzare Docker da zero | Udemy
https://www.udemy.com/course/impara-a-utilizzare-docker-da-zero/learn/lecture/28357026#notes 2/10
2:35 2. Parliamo di Docker e procediamo alla sua installazione 3. Prima di Docker
Cosa succedeva prima di docker? i developer dovevano consegnare il war
dell'applicazione e il manuale delle istruzioni, contenente le info su come
configurare l'host, i prerequisiti dell'host, le dipendenze e le configurazioni.
Questo generava diversi problemi perchè durante le installazioni su server
potevano insorgere problemi di compatibilità.
Con docker gli sviluppatori hanno l'app e il dockerfile. Essi riescono con essi a
creare la docker image (=rappresentazione dell'applicazione), grazie alla quale
è possibile portare l'app da un ambiente all'altro senza problemi!
0:10 2. Parliamo di Docker e procediamo alla sua installazione
4. Virtual machine Vs Container
In una VM è presente sopra il sistema operativo della macchina fisica,
l'hypervisor che serve per creare dei nuovi sistemi operativi virtuali al cui
interno possano stare delle applicazioni con le proprie dipendenze -> maggior
consumo di risorse e lentezza.
In un container non è presente l'hypervisor e non si devono virtualizzare i
sistemi operativi. Questo perchè docker permette di virtualizzare il processo; i
3 container condivideranno il sistema operativo dell'host -> minor consumo di
risorse, velocità.
0:10 2. Parliamo di Docker e procediamo alla sua installazione 5. docker engine
docker engine = host dove è installato docker. è composto da:
docker daemon: processo in background che gestisce i vari oggetti che è
possibile creare con docker
rest API: API che comunicano con docker daemon per impartire comandi
docker cli: command line per impartire i comandi.
0:17 2. Parliamo di Docker e procediamo alla sua installazione
6. container vs image
20. 31/01/22, 12:22 Impara a utilizzare Docker da zero | Udemy
https://www.udemy.com/course/impara-a-utilizzare-docker-da-zero/learn/lecture/28357026#notes 3/10
docker hub è un repository dove ci stanno le immagini docker. Un'immagine è
una sorta di manuale d'istruzione dal quale è possibile creare il container. In
particolare dall'immagine si possono creare infiniti container; è come una
classe java astratta che può essere implementata in diversi modi.
COMANDO DI CREAZIONE CONTAINER DA IMMAGINE = docker run image
2:09 3. Docker command 9. docker run
Ogni immagine presenta più strati -> se alcuni strati sono già presenti in locale
perchè in comune con un immagine precedentemente pullata non verranno
pullati nuovamente.
PER VEDERE I CONTAINER ATTIVI E NON ATTIVI: docker ps -a
Il container è attivo per la durata del processo. Eseguito esso vanno in Exit!!!!!!
PER CAMBIARE NOME AD UN CONTAINER: docker run --name nomenuovo
nomeimmagine
Per rinominare un container usa docker rename nomenuovo nomevecchio
0:36 3. Docker command 10. cos'è un tag
Un tag è un'etichetta che viene aggiunta all'immagine ad esempio per
specificarne la versione. La default è latest ma se scrivo docker run
immagine:nomeversione posso scaricare anche una versione
diversa/precedente dell'immagine.
1:13 3. Docker command 11. detach e attach mode
Per eseguire un container in background usa -d
Per eseguire un terminale sul container usa -it. in questo modo anche
un'immagine che corrisponde ad esempio ad un sistema operativo (come
alpine) che terminerebbe subito nell'esecuzione, resta attiva perchè sta
eseguendo il terminale
-->> docker run -d -it nomeimmagine
Con docker attach containerid ci si può collegare all'interno di un container in
esecuzione. Per uscire poi usa exit. Per uscire da attach mantenendo in
esecuzione il container usa CTRL + p CTRL + q.
21. 31/01/22, 12:22 Impara a utilizzare Docker da zero | Udemy
https://www.udemy.com/course/impara-a-utilizzare-docker-da-zero/learn/lecture/28357026#notes 4/10
Una volta eseguito il comando attach è possibile sapere se quel container1 è
in comunicazione nella rete con un altro container2. Per saperlo usa ping -c 2
nomecontainer2.
0:39 3. Docker command 13. stop e remove
Per stoppare un container docker stop idcontainer
Per rimuovere un container docker rm idcontainer.
Per forzare la rimozione quando il container è ancora attivo usa -f, oppure
docker kill.
Per rimuovere un immagine docker rmi nomeimmagine
Per forzare l'eliminazione di un'immagine usa -f.
Per vedere tutte le immagini usa docker images
Per esportare immagine in file locale docker save -o nomefile nomeimmagine
Scaricare immagini da registry docker pull nomeimmagine
Scaricare immagini da file docker load -i nomefile
1:53 3. Docker command 15. stdin
Usa docker run -i nomeimmagine per aprire un input in cui si può inserire il
testo in maniera interattiva. Se metti -it (= -i + -t) ottieni anche un terminale. se
metti solo -t apri il terminale ma non hai la possibilità di scriverci dentro
Con docker exec -it idcontainer bash apro un terminale nel container
Con docker ps -a -q -f status=exited visualizzo tutti i container inattivi
Con docker rm $(docker ps -a -q -f status=exited) elimino tutti i container
inattivi
6:48 4. Dockerfile 17. Il dockerfile
-t per aggiungere un tag
Con docker build percorsodovesitrovadockerfile -t
nomeprofilo/nomeimmagine vado a buildare l'immagine.
Con docker history nomeimmagine si può vedere il peso di ogni strato
dell'immagine.
22. 31/01/22, 12:22 Impara a utilizzare Docker da zero | Udemy
https://www.udemy.com/course/impara-a-utilizzare-docker-da-zero/learn/lecture/28357026#notes 5/10
NOTA: con nome profilo si intende il nomeprofilo di docker hub. per loggarsi
usa docker login credenziali
Esistono due modi per scrivere le istruzioni di un docker file:
EXEC (il programma viene eseguito in modo esplicito): docker run
["nomecomando", "parametro1", "parametro2"]
SHELL: docker run nomecomando parametro
Per mettere l'immagine sul repository scrivi docker push
nomeprofilo/nomeimmagine
0:26 4. Dockerfile 17. Il dockerfile
Il dockerfile contiene delle istruzioni che servono per creare l'immagine. Non
ha un'estensione e si deve chiamare dockerfile. Ogni istruzione forma un layer.
FROM: permette di creare l'immagine a partire da un'immagine di partenza (es:
from ubuntu);
RUN: per eseguire un comando;
WORKDIR: cartella dove vengono eseguiti i comandi inseriti nella CMD
COPY[“source1”, ..., “destination”]: copio i dati da una directory esterna ad una
interna al container;
ENTRYPOINT: è il comando che viene eseguito allo start del container.
CMD: è il comando che viene eseguito nel container.
ENV: per inserire variabili d'ambiente
LABEL aggiunge informazioni delle immagini
EXPOSE:numeroporta apre una porta su quel numero
VOLUME ["..."] monta un volume.
ONBUILD definisce un'istruzione da eseguire se l'immagine è usata come base
per costruire qualcos'altro
2:12 4. Dockerfile 19. CMD vs ENTRYPOINT
CMD/ENTRYPOINT:
Con CMD si identifica un comando (es: sleep 20) che può essere
tranquillamente sostituito se passo un nuovo comando con docker run
nomecomando parametro (es: docker run sleep 10).
CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)
Con ENTRYPOINT si identifica un comando (es: sleep) che non può essere
sostituito. è quello di base, si può solo aggiungere ad esempio dei parametri
(es:20 per ottenere ENTRYPOINT sleep 20). Se sono presenti entrambi si
23. 31/01/22, 12:22 Impara a utilizzare Docker da zero | Udemy
https://www.udemy.com/course/impara-a-utilizzare-docker-da-zero/learn/lecture/28357026#notes 6/10
esegue prima il comando in entrypoint e se si passa un nuovo comando
tramite docker run nomecomando va a sostituire il comando nel cmd. per
aggiungere un parametro all'entrypoint occorre usare docker run --entrypoint
nomeparametro.
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
Con docker commit --change='ENTRYPOINT ["val"]' --change='CMD ["val"]'
nomecontainer cambi i valori
5:45 5. Variabili d'ambiente 20. Variabili d'ambiente
Le variabili d'ambiente sono le variabili che possono essere settate con un
valore predefinito e possono essere richiamate da qualsiasi parte nel sistema.
Si scrive docker run -e CHIAVE=valore nomecontainer / docker run --env
CHIAVE=valore nomecontainer
Nel dockerfile scrivi ENV CHIAVE=valore. Se poi riscrivi docker run -e
chiave=valore, andrai a sostituire il valore della chiave che era presente prima
nell'ENV del dockerfile.
Con docker inspect idcontainer vai ad ispezionare il container e puoi vedere
anche il valore della variabile d'ambiente del container
Con docker run --env-file percorsofile nomecontainer è possibile scrivere le
variabili d'ambiente in un file invece che direttamente a riga di comando
Per sostituire le variabili d'ambiente in un file con variabili di ambiente presenti
in un altro file inserisci nel Dockerfile in CMD envsubst <
fileconfigurazionenuova.txt > fileconfigurazionevecchia.conf
2:40 6. Port mapping 22. port mapping
Per poter accedere dall'host al container è necessario mappare la porta.
Per farlo si usa docker run -p 8080:80 nomeimmagine (con 8080 porta host e
80 porta container). vi accederai in questo modo scrivendo 127.0.0.1:8080
È possibile impostare restrizioni sull'utilizzo delle risorse in Docker utilizzando
il comando -m o --memory
L'opzione --cpu-shares <integer> specifica il peso relativo del contenitore
0:48 7. Volumi 24. cosa sono i volumi e come crearne uno
24. 31/01/22, 12:22 Impara a utilizzare Docker da zero | Udemy
https://www.udemy.com/course/impara-a-utilizzare-docker-da-zero/learn/lecture/28357026#notes 7/10
Quando rimuovi un container perdi i file che erano presenti al suo interno. Per
evitare che accada occorre usare i volumi.
In particolare esistono 2 tipi di volumi:
1. Bind mount: directory o file sul sistema operativo host
2. Gestito da Docker: spazio controllato dal demone Docker
BIND MOUNT
docker run -v pathhost:pathcontainer nomecontainer(:versione) -> vai a
salvare le cose dal path container al pathhost
DOCKER-MANAGED
I volumi sono creati in una parte del filesystem dell'host, di proprietà di Docker:
docker volume create nomevolume
docker run -v nomevolume:pathcontainer
Per richiamarlo poi in un altro container usa docker run --volumes-from
nomecontainer
Per rimuovere un container e i suoi managed volume usa docker rm -v
<container>
Per eliminare manualmente i volumi usa docker volume ls -qf dangling=true
oppure docker volume rm $(docker volume ls -qf dangling=true) oppure
docker volume prune
0:18 8. Networking e come creare la propria rete 26. cos'è il Networking
Con networking si intende una rete nella quale i container possono
comunicare tra loro.
BRIDGE: default. I vari container comunicano tra di loro, ma non con l'host.
NONE: nessuna rete, il container è completamente isolato. -> docker run --
network=none nomecontainer
HOST: elimina l'isolamento tra container e l'host andando a mappare la porta
del container con la porta dell'host. -> docker run --network=host
nomecontainer
0:20 8. Networking e come creare la propria rete 27. Crezione di una rete custom
25. 31/01/22, 12:22 Impara a utilizzare Docker da zero | Udemy
https://www.udemy.com/course/impara-a-utilizzare-docker-da-zero/learn/lecture/28357026#notes 8/10
Per creare un nostro network personalizzato usa docker network create -d
bridge nomerete.
NOTA: -d sta per driver non detach!
Con docker network ls vedi tutti i network presenti nella macchina
Per collegare un container alla rete usa docker network connect nomerete
nomecontainer. Quando colleghi un container ad una rete personalizzata, lo
"stacchi" dalla rete bridge di default.
Con docker network disconnect nomerete nomecontainer lo disconnetti dalla
rete
Con docker network rm nomerete rimuove il network
Con docker network prune si rimuovono tutti i network non utilizzati
Con docker network inspect ispezioni il network.
Con docker inspect nomecontainer puoi vedere anche il network al quale è
collegato
0:13 9. Docker registry 29. cos'è un registry
Il docker registry contiene tutte le immagini possibili (docker hub di default)
0:26 10. Docker links 32. cosa sono links e a cosa servono
Con i link è possibile fare comunicare i container tra loro.
Redis è un memory cache che salva le informazioni come un database -> lo
apro con docker run -d --name=redis redis
collego un container a redis: docker run -d --link redis:redis nomecontainer
Viene utilizzato però solitamente docker compose, o in alternativa kubernetis
0:07 11. file YAML
33. Come si usa e per cosa viene maggiormente utilizzato un file YAML
Uno YAML è usato come estensione per i file di configurazione. Si basa
sull'indentazione, non sulle parentesi.
26. 31/01/22, 12:22 Impara a utilizzare Docker da zero | Udemy
https://www.udemy.com/course/impara-a-utilizzare-docker-da-zero/learn/lecture/28357026#notes 9/10
LISTE:
nome:
- val1
- val2
OGGETTO:
nome:
attr1: valore
attr2: valore
4:14 12. Docker Compose 34. cos'è docker compose e a cosa serve
se scrivo in alto version 2 viene creata in automatico una rete per tutti i
container inseriti nel yaml -> links non si usa più ma si usa depends_on:
nomecontainer2 (sta a significare che deve prima startare container2 e poi
container1).
version: "2"
services:
nomecontainer
........... STESSO CONTENUTO DELLA VERSIONE 1
Con il comando docker-compose up si starta il file yaml
Con docker-compose down si bloccano tutti i container
0:20 12. Docker Compose 34. cos'è docker compose e a cosa serve
Docker usa un file di configurazione scritto in yaml per startare più container
contemporaneamente.
il file è docker-compose.yml
nomecontainer:
image: nomeimmagine
----------> in alternativa build: percorsoimmagine se l'immagine l'ho creata io e
devo buildarla
ports: ["8080"] (porta esposta, equivalente di -p)
environment: (equivalente di -e)
CHIAVE:"valore"
links: nomecontainer2 (linko i duecontainer)