STDOUT과 STDIN을 연결한다는 것은 무엇을 의미합니까?

STDOUT과 STDIN을 연결한다는 것은 무엇을 의미합니까?

나는 책을 읽고 있는데 다음과 같이 적혀 있습니다.

각 프로세스에는 "표준 입력"(STDIN), "표준 출력"(STDOUT) 및 "표준 오류"(STDERR)의 세 가지 사용 가능한 통신 채널이 있습니다.

대부분의 명령은 STDIN의 입력을 받아들이고 해당 출력을 STDOUT에 씁니다. STDERR에 오류 메시지를 씁니다. 이 규칙을 사용하면 빌딩 블록처럼 명령을 함께 연결하여 복합 파이프라인을 만들 수 있습니다.

쉘은 기호 <및 명령의 입력 또는 출력을 파일로 다시 라우팅하는 지침 >으로 해석합니다.>>

한 명령의 STDOUT을 다른 명령의 STDIN에 연결하려면 | 일반적으로 파이프라고 하는 기호를 사용합니다.

ps -ef | grep httpd

따라서 기본적으로 이것이 말하는 것은 표준 입력은 사용자가 파일에 쓸 수 있도록 하는 명령이고 표준 출력은 bash 쉘이 출력을 쉘에 쓸 수 있도록 하는 명령이며 표준 오류는 출력과 같지만 호출 시 파일 시스템에 오류가 발생한 경우에만 해당됩니다. 그런 다음 STDOUT과 STDIN을 연결하는 부분을 시작하지만 길을 잃었습니다.

답변1

표준 입력과 표준 출력은 명령이 아닙니다.

명령을 조립 라인이 있는 공장의 기계로 생각하십시오. 대부분의 기계는 입력 데이터용 컨베이어 벨트와 출력 데이터용 컨베이어 벨트로 설계되었습니다. 이들은 각각 표준 입력 및 표준 출력입니다. 표준 오류는 스크랩이 배출될 수 있는 기계 측면의 개구부입니다.

+-------+     +------------------+       +------------------+     +------+
| input |     |    machine A     |       |    machine B     |     |output|
| reser ­­­|=====|<stdin     stdout>|=======|<stdin     stdout>|=====|bucket|
| ‑voir |  →  |      stderr      |   →   |      stderr      |  →  |      |
+-------+     +------------------+       +------------------+     +------+
                      ||                          ||

위 이미지는 두 대의 기계를 통과하는 컨베이어 벨트를 보여줍니다. 데이터는 왼쪽의 입력 리포지토리에서 가져와 머신 A로 공급된 다음 출력은 (입력을 위해) 머신 B로 전달되며, 이 머신 B의 출력은 오른쪽의 출력 버킷에 저장됩니다.

유닉스 용어로 이것을 이렇게 부른다.관로. 비유는 파이프와 비슷합니다. 파이프는 기계 A를 기계 B에 연결합니다. 위 파이프의 쉘 구문은 다음과 같습니다.

<input-file.txt commandA | commandB >output-file.txt

이것< 리디렉션기호는 쉘이 시작하기 전에 commandA표준 입력을 파일에 연결 하도록 지시합니다. (명령 이름 앞이나 뒤에 리디렉션을 배치할 수 있습니다.) 리디렉션 기호는 쉘에게 표준 출력을 . 중간에 있는 파이프(" ") 기호는 쉘이 시작하기 전에 표준 출력을 표준 입력에 연결하도록 지시합니다.input-file.txtcommandA>commandBoutput-file.txt|commandAcommandB

명령에는 여러 개의 입력과 여러 개의 출력이 있을 수 있지만 명령에는 반드시 필요한 것은 아닙니다.다른 날.

답변2

standard input is a command that allows user to write to a file

명령이 아니라 흐름입니다. 표준 액세스는 사서함과 같습니다. 프로그램이 시작되면 메일을 받을 수 있는 상자와 메일을 보낼 수 있는 상자가 제공됩니다. 일반적으로 입력은 키보드에서 이루어지며 받은 편지함에 배치되고 보낸 편지함에 배치된 메시지는 결국 터미널 화면에 표시됩니다.

standard output is a command that has the bash shell write output to the shell

프로그램은 실제로 표준 출력 지점이 어디에 있는지 알지 못합니다. 그림에 표시된 것처럼 A를 B로 파이프하면 $ A | BA가 보낸 편지함에 메시지를 넣으면 결국 B의 받은 편지함에 도달하게 됩니다. B는 입력을 처리하고 자신의 메일을 보낼 편지함에 넣습니다. 이는 터미널에 표시됩니다.

위에서 언급했듯이 표준 입력/출력은 스트림입니다. 이메일, 또는파일 설명자는 흐름의 한쪽 끝입니다. 연결 파이프는 A의 표준 출력을 B의 표준 입력에 연결하는 것입니다.

관련 정보