Linux, come tutti i sistemi Unix, mette a disposizione degli utenti un potente terminale. La maggior parte delle operazioni può essere svolta direttamente attraverso il terminale.

Prompt

Una volta aperto un terminale possiamo iniziare ad esercitarci con alcuni comandi di base. Normalmente ci troveremo di fronte a un prompt che attende i nostri comandi, come mostrato nella seguente figura:

Terminale

Nel prompt possiamo leggere le seguenti informazioni:

  • nome utente (teo)
  • host di lavoro (lab01)
  • directory corrente (~/ che rappresenta la home dell’utente)

Dopo il carattere $ possiamo digitare un comando e premendo il tasto invio richiedere la sua esecuzione.

Directory

Ogni utente ha una propria home directory localizzabile in /u/nomeutente/. Una directory può essere immaginata come un contenitore dentro il quale potremo salvare i nostri file (programmi, documenti, immagini, ecc.) e altri directory in modo da poter organizzare logicamente il nostro ambiente di lavoro.

Dopo aver effettuato il login l’utente si trova all’interno della propria home directory. All’interno di questa area è possibile effettuare una delle seguenti azioni sulle directory:

  • creare una nuova directory
  • eliminare una directory
  • cambiare directory di lavoro
  • vedere il contenuto di una directory

Creare una directory

Per creare una directory è necessario utilizzare il comando mkdir seguito dal nome della directory. Ad esempio se volessimo creare la directory Immagini, il comando da digitare è il seguente:

mkdir Immagini

In caso esista già una directory Immagini all’interno della directory corrente verrà stampato a video un messaggio di errore.

Eliminare una directory

Per eliminare una directory possiamo usare il comando rmdir seguito dal nome della directory da eliminare. Il comando rmdir elimina solo directory vuote. Prima di utilizzarlo è quindi necessario eliminare il contenuto di quest’ultima.

Cambiare directory

La struttura delle directory può essere vista come un albero la cui radice / si chiama root. Unix mette a disposizione dell’utente il comando cd (acronimo di change directory) per spostarsi attraverso questo albero. Nella seguente figura un esempio di albero delle directory:

Terminale

Il comando cd seguito dal nome di una directory cambia la directory di lavoro corrente con quella specificata. Supponiamo che la nostra home directory abbia una struttura come quella mostrata nella seguente figura:

Terminale

Per entrare nell directory Musica dovremo digitare il seguente comando:

cd Musica

A questo punto non saremo più nella nostra home directory (/u/teo nell’esempio) ma all’interno della directory Musica (/u/teo/Musica).

Per ritornare alla directory precedente dovremo digitare il comando:

cd ..

Questo perché .. è una directory speciale, che punta sempre alla directory di livello superiore. Facendo riferimento all’esempio della figura, possiamo dire che:

  • .. di Musica punta a teo
  • .. di Immagini punta a teo
  • .. di mare punta a Immagini
  • e così via…

Vedere il contenuto di una directory

Per vedere il contenuto di una directory si utilizza il comando ls seguito da 0 o più parametri, a seconda di quanti dettagli si desiderano vedere. Il modo più semplice di visualizzazione prevede l’utilizzo del comando senza nessun paramtro. Posizioniamoci quindi in una directory a piacere e digitiamo il comando come mostrato:

ls

Il risultato che otterremo sarà simile a quanto mostrato nella figura seguente, una lista di nomi (file e/o directory):

Terminale

Per poter ottenere più informazioni sui file contenuti in una directory, è possibile usare il comando ls con alcune opzioni. Le più comuni solo elencate di seguito:

  • -l elenca i file con un maggior numero di informazioni
  • -a visualizza i file e/o directory nascoste (il cui nome inizia con il carattere .)
  • --color visualizza i file con diversi colori a seconda del tipo.

Rinominare una directory

Per rinominare una directory si utilizza il comando mv specificando la directory da rinominare e il nuovo nome. Ad esempio:

mv Images Immagini

rinomina la directory Images in Immagini.

Permessi

