$ tty
/dev/tty0
존재하다
$cat
사용자 공간에서 cat 프로세스는 표준 입력이 /dev/tty0 파일로부터 입력을 받기를 기다립니다.
존재하지 않는 파일 fff를 나열할 때,
ls /fff > file1
ls cannot find file :file1 Access denied
stdout이 /dev/tty0 대신 file1로 리디렉션되지만 존재하지 않는 파일에 대한 오류는 stderr 파일 설명자를 통해 /dev/tty0에 표시됩니다.
질문:
stderr이 /dev/tty0에 stdout을 쓰는 것과 유사하다면 stderr의 목적은 무엇입니까?
/dev/tty0에 오류를 기록하기 위해 파일 설명자 stderr을 유지 관리하는 UNIX/Linux의 아이디어는 무엇입니까?
답변1
오류 스트림에서 출력 스트림(STDOUT, 파일 설명자 1)을 분리하려면 STDERR(파일 설명자 2)이 필요합니다.
분리하지 않으면 유효한 출력과 오류를 구분할 수 없습니다.
사례에서 볼 수 있듯이 두 스트림 모두 터미널에 연결되어 있으며 dup(2)
사용자 공간에서 간단한 파일 설명자 조작을 통해 쉽게 구별하거나 조작할 수 있습니다.
예를 들어 STDOUT을 한 파일로 보내고 STDERR을 다른 파일로 보내는 경우:
my_command >stdout.log 2>stderr.log
답변2
stdoout
각 UNIX 프로세스는 쓰기 전용, stdin
읽기 전용(제가 생각하는 대로) 및 비차단 읽기/쓰기 배포에서 시작 시 stderr
최대 한 개의 라인 출력 버퍼가 열려 있을 것으로 예상됩니다.
stderr
주로 소비자에게 즉시 출력을 제공하는 데 사용되며 최종 사용자 인터페이스 애플리케이션에 크게 의존합니다.