SlideShare a Scribd company logo
1 of 31
Download to read offline
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.
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
 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
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
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
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)
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.
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
 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.
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.
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
[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
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/
 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
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.
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)
 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
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
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
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.
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.
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
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
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
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.
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)
SOLUZIONI ESERCIZI DOCKER
ESAME 2 12-02-2021 – esercizio 10 / ESAME 6 27-08-2021 – esercizio 10
cat Dockerfile
FROM centos:8
ENV DOCKER="Docker"
RUN yum -y install httpd gettext
WORKDIR /var/www/html
COPY start.html /var/www/html
EXPOSE 80
CMD cd /var/www/html && envsubst < start.html > index.html
CMD /usr/sbin/httpd -D FOREGROUND
cat start.html
<!DOCTYPE html>
<html>
<body>
<h1> Hello $DOCKER !! </h1>
</body>
</html>
cat docker-compose.yml
services:
exercise10:
build:
context: .
dockerfile: Dockerfile
environment:
- DOCKER="Arianna"
ports:
- "80:80"
ESAME 3 07-04-2021 – esercizio 10
cat Dockerfile
FROM centos:8
ENV EXAM="exam"
COPY start.sh /start.sh
RUN chmod +x /start.sh
CMD ["/start.sh"]
cat start.sh
#!/bin/sh
for i in {1..5}
do
echo "Hello &EXAM!!"
sleep 2
done
echo "Goodbye!"
cat docker-compose.yml
services:
exercise10:
build:
context: .
dockerfile: Dockerfile
environment:
- EXAM="amministrazione"
ESAME 4 11-06-2021 – esercizio 9
Cat dockerexam.sh
#!/bin/sh
echo "hello $NAME!!"
Cat Dockerfile
FROM centos:8
ENV NAME=exam
COPY dockerexam.sh / dockerexam.sh
RUN chmod +x /dockerexam.sh
CMD ["/dockerexam.sh"]
docker build -t exam/myhelloexam .
docker run -e NAME=Arianna exam/myhelloexam
ESAME 4 11-06-2021 – esercizio 10
cat docker-compose.yml
services:
mysqldb:
image: mysql:5.7
volumes:
- ./mysql:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: exercise10
MYSQL_USER: exam
MYSQL_PASSWORD: eXaM@1
wpwebsite:
depends_on:
- mysqldb
image: wordpress:latest
volumes:
- ./worpress:/var/www/html
ports:
- "8080:80"
restart: always
environment:
WORDPRESS_DB_HOST: mysqldb:3306
WORDPRESS_DB_USER: exam
WORDPRESS_DB_PASSWORD: eXaM@1
WORDPRESS_DB_NAME: exercise10
ESAME 1 22-02-2021 – esercizio 10 / ESAME 5 02-07-2021 – esercizio 10
Cat Dockerfile
FROM centos:8
ENV EXAM=exam
COPY hello.sh /hello.sh
RUN chmod +x /hello.sh
CMD ["/hello.sh"]
Cat hello.sh
#!/bin/sh
echo "hello $EXAM!!"
Cat docker-compose.yml
services:
web:
build:
context: .
dockerfile: Dockerfile
environment:
- EXAM="amministrazione"
ESAME 7 10-09-2021 – esercizio 10
Cat hello.sh
#!/bin/sh
echo "hello $NAME!!"
Cat Dockerfile
FROM centos:8
ENV NAME=exam
COPY hello.sh /hello.sh
RUN chmod +x /hello.sh
CMD ["/hello.sh"]
docker build -t exam/myhelloexam:1.0 .
docker run -e NAME=Arianna exam/myhelloexam:1.0
ESAME 1 19-01-2022
cat docker-compose.yml
version: "3.8"
services:
web:
build:
context: .
dockerfile: Dockerfile
environment:
EXAM: amministrazione
ports:
- "80:80"
cat Dockerfile
FROM centos:8
ENV EXAM=exam
COPY template.html /var/www/html
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh && yum -y install httpd gettext
EXPOSE 80
ENTRYPOINT ["/entrypoint.sh"]
cat entrypoint.sh
cd /var/www/html
CMD=$(which envsubst)
$CMD < template.html > index.html
/usr/sbin/httpd -D FOREGROUND
cat template.html
<!DOCTYPE html>
<html>
<head>
<title>Exam</title>
</head>
<body>
<b>Hello $EXAM</b>
</body>
</html>

More Related Content

What's hot

Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxAlex Palesandro
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaAlessandro Selli
 
Sistema operativo Unix e Linux
Sistema operativo Unix e LinuxSistema operativo Unix e Linux
Sistema operativo Unix e LinuxGiulia Shkreli
 
