<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AlexBio&#039;s Blog &#187; Bash</title>
	<atom:link href="http://alexbio.ath.cx/category/source/bash/feed/" rel="self" type="application/rss+xml" />
	<link>http://alexbio.ath.cx</link>
	<description>/dev/random</description>
	<lastBuildDate>Tue, 16 Mar 2010 20:18:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Bash Tip: foreach file in una cartella</title>
		<link>http://alexbio.ath.cx/2009/08/30/bash-tip-foreach-file-in-una-cartella/</link>
		<comments>http://alexbio.ath.cx/2009/08/30/bash-tip-foreach-file-in-una-cartella/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 16:29:31 +0000</pubDate>
		<dc:creator>AlexBio</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://alexbio.ath.cx/?p=497</guid>
		<description><![CDATA[Un semplice esempio per mostrare tutti i file in una data cartella (in questo caso /tmp):

#!/bin/sh
&#160;
for filename in /tmp/*
do
  echo $filename
done;

Poche righe che mi sono spesso tornate molto utili. Ad esempio mi è capitato di dover convertire una serie di file wav (circa 80) in mp3. A mano risulta un lavoro immane, ma semplicemente [...]]]></description>
			<content:encoded><![CDATA[<p>Un semplice esempio per mostrare tutti i file in una data cartella (in questo caso /tmp):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">for</span> filename <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/*</span>
<span style="color: #000000; font-weight: bold;">do</span>
  <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$filename</span>
<span style="color: #000000; font-weight: bold;">done</span>;</pre></div></div>

<p>Poche righe che mi sono spesso tornate molto utili. Ad esempio mi è capitato di dover convertire una serie di file wav (circa 80) in mp3. A mano risulta un lavoro immane, ma semplicemente sostituendo &#8216;echo&#8217; con &#8216;lame&#8217; nello script precedente ecco che qualsiasi cosa diventa possibile.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexbio.ath.cx/2009/08/30/bash-tip-foreach-file-in-una-cartella/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shell Tip: Mostrare l&#8217;indirizzo IP</title>
		<link>http://alexbio.ath.cx/2009/08/14/shell-tip-mostrare-lindirizzo-ip/</link>
		<comments>http://alexbio.ath.cx/2009/08/14/shell-tip-mostrare-lindirizzo-ip/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 19:23:56 +0000</pubDate>
		<dc:creator>AlexBio</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://alexbio.ath.cx/?p=420</guid>
		<description><![CDATA[Ecco un semplice quanto brutto script per mostrare il proprio indirizzo ip:

$ /sbin/ifconfig eth0 &#124; head -2 &#124; tail -1 &#124; awk '{ print $2; }' &#124; sed s/addr://

]]></description>
			<content:encoded><![CDATA[<p>Ecco un semplice quanto brutto script per mostrare il proprio indirizzo ip:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">ifconfig</span> eth0 <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">head</span> <span style="color: #660033;">-2</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">tail</span> <span style="color: #660033;">-1</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{ print $2; }'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> s<span style="color: #000000; font-weight: bold;">/</span>addr:<span style="color: #000000; font-weight: bold;">//</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://alexbio.ath.cx/2009/08/14/shell-tip-mostrare-lindirizzo-ip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Snapshot backup con rsync</title>
		<link>http://alexbio.ath.cx/2009/02/20/snapshot-backup-con-rsync/</link>
		<comments>http://alexbio.ath.cx/2009/02/20/snapshot-backup-con-rsync/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 15:16:19 +0000</pubDate>
		<dc:creator>AlexBio</dc:creator>
				<category><![CDATA[Backup]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Source]]></category>

		<guid isPermaLink="false">http://alexbio.netsons.org/?p=121</guid>
		<description><![CDATA[Introduzione
Ebbene sì, eccomi quì di nuovo, dopo moooolto tempo di assenza (mesi?), a scrivere un nuovo articolo (o &#8220;post&#8221; come preferite) su un argomento a me tanto caro (sarà che mi ha salvato dalla pazzia da perdita di dati più di una volta): il backup di dati.
(Giusto per la cronaca, è già il secondo post [...]]]></description>
			<content:encoded><![CDATA[<h3>Introduzione</h3>
<p>Ebbene sì, eccomi quì di nuovo, dopo moooolto tempo di assenza (mesi?), a scrivere un nuovo articolo (o &#8220;post&#8221; come preferite) su un argomento a me tanto caro (sarà che mi ha salvato dalla pazzia da perdita di dati più di una volta): il backup di dati.</p>
<p>(Giusto per la cronaca, è già il <a href="http://alexbio.netsons.org/2008/09/05/backup-di-dati-con-dd/">secondo</a> post che scrivo sull&#8217;argomento&#8230;)</p>
<p>Questa volta mi occuperò dei backup in &#8220;stile snapshot&#8221;, ciò significa creare diversi backup corrispondenti a diversi momenti temporali. Tutto ciò utilizzando un potente strumento Unix: <strong>rsync</strong>.</p>
<h3>Ma perchè?</h3>
<p>Vi starete forse chiedendo il perchè di tutto ciò, quando anche un semplice archivio compresso può benissimo bastare per fare un backup più che decente&#8230; ebbene, vi è mai capitato di perdere file importanti a causa di cancellazioni, sovrascritture rotture-di-hd accidentali? (se avete risposto no potrebbe sempre accadervi :P) Non sarebbe bello avere una cartella in cui ritrovare immagini complete del file system a determinati intervalli nel tempo, così da recuperare diverse versioni dello stesso file salvate chessò 1-2 ore prima, ma anche giorni o settimane (il tutto dipende dalla capacità dell&#8217;hd)?</p>
<p>Se avete risposto sì, probabilmente siete nel posto giusto, perciò bando alle ciance e mano alla shell.</p>
<h3>Rsync</h3>
<p>Si tratta di uno strumento molto potente per la sincronizzazione di file in locale e/o tramite rete. Se non l&#8217;avete ancora installato potete scaricare i sorgenti da <a href="http://rsync.samba.org/">http://rsync.samba.org/</a> o utilizzare il gestore di pacchetti preferito (ad esempio su Debian/Ubuntu da root apt-get install rsync).</p>
<p>Vediamo ora un semplice esempio di utilizzo:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ rsync -v -a cartella-di-partenza/ cartella-di-destinazione/</pre></div></div>

<p>Questo semplice comando semplicemente crea una copia di una cartella in una altra, con l&#8217;opzione verbose (-v) che non fa altro che mostrare cosa fa rsync.</p>
<p>Nel caso in cui la cartella di destinazioni si dovesse trovare in una macchina remota:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ rsync -v -a -e ssh cartella-di-destinazione/ username@indirizzo-macchina-remota:/cartella-di-destinazione</pre></div></div>

<p>Ma vediamo ora un&#8217;altra opzione di rsync. Nel caso in cui abbiate fatto un backup di una cartella con i comandi sopra citati, ma poi abbiate eliminato uno o diversi file dalla cartella di partenza, probabilmente vorrete fare in modo che tali file vengano eliminati anche dalla cartella di backup&#8230; ebbene, niente di più facile, basta utilizzare l&#8217;opzione &#8211;delete:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ rsync -v -a --delete cartella-di-partenza/ cartella-di-destinazione/</pre></div></div>

<h3>Snapshot backup</h3>
<p>Prima della parte bella, una piccola parentesi sugli hard link. Solitamente simo portati a pensare che il nome del file rappresenti il file in sè stesso, ma esso non è altro che un collegamento (un puntatore se preferite) al file contenuto in un volume di memoria, chiamato <a href="http://en.wikipedia.org/wiki/Hard_link">hard link</a> appunto; lo stesso file può avere diversi hard link. All&#8217;atto pratico creare un hard link di un file è un pò come copiarlo, ma lo spazio occupato su disco non cambia: possiamo creare 1, 2, 3, n hard link ad un file, ma lo spazio occupato su disco è sempre pari a quello di un file, inoltre l&#8217;hard linking è molto più rapido di una copia vera e propria. È possibile creare hard link in diversi modi come ad esempio con l&#8217;utility ln, o con cp, utilizzando l&#8217;opzione -l, ed è proprio questo che andremo ad utilizzare. Ma vediamo ora, come questo può tornarci utile.</p>
<p>Utilizzando cp con l&#8217;opzione -l (spiegata prima) e -a, che causa la ricorsione attraverso tutti i file e le sottocartelle, preservandone attributi e permessi, è possibile creare ciò che sembra una perfetta copia di una cartella, ma che in realtà praticamente non occupa spazio su disco.</p>
<p>Ed ora mettiamo rsync e cp insieme.<br />
Innanzitutto è necessario un backup completo di una cartella:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ rsync -v -a --delete cartella-di-partenza/ backup.0/</pre></div></div>

<p>(potete ovviamente utilizzare anche il comando che utilizza ssh)</p>
<p>A questo punto abbiamo una cartella backup.0 che rappresenta il nostro primo backup. Al secondo backup però le cose si complicano un pò:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ mv backup.0 backup.1
$ cp -al backup.1/ backup.0
$ rsync -v -a --delete cartella di partenza/ backup.0/</pre></div></div>

<p>Come potete vedere l&#8217;ultimo comando è lo stesso utilizzato prima. Bene, a questo punto abbiamo due cartelle: backup.1, il primo backup, e backup.0 il backup più recente. La differenza tra le due cartelle semplicemente sta nel fatto che il backup più recente non contiene i file eliminati in seguito al più vecchio (quello di cui parlavo poco fa).</p>
<p>A seconda di quanti backup volete tenere, quelli più vecchi li potete eliminare, per esempio:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ rm -rf backup.2
$ mv backup.1 backup.2
$ mv backup.0 backup.1
$ cp -al backup.1/ backup.0
$ rsync -v -a --delete cartella di partenza/ backup.0/</pre></div></div>

<p>In questo modo è possibile automatizzare semplicemente la procedura di backup, per poterla utilizzare chessò, in accoppiata con cron, in modo da non dover pensare ogni volta al backup, lasciando tutto il lavoro allo script.</p>
<p><a href="http://alexbio.ath.cx/code/snapshot-backup/">Qui</a> potete trovare uno script completo per eseguire tutta la procedura automaticamente (modifcatelo pure a seconda dei vostri bisogni).</p>
]]></content:encoded>
			<wfw:commentRss>http://alexbio.ath.cx/2009/02/20/snapshot-backup-con-rsync/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
