https://linuxhub.it/rss.xml it 🔧 #howto – Utilizzo del comando 'which' https://linuxhub.it/article/howto-utilizzo-del-comando-which <span property="schema:name" class="field field--name-title field--type-string field--label-hidden">🔧 #howto – Utilizzo del comando &#039;which&#039;</span> <div property="schema:text" class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Capita soprattutto in ambienti di lavoro e sviluppo, di dover identificare il percorso assoluto di uno strumento/comando/link, è in queste circostanze che viene in nostro aiuto il comando <strong>which</strong>.</p> <p>Un esempio può essere quello in cui sono presenti più versioni di uno strumento nel sistema (es. <strong>nano</strong>)  e vogliamo capire se al suo richiamo, stiamo utilizzando la versione predefinita di sistema o quella in una differente posizione.</p> <h2>Sintassi</h2> <p>Questo è uno di quei comandi che fa semplicemente ciò che deve, per questo la sua sintassi è estremamente semplice e non offre molte opzioni:</p> <pre> <code>which [-a] nome</code></pre> <p>dove la flag <strong>nome</strong> identifica il nome assoluto dello strumento o link.</p> <h2>Utilizzo del comando</h2> <p>Come dicevo poco fa, l'utilizzo di questo comando è estremamente semplice, nell'esempio in cui vogliamo trovare il percorso assoluto di <strong>bash</strong>:</p> <pre> <code>which bash</code></pre> <p>il possibile ouput è il seguente:</p> <pre> <code>/usr/bin/bash</code></pre> <h3>Utilizzo con liste</h3> <p>Possiamo fornire più nomi da cui prelevare il percorso assoluto, semplicemente alternandoli ad uno spazio:</p> <pre> <code>which bash echo</code></pre> <p>di conseguenza abbiamo un output simile al seguente:</p> <pre> <code>/usr/bin/bash /bin/echo</code></pre> <h3>Tutti i percorsi</h3> <p>Sfruttando la flag <strong>-a</strong> nonchè l'unica opzione, possiamo istruire questo strumento a mostrare tutti i percorsi disponibili:</p> <pre> <code>which -a nome</code></pre> <p> </p> <p>Per dubbi e chiarimenti, utilizzate il nostro <a href="https://t.me/gentedilinux">gruppo Telegram</a>.</p> <p><em>Good *nix </em><strong><em>_Mirko</em></strong></p></div> <span rel="schema:author" class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/user/13" typeof="schema:Person" property="schema:name" datatype="">Mirko Brombin</span></span> <span property="schema:dateCreated" content="2019-05-18T17:05:37+00:00" class="field field--name-created field--type-created field--label-hidden">Sab, 05/18/2019 - 19:05</span> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Etichette</div> <div class="field__items"> <div class="field__item"><a href="/term/howto" property="schema:about" hreflang="it">#howto</a></div> </div> </div> Sat, 18 May 2019 17:05:37 +0000 Mirko Brombin 570 at https://linuxhub.it 🔧 #howto - Installare .Net Core su Debian https://linuxhub.it/article/howto-installare-net-core-su-debian <span property="schema:name" class="field field--name-title field--type-string field--label-hidden">🔧 #howto - Installare .Net Core su Debian </span> <div property="schema:text" class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>In questa guida vediamo come installare e rendere funzionale .NET Core su server Debian.</p> <h2>Introduzione</h2> <p>.<strong>NET Core</strong> è un framework modulare gratuito e Open source sviluppato da Microsoft per sistemi operativi Windows, Linux e MacOS.</p> <p>Formato da CoreCLR, un'implementazione runtime completa di CLR, la macchina virtuale che gestisce l'esecuzione di programmi .NET.</p> <p>CoreCLR viene inoltre fornito con un compilatore just-in-time ottimizzato, chiamato RyuJIT.</p> <h2>Installazione</h2> <p>Procediamo quindi con l'installazione vera e propria. È necessaria una Shell con accesso root. In questa guida utilizzeremo la versione di .NET Core stabile, la 2.2 nel momento in cui scrivo.</p> <h3>Installazione<strong> </strong>SDK</h3> <p>Partiamo con l'installare il SDK ossia la strumentazione base, completa di template, toolchain e runtimes.</p> <p>Prima di tutto aggiungiamo le repository ufficiali e le chiavi necessarie:</p> <pre> <code>wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor &gt; microsoft.asc.gpg sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/ wget -q https://packages.microsoft.com/config/debian/9/prod.list sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list</code></pre> <p>Impostiamo poi i giusti permessi:</p> <pre> <code>sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list</code></pre> <p>Ora che abbiamo aggiunto le chiavi e le repository, procediamo con la vera e propria installazione dell'SDK</p> <pre> <code>sudo apt update sudo apt install apt-transport-https dotnet-sdk-2.2</code></pre> <h3>Installazione .NET Core</h3> <p>Se tutto è andato a buon fine procediamo con l'installazione del runtime.</p> <pre> <code>sudo apt update sudo apt install aspnetcore-runtime-2.2</code></pre> <blockquote> <p>Una volta svolti i precedenti punti, consiglio un reboot affinchè sia tutto pienamente funzionale.</p> </blockquote> <h2>Creazione della prima WebApp base</h2> <p>Creiamo una cartella nella directory /<strong>root</strong>/<strong>testapp</strong>  denominata testapp (nel nostro esempio):</p> <pre> <code>sudo mkdir /root/testapp</code></pre> <p>entriamo nella nuova locazione:</p> <pre> <code>cd /root/testapp</code></pre> <p>e creiamo l'applicazione via <strong>dotnet</strong>:</p> <pre> <code>dotnet new webapp</code></pre> <p>il risultato sarà simile a questo:</p> <pre> <code>root@hersy:~/testapp|⇒ dotnet new webapp The template "ASP.NET Core Web App" was created successfully. This template contains technologies from parties other than Microsoft, see https://aka.ms/aspnetcore-template-3pn-210 for details. Processing post-creation actions... Running 'dotnet restore' on /root/testapp/testapp.csproj... Restore completed in 4.82 sec for /root/testapp/testapp.csproj. Restore succeeded. </code></pre> <p>Infine con dotnet <strong>run</strong> avviamo l'applicazione appena creata:</p> <pre> <code>dotnet run</code></pre> <p>A questo punto, se tutto è andato a buon fine, inizierà a funzionare restituendo come risultato localhost:5001 &amp; 5000.</p> <p>Accedendo da browser a http://localhost:5001 dovremmo vedere la nostra prima applicazione in .NET Core, funzionare.</p> <h2>Pubblicazione tramite proxy_pass di Nginx</h2> <p>In questo extra della guida, andiamo a vedere come "distribuire" la nostra applicazione via Nginx e sfruttando un certificato SSL.</p> <h3>Prerequisiti</h3> <ul><li>Nginx</li> <li>Certbot</li> <li>.Net Core SDK+Runtime</li> </ul><h3>Creazione applicazione</h3> <p>Creiamo una directory chiamata aspnetapp (nel nostro esempio), in /var/www:</p> <pre> <code>sudo mkdir /var/www/aspnetapp</code></pre> <p>ed spostiamoci al suo interno:</p> <pre> <code>cd /var/www/aspnetapp</code></pre> <p>Come abbiamo visto precedentemente, creiamo una nuova applicazione .NET Core:</p> <pre> <code>dotnet new webapp</code></pre> <blockquote> <p>La cartella /www potrebbe avere una locazione differente nel vostro server, in base alla vostra configurazione.</p> </blockquote> <h3>proxy_pass</h3> <p>Andiamo ora a sfruttare il proxy_pass per creare un Reverse Proxy dalla porta della nostra applicazione a quella corretta 80 o 443.</p> <p>Portiamoci in locazione:</p> <pre> <code>cd /etc/nginx</code></pre> <p>in sites-available create un file di configurazione chiamato dotnetpass.conf e copiate la seguente configurazione</p> <pre> <code>server { listen 443 ssl; listen [::]:443 ssl; server_name example.com www.example.com; ssl_certificate /etc/letsencrypt/live/youraccount/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/youraccount/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot location / { proxy_pass https://localhost:5001; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } server { if ($host = www.example.com) { return 301 https://$host$request_uri; } # managed by Certbot if ($host = example.com) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name example.com www.example.com; return 404; # managed by Certbot }</code></pre> <p>Abilitiamo infine la configurazione creando un link alla cartella sites-enabled:</p> <p>Modificate la stringa server_name con il vostro dominio a disposizione, esempio: dotnet.vostrodominio.com</p> <p>Nella stringa ssl_certificate &amp; ssl_certificate:_key inserite la posizione dei vostri certificati CERTBOT</p> <p>Abilitiamo infine la configurazione creando un link alla cartella sites-enabled:</p> <pre> <code>ln -s /etc/nginx/sites-availables/dotnetpass.conf /etc/nginx/sites-enabled/dotnetpass.conf</code></pre> <p>A questo punto ricarichiamo le configurazioni di Nginx:</p> <pre> <code>sudo service nginx restart</code></pre> <p>Se non restituisce errori è andato tutto a buon fine.</p> <p>Proseguiamo con l'abilitazione del certificato SSL per il nostro dominio:</p> <pre> <code>certbot --nginx -d ilvostrodominio.com -d www.ilvostrodominio.com -d dotnet.vostrodominio.com -d www.dotnet.vostrodominio.com</code></pre> <p>Avviamo finalmente la nostra applicazione:</p> <pre> <code>cd /var/www/aspnetapp dotnet run</code></pre> <p>che dovrebbe ora essere disponibile sul dominio da noi scelto.</p></div> <span rel="schema:author" class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/user/105" typeof="schema:Person" property="schema:name" datatype="">Hersy</span></span> <span property="schema:dateCreated" content="2019-05-15T10:24:12+00:00" class="field field--name-created field--type-created field--label-hidden">Mer, 05/15/2019 - 12:24</span> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Etichette</div> <div class="field__items"> <div class="field__item"><a href="/term/howto" property="schema:about" hreflang="it">#howto</a></div> </div> </div> Wed, 15 May 2019 10:24:12 +0000 Hersy 569 at https://linuxhub.it 🔧 #howto – Dedicare un disco/partizione alla cartella /home https://linuxhub.it/article/howto-dedicare-un-discopartizione-alla-cartella-home <span property="schema:name" class="field field--name-title field--type-string field--label-hidden">🔧 #howto – Dedicare un disco/partizione alla cartella /home</span> <div property="schema:text" class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Grazie al Cloud e a dischi sempre più capienti, è meno frequente l'esigenza di espandere lo spazio di sistema ma in certe circostanze, come ad esempio in ambienti di produzione, può essere indispensabile muovere la cartella <strong>/home</strong> su un nuovo disco o partizione.</p> <p>Ci sono metodi più strutturati come LVM, con cui possiamo <a href="https://linuxhub.it/article/howto-cose-e-come-estendere-il-volume-lvm">organizzare dischi e partizioni</a> in una struttura similare ad un RAID 0, forse il miglior metodo per rendere "elastico" il nostro sistema, potendolo ridimensionare ed espandere facilmente.</p> <p>Esistono poi metodi più pratici come l'utilizzo della tabella dei file system (fstab), ossia il metodo che andiamo a vedere oggi.</p> <h2>Precauzioni</h2> <p>Dobbiamo tenere in considerazione che questa procedura è tanto facile quanto fatale per i nostri dati. Facciamo una copia della cartella /home, almeno fino a che non abbiamo raggiunto lo scopo.</p> <p>Nel caso abbiate appena aggiunto un disco per questa guida, evitate di montare in una locazione, sarà più facile identificarlo.</p> <p>Consiglio, se possibile effettuate queste azioni al di fuori dell'ambiente grafico, evitando possibili malfunzionamenti poichè eventuali file di configurazione sono presenti nella cartella <strong>.config</strong> della nostra home e non solo:</p> <pre> <code>CTRL+ALT+F1</code></pre> <h2>Preparazione partizione</h2> <p>In questa sezione andiamo a preparare la partizione di cui abbiamo bisogno, indifferentemente che sia un nuovo disco o uno già presente.</p> <p>Identifichiamo con <a href="https://linuxhub.it/article/howto-utilizzo-del-comando-lsblk"><strong>lsblk</strong></a> il disco in cui vogliamo creare la partizione:</p> <pre> <code>sudo lsblk</code></pre> <p>andando per esclusione, troviamo il disco target, nel caso abbiate appena aggiunto un nuovo disco, escludiamo tutti quelli che non hanno un mount point.</p> <p>Nel nostro output:</p> <pre> <code>NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 253:0 0 80G 1 disk sda 253:0 0 80G 0 disk └─sda1 253:1 0 80G 0 part /</code></pre> <p>Nel nostro caso, il disco che vogliamo usare è <strong>sdb,</strong> quindi <strong>/dev/sdb</strong>.</p> <blockquote> <p>Nel caso fosse già presente una partizione nel disco che vogliamo usare, saltiamo il prossimo step.</p> </blockquote> <h2>Creazione partizione</h2> <p>Creiamo ora la nuova partizione, configuriamo <strong>fdisk</strong> sul nostro disco:</p> <pre> <code>sudo fdisk /dev/sdb</code></pre> <p>premendo <strong>n</strong> ci verrà chiesto se vogliamo una partizione:</p> <ul><li>primary</li> <li>extended</li> </ul><p>in questo caso la partizione non dovrà ospitare un sistema da boot, scegliamo quindi <strong>extended</strong>.</p> <p>Ci viene ora richiesta la dimensione della partizione che deve essere fornita in MB e preceduta dal simbolo <strong>+</strong>, quindi se il nostro disco è di 80G, possiamo creare una partizione non più grande di 80G, nel nostro esempio sarà di 40G, quindi (<strong>40*1000=40000</strong>):</p> <pre> <code>+40000</code></pre> <p>salviamo infine digitando <strong>w</strong>.</p> <p>Controlliamo l'effettiva creazione della nostra partizione con <strong>lsblk</strong>:</p> <pre> <code>sudo lsblk</code></pre> <p>il che nel nostro caso mostrerà <strong>sdb1</strong> in lista.</p> <h3>File system partizione</h3> <p>Una volta creata la nuova partizione, è indispensabile creare un file system al suo interno, nel nostro caso useremo <strong>ext4</strong>:</p> <pre> <code>sudo mkfs.ext4 /dev/sdb1</code></pre> <h2>Locazione temporanea</h2> <p>Andiamo ora a creare un percorso temporaneo per la nuova partizione:</p> <pre> <code>sudo mkdir /mnt/home_tmp</code></pre> <p>e montiamo la nuova partizione al suo interno:</p> <pre> <code>sudo mount /dev/sdb1 /mnt/home_tmp</code></pre> <p>In questo momento abbiamo:</p> <ul><li><strong>/home</strong> con tutti i contenuti originali</li> <li><strong>/mnt/home_tmp</strong> che punta alla nuova partizione che andremo a dedicare a <strong>/home</strong></li> </ul><h2>Copiare i contenuti</h2> <p>Procediamo ora col copiare il contenuto della cartella /home nella nuova partizione quindi in /mnt/home_tmp:</p> <pre> <code>sudo rsync -avx /home/ /mnt/home_tmp</code></pre> <blockquote> <p><strong>rsync</strong> è uno strumento che permette appunto la sincronizzazione completa di file e directory fra dischi e network.</p> </blockquote> <p>Montiamo ora provvisoriamente la partizione in /home per controllare il suo contenuto:</p> <pre> <code>sudo umount /mnt/home_tmp sudo mount /dev/sdb1 /home</code></pre> <h2>Partizione permanente</h2> <p>Prima di procedere con l'eliminazione della vecchia cartella /home, assicuriamoci che la nuova partizione venga montata correttamente all'avvio di sistema, questo sfruttando <strong>fstab</strong>.</p> <p>Prima di tutto procuriamoci il <strong>UUID</strong> della nostra partizione:</p> <pre> <code>sudo blkid</code></pre> <p>nel nostro caso: <strong>4e9871e2-d91d-4f875-8d6c-02d5fda71a9b</strong>.</p> <p>Modifichiamo ora il file <strong>/etc/fstab</strong>:</p> <pre> <code>sudo nano /etc/fstab</code></pre> <p>e aggiungiamo come ultima riga la nuova istruzione:</p> <pre> <code>UUID=4e9871e2-d91d-4f875-8d6c-02d5fda71a9b /home ext4 defaults 0 2</code></pre> <p>ricordando di sostituire il UUID qui sopra col vostro ottenuto precedentemente e nel caso di un file system differente, sostituiamo ext4 con quello corretto.</p> <p>Procediamo col reboot e la cartella /home risiede ora nella nuova partizione dedicata. Possiamo eliminare i vecchi contenuti smontando la partizione e pulendo la cartella /home, per poi montare nuovamente a seguito del riavvio.</p> <p> </p> <p>Per dubbi e chiarimenti, utilizzate il nostro <a href="https://t.me/gentedilinux">gruppo Telegram</a>.</p> <p><em>Good *nix </em><strong><em>_Mirko</em></strong></p></div> <span rel="schema:author" class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/user/13" typeof="schema:Person" property="schema:name" datatype="">Mirko Brombin</span></span> <span property="schema:dateCreated" content="2019-04-21T06:59:31+00:00" class="field field--name-created field--type-created field--label-hidden">Dom, 04/21/2019 - 08:59</span> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Etichette</div> <div class="field__items"> <div class="field__item"><a href="/term/howto" property="schema:about" hreflang="it">#howto</a></div> </div> </div> Sun, 21 Apr 2019 06:59:31 +0000 Mirko Brombin 566 at https://linuxhub.it #howtobash - I file (Parte 2) https://linuxhub.it/article/howtobash-i-file-parte-2 <span property="schema:name" class="field field--name-title field--type-string field--label-hidden">#howtobash - I file (Parte 2)</span> <div property="schema:text" class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p dir="ltr"><span>Benvenuti al terzo appuntamento con <strong>#howtobash</strong>! Dopo aver imparato un po’ più nel dettaglio come funzionano i comandi ed essere diventati dei maghi  nella <a href="https://linuxhub.it/article/howtobash-i-file-parte-1">copia dei file</a>, è arrivato il momento di imparare alcune delle altre operazioni fondamentali che possiamo effettuare sui file.</span></p> <p dir="ltr"><span>Parliamo quindi di come:</span></p> <ul dir="ltr"><li>Spostarli</li> <li>Rinominarli</li> <li>Cancellarli</li> </ul><h2 dir="ltr"><strong>Una breve premessa</strong></h2> <p dir="ltr"><span>Come ormai ci siamo abituati nelle precedenti puntate, prima di cominciare apriamo una piccola parentesi e mettiamo giù un paio di concetti che ci saranno utili per proseguire nel nostro viaggio. Senza dilungarmi troppo, oggi faccio solo presente che tutte le considerazioni che abbiamo fatto per il comando <em><strong>cp</strong></em>, ossia:</span></p> <ul dir="ltr"><li><span>Il passaggio multiplo di <strong>argomenti</strong></span></li> <li><span>La possibilità di modificarne il comportamento tramite <strong>opzioni</strong></span></li> <li><span>L’uso delle <strong>wildcards </strong></span></li> </ul><p dir="ltr"><span>valgono anche per i comandi che vedremo oggi (ed in generale sono applicabili per tutti i comandi per cui i ragionamenti che abbiamo fatto abbiano senso di esistere). </span></p> <p dir="ltr"><span>Detto ciò, siamo pronti per cominciare!</span></p> <h2 dir="ltr"><strong>Spostare un file</strong></h2> <p dir="ltr"><span>Il comando che che ci permette di <strong>spostare</strong> uno o più file è </span><strong>mv </strong><span>e si utilizza in modo pressoché identico a come abbiamo visto con </span><strong><em>cp</em></strong><span>, prendiamo il solito esempio del file <em><strong>Modulo.pdf</strong></em> che abbiamo in <em><strong>~/Scaricat</strong></em>i e spostiamolo in <em><strong>~/Documenti</strong></em>, il comando sarà:</span></p> <pre> <code>leo@leo-pavillion:~$ mv Scaricati/Modulo.pdf Documenti</code></pre> <p dir="ltr"><span>come sempre vi invito a<em> fare attenzione</em> alla <em>posizione attuale</em> (segnata fra i simboli “<strong>:</strong>” e “<strong>$</strong>” nel terminale) e il modo in cui compongo i <strong>percorsi</strong> da dare in pasto al comando. Cercherò di utilizzarli sempre in modo diverso per abituarvi a ragionarci sopra ed a trovare il metodo che più vi può essere comodo. In questo caso sono partito dalla mia cartella <strong>home</strong> e ho costruito i percorsi a partire da lì.</span></p> <h2 dir="ltr"><strong>Rinominare un file</strong></h2> <p dir="ltr"><span>Questo tipo di operazione è una di quelle che preferisco perché si tratta di una di quelle “meno intuitive”; questo perché non abbiamo un comando “<em>rename</em>” già pronto all'uso, o meglio, esiste ed è anche molto potente, ma lo vedremo più avanti perché richiede dimestichezza con qualche concetto più avanzato di quelli che conosciamo al momento. </span></p> <p dir="ltr"><span>L'operazione di <strong>rinomina</strong> come la vediamo oggi è di fatto un caso particolare di <strong>spostamento</strong>. Per <strong>rinominare</strong> un file, infatti, quello che dobbiamo fare è utilizzare il comando </span><strong><em>mv</em> </strong><span>e “<em>spostare</em>” il file nel suo nuovo nome. </span></p> <p dir="ltr"><span>Prendiamo il nostro sempre caro <em><strong>Modulo.pdf</strong></em> all’interno della nostra cartella <em><strong>~/Scaricati</strong></em>, sappiamo che questo modulo è un “<em>Allegato-A</em>” di una qualche norma che ci interessa e vogliamo quindi rinominarlo in <em><strong>Allegato-A.pdf</strong></em> , il comando che dobbiamo dare diventa quindi:</span></p> <pre> <code>leo@leo-pavillion:~/Scaricati$ mv Modulo.pdf Allegato-A.pdf</code></pre> <blockquote> <p>Mi raccomando, controllate sempre che nel percorso in cui operate non esista già un file con lo stesso nome, poichè qualora fosse presente il file esistente verrebbe sovrascritto ed andrebbe perso!</p> </blockquote> <p>Se siete nel dubbio, il mio consiglio è quello di utilizzare il comando <em><strong>mv </strong></em>con l'opzione <strong>-b</strong>.</p> <p>In questo modo il comando controllerà per voi che il file di destinazione non esista e, qualora esistesse, andrebbe ad effettuarne un backup ed a rinominarlo aggiungendo una <strong>~ </strong>(tilde) in fondo al nome.</p> <p>Riprendendo l'esempio appena fatto, se il file <strong><em>Allegato-A.pdf </em></strong>esistesse già, dando il comando:</p> <pre> <code>leo@leo-pavillion:~/Scaricati$ mv -b Modulo.pdf Allegato-A.pdf</code></pre> <p dir="ltr">l'operazione verrenne effettuata comunque, ma dando un <strong><em>ls </em></strong>avremmo un risultato del genere:</p> <pre> <code>leo@leo-pavillion:~/Scaricati$ ls Allegato-A.pdf Allegato-A.pdf~</code></pre> <p dir="ltr">Sintono del fatto che il file <strong><em>Allegato-A.pdf </em></strong>esisteva già e che ne è stato fatto un backup il quale è stato rinominato in <strong><em>Allegato-A.pdf~ </em></strong><em>.</em></p> <h3 dir="ltr"><strong>Cancellare un file</strong></h3> <p dir="ltr"><span>Per <strong>cancellare</strong> un file il comando da utilizzare è </span><strong><em>rm</em></strong><span> , non c’è molto da aggiungere rispetto a quello che abbiamo visto per </span><strong><em>cp</em></strong><span>, volendo vedere un esempio, immaginiamo di esserci rotti le scatole del famoso <em><strong>Modulo.pdf </strong></em>e di volerlo cancellare dal nostro sistema una volta per tutte, il comando sarà:</span></p> <pre> <code>leo@leo-pavillion:~/Scaricati$ rm Modulo.pdf</code></pre> <p dir="ltr"><span>e a questo punto, <strong>puf!</strong> andato, sparito per sempre! Ed è proprio su questo punto che invito a riflettere: <strong>da <em>rm</em> non si torna indietro</strong>. Non entro nei dettagli tecnici della cosa e su come con dei barbatrucchi mirabolanti a volte si riesca a recuperare qualcosa. Per l’utente normale <em><strong>rm</strong></em> è una decisione <strong>definitiva</strong>. </span></p> <p dir="ltr"><span>Adesso che vi ho spaventati abbastanza sulle conseguenze di rm vi ricordo che, per <strong>cancellare</strong> una cartella con tutto il suo contenuto, in modo identico a ciò che avviene con la copia, bisogna utilizzare l’opzione -r . Quindi, per cancellare l’altrettanto famosa cartella Moduli daremo:</span></p> <pre> <code>leo@leo-pavillion:~/Scaricati$ rm -r Moduli</code></pre> <p dir="ltr"><span>Vediamo ora un paio di opzioni che vi possono tornare utili per <strong>non sbagliare</strong> quando utilizzate </span><strong>rm</strong><span>:</span></p> <ul><li dir="ltr"> <p dir="ltr"><strong>-i </strong><span>questa opzione vi chiede conferma prima di cancellare qualsiasi file</span></p> </li> <li dir="ltr"> <p dir="ltr"><span>-</span><strong>I</strong><span> (i maiuscolo) vi chiede conferma quando utilizzate l’opzione -r oppure se state per cancellare più di 3 file contemporaneamente</span></p> </li> </ul><p dir="ltr"><span>Potrebbero sembrare poco utili in un primo momento, ma si rivelano essere quasi dei salvavita nel momento in cui doveste andare ad utilizzare </span><strong>rm </strong><span>con le </span><strong>wildcards </strong><span>(che abbiamo solo accennato qui, ma che arriveremo a discutere nel dettaglio).</span></p> <h2 dir="ltr"><strong>Tips &amp; tricks</strong></h2> <p dir="ltr"><span>Come ormai è consuetudine, prima di salutarci vi lascio con un paio di <strong>trucchetti</strong> che possono tornarvi utili durante l’utilizzo quotidiano del <strong>terminale</strong>.</span></p> <h3 dir="ltr"><strong>Conoscere il tipo di file</strong></h3> <p dir="ltr"><span>E’ possibile che molti leggendo il titolo di questa sezione abbiano storto il naso: “ma come, l’estensione non mi dice già tutto quello che devo sapere del file?”, la risposta è no, e i motivi sono molteplici, ma a noi ne bastano 2:</span></p> <ul dir="ltr"><li><span>a volte potrebbe semplicemente essere sbagliata</span></li> <li><span>è un’estensione che non conosciamo e non abbiamo idea di cosa ci aspetti dentro al file</span></li> </ul><p dir="ltr"><span>Per toglierci qualsiasi tipo di dubbio ci basta utilizzare il comando </span><strong>file</strong><span> seguito dal nome del file di cui vogliamo conoscere le proprietà, un esempio potrebbe essere:</span></p> <pre> <code>leo@leo-pavillion:~/Scaricati$ file Modulo.pdf</code></pre> <p dir="ltr"><span>Che avrà un <strong>output </strong>molto simile a questo:</span></p> <pre> <code>Modulo.pdf: PDF document, version 1.5</code></pre> <p>Quest'ultimo, oltre a ricordarci che ormai questo file ce lo sogniamo pure di notte, ci dice che il file è <strong>effett</strong><strong>ivamente </strong>un file di tipo pdf.</p> <h3 dir="ltr">Opzioni multiple</h3> <p dir="ltr"><span>Se ricordate quello che ci siamo detti l’<a href="https://linuxhub.it/article/howtobash-i-file-parte-1">altra volta</a>, quando vogliamo passare un’opzione rappresentata da una singola lettera, dobbiamo utilizzare il carattere “-” seguito dalla lettera che indica l’opzione che vogliamo utilizzare, mentre se vogliamo utilizzare i nomi lunghi (composti quindi da più caratteri) dobbiamo utilizzare “--” .</span></p> <p dir="ltr"><span>Nel caso in cui invece volessimo utilizzare più di un’opzione, come facciamo?<br /> La risposta “ovvia” è che ci basta ripetere “-” e specificare una nuova opzione, in modo simile a questo:</span></p> <pre> <code>leo@leo-pavillion:~/Scaricati$ rm -r -I Moduli</code></pre> <p dir="ltr"><span>la risposta un po’ meno ovvia è che possiamo mettere in coda al singolo “-” più di un’opzione a carattere singolo, quindi il comando precedente possiamo anche scriverlo così:</span></p> <pre> <code>leo@leo-pavillion:~/Scaricati$ rm -rI Moduli</code></pre> <p dir="ltr"><span>Questo metodo rivela particolarmente utile quando le opzioni che dobbiamo passare ad un comando sono diverse (qualcuno ha detto tar ?!?). Prima di salutarci voglio quindi farvi riflettere su un comando che, molto probabilmente, avete già visto in giro e magari qualcuno vi ha anche consigliato di lanciare come soluzione al vostro problema (per carità, <strong>non fatelo</strong>):</span></p> <pre> <code>leo@leo-pavillion:~/Scaricati$ rm -rf /</code></pre> <p dir="ltr"><span>Se avete letto la guida con un minimo di attenzione (salvo per l’opzione <strong>-f</strong> che è semplicemente una forzatura, ma la vedremo nel dettaglio nel prossimo appuntamento) dovreste aver intuito perchè dare quel comando è una pessima idea e chi ve lo consiglia ha un pessimo senso dell’umorismo e non sta cercando di aiutarvi.</span></p> <p dir="ltr"><span>Anche per oggi direi che è tutto, vi saluto e spero di avervi dato qualche spunto per iniziare ad usare in modo più piacevole il terminale.</span></p> <p dir="ltr"><span>Per quanto riguarda l'utilizzo del comando 'mv', è <a href="https://linuxhub.it/article/howto-utilizzo-del-comando-mv">qui presente</a> una guida tecnica nella nostra raccolta.</span></p> <p dir="ltr"><span>Se aveste dubbi o domande (magari anche sull’ultimo comando “misterioso”) da porre trovate me e gli altri membri dello staff sul gruppo </span><strong>telegram</strong><span> della nostra community</span><a href="https://t.me/gentedilinux"><span> </span><strong>/gentedilinux</strong></a><span>.</span></p></div> <span rel="schema:author" class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/user/107" typeof="schema:Person" property="schema:name" datatype="">leoroop</span></span> <span property="schema:dateCreated" content="2019-04-21T06:13:06+00:00" class="field field--name-created field--type-created field--label-hidden">Dom, 04/21/2019 - 08:13</span> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Etichette</div> <div class="field__items"> <div class="field__item"><a href="/term/howto" property="schema:about" hreflang="it">#howto</a></div> </div> </div> Sun, 21 Apr 2019 06:13:06 +0000 leoroop 565 at https://linuxhub.it #howtobash - I file (Parte 1) https://linuxhub.it/article/howtobash-i-file-parte-1 <span property="schema:name" class="field field--name-title field--type-string field--label-hidden">#howtobash - I file (Parte 1)</span> <div property="schema:text" class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p lang="it" xml:lang="it">Benvenuti al secondo appuntamento con <strong>#howtobash.</strong></p> <p lang="it" xml:lang="it">Dopo aver mosso i primi passi all’interno del <strong>terminale</strong>, che a partire dall’inizio di questo magnifico viaggio (per chi se lo fosse perso, lo trovate in <a href="https://linuxhub.it/node/558">questa pagina</a>, dove verranno raccolte anche tutte le prossime puntate) è diventato un nostro nuovo e fedele alleato, oggi scopriamo come interagire con file che troviamo all’interno delle cartelle fra le quali abbiamo imparato a muoverci.</p> <p lang="it" xml:lang="it">Quindi non perdiamo tempo in chiacchiere e cominciamo subito col nuovo episodio!</p> <h2 lang="it" xml:lang="it">Un pizzico di “teoria”</h2> <p lang="it" xml:lang="it">Nella scorsa puntata abbiamo sempre utilizzato i comandi del terminale con le forme seguenti:</p> <p lang="it" xml:lang="it"><strong>comando</strong></p> <p lang="it" xml:lang="it">come ad esempio:</p> <pre> <code>leo@leo-pavillion:$ ls</code></pre> <p lang="it" xml:lang="it">oppure:</p> <p lang="it" xml:lang="it"><strong>comando </strong><em>bersaglio</em></p> <p lang="it" xml:lang="it">come ad esempio:</p> <pre> <code>leo@leo-pavillion:$ cd Documenti</code></pre> <p lang="it" xml:lang="it">Tuttavia questi non sono gli unici modi di utilizzare i comandi. Vediamo quindi di fare un altro passo in avanti verso la padronanza del terminale. Quindi prima di partire chiariamo meglio i concetti di <strong>passaggio</strong>, <strong>argomento </strong>ed <strong>opzione</strong>:</p> <ul><li> <p lang="it" xml:lang="it">E’ possibile che vi sia già capitato di sentire l’espressione “<strong>passa</strong> <em>X </em>al comando Y”, e per quanto sia un concetto davvero molto semplice magari non è sempre così ovvio. Quindi per “<strong>passare</strong>” qualcosa ad un comando si intende fornire un’informazione che il comando andrà ad utilizzare in qualche maniera durante la sua esecuzione.<br /> Un (perchè vedremo più avanti che ce n’è più di uno) modo tipico con cui si passa qualcosa, tipicamente uno o più <strong>argomenti </strong>e/o una o più <strong>opzioni</strong>, ad un comando è “banalmente” scrivere l’informazione da passare dopo il nome del comando da eseguire.</p> </li> </ul><ul><li> <p lang="it" xml:lang="it">Un <strong>argomento</strong> è ciò che sopra abbiamo indicato come <em>bersaglio</em> ovvero il file/cartella/variabile su cui il nostro comando andrà effettivamente ad agire.</p> </li> <li> <p lang="it" xml:lang="it">Una <strong>opzione </strong>(spesso anche chiamate flag) è un’informazione che permette di <strong>cambiare</strong> il comportamento del programma e fargli eseguire operazioni diverse rispetto a quelle che farebbe se lanciato senza. Il modo con cui le opzioni vengono passate ad un comando è utilizzando il carattere “-” seguito da una lettera (e qui dovremo fare attenzione perchè spesso fra maiuscolo e minuscolo c’è differenza), oppure, nel caso di opzioni con nomi più lunghi di una lettera, si utilizza “--” seguito dal nome dell’opzione.</p> </li> </ul><p lang="it" xml:lang="it">Negli esempi che abbiamo visto fino ad oggi non abbiamo mai utilizzato opzioni di alcun tipo, ma oggi ne vedremo più di uno, motivo per cui queste premesse sono state necessarie. Direi che per oggi con la teoria possiamo fermarci qui, veniamo quindi ai nostri comandi del giorno!</p> <h2 lang="it" xml:lang="it">Copiare un file</h2> <p lang="it" xml:lang="it">Una delle operazioni più comuni che potremmo voler eseguire su un file è quella della semplice copia, per farlo ci basterà utilizzare il comando <em><strong>cp</strong></em> seguito , nell’ordine, da:</p> <ul><li lang="it" xml:lang="it">file <em>da copiare</em> (eventualmente preceduto dal percorso)</li> <li lang="it" xml:lang="it">percorso <em>in cui copiare </em>il file</li> </ul><p lang="it" xml:lang="it">Vediamo un esempio per chiarire il tutto, supponiamo di trovarci nella cartella ~/Documenti e di volervi copiare un documento <em><strong>Modulo.pdf</strong></em> che abbiamo appena scaricato e che si trova nella cartella <em><strong>~/Scaricati</strong></em>.</p> <p lang="it" xml:lang="it">Se vi ricordate le <a href="https://linuxhub.it/article/howtobash-comincia-il-viaggio#title3"><strong>regolette</strong></a> che abbiamo visto l’ultima volta, sapete che abbiamo diversi modi comporre il percorso “sorgente” e diversi modi per specificare la destinazione, qui ve ne riporto volutamente soltanto uno (quello a mio avviso un po’ più criptico per chi comincia, analizzandolo nei punti critici), ma vi invito a sperimentarne anche altri per comprendere meglio ciò che ci siamo detti l’altra volta. Quindi, per copiare il nostro file digitiamo:</p> <pre> <code>leo@pavillion:~/Documenti$ cp ../Scaricati/Modulo.pdf .</code></pre> <p lang="it" xml:lang="it">Se ricordate bene o avete ripassato le regolette a questo punto dovrebbe essere evidente che ho scelto di costruire i percorsi a partire dal punto in cui mi trovo, ovvero andando a pescare il mio file andando su di un livello (utilizzando “.. “) e riscendendo le cartelle fino ad arrivare al file e ho specificato la destinazione dicendo “<em>qui</em>” utilizzando il “<strong>.</strong>” .</p> <h2 lang="it" xml:lang="it">Copiare una cartella e il suo contenuto</h2> <p lang="it" xml:lang="it">Ciò che abbiamo appena visto funziona benissimo se vogliamo maneggiare un <strong>singolo</strong> file, ma se volessimo copiare una <strong>cartella</strong> <strong>con</strong> <strong>tutto ciò che c’è dentro</strong>? Dovremmo forse copiare tutto quanto una cosa alla volta? La risposta, è ovviamente no. Se però avete provato ad utilizzare il comando <em><strong>cp</strong></em> utilizzando come argomento una cartella avrete ottenuto un <strong>errore</strong> simile a questo:</p> <pre> <code>cp: -r not specified; omitting directory 'Scaricati/'</code></pre> <p lang="it" xml:lang="it">il quale ci informa del fatto che la cartella non verrà copiata perchè non abbiamo specificato <strong>-r </strong>.</p> <p lang="it" xml:lang="it">Quest’ultima è infatti l’<strong>opzione </strong>che dobbiamo passare al comando cp per dirgli che vogliamo copiare una cartella ed il suo contenuto. Ne consegue che se, per esempio, partendo dalle condizioni di prima, volessimo copiare una cartella <em><strong>Moduli</strong></em>, posta all’interno della cartella <em><strong>~/Scaricati</strong></em>, nella nostra cartella <strong><em>~/Documenti</em></strong>, dovremmo utilizzare il comando:</p> <pre> <code>leo@pavillion:~/Documenti$ cp -r ../Scaricati/Moduli .</code></pre> <h2 lang="it" xml:lang="it">Tips &amp; Tricks</h2> <p lang="it" xml:lang="it">Ora che sappiamo come si copiano i file e le cartelle veniamo alla parte più interessante: un po’ di trucchetti per fare più alla svelta e meno fatica!</p> <h3 lang="it" xml:lang="it">Copiare più file alla volta</h3> <p lang="it" xml:lang="it"><span>Sono abbastanza certo che una grossa fetta di voi si sarà chiesta: “ma se volessi copiare più di un file per volta? Come devo fare?”. Niente di più semplice, infatti possiamo passare al comando cp tutti i file che vogliamo copiare in un colpo solo, basterà separarli con uno spazio e ricordandosi di lasciare per ultima la cartella di destinazione! Sempre riferendoci all’esempio di prima, immaginiamo di voler copiare Modulo1.pdf e Modulo2.odt presenti in ~/Scaricati nella cartella ~/Documenti. Il comando sarà:</span></p> <pre> <code>leo@leo-pavillion:~/Scaricati$ cp Modulo1.pdf Modulo2.odt ~/Documenti</code></pre> <h3 lang="it" xml:lang="it">Copiare tutti i file insieme</h3> <p lang="it" xml:lang="it"><span>Posso già sentire le proteste: “E se in una cartella ci sono 100 file? Devo scriverli tutti?”. </span></p> <p lang="it" xml:lang="it"><span>Anche per questo problema (e tutti quelli che vi assomigliano) il nostro fantastico <strong>terminale</strong> ha già una soluzione, e questa soluzione si chiama </span><strong>wildcards </strong><span>, un set di armi potentissime che ci permetterà di fare cose anche molto complesse con pochissima fatica. </span></p> <p lang="it" xml:lang="it"><span>Non entriamo oggi nei dettagli delle </span><strong>wildcards </strong><span>(non spiegherò cosa siano di preciso né tutto quello che possiamo farci; vi lascio con un po’ di curiosità per le prossime puntate :P )</span><strong> </strong><span>perché per poterle apprezzare come si deve, secondo me, è ancora un po’ presto. </span></p> <p lang="it" xml:lang="it"><span>Quello che vorrei fare è introdurle una alla volta man mano che ci serviranno e fare un po’ di recap, e magari vederle tutte, una volta che saremo più esperti e potremo sfruttarle come si deve.</span></p> <p lang="it" xml:lang="it"><span>La <strong>wildcard</strong> che vediamo oggi è “</span><strong>*</strong><span>” che ha il significato di “<em>tutto</em>”, e la utilizzeremo in accoppiata col comando cp per dirgli di copiare tutti i file in una cartella. </span></p> <p lang="it" xml:lang="it"><span>Immaginiamo di aver scaricato un pack di 30 sfondi bellissimo che adesso si trova nella cartella <em><strong>~/Scaricati/Wallpapers</strong></em> e che vogliamo tenere in una cartella Sfondi che abbiamo creato dentro alla cartella <strong><em>~/Immagini</em></strong>, mettersi lì a copiare i file uno alla volta, o anche tutti insieme ma passando tutti i nomi al comando cp sarebbe un’operazione più che sufficientemente lunga e noiosa da farci perdere qualsiasi buona volontà possiamo aver raccolto per imparare ad utilizzare il terminale. Per effettuare l’operazione senza sbattimenti di sorta ci basterà ricorrere alla nostra nuova alleata, la wildcard * e, supponendo di trovarci all’interno della cartella Sfondi in cui vogliamo copiare i file, ci basterà dare il comando:</span></p> <pre> <code>leo@leo-pavillion:~/Immagini/Sfondi$ cp ~/Scaricati/Wallpapers/* .</code></pre> <p dir="ltr">Anche per oggi direi che è tutto, v<span>i saluto e spero di avervi dato qualche spunto per iniziare ad usare in modo più piacevole il terminale. </span></p> <p dir="ltr"><span>Se aveste dubbi o domande da porre trovate me e gli altri membri dello staff sul gruppo <strong>telegram</strong> della nostra community <a href="https://t.me/gentedilinux"><strong>/gentedilinux</strong></a>. </span></p> <p dir="ltr"><span>Ci becchiamo col prossimo episodio di <strong>#howtobash</strong>!</span></p></div> <span rel="schema:author" class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/user/107" typeof="schema:Person" property="schema:name" datatype="">leoroop</span></span> <span property="schema:dateCreated" content="2019-04-12T08:40:06+00:00" class="field field--name-created field--type-created field--label-hidden">Ven, 04/12/2019 - 10:40</span> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Etichette</div> <div class="field__items"> <div class="field__item"><a href="/term/howto" property="schema:about" hreflang="it">#howto</a></div> </div> </div> Fri, 12 Apr 2019 08:40:06 +0000 leoroop 564 at https://linuxhub.it 🔧 #howto - Installare LAMP su Ubuntu, Debian e derivate https://linuxhub.it/article/howto-installare-lamp-su-ubuntu-debian-e-derivate <span property="schema:name" class="field field--name-title field--type-string field--label-hidden">🔧 #howto - Installare LAMP su Ubuntu, Debian e derivate</span> <div property="schema:text" class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><strong>LAMP</strong>, acronimo di <strong>Linux</strong>, <strong>Apache</strong>, <strong>MySQL </strong>e <strong>PHP</strong>, è un gruppo di software open-source che molto spesso viene installato per poter hostare siti web dinamici e applicazioni web su un server utilizzante il kernel Linux e le distribuzioni che abbiamo imparato a conoscere, come Ubuntu, Debian, CentOS e molte altre.</p> <p>Questa guida è incentrata sull'installazione di questi software su <strong>Debian </strong>e <strong>Ubuntu</strong>.</p> <blockquote> <p>Utilizzi Centos? È disponibile una guida dedicata specifica all'installazione di <a href="https://linuxhub.it/article/howto-installare-apache-su-centos-7">Apache</a> o <a href="https://linuxhub.it/article/howto-installare-nginx-su-centos-7-e-configurazione-ssl">Nginx</a> su Centos.</p> </blockquote> <h2>Definizioni</h2> <p>Prima di procedere con la guida, è bene definire alcuni concetti per chi si interfaccia solo ora a questo argomento:</p> <ul><li><strong>Linux </strong>è il kernel creato da Linus Torvalds presente nelle distro utilizzate da noi utenti tutti i giorni, perciò non penso abbia bisogno di ulteriori spiegazioni.</li> <li><strong>Apache </strong>è un web server, oltre a Nginx, più utilizzato e diffuso nel mondo. Esso possiede una peculiarità: il file .htaccess, che permette di configurare maggiormente il web server al livello di una directory singola.</li> <li><strong>MySQL </strong>è un sistema di gestione di database richiesto per creare siti web dinamici e da molti CMS (Content Management System, o Sistemi di Gestione dei Contenuti) come WordPress, Drupal o Joomla!.</li> <li><strong>PHP </strong>è un linguaggio di programmazione utilizzato, oltre a Python, Java o altri, per creare pagine web dinamiche.</li> </ul><p>Definiti quelli che sono i concetti chiave di questa guida, proseguiamo con l'articolo.</p> <h2>Installazione Apache</h2> <p>Premessa: in questa guida i comandi verranno eseguiti come <strong>utente amministratore</strong> e non come utente <em>root</em>, pertanto ricordatevi di utilizzare sempre <em>sudo</em>.</p> <p>Procediamo con l'installazione di <strong>apache2</strong> via apt:</p> <pre> <code>$ sudo apt install apache2</code></pre> <p>Alla fine dell'installazione, basterà digitare sul browser il proprio dominio o l'indirizzo IP collegato al server. Se l'installazione di Apache è andata a buon fine, uscirà questa finestra (potrebbe variare in base alla distribuzione utilizzata):</p> <p><img alt="Pagina default utilizzata da Apache" data-entity-type="file" data-entity-uuid="f639ebb4-e319-4c51-a60e-d8017b6ed8a0" src="/sites/default/files/inline-images/debian_apache2.jpg" /></p> <h3>Configurazione firewall</h3> <p>Se si utilizza un firewall come <strong>UFW</strong>, bisognerà prima aggiungere alle eccezioni le porte <strong>80 </strong>e <strong>443</strong>, utilizzate per il traffico HTTP e HTTPS, questo per evitare possibili conflitti o malfunzionamenti, come l'irreperibilità delle risorse.</p> <p>escludiamo quindi la porta 80 (HTTP):</p> <pre> <code>$ sudo ufw allow 80</code></pre> <p>e la porta 443 (HTTPS):</p> <pre> <code>$ sudo ufw allow 443</code></pre> <h2>Installazione di MySQL</h2> <p>Questa parte di guida è specifica per <strong>Ubuntu</strong>, passa al prossimo titolo per<strong> Debian 9</strong>.</p> <p>Anche installare MySQL è molto semplice, ma esso richiede un'ulteriore configurazione.</p> <pre> <code>$ sudo apt install mysql-server</code></pre> <p>Ora, dobbiamo rendere più sicuro MySQL con un semplice script che ci permetterà di rimuovere le impostazioni di default e proteggere i nostri database.</p> <pre> <code>$ sudo mysql_secure_installation</code></pre> <p>Per prima cosa, ci chiederà se vogliamo installare il "<strong>Validate Password Plugin</strong>", un plugin che ci dirà se le nostre password sono sicure. Non è indispensabile, ma se si vuole aggiungere alla propria configurazione, basta seguire questi passaggi.</p> <pre> <code>VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No:</code></pre> <p>Se l'input sarà Y, ci verrà chiesto di impostare un livello di convalida delle password. Nel caso volessimo scegliere 2, è obbligatorio sapere che la password non verrà accettata se è più corta di 8 caratteri e non possiede numeri, lettere minuscole e maiuscole, simboli speciali e parole comuni nei dizionari.</p> <pre> <code>There are three levels of password validation policy: LOW Length &gt;= 8 MEDIUM Length &gt;= 8, numeric, mixed case, and special characters STRONG Length &gt;= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1</code></pre> <p>Dopodichè ci verrà chiesto di inserire una password per l'utente <strong>root </strong>di <strong>MySQL</strong>, che è totalmente <strong>diverso </strong>da quello impostato sul server. Se il plugin Validate Password è attivo, la password verrà verificata e potremmo scegliere se cambiarla o tenerla.</p> <pre> <code>Using existing password for root. Estimated strength of the password: 100 Change the password for root ? ((Press y|Y for Yes, any other key for No) : n</code></pre> <p>Congratulazioni, MySQL è stato correttamente installato e reso più sicuro!</p> <p>P.S. Nel caso non si volesse installare il plugin, verranno mostrate le istruzioni che si possono vedere qui sotto, perciò non preoccupatevi.</p> <h2>Installazione di MariaDB (Debian 9)</h2> <p>Su Debian 9, quando si proverà ad installare MySQL con il comando mostrato sopra, ci si troverà davanti ad una sorpresa: al posto del sistema di gestione di database che conosciamo tutti, verrà installato <strong>MariaDB</strong>, che molto semplicemente è una versione modificata dalla community di MySQL. Nulla di troppo diverso per noi utenti all'inizio.</p> <p>Possiamo quindi installare direttamente <strong>mariadb-server</strong>.</p> <pre> <code>$ sudo apt install mariadb-server</code></pre> <p> e procedere con la configurazione guidata:</p> <pre> <code>$ sudo mysql_secure_installation</code></pre> <p>Con MariaDB non ci verrà chiesto di installare il plugin per la convalida delle password, pertanto ci troveremo di fronte a nuove istruzioni, anch'esse molto semplici da comprendere.</p> <p>Innanzitutto, bisognerà scegliere la nuova password da utilizzare per l'utente <em>root</em>.</p> <pre> <code>Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success!</code></pre> <p>Dopo ci verrà chiesto se vogliamo procedere alla <strong>rimozione di utenti anonimi</strong>, assolutamente consigliata se il server non è in locale.</p> <pre> <code>By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success!</code></pre> <p>Ora dovremmo scegliere se <strong>disabilitare il login all'account root</strong> da una rete esterna e quindi poter accedere solamente da "localhost".</p> <pre> <code>Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ... Success!</code></pre> <p>MariaDB possiede un database chiamato "test" a cui tutti possono accedere. È consigliatissimo <strong>rimuoverlo</strong> se il server non è utilizzato per scopi di prove.</p> <pre> <code>By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success!</code></pre> <p>Ricaricando le tabelle dei privilegi faremo in modo che tutte le modifiche che abbiamo fatto abbiano immediatamente effetto.</p> <pre> <code>Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!</code></pre> <p>Anche MariaDB è stato installato e reso più sicuro.</p> <h2>Installazione di PHP</h2> <p>Installare PHP richiede qualche passaggio in più siccome la versione attualmente fornita con <strong>apt </strong>è la <strong>7.0</strong>, che tra pochi mesi non sarà più supportata. È sempre consigliato installare l'ultima versione rilasciata, in questo caso la <strong>7.3</strong>. Vediamo come procedere all'installazione.</p> <p>Dobbiamo fare in modo che apt possa fornirci PHP 7.3, ottenibile aggiungendo la repository di sury.org alla lista delle sorgenti da cui ottenere i file.</p> <pre> <code>$ sudo apt install lsb-release apt-transport-https ca-certificates $ sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg $ echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php7.3.list $ sudo apt update</code></pre> <p>Se tutto è andato a buon fine, ci basta installare PHP con i pacchetti necessari.</p> <pre> <code>$ sudo apt install php7.3 php-pear php-mysql libapache2-mod-php</code></pre> <p>Verranno installate tutte le ultime versioni di questi pacchetti, perciò non c'è bisogno di specificare php7.3 in ciascuno di essi.</p> <h2>Testiamo PHP</h2> <p>L'ultimo passaggio necessario è provare a vedere se PHP funziona correttamente sul nostro server. Per fare ciò, dobbiamo creare un file <strong>.php</strong> in /var/www/html (se non si è modificato nulla nelle configurazioni di Apache). Il file può avere qualsiasi nome, ma l'estensione .php è <strong>obbligatoria</strong>.</p> <pre> <code>$ cd /var/www/html $ sudo nano info.php</code></pre> <p>Non è obbligatorio utilizzare <strong>nano</strong>, qualsiasi editor di testo può andare bene.</p> <pre> <code>&lt;?php phpinfo(); ?&gt;</code></pre> <p>Questo è il pezzo di codice da inserire nel file. Per uscire da nano, basta premere CTRL+X, S e poi INVIO.</p> <p>Se tutto funziona correttamente, digitando nel proprio browser dominio/info.php o IP/info.php dovremmo trovarci davanti una finestra come questa qui sotto.</p> <p><img alt="File delle informazioni di PHP" data-entity-type="file" data-entity-uuid="239c53e3-a34a-4515-9c97-0d6435d447be" height="568" src="/sites/default/files/inline-images/php_info.png" width="628" /></p> <p>Questa pagina fornisce <strong>informazioni </strong>riguardanti il proprio server dalla parte di PHP. È un file che può rimanere solo se il server viene utilizzato in locale, mentre in produzione generalmente viene eliminato per questioni di sicurezza.</p> <h2>Riepilogo</h2> <p>Con questa guida avete imparato ad installare Apache, MySQL e PHP sul proprio server Linux. È ora possibile installare e configurare tutti i software che si vogliono usare, come WordPress, Drupal, Ghost o anche <a href="https://linuxhub.it/article/howto-installare-node-version-manager-nvm-su-debian-9">NodeJS</a>.</p> <p> </p> <p>Per dubbi o chiarimenti potete scrivete nel nostro gruppo <a href="https://t.me/gentedilinux">Telegram</a>.</p></div> <span rel="schema:author" class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/user/85" typeof="schema:Person" property="schema:name" datatype="">Alexzan</span></span> <span property="schema:dateCreated" content="2019-04-09T15:57:58+00:00" class="field field--name-created field--type-created field--label-hidden">Mar, 04/09/2019 - 17:57</span> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Etichette</div> <div class="field__items"> <div class="field__item"><a href="/term/howto" property="schema:about" hreflang="it">#howto</a></div> </div> </div> Tue, 09 Apr 2019 15:57:58 +0000 Alexzan 561 at https://linuxhub.it 🔧 #howto - Installare Node Version Manager (NVM) su Debian 9 https://linuxhub.it/article/howto-installare-node-version-manager-nvm-su-debian-9 <span property="schema:name" class="field field--name-title field--type-string field--label-hidden">🔧 #howto - Installare Node Version Manager (NVM) su Debian 9</span> <div property="schema:text" class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Inanzitutto è doveroso capire che cos'è <strong>NodeJS</strong> e <strong>NVM</strong> (Node Version Manager) il quale gestisce appunto le varie versioni di NodeJS installate nel sistema.</p> <blockquote> <p>NodeJS è una runtime di JavaScript OpenSource multipiattaforma orientato agli eventi per l'esecuzione di codice Javascript Server Side, costruita sul motore Javascript V8 di Google Chrome.</p> </blockquote> <h2>Installazione NVM</h2> <p>Per prima cosa apriamo un terminale o una sessione SSH accedendo come <strong>root </strong>e controlliamo la disponibilità di nuovi aggiornamenti ai pacchetti via <strong>apt</strong>:</p> <pre> <code>apt update</code></pre> <p>procediamo poi con l'installazione di <strong>curl</strong>, necessario per il prossimo step:</p> <pre> <code>apt install curl</code></pre> <p>scarichiamo poi lo script di installazione:</p> <pre> <code>curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh -o install_nvm.sh</code></pre> <p>e verifichiamo che il file sia effettivamente disponibile nel nostro sistema:</p> <pre> <code>cat install_nvm.sh</code></pre> <p>se vi apre la schermata correttamente siete apposto, ora andiamo avanti</p> <p>Procediamo ora con la vera e propria installazione di NVM, eseguiamo quindi lo script appena scaricato:</p> <pre> <code>sh install_nvm.sh source ~/.profile</code></pre> <p>Una volta installato, possiamo controllarne l'effettivo funzionamento digitando:</p> <pre> <code>nvm ls-remote</code></pre> <p>il quale restituirà come risultato le versioni disponibili di NodeJS</p> <h2>Installazione NodeJS via NVM</h2> <p>La versione che ho scelto per questa guida è la 10.15.4, la versione più stabile nel momento in cui scrivo.</p> <p>L'installazione è semplificata, sfruttiamo la flag <strong>install</strong> seguita dalla versione che vogliamo installare:</p> <pre> <code>nvm install 10.15.3</code></pre> <p>successivamente all'installazione, informiamo nvm sulla versione di NodeJS che vogliamo usare tramite la flag <strong>use</strong>:</p> <pre> <code>nvm use 10.15.3</code></pre> <p>Infine controlliamo che la versione di NodeJS sia effettivamente quella da noi richiesta (la 10.15.3):</p> <pre> <code>node -v</code></pre> <p>dovreste avere un riscontro simile a questo:</p> <pre> <code>root@hersy:~# node -v v10.15.3 root@hersy:~#</code></pre> <p>Possiamo usare la flag <strong>ls</strong> per verificare le versioni disponibili, installate nel sistema:</p> <pre> <code>nvm ls</code></pre> <p>Il quale restituirà un risultato simile:</p> <pre> <code>root@hersy:~# nvm ls -&gt; v10.15.3 default -&gt; 8.11.1 (-&gt; v8.11.1) node -&gt; stable (-&gt; v10.15.3) (default) stable -&gt; 10.15 (-&gt; v10.15.3) (default) root@hersy:~#</code></pre> <p>nell'esempio qui sopra, possiamo vedere che la mia versione di Default è la 8.11.1, possiamo cambiare questa definizione tramite la flag <strong>alias</strong>:</p> <pre> <code>nvm alias default 10.15.3</code></pre> <p>e selezioniamo la nuova istruzione:</p> <pre> <code>nvm use default</code></pre> <p> </p> <p>Per dubbi e chiarimenti scrivete nel nostro gruppo <a href="https://t.me/gentedilinux">Telegram</a>.</p></div> <span rel="schema:author" class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/user/105" typeof="schema:Person" property="schema:name" datatype="">Hersy</span></span> <span property="schema:dateCreated" content="2019-04-08T14:42:02+00:00" class="field field--name-created field--type-created field--label-hidden">Lun, 04/08/2019 - 16:42</span> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Etichette</div> <div class="field__items"> <div class="field__item"><a href="/term/howto" property="schema:about" hreflang="it">#howto</a></div> </div> </div> Mon, 08 Apr 2019 14:42:02 +0000 Hersy 560 at https://linuxhub.it 🔧 #howto – Rimuovere i vecchi kernel da Debian e Fedora/CentOS https://linuxhub.it/article/howto-rimuovere-i-vecchi-kernel-da-debian-e-fedoracentos <span property="schema:name" class="field field--name-title field--type-string field--label-hidden">🔧 #howto – Rimuovere i vecchi kernel da Debian e Fedora/CentOS</span> <div property="schema:text" class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Disinstallare i vecchi kernel inutilizzati è un ottimo metodo per recuperare spazio e alleggerire il sistema in generale.</p> <p>Buona norma è quella di mantenere le ultime due versioni più recenti installate, rimuovendo le precedenti, questo per prevenire l'impossibilità di accedere al proprio ssitema nel caso di una versione incompatibile.</p> <blockquote> <p>Prima di procedere con la guida, accertiamoci di aver installato i più recenti aggiornamenti e riavviato con l'ultima versione del kernel disponibile (possiamo selezionarlo direttamente da GRUB se presente).</p> </blockquote> <p>In questa guida vediamo come è possibile rimuovere i vecchi kernel su Debian e Fedora/CentOS.</p> <h2>Debian e derivate</h2> <p>Su Debian, Ubuntu e derivati, quesa operazione è facilitata da APT, il gestore pacchetti predefinito di sistema:</p> <pre> <code>sudo apt autoremove --purge</code></pre> <p>questa operazione andrà ad eliminare tutte le vecchie versioni presenti del kernel, mantenendo le ultime due, rimuoverà inoltre possibili vecchie dipendenze non più necessarie e quindi obsolete allo scopo.</p> <p>Nel caso venga restituito un errore, accertiamoci che non siano presenti aggiornamenti in sospeso:</p> <pre> <code>sudo apt install -f sudo apt update</code></pre> <p>ed effettuiamo nuovamente l'operazione.</p> <h2>Fedora/CentOS</h2> <p>Il metodo più comune e pronto all'uso, è quello di sfruttare <strong>package-cleanup</strong> offerto da <strong>yum-utils</strong> installabile digitando:</p> <pre> <code>yum install yum-utils</code></pre> <p>nel caso non fosse presente. Proseguiamo poi con la rimozione dei kernel meno recenti:</p> <pre> <code>package-cleanup --oldkernels --count=2</code></pre> <p>dove:</p> <ul><li><strong>--oldkernels</strong> identifica ovviamente i vecchi kernel obsoleti installati nel sistema</li> <li><strong>--count</strong> il numero di versioni da mantenere nel sistema (consigliati 2)</li> </ul><h3>Metodo manuale</h3> <p>Per prima cosa dobbiamo controllare la versione del kernel al momento in uso dal sistema, il metodo più semplice è digitando:</p> <pre> <code>uname -r</code></pre> <p>una volta identificata la versione corrente (ipotesi <strong>4.20.1-1.el7.elrepo.x86_64</strong>), controlliamo le versioni installate:</p> <pre> <code>rpm -q kernel</code></pre> <p>l'output sarà una lista di kernel nel formato: <strong>kernel-x.x86_64</strong>.</p> <p>Eliminiamo da questa lista la versione al momento in uso e quella più recente rispetto ad essa:</p> <pre> <code>yum remove kernel-versione</code></pre> <p>sostituendo <strong>kernel-versione</strong> all'esatto contenuto di una delle righe restituite da comando <strong>rpm -q kernel</strong>.</p> <p> </p> <p>Per dubbi e chiarimenti, utilizzate il nostro <a href="https://t.me/gentedilinux">gruppo Telegram</a>.</p> <p><em>Good *nix </em><strong><em>_Mirko</em></strong></p></div> <span rel="schema:author" class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/user/13" typeof="schema:Person" property="schema:name" datatype="">Mirko Brombin</span></span> <span property="schema:dateCreated" content="2019-04-05T12:42:13+00:00" class="field field--name-created field--type-created field--label-hidden">Ven, 04/05/2019 - 14:42</span> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Etichette</div> <div class="field__items"> <div class="field__item"><a href="/term/howto" property="schema:about" hreflang="it">#howto</a></div> </div> </div> Fri, 05 Apr 2019 12:42:13 +0000 Mirko Brombin 559 at https://linuxhub.it #howtobash - Comincia il viaggio https://linuxhub.it/article/howtobash-comincia-il-viaggio <span property="schema:name" class="field field--name-title field--type-string field--label-hidden">#howtobash - Comincia il viaggio</span> <div property="schema:text" class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><span>Benvenuti, da oggi cominciamo una lunga ed avventurosa strada alla scoperta del magico mondo del terminale. Come già avete potuto leggere <a href="https://linuxhub.it/article/howto-utilizzo-del-comando-mv">qui</a>, <a href="https://linuxhub.it/article/howto-utilizzo-del-comando-man">qui</a>, <a href="https://linuxhub.it/article/howto-utilizzo-del-comando-dmesg">qui</a> e, più in generale, <a href="https://linuxhub.it/node/528">qui</a> , il <strong>terminale</strong>, una volta <em>unico mezzo di interazione con il pc</em>, nasconde tante funzioni molto interessanti che possono andare ad integrare (o anche sostituire) ciò che spesso facciamo <em>graficamente</em> nel nostro amato ambiente <strong>desktop</strong>. </span></p> <p><span>Sono assolutamente sicuro che nelle vostre scorribande in compagnia della vostra distro preferita vi sarete imbattuti in qualche operazione effettuabile solo dalla console, e se non siete utenti troppo esperti questo si traduce inevitabilmente in:</span></p> <ul><li><span>cerco una guida su internet</span></li> <li><span>trovo un [RISOLTO] nel forum di supporto di ubuntu o qualche altro forum sperduto nell’internet</span></li> <li><span>copio&amp;incollo i comandi e mi tappo gli occhi sperando che tutto funzioni</span></li> </ul><p dir="ltr"><span>Credo sia inutile dire che fin troppo spesso i passaggi di cui sopra hanno come risultato quello di mandarvi in palla il sistema da capo a piedi con pessime conseguenze. </span></p> <h2 dir="ltr">Cosa impariamo oggi:</h2> <p dir="ltr"><span>Nel tempo mi è capitato spesso che mi si chiedesse: “si ok, ma come faccio ad imparare ad usare il terminale? come faccio a sapere quali comandi devo dare e capire cosa sto facendo?”. A partire da questo articolo vedremo, uno alla volta, tutti i comandi di base che servono per avere il pieno controllo delle nostre azioni, vedremo un po’ di situazioni ed applicazioni standard per ognuno di essi e anche qualche trucchetto per eseguire velocemente operazioni che fatte in ambiente desktop sarebbero molto più lente. </span></p> <p dir="ltr"><strong>Piccolo disclaimer: </strong>tutte le puntate di questa raccolta (rivolta soprattutto ai principianti e a chi già conosce qualcosa ma vuole scoprire qualche trucco in più) avranno come shell di riferimento (se non si fosse capito dal titolo) la <em><span>bourne again shell </span></em><span>(<strong>bash</strong>, appunto) poiché si tratta di quella che più spesso si trova come shell di default prendendo una qualsiasi distro linux a caso, in modo da cercare di essere il più generale ,ed indipendente dalla distro utilizzata, possibile.</span></p> <p dir="ltr"><span>Detto ciò, bando alle ciance e partiamo dalle operazioni più semplici e più importanti allo stesso tempo:</span></p> <ul dir="ltr"><li><span>Sapere cosa c’è dentro una cartella</span></li> <li><span>Spostarci fra una cartella e l’altra</span></li> </ul><p dir="ltr"><span>Non possiamo pretendere di imparare qualcosa leggendo e basta, quindi vediamo direttamente un esempio, aprite il vostro terminale, vi troverete davanti qualcosa del genere:</span></p> <pre> <code>leo@leo-pavillon:~$</code></pre> <p dir="ltr"><span>dove come prima informazione compare il vostro <strong>nome utente</strong>, dopo la "<strong>@</strong>" invece c’è il nome del vostro pc (hostname) e dopo i "<strong>:</strong>" compare il simbolo "<strong>~</strong>" , quest’ultimo rappresenta un’abbreviazione per la cartella <strong>home</strong> associata al vostro utente, se volessimo ragionare in termini di percorso assoluto questa cartella sarebbe identificata (nel mio caso) come<em> /home/leo </em>. </span></p> <h3 dir="ltr"><span>Conoscere il contenuto di una cartella</span></h3> <p dir="ltr"><span>Vediamo ora come possiamo sapere cosa c’è all’interno della nostra cartella home, il comando che ci serve in questo caso è :</span></p> <pre> <code>ls</code></pre> <p dir="ltr"><span>il cui significato è un'abbreviazione di “</span><em>list</em><span>”, il quale mostrerà qualcosa di simile a questo:</span></p> <pre> <code>leo@leo-pavillon:~$ ls Documenti Immagini Modelli Musica Scaricati Scrivania Video</code></pre> <p dir="ltr"><span>In questo modo abbiamo visualizzato il contenuto della cartella in cui siamo. Non è finita qui, perchè ls ci dà la possibilità di visualizzare anche il contenuto di una cartella differente da quella in cui siamo posizionati, per farlo è sufficiente specificare il percorso in cui ls deve andare a guardare. Se, per esempio, vogliamo visualizzare il contenuto della cartella Immagini dovremmo dare come comando:</span></p> <pre> <code>ls Immagini</code></pre> <p dir="ltr"><span>con un risultato che dovrebbe ricordare qualcosa di questo tipo:</span></p> <pre> <code>leo@leo-pavillon:~$ ls Immagini Istantanea_2019-02-28_23-05-07.png linuxhub Screenshots Wallpapers</code></pre> <p dir="ltr">Ci sono ancora diversi utilizzi e sfaccettature del comando <strong><em>ls </em></strong>che non abbiamo coperto qui, ma non voglio caricarvi di troppi concetti che sfruttereste poco all'inizio, quindi tutto ciò che manca lo scopriremo in una puntata più avanti.</p> <h3 dir="ltr"><span>Spostarsi fra le cartelle</span></h3> <p dir="ltr"><span>Ora che sappiamo come vedere cosa c’è dentro le cartelle è arrivato il momento di spostarci da una all’altra. Il comando che ci aiuterà a compiere questa azione è:</span></p> <pre> <code>cd</code></pre> <p dir="ltr"><span>il cui nome è un'abbreviazione per “</span><em>change directory”</em><span>. Se, per esempio, vogliamo entrare nella cartella Documenti tutto ciò che dobbiamo fare è semplicemente dare come comando</span></p> <pre> <code>cd Documenti</code></pre> <p><span>il risultato sarà qualcosa che assomiglia molto a:</span></p> <pre> <code>leo@leo-pavillon:~$ cd Documenti leo@leo-pavillon:~/Documenti$</code></pre> <p dir="ltr"><span>Come potete vedere il percorso dopo i : è cambiato in<em><strong> </strong></em><strong>~/Documenti</strong>, ad indicare che siamo all’interno della cartella Documenti, la quale risiede all’interno della cartella <strong>~</strong> .</span></p> <h3 dir="ltr"><span>Comporre i percorsi</span></h3> <p dir="ltr"><span>Ora che sappiamo spostarci fra le cartelle e guardarci dentro è bene imparare alcuni nomi “particolari” per indicare le cartelle e che ci saranno utili durante tutto il nostro viaggio alla scoperta del terminale.</span></p> <ul><li dir="ltr"> <p dir="ltr"><span>Con il simbolo "<strong>/</strong>" indichiamo la radice (<strong>root</strong>) del sistema, la cartella più in alto di tutte e dalla quale, quindi, possiamo <em>solo scendere</em>. Quando vogliamo indicare un percorso assoluto (cioè indipendente dalla posizione in cui ci troviamo) infatti si comincia sempre con / , come abbiamo visto negli esempi precedenti (/home/leo , /usr/share etc. etc.)</span></p> </li> <li dir="ltr"> <p dir="ltr"><span>Ho parlato di scendere, ma come si fa a salire? Semplice, la cartella indicata con .. rappresenta “un livello su” per cui se entriamo nella cartella /home/leo/Documenti il nostro livello su sarà /home/leo (vien da sè che dando come comando cd .. ci sposteremo al livello superiore). Possiamo anche indicare percorsi che prima salgono e poi scendono, ad esempio se siamo in /home/leo/Documenti e vogliamo sapere cosa c’è in /home/leo/Scaricati possiamo scrivere ls ../Scaricati, andando quindi prima un livello su e poi scendendo da in Scaricati.</span></p> </li> <li dir="ltr"> <p dir="ltr"><span>Abbiamo già menzionato il simbolo ~ che indica la cartella home dell’utente loggato nel sistema. Possiamo quindi costruire dei percorsi di questo tipo ~/Documenti/1/2 complessi quanto ci pare che partono sempre dalla nostra home.</span></p> </li> <li dir="ltr"> <p dir="ltr"><span>Come ultimo nome “speciale” vediamo carattere . indica sempre la cartella in cui ci troviamo al momento (non tanto utile nei casi di cd ed ls, ma scopriremo molto presto che questa informazione è vitale in un sacco di situazioni con comandi diversi)</span></p> </li> </ul><h2 dir="ltr"><span>Tips &amp; Tricks</span></h2> <p>Ad ogni tappa del nostro viaggio insieme vi lascerò con dei consigli e qualche trucchetto su come sfruttare al meglio i comandi che abbiamo appena imparato, piccoli gesti ed accortezze (pescati dal mio workflow quotidiano) che rendono la fruizione del terminale molto più fluida e lo trasformano da una noia mortale ad un vero e proprio asso nella manica.</p> <h3>Tornare velocemente alla cartella home</h3> <p>Se vi siete inoltrati nei meandri del vostro sistema e volete tornare velocemente alla vostra cartella home i modi per farlo velocemente sono diversi, ad esempio potere sfruttare la ~ (che potete digitare effettuando la combinazione <strong>&lt;ALT GR&gt;</strong> + <strong>ì </strong>) e dare come comando:</p> <pre> <code>cd ~</code></pre> <p>ma esiste un metodo ancora più veloce, e cioè dare come comando <em><strong>cd </strong></em>senza nessuna cartella come parametro. In questo modo sarete pronti a ripartire dalla vostra <strong>home </strong>nel minor tempo possibile!<strong> </strong></p> <h3 dir="ltr"><span>Scrittura veloce e suggerimenti</span></h3> <p dir="ltr"><span>Qualcuno di voi, leggendo, avrà sicuramente pensato qualcosa del tipo “sì ok, ma tutte le volte che faccio un cd devo dare un <em><strong>ls</strong></em> per sapere dove voglio andare? Che scocciatura!”</span></p> <p dir="ltr"><span>La risposta a questa domanda è: fortunatamente no. Il terminale infatti mette a disposizione una funzione di auto-completamento di ciò che stiamo digitando che possiamo attivare premendo il tasto , mi spiego meglio: se vogliamo scrivere “Desktop” possiamo digitare soltanto una parte della parola (ad esempio Des) e poi premere il tasto <strong>&lt;TAB&gt;</strong>. A questo punto, se Desktop è l’unica parola che inizia con Des , il terminale completerà il resto per noi, scrivendo Desktop senza doverlo digitare per intero. Qualora ci fossero più parole che iniziano con “Des”, una singola pressione del tasto <strong>&lt;TAB&gt;</strong> non mostrerebbe nulla, in questo caso ci basterà premerlo velocemente <strong>due volte </strong>ed il terminale ci mostrerà tutte le parole che iniziano con “Des” e potremo scegliere come continuare la nostra digitazione. Viene quasi da sé che possiamo sfruttare questo comodo strumento in combinazione ai nostri comandi (sia <em><strong>cd</strong></em> che <em><strong>ls</strong></em>) ed essere molto più rapidi. </span></p> <p dir="ltr"><span>Le chicche non sono finite qui, se diamo un doppio <strong>&lt;TAB&gt;</strong> dopo il nostro comando senza aver scritto nulla, il terminale ci suggerirà tutte le cartelle (o i file nel caso di ls) che possiamo dare in pasto al comando! All’inizio può sembrare un po’ macchinoso ma vi assicuro che non appena ci prenderete la mano diventerete dei fulmini.</span></p> <h3 dir="ltr"><span>Pulire il terminale</span></h3> <p dir="ltr"><span>Avete dato un <strong>doppio</strong> <strong>&lt;TAB&gt;</strong> in una cartella piena zeppa di roba? Siete davanti ad un muro di testo da capogiro? Niente paura, non c’è bisogno di chiudere il terminale per avere una finestra pulita, basterà digitare il comando:</span></p> <pre> <code>clear</code></pre> <p><span>e la finestra verrà completamente svuotata. Oppure, se come me siete molto pigri e non avete voglia di digitare troppo, basterà un colpo della combinazione <strong>&lt;CTRL&gt;</strong> + <strong>l</strong> (elle) per ottenere lo stesso effetto ed avere un terminale nuovo di zecca!</span></p> <p dir="ltr"><span>Con questo direi che per oggi è tutto, io vi saluto e spero di avervi dato qualche spunto per iniziare ad usare in modo più piacevole il terminale. Se aveste dubbi o domande da porre trovate me e gli altri membri dello staff sul gruppo <strong>telegram</strong> della nostra community <a href="https://t.me/gentedilinux"><strong>/gentedilinux</strong></a>. </span></p> <p dir="ltr"><span>Ci becchiamo col prossimo episodio di <strong>#howtobash</strong>!</span></p></div> <span rel="schema:author" class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/user/107" typeof="schema:Person" property="schema:name" datatype="">leoroop</span></span> <span property="schema:dateCreated" content="2019-03-30T11:23:46+00:00" class="field field--name-created field--type-created field--label-hidden">Sab, 03/30/2019 - 12:23</span> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Etichette</div> <div class="field__items"> <div class="field__item"><a href="/term/howto" property="schema:about" hreflang="it">#howto</a></div> </div> </div> Sat, 30 Mar 2019 11:23:46 +0000 leoroop 557 at https://linuxhub.it 🔧 #howto – Utilizzo del comando 'mv' https://linuxhub.it/article/howto-utilizzo-del-comando-mv <span property="schema:name" class="field field--name-title field--type-string field--label-hidden">🔧 #howto – Utilizzo del comando &#039;mv&#039;</span> <div property="schema:text" class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Il comando "<strong>mv</strong>" è la soluzione integrata in Linux per spostare e rinominare file nel sistema. Il suo utilizzo è estremamente facile e non richiede istruzioni complicate.</p> <h2>Sintassi</h2> <p>La sintassi del comando è la seguente:</p> <pre> <code>mv path nuova_path</code></pre> <p>indifferentemente dall'uso che ne vogliamo fare (rinominare o spostare file), la sinstassi è sempre composta nel seguente modo:</p> <ul><li>locazione corrente</li> <li>nuova locazione</li> </ul><p>sempre in questo ordine.</p> <h2>Utilizzo del comando</h2> <p>Come dicevo, l'utilizzo di questo comando è estremamente semplice, sia per spostare che rinominare un file, un possibile esempio è il seguente:</p> <pre> <code>mv ~/Scaricati/file.tar.gz ~/il_mio_file.tar.gz</code></pre> <p>in questo caso stiamo spostando <strong>file.tar.gz</strong> dalla cartella Scaricati alla Home, rinominandolo in <strong>il_mio_file.tar.gz</strong>. Possiamo quindi eseguire due operazioni in una.</p> <h3>Sovrascrittura</h3> <p>Nel caso specifico in cui stiamo per spostare un file in una locazione dove ne esiste già uno con lo stesso nome, questo comando non ci informa della sovrascrittura e procede comunque (a meno di insufficienti permessi).</p> <p>Ad ovviare questo problema entra in gioco la flag <strong>-i</strong>, nell'esempio:</p> <pre> <code>mv -i ~/Scaricati/file.tar.gz ~/il_mio_file.tar.gz</code></pre> <p>l'output sarà:</p> <pre> <code>mv: overwrite 'il_mio_file.tar.gz'?</code></pre> <p>dove sarà necessario rispondere <strong>Y</strong> o <strong>N</strong> per sovrascrivere o annullare l'operazione.</p> <p>In alternativa è possibile usare la flag <strong>-n</strong> per evitare a priori di sovrascrivere un file già esistente, digitando quindi:</p> <pre> <code>mv -n ~/Scaricati/file.tar.gz ~/il_mio_file.tar.gz</code></pre> <p>nel caso <strong>~/il_mio_file.tar.gz</strong> esista già, non verrà sovrascritto.</p> <blockquote> <p>Importante è tenere a mente che questo comando non supporta più flag contemporaneamente, utilizzando quindi più opzioni come <strong>-i -n</strong> verrà presa in considerazione solo quest'ultima.</p> </blockquote> <h3>Aggiornamento file</h3> <p>Una delle flag meno conosciute di questo comando è <strong>-u</strong>, una opzione che permette di "aggiornare" un file con una versione più recente. Facciamo l'esempio pratico in cui abbiamo 2 file:</p> <ul><li>testo.txt in ~/Scaricati aggiornato alle 17:00 di oggi</li> <li>testo.txt in ~/Testi aggiornato alle 16:35 di oggi</li> </ul><p>utilizzando la flag <strong>-u</strong> come nell'esempio qui sotto:</p> <pre> <code>mv -u ~/Scaricati/testo.txt ~/Testi/testo.txt</code></pre> <p>il file in <strong>~/Testi</strong> verrà sovrascritto poichè la nuova versione rsiulta più recente, nel caso contrario non verrà modificato alcun file.</p> <h3>Backup dei file</h3> <p>Nel caso in cui vogliamo spostare un file in una locazione in cui ne è già presente uno con lo stesso nome, possiamo usare la flag <strong>-b</strong> per crearne un backup:</p> <pre> <code>mv -b ~/Scaricati/testo.txt ~/Testi/testo.txt</code></pre> <p>quindi nella locazione <strong>~/Testi</strong> troveremo i seguenti file:</p> <ul><li>testo.txt</li> <li>testo.txt~</li> </ul><p>dove <strong>testo.txt</strong><strong>~</strong> è la copia backup del file che abbiamo sovrascritto.</p> <h3>Stato delle operazioni</h3> <p>Utilizzando la flag <strong>-v</strong> possiamo controllare lo stato delle operazioni in esecuzione, digitando ad esempio:</p> <pre> <code>mv -v ~/Scaricati/testi.tar.gz ~/Archivi/testi.tar.gz</code></pre> <p>l'output sarà:</p> <pre> <code>'~/Scaricati/testi.tar.gz' -&gt; '~/Archivi/testi.tar.gz'</code></pre> <p>utile nel caso in cui vogliamo spostare più file da una locazione all'altra.</p> <p> </p> <p>Per dubbi e chiarimenti, utilizzate il nostro <a href="https://t.me/gentedilinux">gruppo Telegram</a>.</p> <p><em>Good *nix </em><strong><em>_Mirko</em></strong></p></div> <span rel="schema:author" class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/user/13" typeof="schema:Person" property="schema:name" datatype="">Mirko Brombin</span></span> <span property="schema:dateCreated" content="2019-03-23T15:12:19+00:00" class="field field--name-created field--type-created field--label-hidden">Sab, 03/23/2019 - 16:12</span> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Etichette</div> <div class="field__items"> <div class="field__item"><a href="/term/howto" property="schema:about" hreflang="it">#howto</a></div> </div> </div> Sat, 23 Mar 2019 15:12:19 +0000 Mirko Brombin 552 at https://linuxhub.it