<blockquote><p>Unter Linux bedeutet Stream Datenstrom, bei dem es sich um eine Zeichenfolge handelt, die in einer bestimmten Reihenfolge gelesen wird. Die Richtung des Datenflusses ist also die Lesereihenfolge des Datenstroms. Der Vorgang, bei dem das Linux-System die Ausgabeergebnisse importiert, nachdem die Daten in andere Dateien eingelesen wurden, wird als umgeleiteter Datenfluss bezeichnet. Nachdem ein Befehl unter Linux eingegeben und ausgeführt wurde, werden zwei Ergebnisse auf dem Bildschirm angezeigt: Das Ergebnis des erfolgreichen Vorgangs ist die Standardausgabe, und das Ergebnis des fehlgeschlagenen Vorgangs ist die Standardfehlerausgabe auf dem Bildschirm angezeigt und über den Datenfluss umgeleitet. Sie können es in anderen Dateien speichern. </p></blockquote>
<p><img src="https://img.php.cn/upload/article/202303/17/2023031709544952034.jpg" alt="Was bedeutet Stream unter Linux?" ></p>
<p>Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Dell G3-Computer. </p>
<p><strong>Unter Linux bedeutet Stream Datenfluss. </strong></p>
<h2><strong>Was bedeutet Stream (Datenstrom)? </strong></h2>
<p>Stream (Datenstrom) ist eine Zeichenfolge, die in einer bestimmten Reihenfolge gelesen wird. Die Richtung des Datenflusses ist also die Lesereihenfolge des Datenstroms. </p>
<p>Datenstrom war ursprünglich ein Konzept aus dem Kommunikationsbereich und stellte eine Folge digital codierter Signale dar, die bei der Übertragung von Informationen verwendet werden. Dieses Konzept wurde erstmals 1998 von Henzinger in Dokument 87 vorgeschlagen. Er definierte einen Datenstrom als „eine Folge von Daten, die nur einmal in einer vorgegebenen Reihenfolge gelesen werden kann“. </p>
<p>Der Datenfluss der Linux-Systemumleitung besteht darin, die Ausgabeergebnisse zu importieren, nachdem die Daten in andere Dateien eingelesen wurden. </p>
<h2><strong>Linux-Datenflussumleitung</strong></h2>
<p>Die Datenflussumleitung dient lediglich dazu, die Eingabedatenquelle zu lokalisieren oder Daten eines bestimmten Befehls in andere Dateien auszugeben. Unter Linux ist alles eine Datei. Die Dateien hier können Gerätedateien, normale Dateien usw. sein. </p>
<p><a id="1_stdin_stdout_stderr_5"></a><span style="font-size: 18px;"><strong>1. stdin stdout stderr</strong></span></p>
<blockquote><p><code>stdin</code>:标准输入。指的是为命令运行所提供的一些信息。<br><code>stdout</code>:标准输出。指的是命令执行所返回的正确信息。<br><code>stderr</code>: Standardfehlerausgabe. Bezieht sich auf die Fehlermeldung, die zurückgegeben wird, nachdem die Befehlsausführung fehlgeschlagen ist. </p></blockquote>
<p>Die Beziehung zwischen diesen drei und den Befehlen ist normalerweise wie folgt: </p>
<div class="mermaid sequence-diagram"><svg id="mermaid-svg-43Q0mtxvjga7WpCa" width="100%" xmlns="http://www.w3.org/2000/svg" height="158" style="max-width: 436.46875px;" viewbox="0 0 436.46875 158"><style>#mermaid-svg-43Q0mtxvjga7WpCa {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-43Q0mtxvjga7WpCa .error-icon{ fill:#552222;}#mermaid-svg-43Q0mtxvjga7WpCa .error-text{fill:#552222;Stroke:#552222;}#mermaid-svg-43Q0mtxvjga7WpCa .edge-thickness-normal{Stroke-width:2px;}#mermaid -svg-43Q0mtxvjga7WpCa .edge-thickness-thick{Stroke-width:3.5px;}#mermaid-svg-43Q0mtxvjga7WpCa .edge-pattern-solid{Stroke-dasharray:0;}#mermaid-svg-43Q0mtxvjga7WpCa .edge-pattern- gestrichelt{Stroke-Dasharray:3;}#mermaid-svg-43Q0mtxvjga7WpCa .edge-pattern-dotted{Strecke-dasharray:2;}#mermaid-svg-43Q0mtxvjga7WpCa .marker{fill:#333333;Stroke:#333333;}# mermaid-svg-43Q0mtxvjga7WpCa .marker.cross{stroke:#333333;}#mermaid-svg-43Q0mtxvjga7WpCa svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid -svg-43Q0mtxvjga7WpCa .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-43Q0mtxvjga7WpCa .cluster-label text{fill:#333;}#mermaid -svg-43Q0mtxvjga7WpCa .cluster-label span{color:#333;}#mermaid-svg-43Q0mtxvjga7WpCa .label text,#mermaid-svg-43Q0mtxvjga7WpCa span{fill:#333;color:#333;}#mermaid-svg- 43Q0mtxvjga7WpCa .node rect,#mermaid-svg-43Q0mtxvjga7WpCa .node circle,#mermaid-svg-43Q0mtxvjga7WpCa .node ellipse,#mermaid-svg-43Q0mtxvjga7WpCa .node.polygon,#mermaid-svg-43Q0m txvjga7WpCa .node path{fill:#ECECFF; Stroke:#9370DB;Stroke-width:1px;}#mermaid-svg-43Q0mtxvjga7WpCa .node .label{text-align:center;}#mermaid-svg-43Q0mtxvjga7WpCa .node.clickable{cursor:pointer;}#mermaid-svg -43Q0mtxvjga7WpCa .arrowheadPath{fill:#333333;}#mermaid-svg-43Q0mtxvjga7WpCa .edgePath .path{Stroke:#333333;Stroke-width:2.0px;}#mermaid-svg-43Q0mtxvjga7WpCa.flowchart-link{Stroke:#333 333 ;fill:none;}#mermaid-svg-43Q0mtxvjga7WpCa .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-43Q0mtxvjga7WpCa .edgeLabel rect{opacity:0.5;background-color:#e8e8e8; fill:#e8e8e8;}#mermaid-svg-43Q0mtxvjga7WpCa .cluster rect{fill:#ffffde;Stroke:#aaaa33;Stroke-width:1px;}#mermaid-svg-43Q0mtxvjga7WpCa .cluster text{fill:#333;}# mermaid-svg-43Q0mtxvjga7WpCa .cluster span{color:#333;}#mermaid-svg-43Q0mtxvjga7WpCa div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:" trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96,2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none; z-index:100;}#mermaid-svg-43Q0mtxvjga7WpCa :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style>
<g><g class="output"><g class="clusters"></g><g class="edgePaths"><g class="edgePath LS-A LE-B" style="opacity: 1;" id="L-A-B"><path class="path" d="M54.40625,79L61.493489583333336,79C68.58072916666667,79,82.75520833333333,79,96.9296875,79C111.10416666666667,79,125.27864583333333,79,132.36588541666666,79L139.453125,79" marker-end="url(#arrowhead34)" style="fill:none"></path><defs><marker id="arrowhead34" viewbox="0 0 10 10" refx="9" refy="5" markerunits="strokeWidth" markerwidth="8" markerheight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-B LE-C" style="opacity: 1;" id="L-B-C"><path class="path" d="M229.451171875,56L237.5322265625,51.833333333333336C245.61328125,47.666666666666664,261.775390625,39.333333333333336,277.8069661458333,35.166666666666664C293.8385416666667,31,309.7395833333333,31,317.6901041666667,31L325.640625,31" marker-end="url(#arrowhead35)" style="fill:none"></path><defs><marker id="arrowhead35" viewbox="0 0 10 10" refx="9" refy="5" markerunits="strokeWidth" markerwidth="8" markerheight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-B LE-D" style="opacity: 1;" id="L-B-D"><path class="path" d="M229.451171875,102L237.5322265625,106.16666666666667C245.61328125,110.33333333333333,261.775390625,118.66666666666667,277.8069661458333,122.83333333333333C293.8385416666667,127,309.7395833333333,127,317.6901041666667,127L325.640625,127" marker-end="url(#arrowhead36)" style="fill:none"></path><defs> <marker id="arrowhead36" viewbox="0 0 10 10" refx="9" refy="5" markerunits="strokeWidth" markerwidth="8" markerheight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g></g><g class="edgeLabels"><g class="edgeLabel" style="opacity: 1;" transform="translate(96.9296875,79)"><g transform="translate(-17.5234375,-13)" class="label"><rect rx="0" ry="0" width="35.046875" height="26"></rect><foreignobject width="35.046875" height="26"><div style="display: inline-block; white-space: nowrap;">
<span id="L-L-A-B" class="edgeLabel L-LS-A' L-LE-B">stdin</span>
</div></foreignobject></g></g><g class="edgeLabel" style="opacity: 1;" transform="translate(277.9375,31)"><g transform="translate(-21.453125,-13)" class="label"><rect rx="0" ry="0" width="42.90625" height="26"></rect><foreignobject width="42.90625" height="26"><div style="display: inline-block; white-space: nowrap;">
<span id="L-L-B-C" class="edgeLabel L-LS-B' L-LE-C">stderr</span>
</div></foreignobject></g></g><g class="edgeLabel" style="opacity: 1;" transform="translate(277.9375,127)"><g transform="translate(-22.703125,-13)" class="label"><rect rx="0" ry="0" width="45.40625" height="26"></rect><foreignobject width="45.40625" height="26"><div style="display: inline-block; white-space: nowrap;">
<span id="L-L-B-D" class="edgeLabel L-LS-B' L-LE-D">stdout</span>
</div></foreignobject></g></g></g><g class="nodes"><g class="node default" style="opacity: 1;" id="flowchart-A-18" transform="translate(31.203125,79)"><rect rx="5" ry="5" x="-23.203125" y="-23" width="46.40625" height="46" class="label-container"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-13.203125,-13)"><foreignobject width="26.40625" height="26"><div style="display: inline-block; white-space: nowrap;">Datei</div></foreignobject></g></g></g><g class="node default" style="opacity: 1;" id="flowchart-B-19" transform="translate(184.84375,79)"><rect rx="5" ry="5" x="-45.390625" y="-23" width="90.78125" height="46" class="label-container"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-35.390625,-13)"><foreignobject width="70.78125" height="26"><div style="display: inline-block; white-space: nowrap;">Befehl</div></foreignobject></g></g> </g><g class="node default" style="opacity: 1;" id="flowchart-C-21" transform="translate(377.0546875,31)"><rect rx="5" ry="5" x="-51.4140625" y="-23" width="102.828125" height="46" class="label-container"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-41.4140625,-13)"><foreignobject width="82.828125" height="26"><div style="display: inline-block; white-space: nowrap;">Bildschirm/Datei</div></foreignobject></g></g></g><g class="node default" style="opacity: 1;" id="flowchart-D-23" transform="translate(377.0546875,127)"><rect rx="5" ry="5" x="-51.4140625" y="-23" width="102.828125" height="46" class="label-container"></rect> <g class="label" transform="translate(0,0)"><g transform="translate(-41.4140625,-13)"><foreignobject width="82.828125" height="26"><div style="display: inline-block; white-space: nowrap;">Bildschirm/Datei</div></foreignobject></g></g></g></g></g></g></svg></div>
<p>Nachdem wir in der Linux-Umgebung einen Befehl eingegeben und ausgeführt haben, werden zwei Ergebnisse auf dem Bildschirm angezeigt: Das Ergebnis des erfolgreichen Vorgangs ist die Standardausgabe und das Ergebnis des fehlgeschlagenen Vorgangs ist die Standardfehlerausgabe. </p>
<ul style="list-style-type: disc;">
<li><p>Standardausgabe (STDOUT): Die Standardausgabe bezieht sich auf die korrekten Informationen, die bei der Befehlsausführung zurückgegeben werden. </p></li>
<li><p>Standardfehlerausgabe (STDERR): Die Standardfehlerausgabe bezieht sich auf die Fehlerinformationen, die von der Befehlsausführung zurückgegeben werden. </p></li>
</ul>
<p>Wenn STDOUT und STDERR nicht verarbeitet werden, werden sie auf dem Bildschirm angezeigt. Sie können durch Datenflussumleitung in anderen Dateien gespeichert werden: </p>
<ul style="list-style-type: disc;">
<li> <p>Standard-Eingabezeichen: Der Code 0 ist, verwenden Sie <code><</code> oder <code><<</code><code><</code>或<code><<</code></p></li><li><p>标准输出stout:代码为1,使用<code>></code>或<code>>></code></p>
</li>
<li><p>标准错误输出stderr:代码为2,使用<code>2></code>或<code>2>></code></p></li>
</ul>
<p><a id="2__21"></a><span style="font-size: 18px;"><strong>2、数据流重定向的使用</strong></span></p>
<ul><li>
<code>stdout</code>:标准输出重定向。这里重定向的是正确输出。</li></ul>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">find / -name '.bashrc' > ~/out_right</pre><div class="contentsignin">Nach dem Login kopieren</div></div>
<p>该命令将正确输出定向输入到文件<code>~/out_right</code>。如果<code>~/out_right</code>不存在,则自动创建。因为没对错误信息处理,错误输出默认输出到屏幕终端上,此时终端只会显示错误输出。</p>
<ul><li>
<code>stderr</code>:标准错误输出重定向。这里重定向的是错误输出。</li></ul>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">find / -name '.bashrc' 2> ~/out_error</pre><div class="contentsignin">Nach dem Login kopieren</div></div>
<p>该命令将错误输出定向输入到文件<code>~/out_error</code>。如果<code>~/out_error</code>不存在,则自动创建。因为没对正确信息处理,正确输出默认输出到屏幕终端上,此时终端只会显示正确输出(如果没找到指定文件,屏幕没有输出)。</p>
<ul><li>
<code>stdin</code>:一般使用标准输入来替换键盘输入。</li></ul>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">cat > catfile < ~/.bashrc</pre><div class="contentsignin">Nach dem Login kopieren</div></div><p><code>cat</code>命令后不接任何参数,cat会从键盘读取数据。使用标准输入,将输入来源定向到文件<code>~/.bashrc</code>。然后通过<code>>将标准输出定位到<code>catfile</code>文件。<code>cat</code>是查看文件的命令,这里直接读取文件<code>~/.bashrc</code>然后将其输出到<code>catfile</code>。<p><a id="3_2_47"></a><span style="font-size: 18px;"><strong>3、</strong><code><strong>>>,2>>,<<</strong></code></span></p><ul><li><code>>></strong></code>(<strong>累加</strong>):附加标准输出。<code>cmd > file1</code>,命令<code>cmd</code>将<code>stdout</code>输出到<code>file1</code>中,如果<code>fiel1</code>此前存在,且有数据,那么<code>file1</code>会事先被清空,然后写入<code>stdout</code>。而使用命令<code>cmd >> file1</code>,不会预先清空<code>file1</code>文件,而是直接在文件末尾加上输入的数据。<li>
<code>2>></code>(<strong>累加</strong>):附加标准错误输出。与<code>>></code>相似。</li>
<li>
<code><<</code>(<strong>指定结束关键字</strong>):后接<code>结束的输入字符</code>。关键字必须独占一行,否则无效。</li></ul>38bc79e9635f97138f8bc06dfef28877<p>实现方法不止一种,我们取较好理解的写法<code>find / -name .bashrc > list 2>&1</code>。这段代码中的<code>2>&1</code>可以理解为,将标准错误输出(代码为2)重定向为标准输出(代码为1)。然后<code>> list</code>将标准输出重定向到文件<code>list</code>。因为标准错误输出被定向为标准输出,所以最后所有输出都被定向到文件<code>list</code>
</li></span></p><p><a href="http://www.php.cn/course/list/33.html" target="_blank">Standardausgabe: Der Code ist 1, verwenden Sie <code>> oder >></code></a></p>🎜🎜Standardfehlerausgabe stderr: Code ist 2, verwenden Sie <code>2></code> oder <code>2>></code> 🎜🎜🎜🎜🎜<span style="font-size: 18px;"><strong>2. Verwendung der Datenflussumleitung</strong></span>🎜</pre>
<ul>🎜 <code>stdout code>: Standardausgabeumleitung. Was hier umgeleitet wird, ist die korrekte Ausgabe. 🎜🎜rrreee🎜Dieser Befehl leitet die korrekte Ausgabe an die Datei <code>~/out_right</code>. Wenn <code>~/out_right</code> nicht existiert, wird es automatisch erstellt. Da die Fehlermeldung nicht verarbeitet wird, wird die Fehlerausgabe standardmäßig an das Bildschirmterminal ausgegeben. Zu diesem Zeitpunkt zeigt das Terminal nur die Fehlerausgabe an. 🎜<ul>🎜<code>stderr</code>: Standardfehlerausgabeumleitung. Was hier umgeleitet wird, ist die Fehlerausgabe. 🎜🎜rrreee🎜Dieser Befehl leitet die Fehlerausgabe an die Datei <code>~/out_error</code> weiter. Wenn <code>~/out_error</code> nicht existiert, wird es automatisch erstellt. Da die korrekten Informationen nicht verarbeitet werden, wird standardmäßig die korrekte Ausgabe an das Bildschirmterminal ausgegeben. Zu diesem Zeitpunkt zeigt das Terminal nur die korrekte Ausgabe an (wenn die angegebene Datei nicht gefunden wird, erfolgt keine Ausgabe auf dem Bildschirm). . 🎜<ul>🎜<code>stdin</code>: Verwenden Sie im Allgemeinen die Standardeingabe, um die Tastatureingabe zu ersetzen. 🎜🎜rrreee🎜Ohne Parameter nach dem Befehl <code>cat</code> liest cat Daten von der Tastatur. Leiten Sie die Eingabequelle mithilfe der Standardeingabe zur Datei <code>~/.bashrc</code>. Suchen Sie dann über <code>></code> die Standardausgabe in der Datei <code>catfile</code>. <code>cat</code> ist ein Befehl zum Anzeigen von Dateien. Dabei wird die Datei <code>~/.bashrc</code> direkt gelesen und dann in <code>catfile</code> ausgegeben. 🎜🎜<a id="3_2_47">🎜<span style="font-size: 18px;"><strong>3、</strong><code><strong>>>,2>>,< ;<</strong></code></span>🎜<ul>🎜<code>>></strong></code>(<strong>Accumulate</strong>): Standardausgabe anhängen. <code>cmd > file1</code>, der Befehl <code>cmd</code> gibt <code>stdout</code> nach <code>file1</code> aus, wenn <code>field1</code>Wenn es bereits existiert und Daten enthält, wird <code>file1</code> im Voraus gelöscht und dann nach <code>stdout</code> geschrieben. Bei Verwendung des Befehls <code>cmd >> file1</code> wird die Datei <code>file1</code> nicht vorab gelöscht, sondern die Eingabedaten werden direkt am Ende der Datei hinzugefügt. 🎜🎜<code>2>></code> (<strong>Akkumulieren</strong>): Standardfehlerausgabe anhängen. Ähnlich wie <code>>></code>. 🎜🎜<code><<</code> (<strong>Endschlüsselwort angeben</strong>): gefolgt von <code>Endeingabezeichen</code>. Das Schlüsselwort muss in einer eigenen Zeile stehen, sonst ist es ungültig. 🎜🎜rrreee🎜<a id="4_stdoutstderr_62">🎜<span style="font-size: 18px;"><strong>4. </strong><strong><code>stdout</code> und <code> stderr</code>Einheitliche Verarbeitung</strong></span>🎜🎜Manchmal müssen wir sowohl <code>stdout</code> als auch <code>stderr</code> in derselben Datei speichern und sie später anzeigen. 🎜🎜Grundidee: 🎜<blockquote>🎜<code>stderr</code> nach <code>stdout</code> umleiten und dann gemeinsam über <code>stdout</code> umleiten. 🎜</blockquote>🎜Der folgende Fall: 🎜rrreee🎜Es gibt mehr als eine Implementierungsmethode, wir verwenden die besser verständliche Schreibmethode <code>find / -name .bashrc > list 2>&1</code>. <code>2>&1</code> in diesem Code kann als Umleitung der Standardfehlerausgabe (Code 2) zur Standardausgabe (Code 1) verstanden werden. Dann leitet <code>> list</code> die Standardausgabe in die Datei <code>list</code> um. Da die Standardfehlerausgabe als Standardausgabe weitergeleitet wird, wird die gesamte endgültige Ausgabe an die Datei <code>list</code> weitergeleitet. 🎜🎜Verwandte Empfehlungen: „🎜Linux-Video-Tutorial🎜“🎜</span></a>
</ul>
</ul></code>
</ul>
Das obige ist der detaillierte Inhalt vonWas bedeutet Stream unter Linux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!