Pagine

venerdì 19 dicembre 2008

Bash, script e comandi da shell su linux

Premessa

Chi ha già utilizzato un computer e si avvicina a Linux per la prima volta, prova un terrore atavico verso la riga di comando ovvero la possibilità di manovrare il computer tramite comandi scritti e non con un click del mouse. Questo avviene perchè si pensa a linux come un sistema rigido e poco supportato dalla grafica e non c'è nulla di più sbagliato come si può vedere nel filmato di seguito. L'obbiezione più ricorrente è: "Ma se devo digitare comandi per fare questa o quella cosa invece di fare doppio click.... questo sistema non fa per me...".


Il completo rifiuto di alcuni sistemi operativi di questo strumento fa perdere molte potenzialità all'utente il quale non immagina nemmeno di poter fare alcune operazioni semplici ma che ai suoi occhi rasentano l'impossibile per la mancanza di strumenti grafici. Lo spegnimento del computer automatico ad una determinata ora, il backup o l'invio di una mail al verificarsi di un determinato evento in automatico... Tutte operazioni estremamente semplici ma che diventano altrettanto complesse
con un sistema a finestre in maniera automatizzata. Il costo da pagare per godere di questa flessibilità e potenza nella gestione della propria macchina è conoscere un minimo di concetti di programmazione (sapere come funziona un if-else o un ciclo for)...

I sistemi a finestre nascondono questa possibilità.

Linux, al contrario, sebbene abbia ottimi gestori di finestre, sfrutta molto la possibilità di scrivere comandi da riga di comando. La riga di comando viene anche chiamata shell e ciascun comando viene interpretato da un interprete che se reputa corretto, lo esegue.
E' anche possibile riunire uno o più comandi all'interno di uno "script".
Uno script è un file di testo che può essere lanciato dall'utente o ad un determinato orario.
Quest'ultima funzionalità è estremamente utile perchè permette di programmare azioni di manutenzione della macchina o di controllo su un server in maniere estremamente semplice.

Con uno script è possibile spegnere il computer ad una determinata ora, fare il backup del sistema e spedirlo via ftp su un disco remoto, aggiornare la rubrica con l'ultima versione disponibile e mille altre cose.

Su linux ci sono due modi per accedere alla riga di comando. La prima è uscire dalla modalità grafica premendo la combinazione di tasti CTRL+ALT+F1. In questo modo ci si troverà in un ambiente completamente testuale nel quale è possibile digitare i propri comandi e dal quale si
può tornare all'ambiente grafico con CTRL+ALT+F7; il secondo metodo consiste nell'aprire una finestra detta shell. Questa si trova, solitamente nel menù iniziale sotto la voce "terminale".

Le shell

Come detto in precedenza, esistono diversi interpreti. Quando si apre una shell e si digita un comando si può decidere l'interprete che si vuole utilizzare.
Scegliere un interprete o un altro decreta il modo di inserire i comandi.
Tra gli interpreti più conosciuti troviamo:
  • bash (Bourne Again Shell) Ideata dalla Free Software
    Foundation come shell di pubblico dominio è la più utilizzata su linux ed in ambienti accademici.
  • csh (C shell), Scritta all'universita' di
    Berkley, California. Come indica il nome, il suo linguaggio di
    programmazione è molto simile al C.
  • sh (Bourne Shell) E' la shell originale di UNIX,
    scritta da Steve Bourn presso i Bell Labs. Essa è disponibile su tutti i sistemi
    UNIX ma non possiede le agevolazioni interattive fornite da shell piu'
    recenti come C e Korn. La Bourne shell fornisce un semplice linguaggio
    per la sua programmazione.
  • ksh (Korne Shell) E' stata scritta da David Korn presso i
    Bell labs. E' la shell di default nei sistemi UNIX attuali. Fornisce
    le stesse prestazioni della C e TC shell unitamente a un linguaggio di
    programmazione simile a quello della Bourne shell.
Dato che senza ombra di dubbio, la bash è la più utilizzate nei sistemi linux e per questo futuro riferimento per i miei post.

lunedì 15 dicembre 2008

Impostazioni documento Lyx e Latex

