Il Terminale di Linux

Ancora oggi, nonostante la frenetica evoluzione alla quale stanno andando incontro le interfacce grafiche, il Terminale, indipendentemente dal sistema operativo che stiamo utilizzando, è uno strumento molto importante.

Saperlo utilizzare spesso semplifica la nostra vita e accorcia i tempi d’attesa. Ci sono casi in cui non è possibile utilizzare un’interfaccia grafica ne’ i servizi di desktop remoto, qui saper utilizzare un terminale per inviare dei comandi tramite SSH diventa fondamentale.

Perché questa guida?

Tutti gli amministratori ricorrono spesso alla cronologia dei comandi del terminale. Quante volte passate una manciata di secondi premendo la freccia verso l’alto sulla vostra tastiera sperando di trovare il comando che effettui l’operazione che abbiamo in mente?

Spesso questa utilissima funzione non è sufficiente a colmare i nostri vuoti di memoria. Nel corso degli anni mi sono appuntato le funzioni più importanti e necessarie allo svolgimento delle mie funzioni di tecnico IT.

In questo articolo parlerò dei comandi più frequenti utilizzati su terminali Linux. Quasi tutti questi comandi possono essere utilizzati anche nel terminale di MacOS di Apple.

Nozioni di base

Una piccola nota prima di procedere con i comandi di base: la cartella di lavoro.

Per tutti i comandi spiegati, quando mi trovo a lavorare in una cartella posso ricorrere a percorsi relativi oppure assoluti.

Se devo agire su un file nella stessa cartella attualmente visualizzata dal mio terminale, posso omettere tutto il percorso e specificare solo il nome del file. Il terminale eseguirà in automatico il comando nel percorso relativo. Immaginiamo di trovarci nella cartella /home/teodoro e voler creare un file prova.txt.

teodoro@teodoro-laptop:/opt$ touch prova.txt

Se invece mi trovo nella home dell’utente o in altre cartelle diverse da /opt posso usare il percorso assoluto per creare il file:

teodoro@teodoro-laptop:~$ touch /opt/prova.txt

I comandi più frequenti

Suddivisi per categoria, vi consiglio di memorizzare questi comandi.

Gestione dei file

Importante perché spesso ci troveremo a dover gestire file per la quale in nostro utente di base non detiene i permessi per modificarlo. In questo caso conoscere bene quali comandi utilizzare sul terminale è il metodo meno ambiguo.

In alternativa una soluzione molto più grezza potrebbe essere lanciare il nostro file manager da terminale con permessi di amministratore. Su Ubuntu:

sudo nautilus

Ma non mi sento di suggerire questo modo di lavorare, quindi andiamo avanti.

Creare un file

Spesso mi è capitato di dover creare dei file di configurazione lavorando su un sistema remoto, molti editor accettano come parametro un file che non esiste e lo creano nel momento del salvataggio. In alternativa ricorro spesso a:

touch nomefile.txt

Questo comando mi creerà un file con estensione .txt .

Copiare un file

Per esempio nella configurazione dei VirtualHosts Apache, ricorro spesso alla copia di un file d’origine in un secondo con un nome diverso. Mi troverò così il contenuto del file corretto senza dover ricercare tutti i parametri ogni volta. Il file d’origine resterà invariato

cp /percorso/origine/file_originale.est /percorso/destinazione/file_copiato.est

Se non intendo rinominare il file posso specificare solo la cartella di destinazione come secondo parametro, ricordatevi lo / dopo il nome della cartella:

cp /percorso/origine/file_originale.est /percorso/destinazione/

Spostare un file

Lo spostamento di un file equivale al comando taglia delle nostre interfacce grafiche. Ci troveremo quindi vedere scomparire il file_originale.est e lo vedremo comparire nel nuovo percorso e con il nuovo nome file_spostato.est.

mv /percorso/origine/file_originale.est /percorso/destinazione/file_copiato.est

Se non intendo rinominare il file posso specificare solo la cartella di destinazione come secondo parametro, ricordatevi lo / dopo il nome della cartella:

mv /percorso/origine/file_originale.est /percorso/destinazione/

Ricorro spesso a questo comando sui vecchi Mac, dove il Finder non supporta il comando taglia.

Rinominare un file

Lo stesso comando appena spiegato può essere utilizzato per rinominare un file:

mv /percorso/file_originale.est /percorso/file_copiato.est

Eliminare un file

Per eliminare un file il comando è rm. Basta specificare come parametro di rm il file di destinazione.

rm /percorso/nome_file.est

Gestione delle cartelle

Nella gestione delle cartelle, alcuni comandi sono comuni tra file e cartelle, altri sono specifici. Vediamo come funzionano.

Cambiare cartella di lavoro

Il comando cd: Cambia Cartella o Change Directory, serve per muoverci all’interno dell’albero dei nostri file e cartelle.

Se vogliamo spostarci nella cartella /percorso/destinazione basterà digitare cd e il percorso come parametro:

cd /percorso/destinazione

Creare una cartella

Il comando mkdir seguito dal nome cartella creerà una nuova cartella nella posizione corrente. Posso sempre specificare il percorso assoluto come nel seguente esempio:

mkdir /percorso/cartella

Creerà la cartella cartella, nel percorso /percorso.

Copiare una cartella

Come per i file, cp ci viene in aiuto ma dobbiamo ricordarci di aggiungere il parametro -r prima del nome della cartella.

cp -r /percorso/cartella_origine /percorso/cartella_copiata

Se non intendo rinominare la cartella di destinazione posso specificare solo la cartella genitore come secondo parametro, ricordatevi lo / dopo il nome della cartella genitore:

cp -r /percorso/origine/cartella_originale /percorso/destinazione/

