웹사이트 검색

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을 사용하면 stderr1이라는 파일로만 리디렉션합니다. 이것은 우리가 원하는 것이 아닙니다!

결론

바라건대, 이것으로 상황이 약간 정리되어 이제 Linux에서 /dev/null을 사용할 수 있고 그것이 의미하는 바를 알 수 있습니다! 아래의 의견 섹션에서 질문을 자유롭게 하십시오.

참조

  • StackOverflow 질문