Levysoft
  • Home
  • Portfolio
  • WordPress Plugin
  • Contattami

Dal 2004 il blog di Antonio Troise

RSS FeedTwitterFacebook
Lug 7 2008

Automatizzare le operazioni del cPanel da shell unix con i comandi wget, ftp e curl: download automatico del DB Mysql e monitorare la banda disponibile

Posted by Antonio Troise
Tweet

Il vantaggio di possedere un computer con Mac OS X è quello di avere sempre a disposizione, perché inclusa nativamente nel sistema operativo, una shell unix completa, per i più esperti, o Automator, per i meno esperti. Quest’ultimo strumento è una applicazione davvero potente perché consente di creare in maniera visuale, grazie ad un diagramma di flusso (workflow) e trascinando le azioni una dopo l’altra (drag & drop), programmi di automazione davvero complessi e articolati.

Ma dopo aver lavorato anni sui sistemi unix, avere sottomano una potente shell unix, è una tentazione di cui davvero non posso fare a meno. Infatti, con la semplice concatenazione di comandi (pipeline) come grep, sed e awk (altri comandi utili possono anche essere sort, uniq tail, head, cut e wc) in una sola riga, è possibile estrarre (scraping) informazioni da pagine web. Infatti, struttando il fatto che le pagine html sono, anche se in misura minora ad un più ordinato e formattato file xml, strutturate con i TAG, con pochi comandi è possibile fare del sano Web_scraping.

WGET

Il comando più potente da riga di comando per scaricare una pagina web o inviare richieste GET o POST, con o senza autenticazione è, come noto, WGET.
Per scaricare un file è possibile usare una sintassi tipo:

Ma la vera potenza di wget risiede nella possibilità di realizzare, con una sola riga di comando, un mirror ad un sito web.
Quindi per scaricare un intero sito in locale basta scrivere:

mentre, per scaricare solo una pagina con tutti i link interni:

Il problema è che sui sistemi MAC OS X, wget non è installato di default e, quindi, per chi non volesse passare per la fase di compilazione (anche se in giro esistono versioni già compilate per Tiger e Leopard) o, comunque, ha semplicemente la necessità di scaricare solo una file o una pagina web, allora è possibile usare una delle due alternative preinstallate su Mac OS X: ftp e curl.

FTP

Il comando FTP può essere usato anche per scaricare file HTTP.
La sintassi è molto semplice:

Come vedremo, in seguito, per i nostri scopi molto spesso il comando FTP è più che sufficiente per la maggior parte delle operazioni comuni.

CURL

CURL è un tool da riga di comando estremamente potente perché permette di scaricare in maniera molto flessibile ed automatizzata un qualsiasi numero di files da internet, secondo i protocolli HTTP o FTP, e di visualizzarli a schermo o di scriverli su disco.
La sintassi semplice, simile a quella dell’FTP, è:

In realtà la sintassi completa è:

Ma la vera flessibilità del comando nasce dalla possibilità di usare nella sintassi dell’URL le parentesi quadre per indicare una serie di URLs incrementali.
Per esempio una sintassi tipo:

creerà in modo automatico tutti gli URLs compresi nell’intervallo numerico specificato, e scaricherà in successione i file corrispondenti. Ai files sull’HD verrà assegnato il nome specificato dopo la flag -o, usando l’indice #1 per creare nomi univoci, incrementati allo stesso modo della sorgente.
In poche parole la singola riga di cui sopra equivarrà ad aver digitato in successione tutti i comandi:

Attenzione: il flag -O dell’ultimo esempio differisce dal flag con la o minuscola usato in precedenza, in quanto per nominare il file sul disco rigido usa lo stesso nome del file remoto.

