더북(TheBook)

표준 오류(stderr)와 리다이렉션

리눅스를 사용하다 보면 > 기호를 사용한 리다이렉션이 불가능한 출력이 있음을 알게 될 것이다. 오류 메시지 등이 이에 해당하는데, 예를 들어 cp 명령으로 존재하지 않는 파일을 복사하려 시도하면 다음과 같은 오류 메시지가 출력된다.

$ cp nonexistent.txt file.txt
cp: cannot stat 'nonexistent.txt': No such file or directory

표준 출력(stdout)을 파일로 리다이렉트해봐도, 오류 메시지가 그대로 화면에 출력된다.

$ cp nonexistent.txt file.txt > errors
cp: cannot stat 'nonexistent.txt': No such file or directory

그리고 리다이렉트 대상이 된 파일 error는 내용이 없다.

$ cat errors           (출력 내용 없음)

이렇게 되는 이유가 무엇일까? 리눅스 명령이 사용하는 출력 스트림은 하나가 아니기 때문이다. 표준 출력 외에도 표준 오류(stderr)라는 스트림이 오류 메시지 출력을 담당한다. 표준 출력과 표준 오류는 외부에서 봤을 때는 모두 화면에 출력되지만 내부적으로는 별개로 동작한다. 표준 오류 스트림을 리다이렉트하려면 파일명 앞에 2> 기호를 사용한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.