GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Lesen und schreiben Sie Daten von überall mit Umleitung im Linux-Terminal

Die Umleitung von Eingabe und Ausgabe ist eine natürliche Funktion jeder Programmier- oder Skriptsprache. Technisch gesehen geschieht dies immer dann, wenn Sie mit einem Computer interagieren. Die Eingabe wird von stdin gelesen (Standardeingabe, normalerweise Ihre Tastatur oder Maus), die Ausgabe geht an stdout (Standardausgabe, ein Text- oder Datenstrom), und Fehler werden an stderr gesendet . Wenn Sie verstehen, dass diese Datenströme existieren, können Sie steuern, wohin Informationen gehen, wenn Sie eine Shell wie Bash oder Zsh verwenden.

Standard in, Standard out und Standard Error existieren als Speicherorte im Dateisystem unter Linux. Sie können sie in /dev sehen :

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

Sie können direkt nicht viel damit anfangen, aber es ist manchmal nützlich, sie als Meta-Speicherorte zu betrachten, an die Sie Daten senden können.

Die Grundlagen der Umleitung sind einfach:Verwenden Sie eine Anzahl von > Zeichen zum Umleiten der Ausgabe und einige < Zeichen um die Eingabe umzuleiten.

Ausgabe umleiten

So schreiben Sie die Ausgabe des Befehls ls in eine Datei:

$ ls > list.txt

Sie sehen die Ausgabe von ls nicht wie Sie es normalerweise tun würden, da die Ausgabe in die list.txt geschrieben wird Datei anstelle Ihres Bildschirms. Dies ist in der Tat so vielseitig, dass Sie damit sogar den Inhalt einer Datei in eine andere kopieren können. Es muss auch keine Textdatei sein. Sie können die Umleitung für Binärdaten verwenden:

$ cat image.png > picture.png

(Falls Sie sich fragen, warum Sie das jemals tun sollten, es ist für eine manchmal nützliche Auswirkung auf Dateiberechtigungen.)

Eingabe umleiten

Sie können die Eingabe auch "in" einen Befehl umleiten. Dies ist wohl weniger nützlich als das Umleiten der Ausgabe, da viele Befehle bereits fest codiert sind, um Eingaben von einem von Ihnen bereitgestellten Argument entgegenzunehmen. Es kann jedoch nützlich sein, wenn ein Befehl eine Liste von Argumenten erwartet und Sie diese Argumente in einer Datei haben und sie schnell aus der Datei in Ihr Terminal "kopieren und einfügen" möchten (außer Sie möchten eigentlich nicht kopieren und einfügen):

$ sudo dnf install $(<package.list)

Übliche Anwendungen der Eingabeumleitung sind das here-Dokument (oder einfach hier-doc kurz) und hier-string Techniken. Diese Eingabemethode leitet einen Textblock bis zu einer speziellen Dateiende-Markierung in den Standardeingabestrom um (die meisten Leute verwenden EOF , aber es kann jede Zeichenfolge sein, von der Sie erwarten, dass sie eindeutig ist). Versuchen Sie, dies einzugeben (bis zur zweiten Instanz von EOF ) in ein Terminal:

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

Das erwartete Ergebnis:

foo
bar
baz

Ein Hier-Dokument ist ein gängiger Trick, der von Bash-Skriptern verwendet wird, um mehrere Textzeilen in eine Datei oder auf den Bildschirm zu kopieren. Solange Sie nicht vergessen, die Klausel mit Ihrer End-of-File-Markierung zu beenden, ist dies ein effektiver Weg, unhandliche Listen von echo zu vermeiden oder printf Aussagen.

Ein hier-String ähnelt einem hier-doc , aber es besteht aus nur einem String (oder mehreren Strings, die als ein einzelner String mit Anführungszeichen getarnt sind):

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

Umleitung von Fehlermeldungen

Fehlermeldungen gehen an einen Stream namens stderr , bezeichnet als 2> zwecks Weiterleitung. Dieser Befehl leitet Fehlermeldungen an eine Datei namens output.log weiter :

$ ls /nope 2> output.log

Senden von Daten an /dev/null

Mehr über Bash

  • Bash-Spickzettel
  • Eine Einführung in die Programmierung mit Bash
  • Eine Anleitung für Systemadministratoren zum Bash-Scripting
  • Neueste Bash-Artikel

So wie es Orte für Standardeingang, Standardausgang und Fehler gibt, gibt es auch einen Ort für nirgendwo auf dem Linux-Dateisystem. Es heißt null , und es befindet sich in /dev , daher wird es oft von Leuten als "devnull" ausgesprochen, die es zu häufig verwenden, um "slash dev slash null" zu sagen.

Sie können Daten an /dev/null senden Weiterleitung nutzen. Zum Beispiel find Der Befehl ist in der Regel ausführlich und meldet häufig Berechtigungskonflikte beim Durchsuchen Ihrer Dateien:

$ 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

Der find Der Befehl verarbeitet dies als Fehler, sodass Sie nur die Fehlermeldungen nach /dev/null umleiten können :

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

Umleitung verwenden

Die Umleitung ist eine effiziente Methode, um Daten in Bash von einem Ort zum anderen zu übertragen. Möglicherweise verwenden Sie die Umleitung nicht ständig, aber wenn Sie lernen, sie bei Bedarf zu verwenden, können Sie viele unnötige Dateien öffnen und Daten kopieren und einfügen, die im Allgemeinen alle Mausbewegungen und viele Tastendrücke erfordern. Greifen Sie nicht zu solchen Extremen. Lebe das gute Leben und verwende die Weiterleitung.


Linux
  1. Finden Sie Dateien und Verzeichnisse unter Linux mit dem Befehl find

  2. Kopieren und Einfügen in der Linux-Befehlszeile mit xclip

  3. Arbeiten mit Eingabeausgabe und Fehlerumleitung in Linux

  4. So erfassen Sie Terminalsitzungen und geben sie mit dem Linux-Skriptbefehl aus

  5. Lesen und schreiben Sie in dieselbe Datei unter Linux, ohne sie zu überschreiben?

Verwalten Sie Ihren Kalender über das Linux-Terminal mit dem Befehl konsolekalendar

Vim-Tipps – Lesen und schreiben Sie entfernte Dateien mit Vim unter Linux

Linux-Dateiverwaltung über das Terminal

Sichern Sie Linux mit der Sudoers-Datei

Speichern Sie die Ausgabe eines Befehls vom Debian-Terminal in einer Datei

Wie lösche ich die erste Spalte (die eigentlich Zeilennamen sind) aus einer Datendatei in Linux?