Uno degli argomenti più importanti e interessanti dell'amministrazione Linux è il reindirizzamento I/O. Questa funzione della riga di comando consente di reindirizzare l'input e/o l'output di comandi da e/o a file, o unire più comandi insieme utilizzando pipe per formare quella che è nota come una "conduttura di comandi ”.
Tutti i comandi che eseguiamo producono fondamentalmente due tipi di output:
- il risultato del comando:i dati che il programma è progettato per produrre e
- lo stato del programma e i messaggi di errore che informano un utente dei dettagli di esecuzione del programma.
In Linux e altri sistemi simili a Unix, ci sono tre file predefiniti nominati di seguito che sono identificati anche dalla shell usando i numeri del descrittore di file:
- stdin o 0 – è collegato alla tastiera, la maggior parte dei programmi legge l'input da questo file.
- Stdout o 1 – è allegato allo schermo e tutti i programmi inviano i loro risultati a questo file e
- stderr o 2 – i programmi inviano messaggi di stato/errore a questo file che è anche allegato allo schermo.
Pertanto, il reindirizzamento I/O consente di modificare la sorgente di input di un comando, nonché la posizione in cui vengono inviati i messaggi di output e di errore. E questo è reso possibile dal “<”
e “>”
operatori di reindirizzamento.
Come reindirizzare l'output standard su file in Linux
Puoi reindirizzare l'output standard come nell'esempio seguente, qui vogliamo memorizzare l'output del comando in alto per un'ispezione successiva:
$ top -bn 5 >top.log
Dove le bandiere:
-b
– abilita top da eseguire in modalità batch, in modo da poter reindirizzare l'output a un file oa un altro comando.-n
– specifica il numero di iterazioni prima che il comando termini.
Puoi visualizzare il contenuto di top.log
file utilizzando il comando cat come segue:
$ cat top.log
Per aggiungere l'output di un comando, usa il “>>”
operatore.
Ad esempio per aggiungere l'output del comando top sopra nel top.log file specialmente all'interno di uno script (o sulla riga di comando), inserisci la riga seguente:
$ top -bn 5 >>top.log
Nota :Usando il numero del descrittore di file, il comando di reindirizzamento dell'output sopra è lo stesso di:
$ top -bn 5 1>top.log
Come reindirizzare l'errore standard su un file in Linux
Per reindirizzare l'errore standard di un comando, devi specificare in modo esplicito il numero del descrittore di file, 2
affinché la shell capisca cosa stai cercando di fare.
Ad esempio, il comando ls seguente produrrà un errore quando eseguito da un normale utente di sistema senza privilegi di root:
$ ls -l /root/
Puoi reindirizzare l'errore standard a un file come di seguito:
$ ls -l /root/ 2>ls-error.log $ cat ls-error.log
Per aggiungere l'errore standard, utilizzare il comando seguente:
$ ls -l /root/ 2>>ls-error.log
Come reindirizzare output/errore standard su un file
È anche possibile catturare tutto l'output di un comando (sia standard che standard error) in un unico file. Questo può essere fatto in due modi possibili specificando i numeri del descrittore di file:
1. Il primo è un metodo relativamente vecchio che funziona come segue:
$ ls -l /root/ >ls-error.log 2>&1
Il comando sopra significa che la shell invierà prima l'output del comando ls al file ls-error.log (usando >ls-error.log
), quindi scrive tutti i messaggi di errore nel descrittore di file 2 (output standard) che è stato reindirizzato al file ls-error.log (usando 2>&1
). Il che implica che anche l'errore standard viene inviato allo stesso file dell'output standard.
2. Il secondo e diretto metodo è:
$ ls -l /root/ &>ls-error.log
Puoi anche aggiungere lo standard output e l'errore standard a un singolo file in questo modo:
$ ls -l /root/ &>>ls-error.log
Come reindirizzare l'input standard su file
La maggior parte, se non tutti, i comandi ottengono l'input dall'input standard e per impostazione predefinita l'input standard è collegato alla tastiera.
Per reindirizzare l'input standard da un file diverso dalla tastiera, usa il “<”
operatore come di seguito:
$ cat <domains.list
Come reindirizzare input/output standard su file
È possibile eseguire contemporaneamente il reindirizzamento dell'input standard e dell'output standard utilizzando il comando di ordinamento come di seguito:
$ sort <domains.list >sort.output
Come utilizzare il reindirizzamento I/O utilizzando i tubi
Per reindirizzare l'output di un comando come input di un altro, puoi utilizzare pipe, questo è un potente mezzo per creare righe di comando utili per operazioni complesse.
Ad esempio, il comando seguente elencherà i primi cinque file modificati di recente.
$ ls -lt | head -n 5
Qui, le opzioni:
-l
– abilita il formato elenco lungo-t
– vengono visualizzati per primi l'ordinamento per ora di modifica con i file più recenti-n
– specifica il numero di righe di intestazione da mostrare
Comandi importanti per la costruzione di condotte
Qui, esamineremo brevemente due comandi importanti per la creazione di pipeline di comandi e sono:
xargs che viene utilizzato per creare ed eseguire righe di comando dallo standard input. Di seguito è riportato un esempio di pipeline che utilizza xargs , questo comando viene utilizzato per copiare un file in più directory in Linux:
$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh
E le opzioni:
-n 1
– indica a xargs di utilizzare al massimo un argomento per riga di comando e di inviarlo al comando cpcp
– copia il file-v
– mostra lo stato di avanzamento del comando di copia.
Per ulteriori opzioni e informazioni sull'utilizzo, leggi i xargs pagina man:
$ man xargs
Una t-shirt il comando legge dallo standard input e scrive nello standard output e nei file. Possiamo dimostrare come tee funziona come segue:
$ echo "Testing how tee command works" | tee file1
I filtri di file o di testo sono comunemente usati con le pipe per operazioni efficaci sui file Linux, per elaborare le informazioni in modi potenti come la ristrutturazione dell'output dei comandi (questo può essere vitale per la generazione di utili report Linux), la modifica del testo nei file e molti altri amministrazione del sistema Linux compiti.
Per saperne di più su filtri e pipe Linux, leggi questo articolo Trova i 10 migliori indirizzi IP che accedono al server Apache, mostra un utile esempio di utilizzo di filtri e pipe.
In questo articolo, abbiamo spiegato i fondamenti del reindirizzamento I/O in Linux. Ricordati di condividere i tuoi pensieri tramite la sezione feedback qui sotto.