GNU/Linux >> Linux Esercitazione >  >> Linux

Pratici comandi Tee Linux e Unix per l'amministratore Linux

Come amministratore Linux, ci sono molte occasioni in cui devi salvare l'output di un comando in un file, oltre a stampare semplicemente l'output sul terminale. Non sei sicuro di come? Lascia che il comando Unix tee faccia il trucco.

In questo tutorial imparerai molti modi per usare il tee comando per salvare e aggiungere l'output a un file.

Pronto? Continua a leggere per portare i tuoi script di shell al livello successivo!

Prerequisiti

Questo tutorial sarà una dimostrazione pratica. Se desideri seguire, assicurati di avere un sistema Linux. Questo tutorial utilizza Ubuntu 20.04, ma puoi usare qualsiasi versione di Linux.

Reindirizzamento delle uscite dei comandi (STDOUT/STDERR)

Prima di eseguire il tee comando, è fondamentale capire come funzionano i reindirizzamenti. In Linux, tutto è considerato un file, inclusi dispositivi, directory e persino l'output dei comandi. Di conseguenza, puoi prendere l'output di un comando e usarlo come input per un altro comando (reindirizzamenti di file).

Esistono diversi tipi di reindirizzamenti e ognuno ha uno scopo. Ma durante l'esecuzione di tee comando, utilizzi principalmente due diversi tipi di reindirizzamenti:

  • Redirect output standard (STDOUT) (>) – L'output predefinito di un comando.
  • Standard Error Redirect (STDERR)(2>) – Un messaggio di errore generato da un comando e visualizzato sullo schermo.

Entrambi i reindirizzamenti accettano e salvano gli output dei comandi in un file, ma vedrai come funzionano i reindirizzamenti di seguito.

Esegui ls comando senza argomenti per elencare tutti i contenuti (file e cartelle) della tua directory di lavoro.

ls

Di seguito è riportato lo STDOUT del comando ls.

Quindi, esegui il comando seguente per elencare di proposito il contenuto di una directory (fake_directory ) che non esiste.

ls fake_directory

Riceverai un messaggio di errore che dice che la directory non esiste. Questo output è lo STDERR del comando ls.

Salvataggio degli output dei comandi in un file

Supponi di voler salvare lo STDOUT del ls comando in un file invece di stampare semplicemente l'output sul terminale. In questo caso, l'operatore di reindirizzamento (> ) torna utile.

1. Eseguire il comando seguente per salvare/reindirizzare (>) lo STDOUT del comando ls in un file denominato ls_stdout.txt. Poiché questo comando salva l'output in un file, non otterrai un output sul tuo terminale.

ls > ls_stdout.txt

2. Ora esegui il comando cat di seguito per visualizzare il contenuto del tuo file ls_stdout.txt.

cat ls_stdout.txt

3. Allo stesso modo, eseguire il comando seguente per salvare STDERR (2>) del comando ls in un file denominato ls_stderr.txt. Ancora una volta, non otterrai un output sul tuo terminale poiché l'output viene salvato in un file.

ls fake_directory 2> ls_stderr.txt

4. Ora esegui il comando cat di seguito per vedere il contenuto del file ls_stderr.txt.

cat ls_stderr.txt

Di seguito, puoi confermare che lo STDERR del comando ls è stato salvato in ls_stderr.txt file.

5. Eseguire il comando seguente per salvare sia (&>) STDOUT che STDERR del comando ls in un file denominato ls_alloutput.txt.

Perché accontentarti di uno quando puoi averli entrambi, giusto? In genere, potresti voler archiviare entrambi gli output nello stesso file per la risoluzione dei problemi o per scopi di registrazione.

ls &> ls_alloutput.txt

6. Infine, esegui il seguente comando cat per visualizzare il contenuto del file ls_alloutput.txt

cat ls_alloutput.txt

Collegamento di programmi con Pipes

Oltre a salvare semplicemente gli output in un file, puoi ottenere molto di più usando le pipe, come collegare i programmi. Negli scenari del mondo reale, molto probabilmente utilizzerai le pipe insieme ai reindirizzamenti dei file e al tee comando.

Una pipe (| ) è un meccanismo per la comunicazione tra processi che consente di collegare l'output di un comando all'input di un altro comando. In altre parole, la pipe prende lo STDOUT di un processo e lo collega allo STDOUT di un altro processo.

Esegui il seguente comando grep per trovare tutte le righe contenenti la parola tcp nel file /etc/services.

grep tcp /etc/services

Ora esegui lo stesso grep comando qui sotto. Ma questa volta, reindirizza l'output del grep sopra comando al less comando per visualizzare i risultati della ricerca una schermata alla volta.

grep tcp /etc/services | less

