> 운영 및 유지보수 > 리눅스 운영 및 유지 관리 > 리눅스에서 스트림이란 무엇을 의미합니까?

리눅스에서 스트림이란 무엇을 의미합니까?

青灯夜游
풀어 주다: 2023-03-17 09:55:42
원래의
1879명이 탐색했습니다.
<blockquote><p>리눅스에서 스트림은 데이터 스트림을 의미하는데, 이는 특정 순서로 읽혀진 데이터의 문자열이므로 데이터 흐름의 방향은 데이터 스트림의 읽기 순서가 됩니다. Linux 시스템이 데이터를 다른 파일로 읽은 후 출력 결과를 가져오는 프로세스를 리디렉션된 데이터 흐름이라고 합니다. Linux에서 명령을 입력하고 실행하면 화면에 두 가지 결과가 표시됩니다. 성공적인 작업 결과는 표준 출력이고, 실패한 작업 결과는 처리되지 않은 경우 표준 오류 출력입니다. 화면에 표시되고 데이터 흐름을 통해 리디렉션될 수 있습니다. </p></blockquote> <p><img src="https://img.php.cn/upload/article/202303/17/2023031709544952034.jpg" alt="리눅스에서 스트림이란 무엇을 의미합니까?" ></p> <p>이 튜토리얼의 운영 환경: linux7.3 시스템, Dell G3 컴퓨터. </p> <p><strong>Linux에서 스트림은 데이터 흐름을 의미합니다. </strong></p> <h2><strong>스트림(데이터 스트림)은 무엇을 의미하나요? </strong></h2> <p>스트림(데이터 스트림)은 특정 순서로 읽혀지는 데이터의 문자열이므로 데이터 흐름의 방향은 데이터 스트림의 읽기 순서입니다. </p> <p>데이터 스트림은 원래 통신 분야에서 사용되는 개념으로, 정보 전송에 사용되는 디지털로 인코딩된 신호 시퀀스를 나타냅니다. 이 개념은 1998년 문서 87에서 Henzinger에 의해 처음 제안되었습니다. 그는 데이터 스트림을 "미리 결정된 순서로 한 번만 읽을 수 있는 데이터 시퀀스"로 정의했습니다. </p> <p>Linux 시스템 리디렉션 데이터 흐름은 데이터를 다른 파일로 읽은 후 출력 결과를 가져오는 것입니다. </p> <h2><strong>Linux 데이터 흐름 리디렉션</strong></h2> <p>데이터 흐름 리디렉션은 단순히 특정 명령의 입력 데이터 소스 또는 출력 데이터를 다른 파일로 찾는 것입니다. Linux에서는 모든 것이 파일입니다. 여기에 있는 파일은 장치 파일, 일반 파일 등이 될 수 있습니다. </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>: 표준 오류 출력. 명령 실행이 실패한 후 반환되는 오류 메시지를 나타냅니다. </p></blockquote> <p>이 세 가지와 명령의 관계는 일반적으로 다음과 같습니다. </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{ 채우기:#552222;}#mermaid-svg-43Q0mtxvjga7WpCa .error-text{fill:#552222;스트로크:#552222;}#mermaid-svg-43Q0mtxvjga7WpCa .edge-thickness-normal{스트로크 너비:2px;}#mermaid -svg-43Q0mtxvjga7WpCa .edge-thickness-thick{스트로크 폭:3.5px;}#mermaid-svg-43Q0mtxvjga7WpCa .edge-pattern-solid{스트로크-dasharray:0;}#mermaid-svg-43Q0mtxvjga7WpCa .edge-pattern- 점선{뇌졸중:3;}#mermaid-svg-43Q0mtxvjga7WpCa .edge-pattern-dotted{뇌졸중-dasharray:2;}#mermaid-svg-43Q0mtxvjga7WpCa .marker{채우기:#333333;뇌졸중:#333333;}# mermaid-svg-43Q0mtxvjga7WpCa .marker.cross{스트로크:#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 범위{color:#333;}#mermaid-svg-43Q0mtxvjga7WpCa .label text,#mermaid-svg-43Q0mtxvjga7WpCa 범위{fill:#333;color:#333;}#mermaid-svg- 43Q0mtxvjga7WpCa .노드 직사각형,#mermaid-svg-43Q0mtxvjga7WpCa .노드 원,#mermaid-svg-43Q0mtxvjga7WpCa .노드 타원,#mermaid-svg-43Q0mtxvjga7WpCa .노드 다각형,#mermaid-svg-43Q0mt xvjga7WpCa .node 경로{fill:#ECECFF; 스트로크:#9370DB;스트로크 폭: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 :#333333; Stroke-width : 2.0px;}}#Mermaid-S-gga7WARC OFCOC OFCOC# 3333 ;fill:none;}#mermaid-svg-43Q0mtxvjga7WpCa .edgeLabel{배경-색상:#e8e8e8;text-align:center;}#mermaid-svg-43Q0mtxvjga7WpCa .edgeLabel ret{불투명도:0.5;배경색상:#e8e8e8; 채우기:#e8e8e8;}#mermaid-svg-43Q0mtxvjga7WpCa .클러스터 직사각형{채우기:#ffffde;스트로크:#aaaa33;스트로크 폭:1px;}#mermaid-svg-43Q0mtxvjga7WpCa .cluster 텍스트{채우기:#333;}# mermaid-svg-43Q0mtxvjga7WpCa .cluster 범위{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;글꼴 크기:12px;배경: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>stdin</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">stderr<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)">stdout<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"></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">File</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"></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"> </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;"></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></g></g></g></svg></div> <p>Linux 환경에서는 명령을 입력하고 실행하면 두 가지 결과가 화면에 표시됩니다. 성공적인 작업 결과는 표준 출력이고, 다른 하나는 실패한 작업 결과입니다. 표준 오류 출력입니다. </p> <ul style="list-style-type: disc;"> <li><p>표준 출력(STDOUT): 표준 출력은 명령 실행으로 반환된 올바른 정보를 나타냅니다. </p></li> <li><p>표준 오류 출력(STDERR): 표준 오류 출력은 명령 실행으로 반환된 오류 정보를 나타냅니다. </p></li> </ul> <p>STDOUT 및 STDERR이 처리되지 않으면 화면에 표시됩니다. 데이터 흐름 리디렉션을 통해 다른 파일에 저장할 수 있습니다. 파일에 저장되는 특수 문자는 다음과 같습니다. </p> <ul style="list-style-type: disc;"> <li> <p>표준 입력 stin: 코드 0이면 <code><</code> 또는 <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">로그인 후 복사</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">로그인 후 복사</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">로그인 후 복사</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="//m.sbmmt.com/course/list/33.html" target="_blank">를 사용하세요. 표준 출력 stout: 코드가 1이면 <code>> 또는 >></code></a></p>🎜🎜표준 오류 출력 stderr: 코드는 2입니다. <code>2></code> 또는 <code>2>></code>를 사용하세요. 🎜🎜🎜🎜🎜<span style="font-size: 18px;"><strong>2. 데이터 흐름 리디렉션 사용</strong></span>🎜</pre> <ul>🎜 <code>stdout code>: 표준 출력 리디렉션. 여기서 리디렉션되는 내용은 올바른 출력입니다. 🎜🎜rrreee🎜이 명령은 올바른 출력을 <code>~/out_right</code> 파일로 보냅니다. <code>~/out_right</code>가 없으면 자동으로 생성됩니다. 오류 메시지가 처리되지 않기 때문에 기본적으로 오류 출력이 화면 터미널에 출력됩니다. 이때 터미널에는 오류 출력만 표시됩니다. 🎜<ul>🎜<code>stderr</code>: 표준 오류 출력 리디렉션. 여기서 리디렉션되는 것은 오류 출력입니다. 🎜🎜rrreee🎜이 명령은 오류 출력을 <code>~/out_error</code> 파일로 지정합니다. <code>~/out_error</code>가 없으면 자동으로 생성됩니다. 올바른 정보가 처리되지 않기 때문에 기본적으로 올바른 출력이 화면 터미널에 출력됩니다. 이때 터미널은 올바른 출력만 표시합니다(지정된 파일을 찾을 수 없는 경우 화면에 출력되지 않습니다). . 🎜<ul>🎜<code>stdin</code>: 일반적으로 키보드 입력을 대체하기 위해 표준 입력을 사용합니다. 🎜🎜rrreee🎜<code>cat</code> 명령 뒤에 매개변수가 없으면 cat은 키보드에서 데이터를 읽습니다. 표준 입력을 사용하여 입력 소스를 <code>~/.bashrc</code> 파일로 지정합니다. 그런 다음 <code>></code>를 통해 <code>catfile</code> 파일에 대한 표준 출력을 찾으세요. <code>cat</code>는 파일을 보기 위한 명령입니다. 여기서는 <code>~/.bashrc</code> 파일을 직접 읽어 <code>catfile</code>로 출력합니다. 🎜🎜<a id="3_2_47">🎜<span style="font-size: 18px;"><strong>3、</strong><code><strong>>>,2>>,< ;<</strong></code></span>🎜<ul>🎜<code>>></strong></code>(<strong>누적</strong>): 표준 출력을 추가합니다. <code>cmd > file1</code>, <code>cmd</code> 명령은 <code>fiel1</code>인 경우 <code>stdout</code>을 <code>file1</code>로 출력합니다. >이전에 존재하고 데이터가 있는 경우 <code>file1</code>은 미리 지워진 다음 <code>stdout</code>에 기록됩니다. <code>cmd >> file1</code> 명령을 사용하면 <code>file1</code> 파일이 미리 삭제되지 않지만 입력 데이터가 파일 끝에 직접 추가됩니다. 🎜🎜<code>2>></code> (<strong>누적</strong>): 표준 오류 출력을 추가합니다. <code>>></code>와 유사합니다. 🎜🎜<code><<</code>(<strong>끝 키워드 지정</strong>): <code>입력 문자 끝</code>이 뒤에 옵니다. 키워드는 한 줄에 있어야 합니다. 그렇지 않으면 유효하지 않습니다. 🎜🎜rrreee🎜<a id="4_stdoutstderr_62">🎜<span style="font-size: 18px;"><strong>4. </strong><strong><code>stdout</code> 및 <code> stderr</code>통합 처리</strong></span>🎜🎜때때로 <code>stdout</code>와 <code>stderr</code>를 동일한 파일에 저장하고 나중에 확인해야 할 때가 있습니다. 🎜🎜기본 아이디어: 🎜<blockquote>🎜 <code>stderr</code>를 <code>stdout</code>으로 리디렉션한 다음 <code>stdout</code>을 통해 함께 리디렉션합니다. 🎜</blockquote>🎜다음 경우: 🎜rrreee🎜구현 방법이 두 개 이상 있으므로 더 이해하기 쉬운 작성 방법인 <code>find / -name .bashrc > list 2>&1</code>을 사용합니다. 이 코드의 <code>2>&1</code>은 표준 오류 출력(코드 2)을 표준 출력(코드 1)으로 리디렉션하는 것으로 이해될 수 있습니다. 그런 다음 <code>> list</code>는 표준 출력을 <code>list</code> 파일로 리디렉션합니다. 표준 오류 출력은 표준 출력으로 지정되므로 모든 출력은 궁극적으로 <code>list</code> 파일로 지정됩니다. 🎜🎜관련 추천: "🎜Linux 비디오 튜토리얼🎜"🎜</span></a> </ul> </ul></code> </ul>

위 내용은 리눅스에서 스트림이란 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