<?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>Mia mamma usa Linux! &#187; Shell</title>
	<atom:link href="http://www.miamammausalinux.org/tag/shell/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.miamammausalinux.org</link>
	<description>Perché niente è impossibile da capire... Se lo spieghi bene !</description>
	<lastBuildDate>Mon, 02 Jan 2012 11:31:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Linux e la linea di comando, comandi particolari e poco conosciuti: manipolazione di stream e file di testo</title>
		<link>http://www.miamammausalinux.org/2009/10/linux-e-la-linea-di-comando-comandi-particolari-e-poco-conosciuti-manipolazione-di-stream-e-file-di-testo/</link>
		<comments>http://www.miamammausalinux.org/2009/10/linux-e-la-linea-di-comando-comandi-particolari-e-poco-conosciuti-manipolazione-di-stream-e-file-di-testo/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 08:26:19 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Sistema]]></category>
		<category><![CDATA[Comandi poco conosciuti]]></category>
		<category><![CDATA[Linea di comando]]></category>
		<category><![CDATA[Manipolazione file di testo]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=820</guid>
		<description><![CDATA[Nel primo articolo di questa serie sono stati affrontati i comandi interni alla shell Bash che permettono di agevolare il proprio lavoro ed ottimizzarne le tempistiche di realizzazione. In questa nuova puntata verranno trattati comandi di sistema, generalmente ignorati, richiamabili all&#8217;interno della shell Bash per la manipolazione degli stream di output e dei contenuti dei [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/linux.png" alt="linux" title="linux" width="85" height="100" class="alignnone size-full wp-image-292" /></p>
<p>Nel primo articolo di questa serie sono stati affrontati i comandi interni alla shell Bash che permettono di agevolare il proprio lavoro ed ottimizzarne le tempistiche di realizzazione.<br />
In questa nuova puntata verranno trattati comandi di sistema,  generalmente ignorati, richiamabili all&#8217;interno della shell Bash per la manipolazione degli stream di output e dei contenuti dei file.</p>
<p><strong>Comandi per l&#8217;elaborazione degli stream di testo</strong></p>
<p>Lo studio del contenuto dei file, dal filtro dei contenuti all&#8217;ordinamento di questi sono operazioni effettuate quotidianamente attraverso diffusissimi comandi come <em>cat</em>, <em>grep</em> e <em>sort</em>. Ma esiste un nutrito numero di comandi utilizzabili per l&#8217;elaborazione dei così detti &#8220;stream&#8221; di testo, eccone descritti alcuni.</p>
<p><em><strong>tac</strong></em></p>
<p>Il funzionamento di <em>tac</em> è quello dell&#8217;esatto opposto di <em>cat</em>. Esso infatti concatena e stampa il contenuto dei file in ordine inverso, partendo cioè dall&#8217;ultima riga. Supponendo di avere il seguente file di testo:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ cat elenco
1
2
3
4
5
6</pre></div></div>

<p>l&#8217;output generato da <em>tac</em> sarà il seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ tac elenco
6
5
4
3
2
1</pre></div></div>

<p><em><strong>tr</strong></em></p>
<p>Il comando <em>tr</em> permette di modificare o cancellare caratteri da uno stream di input. Dato ad esempio il file contenente l&#8217;elenco precedente, sarà possibile ad esempio sostituire i caratteri <em>newline</em> (accapo) con il carattere &#8220;#&#8221;, utilizzando il comando in questa forma:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ cat elenco_num | tr &quot;\n&quot; &quot;#&quot;
1#2#3#4#5#6#</pre></div></div>

<p>L&#8217;opzione &#8220;<em>-d</em>&#8221; del comando consente di eliminare e non sostituire le occorrenze trovate, applicato al comando precedente, correggerebbe l&#8217;output come segue:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ cat elenco | tr &quot;\n&quot; &quot;#&quot; | tr -d &quot;#&quot;
12345678910</pre></div></div>

<p><em>tr</em> permette di utilizzare anche specifici set di caratteri, senza che ne venga indicato uno specifico. Ad esempio dato il seguente file di testo:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ cat elenco
A
B
C
D
E
F</pre></div></div>

<p>è possibile convertire tutte le lettere maiuscole in minuscole attraverso l&#8217;utilizzo dei seguenti set:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ cat elenco | tr &quot;[:upper:]&quot; &quot;[:lower:]&quot;
a
b
c
d
e
f</pre></div></div>

<p>L&#8217;elenco completo dei set di caratteri utilizzabili si trova nella <em>man page</em> del comando.</p>
<p><em><strong>nl</strong></em></p>
<p><em>nl</em> consente di numerare le righe proveniente da uno stream di input. La forma in cui la numerazione appare dipende dalle opzioni passate, senza alcuna opzione il comando numererà le righe con gli indici allineati a destra:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ cat elenco | nl
     1	A
     2	B
     3	C
     4	D
     5	E
     6	F</pre></div></div>

<p>è possibile specificare un formato diverso per l&#8217;indice di riga attraverso l&#8217;opzione &#8220;-n&#8221;, ad esempio per fare in modo che gli indici siano allineati a sinistra l&#8217;opzione da passare sarà &#8220;-n ln&#8221;, mentre per lasciare gli indici allineati a destra e fare in modo che gli spazi precedenti siano riempiti da zero l&#8217;opzione sarà &#8220;-n rz&#8221;.<br />
E&#8217; possibile specificare anche il carattere di separazione tra l&#8217;indice e la riga associata, che di default è tab, con un altro carattere attraverso l&#8217;opzione &#8220;-s&#8221;.<br />
Ecco un esempio:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ cat elenco | nl -n rz -s &quot;#&quot;
000001#A
000002#B
000003#C
000004#D
000005#E
000006#F</pre></div></div>

<p><em><strong>paste</strong></em></p>
<p>Il comando <em>paste</em> permette di unire due file riga per riga. Nell&#8217;esempio più banale paste è utilizzato come segue:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ paste elenco elenco_num 
A	1
B	2
C	3
D	4
E	5
F	6</pre></div></div>

<p>ed anche per questo comando è possibile sostituire con l&#8217;opzione &#8220;-d&#8221; il carattere che separa le righe, di default sempre tab, con un carattere a scelta:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ paste -d &quot;#&quot; elenco elenco_num
A#1
B#2
C#3
D#4
E#5
F#6</pre></div></div>

<p>paste può essere utilizzato per operare anche su stream di input in modo da unire le righe prodotte ad un&#8217;elaborazione a quelle di un file:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ tac elenco|paste - elenco
F	A
E	B
D	C
C	D
B	E
A	F</pre></div></div>

<p>lo stream generato dal comando <em>tac</em> viene utilizzato da <em>paste</em> attraverso l&#8217;introduzione del carattere &#8220;-&#8221; per ottenere l&#8217;unione di tutte le righe del file con quelle dello stesso, ma contrapposte.</p>
<p><em><strong>wc</strong></em></p>
<p><em>wc</em> effettua un conteggio e totalizza a seconda delle opzioni il numero di caratteri (&#8220;-m&#8221;), parole (&#8220;-w&#8221;), byte (&#8220;-c&#8221;) e linee (&#8220;-l&#8221;) di un file o di uno stream di input. Ad esempio per conoscere il numero di file nascosti presente in una directory, sarà sufficiente utilizzare il comando come segue:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ ls .* | wc -l
681</pre></div></div>

<p>Lanciato senza argomenti <em>wc</em> restituisce tre valori: il numero di linee, di parole e di byte. Ad esempio nel caso di un calcolo su due file il comportamento del comando sarà il seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ wc elenco elenco_num 
 6  6 12 elenco
 6  6 12 elenco_num
12 12 24 totale</pre></div></div>

<p><em><strong>tee</strong></em></p>
<p>Il comando <em>tee</em> permette di redirigere l&#8217;output di un comando all&#8217;interno di un file e nel contempo stamparlo a video. Mentre la ridirezione classica effettuata attraverso il carattere &#8220;>&#8221; non permette di consultare istantaneamente l&#8217;output, attraverso <em>tee</em> è possibile osservare riproporre il flusso output del comando lanciato ed al contempo salvarlo in un file:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ tac elenco | tee elenco_inv | wc -l
6</pre></div></div>

<p>L&#8217;esempio dimostra la peculiarità del comando <em>tee</em>: lo stream di output viene registrato all&#8217;interno del file <em>elenco_inv</em> e passato al comando <em>wc</em> che ne calcola il numero di righe.</p>
<p><strong>Conclusioni</strong></p>
<p>Chiaramente ciascuno dei comandi illustrati possiede numerosi altri parametri che ne alterano il funzionamento, questi sono consultabili attraverso le <em>man page</em> sempre complete e prodighe di importanti informazioni. Scopo di questa serie di articoli rimane quello di fornire spunti dietro i quali approfondire.<br />
Nel prossimo articolo verranno affrontati i comandi utilizzabili per la gestione delle code di stampa da linea di comando.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2009/10/linux-e-la-linea-di-comando-comandi-particolari-e-poco-conosciuti-manipolazione-di-stream-e-file-di-testo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux e la linea di comando, comandi particolari e poco conosciuti: Bash, comandi interni alla shell</title>
		<link>http://www.miamammausalinux.org/2009/09/linux-e-la-linea-di-comando-comandi-particolari-e-poco-conosciuti-bash-comandi-interni-alla-shell/</link>
		<comments>http://www.miamammausalinux.org/2009/09/linux-e-la-linea-di-comando-comandi-particolari-e-poco-conosciuti-bash-comandi-interni-alla-shell/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 16:40:20 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Sistema]]></category>
		<category><![CDATA[Comandi poco conosciuti]]></category>
		<category><![CDATA[Linea di comando]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=781</guid>
		<description><![CDATA[La linea di comando e più propriamente la console bash rappresentano lo strumento di cui ogni sistemista Linux non può fare a meno. Modificare file, elaborare contenuti ed operare sui processi sono parte del lavoro quotidiano di chiunque gestisca sistemi informatici più o meno ampi. Interessante è capire come esistano moltissimi comandi a disposizione di [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/linux.png" alt="linux" title="linux" width="85" height="100" class="alignnone size-full wp-image-292" /></p>
<p>La linea di comando e più propriamente la console bash rappresentano lo strumento di cui ogni sistemista Linux non può fare a meno. Modificare file, elaborare contenuti ed operare sui processi sono parte del lavoro quotidiano di chiunque gestisca sistemi informatici più o meno ampi.<br />
Interessante è capire come esistano moltissimi comandi a disposizione di un sistemista oltre a quelli comunemente usati che, per quanto ignorati, possono facilitare il lavoro quotidiano.<br />
Questo primo articolo cerca di effettuare una panoramica ricca di esempi di come sia possibile utilizzare comandi incorporati della shell come <em>set</em>, <em>declare</em>, <em>type</em> e molti altri.</p>
<p><strong>Comandi interni alla shell</strong></p>
<p>La prima panoramica riguarda i comandi interni alla shell. Caratteristica di questi comandi è di non avere binari corrispondenti installati nel sistema (in directory come /bin, /sbin, /usr/bin e così via), infatti è l&#8217;ambiente erogato dall&#8217;eseguibile bash (a sua volta un binario installato nel sistema) a renderli disponibili.</p>
<p><em><strong>set</strong></em></p>
<p>Il comando <em>set</em> permette di modificare molti comportamenti e funzionalità della bash. Per abilitare una funzionalità si antepone all&#8217;opzione interessata un carattere &#8220;-&#8221;, viceversa per disabilitarla è sufficiente anteporre un carattere &#8220;+&#8221; all&#8217;opzione.<br />
Lanciato senza parametri il programma restituisce le impostazioni generali della shell, comprensive di variabili e funzioni che si riferiscono all&#8217;ambiente.<br />
Alcuni esempi di utilizzo di set:<br />
Per fare in modo che le variabili create vengano automaticamente esportate è possibile attivare l&#8217;opzione &#8220;a&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ set -a
$ VARIABILE=&quot;VALORE&quot;
$ bash
$ echo $VARIABILE
VALORE</pre></div></div>

<p>Per fare in modo che i comandi lanciati all&#8217;interno del sistema siano stampati, sarà sufficiente attivare l&#8217;opzione &#8220;x&#8221;, prima dell&#8217;output di ogni comando successivo lanciato apparirà il comando effettivamente lanciato. Cosa questo significhi lo si capisce dal seguente listato:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">rasca@anomalia:~$ set -x
++ echo -ne '\033]0;rasca@anomalia: ~\007'
rasca@anomalia:~$ ls
+ ls --color=auto
...
...</pre></div></div>

<p>il comando lanciato è quindi in realtà un alias dello stesso con l&#8217;opzione &#8220;&#8211;color=auto&#8221;.</p>
<p>Le altre funzionalità relative al comando <em>set</em> si trovano nella voce omonima della <em>man page</em> del comando bash.</p>
<p><em><strong>declare</strong></em></p>
<p>Il comando <em>declare</em> è utilizzato per la dichiarazione delle variabili. Generalmente in bash una variabile viene dichiarata automaticamente con la sua definizione:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ FOO=bar</pre></div></div>

<p>dopodiché è utilizzabile con il nome $FOO. Il comando declare consente in fase di dichiarazione di specificare il tipo di variabile oltre che alcuni attributi inerenti al suo utilizzo.<br />
Ad esempio, per dichiarare un array utilizzando il comando declare si utilizzerà l&#8217;opzione &#8220;-a&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ declare -a elementi=(&quot;primo&quot; &quot;secondo&quot; &quot;terzo&quot;)</pre></div></div>

<p>mentre l&#8217;opzione &#8220;-i&#8221; dichiarerà una variabile di tipo integer:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ declare -i numero=10</pre></div></div>

<p><em>declare</em> torna utile in fase di definizione anche per esportare automaticamente le variabili, attraverso l&#8217;opzione &#8220;-x&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ declare -x -i numero=10</pre></div></div>

<p>questo comando ottiene lo stesso effetto di:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ export numero=10</pre></div></div>

<p>ma in più aggiunge anche la definizione del tipo. Infine, attraverso l&#8217;opzione &#8220;-r&#8221; è possibile rendere la variabile <em>readonly</em>, ossia non scrivibile all&#8217;interno della sessione.</p>
<p><em>NOTA: Le variabili di tipo array non sono esportabili a causa di un baco nella BASH (vedere la man page).</em></p>
<p><em><strong>type</strong></em></p>
<p>Il comando <em>type</em> può essere utilizzato per conoscere le caratteristiche relative agli argomenti passati. Attraverso l&#8217;opzione &#8220;-t&#8221; viene restituito il tipo di parametro passato:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ type -t ls
alias
$ type -t /bin/ls
file
$ type -t echo
builtin
$ type -t set_prefix
function
$ type -t while  
keyword</pre></div></div>

<p>E&#8217; da notare la differenza tra &#8220;ls&#8221; e &#8220;/bin/ls&#8221;, rispettivamente un <em>alias</em> (relativo ad un file eseguibile) ed un <em>file</em> eseguibile. Ad un comando di tipo <em>builtin</em> non corrisponde necessariamente un file eseguibile, mentre le ultime due righe rappresentano rispettivamente una funzione disponibile nell&#8217;ambiente ed una parola chiave relativa al linguaggio bash.<br />
Un&#8217;altra opzione supportata dal comando <em>type</em> è &#8220;-a&#8221; che indica tutte le corrispondenze al parametro passato. Ad esempio, relativamente ai comandi precedentemente esposti i risultati saranno i seguenti:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ type -a echo
echo is a shell builtin
echo is /bin/echo
$ type -a ls  
ls is aliased to `ls --color=auto'
ls is /bin/ls
$ type -a set_prefix
set_prefix is a function
set_prefix () 
{ 
    [ -z ${prefix:-} ] || prefix=${cur%/*}/;
    [ -r ${prefix:-}CVS/Entries ] || prefix=&quot;&quot;
}
$ type -a while     
while is a shell keyword</pre></div></div>

<p>il comando <em>echo</em> viene indicato come interno e disponibile inoltre con l&#8217;eseguibile <em>/bin/echo</em>, lo stesso avviene per il comando <em>ls</em> per il quale viene indicata la definizione dell&#8217;alias oltre che il path del file effettivo. Infine la funzione <em>set_prefix</em> viene stampata nella sua interezza, mentre per <em>while</em> rimane l&#8217;indicazione di <em>keyword</em>.</p>
<p><em><strong>exec</strong></em></p>
<p>Il comando <em>exec</em> permette di lanciare un comando utilizzando il <em>process ID</em> (PID) della shell corrente. Questo significa che la shell verrà rimpiazzata dal comando, non generando un nuovo <em>PID</em> e comporta inoltre che il termine del comando corrisponderà con il termine della shell.<br />
Ad esempio, se nell&#8217;ambiente grafico da una console viene lanciato il comando</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ exec xterm</pre></div></div>

<p>alla chiusura della shell del programma <em>xterm</em>, anche la console verrà automaticamente chiusa.</p>
<p><em><strong>jobs</strong></em></p>
<p>Se il comando interno <em>bg</em> viene utilizzato per mandare un processo in background (cioè sullo sfondo del sistema e non in primo piano, mantenendone l&#8217;esecuzione) ed il comando interno <em>fg</em> viene utilizzato invece per mandare in foreground (quindi, in primo piano) un processo, il comando <em>jobs</em> permette di effettuare il listato dei processi e di conoscere informazioni relative a questi.<br />
Supponendo di avere due script denominati <em>script</em> e <em>script1</em> lanciati entrambi automaticamente in background attraverso il carattere speciale <em>&#038;</em> alla fine dell&#8217;invocazione:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ ./script &amp;
[1] 28548
$ ./script1 &amp;
[2] 29261</pre></div></div>

<p>Sarà possibile conoscere lo stato dei processi in sospeso attraverso <em>jobs</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ jobs
[1]-  Running                 ./script &amp;
[2]+  Running                 ./script1 &amp;</pre></div></div>

<p>Di questi attraverso l&#8217;opzione &#8220;-l&#8221; si potrà conoscere identificativo e <em>PID</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ jobs -l
[1]- 28548 Running                 ./script &amp;
[2]+ 29261 Running                 ./script1 &amp;</pre></div></div>

<p>O solamente il <em>PID</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ jobs -p
28548
29261</pre></div></div>

<p>Su tali processi sarà possibile effettuare operazioni di <em>kill</em> (considerando il <em>PID</em>):</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ kill 28548
$ 
[1]-  Terminated              ./script</pre></div></div>

<p>Oppure operazioni di foregrounding/backgrounding, attraverso i già citati comandi interni <em>fg</em> e <em>bg</em>, considerando invece l&#8217;identificativo:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ fg 2
./script1</pre></div></div>

<p>Il tutto grazie ai dati resi disponibili dal comando interno <em>jobs</em>.</p>
<p><strong>Conclusioni</strong></p>
<p>I comandi interni alla bash illustrati e molti altri sono tutti ottimamente documentati all&#8217;interno della già citata man page della Bash (<em>$ man bash</em>), più propriamente nel capitolo &#8220;<em>COMANDI INCORPORATI DELLA SHELL</em>&#8220;.<br />
Nella seconda parte di questo articolo verranno trattate utility di sistema come <em>paste</em>, <em>tee</em>, <em>apropos</em> e molte altre, generalmente poco utilizzate, ma di indubbio interesse.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2009/09/linux-e-la-linea-di-comando-comandi-particolari-e-poco-conosciuti-bash-comandi-interni-alla-shell/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ClusTerm, ovvero come lavorare in parallelo su molti server senza troppa fatica</title>
		<link>http://www.miamammausalinux.org/2009/03/clusterm-ovvero-come-lavorare-in-parallelo-su-molti-server-senza-troppa-fatica/</link>
		<comments>http://www.miamammausalinux.org/2009/03/clusterm-ovvero-come-lavorare-in-parallelo-su-molti-server-senza-troppa-fatica/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 15:50:32 +0000</pubDate>
		<dc:creator>Alberto Noseda</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Clusterm]]></category>
		<category><![CDATA[Scrittura parallela]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=471</guid>
		<description><![CDATA[Oggi mostriamo un utility che torna comoda quando si lavora in ambito aziendale, dove puo&#8217; capitare di dover lavorare su una batteria di server che fanno tutti lo stesso lavoro, quindi un intervento su una macchina va replicato su tutte. Ad esempio la modifica di un parametro di start di tomcat, piuttosto che dover deployare [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/linux.png" alt="linux" title="linux" width="85" height="100" class="alignnone size-full wp-image-292" /></p>
<p>Oggi mostriamo un utility che torna comoda quando si lavora in ambito aziendale, dove puo&#8217; capitare di dover lavorare su una batteria di server che fanno tutti lo stesso lavoro, quindi un intervento su una macchina va replicato su tutte.<br />
Ad esempio la modifica di un parametro di start di tomcat, piuttosto che dover deployare lo stesso war, o dover restartare a nastro gli apache.</p>
<p>Dopo aver usato konsole e cluster-ssh mi sono imbattuto in <strong><em>clusterm</em></strong> che a mio parere e&#8217; superiore agli altri.</p>
<p>Features:<br />
1 &#8211; Divide lo schermo in tante finestre quanti sono i server del &#8220;cluster&#8221; su cui lavorare (se si sceglie la visualizzazione &#8220;table&#8221;, altre configurazioni sono possibili).<br />
2 &#8211; Per ogni finestra si puo&#8217; decidere se e&#8217; la finestra master (chiamata director) se e&#8217; uno slave (actor) oppure se uscire dal &#8220;cluster&#8221; per lavorare in proprio.<br />
3 &#8211; Crea i &#8220;launcher&#8221;: ovvero i file con le configurazioni dei vari cluster sono visti come icone cliccabili che lanciano gia&#8217; l&#8217;applicativo che apre le n finestre del &#8220;cluster&#8221; in questione. Se usati frequentemente sono comodi da avere sul desktop.<br />
4 &#8211; C&#8217;e&#8217; l&#8217;opzione &#8220;highlight differences&#8221; che graficamente mostra le differenze tra la finestra director e gli actor. Molto comodo se si stanno editando files sulle macchine.<br />
5 &#8211; Sotto gnome prende le impostazioni grafiche di default dello gnome-terminal.</p>
<p>L&#8217;installazione e&#8217; non banalissima, soprattutto come sequenza: vediamo in dettaglio tutti i passi per una Ubuntu standard (testata su una 8.10 64bit), effettuata come utente non privilegiato.</p>
<p>1 &#8211; Scaricare lo <a href="http://www.miamammausalinux.org/wp-content/uploads/2009/03/clusterm.zip">zip</a> che contiene i pacchetti e gli zip richiesti ai punti 3, 5 e 6<br />
2 &#8211; Installazione dipendenze:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">sudo apt-get install libgtk2-perl libextutils-depends-perl 
libextutils-pkgconfig-perl libglade2-dev libgnome2-perl 
libvte-dev libgtk2-gladexml-perl libsocket6-perl perl-doc</pre></div></div>

<p>3 &#8211; Installazione libreria libnetpacket-perl_0.04-1_all che non e&#8217; nei repository (ma nel nostro zip si):</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">sudo dpkg -i libnetpacket-perl_0.04-1_all.deb</pre></div></div>

<p>4 &#8211; Installazione libreria libgnome2-gconf-perl:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">sudo apt-get install libgnome2-gconf-perl</pre></div></div>

<p>5 &#8211; Installazione pacchetto Gnome2-Vte-0.09.tar.gz (sempre nel nostro zip)<br />
Scompattare Gnome2-Vte-0.09.tar.gz<br />
Nella dir dove si e&#8217; scompattato lanciare:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">perl Makefile.PL
make
make test
sudo make install</pre></div></div>

<p>6 &#8211; Installazione pacchetto dell&#8217;applicazione vero e proprio (finalmente!)<br />
Scompattare clusterm-0.6.tar.bz2 (e&#8217; sempre nello zip <img src='http://www.miamammausalinux.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )<br />
Nella dir dove si e&#8217; scompattato dare:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">make
sudo make install</pre></div></div>

<p>Alla fine di tutto cio&#8217; sotto il menu&#8217; Application -&gt; System Tools comparira&#8217; l&#8217;icona di lancio del programma.</p>
<p>Una nota per i furbini che fanno tutto da root quando installano (io sono uno di quelli, solitamente): il make del punto 6 fallira&#8217;, perche&#8217; non e&#8217; l&#8217;utente con cui sta girando l&#8217;istanza di X attuale, quindi il make va lanciato per forza con l&#8217;utente corrente.</p>
<p>A questo punto l&#8217;interfaccia e&#8217; molto intuitiva: una barra di menu&#8217;  dove si possono aggiungere gli host da: File -&gt; New Host</p>
<p>Cio&#8217; detto&#8230; il resto lo scoprirete usando il tool!</p>
<p>enjoy</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2009/03/clusterm-ovvero-come-lavorare-in-parallelo-su-molti-server-senza-troppa-fatica/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Loggare una sessione di shell con &#8220;script&#8221;</title>
		<link>http://www.miamammausalinux.org/2009/01/loggare-una-sessione-di-shell-con-script/</link>
		<comments>http://www.miamammausalinux.org/2009/01/loggare-una-sessione-di-shell-con-script/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 11:27:35 +0000</pubDate>
		<dc:creator>Matteo Cappadonna</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[Loggare sessioni]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=325</guid>
		<description><![CDATA[Quante volte è capitato di eseguire un&#8217;operazione, magari per la prima volta, e dimenticarsi completamente di prendere appunti? Lavorando in ambiente sistemistico, se questo avvenimento non è quotidiano, poco ci manca! Ed in genere come risolviamo il problema? Le soluzioni sono due: Scrolling del buffer del terminale: Alt+Pag.Up permettono di rileggere cosa si è fatto; [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/linux.png" alt="linux" width="85" height="100" class="alignnone size-full wp-image-292" /></p>
<p>Quante volte è capitato di eseguire un&#8217;operazione, magari per la prima volta, e dimenticarsi completamente di prendere appunti?</p>
<p>Lavorando in ambiente sistemistico, se questo avvenimento non è quotidiano, poco ci manca!</p>
<p>Ed in genere come risolviamo il problema? Le soluzioni sono due:</p>
<ol>
<li><strong>Scrolling del buffer del terminale</strong>: Alt+Pag.Up permettono di rileggere cosa si è fatto; il problema è che il buffer dei terminali è limitato (specialmente se si lavora in ambiente non grafico), e spesso alcune cose si perdono comunque;</li>
<li><strong>Visione della history</strong>: I moderni terminali supportano la history, permettendo così di scorrere nei comandi lanciati e richiamarli velocemente; il problema è che anche visualizzando la history, non abbiamo l&#8217;output dei comandi che abbiamo lanciato.</li>
</ol>
<p>Quello che servirebbe è un software che permetta di eseguire un logging completo (quindi sia dell&#8217;input che immettiamo che dell&#8217;output che viene generato).</p>
<p>Ci viene in aiuto <strong>script</strong>! Tanto semplice quanto funzionale.</p>
<p>Il modo più &#8220;pulito&#8221; per eseguire il comando è il seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ script
Script iniziato, il file è typescript
$</pre></div></div>

<p>Come vedete pare che non sia successo nulla. Ed in effetti possiamo dimenticarci di aver lanciato il comando. Continuiamo pure con il nostro lavoro&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ su -
Password:
# pwd
/root
# cd /etc/ssh/
# cat sshd_config | grep PermitRoot
PermitRootLogin yes
# sed -i -e &quot;s/PermitRootLogin yes/PermitRootLogin no/&quot; sshd_config
# cat sshd_config | grep PermitRoot
PermitRootLogin no
# /etc/init.d/ssh restart
* Restarting OpenBSD Secure Shell server sshd                           [ OK ]
# exit
logout
$</pre></div></div>

<p>Semplicemente quando avremo finito la nostra sessione di lavoro, e lanceremo il consueto &#8220;<em>exit</em>&#8220;, avremo un output di questo tipo:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ exit
exit
Script effettuato, il file è typescript</pre></div></div>

<p>Ora, se dovessimo andare a rivedere la nostra sessione, magari per trasformarla in un howto od in un file da tenere sott&#8217;occhio quando tra 6 mesi ci verrà richiesto di fare la stessa cosa, possiamo vedere il contenuto del file &#8220;typescript&#8221; generato da script:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">mcappadonna@laptop ~ $ cat typescript
Script iniziato su ven 16 gen 2009 12:08:38 CET
$ su -
Password:
# pwd
/root
# cd /etc/ssh/
# cat sshd_config | grep PermitRoot
PermitRootLogin yes
# sed -i -e &quot;s/PermitRootLogin yes/PermitRootLogin no/&quot; sshd_config
# cat sshd_config | grep PermitRoot
PermitRootLogin no
# /etc/init.d/ssh restart
* Restarting OpenBSD Secure Shell server sshd                          [ OK ]
# exit
logout
$ exit
exit
&nbsp;
Script effettuato su ven 16 gen 2009 12:09:38 CET</pre></div></div>

<p>Alcune opzioni comode di script sono le seguenti:</p>
<ul>
<li><strong>-a</strong> : Appende l&#8217;output ad un file già presente;</li>
<li><strong>-q</strong> : Elimina dall&#8217;output i messaggi di script;</li>
<li><strong>-t</strong> : Aggiunge all&#8217;output l&#8217;indicazione dell&#8217;ora (utile per tenere un timestamp del lavoro)</li>
</ul>
<p>Ovviamente, potete aggiungere a script l&#8217;indicazione del nome del file da salvare:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ script sessioneDiProva.txt
Script iniziato, il file è sessioneDiProva.txt
$</pre></div></div>

<p>Un&#8217;ultima cosa: se si dovesse avere la necessità di seguire in due utenti (remoti) la stessa sessione di shell ma non fosse possibile installare &#8220;<em>screen</em>&#8221; sulla macchina, una soluzione elegante può essere la seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ mkfifo temp; script -f temp</pre></div></div>

<p>Il comando sembrerà appeso, ma nel momento in cui l&#8217;altro utente va ad eseguire un cat sul file, la sessione di script ha inizio e tutti vedono &#8220;live&#8221; la sessione di shell:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ cat temp
Script iniziato su ven 16 gen 2009 12:16:28 CET
$</pre></div></div>

<p>Comodo no?</p>
<p>Buon lavoro.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2009/01/loggare-una-sessione-di-shell-con-script/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