Lug Roma3 Corso Linux Avanzato
Lug Roma3   Corso Linux AvanzatoLug Roma3   Corso Linux Avanzato
Lug Roma3 Corso Linux Avanzatofosk
 
Installazione di koha_su_debian_v2_0_20_12_2014
Installazione di koha_su_debian_v2_0_20_12_2014Installazione di koha_su_debian_v2_0_20_12_2014
Installazione di koha_su_debian_v2_0_20_12_2014Joaquim Hangalo
 
Linux@Unina
Linux@UninaLinux@Unina
Linux@UninaNaLUG
 
Seminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in LinuxSeminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in Linuxalberto fiaschi
 
Ridirezionamento di I/O con Bash: un breve approfondimento
Ridirezionamento di I/O con Bash: un breve approfondimentoRidirezionamento di I/O con Bash: un breve approfondimento
Ridirezionamento di I/O con Bash: un breve approfondimentoBabel
 
Lug Roma3 Corso Linux Base
Lug Roma3   Corso Linux BaseLug Roma3   Corso Linux Base
Lug Roma3 Corso Linux Basefosk
 
RiminiLUG. Mini Corso su Linux p2: Networking & Terminal
RiminiLUG. Mini Corso su Linux p2: Networking & TerminalRiminiLUG. Mini Corso su Linux p2: Networking & Terminal
RiminiLUG. Mini Corso su Linux p2: Networking & TerminalAlessandro Carichini
 
PostgreSQL: Prima configurazione
PostgreSQL: Prima configurazionePostgreSQL: Prima configurazione
PostgreSQL: Prima configurazioneEnrico Pirozzi
 

What's hot (18)

Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/Linux
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compatta
 
Sistema operativo Unix e Linux
Sistema operativo Unix e LinuxSistema operativo Unix e Linux
Sistema operativo Unix e Linux
 
Lug Roma3 Corso Linux Avanzato
Lug Roma3   Corso Linux AvanzatoLug Roma3   Corso Linux Avanzato
Lug Roma3 Corso Linux Avanzato
 
Installazione di koha_su_debian_v2_0_20_12_2014
Installazione di koha_su_debian_v2_0_20_12_2014Installazione di koha_su_debian_v2_0_20_12_2014
Installazione di koha_su_debian_v2_0_20_12_2014
 
Bash intro
Bash introBash intro
Bash intro
 
Linux shell
Linux shellLinux shell
Linux shell
 
Corso Bash
Corso BashCorso Bash
Corso Bash
 
Linux@Unina
Linux@UninaLinux@Unina
Linux@Unina
 
Seminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in LinuxSeminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in Linux
 
Il simulatore NS-2
Il simulatore NS-2Il simulatore NS-2
Il simulatore NS-2
 
Ridirezionamento di I/O con Bash: un breve approfondimento
Ridirezionamento di I/O con Bash: un breve approfondimentoRidirezionamento di I/O con Bash: un breve approfondimento
Ridirezionamento di I/O con Bash: un breve approfondimento
 
Oracle 2 (sqlplus)
Oracle 2 (sqlplus)Oracle 2 (sqlplus)
Oracle 2 (sqlplus)
 
Lug Roma3 Corso Linux Base
Lug Roma3   Corso Linux BaseLug Roma3   Corso Linux Base
Lug Roma3 Corso Linux Base
 
RiminiLUG. Mini Corso su Linux p2: Networking & Terminal
RiminiLUG. Mini Corso su Linux p2: Networking & TerminalRiminiLUG. Mini Corso su Linux p2: Networking & Terminal
RiminiLUG. Mini Corso su Linux p2: Networking & Terminal
 
Php e database: php mysql
Php e database: php mysqlPhp e database: php mysql
Php e database: php mysql
 
Bash Scripting
Bash ScriptingBash Scripting
Bash Scripting
 
PostgreSQL: Prima configurazione
PostgreSQL: Prima configurazionePostgreSQL: Prima configurazione
PostgreSQL: Prima configurazione
 

Similar to As it e icloud

Server linux samba in un dominio
Server linux samba in un dominioServer linux samba in un dominio
Server linux samba in un dominioSaverio Menin
 
Linux & Open Source : Lezione Quattro
Linux & Open Source : Lezione QuattroLinux & Open Source : Lezione Quattro
Linux & Open Source : Lezione QuattroDario Mazza
 
Pycrashcourse
PycrashcoursePycrashcourse
Pycrashcourserik0
 
6 Linux Gestioni Pacchetti Debian
6 Linux Gestioni Pacchetti Debian6 Linux Gestioni Pacchetti Debian
6 Linux Gestioni Pacchetti DebianMauro Ferrigno
 
