{"id":134,"date":"2019-10-31T21:13:16","date_gmt":"2019-10-31T20:13:16","guid":{"rendered":"http:\/\/www.forlex.it\/blog\/?p=134"},"modified":"2019-11-01T10:25:40","modified_gmt":"2019-11-01T09:25:40","slug":"mini-guida-per-bash-parte-1","status":"publish","type":"post","link":"http:\/\/www.forlex.it\/index.php\/2019\/10\/31\/mini-guida-per-bash-parte-1\/","title":{"rendered":"Mini guida per BASH &#8211; parte 1 &#8211;"},"content":{"rendered":"\n<p>In questa mini-guida, ho pensato di inserire un insieme di comandi utili della nota shell linux.<\/p>\n\n\n\n<p><strong>Quale comando devo usare per &#8230; ?<\/strong><\/p>\n\n\n\n<p>#&gt; type , which apropos, locate, find, ls<\/p>\n\n\n\n<p><strong>Come ottenere&nbsp;informazioni su di un file ?<\/strong><\/p>\n\n\n\n<p>#&gt;ls, stat, file<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>&nbsp;ls&nbsp;<\/td><td>&nbsp;elenca i file in una directory&nbsp;<\/td><\/tr><tr><td>&nbsp;ls -a <\/td><td>&nbsp;elenca i file in una directory compresi i file che iniziano con punto&nbsp;<\/td><\/tr><tr><td>&nbsp;ls -R<\/td><td>&nbsp;elenca i file ricorsivamente all&#8217;interno delle sub-directory&nbsp;<\/td><\/tr><tr><td>&nbsp;ls -1<\/td><td>&nbsp;elenca tutti i file, uno per linea&nbsp;<\/td><\/tr><tr><td>&nbsp;ls -F<\/td><td>&nbsp;elenca i file compresi di attributi, specificare uno dei seguenti attributi : \/&nbsp;* @ % |&nbsp;<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p>Usando l&#8217;opzione -F ricordiamo che \/ indica una directory, l&#8217;asterisco * indica che il file \u00e8 eseguibile, la chiocciola @ indica un link simbolico, il percento % mostra un &#8212;- mentre la barretta verticale | si usa per il pipe delle utility.<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>&nbsp;stat&nbsp; <\/td><td>&nbsp;mostra lo status di un file o del file system, deve essere completato con dei parametri&nbsp;<\/td><\/tr><tr><td>&nbsp;stat -c &#8216;%A&nbsp;%n&#8217; &lt;nome file&gt;<\/td><td>&nbsp;mostra gli attributi ed il nome di um file<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p>Se volessimo mandare pi\u00f9 comandi&nbsp;in modo consecutivo, potremo scriverli su di una sola riga dividendoli con un punto e virgola (;)<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>&nbsp;#&gt;ls; ls -al<\/td><td>&nbsp;avremo prima la lista dei file e poi la stessa lista completa di attributi<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p><strong>Come si usano&nbsp;e visualizzano le variabili in bash&nbsp;?<\/strong><\/p>\n\n\n\n<p>Innanzitutto : per inizializzare e poi accedere al contenuto di una variabile in bash :<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>&nbsp;#&gt;&nbsp;var = &#8220;un valore&#8221;&nbsp;<\/td><td>&nbsp;\/\/ inizializzo la variabile di nome var&nbsp;&nbsp;<\/td><\/tr><tr><td>&nbsp;#&gt; echo $var&nbsp;<\/td><td>&nbsp;\/\/ stampo il contenuto della variabile var ( attenti al $ prima del nome)<\/td><\/tr><tr><td>&nbsp;#&gt; un valore&nbsp;<\/td><td>&nbsp;\/\/ risultato del comando<\/td><\/tr><tr><td>&nbsp;#&gt; echo &#8216;Stampa&nbsp;di $var &#8216;&nbsp;<\/td><td>&nbsp;\/\/ Usiamo solo l&#8217;apice singolo<\/td><\/tr><tr><td>&nbsp;#&gt; Stampa di $var<\/td><td>&nbsp;\/\/ non interpola la variabile<\/td><\/tr><tr><td>&nbsp;#&gt; echo &#8220;Stampa di $var&#8221;<\/td><td>&nbsp;\/\/ usiamo gli apici doppi<\/td><\/tr><tr><td>&nbsp;#&gt; Stampa di un valore<\/td><td>&nbsp;\/\/ abbiamo ottenuto il valore della variabile $var<\/td><\/tr><tr><td>&nbsp;#&gt; echo &#8216;Stampa di&#8217; &#8220;$var&#8221; &#8216;contenuto nella variabile&#8217;<\/td><td>&nbsp;\/\/ usiamo un misto di apice singolo e doppio dove vogliamo inserire il valore contenuto da&nbsp;una variabile<\/td><\/tr><tr><td>&nbsp;#&gt; Stampa di un valore contenuto nella variabile<\/td><td>&nbsp;\/\/ Otteniamo l&#8217;intera frase compresa di valore contenuto in $var<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p><strong>Ma se avessi bisogno di stampare&nbsp;un carattere speciale come ad esempio il dollaro ($) o l&#8217;apice singolo (&#8216;) o l&#8217;apice doppio (&#8220;), come faccio ?<\/strong><\/p>\n\n\n\n<p>Si usa il carattere di escape cio\u00e8 il back slash&nbsp; \\&nbsp;&nbsp;&nbsp;prima del carattere, quindi:<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>&nbsp;#&gt; echo &#8220;Stampa di&nbsp;$var contenuto&nbsp;in \\$var&#8221;&nbsp;<\/td><td>&nbsp;\/\/usando&nbsp;gli apici doppi possiamo decidere quando interpolare la variabile&nbsp;<\/td><\/tr><tr><td>&nbsp;#&gt; Stampa di un valore contenuto in $var<\/td><td>&nbsp;\/\/ il risultato<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p><strong>Come posso salvare l&#8217;output di un comado?<\/strong><\/p>\n\n\n\n<p>Per salvare l&#8217;output di un comando possiamo usare l&#8217;operatore &gt; (simbolo di maggiore)&nbsp;seguito dal nome del file che dovr\u00e0 contenere&nbsp;l&#8217;output. Se volessimo&nbsp;invece&nbsp;&#8220;appendere&#8221;, cio\u00e8 aggiungere in coda, useremo l&#8217;operatore &gt;&gt; (doppio simbolo di maggiore).<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>&nbsp;#&gt; ls &gt; elenco.txt<\/td><td>&nbsp;\/\/salva l&#8217;output nel file elenco.txt&nbsp;&nbsp;<\/td><\/tr><tr><td>&nbsp;#&gt; ls ..\/ &gt;&gt; elenco.txt<\/td><td>&nbsp;\/\/aggiunge l&#8217;elenco dei file in coda al file elenco.txt<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p>Mentre per leggere il contenuto del file elenco.txt appena realizzato useremo il comando <em>cat<\/em>, il quale&nbsp;permette anche di concatenare&nbsp;il contenuto di pi\u00f9 file, quindi :<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>#&gt; cat elenco.txt&nbsp;<\/td><td>&nbsp;\/\/restituir\u00e0 il contenuto del file<\/td><\/tr><tr><td>#&gt; cat file1.txt file 2.txt file3.txt &gt; fileTot.txt<\/td><td>&nbsp;\/\/avremo il fileTot.txt che conterr\u00e0 quanto memorizzato nei file1 &#8211; file2 e file3<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p><strong>Come faccio a leggere parte di un file ?<\/strong><\/p>\n\n\n\n<p>Usando il comando <em>tail <\/em>(inizia a leggere il file dalla fine)&nbsp;ed <em>head <\/em>(inizia a leggere il file dall&#8217;inizio)<em>. S<\/em>upponiamo di avere un file (test.txt) che contiene il seguente testo una parola per rigo : uno, due, tre, quattro, cinque.<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>&nbsp;#&gt; tail&nbsp;test.txt&nbsp;<\/td><td>\/\/restituisce l&#8217;intero contenuto del file&nbsp;<\/td><\/tr><tr><td>&nbsp;#&gt; tail +2 test.txt&nbsp;<\/td><td>\/\/restituisce il contenuto leggendo dalla terza riga in poi (due \u2026)<\/td><\/tr><tr><td>&nbsp;#&gt; tail -2 test.txt<\/td><td>&nbsp;\/\/restituisce il contenuto leggendo dalla terz&#8217;ultima riga (quattro\u2026)<\/td><\/tr><tr><td>&nbsp;#&gt; head -2 test.txt<\/td><td>&nbsp;\/\/restituisce le prime due righe (uno e due)<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p>Quando realizziamo i nostri script, potremmo essere interessati a salvare tutto l&#8217;output generato da un comando, quindi&nbsp;output ed errore. <\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>&nbsp;#&gt; ls \u2026\/<\/td><td>&nbsp;\/\/generiamo un errore&nbsp;<\/td><\/tr><tr><td>&nbsp;#&gt; ls \u2026\/ &gt; salva.txt<\/td><td>&nbsp;\/\/a video vedremo un messaggio di errore, ma non sar\u00e0 salvato nel file salva.txt&nbsp;<\/td><\/tr><tr><td>&nbsp;#&gt; ls \u2026\/ &gt;&amp; salva.txt<\/td><td>&nbsp;\/\/a video non vedremo nulla, tutto sar\u00e0 salvato nel file.<\/td><\/tr><tr><td>&nbsp;#&gt; ls \u2026\/ &gt; salva.txt 2&gt;&amp;1<\/td><td>&nbsp;\/\/questo metodo \u00e8 uguale al precedente&nbsp;<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p>Nel caso volessimo redirezionare l&#8217;output di pi\u00f9 comandi all&#8217;interno di un file, dovremo usare le parentesi graffe (&nbsp;{ } ) per contenere tutti i comandi<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>&nbsp;#&gt;{ ls -al; ls}&gt; parentesi.txt&nbsp;<\/td><td>&nbsp;\/\/otterremo un file che contiene sia l&#8217;output di&nbsp;ls -al&nbsp;sia di ls&nbsp;<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p><strong>Usiamo il cestino<\/strong><\/p>\n\n\n\n<p>Quando abbiamo l&#8217;esigenza di &#8220;buttare nel cestino&#8221; un output (che sia di una utility o di uno stream) possimao usare il dispositivo \/dev\/null.<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>#&gt;ls;&nbsp;ls \u2026\/&nbsp;&gt;&amp;&nbsp;\/dev\/null<\/td><td>\/\/listiamo il contenuto di una directory mentre&nbsp;l&#8217;errore generato dal secondo&nbsp;comando viene &#8220;buttato&#8221; in \/dev\/null<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p><strong>Usare l&#8217;output di una utility come input per un&#8217;altra<\/strong><\/p>\n\n\n\n<p>Questa \u00e8 una delle possibilit\u00e0 pi\u00f9 interessanti della shell, il pipe di comandi che si esegue con la barretta verticale ( | ). Usiamo il file test.txt dell&#8217;esempio con tail.<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>&nbsp;#&gt;cat test.txt&nbsp;<\/td><td>&nbsp;\/\/restituir\u00e0 il contenuto dell&#8217;intero file<\/td><\/tr><tr><td>&nbsp;#&gt; cat test.txt|tail -2<\/td><td>&nbsp;\/\/restituir\u00e0 dalla pen&#8217;ultima riga in poi<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p>noterete che alla utility tail non abbiamo dato un file in input inquanto lo riceve da cat. Quindi ricordate che un comando in una catena pipe riceve&nbsp;l&#8217;input&nbsp;dalla sua sinistra ed emette il suo output a destra.&nbsp;Ci sono per\u00f2 dei comandi che non leggono il proprio input in caso di pipeing quindi useremo un metodo diverso, genereremo uno stream, che poi passeremo alla utility.<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>&nbsp;#&gt; rm $(find \/ -name test.*)<\/td><td>&nbsp;\/\/canceller\u00e0 tutti i file (trovati con find) che&nbsp;si chiamano&nbsp;test con qualsiasi estensione<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p><strong>Il&nbsp;comado&nbsp;<em>tee<\/em><\/strong><\/p>\n\n\n\n<p>Questo comando permette di&nbsp;copiare lo standard input&nbsp;nel file indicato e nello standard output.<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>&nbsp;#&gt; tee file.txt<\/td><td>&nbsp;\/\/se adesso digitassimo qualsiasi cosa, verr\u00e0&nbsp;visualizzato e copiato&nbsp;tutto&nbsp;in file.txt&nbsp;<\/td><\/tr><\/tbody><\/table>\n","protected":false},"excerpt":{"rendered":"<p>In questa mini-guida, ho pensato di inserire un insieme di comandi utili della nota shell linux. Quale comando devo usare per &#8230; ? #&gt; type , which apropos, locate, find, ls Come ottenere&nbsp;informazioni su di un file ? #&gt;ls, stat, &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"http:\/\/www.forlex.it\/index.php\/2019\/10\/31\/mini-guida-per-bash-parte-1\/\"> <span class=\"screen-reader-text\">Mini guida per BASH &#8211; parte 1 &#8211;<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1,6],"tags":[],"_links":{"self":[{"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/posts\/134"}],"collection":[{"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/comments?post=134"}],"version-history":[{"count":1,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/posts\/134\/revisions"}],"predecessor-version":[{"id":135,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/posts\/134\/revisions\/135"}],"wp:attachment":[{"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/media?parent=134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/categories?post=134"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/tags?post=134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}