In Unix, su file e directory è possibile settare una serie di permessi (lettura, scrittura ed esecuzione) relativi al proprietario del file/directory, ai membri dello stesso gruppo ed al resto del mondo.

Per modificare i permessi a file/directory si utilizza il comando chmod.

Il permessi su file/directory sono definiti come descritto dalla seguente figura:

Terminale

Il primo carattere indica il tipo di file:

  • - per i file regolari
  • d per le directory
  • l per i link simbolici

Altri tipi di file sono indicati dalle lettere b, c, s, p; non li descriviamo in questa breve introduzione, perché il loro utilizzo è limitato a casi non comuni per l’utente del nostro laboratorio. Ma è possibile vedere l’elenco completo con il comando info coreutils ls what (la pagina è lunga, questa informazione è grossomodo a metà pagina).

I 9 caratteri successivi, che vengono divisi in 3 gruppi di 3 caratteri ognuno, definiscono i permessi.

Partendo da sinistra verso destra abbiamo:

  • il gruppo che definisce i permessi per il proprietario del file,
  • il gruppo che definisce i permessi per il gruppo (per gli studenti il gruppo è users),
  • ed infine il gruppo che definisce i permessi per tutti gli altri utenti (né il proprietario, né i membri del gruppo).

Ogni gruppo di tre caratteri definisce i permessi nello stesso modo, utilizzando una lettera per il permesso, o un trattino (-) nel caso in cui il permesso non sia concesso.

Il significato dei singoli caratteri, nel loro ordine, è il seguente:

  • r : read (lettura)
  • w : write (scrittura)
  • x : execute (esecuzione, attraversamento per le directory)

Esistono poi altri tipi di permessi, s, S, t, T, che vengono utilizzati per i programmi con set-user-ID o set-group-ID, e per visualizzare lo sticky bit. Anche queste informazioni sono visibili nella pagina info del comando ls.

Ad esempio:

Terminale

Dalle linee visualizzate possiamo estrarre le seguenti informazioni:

  • la prima linea è relativa ad un file di nome unFile.txt
  • i permessi associati sono i seguenti:
    • lettura e scrittura (rw) per il proprietario (utente teo),
    • lettura (r) per chi appartiene al gruppo teo,
    • lettura (r) per tutti gli altri
  • l’ultimo accesso al file risale al 7 ottobre alle ore 9:59

Per la directory invece possiamo dire:

  • si tratta di una directory perché il primo carattere sulla sinistra è una d
  • i permessi associati sono i seguenti:
    • lettura, scrittura ed attraversamento (rwx) per il proprietario (l’utente teo),
    • lettura (r) e attraversamente (x) per gli utenti del gruppo teo,
    • lettura (r) e attraversamento (x) per tutti gli altri
  • l’utima modifica è avvenuta alle 9:58 del 7 ottobre

Variabili di ambiente

In Unix (ed anche Linux) molte caratteristiche sono definita dalle variabili di ambiente. Queste variabili possono contenere diversi tipi di informazioni e sono utilizzate da diverse applicazioni per accedere ad informazioni comuni.

Alcuni esempi di informazioni comuni a più applicazioni sono:

  • username dell’utente collegato al terminale
  • formato della data e ora
  • directory in cui cercare programmi e/o librerie
  • formato del prompt
  • ecc.

Per ottenere una lista delle variabili d’ambiente definite si utilizza il comando env. Un esempio di output di env potrebbe essere qualcosa di questo genere:

HOSTNAME=master.edu-al.unipmn.it
TERM=xterm-color
SHELL=/bin/bash
HISTSIZE=1000
http_proxy=http://proxy2.edu-al.unipmn.it:3128
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:
INPUTRC=/etc/inputrc
PWD=/usr/share/themes/Default
LANG=en_US.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
LESSOPEN=|/usr/bin/lesspipe.sh %s
G_BROKEN_FILENAMES=1
_=/bin/env
OLDPWD=/usr/share/themes

Per cambiare (o settare) il valore di una variabile d’ambiente si usa il comando export come segue:

export nomevariabile=valore

Ad esempio, per settare il valore della variabile PAGER si può utilizzare il seguente comando:

