저는 방금 Linux에 노출된 지 열흘 정도 되었는데 영어가 좋지 않습니다. I/O 리디렉션 부분을 배우고 있습니다.
명령이 성공하면 화면에 오류 메시지가 표시되지 않지만 명령이 실패하면 화면에 오류 메시지가 표시되는 것으로 알고 있습니다.
예를 들어 cat file1
명령이 실행되기 전에 . stdin, stdout 및 stderr의 상태는 무엇입니까? 내가 명령을 내린 후. 표준 스트림의 상태는 어떻습니까?
file1이 존재하는 경우. 최종 입력은 file1이고 최종 출력은 터미널인 것 같습니다. (확실하지 않습니다.-0-) 오류 메시지가 표시되지 않습니다. 그렇다면 여기에 stderr이 없다는 뜻인가요? 아니면 어디에 있나요?
파일이 없을 때. 오류 메시지가 하나뿐입니다. 그렇다면 이것은 stdin이 없고 stderr를 stdout으로 리디렉션한다는 의미입니까?
이것을 나에게 설명해주실 수 있거나 매뉴얼 페이지 등을 사용하는 것과 같은 몇 가지 단서를 제공해 주시면 감사하겠습니다.
답변1
일반적으로 stdin
, stdout
및 stderr
항상 존재합니다.
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