3.1 Redirezione

La maggior parte dei processi avviati da comandi Linux scrivono sullo standard output (cioè a video, sul terminale), e molti prendono in ingresso lo standard input (cioè leggono da tastiera).

Esiste anche lo standard error, dove i processi scrivono i loro messaggi d’errore, e che normalmente, coincide nuovamente con il video, il terminale.

Abbiamo già visto l’uso del comando cat per visualizzare il contenuto di un file a video.

Ora digita cat senza specificare nessun file da leggere

cat

Quindi scrivi qualche parola e premi il tasto [Invio].
Alla fine, per terminare l’input tenendo premuto [CTRL], premi il tasto [d] (questa combinazione si può abbreviare con ^D).
Cos’è successo?
Se esegui il comando cat senza specificare il file da leggere, esso legge dallo standard input (la tastiera), e quando riceve un ‘fine file’ (^D), copia il suo contenuto sullo standard output (lo schermo).

In Linux, possiamo redirigere sia l’input che l’output dei comandi.

 

3.2 Redirigere l’output

Possiamo usare il simbolo > per redirigere l’output di un comando.

Per esempio, per creare un file chiamato lista1 contenente una lista di frutti, digita

cat > lista1

Quindi scrivi i nomi di alcuni frutti. Premi [Invio] dopo ciascun nome.

    pera
    banana
    mela
    ^d (questo significa [CTRL – d])

Quello che succede è che il comando cat legge lo standard input e il simbolo > redirige l’output, che normalmente finisce sullo schermo, in un file chiamato lista1

Per leggere il contenuto del file, digita

cat lista1

Esercizio 3a

Usando i comandi precedenti, crea un altro file chiamandolo lista2 contenente i seguenti frutti: arancia, prugna, mango e pompelmo. Leggi il contenuto di lista2.

3.2.1 Accodare a un file

L’espressione >> aggiunge lo standard output in coda a un file. Quindi per aggiungere altri elementi al file lista1, digita

cat >> lista1

Quindi scrivi i nomi di altri frutti

pesca
uva
arancia
^d
([CTRL – d] per terminare)

Per leggere i contenuti del file, digita

cat lista 1

Dovresti avere ora due file. Uno contiene sei frutti, l’altro ne contiene quattro.

Useremo ora il comando cat per unire (concatenare) lista1 e lista2 in un nuovo file chiamato listagrande. Digita

cat lista1 lista2 > listagrande

Ciò che viene fatto è leggere, in sequenza, il contenuto di lista1 e lista2, e poi scriverlo nel file listagrande

Per leggere il contenuto del nuovo file, digita

cat listagrande

3.3 Redirigere l’input

Utilizziamo il simbolo < per redirigere l’input di un comando.

Il comando sort ordina alfabeticamente o numericamente una lista. Digita

sort

Quindi scrivi i nomi di alcuni animali. Premi [Invio] dopo ognuno.

    gatto

    uccello

    cane

    scimmia
    ^d ([CTRL – d] per terminare)

L’output sarà

    cane

    gatto

    scimmia

    uccello

Usando < puoi redigere l’input che viene da un file piuttosto che dalla tastiera. Per esempio, per ordinare la lista di frutti, scrivi

sort < listagrande

e la lista ordinata sarà stampata su schermo.

Per scrivere la lista ordinata su un file, digita

sort < listagrande > lista.ordinata

Usa cat per leggere il contenuto del file lista.ordinata

3.4 La Pipe

Per vedere chi è connesso al tuo sistema, digita

who

Vedrai così tutte le console (anche quelle testuali) in cui
attualmente è autenticato un utente. Un modo per ottenere una lista
ordinata di nomi è:

who > nomi
sort < nomi

Questo è un po’ lento e devi ricordarti di eliminare il file temporaneo chiamato nomi quando hai finito. Quello che realmente vorresti è collegare l’output del comando who direttamente all’input del comando sort. Questo è esattamente quello che fanno le pipe. Il simbolo per una pipe è la barra verticale | ([SHIFT – \] se la tastiera viene vista come italiana)

Per esempio, digitando

who | sort

mostrerà lo stesso output precedente, ma più rapidamente e in modo più pulito.

Per scoprire quanti utenti sono attualmente connessi al tuo computer, digita

who | wc -l

Esercizio 3b

Usando le pipe, visualizzare tutte le righe di lista1 e lista2 che contengono la lettera ‘p’ e ordinare il risultato.

Sommario

Comando Significato
comando > file redirige lo standard input in un file
comando >> file aggiunge lo standard input in coda a un file
comando < file redirige lo standard input da un file
comando1 | comando2 incanale l’output del comando1 nell’input del comando2
cat file1 file2 > file3 concatena al file1 il file2 e lo salva in file3
sort ordina dei dati
who elenca gli utenti attualmente connessi al sistema
whitone@netstudent.polito.it, © 25 febbraio 2009
romen@netstudent.polito.it,© 9 novembre 2007
m.stonebank@surrey.ac.uk, © 9 ottobre 2000

Questa esercitazione è rilasciata sotto Creative Commons License.