Reindirizzamento input output in esempi Linux/Unix

Cos'è il reindirizzamento?

Il reindirizzamento è una funzionalità di Linux tale che quando si esegue un comando è possibile modificare i dispositivi di input/output standard. Il flusso di lavoro di base di any Comando Linux è che prende un input e fornisce un output.

  • Il dispositivo di input standard (stdin) è la tastiera.
  • Il dispositivo di output standard (stdout) è lo schermo.

Con il reindirizzamento, è possibile modificare l'input/output standard di cui sopra.

Clicchi qui se il video non è accessibile

Reindirizzamento dell'output

Il '>Il simbolo ' viene utilizzato per il reindirizzamento dell'output (STDOUT).

Reindirizzamento dell'output

Esempio:

ls -al > listings

Qui l'output del comando ls -al viene reindirizzato al file "elenchi" anziché allo schermo.

Reindirizzamento dell'output

Note:: utilizzare il nome file corretto durante il reindirizzamento dell'output del comando su un file. Se esiste un file esistente con lo stesso nome, il comando reindirizzato eliminerà il contenuto di quel file e quindi potrebbe essere sovrascritto.

Se non vuoi che un file venga sovrascritto ma vuoi aggiungere più contenuto a un file esistente, allora dovresti usare '>>'operatore.

Reindirizzamento dell'output

Puoi reindirizzare l'output standard non solo sui file, ma anche sui dispositivi!

$ cat music.mp3 > /dev/audio

Il comando cat legge il file music.mp3 e invia l'output a /dev/audio che è il dispositivo audio. Se le configurazioni audio nel tuo PC sono corrette, questo comando riprodurrà il file music.mp3

Reindirizzamento dell'input

Il 'Il simbolo ' viene utilizzato per il reindirizzamento dell'input (STDIN).

Reindirizzamento dell'input

Esempio: Il programma di posta di Linux può aiutarti a inviare email dal Terminale.

Puoi digitare il contenuto dell'email usando la tastiera standard del dispositivo. Ma se vuoi allegare un file all'email puoi usare l'operatore di reindirizzamento dell'input nel seguente formato.

Mail -s "Subject" to-address < Filename

Reindirizzamento dell'input

In questo modo il file verrà allegato all'e-mail e inviato al destinatario.

Gli esempi precedenti erano semplici. Diamo un'occhiata ad alcune tecniche avanzate di reindirizzamento che utilizzano File Descriptors.

Compila il Descriptor (FD)

In Linux/Unix, tutto è un file. File normali, directory e persino dispositivi sono file. Ad ogni File è associato un numero chiamato File Descripto (FD).

Lo schermo ha anche un File DescriptO. Quando un programma viene eseguito, l'output viene inviato a File Descripto dello schermo e vedrai l'output del programma sul tuo monitor. Se l'output viene inviato a File Descripto della stampante, l'output del programma verrebbe stampato.

Reindirizzamento degli errori

Ogni volta che esegui un programma/comando sul terminale, sono sempre aperti 3 file, vale a dire, input standard, output standard, errore standard.

Reindirizzamento degli errori

Questi file sono sempre presenti ogni volta che viene eseguito un programma. Come spiegato prima, a ciascuno di questi file è associato un descrittore di file.

Compila il Compila il Descriptor
Ingresso standard STDIN 0
Uscita standard STDOUT 1
Errore standard STDERR 2

Per impostazione predefinita, sullo schermo viene visualizzato il flusso di errori. Il reindirizzamento degli errori indirizza gli errori a un file diverso dallo schermo.

Perché il reindirizzamento degli errori?

Il reindirizzamento degli errori è una delle funzionalità molto popolari di Unix / Linux.

Gli utenti UNIX abituali penseranno che molti comandi generano enormi quantità di errori.

  • Ad esempio, durante la ricerca di file, si ottengono solitamente errori di autorizzazione negata. Questi errori solitamente non aiutano la persona che sta cercando un file in particolare.
  • Durante l'esecuzione degli script di shell, spesso NON vuoi che i messaggi di errore ingombrino il normale output del programma.

La soluzione è reindirizzare i messaggi di errore su un file.

esempio 1

$ myprogram 2>errorsfile

Perché il reindirizzamento degli errori

Sopra stiamo eseguendo un programma chiamato myprogram.

Il descrittore di file per l'errore standard è 2.

Utilizzando "2>" reindirizziamo l'output dell'errore in un file denominato "errorfile"

Pertanto, l'output del programma non è ingombro di errori.

esempio 2

Ecco un altro esempio che utilizza l'istruzione find:

find . -name 'my*' 2>error.log

Utilizzando il comando "find", stiamo cercando nella directory "." corrente un file con "name" che inizia con "my"

Perché il reindirizzamento degli errori

Esempio 3: Vediamo un esempio più complesso,

Gli amministratori del server spesso elencano le directory e memorizzano sia l'errore che l'output standard in un file, che può essere elaborato in seguito. Ecco il comando.

ls Documents ABC> dirlist 2>&1

Qui,

  • che scrive l'output di un file nell'input di un altro file. 2>&1 significa che STDERR reindirizza alla destinazione di STDOUT (che è il file dirlist)
  • Stiamo reindirizzando l'output dell'errore sullo standard output che a sua volta viene reindirizzato al file dirlist. Pertanto, entrambi gli output vengono scritti nel file dirlist

Perché il reindirizzamento degli errori

Sommario

  • Ogni file in Linux ha un file corrispondente Descripto ad esso associato
  • La tastiera è il dispositivo di input standard mentre lo schermo è il dispositivo di output standard
  • “>” è l'operatore di reindirizzamento dell'output. ">>" aggiunge l'output a un file esistente
  • “<” è l'operatore di reindirizzamento dell'input
  • ">&" reindirizza l'output di un file a un altro.
  • È possibile reindirizzare l'errore utilizzando il file corrispondente Descripto 2.