Dopo aver visto cosa è LyX e come si installa sia su Linux sia su Windows in un mio precedente post, andiamo ad analizzare le impostazioni di un documento LyX.
Prima di procedere con la stesura di un testo in LyX, è bene assicurarsi che le impostazioni principali del documento corrispondano alle nostre esigenze. In realtà nessuno vieta di iniziare a scrivere come se fossimo in Word ed ottenere già un ottimo risultato. Tuttavia, come detto in precedenza, LyX ragiona in maniera differente ad un editor tradizionale e per questo è bene avere qualche accortezza aggiuntiva.
In prima battuta bisognerà impostare almeno il tipo di documento che si intende creare. Tutto il resto può essere modificato in un secondo momento ma in questa sede si vogliono dare gli strumenti per configurare al meglio il documento.

Classe del documento


Come accennato nel paragrafo precedente, la prima cosa da fare è impostare il tipo di documento che si vuole produrre.
Mentre in Writer/Word si inizia a scrivere su una pagina vuota con formato A4 sull'angolo in alto a sinistra, LyX/Latex parte dal presupposto che non tutti i documenti sono uguali. Se voglio iniziare a scrivere una lettera, ad esempio, dovrò iniziare a scrivere l'intestazione della ditta per la quale lavoro e per fare questo devo essere in alto a destra; se devo scrivere l'indirizzo su una busta, la pagina non dovrà avere formato A4 ma uno apposito. Tutti questi accorgimenti vanno sotto il nome di classe del documento. Esistono innumerevoli classi ma le più utili sono senza ombra di dubbio:
  • letter Permette di scrivere una lettera; non avrà stili di caratteri quali, ad esempio, i "Capitoli" ma ne conterrà altri quali "Data" o "Indirizzo"...
  • article E' la classe di default. Questa classe permette di scrivere testi medio lunghi. Utile per articoli o recensioni.
  • book Questa classe è utilissima per coloro che devono scrivere libri ma anche manuali che contengano Capitoli e Sezioni
  • curriculum vitae Il nome della classe parla da solo

Struttura testo



La struttura del testo contiene tre impostazioni interessanti.
La prima è la separazione dei paragrafi. Ogni volta che si schiaccia il pulsante INVIO, infatti, LyX/Latex ritengono che si stia iniziando un nuovo paragrafo. Di default viene data una piccola identazione (spazio orizzontale) verso destra alla prima riga del paragrafo in modo che risulti rientrata. Si può cambiare questa impostazione e sostiuirla con uno spazio verticale che divida nettamente un paragrafo dall'altro.
La seconda è l'interlinea. Con questo termine si intende lo spazio tra una riga ed un'altra. Può essere singola, doppia o personalizzata. In questo ultimo caso si scriverà la distanza desiderata.
Infinte si può spuntare il flag "Documento su due colonne" per ottenere un documento che si disponga su due colonne.

Struttura pagina



La struttura pagina contiene due importanti ed interessanti opzioni. La prima è il formato della pagina. Nel caso classico si imposti l'A4 che sono i fogli utilizzati dalla maggior parte delle stampanti. Di default, infatti, potrebbe esserci un'altra impostazione. La seconda riguarda lo stile della pagina che definisce lo stile delle intestazioni e del piè di pagina.

Lingua

Impostare la lingua ha una connotazione differente dall'analoga impostazione su Writer/Word. In questi due programmi, infatti, la lingua è importante per il controllo ortografico. Su LyX, al contrario, è importante anche per un altro sostanziale motivo. Molte scritte, infatti, sono inserite in modo automatico. La parola "CAPITOLO" che precede il numero del capitolo, la scritta "SOMMARIO" o "BIBLIOGRAFIA"... In tal caso, a seconda della lingua impostata, i nomi appariranno di conseguenza.

Preambolo latex


E' sicuramente la parte più complessa ma anche più interessante che permette gradi di personalizzazione enorme. Questa videata rispecchia il preambolo di un documento LateX. E' usata per modificare l'aspetto del documento in maniera più o meno sostanziale. Permette piccole personalizzazioni, come inserire una riga a fondo pagina che divida il testo dal piè pagina o modificare la scritta "CAPITOLO" con "CAP" fino a stravolgere l'impostazione del layout del documento.
In questa finestra viene presentata una semplice casella di testo vuota che si aspetta comandi latex. Senza ombra di dubbio ci vuole un po' di dimestichezza e parecchie ricerche per poter scrivere in questa casella ma, in questo forum, si cercherà di dare alcuni spunti di riflessione interessanti al riguardo.

