출처 : https://okky.kr/articles/1450995
OKKY - 대충 알고있던 "/dev/null 2>&1"의 의미 (chatgpt4)
이제 모든 지식은 상향 평준화가 되는군요./dev/null 2>&1은 무슨뜻이지?/dev/null 2>&1은 Unix와 Linux에서 출력을 무시하도록 하는 방법입니다.- /dev/null은 Unix와 Linux 시스템에서 'null device'를 나타냅니다.
okky.kr
이제 모든 지식은 상향 평준화가 되는군요.
/dev/null 2>&1은 무슨뜻이지?
/dev/null 2>&1은 Unix와 Linux에서 출력을 무시하도록 하는 방법입니다.
- /dev/null은 Unix와 Linux 시스템에서 'null device'를 나타냅니다. 이 장치로 보내진 데이터는 모두 무시됩니다. 따라서, /dev/null로 리다이렉션하는 것은 해당 출력을 버리는 것과 같습니다.
- 2는 '표준 에러 출력'을 나타내는 파일 디스크립터입니다. 일반적으로 에러 메시지는 여기에 출력됩니다.
- >&는 '리다이렉션' 연산자입니다. 한 출력을 다른 출력으로 리다이렉션합니다.
- 1은 '표준 출력'을 나타내는 파일 디스크립터입니다. 일반적으로 명령의 결과는 여기에 출력됩니다.
따라서, /dev/null 2>&1은 "표준 출력과 표준 에러 출력을 모두 /dev/null로 리다이렉션하라"는 의미입니다. 즉, 모든 출력(일반 메시지와 에러 메시지 모두)을 버리라는 의미입니다. 이를 통해 명령이 실행되는 동안 출력되는 모든 메시지를 무시할 수 있습니다.
2>&1을 안적어주면 표준출력은 버려지고 오류 출력은 표시되겠네?
맞습니다. >/dev/null 또는 1>/dev/null 명령은 표준 출력(즉, 일반 메시지)을 /dev/null로 리다이렉트하여 버립니다. 이 명령에는 표준 에러 출력(즉, 에러 메시지)은 포함되지 않으므로, 에러 메시지는 여전히 출력됩니다.
반면에, 2>/dev/null 명령은 표준 에러 출력만 /dev/null로 리다이렉트하여 버립니다. 이 명령에는 표준 출력은 포함되지 않으므로, 일반 메시지는 여전히 출력됩니다.
따라서, 2>&1 부분을 생략하고 >/dev/null만 사용하면, 오류 메시지는 여전히 보이게 됩니다. 이는 일반적으로 스크립트나 프로그램이 실패할 경우 오류 메시지를 캐치하고 싶을 때 유용합니다. 이 메시지를 통해 어떤 문제가 발생했는지 파악할 수 있기 때문입니다. 반대로, 2>&1을 포함하여 >/dev/null 2>&1를 사용하면, 표준 출력과 표준 에러 출력 모두가 /dev/null로 리다이렉트되어 버려집니다. 즉, 모든 출력이 무시됩니다.
그런데 왜 2>&1을 명령어 뒤에 붙이는거지?
리다이렉션은 왼쪽에서 오른쪽으로 읽혀집니다. 따라서 2>&1 >/dev/null이라고 쓰면, 표준 에러 출력(2)은 표준 출력(1)으로 리다이렉트되고, 그 다음 표준 출력(1)은 /dev/null로 리다이렉트됩니다.
하지만 >/dev/null 2>&1라고 쓰면, 처음에 표준 출력(1)이 /dev/null로 리다이렉트되고, 그 다음 표준 에러 출력(2)은 표준 출력(1)으로 리다이렉트됩니다. 여기서 표준 출력(1)은 이미 /dev/null로 리다이렉트되었기 때문에, 결국 표준 에러 출력도 /dev/null로 리다이렉트됩니다.
즉, 두 경우 모두 표준 출력과 표준 에러 출력이 /dev/null로 리다이렉트되지만, 리다이렉션의 순서가 다릅니다. >/dev/null 2>&1 형식은 흔히 사용되는 방식으로, 이 형식을 사용하면 표준 출력과 표준 에러 출력을 모두 /dev/null로 리다이렉트할 수 있습니다.
오오.. 대단하네요.
오류 발생 /dev/null 2>&1 동작 테스트
sh -c 'echo "Hello, world"'
sh -c 'echo "Hello, world"' > /dev/null
sh -c 'echo "Hello, world ${qpe\e}"' > /dev/null
sh -c 'echo "Hello, world ${qpe\e}"' > /dev/null 2>&1
sh -c 'echo "Hello, world ${qpe\e}"' 2>&1 > /dev/null
2>&1 > /dev/null은 chatgpt4가 알려준게 잘못되었네요.
2가 1로 출력되고 나서 /dev/null로 버려지기 때문에 오류가 화면에 출력됩니다.
'프로그램개발 > Linux(Apache.vim)' 카테고리의 다른 글
[Linux, CentOS] 리눅스 언어설정 locale 변경 (2) | 2023.09.07 |
---|---|
Linux v 0.01 의 내부 살펴보기 ... (0) | 2023.08.14 |
80과 443 포트가 안열리네요. (2) | 2023.05.10 |
2022년 오픈소스 참고 (0) | 2022.10.26 |
[서버운영] 서버의 메모리는 그리 넉넉하지 않습니다. (0) | 2022.08.11 |