La maggioranza dei processi iniziati da comandi UNIX scrive sullo standard output (cioe' scrive sul terminale o sulla finestra-terminale)e prende l' input dallo standard input (cioe' leggono dalla tastiera ). Esiste anche lo standard error su cui i processi scrivono i messaggi di errore e che, per default, corrisponde, come lo standard output, allo schermo.
Abbiamo gia' visto un uso del comando cat per scrivere su schermo il contenuto di un file.
Diamo adesso cat senza specificare alcun file:dfisa2.ts.infn.it> catScriviamo adesso qualche parola da tastiera premendo il tasto [Return] .Infine tenete il tasto [Ctrl] premuto e digitate d (indicato in breve come ^D) Per terminare l'input.
Cosa e' successo?
Se si da il comando cat senza secificare un file, viene letto lo standard input (la tastiera), finche' non viene ricevuto l' "end of file" (^D), copiandolo sullo standard output (lo schermo).In UNIX possiamo ridirigere sia l' input sia l' output di un comando.
Useremo il simbolo > per ridirigere l' output di un comando. Per esempio per creare un file di nome list1 contenente una lista di frutta, dare:dfisa2.ts.infn.it> cat > list1Quindi digitare alcuni nomi di frutti. Premere [Return] dopo ogni nome.pera banana mela ^D [control d per terminare]Il simbolo > ridirige l'output di cat, che normalmente andrebbe sullo schermo, in n file di nome list1P leggere il contenuto del file dare:
dfisa2.ts.infn.it> cat list1Esercizio
Usando il precedente metodo, creare ultro file di nome list2 contenente la seguente frutta: arancia, prugna, mango, uva. Leggere il contenuto di list2La forma >> appende lo standard output ad un file. Per aggiungere altri frutti al file list1, dare
dfisa2.ts.infn.it> cat >> list1TQuindi inserire i nomi di altri frutti:pesca uva ananas ^D [control d p finire con l' input]Per leggere il contenuto del file dare:dfisa2.ts.infn.it> cat list1Psiamo usare il comando cat per unire (concatenare) list1 e list2 i un nuovo file di nome biglist. Dare
dfisa2.ts.infn.it> cat list1 list2 > biglistIl contenuto dei files list1 e list2 vene letto e l' output di questa lettura consecutiva viene ridiretto sul file biglist
Per leggere questa file :
dfisa2.ts.infn.it> cat biglist
Il simbolo < ridirige l' input di un comando.Il comando sort ordina una lista alfabeticamente o numericamente. Dare
dfisa2.ts.infn.it> sortQuindi immettere nomi di ortaggi. Premere [Return] dopo ogni nome.
potato carrot onion ^D [control d p terminare l' input]L' output sara':carrot onion potatoUsando < ysi puo' ridirigere l' input in modo che sia letto da un file invece che da tastiera. Per esempio per ordinare la lista della frutta:
dfisa2.ts.infn.it> sort < biglistee la lista ordinata sara' visualizzata sullo schermo.
Per scrivere la lista ordinata su un file:dfisa2.ts.infn.it> sort < biglist > slistSi puo' usare cat er leggere il contenuto del file slist
Per vedere chi usa il sistema, si puo' usare il comandodfisa2.ts.infn.it> whoUn metodo per ottenere una lista ordinata dei nomi e',dfisa2.ts.infn.it> who > names dfisa2.ts.infn.it> sort < namesQuesto pero' e' un po' lento, occorre ricordarsi di cancellare il file temporaneo (names) quando si e' finito. Quello che logicamente si vuol fare e' di connettere in qualche modo l' output di who direttamente all' input del comando sort. questo e' proprio quello che le pipes implementano. Una pipe viene indicata dal simbolo |Per esempio, dando il comando
dfisa2.ts.infn.it> who | sortsi otterra' lo stesso risultato di prima ma piu' semplicemente e direttamente.Per trovare quanti utenti sono collegati, si puo' dare:
dfisa2.ts.infn.it> who | wc -lEsercizio
Usando i comandi ls -a ,wc ed una pipe determinare quanti files sono presenti nella directory corrente.
command > file ridirige lo standard output su file command >> file appende lo standard output a file command < file ridirige lo standard input da file command1 | command2 crea una pipe tra l' output di command1 all' input di command2 cat file1 file2 > file0 concatena file1 e file2 in file0 sort ordina dati in input who elenca gli utenti collegati al sistema a2ps textfile psfile trasforma un file di testo in un file postscript lpr -Pprinter psfile sampa un file postscript sulla stampante di nome printer