Corso di Metodi Computazionali della Fisica

Alessandro Vicini (Università di Milano)


Introduzione a Unix 2


All'avvio del computer, il sistema operativo lancia una serie di processi che servono a gestire tutte le componenti hardware della macchina.

è inoltre possibile lanciare (o viene fatto automaticamente) un programma, la shell, che permette all'utente di interfacciarsi con il sistema operativo e di eseguire i propri programmi.

La shell si presenta come una finestra su cui compare il prompt della linea di comando.

I comandi che l'utente digita vengono elaborati ed eseguiti, come sottoprocessi della shell da cui sono stati lanciati.


La shell

La shell è un interprete di comandi, ma anche un linguaggio di programmazione.

Esistono diverse shell, che differiscono per il tipo di funzionalità di base che offrono: csh, tcsh, bash, zsh,...

La scelta della shell di avvio viene effettuata al momento della creazione dell'account: una scelta diffusa è la bash.



Ogni riga scritta sulla linea di comando viene interpretata dalla shell come un comando:

la shell cerca quindi un file eseguibile corrispondente al comando dato.

I files corrispondenti ai comandi elementari sono di solito racchiusi nella directory /usr/bin/ .

I files corrispondenti a applicazioni dell'utente si trovano in directories diverse, che dipendono dall'installazione del programma.

Per vedere il path completo del file corrispondente a un dato programma, si usa il comando which.


La shell è un processo che può essere lanciato dalla linea di comando.

Ogni shell ha una history che permette di risalire a tutti i comandi dati precedentemente (tipicamente con le freccette).

La shell ha una funzionalità che permette il completamento automatico di comandi e di nomi di files utilizzando il tasto TAB.

All'avvio, la shell cerca nella home directory un file, nel caso della bash si tratta di .bashrc, che contiene diverse informazioni con cui è possibile personalizzare il proprio account. Inoltre ci sono due files, .bash_login e .bash_logout, che vengono eseguiti in occasione del login e del logout dall'account. Per uscire da (terminare) una shell non di login si usa exit.


La bash cerca i files da eseguire corrispondenti ai comandi, oltre che nella directory corrente, nelle directories contenute nel PATH.

Il PATH è una delle variabili d'ambiente (environment) della shell.

Il valore di questa variabile può essere visualizzato con il comando echo $PATH.

Una variabile ha un dato nome, il valore di quella variabile si rappresenta/utilizza con $variabile.

Il PATH, come altre variabili, può essere inizializzato nel file .bashrc .

Il valore delle variabili d'ambiente può essere definito con istruzioni della forma variabile=valore, ma la nuova definizione va resa disponibile con il comando export variabile.


La bash permette di abbreviare molti comandi introducendo degli alias.


La bash utilizza le virgolette, semplici e doppie, per valutare espressioni.

Le virgolette semplici preservano il valore letterale dell'espressione racchiusa (p.es. echo '$SHELL'),

mentre quelle doppie preservano il valore letterale con l'eccezione dei caratteri $ , `, \ e inoltre ! (p.es. echo "$SHELL").




Comandi utili

Il comando echo stringa indirizza (stampa) stringa sullo schermo.

Questo comando risulta utile p.es. per visualizzare il valore delle variabili d'ambiente della shell.


Per visualizzare i processi appartenenti a una shell, si usa il comando ps.

Il comando ps -u username visualizza i processi dell'utente username.

Il comando ps aux visualizza tutti i processi (a) in formato user-oriented (u) indipendentemente dalla presenza di terminali aperti (x).


L'utilizzo delle risorse della macchina, cioè in primo luogo CPU e memoria RAM, suddivise per processo, viene mostrato dal comando top.

Ogni processo è caratterizzato da un numero identificativo (PID) assegnatogli dal sistema operativo.

L'utente può modificare lo svolgimento di un processo con vari comandi, utilizzando il PID come riferimento.

Il comando kill PID costringe il processo PID all'interruzione, chiudendo se possibile i files di output attualmente aperti.

Il comando kill -9 PID costringe il processo PID all'interruzione, indipendentemente dalla presenza di files di output aperti, che possono quindi andare perduti.

Il comando nice -n incremento nomeprogramma esegue il programma nomeprogramma con priorità ridotta rispetto a quella standard. La riduzione di "privilegio" di esecuzione è parametrizzata da un numero compreso tra 0 (priorità normale) e 20 (priorità minima).

Il comando renice -n incremento -p PID, ridefinisce il valore di priorità assegnato a un processo.



Quando si lancia un processo digitando un comando sulla linea di comando della shell, l'attività della shell rimane bloccata fino a quando il processo è completato e restituisce il controllo.

