Mind Doodle

리눅스(Linux) 출력버리기( > /dev/null ), [null 장치, redirection] 본문

IT/Linux

리눅스(Linux) 출력버리기( > /dev/null ), [null 장치, redirection]

Mind Doodle 2020. 6. 18. 18:59

[ 환경 ]

명령어를 확인한 환경은 다음과 같고 OS에 따라서 명령어 입력방법이 달라질 수 있습니다.

유닉스 계열의 운영체제에서는 일반적으로 동일한 결과를 보여주고 있습니다.

 

< 운영체제(OS) >

- Ubuntu 18.04 LTS (64 bit, kernel : 5.3.0-51-generic)

 

 

[ 내용 ]

1. 표준 출력 버리기

터미널상에서 명령어를 입력하고 그에 대한 표준 출력이 표시되지 않게 하기 위해서 자주 사용하는 방법은 다음과 같습니다.

명령어 > /dev/null

여기서 알아두면 좋은 개념은 2가지가 있습니다. 

첫 번째는 null 장치(null device)이고 두 번째는 리다이렉션(redirection)입니다.

자세한 내용은 아래에 4, 5번 항목에서 설명하도록 하겠습니다.

 

- 예시

예시 사진에서 보이는 바와 같이 'test.txt' 파일에는 'Mind Doodle Test'라는 문구가 저장되어 있습니다. cat 명령어를 사용하여 'test.txt' 내용을 표준 출력으로 터미널상에 표시하였습니다.

그다음으로 "cat test.txt > /dev/null" 명령을 입력하여 표준 출력을 "/dev/null"로 리다이렉션 하여 출력 내용을 버리도록 하였습니다.

 

스크립트 등에서 표준 출력을 표시하고 싶지 않을 경우에 유용하게 사용할 수 있습니다.

 

 

2. 표준 오류 버리기

표준 출력을 버리는 방법과 마찬가지로 표준 오류 또한 null 장치와 리다이렉션을 이용하여 표시하지 않을 수 있습니다.

차이점은 리다이렉션에서 표준 출력이 아닌 표준 오류를 null 장치로 보내주도록 지정하는 것입니다. 

명령어 2> /dev/null

리다이렉션 '2>'가 표준 오류를 처리한다는 표시입니다.

 

- 예시

'no_test.txt'라는 존재하지 않은 파일에 대해서 cat 명령를 수행하였고 파일이 없으므로 "No such file or directory"라는 에러 메시지를 출력하였습니다.

표준 출력을 null 장치로 리다이렉션 해보면 "No such file or directory"라는 메시지가 그대로 출력되는 것을 알 수 있습니다. 이 메시지가 표준 출력이 아니기 때문에 터미널상에서 출력이 되는 것임을 알 수 있습니다.

"cat no_test.txt 2> /dev/null" 입력을 하게 되면 아무런 오류 메시지도 출력이 되지 않게 됩니다. 표준 오류를 null 장치로 리다이렉션 하였기 때문에 아무런 메시지도 표시되지 않게 된 것입니다.

 

 

3. 표준 출력과 표준 출력장치 변경

명령어 > /dev/null 2>&1

스크립트 등에서 다음과 같은 구문을 볼 수가 있습니다.

위와 같은 구문은 표준 출력을 null 장치로 리다이렉션 하고 표준 오류에 대한 리다이렉션을 표준 출력으로 한다는 의미입니다. 그래서 표준 출력과 표준 오류에 대한 모든 스트림은 null 장치로 보내게 됩니다.

좀 더 세부적으로 설명을 해보자면 "명령어 > /dev/null"은 표준 출력을 null 장치로 리다이렉션 합니다.

"2>"는 파일 디스크립터 2번인 표준 오류를 리다이렉션 하겠다는 의미입니다.

"&1"은 파일 디스크립터에서 표준 출력 1로 지정된 장치를 의미합니다.

종합적으로 보면 표준 출력에 대한 리다이렉션 장치로 null 장치를 설정하고, 표준 오류에 대한 리다이렉션 장치를 표준 출력 장치로 설정함으로써 표준 출력과 표준 오류에 대한 결과를 모두 null 장치로 보내게 됩니다.

 

- 예시

표준 출력과 표준 오류에 대한 메시지 모두 null 장치로 리다이렉션함으로써 터미널상에 어떠한 표시도 나타나지 않습니다.

 

 

4. null 장치(디바이스)

null 장치(디바이스)는 기록 대상이 되는 모든 데이터를 버리지만 쓰기 작업은 성공했다고 보고하는 장치 파일입니다.

이 장치는 유닉스 계열에서는 /dev/null이라고 부르며 어떠한 프로세스에도 데이터를 제공하지 않고 그 즉시 EOF를 내보냅니다.

