Impara le basi di come funziona il reindirizzamento I/O (Input/Output) di Linux

Uno degli argomenti più importanti e interessanti sotto l’amministrazione di Linux è la riduzione di I/O (input/output). questa caratteristica della riga di comando consente di reindirizzare l’input e/o l’output di comandi da e/o verso file, o di unire multipli comandi usando tubi per formare ciò che viene chiamato un “pipelines di comando“.

Tutti i comandi che eseguiamo producono fondamentalmente due tipi di output:

  1. il risultato del comando – i dati che il programma è progettato per produrre, e
  2. il stato del programma e i messaggi di errore che informano l’utente dei dettagli dell’esecuzione del programma.

In Linux e in altri sistemi Unix-like, ci sono tre file predefiniti di default denominati qui sotto, identificati anche dalla shell tramite numeri di descrittore di file:

  1. stdin o 0 – è collegato al tastierino, la maggior parte dei programmi legge l’input da questo file.
  2. stdout o 1 – è collegato allo schermo, e tutti i programmi inviano i loro risultati a questo file, e
  3. stderr o 2 – i programmi inviano messaggi di stato/errore a questo file, collegato anche allo schermo.

Quindi, la riduzione di I/O consente di modificare l’origine dell’input di un comando nonché il destinatario dell’output e dei messaggi di errore. E questo è possibile grazie agli operatori di reindirizzamento < e >.

Come reindirizzare l’output standard in un file in Linux

È possibile reindirizzare l’output standard come nell’esempio seguente, qui vogliamo memorizzare l’output del comando top per una successiva ispezione:

$ top -bn 5 >top.log

Dove i flag:

  1. -b – abilita top a eseguire in modalità batch, in modo da poter reindirizzare il suo output su un file o un altro comando.
  2. -n – specifica il numero di iterazioni prima che il comando termini.

Puoi visualizzare il contenuto del file top.log utilizzando il comando cat come segue:

$ cat top.log

Per aggiungere l’output di un comando, utilizza l’operatore ">>".

Ad esempio, per aggiungere l’output del comando top sopra nel file top.log, specialmente all’interno di uno script (o sulla riga di comando), inserisci la riga seguente:

$ top -bn 5 >>top.log

Nota: Utilizzando il numero del descrittore di file, il comando di reindirizzamento dell’output sopra è lo stesso di:

$ top -bn 5 1>top.log

Come reindirizzare l’errore standard su un file in Linux

Per reindirizzare l’errore standard di un comando, è necessario specificare esplicitamente il numero del descrittore di file, 2, affinché la shell capisca cosa stai cercando di fare.

Ad esempio, il comando ls seguente produrrà un errore quando eseguito da un normale utente del sistema senza privilegi di root:

$ ls -l /root/

Puoi reindirizzare l’errore standard in un file come segue:

$ ls -l /root/ 2>ls-error.log
$ cat ls-error.log 
Redirect Standard Error to File

Per aggiungere l’errore standard, usa il comando seguente:

$ ls -l /root/ 2>>ls-error.log

Come reindirizzare Output/Errore Standard in un File

È anche possibile catturare tutto l’output di un comando (entrambi l’output standard e l’errore standard) in un file singolo. Ciò può essere fatto in due modi differenti specificando i numeri dei descrittori di file:

1. Il primo è un metodo relativamente vecchio che funziona così:

$ ls -l /root/ >ls-error.log 2>&1

Il comando sopra significa che la shell prima invierà l’output del comando ls nel file ls-error.log (utilizzando >ls-error.log), quindi scrive tutti i messaggi di errore nel descrittore di file 2 (output standard) che è stato reindirizzato al file ls-error.log (utilizzando 2>&1). Ciò implica che l’errore standard viene anche inviato allo stesso file come output standard.

2. Il secondo metodo, più diretto, è:

$ ls -l /root/ &>ls-error.log

Puoi anche aggiungere output standard ed errore standard in un file singolo così:

$ ls -l /root/ &>>ls-error.log

Come reindirizzare Input Standard in File

La maggior parte dei comandi riceve input dall’input standard, e per default l’input standard è collegato alla tastiera.

Per reindirizzare l’input standard da un file diverso dalla tastiera, utilizzare l’operatore “<” come segue:

$ cat <domains.list 
Redirect Standard Input to File

Come reindirizzare l’input/output standard su un file

È possibile eseguire la ridirezione dell’input standard e dell’output standard contemporaneamente utilizzando il comando sort come segue:

$ sort <domains.list >sort.output

Come utilizzare la ridirezione I/O utilizzando le pipe

Per reindirizzare l’output di un comando come input di un altro, è possibile utilizzare le pipe, che rappresentano un potente mezzo per creare linee di comando utili per operazioni complesse.

Ad esempio, il comando seguente elencherà i cinque file più recentemente modificati.

$ ls -lt | head -n 5 

In questo esempio, le opzioni:

  1. -l – abilita il formato di elenco lungo
  2. -tordina in base al tempo di modifica, mostrando per primi i file più nuovi
  3. -n – specifica il numero di righe di intestazione da mostrare

Comandi importanti per la creazione di pipeline

In questo caso, faremo una breve panoramica di due comandi importanti per la creazione di pipeline di comandi e sono:

xargs che viene utilizzato per costruire ed eseguire linee di comando da input standard. Di seguito è riportato un esempio di un pipeline che utilizza xargs, questo comando viene utilizzato per copiare un file in più directory in Linux:

$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh
Copy Files to Multiple Directories

E le opzioni:

  1. -n 1 – istruisce xargs a utilizzare al massimo un argomento per riga di comando e inviarlo al comando cp
  2. cp – copia il file
  3. -vvisualizza il progresso del comando di copia.

Per ulteriori opzioni e informazioni sull’utilizzo, leggere la pagina man di xargs:

$ man xargs 

A tee command reads from standard input and writes to standard output and files. We can demonstrate how tee works as follows:

$ echo "Testing how tee command works" | tee file1 
tee Command Example

Filtri file o testo vengono spesso utilizzati con le pipe per operazioni file Linux efficaci, per processare l’informazione in modi potenti come la riorganizzazione dell’output dei comandi (questo può essere vitale per la generazione di utili rapporti Linux), la modifica del testo in file e molti altri compiti di amministrazione del sistema Linux.

Per conoscere di più riguardo i filtri Linux e le pipe, leggi questo articolo Trova i 10 IP più frequenti che accessiono al server Apache, che offre un esempio utile dell’uso di filtri e pipe.

In questo articolo, abbiamo spiegato i fondamenti di redirezione I/O in Linux. ricorda di condividere le tue opinioni nella sezione dedicata alle risposte in basso.

Source:
https://www.tecmint.com/linux-io-input-output-redirection-operators/