venerdì 12 dicembre 2008

Lyx, Latex e MikTeX

Come detto in un mio precedente post, in occasione della tesi sto imparando a conoscere un programma per la creazione testi davvero notevole chiamato LyX.

Cosa è Lyx?


LyX è un programma estremamente semplice da utilizzare che permette di gestire testi semplici quali lettere o brevi relazioni ma anche e soprattutto testi estremamente complessi quali relazioni di tipo scientifico/matematiche o libri.
Lyx presenta una interfaccia notevolmente inuitiva, capace di soddisfare le esigenze di qualsiasi tipo senza la presenza di miriadi di menù e sottomenù ma con una organizzazione delle icone razionale e ben studiata; tutto è posizionato in modo chiaro e le icone sono "parlanti".
Questo programma, però, paragonato ad altri editor di testo avanzati quali OpenOffice Writer o Microsoft Word si differenzia moltissimo per filosofia di approccio al testo. Citando diverse guide (che si possono trovare con facilità su internet) possiamo affermare che mentre i primi due sono di tipo WYSIWYG (What You See Is What You Get), Lyx è del tipo WYSIWYM (What You See Is What You Mean).
La differenza è sostanziale: utilizzando Writer o Word, oltre a concentrarci sul contenuto del nostro testo, dobbiamo concentrarci sullo stile dei caratteri, su come posizionare le figure nel testo, su quali parole mettere in grassetto e quali no, su come inserire una tabella nel flusso delle pagine, dove impostare le interruzioni di pagina e mille altre sottigliezze di tipo stilistico. Questo processo mentale va sotto il nome di WYSIWYG ovvero quello che vedi è quello che ottieni.
Lyx, al contrario, aderisce alla filosofia del WYSIWYM che permette di soffermarci esclusivamente sul testo. L'impaginazione sarà demandata ad un secondo momento durante la compilazione in maniera del tutto trasparente per l'utente (basta cliccare un pulsante) utilizzando un motore esterno, LateX.
In questo modo il programma svincola l'utente dal preoccuparsi del layout permettendogli di concentrarsi soltanto sul testo e soprattutto permette una estrema coerenza dei documenti generati dal punto di vista del layout; in altre parole i documenti saranno impaginati tutti nel medesimo modo evitando di generare documenti differenti di volta in volta dal punto di vista dell'aspetto; comportamento estremamente deprecabile soprattutto in ambito aziendale.

LateX

Come accennato nel paragrafo precedente, LateX è un motore per la creazione di layout di testi scritti. Esso viene invocato per "compilare" il testo una volta terminato e produce documenti PDF o DVI. Questo è un grosso vantaggio, soprattutto se si producono PDF perchè è un formato portabile ed universalmente riconosciuto. Esso sfrutta i comandi impartiti dall'utente e crea un documento ben formattato, facilmente leggibile e fruibile. E' un programma estremamente maturo, nato nel 1994. Originariamente l'unico modo per scrivere documenti in LateX era armarsi di pazienza ed imparare quasi programmare. Per questo motivo, quindi, la sua diffusione è stata "relegata" a nicchie piuttosto ridotte di utenza quasi esclusivamente di tipo scientifico. Questo motore, infatti, è particolarmente adatto nel momento in cui si vogliano gestire testi molto lunghi ma soprattutto con molte formule matematiche complesse perchè riesce a riprodurle con facilità e precisione. Oggi, invece, la creazione di programmi quali LyX che offrono una interfaccia grafica a latex, sono di stimolo e funzionano da catalizzatori verso questo ottimo strumento.

Installazione

Sia LyX sia LateX sono programmi multipiattaforma: questo vuol dire che è possibile installarli sia se si utilizza linux sia se si utilizza windows o machintosh.

Su linux, prendendo come riferimento la distribuzione debian, basterà digitare:

