Il terminale
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:
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:
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:
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 ateo
- .. di
Immagini
punta ateo
- .. di
mare
punta aImmagini
- 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):
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:
Il primo carattere indica il tipo di file:
-
per i file regolarid
per le directoryl
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 comandoinfo 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 comandols
.
Ad esempio:
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
el
; - 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.