Come funzionano le tubazioni? Come puoi vedere di seguito, quando usi il carattere pipe (|), l'output di grep comando è memorizzato in una posizione temporanea. L'output viene quindi passato come input a less comando.

Combinazione di Unix Tee (tee ) Comando, pipe e reindirizzamenti

Finora, hai imparato come funziona il tee comando, pipe e reindirizzamenti funzionano. Ma perché non usarli tutti e tre insieme per un migliore controllo degli output dei comandi?

In precedenza hai utilizzato il piping con i reindirizzamenti e questo è un passo enorme. Questa volta utilizzerai il piping e il tee comando per inviare l'output di un comando a un altro per un'ulteriore elaborazione.

Esegui il comando seguente per inviare l'output di ls comando sullo schermo e il result.txt file. L'output di ls viene ulteriormente reindirizzato al grep comando per filtrare solo le righe che contengono la parola ip .

ls | grep 'ip' | tee result.txt

Ora esegui il cat comando per verificare il contenuto del risultato .txt.

cat result.txt

Aggiungere l'output a file esistenti

In precedenza hai salvato l'output dei comandi in un file, ma puoi aggiornare un file esistente invece di crearne uno nuovo? Sì! Lascia che il tee comando fai la magia.

Per impostazione predefinita, il tee comando sovrascrive il contenuto di un file esistente. Ma in molti casi, potresti voler aggiungere l'output di un comando a un file esistente. Come la registrazione di tutti gli eventi del server in tempo reale in un file di registro.

Con questa funzione, il file di registro viene aggiunto con nuove voci ogni volta che si verifica un evento sul server.

Eseguire il comando seguente per prendere l'output del comando ls -lR e aggiungere l'output (tee -a) al result.txt contenuto del file. Questo comando non fornisce output poiché stai inviando l'output del comando a un file.

ls -lR | tee -a result.txt

Ora esegui il cat comando per verificare il contenuto del result.txt file.

cat result.txt

Come puoi vedere di seguito, l'output del ls -lR il comando viene aggiunto alla fine del result.txt file.

Utilizzo del tee Comando in combinazione con sudo

Molti comandi richiedono privilegi elevati o sudo accedere, come eseguire modifiche all'interno di /etc directory. La domanda è:tee comando funziona di pari passo con sudo ? Sì!

L'anteporre sudo al comando tee consente a un utente non root di scrivere dati in un file che solo un utente root può modificare. Ad esempio, vuoi abilitare l'utente ata per scrivere dati in /etc/ata.conf file. Ma, allo stesso tempo, non vuoi dare all'utente ata privilegi di root.

1. Accedi alla tua macchina con un utente non root.

2. Quindi, esegui il comando seguente senza sudo per scrivere i dati di testo nel file /etc/ata.conf.

echo "data" > tee /etc/ata.conf

Come puoi vedere di seguito, riceverai un errore di autorizzazione negata da ata l'utente non ha accesso in scrittura a /etc/ata.conf file.

3. Eseguire lo stesso comando di seguito come nel passaggio due per scrivere i dati di testo nel file /etc/ata.conf. Ma questa volta, anteponi il comando sudo al comando tee. Ciò consente all'utente ata per completare il comando (elevato) come utente non root.

echo "data" | sudo tee /etc/ata.conf

Infine, esegui il comando cat di seguito per verificare che ata l'utente può scrivere il testo "data" in /etc/ata.conf.

cat /etc/ata.conf

Conclusione

Durante questo tutorial, hai imparato come utilizzare il comando Unix tee per scrivere dati su file e come funziona insieme ad altri comandi. A questo punto, dovresti avere una potente combinazione di comandi che puoi usare per gestire l'input e l'output nell'ambiente della riga di comando di Linux.

Sei come uno chef di sushi, che controlla completamente gli ingredienti e le proporzioni di ogni piatto. Puoi personalizzare ogni ordine al volo in base ai gusti dei tuoi clienti. L'unico limite è la tua immaginazione (e forse le dimensioni della finestra del tuo terminale).

Ora vai avanti e crea degli incredibili intrugli da riga di comando!


Linux
  1. 8 suggerimenti per la riga di comando di Linux

  2. Comandi Bash bang:un trucco da conoscere per la riga di comando di Linux

  3. 5 esempi pratici di comando principale in Linux

  4. Esempi essenziali del comando file in Linux

  5. 5 Esempi pratici del comando dd in Linux

I 50 comandi IP utili di Linux per gli amministratori di rete

5 comandi per visualizzare il contenuto di un file nella riga di comando di Linux

Comando AWK in Linux/Unix

Una guida pratica per il comando chroot in Linux

Comando Unix LS:15 esempi pratici

UNIX / Linux:7 esempi pratici di comandi PS per il monitoraggio dei processi