stderr (표준 오류)
100%

Text-Fu · 레슨 3

stderr (표준 오류)

Bash에서 표준 오류를 별도로 리디렉션하거나 표준 출력과 결합하는 방법을 배웁니다.

프로그램은 보통 정상 결과를 표준 출력에, 진단 메시지를 stderr로 줄여 쓰는 표준 오류라는 별도 스트림에 씁니다. 스트림을 분리하면 오류 메시지를 섞지 않고 유용한 데이터를 저장할 수 있습니다.

정상 출력과 오류 분리하기

존재하지 않는 경로를 지정한 명령어를 살펴보겠습니다.

$ ls /fake/directory > peanuts.txt
ls: cannot access '/fake/directory': No such file or directory

>는 stdout만 리디렉션합니다. 진단은 여전히 터미널에 연결된 stderr로 나갑니다. 한편 쉘은 ls에 정상 결과가 없어도 stdout용 peanuts.txt를 만들거나 잘라냅니다.

표준 스트림은 관례상 다음 파일 디스크립터를 사용합니다.

  • 0: stdin (표준 입력)
  • 1: stdout (표준 출력)
  • 2: stderr (표준 오류)

ls /missing > results.txt의 오류가 보통 터미널에 남는 이유는 무엇인가요?

2>로 stderr 리디렉션하기

stderr를 파일로 리디렉션하려면 파일 디스크립터 2 뒤에 > 연산자를 사용합니다. 이 명령은 모든 오류 메시지를 지정된 stderr 파일로 보냅니다.

$ ls /fake/directory 2> errors.txt

쉘은 errors.txt를 만들거나 잘라내고 디스크립터 2에 연결합니다. stdout은 기존 목적지를 유지합니다. 오류 출력을 추가하려면 2>> errors.txt를 사용합니다.

stdout은 기존 목적지에 둔 채 find /restricted의 진단으로 errors.log를 교체하는 명령어는 무엇인가요?

stdout과 stderr 결합하기

정상 출력과 오류 메시지를 모두 동일한 파일에 캡처하고 싶다면 어떻게 해야 할까요? 두 스트림을 모두 리디렉션하여 이를 수행할 수 있습니다.

$ ls /fake/directory /etc/passwd > combined.txt 2>&1

이것을 분석해 보겠습니다.

  1. > combined.txt는 stdout을 파일에 연결합니다.
  2. 2>&1stderr(파일 디스크립터 2) 를 stdout(파일 디스크립터 1) 이 현재 가리키고 있는 위치로 리디렉션합니다.

리디렉션은 왼쪽에서 오른쪽으로 처리되므로 순서가 중요합니다. 순서를 뒤집으면 결과도 달라집니다.

$ ls /fake/directory /etc/passwd 2>&1 > regular.txt

여기서는 stderr가 먼저 stdout의 원래 터미널 목적지를 복제하고, 그 뒤 stdout만 regular.txt로 이동하므로 두 스트림이 다른 곳으로 갑니다.

command의 stdout과 stderr를 모두 all.log로 보내는 Bash 리디렉션은 무엇인가요?

stdoutstderr를 모두 리디렉션하는 더 현대적이고 짧은 방법은 &>를 사용하는 것입니다.

$ ls /fake/directory /etc/passwd &> combined.txt

Bash에서 두 스트림을 추가하려면 &>>를 사용합니다. 명시적인 > file 2>&1 형식도 쉘 스크립트와 문서에 자주 나오므로 알아둘 가치가 있습니다.

build의 stdout과 stderr를 모두 build.log에 추가하는 Bash 명령어는 무엇인가요?

의도적으로 스트림 버리기

때로는 명령을 실행하고 잠재적인 오류 메시지를 완전히 무시하고 싶을 수 있습니다. 이 작업을 수행하려면 stderr/dev/null이라는 특수 파일로 리디렉션할 수 있으며, 이 파일은 기록되는 모든 데이터를 폐기합니다.

$ ls /fake/directory 2> /dev/null

이는 명령어를 성공하게 만들거나 종료 상태를 바꾸지 않고 진단 스트림만 숨깁니다. 문제 해결 중에는 필요한 정보를 버리지 말고 stderr를 보존하거나 표시하세요.

check-data 2> /dev/null은 무엇을 바꾸나요?

세 표준 스트림 관리는 다음 실습에서 연습해 보세요.

  1. Linux 에서 입력 및 출력 리디렉션 - 이 랩에서는 Linux 셸에서 입력 및 출력을 리디렉션하는 방법을 배웁니다. 표준 출력 (stdout), 표준 오류 (stderr) 및 표준 입력 (stdin) 을 제어하고 >, >>, 2> 및 tee 명령과 같은 연산자를 사용하여 데이터 흐름을 조작하는 방법을 연습합니다.

레슨 완료

stderr (표준 오류) 완료

이제 진단 메시지를 정상 출력과 분리하거나 함께 결합할 수 있습니다.

  • stderr가 파일 디스크립터 2임을 알 수 있습니다.

  • 2> 또는 2>>로 오류 로그를 교체하거나 추가할 수 있습니다.

  • 여러 리디렉션을 왼쪽에서 오른쪽으로 적용할 수 있습니다.

  • 두 출력 스트림을 의도한 구문으로 결합할 수 있습니다.

  • 진단 손실을 감수할 수 있을 때만 버릴 수 있습니다.

학습 진행 상황 저장

무료 계정을 만들어 이 레슨을 저장하고 어떤 기기에서든 계속 학습하세요.

무료 계정 만들기
다음 수업
Text-Fu(으)로 돌아가기