SlideShare a Scribd company logo
1 of 61
Download to read offline
CHI HA PAURA DELLA
COMMAND-LINE?
>_
Marco Chiesi
Hello!
I am Marco Chiesi
■ Ingegnere informatico
■ Lead Engineer @ Black Studio
■ Sviluppo Web dal 1998
■ Sviluppo WordPress dal 2010
■ Organizzatore WP Meetup Teramo
@marcochiesi
marco@blackstudio.it
www.blackstudio.it
Human-Computer Interaction (HCI)
... ...
Design
Ergonomia
Informatica
Ingegneria
Psicologia
Sociologia
Multidisciplinarità
HCI
Schede
perforate
Stampa su nastro
di carta
Terminale
tastiera + video
WIMP
Window, Icon,
Menu, Pointer
GUI
(Graphical User
Interface)
World Wide Web
Smartphone e Tablet
(touchscreen)
Comandi vocali
Realtà virtuale
12
Realtà aumentata
Obiettivo primario dell'evoluzione HCI
Rendere l’interazione tra macchine e utenti:
■ più semplice
■ più intuitiva
■ più accessibile
■ etc
Attenzione
Non è detto che un'interfaccia più "moderna"
sia necessariamente anche più efficiente!
In ambiti specifici le interfacce più "datate"
tutt'oggi possono avere una marcia in più!
Shell
Riga di comando Terminale
Prompt dei comandi
Console SSH
Tutti questi termini non sono propriamente
sinonimi, ma hanno in comune il riferimento alla
Command Line Interface (CLI)
COMMAND-LINE
Interfaccia utente caratterizzata da un'interazione
di tipo testuale tra utente ed elaboratore. L'utente
impartisce comandi testuali in input mediante
tastiera alfanumerica e riceve risposte testuali in
output dall'elaboratore mediante display o
stampante alfanumerici.
>_
(da Wikipedia)
“
Ok, ma cosa c'entra WordPress?
Ogni giorno uno sviluppatore
WordPress si sveglia e sa che
potrà rendere più efficiente il
proprio lavoro grazie a tool
basati su command-line.
Ogni giorno un amministratore
di siti WordPress si sveglia e ha
paura della command-line
perché non ne conosce i
vantaggi.
Non importa che tu sia uno sviluppatore o no.
Usa la command-line e soprattutto WP-CLI!
L'utilizzo della command-line può
essere utile ed efficiente per specifiche
operazioni su installazioni WordPress,
soprattutto grazie a WP-CLI, un
insieme di strumenti per la gestione di
WordPress da riga di comando.
SHELL
La parte di un sistema operativo che permette agli
utenti di interagire con il sistema stesso,
impartendo comandi e richiedendo l'avvio di altri
programmi.
>_
(da Wikipedia)
Come accedere alla shell?
■ Linux: integrata (che domande!)
■ Mac: app Terminale (integrata) oppure
app esterne tipo iTerm2
■ Windows:
○ Prompt dei comandi (integrato): poco evoluta
○ Powershell (integrata): più evoluta
○ Windows Subsystem for Linux (WSL): consente di
installare una vera shell Linux su Windows
○ Cygwin: pacchetto che fornisce funzionalità simili
a Linux in ambiente Windows
○ MinGW: porting di utility Linux su Windows
Bash
■ bash è una shell testuale molto diffusa in
ambienti Unix-like come Linux e macOS.
■ bash mette a disposizione un semplice
linguaggio di scripting che permette di
svolgere compiti più complessi, non solo
raccogliendo in uno script una serie di
comandi, ma anche utilizzando variabili,
funzioni e strutture di controllo di flusso.
■ Elenco comandi su https://ss64.com/bash/
SSH
(Secure SHell)
SSH è un protocollo che permette di stabilire
una sessione remota cifrata tramite interfaccia a
riga di comando con un altro host.
>_
(da Wikipedia)
SSH (Secure SHell)
Per utilizzare SSH è sufficiente usare l'omonimo
comando tramite una shell locale:
ssh [opzioni] nomeutente@host
Oppure utilizzare un client SSH:
■ Putty, Kitty (Windows)
■ Termius (multipiattaforma)
SSH da Mobile
Ci sono varie app utilizzabili
come client SSH da mobile:
■ JuiceSSH (Android)
■ ConnectBot (Android)
■ Termius (Android+iOS)
■ ...
Qualche trucchetto (scorciatoie da tastiera)
■ Pulsanti mouse sx/dx: copia/incolla
■ Tasto TAB: autocompletamento
■ Tasti ↑ e ↓: riuso comandi precedenti
■ Ctrl + A: cursore a inizio linea
■ Ctrl + E: cursore a fine linea
■ Ctrl + L: pulizia schermata
■ Ctrl + C: interrompe esecuzione
Com'è fatto un comando?
user@pc:~$
user@pc:~$ ls -l /home
prompt
comando argomento
opzione
Alcune convenzioni
■ . indica la cartella corrente
■ .. indica la cartella padre della corrente
■ ~ indica la cartella "home" dell'utente
■ / indica la cartella "radice" del file-system
(usato anche come separatore nei percorsi)
■ $ per accedere alle variabili d'ambiente
■ & alla fine di un comando, ne provoca
l'esecuzione in background
■ # per commentare
Aiuto in linea
Per accedere alla documentazione di un
comando:
man [comando]
[comando] --help
Esempio:
man ls
ls --help
Comandi di base per gestire file
■ pwd visualizzazione cartella corrente
■ cd cambio cartella
■ mkdir creazione cartella
■ rmdir creazione cartella
■ ls elenco file di una cartella
■ mv spostamento/ridenominazione
■ cp copia file (anche ricorsiva)
■ rm rimozione file (anche ricorsiva)
■ chmod modifica permessi file/cartelle
■ chown modifica proprietà file/cartelle
■ find cerca file/cartelle
Comandi per trasferimento remoto di file
■ wget trasferimento via HTTP/FTP
■ scp copia tramite SSH
■ ftp client FTP interattivo
■ ncftp client FTP interattivo più evoluto
■ rsync sincronizzazione remota (molto
efficiente ed utilizzabile anche in locale)
Canali di comunicazione
Ogni comando è dotato di tre canali di
comunicazione a cui è associato un indice:
■ 0 (standard input): di default input
immesso da tastiera
■ 1 (standard output): di default video del
terminale
■ 2 (standard error): canale su cui
vengono inviati messaggi di errore, di
default è il video del terminale
Redirezioni e pipe
Quando si lancia un comando è possibile effettuare delle
redirezioni dei canali a/da file di testo o a/da altri comandi:
■ < redirezione dello standard input
■ > redirezione dello standard output (il file viene azzerato)
■ >> redirezione dello standard output con append (l'output
viene inserito alla fine del file)
■ 2> redirezione dello standar error
■ &> redirezione di entrambi lo standard output ed error
■ | (pipe) redirezione dell'output del comando che precede la
pipe all'input del comando che segue la pipe
Redirezioni e pipe - Esempi
comando > output.txt
comando < input.txt >> output.txt
comando1 | comando2 | comando3
comando | more
comando > /dev/null
Installazione di un
sito WordPress
Esempio 1
Installazione WordPress classica
1. Aprire un browser
2. Visitare sito it.wordpress.org
3. Scaricare il pacchetto ZIP
4. Scompattare il pacchetto
5. Caricare i file via FTP
6. ... aspettare ...
7. Aprire il browser e lanciare la procedura
di installazione di WordPress
Installazione WordPress con Command-line (no WP-CLI)
1. Aprire una shell
2. Cambiare directory
3. Eseguire uno script che effettua
download e scompattazione
4. Aprire il browser e lanciare la procedura
di installazione di WordPress
Installazione WordPress con Command-line (no WP-CLI)
wget https://it.wordpress.org/wordpress-4.9.8-it_IT.zip
unzip wordpress-4.9.8-it_IT.zip
mv wordpress/* .
rmdir wordpress
rm wordpress-4.9.8-it_IT.zip
Dopodichè l'installazione
è da effettuare sul browser.
Installazione WordPress (WP-CLI)
1. Aprire una shell
2. Cambiare directory
3. Eseguire script che con comandi WP-CLI
effettua:
○ Download pacchetto
○ Scompattazione pacchetto
○ Creazione del wp-config.php
○ Installazione completa di WordPress
Senza passare dal browser!
Installazione WordPress con WP-CLI
wp core download --locale=it_IT
wp config create --prompt
wp core install --prompt
Si possono anche installare/attivare plugin
wp plugin install contact-form-7
wp plugin activate contact-form-7
Clonazione di un
sito WordPress
Esempio 2
Clonazione di un sito WordPress (manuale)
1. Copiare tutti i file dalla cartella sorgente alla
cartella di destinazione
2. Modificare le credenziali MySQL nel
wp-config.php
3. Esportare il database sorgente facendo un
dump SQL tramite phpMyAdmin
4. Importare il dump SQL nel database di
destinazione
5. Effettuare search&replace URL nel database
(attenzione ai dati serializzati!)
Clonazione di un sito WordPress (WP-CLI)
1. Aprire una shell
2. Eseguire script che con comandi WP-CLI
effettua:
○ Copia dei file
○ Modificare credenziali MySQL nel wp-config.php
○ Esportazione del database sorgente
○ Importazione nel database di destinazione
○ Search & Replace database
Clonazione di un sito WordPress (WP-CLI)
cd $1
wp db export wp.sql
cp -R $1 $2
cd $2
wp config edit
wp db import wp.sql
wp search-replace $3 $4
rm $1/wp.sql $2/wp.sql
./clone.sh /src /dest http://src http://dest
Esempio di utilizzo:
Migrazione di un
sito WordPress
Esempio 3
Migrazione di un sito WordPress
La migrazione di un sito WordPress da un
host all'altro è molto simile al caso della
clonazione, con la differenza che la copia
dei file è remota anziché locale.
■ Approccio tradizionale:
download/upload via (S)FTP
■ Approccio CLI: a seconda dei servizi
disponibili sull'host sorgente utilizzo di
rsync, ssh (scp) o (s)ftp.
Migrazione di un sito WordPress con WP-CLI
Copia file con rsync via SSH:
rsync -avz user@domain.com:/site/* /site
Copia file con wget via FTP:
wget -m --ftp-user=USERNAME 
--ftp-password=PASSWORD 
ftp://domain.com/folder/
Per il resto la procedura è come la clonazione.
Verificare la versione di
WordPress, plugin e temi
Esempio 4
Scenario
Dato un server di produzione con decine di siti
WordPress installati si vuole verificare il
numero di versione del Core, di plugin e temi.
Ad esempio è stata scoperta una vulnerabilità
e occorre sapere se si è a rischio.
Verificare la presenza e la versione di installazioni WP
wp find /home
find /home -type d -name wp-includes 
-exec echo {} ; 
-exec grep "wp_version =" {}/version.php ;
In alternativa c'è anche un comando WP-CLI:
Ricerca tutte le installazioni di WordPress e ne
mostra il numero di versione:
Verificare la presenza e la versione di PLUGIN
find /home -type d -wholename "*/plugins/wordpress-seo" 
-exec echo {} ; 
-exec grep "Version:" {}/wp-seo.php ;
find /home -type d -wholename "*/plugins/plugin-folder" 
-exec echo {} ; 
-exec grep "Version:" {}/plugin-file.php ;
Esempio (Yoast SEO):
Ricerca tutte le occorrenze di un plugin e ne
mostra il numero di versione:
Verificare la presenza e la versione di TEMI
find /home -type d -wholename "*/themes/twentyseventeen" 
-exec echo {} ; 
-exec grep "Version:" {}/style.css ;
find /home -type d -wholename "*/themes/theme-folder" 
-exec echo {} ; 
-exec grep "Version:" {}/style.css ;
Esempio (Twenty Seventeen):
Ricerca tutte le occorrenze di un tema e ne
mostra il numero di versione:
Verifica di integrità di una
installazione WordPress
Esempio 5
Dopo che un sito è stato compromesso, è
consigliabile verificare l'integrità di tutti i file
presenti nel sistema per assicurarsi che non ci
siano residui di codice malevolo nascosti
all'interno di file legittimi (o che sembrano
legittimi).
Verifica di integrità
wp core verify-checksums --locale=it_IT
wp plugin verify-checksums --all
wp checksum all
wp checksum theme
Con l'addon di terze parti wp-checksum è
possibile controllare anche i temi:
WP-CLI ha dei sub-comandi nativi per verificare
l'integrità dei file del Core e dei plugin:
Migrazione dei messaggi di
una casella email
Esempio 6
Migrazione manuale dei messaggi di una casella email
1. Avviare un client di posta IMAP
2. Configurare l'account e-mail sorgente
3. Configurare l'account e-mail di
destinazione
4. Effettuare il drag&drop di singole cartelle
e/o messaggi
Nota: Se qualcosa va storto durante il
trasferimento, occorre ricopiare.
Migrazione messaggi e-mail con imapsync
imapsync --host1 [...] --user1 [...] --password1 [...] 
--ssl1 --port1 993 
--host2 [...] --user2 [...] --password2 [...] 
--ssl2 --port2 993
imapsync è uno strumento utilizzabile da riga di
comando con cui è possibile sincronizzare i
messaggi tra due account IMAP
Esempio:
Migrazione messaggi e-mail da cPanel a GMail/GSuite
imapsync --exclude "[Gmail]/Tutti i messaggi" 
--regextrans2 "s,Sent$,[Gmail]/Posta inviata," 
--regextrans2 "s,Junk$,[Gmail]/Spam," 
--regextrans2 "s,Trash$,[Gmail]/Cestino," 
--regextrans2 "s,Drafts$,[Gmail]/Bozze," 
--host1 localhost --user1 $1 --password1 "$2" 
--ssl1 --port1 993 
--host2 imap.gmail.com --user2 $3 --password2 "$4" 
--ssl2 --port2 993
È anche possibile rimappare i nomi delle cartelle
di default in caso siano diversi sui due server:
Grazie!
Domande?
@marcochiesi
marco@blackstudio.it
www.blackstudio.it
Slide disponibili su:
blackstudio.it/talks/
Credits
Un ringraziamento speciale agli
organizzatori del WordCamp Roma 2018.
Materiali utilizzati nella presentazione:
■ Template Slide di SlidesCarnival
■ Fotografie: Wikipedia, Unsplash

