  <?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>linux &#8211; paologironi blog</title>
	<atom:link href="https://www.gironi.it/blog/category/linux-it/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.gironi.it/blog</link>
	<description>Appunti sparsi di (retro) informatica, analisi dei dati, statistica, seo, e cose che cambiano</description>
	<lastBuildDate>Fri, 20 Sep 2024 13:09:17 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Come generare la chiave ssh per accedere via shell a un servizio di hosting</title>
		<link>https://www.gironi.it/blog/come-generare-la-chiave-pubblica-e-privata-per-laccesso-ssh-a-un-servizio-di-hosting/</link>
					<comments>https://www.gironi.it/blog/come-generare-la-chiave-pubblica-e-privata-per-laccesso-ssh-a-un-servizio-di-hosting/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Thu, 05 Dec 2019 13:25:50 +0000</pubDate>
				<category><![CDATA[hosting]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[sicurezza]]></category>
		<category><![CDATA[chiave privata]]></category>
		<category><![CDATA[chiave pubblica]]></category>
		<category><![CDATA[ssh]]></category>
		<guid isPermaLink="false">https://www.gironi.it/blog/?p=1503</guid>

					<description><![CDATA[In pochi semplici passi la procedura per poter abilitare l&#8217;autenticazione tramite chiavi ssh ad un comune servizio hosting. Molti servizi di hosting condiviso, anche economici, offrono l&#8217;interessante possibilità di accedere in ssh al proprio spazio server. Non è possibile agire liberamente, in questi casi, installando alcunchè. Però c&#8217;è la possibilità di eseguire semplici comandi di &#8230; <a href="https://www.gironi.it/blog/come-generare-la-chiave-pubblica-e-privata-per-laccesso-ssh-a-un-servizio-di-hosting/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Come generare la chiave ssh per accedere via shell a un servizio di hosting"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>In pochi semplici passi la procedura per poter abilitare l&#8217;autenticazione tramite chiavi ssh ad un comune servizio hosting.</p>



<span id="more-1503"></span>



<p>Molti servizi di hosting condiviso, anche economici, offrono l&#8217;interessante possibilità di accedere in ssh al proprio spazio server. Non è possibile agire liberamente, in questi casi, installando alcunchè. Però c&#8217;è la possibilità di eseguire semplici comandi di shell, compresa la creazione di backup compressi, la copia di files e cartelle e tanto altro.</p>



<p>Alcuni gestori non offrono altro che un accesso &#8220;jailed&#8221; all&#8217;interno del pannello cPanel, altri richiedono di comunicare un indirizzo IP statico dal quale collegarsi, ponendo quell&#8217;IP in whitelist. Malgrado tutte queste limitazioni, generare la coppia di chiavi pubblica/privata per garantirsi l&#8217;accesso da shell al pc remoto è comunque una possibilità utile. <strong>Vediamo per i meno esperti come fare per generare la chiave ssh in pochi, semplici passaggi</strong>.</p>



<h2 class="wp-block-heading">Entro nel cPanel e vado in Accesso SSH</h2>



<p>Il primo passaggio è entrare nel cPanel fornito dal servizio di hosting e trovare l&#8217;icona di &#8220;SSH Access&#8221;, cliccandola.</p>



<figure class="wp-block-image size-large is-resized"><img fetchpriority="high" decoding="async" src="https://www.gironi.it/blog/wp-content/uploads/2019/12/ssh-1024x351.jpg" alt="Accesso ssh" class="wp-image-1507" width="512" height="176" srcset="https://www.gironi.it/blog/wp-content/uploads/2019/12/ssh-1024x351.jpg 1024w, https://www.gironi.it/blog/wp-content/uploads/2019/12/ssh-300x103.jpg 300w, https://www.gironi.it/blog/wp-content/uploads/2019/12/ssh-1200x411.jpg 1200w, https://www.gironi.it/blog/wp-content/uploads/2019/12/ssh.jpg 1365w" sizes="(max-width: 512px) 85vw, 512px" /></figure>



<h2 class="wp-block-heading">Genero e autorizzo la chiave pubblica</h2>



<p>Clicco su &#8220;Manage ssh keys&#8221; e scelgo un nome significativo per la mia chiave.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://www.gironi.it/blog/wp-content/uploads/2019/12/manage-ssh-keys-1024x550.jpg" alt="Come generare la chiave ssh" class="wp-image-1510" width="512" height="275" srcset="https://www.gironi.it/blog/wp-content/uploads/2019/12/manage-ssh-keys-1024x550.jpg 1024w, https://www.gironi.it/blog/wp-content/uploads/2019/12/manage-ssh-keys-300x161.jpg 300w, https://www.gironi.it/blog/wp-content/uploads/2019/12/manage-ssh-keys.jpg 1083w" sizes="(max-width: 512px) 85vw, 512px" /></figure>



<p> Scelgo una password robusta (mi raccomando) e genero la chiave.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://www.gironi.it/blog/wp-content/uploads/2019/12/generate-key.jpg" alt="Generare una nuova chiave ssh" class="wp-image-1512" width="426" height="273" srcset="https://www.gironi.it/blog/wp-content/uploads/2019/12/generate-key.jpg 852w, https://www.gironi.it/blog/wp-content/uploads/2019/12/generate-key-300x192.jpg 300w" sizes="(max-width: 426px) 85vw, 426px" /></figure>



<p><br>A questo punto, comparirà la mia nuova chiave. Non è ancora autorizzata (lo vedo dallo status accanto al nome): non mi resta allora che cliccare su &#8220;Autorizzo&#8221; e attendere la conferma.</p>



<h2 class="wp-block-heading">Scarico la chiave privata</h2>



<p>Ora devo scaricare la mia chiave privata. E&#8217; facilissimo: accanto al nome della mia chiave privata, sulla pagina, troverò il link &#8220;View/Download&#8221;. La salvo in una cartellina sicura del mio computer. <br>Nel mio esempio uso:</p>



<pre class="wp-block-preformatted"> ~/.ssh </pre>



<p>quindi alla fine avrò nel mio pc il file </p>



<pre class="wp-block-preformatted"> ~/.ssh/nomemiachiaveprivata</pre>



<h2 class="wp-block-heading">Cambio i permessi al file</h2>



<p>Per poter aggiungere la mia chiave, è necessario che il file abbia i giusti permessi. Quindi digito:</p>



<pre class="wp-block-preformatted">chmod 400 ~/.ssh/nomemiachiaveprivata</pre>



<h2 class="wp-block-heading">Memorizzo la chiave sul mio pc</h2>



<p>Non voglio dover inserire password, quindi aggiungo la mia chiave con:<br></p>



<pre class="wp-block-preformatted">ssh-add ~/.ssh/nomemiachiaveprivata</pre>



<p>Il sistema mi chiederà, solo per questa volta, di digitare la password.<br>Fatto! Tutto qua&#8230;</p>



<h2 class="wp-block-heading">E ora, mi collego con la mia chiave ssh!</h2>



<p>Nulla di più semplice. Basterà il comando:</p>



<pre class="wp-block-preformatted">ssh -i ~/.ssh/nomemiachiaveprivata nomeutente@indirizzoip</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/come-generare-la-chiave-pubblica-e-privata-per-laccesso-ssh-a-un-servizio-di-hosting/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>La magia del testo nella console: figlet, boxes, lolcat, toilet.</title>
		<link>https://www.gironi.it/blog/la-magia-del-testo-nella-console-figlet-boxes-lolcat-toilet/</link>
					<comments>https://www.gironi.it/blog/la-magia-del-testo-nella-console-figlet-boxes-lolcat-toilet/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Wed, 20 Nov 2019 15:53:16 +0000</pubDate>
				<category><![CDATA[cli]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[tipografia]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[boxes]]></category>
		<category><![CDATA[figlet]]></category>
		<category><![CDATA[lolcat]]></category>
		<category><![CDATA[vi]]></category>
		<guid isPermaLink="false">https://www.gironi.it/blog/?p=1318</guid>

					<description><![CDATA[Il mondo degli amministratori di sistema, degli sviluppatori &#8220;vecchia-scuola&#8221; o più semplicemente degli utenti curiosi vive l&#8217;ambiente testuale della console come una vera e propria palestra di libertà. Libertà da mouse e icone, puntatori e widget. Espressività, velocità, senso di controllo. Chi ha detto, tuttavia, che il testo debba essere noioso? Che non ci possa &#8230; <a href="https://www.gironi.it/blog/la-magia-del-testo-nella-console-figlet-boxes-lolcat-toilet/" class="more-link">Leggi tutto<span class="screen-reader-text"> "La magia del testo nella console: figlet, boxes, lolcat, toilet."</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Il mondo degli amministratori di sistema, degli sviluppatori &#8220;vecchia-scuola&#8221; o più semplicemente degli utenti curiosi vive l&#8217;ambiente testuale della console come una vera e propria palestra di libertà. Libertà da mouse e icone, puntatori e widget. Espressività, velocità, senso di controllo.</p>



<p>Chi ha detto, tuttavia, che il testo debba essere noioso? Che non ci possa e debba essere un piacere funzionale e/o estetico nell&#8217;usare in maniera creativa ciò che la console mette a disposizione?</p>



<p>Gli strumenti che possono essere utilizzati con piacere sono numerosi. Ne segnalerò quattro, i miei preferiti. </p>



<span id="more-1318"></span>



<h2 class="wp-block-heading">Titoli, titoli, titoli&#8230; Figlet</h2>



<p>Di tutti i tool pensati al fine di evidenziare del testo a schermo, <a href="http://www.figlet.org/" target="_blank" rel="noreferrer noopener" aria-label="Figlet (apre in una nuova scheda)">Figlet</a> è probabilmente il più conosciuto. E&#8217; presente nei repository di qualsiasi distribuzione e l&#8217;uso più semplice è quello che ci si può aspettare: si passa un output di testo al programma con una pipe&#8230;ed ecco il risultato:</p>



<figure class="wp-block-image"><img decoding="async" width="701" height="197" src="https://www.gironi.it/blog/wp-content/uploads/2019/10/figlet-e1572456504842.png" alt="figlet e1572456504842" class="wp-image-1321" srcset="https://www.gironi.it/blog/wp-content/uploads/2019/10/figlet-e1572456504842.png 701w, https://www.gironi.it/blog/wp-content/uploads/2019/10/figlet-e1572456504842-300x84.png 300w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px" /><figcaption>Benvenuti nel mondo della tipografia ASCII&#8230;</figcaption></figure>



<p>Ma Figlet ovviamente è, o può essere, molto di più. In primo luogo perchè presenta un bel numero di possibilità, in seconda battuta perchè può essere un passaggio in un flusso di elaborazioni in puro stile Unix, la cui concatenazione può portare a risultati davvero sorprendenti e stimolare la fantasia di chiunque.</p>



<p>Figlet è disponibile per la più ampia varietà possibile di sistemi operativi. <br>Ci sono proprio tutti, anche i più venerabili: MsDos, Amiga, Atari, Acorn, Os2, BeOs&#8230;</p>



<p>La <a href="http://www.figlet.org/fontdb.cgi" target="_blank" rel="noreferrer noopener" aria-label="varietà dei font  (apre in una nuova scheda)">varietà dei font </a>è notevole e consente di &#8220;giocare&#8221; con la fantasia. </p>



<h2 class="wp-block-heading">Boxes: non solo riquadri</h2>



<figure class="wp-block-image"><img decoding="async" width="737" height="339" src="https://www.gironi.it/blog/wp-content/uploads/2019/10/boxes-e1572456444706.png" alt="boxes e1572456444706" class="wp-image-1324" srcset="https://www.gironi.it/blog/wp-content/uploads/2019/10/boxes-e1572456444706.png 737w, https://www.gironi.it/blog/wp-content/uploads/2019/10/boxes-e1572456444706-300x138.png 300w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px" /><figcaption><em>boxes non è solo per tracciare semplici riquadri&#8230;</em></figcaption></figure>



<p>Il nome di questo comando è già esplicativo: si tratta di disegnare un bordo attorno a un testo. Ma boxes non si limita a tratteggiare un bordo: consente infatti di dare libero sfogo alla fantasia, di strappare un sorriso, di venire in aiuto a chi scrive codice e agli amministratori di sistema.</p>



<p>Digitate un semplice</p>



<pre class="wp-block-preformatted">boxes -l</pre>



<p>e potrete vedere la miriade di stili a vostra disposizione: riquadri di ogni genere, ma anche pergamene, babbi natale, animali&#8230; Il comando poi è ricco di opzioni per gestire al meglio le dimensioni e le spaziature. Insomma, vi troverete presto a voler riquadrare ogni cosa!</p>



<h2 class="wp-block-heading">Toilet: il nome è così così, ma il risultato&#8230;</h2>



<figure class="wp-block-image"><img decoding="async" width="737" height="191" src="https://www.gironi.it/blog/wp-content/uploads/2019/10/toilet-e1572456414761.png" alt="toilet e1572456414761" class="wp-image-1327" srcset="https://www.gironi.it/blog/wp-content/uploads/2019/10/toilet-e1572456414761.png 737w, https://www.gironi.it/blog/wp-content/uploads/2019/10/toilet-e1572456414761-300x78.png 300w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px" /><figcaption><em>Bordi e arcobaleni&#8230;tutta l&#8217;allegria di Toilet</em></figcaption></figure>



<p>Lo so. Un comando che si chiama toilet certo non fa venire in mente nulla di buono. Eppure posso assicurare che toilet è capace di aggiungere una nota di colore e creatività di sapore &#8220;vecchia scuola ansi art&#8221; ad ogni scritta. </p>



<p>Provate qualcosa tipo:</p>



<pre class="wp-block-preformatted">echo "Ciao Mondo!" | toilet -f small -F border --gay</pre>



<p>e sono certo che passerete un sacco di tempo a giocare con gli effetti di colore che lolcat può donare a un testo.</p>



<h2 class="wp-block-heading">Lolcat: la bellezza delle sfumature</h2>



<figure class="wp-block-image"><img decoding="async" width="737" height="451" src="https://www.gironi.it/blog/wp-content/uploads/2019/10/lolcat.png" alt="Screenshot Lolcat" class="wp-image-1329" srcset="https://www.gironi.it/blog/wp-content/uploads/2019/10/lolcat.png 737w, https://www.gironi.it/blog/wp-content/uploads/2019/10/lolcat-300x184.png 300w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px" /><figcaption>Un font isometrico di Figlet incontra i gradienti di Lolcat&#8230;</figcaption></figure>



<p>La definitiva dimostrazione del fatto che la linea di comando non è affatto noiosa o seriosa viene dalle sfumature arcobaleno di Lolcat: aggiungete il comando in una concatenazione di comandi, magari &#8220;sposandolo&#8221; con un font spettacolare di Figlet e potrete sperimentare una varietà di forme e colori capaci di soprendervi.</p>



<h2 class="wp-block-heading">Usare questi strumenti in VI</h2>



<p>A me piace avere la possbilità di usare questi strumenti all&#8217;interno dell&#8217;editor che uso quotidianamente, dunque ho inserito questa mappatura nel mio file .vimrc:</p>



<pre class="wp-block-preformatted">vmap &lt;F2&gt; !boxes &lt;CR&gt;
vmap &lt;F3&gt; !boxes -d shell &lt;CR&gt; 
vmap &lt;F4&gt; !figlet &lt;CR&gt;</pre>



<p>basta selezionare la frase da evidenziare e poi usare uno dei tasti funzione mappati per ottenere l&#8217;effetto desiderato.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/la-magia-del-testo-nella-console-figlet-boxes-lolcat-toilet/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Tmux &#8211; più programmi dalla riga di comando</title>
		<link>https://www.gironi.it/blog/tmux-piu-programmi-dalla-riga-di-comando/</link>
					<comments>https://www.gironi.it/blog/tmux-piu-programmi-dalla-riga-di-comando/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Sat, 12 Oct 2019 14:56:08 +0000</pubDate>
				<category><![CDATA[cli]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[tools]]></category>
		<guid isPermaLink="false">https://www.gironi.it/blog/?p=1235</guid>

					<description><![CDATA[Parlare di &#8220;Terminal Multiplexer&#8221; può spaventare: cosa sarà mai? La risposta è: qualcosa di molto utile, specialmente se siete soliti lavorare su server remoti. Se poi la linea di comando per voi è un piacere, allora Tmux può riservarvi ore di gioia… Tmux consente infatti di aprire sessioni su server remoti, lanciare operazioni, staccare la &#8230; <a href="https://www.gironi.it/blog/tmux-piu-programmi-dalla-riga-di-comando/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Tmux &#8211; più programmi dalla riga di comando"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Parlare di &#8220;<em>Terminal Multiplexer</em>&#8221; può spaventare: cosa sarà mai?<br> La risposta è: qualcosa di molto utile, specialmente se siete soliti lavorare su server remoti. Se poi la linea di comando per voi è un piacere, allora Tmux può riservarvi ore di gioia…<br></p>



<span id="more-1235"></span>



<p>Tmux consente infatti di aprire sessioni su server remoti, lanciare operazioni, staccare la finestra, andarsene a casa e riattaccare la sessione ritrovando tutto come se nulla fosse accaduto.<br> Si tratta della funzione principale del glorioso <a rel="noreferrer noopener" href="https://www.gnu.org/software/screen/" target="_blank">GNU Screen</a>, ma cui Tmux aggiunge una moltitudine di migliorie.</p>



<p><strong>Con Tmux lo schermo si può suddividere come si vuole. L&#8217;organizzazione in sessioni/finestre/pannelli consente di avere spazi di lavoro straordinariamente razionali e organizzati</strong>. <br>Al punto che per alcuni è diventato un&#8217;alternativa ai comuni (e pesanti) window manager.<br></p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img decoding="async" src="https://www.gironi.it/blog/wp-content/uploads/2019/10/tmux-esempio.jpg" alt="Esempio di Tmux" class="wp-image-1244" width="677" height="340" srcset="https://www.gironi.it/blog/wp-content/uploads/2019/10/tmux-esempio.jpg 1353w, https://www.gironi.it/blog/wp-content/uploads/2019/10/tmux-esempio-300x151.jpg 300w, https://www.gironi.it/blog/wp-content/uploads/2019/10/tmux-esempio-1024x515.jpg 1024w, https://www.gironi.it/blog/wp-content/uploads/2019/10/tmux-esempio-1200x603.jpg 1200w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px" /><figcaption>Esempio di sessione Tmux: nello stesso schermo ho disposto Vi, Htop, Newsboat, Sc-Im&#8230;</figcaption></figure></div>



<p> Tornando alla nostra amata linea di comando, Tmux presenta un vantaggio, che è anche un&#8217;arma a doppio taglio: l&#8217;<a href="#personalizzare" class="rank-math-link">estrema configurabilità</a>.<br> Ho conosciuto persone impegnate più nel configurare la linea di stato e il key mapping di Tmux che a usarlo realmente…anzi, una di quelle persone sono proprio io 🙂</p>



<p> Il mio consiglio allora è quello di &#8220;farsi le ossa&#8221; smanettando con il file di configurazione<em> .tmux.conf</em>, esultare per le migliorie e giocando con <em><a rel="noreferrer noopener" href="https://github.com/powerline/powerline" target="_blank">powerline</a></em> e <a rel="noreferrer noopener" href="https://github.com/tmux-plugins" target="_blank">plugins</a>, ma poi tornare all&#8217;essenzialità. Perchè la velocità, il poter non staccare mai le mani dalla tastiera, la pulizia nell&#8217;organizzazione delle informazioni sono il segreto e la forza di Tmux. Che è un programma &#8220;esigente&#8221;, come Vi. Ma alla fine ripaga per lo sforzo, e lo fa con gli interessi.</p>



<div class="wp-block-uagb-advanced-heading uagb-block-b8f08a83"><h2 class="uagb-heading-text">Sessioni, finestre, pannelli</h2><div class="uagb-separator-wrap"><div class="uagb-separator"></div></div><p class="uagb-desc-text">dove comincia il divertimento</p></div>



<p></p>



<p>Per poter lavorare con profitto con Tmux è necessario capire la &#8220;logica&#8221; dell&#8217;applicazione. E questa logica è tutta compresa nel modo in cui il programma gestisce gli elementi base: <strong>sessioni</strong>, <strong>finestre</strong>, <strong>pannelli</strong>.</p>



<p>Si comincia dalla <strong>sessione</strong>. Ogni volta che lanciamo Tmux viene creata una sessione. Se vogliamo dare un nome alla nostra sessione (cosa che consiglio sempre di fare, assegnando nomi significativi, a differenza di ciò che farò in questo esempio&#8230;) basterà digitare </p>



<pre class="wp-block-preformatted">​tmux​​ ​new​​ ​-s​​ ​primasessione</pre>



<p>Il risultato sarà uno schermo nero con la riga di stato in basso che riporterà il nome della sessione.</p>



<hr class="wp-block-separator"/>



<div class="wp-block-uagb-info-box uagb-infobox__outer-wrap uagb-block-77e32502"><div class="uagb-infobox__content-wrap uagb-infobox uagb-infobox-has-icon uagb-infobox-icon-left uagb-infobox-left uagb-infobox-stacked-tablet uagb-infobox-image-valign-middle uagb-infobox-enable-border-radius "><div class="uagb-ifb-left-right-wrap"><div class="uagb-ifb-image-icon-content uagb-ifb-imgicon-wrap"><div class="uagb-ifb-icon-wrap"><span class="uagb-ifb-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"><path d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"></path></svg></span></div></div><div class="uagb-ifb-content"><div class="uagb-ifb-title-wrap"><h4 class="uagb-ifb-title">L&#8217;onnipresente prefisso</h4></div><div class="uagb-ifb-text-wrap"><p class="uagb-ifb-desc">I comandi Tmux vengono inseriti attraverso una sequenza di tasti che comincia con il prefisso CTRL-B. <a href="#personalizzare">Vedremo più avanti</a> come ridefinire questa scomoda combinazione con la più agevole (per le dita) sequenza CTRL-A tipica di screen. Ogni volta che scriverò dunque PREFISSO intenderò questa combinazione di tasti.</p></div></div></div></div></div>



<hr class="wp-block-separator"/>



<h2 class="wp-block-heading">La sessione può essere staccata</h2>



<p>Se nel mio terminale lancio un applicativo, ad esempio htop, mi basterà digitare la sequenza PREFISSO-D per tornare al prompt. Cosa è successo? <br>Semplice. Il programma in realtà è ancora &#8220;vivo&#8221;, ma è stato <em>staccato</em>. Se digito:</p>



<pre class="wp-block-preformatted">tmux ls</pre>



<p>posso notare come la sessione che ho staccato &#8220;esista ancora&#8221;. Mi basterà &#8220;riattaccarla&#8221; con:</p>



<pre class="wp-block-preformatted">tmux​​ attach​​ -t primasessione​​ </pre>



<p>e come per magia ritroverò il mio htop in azione! Non è magia, ma ci si avvicina.<br>Per inciso, se voglio &#8220;uccidere&#8221; la sessione il comando è:</p>



<pre class="wp-block-preformatted">tmux​​ kill-session​​ -t​​ primasessione</pre>



<p>E&#8217; giunto il momento di creare una sessione che presenti due finestre. Diciamo una prima finestra con una shell, e la seconda con un Midnight Commander. Digito dunque:</p>



<pre class="wp-block-preformatted">tmux new -s miasessione -n miashell</pre>



<p>Tutto come previsto. Si apre la finestra con la sessione &#8220;miasessione&#8221; e il prompt della shell. Ora mi basta creare una nuova finestra con PREFISSO-C e lanciare mc.</p>



<p>Visto? nella riga di stato posso vedere la presenza, nella sessione miasessione, delle due finestre: miashell e mc. Per rinominare una finestra mi basta usare PREFISSO-, (il prefisso CTRL-B oppure CTRL-A se l&#8217;ho ridefinito, seguito da una virgola).</p>



<p>Le finestre sono precedute da un numero. Di default la prima finestra ha il numero 0, ma <a href="#personalizzare">vedremo in seguito</a> come ridefinire la cosa per far iniziare la sequenza dal numero 1. </p>



<p>Mi basterà digitare PREFISSO+numero per &#8220;saltare&#8221; da una finestra a un&#8217;altra.</p>



<p>La parte più bella però è la successiva. Posso infatti dividere ogni mia finestra in più <strong>pannelli</strong>.</p>



<p>Se guardate l&#8217;immagine più sopra con i 4 applicativi disposti in uno schema 2&#215;2 potete facilmente capire cosa si possa ottenere. In pratica, lo schermo può essere suddiviso a piacimento, disponendo i programmi come risulta più comodo. L&#8217;esempio classico di un amministratore di server che può monitorare più macchine o il programmatore che tiene a schermo editor, debugger e riga comando / output possono bastare a far capire l&#8217;utilità di una soluzione di questo tipo.</p>



<p>La suddivisione dello schermo avviene con i comandi PREFISSO-% per la suddivisione verticale e PREFISSO-&#8221; per quella orizzontale, ma redifiniremo questi tasti in maniera più intuitiva agendo sul file di configurazione.</p>



<h2 class="has-text-align-center wp-block-heading" id="personalizzare">La gioia della personalizzazione</h2>



<p>La personalizzazione di Tmux avviene tutta attraverso la <strong>scrittura del file <em>.tmux.conf</em></strong> presente di default nella propria home directory.</p>



<p>La fantasia e le innumerevoli possibilità possono fornire ore e ore di svago per chiunque coltivi la passione della customizzazione, consentendo anche soluzioni assai avanzate. Non è questa la sede per spingerci verso arditi settaggi (lascio ai link e ai libri qua sotto il compito per i più curiosi e interessati), ma mi limito a &#8220;ritoccare&#8221; alcuni aspetti molto importanti per quanto riguarda le funzionalità base del programma.</p>



<p>Apro dunque con il mio editor preferito (oppure creo) il file .tmux.conf</p>



<p>La primissima cosa che andrò a modificare è il PREFISSO. CTRL-B è infatti una sequenza che giudico infelicissima. Meglio, molto meglio CTRL-A, che non a caso è il prefisso standard di GNU Screen:</p>



<pre class="wp-block-preformatted"># Ctrl-a al posto di Ctrl-b
# Cancello la combinazione C-b
unbind C-b
# e setto C-a
set -g prefix C-a</pre>



<p>Voglio poi che l&#8217;indice base per finestre e pannelli parta da 1 anzichè da 0:</p>



<pre class="wp-block-preformatted"># Indice base per le finestre a 1 invece di 0
set -g base-index 1
# Indice per i pannelli a 1 invece di 0
setw -g pane-base-index 1</pre>



<p>Voglio avere il manuale a portata di tasto PREFISSO-?, e voglio poter cambiare la mia configurazione e ricaricarla con una semplice sequenza di tasti (PREFISSO-r) per fare i miei esperimenti:</p>



<pre class="wp-block-preformatted"># mostra il manuale
bind-key ? command-prompt "split-window -h 'exec man %%'"
# ricarica il file di configurazione
bind r source-file ~/.tmux.conf  \; display  "Ricaricato!"</pre>



<p>Voglio divertirmi a suddividere la mia finestra in più pannelli in maniera intuitiva. Uso \ oppure | per la suddivisione verticale e &#8211; per quella orizzontale. Semplice e intuitivo!</p>



<pre class="wp-block-preformatted"># Dividi
bind-key - split-window -v
bind-key \ split-window -h
bind-key | split-window -h</pre>



<p>Abilitiamo il mouse, e poi voglio i colori!</p>



<pre class="wp-block-preformatted"># Attiva il mouse
set -g mouse on

# 256 colori
set -g default-terminal "screen-256color"</pre>



<p>Su riga di comando, taglia e incolla personalizzati, potenziamento della clipboard, temi e plugin lascio il divertimento a voi, e le spiegazioni ai testi consigliati. E&#8217; tutto molto facile, tutto molto ma molto ricco di soddisfazioni. Buon divertimento con Tmux!</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-uagb-advanced-heading uagb-block-f87ef893"><h2 class="uagb-heading-text">Approfondimenti</h2><div class="uagb-separator-wrap"><div class="uagb-separator"></div></div><p class="uagb-desc-text">le risorse in rete, i testi per sapere tutto</p></div>



<h3 class="has-text-align-center wp-block-heading">Risorse online</h3>



<ul class="wp-block-list"><li><a rel="noreferrer noopener" aria-label="The Tao of tmux - leggilo online (apre in una nuova scheda)" href="https://leanpub.com/the-tao-of-tmux/read" target="_blank">The Tao of tmux &#8211; leggilo online</a> (inglese)</li><li><a rel="noreferrer noopener" aria-label="Il manuale di Tmux (apre in una nuova scheda)" href="http://man.openbsd.org/OpenBSD-current/man1/tmux.1" target="_blank">Il manuale di Tmux</a> (inglese)</li><li><a href="https://www.linode.com/docs/networking/ssh/persistent-terminal-sessions-with-tmux/" target="_blank" rel="noreferrer noopener" aria-label="Una sintetica introduzione ai comandi principali  (apre in una nuova scheda)">Una sintetica introduzione ai comandi principali </a>(inglese)</li></ul>



<h3 class="has-text-align-center wp-block-heading">Due ottimi libri acquistabili su Amazon</h3>



<div style="text-align: center">
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-eu.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&amp;t=consulenzeinf-21&amp;m=amazon&amp;o=29&amp;p=8&amp;l=as1&amp;IS2=1&amp;asins=B01N9HBR3D&amp;linkId=13fc53a75df9b71ee78f29df0212d0b0&amp;bc1=000000&amp;lt1=_blank&amp;fc1=333333&amp;lc1=0066c0&amp;bg1=ffffff&amp;f=ifr">
    </iframe>

<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-eu.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=consulenzeinf-21&amp;o=29&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=178398516X&amp;linkId=a36032fcf833550e5d44096cb003cd74"></iframe>
</div>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/tmux-piu-programmi-dalla-riga-di-comando/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Montare una cartella remota nel filesystem locale con sshfs</title>
		<link>https://www.gironi.it/blog/montare-una-cartella-remota-nel-filesystem-locale/</link>
					<comments>https://www.gironi.it/blog/montare-una-cartella-remota-nel-filesystem-locale/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Mon, 07 Oct 2019 19:23:41 +0000</pubDate>
				<category><![CDATA[cli]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[server]]></category>
		<guid isPermaLink="false">https://www.gironi.it/blog/?p=1227</guid>

					<description><![CDATA[Può capitare di collegarsi spesso via ssh ad una macchina remota, per i più disparati motivi.Nel caso si lavori sovente su di una macchina remota, mettiamo per modificare i files di un sito, non sarebbe comodissimo poter vedere le directories che ci interessano come fossero parte del nostro filesystem locale? La cosa è fattibilissima. Mi &#8230; <a href="https://www.gironi.it/blog/montare-una-cartella-remota-nel-filesystem-locale/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Montare una cartella remota nel filesystem locale con sshfs"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Può capitare di <strong>collegarsi spesso via ssh ad una macchina remota</strong>, per i più disparati motivi.<br>Nel caso si lavori sovente su di una macchina remota, mettiamo per modificare i files di un sito, non sarebbe comodissimo poter vedere le directories che ci interessano come fossero parte del nostro filesystem locale?</p>



<span id="more-1227"></span>



<p>La cosa è fattibilissima.</p>



<p>Mi spiego con un esempio banale. Su di un cloud server <em>Amazon Lightsails </em>ho installato uno <em>stack Bitnami WordPress</em>. <br>Diciamo che mi interessa poter <strong>montare la cartella htdocs nel mio filesystem locale</strong>.</p>



<p>Ecco come fare:</p>



<p>Basta <strong>installare sshfs</strong> sulla propria macchina Linux. <br>Ad esempio in un sistema Debian e derivate userò:</p>



<pre class="wp-block-preformatted">sudo apt install sshfs</pre>



<p>e poi si può montare la cartella htdocs dell&#8217;utente di esempio bitnami come fs locale in ~/sito.</p>



<p>Creo allora la cartella:</p>



<pre class="wp-block-preformatted">mkdir ~/sito</pre>



<p>e poi digito:</p>



<pre class="wp-block-preformatted">sudo sshfs bitnami@ILMIOIP:/opt/bitnami/apps/wordpress/htdocs ~/sito -o IdentityFile=~/.ssh/LAMIACHIAVEPRIVATA.pem -o allow_other       </pre>



<p>Ovviamente in questo esempio presuppongo che l&#8217;utente si chiami bitnami e si dovrà sostituire ILMIOIP con l&#8217;ip della macchina remota e LAMIACHIAVEPRIVATA.pem con la chiave privata corrispondente.</p>



<p>Poi mi basterà andare in </p>



<pre class="wp-block-preformatted">cd ~/sito</pre>



<p>per poter lavorare sul sito remoto nella massima comodità.</p>



<p>Per smontare la directory dal mio filesystem locale mi basterà il comando:                                                        </p>



<pre class="wp-block-preformatted">sudo fusermount -u ~/sito</pre>



<hr class="wp-block-separator"/>



<h3 class="has-text-align-center wp-block-heading">Risolvere un problema di autenticazione</h3>



<p>Gestendo più server, può capitare di avere molteplici identità e di incappare in fase di autenticazione nell&#8217;errore <br><em>Too many authentication failures for user</em></p>



<p>Quello che possiamo fare è far in modo che il sistema non cerchi di indentificare automaticamente l&#8217;utente, usando ssh in questo modo:</p>



<pre class="wp-block-preformatted">ssh -o IdentitiesOnly=yes NOMEUTENTE@IPSERVER</pre>



<h3 class="has-text-align-center wp-block-heading">Libri sull&#8217;argomento</h3>



<div style="text-align:center">
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-eu.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&amp;t=consulenzeinf-21&amp;m=amazon&amp;o=29&amp;p=8&amp;l=as1&amp;IS1=1&amp;asins=0596008953&amp;linkId=ca653802c120d46804229e818818ee6f&amp;bc1=ffffff&amp;lt1=_blank&amp;fc1=333333&amp;lc1=0066c0&amp;bg1=ffffff&amp;f=ifr">
    </iframe>

<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-eu.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=consulenzeinf-21&amp;o=29&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=1642350028&amp;linkId=548e84e4bb41e8e5421530d2edfe89eb"></iframe>
</div>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/montare-una-cartella-remota-nel-filesystem-locale/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Google Analytics da riga di comando: generare un report</title>
		<link>https://www.gironi.it/blog/google-analytics-report-da-riga-di-comando/</link>
					<comments>https://www.gironi.it/blog/google-analytics-report-da-riga-di-comando/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Sun, 22 Sep 2019 16:36:43 +0000</pubDate>
				<category><![CDATA[analytics]]></category>
		<category><![CDATA[cli]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[script]]></category>
		<guid isPermaLink="false">https://www.gironi.it/blog/?p=1213</guid>

					<description><![CDATA[Per chi lavora prevalentemente da terminale &#8211; penso ad esempio agli amministratori di sistema, a chi preferisce un ambiente senza fronzoli e distrazioni, a chi vuole risparmiare memoria o semplicemente trova più appagante la &#8220;vecchia scuola&#8221; &#8211; può nascere se non l&#8217;esigenza almeno il desiderio di consultare i dati di Google Analytics senza ricorrere al &#8230; <a href="https://www.gironi.it/blog/google-analytics-report-da-riga-di-comando/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Google Analytics da riga di comando: generare un report"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Per chi lavora prevalentemente da terminale &#8211; penso ad esempio agli amministratori di sistema, a chi preferisce un ambiente senza fronzoli e distrazioni, a chi vuole risparmiare memoria o semplicemente trova più appagante la &#8220;vecchia scuola&#8221; &#8211; può nascere se non l&#8217;esigenza almeno il desiderio di <strong>consultare i dati di Google Analytics senza ricorrere al browser</strong>.</p>



<p>Personalmente, trovo utile avere nella mia scatola degli attrezzi informatici uno script che mi consenta di avere i dati salienti di Analytics, quelli per me utili da monitorare quotidianamente, in breve tempo.</p>



<p>La procedura per realizzare l&#8217;obiettivo tramite python e l&#8217;API Google Analytics non è delle più immediate&#8230; però vale bene la mezz&#8217;oretta di tempo necessaria per la messa in opera.</p>



<span id="more-1213"></span>



<p>Occorre procedere per passaggi. In primo luogo ho installato i moduli python necessari via pip:</p>



<h2 class="wp-block-heading">Installo i moduli python</h2>



<pre class="wp-block-preformatted">pip install --upgrade google-api-python-client
pip install --upgrade oauth2client</pre>



<p>Ho seguito i passaggi indicati da Google per la creazione di un&#8217;utenza di servizio nelle API.</p>



<h2 class="wp-block-heading">Creo il progetto</h2>



<p>Per creare il progetto si parte da qua:</p>



<pre class="wp-block-preformatted"><a rel="noreferrer noopener" aria-label=" (apre in una nuova scheda)" href="https://console.developers.google.com/flows/enableapi?apiid=analyticsreporting.googleapis.com&amp;credential=client_key" target="_blank">https://console.developers.google.com/flows/enableapi?apiid=analyticsreporting.googleapis.com&amp;credential=client_key</a></pre>



<p>Nella piattaforma di sviluppo Google ho creato un progetto (io l&#8217;ho chiamato &#8220;analytics&#8221;, che fantasia&#8230;).</p>



<h2 class="wp-block-heading">Creo il service account</h2>



<p>A questo punto, ho creato il service account scegliendo quel progetto:</p>



<pre class="wp-block-preformatted"><a href="https://console.cloud.google.com/iam-admin/serviceaccounts" target="_blank" rel="noreferrer noopener" aria-label=" (apre in una nuova scheda)">https://console.cloud.google.com/iam-admin/serviceaccounts</a></pre>



<p>Ho creato la chiave. Ho generato e scaricato il file json nella cartella dove ho salvato il mio script, rinominandolo <strong>google_secrets.json</strong></p>



<p>Ho associato al mio account Analytics la casella email generata da Google come utente con poteri di analisi e visualizzazione. (Dalle <em>impostazioni, account, utenti</em>).</p>



<p>La parte più noiosa è terminata, e per fortuna non dovrò più ripeterla. Ora viene la parte migliore.</p>



<h2 class="wp-block-heading">Finalmente&#8230;lo script di esempio</h2>



<p>Ho scaricato il file d&#8217;esempio <a rel="noreferrer noopener" aria-label="HelloAnalytics.py (apre in una nuova scheda)" href="https://developers.google.com/analytics/resources/samples/service-py-v4.txt" target="_blank">HelloAnalytics.py</a> inserendo il percorso del file JSON e l&#8217;id della vista da interrogare. </p>



<p>Le variabili da valorizzare sono:</p>



<pre class="wp-block-preformatted">KEY_FILE_LOCATION = ''
</pre>



<p>dove ho indicato il mio file google_secrets.json. E<br></p>



<pre class="wp-block-preformatted">VIEW_ID = ''</pre>



<p>dove andrò a scrivere l&#8217;id della vista Analytics. <br>Per trovare l&#8217;id della <strong>vista </strong>ho usato Account Explorer: </p>



<pre class="wp-block-preformatted"><a rel="noreferrer noopener" aria-label=" (apre in una nuova scheda)" href="https://ga-dev-tools.appspot.com/account-explorer/" target="_blank">https://ga-dev-tools.appspot.com/account-explorer/ </a></pre>



<p>oppure basta guardare in Analytics.</p>



<p>Poi ho lanciato </p>



<pre class="wp-block-preformatted">python HelloAnalytics.py</pre>



<p>Tutto ok, lo script restituisce il risultato atteso, cioè i dati degli ultimi 7 giorni delle sessioni per paese. </p>



<p>Ora non resta che modificare lo script a proprio piacimento, giocando con date, dimensioni e metriche al fine di ottenere in output ciò che più serve. E qui, l&#8217;unico limite diventa la fantasia.</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/google-analytics-report-da-riga-di-comando/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AWK: un amico per aiutarci con i log files (e non solo)</title>
		<link>https://www.gironi.it/blog/awk-un-amico-per-aiutarci-con-i-log-files-e-non-solo/</link>
					<comments>https://www.gironi.it/blog/awk-un-amico-per-aiutarci-con-i-log-files-e-non-solo/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Wed, 24 Feb 2016 14:48:28 +0000</pubDate>
				<category><![CDATA[awk]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[riga di comando]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[unix]]></category>
		<guid isPermaLink="false">http://www.gironi.it/blog/?p=445</guid>

					<description><![CDATA[AWK &#8211; Un po&#8217; di storia&#8230; La storia di AWK è lunga, in termini informatici lunghissima. E&#8217; il 1977 quando Alfred Aho, Peter Weinberger e Brian Kerningham (dalle iniziali dei tre il suo nome) presentano questo anomalo linguaggio interpretato, utilissimo per processare files di testo strutturati e generare report. AWK è un più di un &#8230; <a href="https://www.gironi.it/blog/awk-un-amico-per-aiutarci-con-i-log-files-e-non-solo/" class="more-link">Leggi tutto<span class="screen-reader-text"> "AWK: un amico per aiutarci con i log files (e non solo)"</span></a>]]></description>
										<content:encoded><![CDATA[<h3>AWK &#8211; Un po&#8217; di storia&#8230;</h3>
<p>La storia di AWK è lunga, in termini informatici lunghissima. E&#8217; il 1977 quando Alfred Aho, Peter Weinberger e Brian Kerningham (dalle iniziali dei tre il suo nome) presentano questo anomalo linguaggio interpretato, utilissimo per processare files di testo strutturati e generare report.<span id="more-445"></span></p>
<p><figure id="attachment_450" aria-describedby="caption-attachment-450" style="width: 203px" class="wp-caption alignleft"><img decoding="async" class="wp-image-450 size-medium" src="http://www.gironi.it/blog/wp-content/uploads/2016/02/awk-book-203x300.jpg" alt="awk-book" width="203" height="300" srcset="https://www.gironi.it/blog/wp-content/uploads/2016/02/awk-book-203x300.jpg 203w, https://www.gironi.it/blog/wp-content/uploads/2016/02/awk-book.jpg 337w" sizes="(max-width: 203px) 85vw, 203px" /><figcaption id="caption-attachment-450" class="wp-caption-text">la copertina del libro originale su AWK</figcaption></figure></p>
<p>AWK è un più di un semplice tool e forse qualcosa meno di un completo linguaggio di programmazione, nel senso moderno del termine (anche se è un completo linguaggio di programmazione). Mostra la sua piacevolezza e potenza come filtro in una <em>pipeline,&nbsp;</em>dove si fa preferire alla criptica sintassi di SED e consente di evitare di scomodare il Perl.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>AWK, nelle sue varianti (la più diffusa è quella a cura della Free Software Foundation, <a href="https://www.gnu.org/software/gawk/" target="_blank" rel="noopener noreferrer">GAWK</a>) è disponibile praticamente per qualsiasi sistema operativo possiate immaginare. Sì, anche il DOS.</p>
<p>Ma cosa rende insieme unico, attraente e insieme così poco conosciuto questo strumento che ha per logo un simpatico pinguino, 14 anni prima di Linux?</p>
<h3>La &#8220;strana&#8221; logica di AWK</h3>
<p>Per spiegarlo inizierò dal concetto di base su cui, a mio avviso, si fonda la corretta comprensione del linguaggio. No, non è un esempio di &#8220;Hello World&#8221;&#8230;</p>
<p>La logica di AWK è semplice, ma potente. Come quasi tutti gli strumenti nati in ambito UNIX, AWK <strong>ragiona in termini di linee di testo</strong>. Processa una linea alla volta applicando delle&nbsp;regole, composte da:</p>
<pre>pattern {azione}</pre>
<p>sia il pattern che l&#8217;azione sono opzionali.<br />
Se manca il pattern, l&#8217;azione viene applicata a tutti i record.<br />
Se a mancare è l&#8217;azione, il record che corrisponde al pattern è scritto sullo standard output (quindi di default sullo schermo).</p>
<p><strong>Quello che AWK fa, in pratica, è leggere il testo una riga alla volta, separarlo in campi definiti da un delimitatore (modificabile), assegnare i valori a delle variabili predefinite ($1,$2,$3&#8230;) e applicare le regole indicate dal programmatore.</strong></p>
<p>AWK può ricevere il testo da processare attraverso una <em>pipe</em>, oppure può presentarsi sotto forma di script, invocabile con awk -f nomescript.awk e processare il file o i files indicato/i.</p>
<h3>Un esempio vale mille parole</h3>
<p>Complicato? Un esempio mostrerà tutta la semplicità del linguaggio.<br />
Immaginiamo di avere un file di testo chiamato amici.txt:</p>
<pre>Aldo, 23
Carlo, 28
Mario, 35
Piero, 17
Stefano, 30
Umberto, 29</pre>
<p>Ok, l&#8217;esempio è senza senso, ma serve solo per illustrare l&#8217;utilizzo di AWK&#8230;</p>
<p>se io passo l&#8217;output di cat amici.txt tramite una pipe ad AWK in questo modo:</p>
<pre>cat amici.txt | awk '/Stefano/ {print $2}'</pre>
<p>oppure processo amici.txt direttamente così:</p>
<pre> awk '/Stefano/ { print $2 }' amici.txt</pre>
<p>il risultato a schermo sarà&#8230; 30</p>
<p>Ricordate? pattern e azione. Se e quando AWK trova &#8220;Stefano&#8221; stampa il secondo campo, cioè il numero 30. La virgola è il delimitatore di default di AWK. Se avessi avuto come delimitatore il punto e virgola avrei potuto scrivere:</p>
<pre>cat amici.txt | awk -F; "/Stefano/&nbsp;{print $2}"</pre>
<p>Giochiamo un po&#8217;&#8230; se avessi scritto:</p>
<pre>cat amici.txt | awk "/Stefano/ {print $2, $1}"</pre>
<p>il risultato sarebbe stato:</p>
<pre>30, Stefano</pre>
<p>iniziate a capire l&#8217;utilità di questo strumento, ad esempio per processare al volo files csv?</p>
<p>un po&#8217; di esempi banalissimi:</p>
<pre>{print $1} stampa il primo campo di ogni linea di un file

 /pippo/   stampa tutte le linee che contengono pippo

lenght($0) &lt; 40&nbsp;stampa tutte le linee che contengono meno di 40 caratteri</pre>
<p>e via dicendo&#8230;</p>
<p>Come dicevo, posso usare AWK in una pipe, ma posso anche scrivere dei veri e propri programmi, di maggiore complessità.</p>
<h3>Uno script AWK è fatto&nbsp;di 3 parti (al massimo&#8230;)</h3>
<p>Un programma AWK consta di tre parti: le assegnazioni e le operazioni per così dire preliminari, tipo l&#8217;assegnazione di variabili globali, che troveranno posto qui:</p>
<pre>BEGIN {
...
}</pre>
<p>(ovviamente questa sezione è del tutto opzionale)</p>
<p>poi seguiranno le istruzioni secondo la logica /pattern/ {azione} che abbiamo già visto.<br />
I pattern possono essere combinati con gli operatori booleani || (OR), &amp;&amp; (AND) e ! (NOT).<br />
Le azioni consistono di uno o più comandi, funzioni o assegnazione di variabili, separate da a capo o da punti e virgola e contenute dentro le parentesi graffe {}.<br />
I comandi possono essere assegnazione di variabili (o array), comandi di stampa, funzioni interne, comandi per controllare il flusso dell&#8217;operazione.</p>
<p>e per finire, anch&#8217;esso opzionale:</p>
<pre>END {
...
}</pre>
<p>dove andrò, ad esempio, a stampare il risultato finale di una mia elaborazione (potrei aver sommato tutti i valori presenti in $2 di tutte le righe in una variabile e dentro END andrò a stampare, alla fine, il valore totale di quella variabile&#8230;).</p>
<p>Se salvo il mio script con un nome, ad esempio pippo.awk, posso eseguirlo con:</p>
<pre>awk -f pippo.awk

</pre>
<p>o più comodamente iniziando il mio script con:</p>
<pre>  #!/usr/bin/awk -f</pre>
<p>e poi rendendolo&nbsp;eseguibile.</p>
<p>Le variabili possono essere assegnate nel modo più semplice possibile:<br />
PIPPO = &#8220;dsajsakdsk&#8221;</p>
<p>Gli arrays possono essere creati con la funzione split:</p>
<pre>split (stringa,array[,separatore])</pre>
<p>&#8230;il resto lo lascio alla vostra fantasia!</p>
<hr>
<h4>In libreria, per approfondire</h4>
<div style="float: left;padding-right:20px"><iframe loading="lazy" style="width: 120px; height: 240px;" src="https://rcm-eu.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&amp;t=consulenzeinf-21&amp;m=amazon&amp;o=29&amp;p=8&amp;l=as1&amp;IS2=1&amp;asins=B004D4Y302&amp;linkId=3900986c421b778594422cadb15bd281&amp;bc1=FFFFFF&amp;lt1=_blank&amp;fc1=333333&amp;lc1=0066C0&amp;bg1=FFFFFF&amp;f=ifr" width="300" height="150" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"><br />
</iframe></div>
<div style="float: left;"><iframe loading="lazy" style="width: 120px; height: 240px;" src="https://rcm-eu.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&amp;t=consulenzeinf-21&amp;m=amazon&amp;o=29&amp;p=8&amp;l=as1&amp;IS2=1&amp;asins=B00U8232XM&amp;linkId=31b83d17e2c197ee14c7b1f549d033ab&amp;bc1=FFFFFF&amp;lt1=_blank&amp;fc1=333333&amp;lc1=0066C0&amp;bg1=FFFFFF&amp;f=ifr" width="300" height="150" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"><br />
</iframe></div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/awk-un-amico-per-aiutarci-con-i-log-files-e-non-solo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Non riesco ad aggiornare il contenuto di un ipod con gtkpod</title>
		<link>https://www.gironi.it/blog/non-riesco-ad-aggiornare-il-contenuto-di-un-ipod-con-gtkpod/</link>
					<comments>https://www.gironi.it/blog/non-riesco-ad-aggiornare-il-contenuto-di-un-ipod-con-gtkpod/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Mon, 28 Dec 2015 13:37:15 +0000</pubDate>
				<category><![CDATA[ipod]]></category>
		<category><![CDATA[linux]]></category>
		<guid isPermaLink="false">http://www.gironi.it/blog/?p=409</guid>

					<description><![CDATA[Un problema comune. Linux riconosce correttamente l&#8217;ipod come usb device e lo monta nel filesystem. Ok, lancio gtkpod e indico il modello di ipod. Corretto, procedo felice. Carico le mie canzoni, salvo&#8230;e mi esce la scritta: &#8220;Couldn&#8217;t find the iPod firewire ID&#8220;. Nulla, non salva le canzoni. Come fare? A mano! E&#8217; semplice. Da terminale &#8230; <a href="https://www.gironi.it/blog/non-riesco-ad-aggiornare-il-contenuto-di-un-ipod-con-gtkpod/" class="more-link">Leggi tutto<span class="screen-reader-text"> "Non riesco ad aggiornare il contenuto di un ipod con gtkpod"</span></a>]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" class="alignleft size-full wp-image-430" src="http://www.gironi.it/blog/wp-content/uploads/2016/02/linux.png" alt="linux" width="128" height="128">Un problema comune. Linux riconosce correttamente l&#8217;ipod come usb device e lo monta nel filesystem. Ok, lancio gtkpod e indico il modello di ipod. Corretto, procedo felice.<br />
Carico le mie canzoni, salvo&#8230;e mi esce la scritta: &#8220;<em>Couldn&#8217;t find the iPod firewire ID</em>&#8220;.<br />
Nulla, non salva le canzoni. Come fare? A mano! E&#8217; semplice.<span id="more-409"></span></p>
<p>Da terminale lancia&nbsp;&nbsp;&#8220;<em>sudo lsusb -v | grep -i Serial</em>&#8221; con l&#8217;ipod collegato.</p>
<p>Dovresti vedere una stringa lunga 16 caratteri del tipo&nbsp;00A1234567891234.<br />
Copiala.</p>
<p>Edita il file&nbsp;&nbsp;/mnt/mioipod/iPod_Control/Device/SysInfo (supponendo che l&#8217;ipod sia montato in&nbsp;/mnt/mioipod).</p>
<p>Aggiungi al file questa linea:<br />
<em>FirewireGuid</em>: 0xffffffffffffffff<br />
sostituendo a ffffffffffffffff la stringa ottenuta in precedenza.</p>
<p>Espelli l&#8217;ipod. Riconnettilo, lancia gtkpod e il problema dovrebbe essere risolto!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/non-riesco-ad-aggiornare-il-contenuto-di-un-ipod-con-gtkpod/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>rendere scrivibile una partizione ntfs da utenza non root</title>
		<link>https://www.gironi.it/blog/rendere-scrivibile-una-partizione-ntfs-da-utenza-non-root/</link>
					<comments>https://www.gironi.it/blog/rendere-scrivibile-una-partizione-ntfs-da-utenza-non-root/#respond</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Wed, 25 May 2011 13:43:36 +0000</pubDate>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[ntfs]]></category>
		<guid isPermaLink="false">http://gironi.it/blog/2011/05/rendere-scrivibile-una-partizione-ntfs-da-utenza-non-root/</guid>

					<description><![CDATA[L&#8217;esigenza è molto semplice: ho un pc con doppia partizione windows / linux. Come faccio a far sì che il file system ntfs windows sia accessibile anche ad una utenza non root anche in scrittura oltre che in semplice lettura? Edito  /etc/fstab e cambio la riga che si presenterà più o meno così: /dev/sda1 /media/windows &#8230; <a href="https://www.gironi.it/blog/rendere-scrivibile-una-partizione-ntfs-da-utenza-non-root/" class="more-link">Leggi tutto<span class="screen-reader-text"> "rendere scrivibile una partizione ntfs da utenza non root"</span></a>]]></description>
										<content:encoded><![CDATA[<p>L&#8217;esigenza è molto semplice: ho un pc con doppia partizione windows / linux.<br />
Come faccio a far sì che il file system ntfs windows sia accessibile anche ad una utenza non root anche in scrittura oltre che in semplice lettura?</p>
<p>Edito  /etc/fstab e cambio la riga che si presenterà più o meno così:</p>
<p>/dev/sda1 /media/windows ntfs nls=utf8,umask=0222 0 0</p>
<p>in</p>
<p>/dev/sda1 /media/windows ntfs defaults,umask=077,uid=1000</p>
<p>Inutile ricordare i problemi di sicurezza. Occorre essere consapevoli di ciò che si sta facendo&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/rendere-scrivibile-una-partizione-ntfs-da-utenza-non-root/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Dropbox in xubuntu senza scomodare Gnome</title>
		<link>https://www.gironi.it/blog/dropbox-in-xubuntu-senza-scomodare-gnome/</link>
					<comments>https://www.gironi.it/blog/dropbox-in-xubuntu-senza-scomodare-gnome/#comments</comments>
		
		<dc:creator><![CDATA[paolo]]></dc:creator>
		<pubDate>Wed, 02 Jun 2010 05:59:00 +0000</pubDate>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[xubuntu]]></category>
		<guid isPermaLink="false">http://gironi.it/blog/?p=4</guid>

					<description><![CDATA[Riassunto in tre semplicissimi punti come utilizzare il client di Dropbox in xubuntu senza dover installare Nautilus o i mille pacchetti di Gnome.]]></description>
										<content:encoded><![CDATA[<p>Ecco riassunto  in tre semplicissimi punti come utilizzare il client di Dropbox in xubuntu senza dover installare Nautilus o i mille pacchetti di Gnome:</p>
<p>1) Scaricare il client linux di Dropbox</p>
<pre>http://www.getdropbox.com/download?plat=lnx.x86</pre>
<p>2) Copiare il contenuto della directory .dropbox-dist dentro $HOME</p>
<p>3) Lanciare </p>
<pre>~/.dropbox-dist/dropboxd</pre>
<p>.</p>
<p>Fatto! Dopo le consuete domande su dove posizionare la cartella dropbox, il sistema iniziera&#8217; a sincronizzare i files.</p>
<p>Ma come fare se ho un sistema dual-boot con Linux e Windows. per far sì che la cartella My Dropbox sia unica (mettiamo che la si voglia  avere sulla partizione Windows?).</p>
<p><span id="more-4"></span><br />
Basta creare un  link simbolico che colleghi la cartella Dropbox nella home del mio filesystem linux con la cartella My Dropbox:</p>
<pre>
sudo ln -s /media/windows/My\ Dropbox/ /home/nomeutente/Dropbox
</pre>
<p>in questo caso la partizione windows è montata in /media/windows e la cartella My Dropbox è in radice di windows</p>
<p>Mi basta installare dropbox sotto linux con   </p>
<pre>~/.dropbox-dist/dropboxd ,</pre>
<p>indicare che ho già un account, e poi scegliere come cartella di lavoro /home/nomeutente/Dropbox e il gioco è fatto.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.gironi.it/blog/dropbox-in-xubuntu-senza-scomodare-gnome/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
