운영체제 | Linux Redirection & Pipe

성수당·2025년 9월 16일

운영체제

목록 보기
31/31
post-thumbnail

🥔 리눅스에서의 입출력 리디렉션과 파이프

Linux/Unix 환경에서는 커맨드라인에서 입출력 흐름을 제어할 수 있는 여러 방법이 존재한다. 그중에서도 리디렉션(redirection)파이프(pipe)데이터 흐름을 유연하게 제어하기 위한 핵심 기능이다.

🥔 표준 입출력 (Standard I/O)

리눅스는 기본적으로 세 가지 표준 스트림을 제공한다:

스트림파일 디스크립터설명
stdin0표준 입력 (keyboard 등)
stdout1표준 출력 (screen 등)
stderr2표준 에러 출력

모든 프로세스는 실행될 때 기본적으로 이 세 개의 스트림과 연결된다.

🥔 리디렉션(Redirection)

리디렉션은 기본 입출력 대상(화면, 키보드 등)을 다른 파일이나 장치로 바꾸는 것이다.

1. 출력 리디렉션 (stdout)

$ echo "hello" > file.txt
  • "hello"file.txt덮어쓰기(overwrite)
  • > 연산자는 stdout(1)을 파일로 리디렉션함
$ echo "world" >> file.txt
  • >> 연산자는 추가(append) 방식으로 리디렉션

2. 입력 리디렉션 (stdin)

$ wc < file.txt
  • file.txt의 내용을 표준 입력처럼 사용하여 wc 명령어에 전달

3. 에러 리디렉션 (stderr)

$ ls nofile 2> error.log
  • 존재하지 않는 파일을 조회할 때 발생하는 에러 출력(2번)error.log 파일로 보냄

4. stdout + stderr 함께 리디렉션

$ ls file nofile > out.txt 2>&1
  • 출력(1)과 에러(2)를 모두 out.txt에 저장
  • 2>&1은 "2번 출력도 1번 출력으로 리디렉션하라"는 의미

🥔 파이프(Pipe)

파이프(|)는 한 명령어의 출력을 다른 명령어의 입력으로 연결하는 방식이다.

$ ls -l | grep ".c"
  • ls -l 결과 중 .c가 포함된 라인만 출력함
  • |stdoutstdin으로 데이터를 연결함

여러 명령어를 체인처럼 연결하여 처리 흐름을 구성할 수 있음

$ ps aux | grep python | awk '{print $2}'
  • 실행 중인 python 프로세스들의 PID만 추출하는 예제

🥔 tee 명령어

tee는 출력을 파일에 저장하면서 동시에 화면에도 출력하는 명령어다.

$ ls -al | tee log.txt
  • ls -al 결과를 log.txt에 저장하면서 동시에 터미널에 출력함

🥔 실전 예제

  1. 로그 필터링 후 저장
$ cat app.log | grep ERROR > error.log
  • app.logERROR가 포함된 줄만 필터링해서 error.log에 저장
  1. 명령어 실행 결과 저장 및 동시에 확인
$ date | tee now.txt

🥔 정리

기능설명
>표준 출력을 덮어쓰기 방식으로 리디렉션
>>표준 출력을 추가 방식으로 리디렉션
<표준 입력을 파일로부터 받음
2>에러 출력을 파일로 리디렉션
2>&1에러 출력도 표준 출력과 같은 곳으로 리디렉션
``출력 → 입력으로 이어주는 파이프
tee출력을 파일과 화면에 동시에 출력
profile
말하는 감자🥔

0개의 댓글