More Related Content

What's hot

Introduzione Alla Uml Mconsole
Introduzione Alla Uml MconsoleIntroduzione Alla Uml Mconsole
Introduzione Alla Uml Mconsole
Majong DevJfu
 
Partizionamento_Dualboot_Andreapazo_LD09
Partizionamento_Dualboot_Andreapazo_LD09Partizionamento_Dualboot_Andreapazo_LD09
Partizionamento_Dualboot_Andreapazo_LD09
andreapazzo
 

What's hot (20)

Docker Fudamentals
Docker FudamentalsDocker Fudamentals
Docker Fudamentals
 
Introduzione ros
Introduzione rosIntroduzione ros
Introduzione ros
 
Linux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneLinux Kernel, driver e compilazione
Linux Kernel, driver e compilazione
 
Da 0 all'open per PA e PMI
Da 0 all'open per PA e PMIDa 0 all'open per PA e PMI
Da 0 all'open per PA e PMI
 
Protocollo ssh
Protocollo sshProtocollo ssh
Protocollo ssh
 
Service Backup Online
Service Backup OnlineService Backup Online
Service Backup Online
 
LTSP
LTSPLTSP
LTSP
 
Vagrant e Docker a confronto;scegliere ed iniziare
Vagrant e  Docker a confronto;scegliere ed iniziareVagrant e  Docker a confronto;scegliere ed iniziare
Vagrant e Docker a confronto;scegliere ed iniziare
 
