Negli ultimi decenni le interfacce uomo-macchina dei sistemi informatici si sono evolute incessantemente con l’obiettivo di rendere l’interazione con gli utenti sempre più semplice e intuitiva.
Ci sono però ambiti specifici in cui l’interfaccia a “riga di comando” si dimostra tutt’oggi uno strumento insostituibile. Ne è la dimostrazione il crescente successo del progetto WP-CLI, supportato ufficialmente da WordPress.
Non è indispensabile essere programmatori o sistemisti per trarre un vantaggio diretto e tangibile dall’utilizzo di strumenti basati su riga di comando. Questo talk, dopo una rapida introduzione sull’argomento, presenterà una carrellata di esempi pratici e di semplice applicazione, in cui l’uso della command-line può far risparmiare tantissimo tempo.
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)
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
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
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:
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.
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:
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:
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