GNU/Linux >> Linux Esercitazione >  >> Linux

Leggi e scrivi dati da qualsiasi luogo con reindirizzamento nel terminale Linux

Il reindirizzamento di input e output è una funzione naturale di qualsiasi linguaggio di programmazione o di scripting. Tecnicamente, accade intrinsecamente ogni volta che interagisci con un computer. L'input viene letto da stdin (input standard, di solito la tastiera o il mouse), l'output va a stdout (output standard, un flusso di testo o di dati) e gli errori vengono inviati a stderr . Comprendere l'esistenza di questi flussi di dati ti consente di controllare dove vanno le informazioni quando utilizzi una shell, come Bash o Zsh.

Standard in, standard out e standard error esistono come posizioni del filesystem su Linux. Puoi vederli in /dev :

$ ls /dev/std*
/dev/stderr@  /dev/stdin@  /dev/stdout@

Non puoi fare molto con loro direttamente, ma a volte è utile pensarli come meta-localizzazioni a cui puoi inviare dati.

Le basi del reindirizzamento sono semplici:usa un certo numero di > caratteri per reindirizzare l'output e un certo numero di < caratteri per reindirizzare l'input.

Reindirizzamento dell'output

Per scrivere l'output del comando ls in un file:

$ ls > list.txt

Non vedi l'output di ls come faresti normalmente, perché l'output viene scritto in list.txt file invece del tuo schermo. Questo è così versatile, infatti, che puoi persino usarlo per copiare il contenuto di un file in un altro. Non deve essere nemmeno un file di testo. Puoi utilizzare il reindirizzamento per i dati binari:

$ cat image.png > picture.png

(Nel caso ti stia chiedendo perché mai vorresti farlo, è per una ripercussione a volte utile sui permessi dei file.)

Reindirizzamento dell'input

Puoi anche reindirizzare l'input "in" un comando. Questo è probabilmente meno utile del reindirizzamento dell'output perché molti comandi sono già codificati per ricevere input da un argomento fornito. Può essere utile, tuttavia, quando un comando si aspetta un elenco di argomenti e hai quegli argomenti in un file e vuoi "copiarli e incollarli" rapidamente dal file nel tuo terminale (tranne che in realtà non vuoi copiare e incolla):

$ sudo dnf install $(<package.list)

Gli usi comuni del reindirizzamento dell'input sono il here-document (o semplicemente qui-doc in breve) e qui-string tecniche. Questo metodo di input reindirizza un blocco di testo nel flusso di input standard, fino a uno speciale indicatore di fine file (la maggior parte delle persone usa EOF , ma può essere qualsiasi stringa che si prevede sia univoca). Prova a digitarlo (fino alla seconda istanza di EOF ) in un terminale:

$ echo << EOF
> foo
> bar
> baz
> EOF

Il risultato atteso:

foo
bar
baz

Un qui-documento è un trucco comune utilizzato dagli scripter di Bash per scaricare diverse righe di testo in un file o sullo schermo. Finché non ti dimentichi di terminare la clausola con l'indicatore di fine file, è un modo efficace per evitare elenchi ingombranti di echo o printf dichiarazioni.

Una stringa qui è simile a un qui-doc , ma è costituito da una sola stringa (o più stringhe mascherate da un'unica stringa tra virgolette):

$ cat <<< "foo bar baz"
foo bar baz

Reindirizzamento dei messaggi di errore

I messaggi di errore vanno a uno stream chiamato stderr , designato come 2> ai fini del reindirizzamento. Questo comando indirizza i messaggi di errore a un file chiamato output.log :

$ ls /nope 2> output.log

Invio di dati a /dev/null

Altro su Bash

  • Cheat sheet di Bash
  • Un'introduzione alla programmazione con Bash
  • Una guida per l'amministratore di sistema allo scripting Bash
  • Ultimi articoli di Bash

Così come esistono posizioni per ingresso standard, uscita standard ed errore, esiste anche una posizione per nessun luogo sul filesystem Linux. Si chiama null e si trova in /dev , quindi è spesso pronunciato "devnull" da persone che lo usano troppo frequentemente per dire "slash dev slash null".

Puoi inviare dati a /dev/null usando il reindirizzamento. Ad esempio, il find il comando tende a essere dettagliato e spesso segnala conflitti di autorizzazione durante la ricerca nei file:

$ find ~ -type f 
/home/seth/actual.file
find: `/home/seth/foggy': Permission denied
find: `/home/seth/groggy': Permission denied
find: `/home/seth/soggy': Permission denied
/home/seth/zzz.file

Il find il comando lo elabora come un errore, quindi puoi reindirizzare solo i messaggi di errore a /dev/null :

$ find ~ -type f 2> /dev/null
/home/seth/actual.file
/home/seth/zzz.file

Utilizzo del reindirizzamento

Il reindirizzamento è un modo efficiente per ottenere dati da un luogo all'altro in Bash. Potresti non usare il reindirizzamento tutto il tempo, ma imparare a usarlo quando ne hai bisogno può farti risparmiare un sacco di inutili file di apertura e copia e incolla di dati, che generalmente richiedono il movimento del mouse e molte pressioni di tasti. Non ricorrere a tali estremi. Vivi una bella vita e usa il reindirizzamento.


Linux
  1. Copia i file nel terminale Linux

  2. Rinominare un file nel terminale Linux

  3. Sposta i file nel terminale Linux

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

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

Gestisci il tuo calendario dal terminale Linux con il comando konsolekalendar

Suggerimenti Vim:leggi e scrivi file remoti con Vim su Linux

Gestione file Linux dal terminale

Proteggi Linux con il file Sudoers

Salva l'output di un comando dal terminale Debian in un file

Qual è il comando per copiare, leggere e rimuovere file in Linux