Condivisione di dischi - NFS - Reti miste Windows/Linux - SMB e NetBIOS - Sam...
Condivisione di dischi - NFS - Reti miste Windows/Linux - SMB e NetBIOS - Sam...Condivisione di dischi - NFS - Reti miste Windows/Linux - SMB e NetBIOS - Sam...
Condivisione di dischi - NFS - Reti miste Windows/Linux - SMB e NetBIOS - Sam...
 
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
 
Giochiamo ai COW-boy : zfs & btrfs
Giochiamo ai COW-boy : zfs & btrfsGiochiamo ai COW-boy : zfs & btrfs
Giochiamo ai COW-boy : zfs & btrfs
 
Riutilizzo di risorve video
Riutilizzo di risorve videoRiutilizzo di risorve video
Riutilizzo di risorve video
 
Introduzione Alla Uml Mconsole
Introduzione Alla Uml MconsoleIntroduzione Alla Uml Mconsole
Introduzione Alla Uml Mconsole
 
Partizionamento_Dualboot_Andreapazo_LD09
Partizionamento_Dualboot_Andreapazo_LD09Partizionamento_Dualboot_Andreapazo_LD09
Partizionamento_Dualboot_Andreapazo_LD09
 
Bookalive Klaus Kempf Presentazione: Record, Zend e archiviazione
Bookalive Klaus Kempf Presentazione: Record, Zend e archiviazioneBookalive Klaus Kempf Presentazione: Record, Zend e archiviazione
Bookalive Klaus Kempf Presentazione: Record, Zend e archiviazione
 