La successione di URLs incrementali non deve essere necessariamente numerica, ma anche alfabetica, ad esempio [a-z]. Inoltre in uno stesso comando si possono combinare più indici incrementali (notate come nel nominare il file è possibile usare anche i due indici #1 e #2)

Monitorare la banda del proprio sito da riga di comando

Dati gli ultimi problemi di esaurimento della banda che hanno afflitto il mio sito, era evidente che una delle prime necessità che avevo era quello di monitorare costantemente la banda usata. Il problema è che, per farlo, dovevo ogni volta accedere al cPanel, il Pannello di Amministrazione del mio sito, dove, in un menu laterale, era possibile visualizzare la banda usata.

cPanel Bandwidth

Allora ho deciso di crearmi un semplice script che, scaricasse la pagina html del mio cPanel, andasse a selezionare, con il comando grep, la riga che conteneva la frase “Monthly Bandwidth Transfer” e attraverso due comandi awk (i file separator usati in Awk sono relativi alla mia pagina cPanel e potrebbero variare a seconda delle diverse versioni e configurazioni del pannello di controllo), estrarre la banda usata:

Come potete notare, per semplicità ho incluso, direttamente nella URL, lo username e la password per accedere al Pannello di Amministrazione. Questo è possibile solo perché il metodo di autenticazione del cPanel si basa su htpasswd ma ricordiamo che non è un metodo sicuro perché, oltre a lasciare memorizzati informazioni personali, nella barra degli indirizzi del proprio browser o nella history del terminale usato, si lasciano tracce anche nei vari proxy in cui si passa e nei log del webserver, oltre, come comunque avviene l’autenticazione classica se non passa per SSL, con un semplice sniffer.

Ci tengo a precisare che quello sopra illustrato è solo uno dei tanti modi per risolvere il problema: questo, in particolare, è il primo che mi è venuto a mente, forte delle decine di script shell realizzati negli anni. Ovviamente è possibile anche renderlo più complesso ed efficiente, parametrizzando username, password e url e, magari, notificando con una mail o con un messaggio a video (magari anche con Growl), quando la banda è prossima all’esaurimento. Il tutto ovviamente potrebbe anche essere inserito nel crontab di sistema in modo da girare ogni ora.

Per esempio, un metodo non ortodosso, sarebbe quello di visualizzare l’output non a video ma direttamente in TextEdit usando il comando open con le pipeline. Per farlo, ho riunito i tre comandi sopra elencati in un file bash di nome: monitora_banda.bash.
Quindi lanciando:

avremo questo risultato:

Output Textedit

Più in generale questo è il risultato del comando ‘open’ presente su Mac OS X.
Altri esempi, potrebbero essere:

Ma le possibilità, come vedete, sono infinite. Ma lo scopo di questo articolo era solo di illustrare alcuni metodi per automatizzare da riga di comando delle procedure. Il resto è lasciato all’inventiva di ciascuno di voi.

Download automatico del backup del DB Mysql

Il mio hosting non supporta il backup automatico del DB di Mysql perché non gestisce correttamente le schedulazioni di comandi da riga di comando. E’ per questo che ho realizzato un semplice script da inserire nel crontab, per scaricare quotidianamente il backup del proprio database.
Infatti, sempre nel cPanel, è presente una sezione “Backups” che permette di scaricare, manualmente e con un link statico, un full backup del sito, oppure un backup parziale del solo database Mysql o della sola home directory (il concetto esposto rimarrà comunque analogo per qualsiasi soluzione adottiate).
E’ evidente che, a questo punto, con un semplice comando, è possibile scaricare da terminale i backup:

Basterà quindi inserirlo (con il comando crontab -e) nel crontab (se non siete esperti potrete usare il Easy Crontab Creation Tool) in modo da fargli scaricare il backup del DB, per esempio, ogni giorno alle ore 11:30 del mattino:

Attenzione: come ogni comando da terminale, FTP (ma lo stesso vale se usate WGET o CURL) andrà ad operare nella directory corrente di lavoro, quindi se volete archiviare i file scaricati in una directory apposita, spostatevici preventivamente con il comando cd nome_directory.
Inoltre, dovete tenere presente che tutti i downloads andranno a scrivere lo stesso file e, quindi, ogni giorno ci si ritroverà con solo l’ultimo file scaricato. Se avete intenzione di tenere traccia di tutti i backup scaricati, dovrete rinominare il file, per esempio, aggiungendoci un suffisso come la data di download (realizzabile o con il comando curl o con uno script bash).

Tag:automator, awk, backup, banda, bandwidth, bash, cpanel, curl, database, download, ftp, grep, html, ksh, Mac os x, Mysql, password, sed, shell, unix, url, wget
CONTINUE READING >
5 comments
Gen 14 2008

Tips Mac: Creare un nuovo documento di testo dal menu contestuale del Finder con Automator, NuFile o Document Palette

Posted by Antonio Troise
Tweet

Menu Contestuale con Automator Una cosa di cui a volte sento la mancanza usando Mac OS X è la possibilità di creare al volo, tramite il menu contestuale attivabile tramite il tasto destro del mouse, un nuovo documento di testo nella cartella desiderata. Per farlo è sempre necessario aprire l’applicazione TextEdit (l’applicazione di default del Mac per editare i file) e salvare ogni volta un nuovo file nella posizione desiderata.

Allora ho deciso di sfruttare le enormi potenzialità di Automator, una applicazione che permette di utilizzare il linguaggio di scripting AppleScript senza scrivere il codice, ma creando un diagramma di flusso (workflow) scegliendo le varie azioni da far eseguire allo script (come ad esempio ruotare un’immagine o salvare un file). In pratica permette di scrivere un programma trascinando delle azioni una dopo l’altra (il classico ed intuitivo drag and drop) e funziona con lo stesso principio delle pipeline UNIX: un’azione può passare degli argomenti all’azione successiva che a sua volta li può passare alla seguente e così via.

Creare un nuovo file di testo con Automator

Senza voler scomodare QuickSilver, per cui esiste un comodo comando per creare velocemente un file di testo, ho deciso di usare una soluzione universale come Automator in quanto permette il suo funzionamento su qualunque piattaforma Mac e non necessita di installazioni di software di terze parti.

Sul sito AutomatorWorld ho trovato l’azione per Automator che faceva per me: Creating a Text File…With Automator!
In pratica, in questo post, si faceva riferimento all’ottimo script di SystemsBoy che, permette la creazione di un file di testo nella posizione desiderata direttamente da menu contestuale. Qui, esistono, due versioni:

  1. NewTextFile Workflow: dopo aver scaricato e decompresso il file zip, copiare il file NewTextFile.workflow nella directory ~/Library/Workflows/Applications/Finder per rendere attivo lo script. Questa è forse la soluzioni migliore in quanto, con un semplice comando unix in shell bash consente la creazione di un nuovo file di testo:

    Con il comando touch “$@/NewText.txt” si crea un nuovo file vuoto col nome NewFile.txt nella directory corrente del Finder, mentre il loop “for”viene usato per creare un nuovo file di testo per ciascuna directory selezionata (nel caso di multiselezione).

  2. NewTextFile Workflow Variants: contiene due varianti allo script precedente (da installare sempre nella directory ~/Library/Workflows/Applications/Finder), uno per creare un nuovo file di testo e aprirlo con TextWrangler:

    e l’altro per creare un nuovo file Word (copiando direttamente un template che mette a disposizione Office per Mac) e aprire con l’editor predefinito

    Ovviamente il primo script, che richiede l’installazione di TextWrangler 2.0 (un ottimo text editor gratuito per manipolare del testo, compiere sofisticatissime ricerche con accesso dei file anche via FTP/SFTP), è possibile modificarlo in modo che apra il nuovo file con Smultron oppure con l’editor di testo predefinito di Mac Os X, TextEdit.

    A tal proposito esiste anche una variante creata da Zolton che usa TextMate come text editor di default, è possibile scaricarla da qui e posizionarlo sempre nella directory ~/Library/Workflows/Applications/Finder.

  3. New-File: una variante più evoluta di questo script che sfrutta la potenza combinata di Automator con AppleScript, è disponibile sul sito Stephan Cleaves e da installare sempre nella solita cartella del Finder.
Altre soluzioni con software di terze parti

Nel tempo sono nate diversi metodi per creare un nuovo file di testo da menu contestuale o da una combinazione di tasti. In particolare mi piace citare due software freeware: Document Palette e NuFile.

Document Palette

Document Palette è un programma che gira sempre in background e permette di creare nuovi file di testo nella directory corrente alla sola pressione dei tasti: Control+Option+Command+N

Dopodiché verrà mostrata una schermata in trasparenza (un po’ come Quicksilver) da dove si può scegliere che documento creare: un txt, rtf o html (ma è possibile aggiungere anche altri documenti template personalizzati):

Lo svantaggio, ovviamente, è che occorre sempre tenere in memoria il programma che inevitabilmente occuperà risorse di sistema (minime ovviamente) anche quando non lo userete.

NuFile

NuFile (si pronuncia new-file, e Nu è una lettera greca) è un plugin per Finder che, una volta installato, aggiunge una voce “New File” al menu contestuale da dove è possibile creare una serie di nuovi file da quello di testo, al template di un file php. Ovviamente anche qui è possibile aggiungere o personalizzare i template dei nuovi file direttamente da Preferenze di Sistema

Devo dire che NuFile è l’unico programma che permette di riprodurre un menu contestuale dei “Nuovi File” proprio come quello presente su Windows.

Altre risorse di approfondimento su Automator

Se volete approfondire la conoscenza di Automator, consiglio a chiunque non abbia ancora molta confidenza con questo tool, di fare un giro nella grande libreria di azioni già pronte e presenti sul sito di Apple, mentre sul sito IlMac.net trovate un ottimo tutorial in italiano per iniziare a programmare con Automator.
Altre risorse utili sono i video tutorial di Automator.us e la raccolta script di AutomatorWorld.

Tag:Apple, automator, Mac os x, Tutorial
CONTINUE READING >
3 comments
SeguiPrezzi - Risparmia con Amazon.it

Categorie

Commenti Recenti

  • Antonio Troise on UltraEdit: per i programmatori esigenti il miglior editor di testo per Windows, Mac OS e Linux
  • Fioredicollina on UltraEdit: per i programmatori esigenti il miglior editor di testo per Windows, Mac OS e Linux
  • Antonio Troise on UltraEdit: per i programmatori esigenti il miglior editor di testo per Windows, Mac OS e Linux
  • Emanuele on UltraEdit: per i programmatori esigenti il miglior editor di testo per Windows, Mac OS e Linux
  • Luca on iDatabase: la valida alternativa di Bento per macOS e iOS per i database personali

Meta

  • Accedi
  • Entries RSS
  • Comments RSS
  • WordPress.org

Friends Link

  • GamerTagMatch
  • SeguiPrezzi.it – Risparmia con Amazon.it
  • Trendy Nail

Seguimi su:

  • facebook
  • twitter
  • rss
Creative Commons License
Levysoft by Antonio Troise is licensed under a Creative Commons Attribuzione-Non commerciale 2.5 Italia License.
© Copyright 2004 - 2014 - Levysoft by Antonio Troise