Linux - 표준 출력(stdout)과 표준 에러(stderr)에 대해 알아보자.
표준 출력(stdout)이란?
명령어의 실행 결과를 출력할 곳(ex. 터미널, 파일 등)으로 이동시켜주는 통로를 뜻한다.
1
ls
위 명령어를 실행할 경우 실행 결과가 터미널 화면에 나타나게 되는데, 이는 표준 출력의 기본 값이 터미널 화면으로 설정되어 있기 때문이다.
이 기본 값을 바꾸는 방법은 리다이렉션을 통해 바꿀 수 있다.
리다이렉션이란 표준 출력, 에러 출력에 방향을 터미널 화면이 아닌 다른 경로로 바꾸는 것을 뜻한다.
표준 출력 리다이렉션
예시
1
ls > test.txt
ls의 결과가 터미널 화면이 아닌 test.txt 파일에 담기게 된다.
하지만, 위와 같이 > 하나만 사용해서 리다이렉션 시킬 경우 파일 내용이 쌓이지 않고 그때그때마다 덮어써지기 때문에 로그를 쌓는 경우에는 적절한 방법이 아니다.
이때는 아래와 같은 방식으로 해결이 가능하다.
1
ls >> test.txt
위처럼 >>를 사용하면 파일 내용이 덮어써지는 것이 아니라 계속 쌓이게 된다.
표준 에러 출력(stderr)이란?
명령어 실행 시 발생하는 에러를 출력할 곳(ex. 터미널 화면, 파일)으로 이동시켜주는 통로이다.
표준 출력은 정상적으로 실행된 명령어의 결과만 다루며, 명령어 실행 도중 에러가 발생했을 경우엔 표준 에러 출력에 의해 나타나진다.
표준 출력과 마찬가지로 설정된 기본값은 터미널 화면이다.
표준 에러 출력 리다이렉션
표준 에러 출력 결과를 터미널이 아닌 파일로 리다이렉션 시키려면 아래 명령어처럼 사용하면 된다.
1
ls abc 2> error.txt
표준 출력에서는 > 기호를 사용했지만, 표준 에러 출력에서는 2>를 사용하기 때문에 헷갈리지 않게 주의해야한다.
표준 출력과 마찬가지로 위 방식은 덮어쓰기 형태로 실행되기 때문에, 파일을 덮어쓰지 않고 쌓아가며 기록해야할 경우엔 아래 명령어처럼 사용한다.
1
ls abc 2>> error.txt
표준 출력, 표준 에러 출력 한 파일로 관리하기
표준 출력과 표준 에러 출력에 리다이렉션 사용 형태는 각각 다른 것을 확인할 수 있다.
만약 한 파일로 표준 출력, 표준 에러 출력을 관리하고 싶을 경우 아래 명령어처럼 사용이 가능하다.
1
ls >> test.txt 2>&1
2>&1: 표준 출력, 표준 에러 출력을 합친다는 의미로 사용