Ogni processo in Linux è dotato di tre file aperti (di solito chiamati descrittore di file). Questi file sono i file di input, output e di errore standard. Per impostazione predefinita:
- Input standard è la tastiera, astratta come file per semplificare la scrittura di script di shell.
- Uscita standard è la finestra della shell o il terminale da cui viene eseguito lo script, astratto come file per rendere ancora più semplice la scrittura di script e programmi
- Errore standard è lo stesso dell'output standard:la finestra della shell o il terminale da cui viene eseguito lo script.
Un descrittore di file è semplicemente un numero che si riferisce a un file aperto. Per impostazione predefinita, descrittore di file 0 (zero) si riferisce all'input standard e spesso abbreviato come stdin . Il descrittore di file 1 si riferisce all'output standard (stdout ) e il descrittore di file 2 si riferisce all'errore standard (stderr ). Questi numeri sono importanti quando devi accedere a un particolare file , specialmente quando desideri reindirizzare questi file ad altre posizioni, i numeri dei descrittori di file salgono da zero.
Reindirizzamento dell'output standard
Sintassi per reindirizzare l'output di un comando su un file.
# Opzioni_di_comando_e_argomenti> file_output
Esempio :
[email protetta]:~$ cat /proc/cpuinfo> command.txt
Possiamo vedere i dati che sarebbero andati sullo schermo con più comandi:
[email protected]:~$ more command.txt processor :0vendor_id :GenuineIntelcpu family :6model :37model name :Intel(R) Core(TM) i3 CPU M 370 @ 2,40GHz stepping :5 microcode 6 c 61:0. 0 61 c mhz:0. 0 61 :6144 KBphysical id :0siblings :2core id :0cpu cores :2apicid :0initial apicid :0fpu :yesfpu_exception :yescpuid level :5wp :L'operatore> dice alla shell di reindirizzare l'output del comando al file specificato. Se il file esiste , elimina il vecchio contenuto del file e lo sostituisce con l'output del comando.
Reindirizzamento dell'input di un comando
Sintassi per reindirizzare l'input di un comando in modo che provenga da un file.
# Opzioni_di_comando_e_argomenti
Utilizzare l'operatore
[email protetta]:~$ wc -l <command.txt52In questo esempio , l'input per 'wc Il comando ' deriva dal file denominato command.txt. La shell invia il contenuto del file command.txt come input standard per il comando wc.
Nota : Possiamo anche combinare entrambi i reindirizzamenti con la seguente sintassi:
# opzioni_comandi_e_agrumenti
file_di_uscita. Errore standard di reindirizzamento
Oltre a reindirizzare l'input e l'output standard per uno script o un comando, possiamo anche reindirizzare l'errore standard. Anche se l'errore standard per impostazione predefinita va nella stessa posizione dell'output standard:la finestra della shell o il terminale. Ci sono buone ragioni per cui stdout e stderr vengono trattati separatamente. Il motivo principale è che possiamo reindirizzare l'output di uno o più comandi a un file ma non hai modo di sapere se si è verificato un errore. Separare stderr da stdout consente al messaggio di errore di apparire sullo schermo mentre l'output va ancora su un file.
Sintassi per reindirizzare stderr da un comando a un file.
# opzioni_comandi_e_agrumenti 2> file_output.
Il 2 in 2> fa riferimento al descrittore di file 2, il numero del descrittore per stderr.
Esempio:
[email protected]:~$ lsash /usr/bin 2> controls-error.txt[email protected]:~$ cat commands-error.txtNessun comando 'lsash' trovato, volevi dire:comando 'sash' da pacchetto 'sash' (universo)lsash:comando non trovatoReindirizzamento dell'output standard e dell'errore standard
Usa 2>&1 Sintassi per reindirizzare l'errore standard nella stessa posizione dell'output standard.
Esempio:1
[email protetta]:~$ ls /usr/bin> command.txt 2>&1Il comando precedente ha tre parti.
- ls /usr/bin è il comando eseguito
- > command.txt reindirizza l'output del comando ls
- 2>&1 invia l'output del descrittore di file 2, stderr , nella stessa posizione del descrittore di file 1, stdout.
Esempio:2
[email protetta]:~$ ls /usr2222/bin> command.txt 2>&1[email protetta]:~$ più command.txtls:impossibile accedere a /usr2222/bin:nessun file o directory di questo tipoNota che l'esempio sopra presuppone che il tuo sistema non abbia nomi di directory "/usr2222/bin"
Reindirizzamento di stderr e stdout contemporaneamente
[email protetta]:~$ ls /usr2222/bin &> command.txt[email protetta]:~$ più command.txtls:impossibile accedere a /usr2222/bin:nessun file o directory di questo tipoNel comando precedente ls è il comando , /usr2222/bin è l'argomento di 'ls ' comando e '&> comando.txt ' reindirizza sia stdout che stderr in un file chiamato command.txt.
Aggiungere ai file
Utilizzare l'operatore '>>' per reindirizzare l'output di un comando, ma aggiungerlo al file, se esiste. La sintassi è riportata di seguito:
# Comando>> file_da_append.
Esempio:
[email protected]:~$ uptime>> sysload.txt[email protected]:~$ uptime>> sysload.txt[email protected]:~$ uptime>> sysload.txt[email protected]:~$ altro sysload.txt11:49:17 su 1:22, 3 utenti, carico medio:0,28, 0,12, 0,1111:49:28 su 1:22, 3 utenti, carico medio:0,40, 0,15, 0,1211:49:36 su 1:23, 3 utenti, carico medio:0,33, 0,14, 0,12troncare i file :
Possiamo usare una sintassi abbreviata per troncare i file omettendo il comando before> operator . La sintassi è riportata di seguito:
#> nome_file
Possiamo anche usare un formato alternativo con i due punti:
# :> nome_file
Entrambi questi comandi senza comando creeranno il file se non esiste e troncheranno il file a zero byte se il file esiste.
[e-mail protetta]:~$ ls /usr/bin> command.txt[e-mail protetta]:~$ ls -l command.txt-rw-rw-r-- 1 linuxtechi linuxtechi 19713 2 dicembre 12:18 comando .txt[email protetta]:~$> command.txt[email protetta]:~$ ls -l command.txt-rw-rw-r-- 1 linuxtechi linuxtechi 0 2 dic 12:18 command.txtInvio veloce dell'output in nessun luogo
Esistono alcuni scenari in cui non solo si desidera reindirizzare l'output di un comando, ma si desidera eliminare l'output. Puoi farlo reindirizzando l'output di un comando al file null "/dev/null" Il file null consuma tutto l'output inviatogli, come se /dev/null fosse una stella di un buco nero.
[email protetta]:~$ ls /usr/bin> /dev/nullNota:il file /dev/null è spesso chiamato bit bucket.
Lettura consigliata :Come utilizzare la password crittografata nello script della shell Bash Linux