Google cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetesGoogle cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetes
 
Resocontolinuxlite
ResocontolinuxliteResocontolinuxlite
Resocontolinuxlite
 
CodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 2 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studio
 
GZIP, TAR, BZIP2
GZIP, TAR, BZIP2GZIP, TAR, BZIP2
GZIP, TAR, BZIP2
 

Similar to Chi ha paura della command-line? - WordCamp Roma 2018

Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/Linux
Alex Palesandro
 

Similar to Chi ha paura della command-line? - WordCamp Roma 2018 (20)

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
 
Infrastructure as Data
Infrastructure as DataInfrastructure as Data
Infrastructure as Data
 
Seminario team working - 21-1-2015
Seminario team working - 21-1-2015Seminario team working - 21-1-2015
Seminario team working - 21-1-2015
 
Tools & librerie PHP
Tools & librerie PHPTools & librerie PHP
Tools & librerie PHP
 
La Virtualizzazione 2010
La Virtualizzazione 2010La Virtualizzazione 2010
La Virtualizzazione 2010
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
Conferenza Pymaemo
Conferenza PymaemoConferenza Pymaemo
Conferenza Pymaemo
 
Linux Security Hardening - panoramica sui principi generali per la riduzione...
Linux  Security Hardening - panoramica sui principi generali per la riduzione...Linux  Security Hardening - panoramica sui principi generali per la riduzione...
Linux Security Hardening - panoramica sui principi generali per la riduzione...
 
