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).
Esempio:
ls -al > listings
Qui l'output del comando ls -al viene reindirizzato al file "elenchi" anziché allo schermo.
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.
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).
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
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.
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
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"
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
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.