터미널을 사용하다 보면 가끔 이상한 문장을 만나게 된다.

command > file 2>&1


숫자와 기호가 섞인 이 문장은 처음 보면 암호처럼 보인다. 많은 사람들은 이 문장을 그냥 외워서 사용한다. “stdout과 stderr를 같은 곳으로 보낸다”는 뜻이라는 정도만 알고 넘어간다.

하지만 조금만 깊이 들여다보면 이 짧은 문장 안에는 꽤 오래된 설계가 숨어 있다. 왜 Unix는 stdout과 stderr를 분리했을까? 왜 프로그램들은 | 하나로 서로 연결될 수 있을까? 왜 Unix에서는 장치, 파이프, 심지어 네트워크까지 모두 파일처럼 다뤄질까?

이 질문들을 따라가다 보면 결국 하나의 이야기로 이어진다. Unix는 단순한 운영체제가 아니라 프로그램을 연결해서 사용하는 시스템으로 설계되었다는 사실이다.

이 시리즈는 우리가 매일 사용하는 커맨드라인 문법 뒤에 숨은 Unix 설계 이야기를 풀어보려는 글이다. 2>&1 같은 작은 문장에서 시작해 파이프와 리디렉션, 파일 디스크립터, 그리고 “Everything is a file”이라는 Unix 철학까지 하나의 흐름으로 이어지는 이야기를 따라가 보려고 한다.

우리가 터미널에서 아무 생각 없이 입력하는 짧은 명령어들 속에는, 생각보다 오래된 아이디어와 꽤 흥미로운 설계가 숨어 있기 때문이다.