è possibile evitare questo fastidioso inconveniente mettendo in background il processo in questione, aggiungendo il carattere & al termine del comando, p.es. nomeprogramma & . Oppure si può stoppare l'esecuzione del programma con Ctrl-Z (compare la scritta Stopped sul terminale) e quindi si può digitare il comando bg che mette in background il processo stoppato.

è possibile riportare un processo in background sotto il controllo della shell, cioè in foreground, digitando il comando fg sulla shell da cui è stato lanciato.



è possibile digitare più comandi sulla stessa riga, separati da ; . P.es. ls ; cd .

è possibile l'esecuzione condizionale di sequenze di comandi.

P.es. ls && cd (esegue il secondo solo se il primo ha avuto esito positivo), oppure ls || cd (esegue il secondo solo se il primo ha fallito).



Per certi problemi di settaggio della linea di comando, il comando stty può essere utile: p.es. stty erase CHAR assegna al carattere CHAR la funzione di cancellare il carattere precedente sulla linea. In questo esempio il backspace è rappresentato da ^H.



Editor di testo

L'editor vi è sempre presente in ogni installazione di Unix. Si tratta di un editor testuale che permette di effettuare tutte le operazioni di base di scrittura di un testo. Una pagina di introduzione, corredata di esempi, si trova per esempio qui.


L'editor emacs permette, oltre alla semplice scrittura ed elaborazione di testo,

la gestione di comandi e di programmi tipici della shell .


Alcune regole fondamentali:

1) quando si lavora in modalità grafica, è buona norma aprire una sola finestra e aprire tutti i files in quella finestra.

Emacs gestisce i vari files con buffer, tra i quali si può passare con il comando Ctrl-x b, inserendo quindi sulla riga di comando di emacs il nome del file a cui si vuole passare.

2) sebbene in modalità grafica sia possibile eseguire numerosi comandi di base con il mouse e con i menù a tendina, è basilare imparare a utilizzare la tastiera.

Ci sono diverse elementari combinazioni di tasti che permettono di svolgere comodamente la maggior parte delle funzioni di base;

queste combinazioni di tasti fanno comparire il comando corrispondente sulla parte bassa della finestra di emacs (mini-buffer).

Nel mini-buffer funziona il TAB per il completamento dei nomi.

La sintassi può essere colorata. è utile avere l'evidenziatura delle coppie di parentesi aperte/chiuse.


Ctrl-x Ctrl-f per aprire un file (bisogna aggiungere il nome del file)

Ctrl-x Ctrl-s per salvare il file corrente

Ctrl-x Ctrl-c per chiudere la sessione di emacs; se ci sono files con modifiche non salvate, viene chiesta conferma.

Ctrl-x Ctrl-i per inserire un file (bisogna aggiungere il nome del file)


Ctrl-g serve per uscire dal mini-buffer e tornare al testo

Ctrl-_ serve per annullare l'ultima operazione (undo)

Ctrl- space attiva la selezione di una porzione di testo (muovendosi con le frecce si evidenzia il testo selezionato)

Ctrl-w taglia il testo selezionato

ESC-w copia il testo selezionato

Ctrl-y copia l'ultimo testo copiato/tagliato

Ctrl-k taglia dalla posizione del cursore fino alla fine della riga

Ctrl-d taglia il prossimo carattere davanti al cursore

Ctrl-x 2 apre 2 buffers nella stessa finestra (copia e incolla funziona da un buffer all'altro)

Ctrl-x 1 ripristina un solo buffer (quello in cui ci si trova con il cursore)


Ctrl-s invoca il comando per cercare una stringa (da inserire nel mini-buffer)

dopo aver inserito una stringa, premere ripetutamente Ctrl-s sposta il cursore alla prossima occorrenza della stringa

se si schiaccia 2 volte Ctrl-s senza inserire stringhe, viene cercata l'ultima stringa (rimasta nel buffer)


Molti comandi sono invocati con una combinazione di tasti che inizia con ESC.

ESC-< pone il cursore all'inizio del file

ESC-> pone il cursore alla fine del file

ESC-x cmd >invoca il comando cmd; dopo ESC-x è possibile usare TAB per listare p.es. tutti i comandi che iniziano con una lettera

ESC-x recover-file permette di utilizzare il file di auto-saving per recuperare le informazioni non salvate al momento del crash della sessione di emacs

ESC-x query-replace invoca il comando per cercare una stringa e sostituirla con una nuova

per sostituire tutte le occorrenze di una stringa, digitare !

ESC-x shell fa partire una shell nel buffer di emacs; la shell può essere editata secondo i criteri di emacs

ESC-x fortran-mode carica la macro che permette una visualizzazione comoda dei programmi in fortran, C, C++

ESC-x c-mode

ESC-x c++-mode