안녕하세요. 이번 시간에는 /dev/null 2>&1의 의미를 알아보겠습니다. 이 글을 읽기 전에 파일 디스크립터와 dup2 함수 등에 대한 개념을 잡고 오시면 조금 더 편할 듯 싶습니다.
[관련글]
파일 디스크립터와 관련된 dup2 함수에 대해 알아봅시다.
먼저 0, 1, 2는 표준 입력인 stdin, 표준 출력인 stdout, 에러 stderr를 뜻하는 것은 알고 계실 겁니다. 다 터미널과 연관이 되어 있습니다. 따로 파일 디스크립터가 다른 것을 가리키게 하지 않는 (dup2나 dup 등을 이용해서) 이상은요. 파일 디스크립터 (fd)는 프로세스마다 독립적으로 가지고 있는 자원 중 하나입니다.
먼저, cat 2.txt는 2.txt의 내용을 출력해 줍니다. 만약에 없으면 No such file or directory를 출력합니다. 보니까, 2.txt가 없는 모양이군요.
이제 >를 봅시다. cat 2.txt를 /dev/null로 redirect 합니다. 그런데, 여전히 No such file or directory가 뜨네요. 이건 또 어찌 된 영문일까요? 사실 이 명령어는, 아래와 같습니다.
먼저 1번과 2번은 /dev/tty, 터미널을 보고 있어요. cat 2.txt를 하면 요래 보고 있습니다. 그런데, cat 2.txt > /dev/null을 하면, 1번이 /dev/null을 보게 됩니다.
그림으로 보면 이렇게 되는 셈입니다. 즉, 1번으로 출력되는 것들은 모조리 /dev/null로 들어간다는 의미입니다. 이 디바이스 파일은, 출력을 버려버릴 때 자주 언급되는 파일이므로, 알아두시면 좋습니다.
그 다음에 2>&1이 나오는데요. 문서에 나오는 i>&j입니다. 이것은 i번 파일 디스크립터를 j번으로 돌리라는 의미입니다.
1번이 /dev/null을 가리키고 있으니, 2번도 /dev/null을 가리키게 됩니다. 즉, 그림으로 그리면 이렇게 됩니다. 2번으로 나오는 No such file or directory도 /dev/null로 리다이렉트가 되니, 터미널에 아무것도 출력되지 않아요. 정리하면, cat 2.txt > /dev/null 2 > &1의 의미는, cat 2.txt의 출력 결과도, 에러 내용도 /dev/null에 리다이렉션 시켜서 출력을 버리겠다는 의미입니다.
반면에, cat 2.txt 2>&1 > /dev/null은 어떨까요?
일단 이 명령어는 아래와 같이 해석이 됩니다.
2번 STDERR가 STDOUT으로 redirect 된다. 그런데 1번 또한 /dev/tty이니, 출력하는 대상이 /dev/tty가 됩니다.
다음에 > /dev/null이 나왔습니다.
그러면 1번만 /dev/null로 리다이렉트가 됩니다. 2번 에러 내용은 /dev/tty로 출력되기 때문에 No such file 메세지를 터미널에서 볼 수 있습니다.
'OS > 리눅스' 카테고리의 다른 글
리눅스 echo 명령어 : 텍스트를 출력한다. (0) | 2021.08.05 |
---|---|
리눅스 tee 명령어 : 여러 파일과 표준 출력에 결과를 쓸 때 이용한다. (0) | 2021.08.01 |
리눅스 mkdir 명령어 : 디렉토리를 생성한다. (2) | 2021.07.06 |
리눅스 sh vs source 명령어의 차이를 알아봅시다. (2) | 2021.06.10 |
리눅스 zsh 환경변수 설정을 어떻게 하면 될까요? (0) | 2021.06.09 |
최근댓글