export PAGER=less

(la variabile PAGER definisce il comando da lanciare quando la dimensione dell’output potrebbe superare la dimensione del terminale).

Il comando env stampa tutte le variabili. Per verificare il valore di una singola variabile si può invece utilizzare il comando echo, come segue:

echo $nome

Ad esempio, per verificare il valore della variabile PAGER:

echo $PAGER

Configurazione della shell

Al momento dell’aperture di un terminale, viene eseguita al suo interno una shell (in laboratorio si tratta della bash). La shell è un programma che permette all’utente di inserire dei comandi ed eseguire programmi. Quando la shell viene caricata, prima di proporre il prompt all’utente, legge il contenuto del file .bashrc (file nascosto) ed esegue i comandi spacificati. Per personalizzare la shell è quindi necessario editare questo file.

Ecco un esempio di un semplice file .bashrc:

# .bashrc

# User specific aliases and functions

alias ll='ls -l'
alias l='ls -al'

# Source global definition
if [ -f /etc/bashrc ]; then
      . /etc/bashrc
fi

Il sigificato di questo codice è il seguente:

  • le linee che cominciamo con # sono commenti;
  • il comando alias permette di definire un nuovo comando a partire da quelli esistenti. In questo caso definiamo due comandi (‘ls -l’ e ‘ls -al’) con due stringhe più pratiche e veloci da digitare, ll e l;
  • le ultime righe caricano da un file di sistema (se esiste) le impostazioni globali.

Personalizzare il prompt

Il prompt dei comandi può essere personalizzato modificando il valore della variabile d’ambiente PS1. Le modifiche le salveremo nel file .bashrc, in modo che siano attive per tutte le prossime esecuzioni della shell. La sintassi da utilizzare è la stessa vista in precedenza.

Basta dunque inserire le seguenti linee di codice nel file .bashrc:

PS1='[\u@\h \w]$ '
export PS1

Per rendere subito effettive le modifiche, bisogna eseguire il file .bashrc, digitando dal prompt dei comandi:

. .bashrc

Nota il punto all’inizio, seguito da uno spazio, e poi dal nome del file da eseguire nel contesto della shell corrente.

È possibile inserire diversi tipi di informazione nel prompt dei comandi. I più utilizzati sono:

  • nome utente
  • directory attuale
  • contatore dei comandi
  • host sul quale si è collegati

Per una lista completa si rimanda l’utente alla pagina di manuale della bash.

Esecuzione di applicazioni

Da terminale si possono eseguire tutte le applicazioni installate sul sistema. Dall’interno dell’ambiente grafico è possibile eseguire sia applicazioni grafiche che testuali.

Per eseguire un applicazione è sufficiente digitarne il nome dal prompt dei comandi (supponendo che l’applicazione sia nel PATH). Ad esempio:

firefox

In questo caso però mentre l’applicazione è in esecuzione, il terminale rimarrà inutilizzabile. In questo caso si dice che l’applicazione è stata eseguita in foreground (primo piano), e la shell attenderà fino alla fine della sua esecuzione. Ciò renderà il terminale inutilizzabile per eseguire altri programmi.

È possibile eseguire un operazione in background in modo da lasciare immediatamente il terminale disponibile per l’esecuzione di ulteriori comandi.

Per eseguire un applicazione in background è sufficient aggiungere un carattere & alla fine della linea di comando, come mostrato nel riquadro seguente:

firefox &

È possibile far passare un applicazione da foreground a background utilizzando la combinazione di tasti CTRL-Z, che ferma l’esecuzione, seguita dal comando bg.

Se non si lancia il comando bg, l’applicazione apparirà come congelata. Le applicazioni grafiche ferme potrebbero apparire come rettangoli vuoti sullo schermo.

È possibile riportare in foreground un applicazione con il comando fg. Nel caso in cui ci siano più applicazioni in background, verrà riportata in primo piano la prima.

Se le applicazioni in background hanno necessità del terminale (ad esempio per leggere qualcosa da tastiera), il sistema le terrà ferme finché non verranno riportate in primo piano.