# sudo apt-get install lyx latex
per avere a disposizione sia il programma di videoscrittura che quello di rendering.

Se si utilizza windows, invece, è necessario scaricare LyX (da questa pagina) e latex tramite il pacchetto MikTeX (da questa pagina) ed installarli.
A breve saranno disponibili approfondimenti nei prossimi post sull'argomento.

giovedì 11 dicembre 2008

Cheatsheet

Il cheatsheet è un documento nel quale sono scritti comandi, sintassi ma soprattutto i trucchi di un linguaggio di programmazione specifico o un programma in generale. L'altro giorno, facendo qualche ricerca su Google mi sono imbattuto in una bella lista che vi ripropongo in questo post. Se volete l'elenco completo potete cliccare qui o in maniera più ordinata a questo link.
Ho fatto una cernita dei cheatsheet più interessanti per me ed ecco una breve sintesi qui di seguito:

  • apache cheatsheet. Apache è il può famoso web server che ci sia in circolazione.
  • htaccess cheatsheet. Htaccess è un file che si mette in una directory apache per inibire alcuni comportamenti o obbligarne degli altri all'utente che si appresta a navigare sulla cartella specifica.
  • ascii character codes table: assolutamente da avere, associa ad ogni lettera o simbolo il proprio codice ascii
  • character entity reference in HTML: è un elenco di come creare lettere accentate, simboli particolari (come > o <) in maniera corretta con standard W3C su file HTML
  • CSS: imperdibile foglio che riassume le caratteristiche di un Cascading Style Sheet anche detto foglio di stile
  • CVS: CVS è un metodo che si avvale della tecnologia client/server per il mantenimento del codice software. Utilissimo quando si è gli unici programmatori, diventa indispensabile se si lavora in team
  • python 101 cheatsheet e reference python: due reference del linguaggio di programmazione python
  • django, reference comandi : è un framework scritto in python che permette un rapido e veloce sviluppo di applicazioni o semplici pagine web in python
  • SQL: Structured Query Language, un linguaggio semplicissimo ma altrettanto potente che serve per interrogare database, inserire, eliminare record. E' lo standard della programmazione su un database.
  • perl Regular Expression: Espressioni regolari in linguaggio di programmazione Perl
  • perl Quick Reference: Un veloce riferimento a Perl
  • linux shortcut: comandi e scorciatoie in linux
  • list ports: i servizi di un server sono in ascolto su porte diverse. Ecco un elenco dei più famosi.
  • vim essential e vim scheda rapida e vim commands: vim è un editor di testo potentissimo. Indispensabile ambiente linux/unix, utilissimo su qualsiasi sistema operativo si utilizzi.
  • blogger : un cheatsheet per blogger

venerdì 5 dicembre 2008

SSH Client e Server

Premessa

OpenSSH è un protocollo sicuro e criptato che permette di collegarci da un pc (assumendo il ruolo di client) ad una macchina remota (denominata server). Il server ci fornirà una risposta richiedendo una userid e password di accesso. Una volta passato il controllo ci inverà una shell nella quale eseguire comandi sulla macchina remota.
Il protocollo, quindi, mette in comunicazione il client (anche detto host) con il server tramite una shell.

Scenario lavorativo

Il classico scenario possibile è la necessità di amministrare uno o più server con la comodità di non doverci alzare dalla propria postazione lavorativa.
Supponiamo che nella azienda in cui lavoro siano attivi diversi servizi (per esempio di database (es mysql ) o proxy (es squid) o webserver (es apache)) in esecuzione su una o più macchine diverse presenti in sala macchine. Supponiamo, inoltre, di dover amministrare tali servizi e le macchine sulle quali girano. Ci toccherà, ogni volta che c'è un problema o aggiornamento, alzarci dalla nostra scrivania ed andare davanti alla macchina per effettuare le dovute modifiche. Tramite ssh, invece, possiamo lavorare dalla nostra postazione direttamente sul server come se ci fossimo davanti.
Analogamente tramite il protocollo sftp integrato in ssh è possibile copiare dei files sul server interessato in maniera del tutto sicura e trasparente.

Scenario casalingo