일반적으로 출력이 필요 없는 경우에 리다이렉션을 이용하여 출력을 null 장치로 보내는 방법으로 자주 이용됩니다.

/dev/null

 

 

5. 리다이렉션(redirection)

리다이렉션은 컴퓨팅에서 표준 스트림을 사용자 지정 위치로 우회할 수 있는 다양한 유닉스 셸을 포함한 대부분의 명령어 인터프리터에 일반적인 명령입니다.

표준 스트림에 대한 방향을 지정한다고 보면 이해하는데 도움이 될 것입니다.

 

< 표준 스트림 >

유닉스 계열의 표준 스트림은 3가지로 분류할 수 있으며 다음과 같습니다.

  • 표준 입력 : stdin, 파일 디스크립터 0

  • 표준 출력 : stdout, 파일 디스크립터 1

  • 표준 오류 : stderr, 파일 디스크립터 2

 

표준 오류에 대한 리다이렉션에서 '>' 앞에 숫자 '2'를 넣어 주었는데 이것이 표준 오류 스트림을 나타내는 것입니다.

 

< 표준 입력 리다이렉션 >

표준 입력 스트림에 대한 리다이렉션은 다음과 같은 방법으로 사용합니다.

명령어 < 파일

 

- 예시

"cat test.txt"로 입력을 하여도 같은 결과가 나오겠지만 이는 cat에 대한 아규먼트로 동작하는 방식이고 위의 예제처럼 동작하는 것은 표준 입력을 cat 명령어로 리다이렉트 하여 전달한 방식이다.

 

 

< 표준 출력 리다이렉션 : 새롭게 추가 >

표준 출력 스트림에 대한 리다이렉션은 표준 출력과 반대 방향을 가리키면서 사용합니다.

명령어 > 파일

 

- 예시

"cat test.txt"에 대한 표준 출력을 'test_copy.txt' 파일로 리다이렉션 하였습니다.

'test_copy.txt' 파일이 있으면 파일 내용을 지우고 새로 내용을 추가하게 됩니다.

파일이 없으면 새로 파일을 만들어서 내용을 추가하게 됩니다.

 

< 표준 출력 리다이렉션 : 기존 내용에 추가 >

표준 출력 스트림에 대한 리다이렉션 과정에서 파일에 내용을 지우고 새로 내용을 추가하지 않고 기존 내용 뒤에 표준 출력 내용을 추가할 경우에는 '>'대신에 '>>'를 사용한다.

명령어 >> 파일

 

- 예시

위에서 만들었던 'test_copy.txt' 파일에 "cat test.txt" 명령에 대한 표준 출력을 리다이렉션 하였습니다.

기존에 입력되어 있던 "Mind Doodle Test" 내용 뒤에 추가적으로 "Mind Doodle Test" 내용이 추가되었음을 확인할 수 있습니다.

 

< 표준 오류 리다이렉션 >

표준 오류 스트림에 대한 리다이렉션은 표준 출력 리다이렉션과 비슷한데 앞에 파일 디스크립터 번호를 입력해줍니다.

표준 오류의 파일 디스크립터 번호는 2번으로 다음과 같이 사용합니다.

명령어 2> 파일

 

- 예시

'no_test.txt'파일이 존재하지 않으므로 오류 메시지를 표준 오류 스트림으로 전달하게 되고 전달된 오류 메시지를 'test_copy.txt' 파일로 리다이렉션 하였습니다.

'test_copy.txt' 파일의 내용을 보면 "cat no_test.txt" 명령에 대한 오류 메시지가 저장되었음을 확인할 수 있습니다.

 

 

[ 참조 ]

https://blogger.pe.kr/369

 

쉘스크립트에서 이따금씩 사용되는 2>&1 이해하기

이런저런 쉘스크립트를 보다면 스크립트의 문장 끝부분이 다음과 같은 구문을 종종 보게된다. cat /tmp/error.txt  > /dev/null 2>&1 cat 명령은 error.txt 파일의 내용을 출력하는 명령이고... > 는 리다이렉

blogger.pe.kr

https://ko.wikipedia.org/wiki/%EB%84%90_%EC%9E%A5%EC%B9%98

 

널 장치 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%8B%A4%EC%9D%B4%EB%A0%89%EC%85%98

 

리다이렉션 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 입력, 출력, 오류를 위한 표준 스트림. 리다이렉션(redirection)은 컴퓨팅에서 표준 스트림을 사용자 지정 위치로 우회할 수 있는 다양한 유닉스 셸을 포함한 대부�

ko.wikipedia.org

 

* 잘못된 부분이 있을 경우 해당 내용에 대해서 댓글로 부탁드리며 검토 후 수정하겠습니다.

Comments