Sistemi operativi Fabiano Dalla Piazza
Sistemi operativi  Fabiano Dalla PiazzaSistemi operativi  Fabiano Dalla Piazza
Sistemi operativi Fabiano Dalla PiazzaFabiano Dalla Piazza
 
8 Linux Comandi Di Sistema
8 Linux Comandi Di Sistema8 Linux Comandi Di Sistema
8 Linux Comandi Di SistemaMauro Ferrigno
 
Chi ha paura della command-line? - WordCamp Roma 2018
Chi ha paura della command-line? - WordCamp Roma 2018Chi ha paura della command-line? - WordCamp Roma 2018
Chi ha paura della command-line? - WordCamp Roma 2018Marco Chiesi
 
Sistemi di Build Alternativi
Sistemi di Build AlternativiSistemi di Build Alternativi
Sistemi di Build AlternativiDario Bertini
 
Pycrashcourse3.1
Pycrashcourse3.1Pycrashcourse3.1
Pycrashcourse3.1rik0
 
Pycrashcourse3.0
Pycrashcourse3.0Pycrashcourse3.0
Pycrashcourse3.0rik0
 

Similar to As it e icloud (17)

X2 Linux Riassunti
X2 Linux RiassuntiX2 Linux Riassunti
X2 Linux Riassunti
 
Server linux samba in un dominio
Server linux samba in un dominioServer linux samba in un dominio
Server linux samba in un dominio
 
Linux shell
Linux shellLinux shell
Linux shell
 
Linux & Open Source : Lezione Quattro
Linux & Open Source : Lezione QuattroLinux & Open Source : Lezione Quattro
Linux & Open Source : Lezione Quattro
 
Sistema Operativo - LInux - Modulo 2.1
Sistema Operativo - LInux - Modulo 2.1Sistema Operativo - LInux - Modulo 2.1
Sistema Operativo - LInux - Modulo 2.1
 
Pycrashcourse
PycrashcoursePycrashcourse
Pycrashcourse
 
6 Linux Gestioni Pacchetti Debian
6 Linux Gestioni Pacchetti Debian6 Linux Gestioni Pacchetti Debian
6 Linux Gestioni Pacchetti Debian
 
Sistemi operativi Fabiano Dalla Piazza
Sistemi operativi  Fabiano Dalla PiazzaSistemi operativi  Fabiano Dalla Piazza
Sistemi operativi Fabiano Dalla Piazza
 
8 Linux Comandi Di Sistema
8 Linux Comandi Di Sistema8 Linux Comandi Di Sistema
8 Linux Comandi Di Sistema
 
GNU Linux introduction
GNU Linux introductionGNU Linux introduction
GNU Linux introduction
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
 
Chi ha paura della command-line? - WordCamp Roma 2018
Chi ha paura della command-line? - WordCamp Roma 2018Chi ha paura della command-line? - WordCamp Roma 2018
Chi ha paura della command-line? - WordCamp Roma 2018
 
Sistemi di Build Alternativi
Sistemi di Build AlternativiSistemi di Build Alternativi
Sistemi di Build Alternativi
 
Php mysql3
Php mysql3Php mysql3
Php mysql3
 
Pycrashcourse3.1
Pycrashcourse3.1Pycrashcourse3.1
Pycrashcourse3.1
 
Idp, passo dopo passo!
Idp, passo dopo passo!Idp, passo dopo passo!
Idp, passo dopo passo!
 
Pycrashcourse3.0
Pycrashcourse3.0Pycrashcourse3.0
Pycrashcourse3.0
 

Recently uploaded

GIORNATA TECNICA 18/04 | DE LEO Antonio
GIORNATA TECNICA 18/04  | DE LEO AntonioGIORNATA TECNICA 18/04  | DE LEO Antonio
GIORNATA TECNICA 18/04 | DE LEO AntonioServizi a rete
 
GIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA SimoneGIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA SimoneServizi a rete
 
Presentzione Matematica similitudini circonferenze e omotetie.pptx
Presentzione  Matematica similitudini circonferenze e omotetie.pptxPresentzione  Matematica similitudini circonferenze e omotetie.pptx
Presentzione Matematica similitudini circonferenze e omotetie.pptxfilippoluciani9
 
GIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO RaffaeleGIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO RaffaeleServizi a rete
 
Descrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptxDescrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptxtecongo2007
 
GIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI MassimoGIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI MassimoServizi a rete
 
GIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI AlessandroGIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI AlessandroServizi a rete
 
GIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO SerenaGIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO SerenaServizi a rete
 
GIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA RobertoGIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA RobertoServizi a rete
 

Recently uploaded (9)

