명령이 실행될 때 표준 I/O 스트림의 상태는 무엇입니까?

명령이 실행될 때 표준 I/O 스트림의 상태는 무엇입니까?

저는 방금 Linux에 노출된 지 열흘 정도 되었는데 영어가 좋지 않습니다. I/O 리디렉션 부분을 배우고 있습니다.

명령이 성공하면 화면에 오류 메시지가 표시되지 않지만 명령이 실패하면 화면에 오류 메시지가 표시되는 것으로 알고 있습니다.

예를 들어 cat file1명령이 실행되기 전에 . stdin, stdout 및 stderr의 상태는 무엇입니까? 내가 명령을 내린 후. 표준 스트림의 상태는 어떻습니까?

file1이 존재하는 경우. 최종 입력은 file1이고 최종 출력은 터미널인 것 같습니다. (확실하지 않습니다.-0-) 오류 메시지가 표시되지 않습니다. 그렇다면 여기에 stderr이 없다는 뜻인가요? 아니면 어디에 있나요?

파일이 없을 때. 오류 메시지가 하나뿐입니다. 그렇다면 이것은 stdin이 없고 stderr를 stdout으로 리디렉션한다는 의미입니까?

이것을 나에게 설명해주실 수 있거나 매뉴얼 페이지 등을 사용하는 것과 같은 몇 가지 단서를 제공해 주시면 감사하겠습니다.

답변1

일반적으로 stdin, stdoutstderr항상 존재합니다.

ls -l /proc/self/fd

그러나 모든 명령이 이를 사용하는 것은 아닙니다. 명령이 작성된 위치를 확인할 수 있습니다.

> strace -e trace=write cat nonexistfile
write(2, "cat: ", 5cat: )                    = 5
write(2, "nonexistfile", 12nonexistfile)            = 12
write(2, ": No such file or directory", 27: No such file or directory) = 27
write(2, "\n", 1
)                       = 1

또는 더 간단하게: 비교

command >/dev/null

그리고

command 2>/dev/null

관련 정보