모든 프로그램이 가진 세 문
Unix 의 모든 프로세스는 태어날 때 세 file descriptor 를 들고 있어: stdin (0), stdout (1), stderr (2). kernel 과 shell 이 프로그램과 대화하는 통로야. 파이프와 redirection 은 결국 이 세 문을 다른 곳에 연결하는 것뿐이야.
기본 연결
- stdin (0) — 키보드.
- stdout (1) — 터미널 화면.
- stderr (2) — 마찬가지로 터미널 화면이지만 분리된 스트림. 에러가 파이프 데이터에 안 섞이게.
왜 출력 스트림이 두 개?
find / -name foo 2>/dev/null | grep bar 를 보면 — 에러 ('Permission denied') 는 stderr 로 가서 2>/dev/null 로 잠재우고, 실제 매치는 파이프 타고 grep 으로 가. find 에 스트림이 하나뿐이면 노이즈와 데이터를 분리 못 해. 이 분할이 Unix 설계 최고의 결정 중 하나야.
숫자 핸들
Redirection 에 숫자 자주 봐: 2> (stderr), 1> (stdout, 기본), 2>&1 (stderr 를 stdout 에 합침). 이게 file descriptor 번호 — kernel 직속 핸들. 새 fd 도 만들 수 있어: exec 3> file 로 fd 3 열고 echo hello >&3 으로 쓸 수 있어.