• Non ci sono risultati.

Semplici redirezioni

Nel documento Introduzione a Linux (pagine 122-125)

Capitolo 5.  Redirezione dell'I/O

5.1.  Semplici redirezioni

5.1.1. Cosa sono lo standard input e lo standard output?

Molti comandi Linux leggono l'input, come file o altro attributo del comando, e scrivono l'output. 

Di norma l'input viene dato da tastiera e l'output appare sul vostro schermo. La tastiera costituisce il 

vostro dispositivo di standard input (stdin) [ingresso standard] e lo schermo o una specifica finestra 

di terminale è invece il dispositivo di standard output (stdout) [uscita standard].

Comunque, dal momento che Linux è un sistema flessibile, queste impostazioni di base non devono 

essere applicate necessariamente. Ad esempio lo standard output di un server molto controllato in 

un grande ambiente può essere una stampante.

5.1.2. Gli operatori di redirezione

5.1.2.1. Redirezione dell'output con > e |

Qualche volta potreste voler salvare l'output di un comando in un file oppure applicare un altro 

comando sull'output di un comando. Questa operazione è nota come redirezione dell'output. La 

redirezione si fa utilizzando sia “>” (simbolo di maggiore), sia l'operatore “|” (pipe in inglese) che 

invia lo standard output di un comando ad un altro come standard input.

Come abbiamo visto in precedenza, il comando  cat  concatena i file e li invia tutti insieme allo 

standard output. Redirigendo questo output ad un file, esso verrà creato – o sovrascritto se già 

esistente (fate attenzione).

some words

nancy:~> cat test2 some other words

nancy:~> cat test1 test2 > test3

nancy:~> cat test3 some words

some other words

Non sovrascrivete!

State attenti  a non sovrascrivere  file esistenti  (magari  importanti)  quando  redirigete 

l'uscita   dei   dati.   Molte   shell,   compresa   Bash,   hanno   la   capacità   predefinita   di 

proteggervi   da   tale   rischio:  noclobber  (consultate   le   pagine   Info   per   maggiori 

informazioni).  Con Bash   dovreste  aggiungere  il comando  set  -o noclobber  al 

vostro file di configurazione .bashrc per prevenire scritture accidentali  di file.

Redirigere “niente” verso un file esistente equivale a svuotarlo:

nancy:~> ls l list

rw rw r 1 nancy nancy 117 Apr 2 18:09 list − − − −−

nancy:~> > list

nancy:~> ls l list

rw rw r 1 nancy nancy 0 Apr 4 12:01 list − − − −−

Questo processo è chiamato troncamento.

La stessa redirezione ad un file inesistente creerà un nuovo file vuoto con il nome indicato:

nancy:~> ls l newlist

ls: newlist: No such file or directory

nancy:~> > newlist

nancy:~> ls l newlist

rw rw r 1 nancy nancy 0 Apr 4 12:05 newlist − − − −−

Il Capitolo 7 fornisce alcuni altri esempi dell'uso di questo tipo di redirezione.

Ecco alcuni esempi dell'utilizzo dell'incanalamento (piping) dei comandi.

Per trovare una parola in un certo testo, mostrate tutte le linee contenenti “parola1” ed escludete 

quelle che contengono anche “parola2”: 

grep parola1 file | grep -v parola2

Per mostrare l'output di un elenco dei file di una directory una pagina alla volta:

ls -la | less

ls -l | grep parte_del_nome_del_file

5.1.2.2. Redirezione dell'input

In altre occasioni potreste volere che un file costituisse l'input di un comando che normalmente non 

accetta  file  come  opzione.   Questa  redirezione   dell'input   si  ottiene   ricorrendo  all'operatore   “<” 

(minore).

Qui sotto c'è un esempio di come inviare un file a qualcuno utilizzando la redirezione dell'input.

andy:~> mail mike@somewhere.org < to_do

Se l'utente mike esiste nel sistema, non avete bisogno di scrivere l'intero indirizzo. Se invece volete 

raggiungere qualcuno su Internet, battete l'intero indirizzo come argomento di mail.

Tale esempio si legge con maggiore difficoltà rispetto al banale cat file | mail qualcuno ma è 

un modo molto più elegante per usare gli strumenti disponibili.

5.1.2.3. Combinare redirezioni

L'esempio  seguente  combina  le redirezioni  di input e output.  Il file  testo.txt  viene  prima 

controllato alla ricerca di errori e l'output viene poi rediretto in un file di registrazione degli errori:

spell <testo.txt> errori.log

Il comando seguente elenca tutti i comandi che potete dare per esaminare un altro file quando usate 

less:

mike:~> less −−help | grep i examine

:e [file] Examine a new file.

:n * Examine the (N th) next file from the command line.− :p * Examine the (N th) previous file from the command line.− :x * Examine the first (or N th) file from the command line.−

L'opzione  -i  viene utilizzata per ricerche non sensibili a maiuscolo/minuscolo (ricordate che i 

sistemi UNIX sono molto “case sensitive”).

Se desiderate salvare l'output di questo comando per futura memoria, redirigetelo ad un file:

mike:~> less −−help | grep i examine > esaminare file in less− − − mike:~> cat esaminare file in less− − −

:e [file] Examine a new file.

:n * Examine the (N th) next file from the command line.− :p * Examine the (N th) previous file from the command line.− :x * Examine the first (or N th) file from the command line.−

Di fatto l'output di un comando può essere incanalato in un altro comando quante volte volete a 

condizione che normalmente tali comandi leggano i dati in ingresso dallo standard input e scrivano 

nello standard output quelli in uscita. Talvolta essi non sono in grado di farlo, ma potrebbero esserci 

delle speciali opzioni che istruiscono questi comandi a comportarsi secondo le regole consuete. 

Leggete perciò la documentazione (pagine man e Info) dei comandi utilizzati nel caso otteniate 

degli errori.

Nuovamente,   siate   certi   di   non   usare   nomi   di   file   esistenti   di   cui   avete   ancora   bisogno:   la 

redirezione dell'output a file esistenti cancellerà il loro contenuto.

5.1.2.4. L'operatore >>

Invece   di   sovrascrivere   i   dati   dei   file,   potete   anche   aggiungere   del   testo   ad   un   file   esistente 

utilizzando in successione due segni di maggiore.

Esempio:

mike:~> cat listadesideri piu' soldi

meno lavoro

mike:~> date >> listadesideri

mike:~> cat listadesideri piu' soldi

meno lavoro

Thu Feb 28 20:23:07 CET 2002

Il comando  date  scriverebbe sull'ultima linea sullo schermo: adesso invece la aggiunge al file 

listadesideri.

Nel documento Introduzione a Linux (pagine 122-125)