Al comando con la command line
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
797
On Slideshare
797
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
4
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. State al comando con la command line $ Giuseppe Maxia The Data Charmer QA Director, Continuent, Inc 1Friday, October 26, 12
  • 2. Giuseppe Maxia Un po di informazioni personali ‣ Noto anche come "The Data Charmer" ‣ Direttore del controllo di qualità a Continuent, Inc ‣ Sardo cosmopolita ‣ Database hacker di lunga data ‣ Blogger (http://datacharmer.blogspot.com) ‣ Curatore di MySQL Sandbox ‣ Utente Linux dal 1993 2Friday, October 26, 12
  • 3. Di cosa parliamo Questa sessione parla della linea di comando ‣ Strumenti e suggerimenti per bar gli utenti della linea di foo comando baz ‣ Imparare qualche trucco per scrivere meno e produrre di più ‣ Far diventare gli utenti di interfacce grafiche verdi di invidia ... 3Friday, October 26, 12
  • 4. Definiamo il problema Quando serve usare la linea di comando ... ‣ Supponiamo che abbiate un documento • con una data nel formato "mm-gg-aaaa" • volete trasformarla in "aaaa.mm.gg" (o "gg.mm.aaaa") ‣ Utente GUI • Aprire il documento con Word (Open/LibreOffice) • Modificare la data ‣ Utente Linea di comando • Probabilmente fa lo stesso 4Friday, October 26, 12
  • 5. Aumentiamo il problema Quando serve usare la linea di comando ... ‣ Supponiamo che abbiate un documento • con molte date nel formato "mm-gg-aaaa" • volete trasformarle in "aaaa.mm.gg" (o "gg.mm.aaaa") ‣ Utente GUI • Aprire il documento con ... uh, qualcosa • Sperare che supporti espressioni regolari ‣ Utente Linea di comando • Usa vi o emacs e risolve con un comando 5Friday, October 26, 12
  • 6. Modificare una data con vi Questo e uno dei modi ... Il vostro testo contiene 12-25-2012 e anche 08-31-1978, e perfino 01-04-2004. Alcune righe dopo, troviamo anche 05-12-1995. :%s/(dd)-(dd)-(dddd)/3.2.1/g 6Friday, October 26, 12
  • 7. Modificare una data con vi Questo e uno dei modi ... Il vostro testo contiene 2012.25.12 e anche 1978.31.08, e perfino 2004.04.01. Alcune righe dopo, troviamo anche 1995.12.05. 7Friday, October 26, 12
  • 8. In effetti, potete anche usare OpenOffice ‣ Se sapete usare espressioni regolari, anche con OpenOffice o LibreOffice potete arrivare alla stessa soluzione. ‣ Siamo ancora (quasi) in parità ‣ ma ... 8Friday, October 26, 12
  • 9. Ma il problema può farsi più interessante Quando veramente serve usare la linea di comando ... ‣ Supponiamo che abbiate molti documenti • con molte date nel formato "mm-gg-aaaa" • volete trasformarle in "aaaa.mm.gg" (o "gg.mm.aaaa") ‣ Utente GUI • ??? ‣ Utente Linea di comando • Usa sed o perl dalla linea di comando 9Friday, October 26, 12
  • 10. Molte date da cambiare in + documenti Qui nessuno batte la command line perl -i -pe s/(dd)-(dd)-(d{4})/$3.$2.$1/g *.txt Oppure, se volete la soluzione più difficile: sed -i -E s/([0-9][0-9])-([0-9][0-9])-([0-9] [0-9][0-9][0-9])/3.2.1/g *.txt 10Friday, October 26, 12
  • 11. Intermezzo Che diavolo sono quei segni orribili sullo schermo? ‣ Espressioni regolari (regular expressions) ‣ Un linguaggio di ricerca testuale ‣ Usato in diversi ambienti (inclusi molti editor grafici!) ‣ Diversi dialetti (come in Sardegna) ‣ Utile come linglese ‣ Difficile come il sardo (per gli italiani) ‣ Facile come il sardo (per i sardi: basta capirli!) 11Friday, October 26, 12
  • 12. Espressioni regolari in due schermate Cercare un carattere in un testo e molto facile $ (echo "Ciao"; echo "mondo"; echo "2012") Ciao mondo 2012 $ (echo "Ciao"; echo "mondo"; echo "2012") | grep "a" Ciao $ (echo "Ciao"; echo "mondo"; echo "2012") | grep "o" Ciao mondo 12Friday, October 26, 12
  • 13. espressioni regolari in due schermate Certi caratteri hanno un senso particolare$ (echo "Ciao"; echo "mondo"; echo "2012") | grep "w"Ciaomondo2012$ (echo "Ciao";echo "mondo"; echo "2012") | grep "[0-9]"2012$ (echo "Ciao";echo "mondo";echo "2012")|grep "[0-9a-z]"Ciaomondo2012 13Friday, October 26, 12
  • 14. Ho barato. Ce una terza schermata Certi caratteri hanno un senso ancora piu particolare$ (echo "Ciao"; echo sei nel;echo "2012") | grep "s"sei nel$ (echo !Ciao; echo 2012!) | grep "W"!Ciao2012!$ (echo !Ciao; echo 2012!) | grep "^W"!Ciao$ (echo !Ciao; echo 2012!) | grep "W$"2012! 14Friday, October 26, 12
  • 15. In realtà ci sarebbero altre schermate ... Ci sono tante cose da imparare! ‣ Ma la lasciamo per unaltra sessione ‣ nel frattempo, se avete perso il film, vi consiglio il libro! http://regex.info/ 15Friday, October 26, 12
  • 16. ? ‣ Perché usare la linea di comando? 16Friday, October 26, 12
  • 17. Una storia di apprendimento Quello che ho imparato con Microsoft diventa inutile dopo pochi anni. Quello che ho imparato con Unix e ancora valido 1985-90 • MS-DOS • Unix shell 1991 • Windows 3.0 1993 • Windows 3.1 • Linux 1994 • Windows NT 1995-97 • Windows 95 1998-99 • Windows 98 2000-2001 • Windows 2000 2001-2006 • Windows XP • Mac OSX 2007-2009 • Windows Vista 2010-2011 • Windows 7 2012- • Windows 8 17Friday, October 26, 12
  • 18. Introduciamo la linea di comando Per principianti |||| ‣ Prima di tutto: niente panico! 18Friday, October 26, 12
  • 19. Che cosa e il panico da command line? Quando un principiante incontra la linea di comando $_ ‣ E ora che faccio? 19Friday, October 26, 12
  • 20. La linea di comando Un po di conoscenza e passa la paura ‣ Principi 20Friday, October 26, 12
  • 21. La shell Il personaggio principale ‣ E un interprete di comandi ‣ Ce sono vari dialetti • bash • csh • ksh • zsh ‣ Noi ci occupiamo solo di "bash" 21Friday, October 26, 12
  • 22. i comandi interni della shell la shell può fare molte cose senza aiuto di altri ‣ echo ‣ export ‣ alias ‣ for ‣ while ‣ test ‣ pwd ‣ ... 22Friday, October 26, 12
  • 23. i comandi esterni E poi ci sono programmi che si trovano in tutte le macchine Unix ‣ man, ls, cd, find, grep ‣ date, mv, cp ‣ rm, mkdir, rmdir ‣ cat, sed ‣ strings, wc, head, tail ‣ more/less ‣ sort 23Friday, October 26, 12
  • 24. E altri strumenti Per completare il quadro ‣ Shell scripts ‣ Aliases ‣ Perl Che può sostituire tutto il resto, se volete ‣ awk ‣ sort ‣ …. E un sacco di altri piccoli aiuti da Unix 24Friday, October 26, 12
  • 25. Uno strumento che useremo E il gestore del database MySQL ‣ Si chiama "mysql" ‣ Riceve comandi SQL ‣ Li invia al server di database ‣ Riceve risultati ‣ Ma può fare molte altre cose ... 25Friday, October 26, 12
  • 26. Se non fosse chiaro finora .. Meglio specificare ... ‣ Le azioni alla linea di comando sono: • comandi (il nome dellapplicazione da lanciare) • parametri (argomenti opzionali per il comando) • E il tasto ENTER (detto anche INVIO o RETURN) Enter 26Friday, October 26, 12
  • 27. La filosofia di Unix (I) Che non e uno stile di vita, ma un modo efficiente di lavorare ‣ Uno strumento per ogni funzionalità • Crea uno strumento che fa bene una cosa • Per fare molte cose, crea molti strumenti • Falli lavorare insieme (vedi la prossima slide) 27Friday, October 26, 12
  • 28. La filosofia di Unix (II) E un po come "Usa la forza!" ma funziona! ‣ Per far cooperare diversi strumenti: • Attacca luscita di uno strumento allingresso di un altro. • Per avere più azioni, attacca più strumenti. $ sort < filename | uniq | nl 28Friday, October 26, 12
  • 29. Unix pipes (flussi applicativi) Lingresso e luscita di unapplicazione possono essere diretti a unaltra application < input application > output application < input > output application | application output input 29Friday, October 26, 12
  • 30. Unix pipes = elaborazione parallela Non si deve aspettare che la prima applicazione abbia finito per cominciare a elaborare la seconda application | application output input 30Friday, October 26, 12
  • 31. Dove vanno i vostri comandi I comandi inseriti alla tastiera possono andare a finire in diverse applicazioni shell prompt $ mysql mysql client mysql server 23 31Friday, October 26, 12
  • 32. Dove sono i destinatari Il comando inserito al terminale talvolta viaggia lontano any host mysql server shell mysql client 32Friday, October 26, 12
  • 33. Chi riceve che cosa Vediamo alcuni casi $ mysql -u username -ppassword Prima lapplicazione, poi il server 33Friday, October 26, 12
  • 34. Chi riceve che cosa Vediamo alcuni casi $ mysql -u username -ppassword -e "select VERSION()" Va prima al client mysql, poi al server Va al server 34Friday, October 26, 12
  • 35. Chi riceve che cosa Vediamo alcuni casi mysql> help mysql> pager less goes to theclient (comandi Va solo al client only interni) mysql> select 1; va al server 35Friday, October 26, 12
  • 36. La linea di comando Un componente importante ma poco noto ‣ READLINE • Componente comune • nella shell • nel client mysql • in molti programmi Unix 36Friday, October 26, 12
  • 37. readline (1) Ci sono combinazioni di tasti che salvano la vita Ctrl A Inizio, fine della riga Ctrl E Meta B Indietro/Avanti di una parola Meta F Comando precedente/ seguente Ctrl L Cancella lo schermo e porta il cursore in alto Ctrl R Cerca comandi precedenti 37Friday, October 26, 12
  • 38. readline (2) Per cambiare il testo Meta U Trasforma parola in MAIUSCOLO Meta L Trasforma parola in minuscolo Ctrl D Cancella parola Ctrl K Cancella fino alla fine della riga Ctrl - Elimina ultima azione Altri consigli: $ man readline 38Friday, October 26, 12
  • 39. bash Il primo attore ‣ Componenti: • • • comandi alias variables #! • functions 39Friday, October 26, 12
  • 40. Comandi Sono i comandi interni ed esterni $ echo "something" something 40Friday, October 26, 12
  • 41. Alias Creazione di nuovi comandi al volo $ alias mydate=mysql -e "select NOW()" $ mydate +---------------------+ | now() | +---------------------+ | 2010-04-12 07:14:19 | +---------------------+ 41Friday, October 26, 12
  • 42. Alias Un alias si può usare dentro un altro alias $ alias myself=mysql $ myself -e "select NOW()" +---------------------+ | now() | +---------------------+ | 2010-04-12 07:14:19 | +---------------------+ 42Friday, October 26, 12
  • 43. Variables Valori che sostituiscono testo $ MYBATCH=mysql -N -B $ MYQUERY=select curdate() $ $MYBATCH -e "$MYQUERY" 2010-04-12 43Friday, October 26, 12
  • 44. Variabili annidate Una dentro laltra! # t.sh CMD="SELECT TABLE_NAME" TBL=information_schema.tables WHC1="TABLE_SCHEMA=mysql" WHC2="TABLE_NAME like u% " Q1="$CMD FROM $TBL" Q2="WHERE $WHC1 AND $WHC2" Q="$Q1 $Q2" echo $Q echo $Q | mysql 44Friday, October 26, 12
  • 45. Uso delle variabili annidate Le variabili vengono espanse durante lesecuzione $ sh t.sh SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_SCHEMA=mysql AND TABLE_NAME like u% TABLE_NAME user 45Friday, October 26, 12
  • 46. Il client mysql $ mysql < filename.sql mysql> source filename.sql mysql> ‣ Esegue i comandi contenuti in filename.sql ‣ I comandi possono essere query che vengono mandate al server ‣ e comandi che solo il client capisce 46Friday, October 26, 12
  • 47. Il client mysql $ application | mysql $ echo "SELECT 1" | mysql $ mysql -e "SELECT 1" ‣ Esegue i comandi da "standard input" ‣ I comandi possono essere query che vengono mandate al server ‣ e comandi che solo il client capisce 47Friday, October 26, 12
  • 48. Il client mysql - batch mode $ echo "select curdate()" | mysql curdate() 2010-04-12 ‣ In batch mode, loutput non viene abbellito 48Friday, October 26, 12
  • 49. Il client mysql - table mode $ echo "select curdate()" | mysql -t +------------+ | curdate() | +------------+ | 2010-04-12 | +------------+ ‣ In table mode, loutput viene abbellito 49Friday, October 26, 12
  • 50. Il client mysql - table mode $ mysql -e "select curdate()" +------------+ | curdate() | +------------+ | 2010-04-12 | +------------+ ‣ Table mode viene inteso automaticamente quando il comando e passato con il parametro "-e" 50Friday, October 26, 12
  • 51. Il client mysql - senza testata $ mysql -N -B -e select curdate() 2010-04-12 ‣ IMPORTANTE! possiamo forzare il batch mode (-B) e allo stesso tempo eliminare i nomi di colonne (-N) ‣ Questo ci serve per costruire comandi complessi 51Friday, October 26, 12
  • 52. Comandi dentro testo Un comando viene eseguito se inserito in virgolette inverse Comandi fra virgolette inverse (inverse quotes) ( `` ) Oppure usando $() $ echo "The current servers date is `mysql -N -B -e select curdate()`." $ echo "The current servers date is $(mysql -N -B -e select curdate())." 52Friday, October 26, 12
  • 53. Cicli (loops) Se potete eseguire cicli dalla linea di comando, nulla può resistervi ‣ Non sono cicli da pedalare, ma da eseguire 53Friday, October 26, 12
  • 54. Cicli - le basi Un ciclo semplice $ for N in 1 2 3 > do > echo $N > done 1 2 3 54Friday, October 26, 12
  • 55. Cicli - le basi Lo stesso ciclo, ma su una sola riga $ for N in 1 2 3 ; do echo $N ; done 1 2 3 55Friday, October 26, 12
  • 56. Cicli - le basi Un ciclo può usare una lista create da un programma $ seq 1 3 1 2 3 $ for N in $(seq 1 3) ; do echo "this is number $N" ; done this is number 1 this is number 2 this is number 3 56Friday, October 26, 12
  • 57. Cicli da un file Ecco una decina di righe da un !le $ head /usr/share/dict/words A a aa aal aalii aam Aani aardvark aardwolf 57Friday, October 26, 12
  • 58. Cicli da un file Usando un !le come input, il ciclo esegue unoperazione su ogni elemento $ for U in $(head /usr/share/dict/words ) ; do perl -le print uc shift $U ; done A A AA AAL AALII AAM AANI 58Friday, October 26, 12
  • 59. Allo stesso modo si usa output da mysql Per esempio, lelenco di tabelle da un database $ mysql -B -N -e show tables from world City Country CountryLanguage 59Friday, October 26, 12
  • 60. Output da mysql in un ciclo Creazione di comandi usando lelenco di tabelle $ for T in $(mysql -B -N -e show tables from world) ; > do echo "CREATE TABLE world2.$T LIKE world.$T;" ; done CREATE TABLE world2.City LIKE world.City; CREATE TABLE world2.Country LIKE world.Country; CREATE TABLE world2.CountryLanguage LIKE world.CountryLanguage; 60Friday, October 26, 12
  • 61. usare il risultato del ciclo con MySQL Questa e tutta la magia del ciclo: Il risultato di mysql viene usato come input per il ciclo; Il ciclo produce comandi SQL; Il risultato del ciclo (comandi SQL) viene reindirizzato a mysql stesso, che cosi facendo esegue i comandi $ for T in $(mysql -B -N -e show tables from world) ; > do echo "CREATE TABLE world2.$T LIKE world.$T;" ; done > | mysql -vv 61Friday, October 26, 12
  • 62. Cicli annidati Un po piu difficile. Ma questo metodo e la chiave dellonnipotenza da sysadmin ‣ Un ciclo dentro un ciclo 62Friday, October 26, 12
  • 63. Per esempio usando mysql Vediamo la lista dei database $ mysql -e "show databases" +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | sakila | | world | +--------------------+ 63Friday, October 26, 12
  • 64. Usando mysql Possiamo fare qualcosa con le tabelle di un database $ mysql -e "show tables from world" +-----------------+ | Tables_in_world | +-----------------+ | City | | Country | | CountryLanguage | +-----------------+ 64Friday, October 26, 12
  • 65. In teoria Up to a one line subtitle per ogni database esegui per ogni tabella esegui Fai qualcosa con la tabella corrente del database corrente 65Friday, October 26, 12
  • 66. In pratica Usando una combinazione di comandi nel testo e cicli, abbiamo alias mybatch=mysql -B -N for D in $(mybatch -e "SHOW SCHEMAS") do for T in $(mybatch -e "SHOW TABLES FROM $D") do echo "SHOW CREATE TABLE $D.$T;" done done 66Friday, October 26, 12
  • 67. Concludendo Largomento e lungo ‣ Potrei parlare di questo argomento per tre ore ‣ (In effetti lho fatto alcune volte) ‣ Ma oggi, con soli 40 minuti, non possiamo ‣ Quindi vi lascio un elenco di letture 67Friday, October 26, 12
  • 68. Altri talk come questo e buone letture Ci sono altri talk, più lunghi, che spiegano molti altri trucchi, e il mio blog ha riferimenti ad argomenti simili ‣ http://slideshare.net/datacharmer ‣ http://datacharmer.blogspot.com 68Friday, October 26, 12
  • 69. ALcuni libri da considerare Se volete considerare la linea di comando seriamente, ecco alcune risorse 69Friday, October 26, 12
  • 70. Questo conclude la mia presentazione Troverete le slides nel sito http://slideshare.net/datacharmer qualche ora dopo la presentazione Grazie per lattenzione 70Friday, October 26, 12