시스템 소프트웨어 | 리다이렉션과 파이프

Faithful Dev·2025년 1월 28일

컴퓨터 공학

목록 보기
51/81

Standard Stream (표준 스트림)

프로그램이 데이터를 입력받거나 출력하는 과정에서 사용하는 기본 데이터 흐름이다. 모든 프로세스는 실행 시 다음 세 가지 표준 스트림을 사용한다.

표준 입력 (Standard Input, stdin)

  • 디폴트로 키보드 입력을 받아 프로그램으로 전달한다.
  • 파일 디스크립터 번호: 0

키보드로 입력한 텍스트를 읽는 경우.

cat

위 명령어를 실행하면 키보드 입력이 표준 입력으로 전달되고, 엔터를 치면 출력된다.

표준 출력 (Standard Output, stdout)

  • 디폴트로 터미널(화면)에 출력되는 데이터를 담당한다.
  • 파일 디스크립터 번호: 1
  • 예: echo "Hello"는 문자열을 표준 출력으로 전달한다.

표준 오류 (Standard Error, stderr)

  • 에러 메시지를 터미널로 출력한다. 일반 출력과 분리되어 처리한다.
  • 파일 디스크립터 번호: 2

잘못된 명령 실행 시 발생하는 오류 메시지.

ls nonexistentfile

파일이 없다는 에러 메시지가 stderr로 출력된다.


리다이렉션 (Redirection)

리다이렉션은 표준 입력, 출력, 오류의 디폴트 흐름(터미널)을 파일이나 다른 곳으로 변경하는 방법이다.

출력 리다이렉션 (>)

  • 표준 출력을 파일에 저장한다.
  • 기존 파일이 있으면 덮어쓴다.
echo "Hello, World!" > output.txt # `output.txt`에 "Hello, World!"가 저장된다.

출력 추가 (>>)

  • 표준 출력을 파일에 추가한다.
echo "Additional Line" >> output.txt

입력 리다이렉션 (<)

  • 파일의 내용을 표준 입력으로 전달한다.
cat < input.txt

에러 리다이렉션 (2>)

  • 표준 오류를 파일에 저장한다.
ls nonexistentfile 2> error.log

출력과 오류 동시 리다이렉션 (&>)

  • 표준 출력과 오류를 하나의 파일로 저장한다.
command &> output.log

파이프 (Pipe)

파이프는 하나의 프로세스 출력(stdout)다른 프로세스 입력(stdin)으로 연결하는 방식이다. 이는 프로그램 간의 데이터를 실시간으로 전달할 때 매우 유용하다.

기본 문법

command1 | command2

작동 방식

  • command1의 표준 출력이 command2의 표준 입력으로 전달된다.

예시

ls -l | grep ".txt"
  1. ls -l 명령어는 디렉토리 파일 목록을 출력한다.
  2. 파이프를 통해 출력이 grep 명령어로 전달된다.
  3. grep.txt가 포함된 파일만 필터링한다.

복잡한 파이프라인

ps aux | grep python | sort -k 3 -r
  1. ps aux: 모든 프로세스 정보를 출력.
  2. grep python: 출력에서 python 관련 프로세스만 필터링.
  3. sort -k 3 -r: CPU 사용량 기준으로 내림차순 정렬.

정리

  1. Standard Stream은 데이터 흐름의 기본.
  2. 리다이렉션을 사용하여 데이터 흐름을 파일 또는 다른 대상에 저장.
  3. 파이프를 통해 명령어 간에 데이터를 실시간으로 전달.

이를 조합하면 유연한 데이터 처리가 가능하며, 효율적인 작업 흐름을 설계할 수 있다.

profile
Turning Vision into Reality.

0개의 댓글