Ricerca nel sito web

Scopri le nozioni di base su come funziona il reindirizzamento I/O (Input/Output) di Linux


Uno degli argomenti più importanti e interessanti nell'amministrazione Linux è il reindirizzamento I/O. Questa funzionalità della riga di comando consente di reindirizzare l'input e/o l'output dei comandi da e/o verso file o di unire più comandi insieme utilizzando pipe per formare quella che è nota come "pipeline di comandi" .

Tutti i comandi che eseguiamo producono fondamentalmente due tipi di output:

  1. il risultato del comando: i dati che il programma è progettato per produrre e
  2. lo stato del programma e i messaggi di errore che informano l'utente sui dettagli di esecuzione del programma.

In Linux e in altri sistemi simili a Unix, ci sono tre file predefiniti denominati di seguito che sono identificati anche dalla shell utilizzando i numeri di descrizione dei file:

  1. stdin o 0: è collegato alla tastiera, la maggior parte dei programmi legge l'input da questo file.
  2. stdout o 1: è attaccato allo schermo e tutti i programmi inviano i risultati a questo file e
  3. 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 l'origine di input di un comando nonché la destinazione a cui vengono inviati l'output e i messaggi di errore. Ciò è reso possibile dagli operatori di reindirizzamento “< ” e “> ”.

Come reindirizzare l'output standard su file in Linux

Puoi reindirizzare l'output standard come nell'esempio seguente, qui vogliamo archiviare l'output del comando top per un controllo successivo:

top -bn 5 >top.log

Dove le bandiere:

  1. -b – consente a top di essere eseguito in modalità batch, in modo da poter reindirizzare il suo output a un file o a un altro comando.
  2. -n – specifica il numero di iterazioni prima che il comando termini.

Puoi visualizzare il contenuto del file top.log utilizzando il comando cat come segue:

cat top.log

Per aggiungere l'output di un comando, utilizzare l'operatore “>> ”.

Ad esempio, per aggiungere l'output del comando top riportato sopra nel file top.log, in particolare all'interno di uno script (o sulla riga di comando), inserisci la riga seguente:

top -bn 5 >>top.log

Nota: utilizzando il numero del descrittore di file, il comando di reindirizzamento dell'output riportato sopra è uguale a:

top -bn 5 1>top.log

Come reindirizzare l'errore standard su file in Linux

Per reindirizzare l'errore standard di un comando, devi specificare esplicitamente il numero del descrittore di file, 2 affinché la shell capisca cosa stai cercando di fare.

Ad esempio, il comando ls riportato di seguito genererà un errore se eseguito da un normale utente di sistema senza privilegi di root:

ls -l /root/

È possibile reindirizzare l'errore standard in 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 l'output/errore standard su un file

È anche possibile catturare tutto l'output di un comando (sia standard output che standard error) in un singolo file. Questo può essere fatto in due modi possibili specificando i numeri dei descrittori 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 scriverà tutti i messaggi di errore al descrittore di file 2 (output standard) che è stato reindirizzato al file ls-error.log (utilizzando 2>&1 ). Ciò implica che anche l'errore standard viene inviato allo stesso file come output standard.

2. Il secondo e diretto metodo è:

ls -l /root/ &>ls-error.log

Puoi anche aggiungere l'output standard e l'errore standard a un singolo file in questo modo:

ls -l /root/ &>>ls-error.log

Come reindirizzare l'input standard al file

La maggior parte, se non tutti, i comandi ricevono l'input dallo standard input e, per impostazione predefinita, l'input standard è collegato alla tastiera.

Per reindirizzare l'input standard da un file diverso dalla tastiera, utilizzare l'operatore “< ” come di seguito:

cat <domains.list 

Come reindirizzare l'input/output standard su file

È possibile eseguire contemporaneamente il reindirizzamento dell'input standard e dell'output standard utilizzando il comando sort come di seguito:

sort <domains.list >sort.output

Come utilizzare il reindirizzamento I/O tramite pipe

Per reindirizzare l'output di un comando come input di un altro, puoi utilizzare le pipe, questo è un mezzo potente 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 

Ecco le opzioni:

  1. -l – abilita il formato di elenco lungo
  2. -t: ordina in base all'ora di modifica con i file più recenti visualizzati per primi
  3. -n – specifica il numero di righe di intestazione da mostrare

Comandi importanti per la costruzione di pipeline

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 da input standard. 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:

  1. -n 1 – indica a xargs di utilizzare al massimo un argomento per riga di comando e di inviarlo al comando cp
  2. cp – copia il file
  3. -v – mostra l'avanzamento del comando di copia.

Per ulteriori informazioni e opzioni di utilizzo, leggi la pagina man di xargs:

man xargs 

Un comando tee legge dallo standard input e scrive sullo standard output e sui file. Possiamo dimostrare come funziona il tee nel modo seguente:

echo "Testing how tee command works" | tee file1 

I filtri di file o testo vengono comunemente utilizzati 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 report Linux utili), la modifica del testo nei file e molti altri sistemi di amministrazione Linux. compiti.

Per saperne di più sui filtri e sulle 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.