본문 바로가기

OS/Linux

[Linux]표준 스트림과 리다이렉션, 파이프

표준 스트림(Standard Stream)이 뭘까?

  • 스트림(Stream)이란 프로그램을 드나드는 데이터를 흐름으로 표현한 단어이다.
  • 보통 프로그램은 입력과 출력으로 이루어진다. 터미널을 예시로 들면 다음과 같다.

Terminal

  • UNIX에서는 장치를 추상화해서 각 장치를 파일처럼 다뤘다. 파일처럼 모든 장치들을 다루기 위해, 파일을 읽고 쓰고 오류를 표시하는 한 가지 방법으로 통일했다. 아래 표의 stdin(입력), stdout(출력), stderr(오류)이다.

Standard Stream

  • 따라서 정상 동작하는 프로그램을 실행할 때, 세 개의 스트림이 자동으로 열리고, 이를 표준 스트림이라 한다.

 

리다이렉션(Redirection)은 뭘까?

  • 표준 스트림의 흐름을 바꿔, 파일로 입/출력을 할 수 있도록 한다.
리다이렉션 기호 방향 의미
> 표준 출력 명령의 결과를 파일로 저장 (기존 파일 덮어씀)
>> 표준 출력(append) 명령의 결과를 기존 파일에 추가
< 표준 입력 파일의 데이터를 명령에 입력
  • 그렇다면 실행 중인 프로세스 목록을 보는 명령어인 ps aux를 사용하여 리다이렉션을 사용해 보자.
ps aux > ps.txt
head < ps.txt > sample.txt

  • 위 결과와 같이 실행 중인 프로세스 10개 목록이 ps.txt와 sample.txt에 잘 저장된 것을 알 수 있다.
  • 텍스트 편집 프로그램의 경우, 표준 입력은 키보드이고 표준 출력은 모니터이다. 그런데 내가 리다이렉션을 통해 ps aux의 결과를 표준 입력으로 바꿨고 표준 출력은 변함없이 모니터이다.
  • head 명령도 마찬가지이다. 표준 입력은 키보드이고 표준 출력은 모니터인데, 내가 리다이렉션을 통해 ps.txt 파일을 표준 입력으로 바꿨고 표준 출력은 변함없이 모니터이다. 따라서 위와 같은 결과가 나타난 것이다.
  • 비유하자면, 내가 시험을 칠 때, 표준 입력은 '나'이고 표준 출력은 '내 성적'이다. 그런데 부정행위로 사람을 매수하여 대리시험자를 구했다. 그렇다면 표준 입력은 '대리 시험자'이고 표준 출력은 '내 성적'이 된다.

 

파이프(Pipe)는 뭘까?

  • 명령어로 | 를 쓰는데 모양이 참 파이프 같다. 기능도 파이프 같다. 어떤 명령의 결과를 다시 어떤 명령의 입력으로 받아야할 때 사용되며 연결해주는 역할을 한다.
process1 | process2
  • process1의 출력을 process2의 입력으로 바꿔준다.
  • 비유하자면, 한 제조공장에서 자동차 생산라인이 있다면 작업자들은 일렬로 서서 자동차를 조립한다. 작업자 1이 작업을 끝낸 자동차를 작업자 2가 작업을 시작한다. 이렇듯 한 생산라인은 파이프로 연결되어있다.

 


참고할만한 아주 훌륭한 블로그 포스팅

'OS > Linux' 카테고리의 다른 글

[Linux]환경변수 설정  (0) 2022.02.13
[Linux]프로세스 관리  (0) 2022.02.11
[Linux]프로세스, 스레드, 멀티 스레드  (0) 2022.02.11
[Linux]패키지와 패키지 매니저  (0) 2022.02.11
[Linux]개념과 필요성  (0) 2022.02.09