GIORNATA TECNICA 18/04 | DE LEO Antonio
GIORNATA TECNICA 18/04  | DE LEO AntonioGIORNATA TECNICA 18/04  | DE LEO Antonio
GIORNATA TECNICA 18/04 | DE LEO Antonio
 
GIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA SimoneGIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
 
Presentzione Matematica similitudini circonferenze e omotetie.pptx
Presentzione  Matematica similitudini circonferenze e omotetie.pptxPresentzione  Matematica similitudini circonferenze e omotetie.pptx
Presentzione Matematica similitudini circonferenze e omotetie.pptx
 
GIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO RaffaeleGIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO Raffaele
 
Descrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptxDescrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptx
 
GIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI MassimoGIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
 
GIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI AlessandroGIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI Alessandro
 
GIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO SerenaGIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
 
GIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA RobertoGIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA Roberto
 

As it e icloud

  • 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)
  • 27. SOLUZIONI ESERCIZI DOCKER ESAME 2 12-02-2021 – esercizio 10 / ESAME 6 27-08-2021 – esercizio 10 cat Dockerfile FROM centos:8 ENV DOCKER="Docker" RUN yum -y install httpd gettext WORKDIR /var/www/html COPY start.html /var/www/html EXPOSE 80 CMD cd /var/www/html && envsubst < start.html > index.html CMD /usr/sbin/httpd -D FOREGROUND cat start.html <!DOCTYPE html> <html> <body> <h1> Hello $DOCKER !! </h1> </body> </html> cat docker-compose.yml services: exercise10: build: context: . dockerfile: Dockerfile environment: - DOCKER="Arianna" ports: - "80:80" ESAME 3 07-04-2021 – esercizio 10 cat Dockerfile FROM centos:8 ENV EXAM="exam" COPY start.sh /start.sh RUN chmod +x /start.sh CMD ["/start.sh"] cat start.sh #!/bin/sh for i in {1..5}
  • 28. do echo "Hello &EXAM!!" sleep 2 done echo "Goodbye!" cat docker-compose.yml services: exercise10: build: context: . dockerfile: Dockerfile environment: - EXAM="amministrazione" ESAME 4 11-06-2021 – esercizio 9 Cat dockerexam.sh #!/bin/sh echo "hello $NAME!!" Cat Dockerfile FROM centos:8 ENV NAME=exam COPY dockerexam.sh / dockerexam.sh RUN chmod +x /dockerexam.sh CMD ["/dockerexam.sh"] docker build -t exam/myhelloexam . docker run -e NAME=Arianna exam/myhelloexam ESAME 4 11-06-2021 – esercizio 10 cat docker-compose.yml services: mysqldb: image: mysql:5.7 volumes: - ./mysql:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: exercise10 MYSQL_USER: exam
  • 29. MYSQL_PASSWORD: eXaM@1 wpwebsite: depends_on: - mysqldb image: wordpress:latest volumes: - ./worpress:/var/www/html ports: - "8080:80" restart: always environment: WORDPRESS_DB_HOST: mysqldb:3306 WORDPRESS_DB_USER: exam WORDPRESS_DB_PASSWORD: eXaM@1 WORDPRESS_DB_NAME: exercise10 ESAME 1 22-02-2021 – esercizio 10 / ESAME 5 02-07-2021 – esercizio 10 Cat Dockerfile FROM centos:8 ENV EXAM=exam COPY hello.sh /hello.sh RUN chmod +x /hello.sh CMD ["/hello.sh"] Cat hello.sh #!/bin/sh echo "hello $EXAM!!" Cat docker-compose.yml services: web: build: context: . dockerfile: Dockerfile environment: - EXAM="amministrazione" ESAME 7 10-09-2021 – esercizio 10 Cat hello.sh
  • 30. #!/bin/sh echo "hello $NAME!!" Cat Dockerfile FROM centos:8 ENV NAME=exam COPY hello.sh /hello.sh RUN chmod +x /hello.sh CMD ["/hello.sh"] docker build -t exam/myhelloexam:1.0 . docker run -e NAME=Arianna exam/myhelloexam:1.0 ESAME 1 19-01-2022 cat docker-compose.yml version: "3.8" services: web: build: context: . dockerfile: Dockerfile environment: EXAM: amministrazione ports: - "80:80" cat Dockerfile FROM centos:8 ENV EXAM=exam COPY template.html /var/www/html COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh && yum -y install httpd gettext EXPOSE 80 ENTRYPOINT ["/entrypoint.sh"] cat entrypoint.sh cd /var/www/html CMD=$(which envsubst)
  • 31. $CMD < template.html > index.html /usr/sbin/httpd -D FOREGROUND cat template.html <!DOCTYPE html> <html> <head> <title>Exam</title> </head> <body> <b>Hello $EXAM</b> </body> </html>