Un altro possibile scenario è la necessità, quando ci si trova sul posto di lavoro, di poter accedere al proprio computer casalingo che, in questa configurazione, lavorerà come server.
Questo può essere necessario (è il motivo per cui uso ssh quotidianamente) per trasferire files a/da il proprio PC (magari per effettuare dei backup dei propri files) oppure per lanciare o stoppare servizi o ancora per modificare i file da scaricare con emule ;-)

La soluzione: ssh

Per risolvere questo problema è possibile ottenere una shell remota dal server e lavorare su una finestra del proprio PC (come in figura) come se si fosse davanti al server. Il collegamento, ci tengo a ribadirlo, viaggia su protocollo sicuro e quindi nulla potrà essere carpito da persone con cattive intenzioni.
In questo scenario bisogna aver installato ssh server sul server e ssh client sul host.

Se si utilizza debian o ubuntu, per installare il server e client si può procedere come segue:

# sudo apt-get install openssh-server openssh-client

Una volta avviato il server ssh, si può passare al proprio PC.
Se si usa linux basta avviare una shell e digitare:

# ssh nomeutente@nomeserver


oppure

# ssh nomeutente@ipserver


nel caso in cui non ci sia un DNS attivo.

Se si utilizza windows, al contrario, si può usare come client il programma putty.
Putty è un programmino opensource che può essere usato per connessioni ssh su un server che supporta questo protocollo.

mercoledì 3 dicembre 2008

Mailx e blat, mail via shell su Linux e Windows

Premessa
Spesso, nella amministrazione di un computer, un servizio o un sito, può essere utile avere a disposizione un metodo che permetta di spedire una o più mail tramite shell.

Scenario
Gli scenari possibili sono veramente moltissimi e variegati. Giusto a titolo di esempio mi permetto di enunciare alcune mie esigenze:
  • Effettui il backup dei documenti presenti su una o più macchine e fai l'upload di tali backup su un server via ftp tutti i giorni: vuoi ricevere una mail che ti confermi l'avvenuta esecuzione della operazione
  • Hai un database Mysql su un server; ogni settimana fai un controllo che gli utenti si siano loggati negli ultimi 7 giorni: vuoi che una mail ti restituisca il report con i nominativi per poter chiamare coloro che non hanno effettuato il login
  • Hai un server con risorse limitate; ogni giorno effettui alcuni controlli e vuoi ricevere via mail un report esaustivo
Soluzione su linux
Coloro che usano linux possono utilizzare il pacchetto mailx.
Si controlli, quindi, che sia installato.
A questo punto si può decidere di utilizzare mailx in maniera interattiva o automatica.
Nel primo caso, poco utile per gli scenari disegnati prima, posso digitare via shell:

mail qualcuno@daqualcheparte.com


L'output che si riceve è una serie di richieste che chiedono l'oggetto, il corpo del testo ed eventuali destinatari in cc.
Alla fine del testo del corpo del messaggio si può inserire un punto su una riga vuota che comunica a mailx che si è terminato il messaggio.
Si segua l'esempio di sotto:

Subject: Ciao!
Ciao,
come stai?
Spero tutto bene
.
cc: qualcunaltro@altrove.it

L'utilizzo interessante di questo software, però, è la
possibilità di utilizzarlo in maniera automatica in modo da poterlo includere in uno script.
In tal caso, il medesimo risultato si ottiene creando un file di testo ed inserendo il corpo del messaggio; successivamente basterà digitare, su shell:

mail -c qualcunaltro@altrove.it -s "Ciao!" qualcuno@daqualcheparte.com <>

Ovviamente, il testo con messaggio può contenere i report di cui si parlava prima.


Soluzione su windows
Esistono molti programmi su windows che effettuano l'invio di mail via consolle.
Tra questi mi sono trovato particolarmente bene con Blat.
Dopo aver installato il programma si può vedere la pagina di help.
In particolare per mandare una mail in modo automatico si può procedere come segue:

blat file_allegato -to qualcuno@dovesitrova.it

NB: bisogna assicurarsi, prima, che blat.exe sia nel percorso degli eseguibili.
Se così non è, al posto di "blat" sarà necessario digitare "C:\percorsoesatto\blat.exe"