Linux의 /dev/null
Linux의 /dev/null은 null 장치 파일입니다. 이것은 그것에 쓰여진 모든 것을 버리고 읽을 때 EOF를 반환합니다.
이것은 진공 청소기 역할을 하는 명령줄 해킹으로, 던져진 모든 것을 빨아들입니다.
이것이 무엇을 의미하는지 이해하고 이 파일로 무엇을 할 수 있는지 살펴보겠습니다.
/dev/null 속성
cat 명령을 사용하여 파일을 읽으려고 하면 파일 끝(EOF) 문자가 반환됩니다.
cat /dev/null
유효한 파일이며 다음을 사용하여 확인할 수 있습니다.
stat /dev/null
이것은 나에게
File: /dev/null
Size: 0 Blocks: 0 IO Block: 4096 character special file
Device: 6h/6d Inode: 5 Links: 1 Device type: 1,3
Access: (0666/crw-rw-rw-) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-02-04 13:00:43.112464814 +0530
Modify: 2020-02-04 13:00:43.112464814 +0530
Change: 2020-02-04 13:00:43.112464814 +0530
이것은 이 파일의 크기가 0바이트이고 할당된 블록이 0개임을 보여줍니다. 파일 권한도 누구나 읽고 쓸 수 있지만 실행할 수 없도록 설정되어 있습니다.
실행 파일이 아니므로 |
연산자를 사용하여 파이핑하여 /dev/null
로 리디렉션할 수 없습니다. 유일한 방법은 파일 리디렉션(>
, >>
또는 <
, <<
)을 사용하는 것입니다.
아래 다이어그램은 /dev/null
이 실제로 유효한 파일임을 보여줍니다.
이제 /dev/null
에 대한 몇 가지 일반적인 사용 사례를 살펴보겠습니다.
Linux에서 /dev/null로 리디렉션
/dev/null
로 리디렉션하여 사용하는 스크립트의 모든 출력을 버릴 수 있습니다.
예를 들어 이 트릭을 사용하여 echo
메시지를 폐기할 수 있습니다.
echo 'Hello from JournalDev' > /dev/null
버려지기 때문에 어떤 출력도 얻을 수 없습니다!
명령을 잘못 실행하고 출력을 /dev/null
로 연결해 봅시다.
cat --INCORRECT_OPTION > /dev/null
우리는 여전히 다음과 같은 출력을 얻습니다.
cat: unrecognized option '--INCORRECT'
Try 'cat --help' for more information.
왜 이런 일이 발생합니까? 이는 오류 메시지가 stderr
에서 오지만 stdout
의 출력만 버리기 때문입니다.
stderr
도 고려해야 합니다.
오류 메시지 삭제
stdout과 함께 stderr을 /dev/null로 리디렉션하겠습니다. 이를 위해 stderr(=2)에 대한 파일 설명자를 사용할 수 있습니다.
cat --INCORRECT_OPTION > /dev/null 2>/dev/null
이것은 우리에게 필요한 것을 줄 것입니다!
동일한 작업을 수행하는 다른 방법이 있습니다. 먼저 stderr을 stdout으로 리디렉션한 다음 stdout을 /dev/null로 리디렉션합니다.
이에 대한 구문은 다음과 같습니다.
command > /dev/null 2>&1
끝에 있는 2>&1
에 주목하십시오. stderr(2)를 stdout(1)로 리디렉션합니다. 대상 파일이 파일 이름이 아니라 파일 설명자임을 쉘에 알리기 위해 &1
을 사용합니다.
cat --INCORRECT_OPTION > dev/null 2>&1
따라서 2>1
을 사용하면 stderr
를 1
이라는 파일로만 리디렉션합니다. 이것은 우리가 원하는 것이 아닙니다!
결론
바라건대, 이것으로 상황이 약간 정리되어 이제 Linux에서 /dev/null을 사용할 수 있고 그것이 의미하는 바를 알 수 있습니다! 아래의 의견 섹션에서 질문을 자유롭게 하십시오.
참조
- StackOverflow 질문