Cos'è il reindirizzamento?
Il reindirizzamento è una funzionalità in Linux tale che quando si esegue un comando, è possibile modificare i dispositivi di input/output standard. Il flusso di lavoro di base di qualsiasi comando Linux è che accetta un input e fornisce un output.
Tipi di reindirizzamento
- “>” Il dispositivo di input standard (stdin) è la tastiera.
- “<” Il dispositivo di uscita standard (stdout) è lo schermo.
- “>>” output standard
- Input standard "<<"
- “p> &q” Unisce l'output dello stream p con lo stream q
- "p <&q" Unisce l'input dallo stream p con lo stream q
Reindirizzamento output
Il '> Il simbolo ' viene utilizzato per il reindirizzamento dell'uscita (STDOUT).
Esempio:
ls -al > listings
Qui l'output del comando ls -al viene reindirizzato al file "listings" invece del tuo schermo.
Nota :“Utilizzare il nome file corretto durante il reindirizzamento dell'output del comando a un file. Se esiste un file esistente con lo stesso nome, il comando reindirizzato cancellerà il contenuto di quel file e quindi potrebbe essere sovrascritto."
— Se non vuoi che un file venga sovrascritto ma desideri aggiungere altro contenuto a un file esistente, dovresti usare ‘>> ' operatore.
— Puoi reindirizzare l'output standard, non solo ai file, ma anche ai 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. Ma se le configurazioni audio nel tuo PC sono corrette, questo comando riprodurrà il file music.mp3
Reindirizzamento input
Il '< Il simbolo ' viene utilizzato per il reindirizzamento dell'input (STDIN)
Questo allegherebbe il file con l'e-mail e verrebbe inviato al destinatario.
"News Today" è l'oggetto dell'e-mail, "[email protected]" è l'indirizzo e-mail e "NewsFlash" è il file allegato.
Gli esempi sopra erano semplici. Diamo un'occhiata ad alcune tecniche avanzate di reindirizzamento che utilizzano i descrittori di file.
Descrittori di file (FD)
In Linux/Unix, tutto è un file. File regolari, directory e persino dispositivi sono file. Ogni File ha un numero associato chiamato File Descriptor (FD).
Il tuo schermo ha anche un descrittore di file. Quando un programma viene eseguito, l'output viene inviato al descrittore di file dello schermo e sul monitor viene visualizzato l'output del programma. Se l'output viene inviato al descrittore di file della stampante, l'output del programma sarebbe stato stampato.
Reindirizzamento errore
Ogni volta che esegui un programma/comando sul terminale, 3 file sono sempre aperti, vale a dire, standard input, standard output, standard error.
Questi file sono sempre presenti ogni volta che viene eseguito un programma. Come spiegato prima, un descrittore di file è associato a ciascuno di questi file.
File | Descrittore di file |
---|---|
Ingresso standard STDIN | 0 |
Uscita standard STDOUT | 1 |
Errore standard STDERR | 2 |
Per impostazione predefinita, il flusso di errore viene visualizzato sullo schermo. Il reindirizzamento degli errori sta indirizzando gli errori a un file diverso dallo schermo.
Perché reindirizzamento di errore?
Il reindirizzamento degli errori è una delle funzionalità molto popolari di Unix/Linux.
Gli utenti frequenti di UNIX riterranno che molti comandi generano enormi quantità di errori.
- Ad esempio, durante la ricerca di file, in genere si ottengono errori di autorizzazione negata. Questi errori di solito non aiutano la persona che cerca un determinato file.
- Durante l'esecuzione di script di shell, spesso NON si desidera che i messaggi di errore ingombrano 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 mioprogramma.
Il descrittore di file per l'errore standard è 2.
Usando "2>" reindirizziamo l'output dell'errore in un file chiamato "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 "trova ", stiamo cercando il ". ” directory corrente per un file con “nome ” che inizia con “mio “
Esempio 3
Vediamo quindi 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
Ecco,
- che scrive l'output da 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 all'output standard che a sua volta viene reindirizzato al file dirlist. Quindi, entrambi gli output vengono scritti nel file dirlist
Riepilogo
- Ogni file in Linux ha un descrittore di file corrispondente 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.
- Puoi reindirizzare l'errore utilizzando il corrispondente descrittore di file 2.