Hardening
HardeningHardening
Hardening
 
GNU Linux Programming introduction
GNU Linux Programming introductionGNU Linux Programming introduction
GNU Linux Programming introduction
 
Da Zero all'open per PA e PMI
Da Zero all'open per PA e PMIDa Zero all'open per PA e PMI
Da Zero all'open per PA e PMI
 
Idp, passo dopo passo!
Idp, passo dopo passo!Idp, passo dopo passo!
Idp, passo dopo passo!
 
Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)
 
Linux Day 2009 LAMP HowTo
Linux Day 2009 LAMP HowToLinux Day 2009 LAMP HowTo
Linux Day 2009 LAMP HowTo
 
Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)
 
Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/Linux
 
GNU Linux introduction
GNU Linux introductionGNU Linux introduction
GNU Linux introduction
 
Homemade Linux Server
Homemade Linux ServerHomemade Linux Server
Homemade Linux Server
 
Apache HTTP Server
Apache HTTP ServerApache HTTP Server
Apache HTTP Server
 
La Virtualizzazione
La VirtualizzazioneLa Virtualizzazione
La Virtualizzazione
 

Chi ha paura della command-line? - WordCamp Roma 2018

  • 1. CHI HA PAURA DELLA COMMAND-LINE? >_ Marco Chiesi
  • 2. Hello! I am Marco Chiesi ■ Ingegnere informatico ■ Lead Engineer @ Black Studio ■ Sviluppo Web dal 1998 ■ Sviluppo WordPress dal 2010 ■ Organizzatore WP Meetup Teramo @marcochiesi marco@blackstudio.it www.blackstudio.it
  • 13. Obiettivo primario dell'evoluzione HCI Rendere l’interazione tra macchine e utenti: ■ più semplice ■ più intuitiva ■ più accessibile ■ etc
  • 14. Attenzione Non è detto che un'interfaccia più "moderna" sia necessariamente anche più efficiente! In ambiti specifici le interfacce più "datate" tutt'oggi possono avere una marcia in più!
  • 15. Shell Riga di comando Terminale Prompt dei comandi Console SSH Tutti questi termini non sono propriamente sinonimi, ma hanno in comune il riferimento alla Command Line Interface (CLI)
  • 16. COMMAND-LINE Interfaccia utente caratterizzata da un'interazione di tipo testuale tra utente ed elaboratore. L'utente impartisce comandi testuali in input mediante tastiera alfanumerica e riceve risposte testuali in output dall'elaboratore mediante display o stampante alfanumerici. >_ (da Wikipedia)
  • 17. “ Ok, ma cosa c'entra WordPress?
  • 18. Ogni giorno uno sviluppatore WordPress si sveglia e sa che potrà rendere più efficiente il proprio lavoro grazie a tool basati su command-line. Ogni giorno un amministratore di siti WordPress si sveglia e ha paura della command-line perché non ne conosce i vantaggi. Non importa che tu sia uno sviluppatore o no. Usa la command-line e soprattutto WP-CLI!
  • 19. L'utilizzo della command-line può essere utile ed efficiente per specifiche operazioni su installazioni WordPress, soprattutto grazie a WP-CLI, un insieme di strumenti per la gestione di WordPress da riga di comando.
  • 20. SHELL La parte di un sistema operativo che permette agli utenti di interagire con il sistema stesso, impartendo comandi e richiedendo l'avvio di altri programmi. >_ (da Wikipedia)
  • 21. Come accedere alla shell? ■ Linux: integrata (che domande!) ■ Mac: app Terminale (integrata) oppure app esterne tipo iTerm2 ■ Windows: ○ Prompt dei comandi (integrato): poco evoluta ○ Powershell (integrata): più evoluta ○ Windows Subsystem for Linux (WSL): consente di installare una vera shell Linux su Windows ○ Cygwin: pacchetto che fornisce funzionalità simili a Linux in ambiente Windows ○ MinGW: porting di utility Linux su Windows
  • 22. Bash ■ bash è una shell testuale molto diffusa in ambienti Unix-like come Linux e macOS. ■ bash mette a disposizione un semplice linguaggio di scripting che permette di svolgere compiti più complessi, non solo raccogliendo in uno script una serie di comandi, ma anche utilizzando variabili, funzioni e strutture di controllo di flusso. ■ Elenco comandi su https://ss64.com/bash/
  • 23. SSH (Secure SHell) SSH è un protocollo che permette di stabilire una sessione remota cifrata tramite interfaccia a riga di comando con un altro host. >_ (da Wikipedia)
  • 24. SSH (Secure SHell) Per utilizzare SSH è sufficiente usare l'omonimo comando tramite una shell locale: ssh [opzioni] nomeutente@host Oppure utilizzare un client SSH: ■ Putty, Kitty (Windows) ■ Termius (multipiattaforma)
  • 25. SSH da Mobile Ci sono varie app utilizzabili come client SSH da mobile: ■ JuiceSSH (Android) ■ ConnectBot (Android) ■ Termius (Android+iOS) ■ ...
  • 26. Qualche trucchetto (scorciatoie da tastiera) ■ Pulsanti mouse sx/dx: copia/incolla ■ Tasto TAB: autocompletamento ■ Tasti ↑ e ↓: riuso comandi precedenti ■ Ctrl + A: cursore a inizio linea ■ Ctrl + E: cursore a fine linea ■ Ctrl + L: pulizia schermata ■ Ctrl + C: interrompe esecuzione
  • 27. Com'è fatto un comando? user@pc:~$ user@pc:~$ ls -l /home prompt comando argomento opzione
  • 28. Alcune convenzioni ■ . indica la cartella corrente ■ .. indica la cartella padre della corrente ■ ~ indica la cartella "home" dell'utente ■ / indica la cartella "radice" del file-system (usato anche come separatore nei percorsi) ■ $ per accedere alle variabili d'ambiente ■ & alla fine di un comando, ne provoca l'esecuzione in background ■ # per commentare
  • 29. Aiuto in linea Per accedere alla documentazione di un comando: man [comando] [comando] --help Esempio: man ls ls --help
  • 30. Comandi di base per gestire file ■ pwd visualizzazione cartella corrente ■ cd cambio cartella ■ mkdir creazione cartella ■ rmdir creazione cartella ■ ls elenco file di una cartella ■ mv spostamento/ridenominazione ■ cp copia file (anche ricorsiva) ■ rm rimozione file (anche ricorsiva) ■ chmod modifica permessi file/cartelle ■ chown modifica proprietà file/cartelle ■ find cerca file/cartelle
  • 31. Comandi per trasferimento remoto di file ■ wget trasferimento via HTTP/FTP ■ scp copia tramite SSH ■ ftp client FTP interattivo ■ ncftp client FTP interattivo più evoluto ■ rsync sincronizzazione remota (molto efficiente ed utilizzabile anche in locale)
  • 32. Canali di comunicazione Ogni comando è dotato di tre canali di comunicazione a cui è associato un indice: ■ 0 (standard input): di default input immesso da tastiera ■ 1 (standard output): di default video del terminale ■ 2 (standard error): canale su cui vengono inviati messaggi di errore, di default è il video del terminale
  • 33. Redirezioni e pipe Quando si lancia un comando è possibile effettuare delle redirezioni dei canali a/da file di testo o a/da altri comandi: ■ < redirezione dello standard input ■ > redirezione dello standard output (il file viene azzerato) ■ >> redirezione dello standard output con append (l'output viene inserito alla fine del file) ■ 2> redirezione dello standar error ■ &> redirezione di entrambi lo standard output ed error ■ | (pipe) redirezione dell'output del comando che precede la pipe all'input del comando che segue la pipe
  • 34. Redirezioni e pipe - Esempi comando > output.txt comando < input.txt >> output.txt comando1 | comando2 | comando3 comando | more comando > /dev/null
  • 35. Installazione di un sito WordPress Esempio 1
  • 36. Installazione WordPress classica 1. Aprire un browser 2. Visitare sito it.wordpress.org 3. Scaricare il pacchetto ZIP 4. Scompattare il pacchetto 5. Caricare i file via FTP 6. ... aspettare ... 7. Aprire il browser e lanciare la procedura di installazione di WordPress
  • 37. Installazione WordPress con Command-line (no WP-CLI) 1. Aprire una shell 2. Cambiare directory 3. Eseguire uno script che effettua download e scompattazione 4. Aprire il browser e lanciare la procedura di installazione di WordPress
  • 38. Installazione WordPress con Command-line (no WP-CLI) wget https://it.wordpress.org/wordpress-4.9.8-it_IT.zip unzip wordpress-4.9.8-it_IT.zip mv wordpress/* . rmdir wordpress rm wordpress-4.9.8-it_IT.zip Dopodichè l'installazione è da effettuare sul browser.
  • 39. Installazione WordPress (WP-CLI) 1. Aprire una shell 2. Cambiare directory 3. Eseguire script che con comandi WP-CLI effettua: ○ Download pacchetto ○ Scompattazione pacchetto ○ Creazione del wp-config.php ○ Installazione completa di WordPress Senza passare dal browser!
  • 40. Installazione WordPress con WP-CLI wp core download --locale=it_IT wp config create --prompt wp core install --prompt Si possono anche installare/attivare plugin wp plugin install contact-form-7 wp plugin activate contact-form-7
  • 41. Clonazione di un sito WordPress Esempio 2
  • 42. Clonazione di un sito WordPress (manuale) 1. Copiare tutti i file dalla cartella sorgente alla cartella di destinazione 2. Modificare le credenziali MySQL nel wp-config.php 3. Esportare il database sorgente facendo un dump SQL tramite phpMyAdmin 4. Importare il dump SQL nel database di destinazione 5. Effettuare search&replace URL nel database (attenzione ai dati serializzati!)
  • 43. Clonazione di un sito WordPress (WP-CLI) 1. Aprire una shell 2. Eseguire script che con comandi WP-CLI effettua: ○ Copia dei file ○ Modificare credenziali MySQL nel wp-config.php ○ Esportazione del database sorgente ○ Importazione nel database di destinazione ○ Search & Replace database
  • 44. Clonazione di un sito WordPress (WP-CLI) cd $1 wp db export wp.sql cp -R $1 $2 cd $2 wp config edit wp db import wp.sql wp search-replace $3 $4 rm $1/wp.sql $2/wp.sql ./clone.sh /src /dest http://src http://dest Esempio di utilizzo:
  • 45. Migrazione di un sito WordPress Esempio 3
  • 46. Migrazione di un sito WordPress La migrazione di un sito WordPress da un host all'altro è molto simile al caso della clonazione, con la differenza che la copia dei file è remota anziché locale. ■ Approccio tradizionale: download/upload via (S)FTP ■ Approccio CLI: a seconda dei servizi disponibili sull'host sorgente utilizzo di rsync, ssh (scp) o (s)ftp.
  • 47. Migrazione di un sito WordPress con WP-CLI Copia file con rsync via SSH: rsync -avz user@domain.com:/site/* /site Copia file con wget via FTP: wget -m --ftp-user=USERNAME --ftp-password=PASSWORD ftp://domain.com/folder/ Per il resto la procedura è come la clonazione.
  • 48. Verificare la versione di WordPress, plugin e temi Esempio 4
  • 49. Scenario Dato un server di produzione con decine di siti WordPress installati si vuole verificare il numero di versione del Core, di plugin e temi. Ad esempio è stata scoperta una vulnerabilità e occorre sapere se si è a rischio.
  • 50. Verificare la presenza e la versione di installazioni WP wp find /home find /home -type d -name wp-includes -exec echo {} ; -exec grep "wp_version =" {}/version.php ; In alternativa c'è anche un comando WP-CLI: Ricerca tutte le installazioni di WordPress e ne mostra il numero di versione:
  • 51. Verificare la presenza e la versione di PLUGIN find /home -type d -wholename "*/plugins/wordpress-seo" -exec echo {} ; -exec grep "Version:" {}/wp-seo.php ; find /home -type d -wholename "*/plugins/plugin-folder" -exec echo {} ; -exec grep "Version:" {}/plugin-file.php ; Esempio (Yoast SEO): Ricerca tutte le occorrenze di un plugin e ne mostra il numero di versione:
  • 52. Verificare la presenza e la versione di TEMI find /home -type d -wholename "*/themes/twentyseventeen" -exec echo {} ; -exec grep "Version:" {}/style.css ; find /home -type d -wholename "*/themes/theme-folder" -exec echo {} ; -exec grep "Version:" {}/style.css ; Esempio (Twenty Seventeen): Ricerca tutte le occorrenze di un tema e ne mostra il numero di versione:
  • 53. Verifica di integrità di una installazione WordPress Esempio 5
  • 54. Dopo che un sito è stato compromesso, è consigliabile verificare l'integrità di tutti i file presenti nel sistema per assicurarsi che non ci siano residui di codice malevolo nascosti all'interno di file legittimi (o che sembrano legittimi).
  • 55. Verifica di integrità wp core verify-checksums --locale=it_IT wp plugin verify-checksums --all wp checksum all wp checksum theme Con l'addon di terze parti wp-checksum è possibile controllare anche i temi: WP-CLI ha dei sub-comandi nativi per verificare l'integrità dei file del Core e dei plugin:
  • 56. Migrazione dei messaggi di una casella email Esempio 6
  • 57. Migrazione manuale dei messaggi di una casella email 1. Avviare un client di posta IMAP 2. Configurare l'account e-mail sorgente 3. Configurare l'account e-mail di destinazione 4. Effettuare il drag&drop di singole cartelle e/o messaggi Nota: Se qualcosa va storto durante il trasferimento, occorre ricopiare.
  • 58. Migrazione messaggi e-mail con imapsync imapsync --host1 [...] --user1 [...] --password1 [...] --ssl1 --port1 993 --host2 [...] --user2 [...] --password2 [...] --ssl2 --port2 993 imapsync è uno strumento utilizzabile da riga di comando con cui è possibile sincronizzare i messaggi tra due account IMAP Esempio:
  • 59. Migrazione messaggi e-mail da cPanel a GMail/GSuite imapsync --exclude "[Gmail]/Tutti i messaggi" --regextrans2 "s,Sent$,[Gmail]/Posta inviata," --regextrans2 "s,Junk$,[Gmail]/Spam," --regextrans2 "s,Trash$,[Gmail]/Cestino," --regextrans2 "s,Drafts$,[Gmail]/Bozze," --host1 localhost --user1 $1 --password1 "$2" --ssl1 --port1 993 --host2 imap.gmail.com --user2 $3 --password2 "$4" --ssl2 --port2 993 È anche possibile rimappare i nomi delle cartelle di default in caso siano diversi sui due server:
  • 61. Credits Un ringraziamento speciale agli organizzatori del WordCamp Roma 2018. Materiali utilizzati nella presentazione: ■ Template Slide di SlidesCarnival ■ Fotografie: Wikipedia, Unsplash