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 |
Questa esercitazione è rilasciata sotto Creative Commons License.