GNU/Linux >> Linux Esercitazione >  >> Linux

Lavorare con l'output di input e il reindirizzamento degli errori in Linux

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.txt52

In 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 trovato

Reindirizzamento 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>&1

Il 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 tipo

Nota 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 tipo

Nel 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,12

troncare 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.txt

Invio 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/null

Nota:il file /dev/null è spesso chiamato bit bucket.

Lettura consigliata :Come utilizzare la password crittografata nello script della shell Bash Linux


Linux
  1. Copia e incolla nella riga di comando di Linux con xclip

  2. Come salvare l'output dei comandi in un file in Linux

  3. Come acquisire le sessioni del terminale e l'output con il comando di script Linux

  4. Reindirizzamento input/output in Linux/Unix

  5. Come interpretare e correggere un errore di input/output in Linux?

Spiegazione:input, output e reindirizzamento degli errori in Linux

Shell Scripting Part4 – Input, Output e Reindirizzamento

Utilizzo del comando Linux mv con esempi

Nozioni di base sulla riga di comando di Linux:lavorare con file e directory

Comando di montaggio Linux con esempi

Comando gawk Linux con esempi