Con questo comando andrò a creare una cartella cartella_originale nel percorso /percorso/destinazione/ con lo stesso nome e contenuto della cartella d’origine /percorso/origine/cartella_originale.

Spostare una cartella

Il comando mv per le cartelle non necessita di alcun parametro aggiuntivo rispetto a quello utilizzato per i file.

mv /percorso/origine/cartella_originale /percorso/destinazione/cartella_spostata

Oppure, se non si vuole rinominare la cartella di destinazione:

mv /percorso/origine/cartella_originale /percorso/destinazione/

Creando così la cartella /percorso/destinazione/cartella_originale eliminando quella originaria.

Eliminare una cartella

Il comando per la rimozione di una cartella va scritto con il parametro -r: rm -r

rm -r /percorso/origine/cartella_da_rimuovere

Eseguire un applicativo

Per eseguire un applicativo o uno script ci sono due metodi principali:

source

source /path/to/executable

Source è stato il primo metodo implementato nei sistemi Unix per eseguire script e applicativi. La sua sintassi e molto semplice:

  • source nome del comandto
  • /path/to/executable posizione del file da eseguire

. (punto)

Visto che tutti noi programmatori siamo pigri per natura, con il tempo source è stato abbreviato con il comando “.”. Si utilizza seguendo la stessa sintassi di source:

. /path/to/executable
  • . nome del comandto
  • /path/to/executable posizione del file da eseguire

Esempio:

In questo esempio creo un file test.sh con dentro solo una riga: echo “Ciao Teodoro!”. Una volta creato lo eseguo con entrambi i metodi visti in precedenza.

Gestire i permessi

Linux ha offre una gestione chiara e gerarchica di permessi di accesso a file e cartelle. È quindi importante comprenderli e saperli gestire al meglio. Se non li conoscete c’è una guida esaustiva su linux.com.

Assegnare permessi

Il comando chmod ci permette di gestire i permessi di lettura (r), scrittura (w) ed esecuzione (x) sia su file e che su cartelle. Immaginiamo di lavorare sul file /percorso/file.txt

Aggiungere permesso lettura
chmod +r /percorso/file.txt
Rimuovere permesso lettura
chmod -r /percorso/file.txt
Aggiungere permesso scrittura
chmod +w /percorso/file.txt
Rimuovere permesso scrittura
chmod -w /percorso/file.txt
Aggiungere permesso esecuzione
chmod +x /percorso/file.txt
Rimuovere permesso esecuzione
chmod -x /percorso/file.txt
Combinare permessi
chmod +rw -x /percorso/file.txt
Applicare permesso a tutti i sotto-elementi di una cartella

Per applicare il cambio permessi a tutti i file e le cartelle all’interno di una specifica cartella, basta applicare il parametro -R ai quelli appena spiegati:

chmod +r -R /percorso
Permessi in forma numerica

I permessi possono essere assegnati in maniera ancora più precisa utilizzando i numeri con il seguente significato:

  • 0 = — (rimuove tutti i permessi)
  • 1 = –x
  • 2 = -w-
  • 3 = -wx
  • 4 = r-
  • 5 = r-x
  • 6 = rw-
  • 7 = rwx

I permessi numerici si assegnano nel seguente modo:

chmod 764 nomecartella

o nella forma ricorsiva:

chmod 764 -R nomecartella

I numeri in ordine rappresentano i diversi livelli di autorizzazione per proprietario, gruppo e altri utenti: ugo

  • u – Proprietario
  • g – Gruppo
  • o – Altri utenti

L’esempio riportato quindi assegna i seguenti permessi:

  • 7 al proprietario (rwx)
  • 6 al gruppo (rw)
  • 4 agli altri utenti (r)

Assegnare proprietari

Il comando chown ci permette di assergnare il proprietario ad un file o una cartella.

chown nomeutente:nomegruppo /home/name/directoryname

Se vogliamo assegare il mermesso alla cartella e a tutto il suo contenuto aggiungiamo il parametro -R:

chown -R nomeutente:nomegruppo /home/name/directoryname

Elevare i nostri permessi

Spesso, per motivi di sicurezza, ci ritroveremo a dover lanciare comandi con permessi elevati rispetto all’utente che utilizziamo normalmente.

A seconda del sistema operativo utilizzato il comando può essere sudo oppure su.

Se siamo affezionati al comando sudo, quando questo non è disponibile, è possibile installarlo.

sudo

La comodità del comando sudo sta nel fatto che nella stessa shell posso eseguire diversi comandi con diversi privilegi a seconda che io scriva sudo prima del comando o no.

teodoro@computer: sudo comando
su

Una volta elevati i miei permessi con il comando su –, dovrò digitare exit per poter tornare ai miei permessi originari.

teodoro@computer: su -
Password: (digita qui la tua password di root)
root@computer: comandi da eseguire
root@computer: exit
teodoro@computer: 

Applicativi utili

Esiste tutta una serie di applicativi che è necessario saper utilizzare per poter svolgere le nostre funzioni giornaliere.

sudo

Ecco, sudo è un’applicazione ed è un’opzione su molte distribuzioni. Per esempio su Debian il comando sudo non è installato di default. Se vi siete persi il paragrafo in cui ne parlo, vi rimando su: Elevare i nostri permessi.

apt

Gestore di applicazioni disponibile sia su Linux che su Mac. Permette di installare applicazioni e servizi necessari allo sviluppo dei nostri applicativi e alla configurazione dei nostri sistemi.

vi

Editor testuale utilizzabile da riga di comando. Fondamentale quando lavoriamo da remoto su file e configurazioni.

ssh

Nota anche come Secure Shell, serve per gestire da remoto un sistema. Permette in pratica di digitare dei comandi sulla propria finestra SSH e far si che questi comandi vengano eseguiti su un sistema remoto.