리눅스 stdin, stdout, stderr이란? (표준 스트림)
- 운영체제(OS)
- 2022. 10. 28.
모든 리눅스 세 개의 표준 스트림이 존재합니다. 입력 스트림, 출력 스트림, 오류 출력 스트림입니다. 각각 stdin
, stdout
, stderr
라고 부릅니다.
리눅스 표준 스트림
컴퓨터에서 스트림이란 데이터를 전송할 수 있다는 의미를 갖습니다. 리눅스의 표준 스트림은 텍스트 형태로 데이터를 전송합니다. 모든 리눅스 프로세스는 시작될 때 stdin, stdout, stderr를 연결합니다. std는 표준(standard)의 줄임말입니다.
3개의 표준 스트림을 간단히 정리하면 아래와 같습니다.
- stdin : 키보드로 텍스트를 입력하기 위해 사용됩니다. stdin은 숫자 0으로 표기합니다. 이 숫자는 쉘 스크립트에서 많이 사용되기 때문에 알아두는 게 좋습니다.
- stdout : 현재 쉘을 실행한 콘솔 또는 터미널에 명령어 입력에 따른 결과값 출력에 사용됩니다. 숫자 1로 표기합니다.
- stderr : stdout과 동일한 원리지만 에러 메시지를 출력하기 위해 사용됩니다. 숫자 2로 표기합니다.
stdin 예시
키보드로 쉘에 명령어를 입력하면 stdin입니다. enter를 누르면 쉘은 명령어를 수신하고 실행합니다.
[root@localhost ~]# ls
anaconda-ks.cfg mysql original-ks.cfg
키보드로 타이핑한 ls가 stdin입니다.
stdout 예시
[root@localhost ~]# ls -ltr
total 12
-rw-------. 1 root root 2052 Oct 22 19:08 original-ks.cfg
-rw-------. 1 root root 2772 Oct 22 19:08 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 Oct 22 19:27 mysql
ls -ltr 명령을 쉘이 수신해서 그에 맞는 결과를 출력했습니다. 이 출력 값들이 stdout입니다.
stderr 예시
[root@localhost ~]# cd noneDir
-bash: cd: noneDir: No such file or directory
위 예시에선 존재하지 않는 noneDir이라는 폴더로 이동하는 명령을 입력했습니다. 이에 “그런 디렉토리가 없다”는 에러 메시지가 출력됐습니다. 이처럼 에러 메시지를 출력하는 데는 stderr 스트림이 사용됩니다.
로그 파일명에 보이는 stderr, stdout
리눅스에 설치된 애플리케이션의 로그 파일명에 stderr 또는 stdout이 포함 것을 볼 수 있습니다. 보통 stderr에는 서비스에 대한 에러 메시지만 기록되며, stdout에는 정상적으로 동작한 info 로그를 포함해 에러 로그도 확인됩니다. 의미를 알고 읽으면 로그 해석에 도움이 됩니다.
반응형
'운영체제(OS)' 카테고리의 다른 글
윈도우 서버 리소스 모니터링과 보고서 생성 방법 (perfmon) (0) | 2022.11.04 |
---|---|
리눅스 > /dev/null 2>&1의 의미? 출력 억제 (0) | 2022.10.29 |
리눅스 메모리 사용량 확인 명령어 free (스왑 메모리란?) (0) | 2022.10.27 |
리눅스에서 zip 파일 해제하는 방법 (unzip) (0) | 2022.10.26 |
리눅스 MYSQL rpm 설치 방법 (인터넷 없이) (1) | 2022.10.25 |