쓰기/삭제를 위해 /dev/null 대신 /dev/zero를 사용해야 하는 경우는 언제입니까?

쓰기/삭제를 위해 /dev/null 대신 /dev/zero를 사용해야 하는 경우는 언제입니까?

FHS약에 따르면 /dev:

여기에는 다음이 포함됩니다.

The following devices must exist under /dev.

/dev/null
      All data written to this device is discarded. A read from this device will return an EOF condition.

/dev/zero
      This device is a source of zeroed out data. All data written to this device is discarded. A read from this device will return as many bytes containing the value zero as was requested.
...

다음 두 가지를 모두 확인하세요.

All data written to this device is discarded

나는 많은 튜토리얼을 읽었고 그들은 /dev/null항상 데이터를 폐기하곤 했습니다. 하지만 둘 다 쓰는 목적이 같기 때문에 (폐기)

질문

  • /dev/zero이상의 사용을 강제해야 하는 경우/dev/null쓰다/버리다목적?

그건 그렇고, 다른 차이점은 실제로 대부분읽다- 우리는:

답변1

/dev/nullLinux를 사용하는 경우 로 리디렉션을 "강제"하지 않습니다 /dev/zero. 이미 알고 있듯이 어느 쪽이든 동일한 결과를 얻게 됩니다.

즉, /dev/null데이터를 삭제하려면 항상 로 리디렉션해야 합니다. 글쓰기는 /dev/null데이터를 버리는 것임을 모두가 이해하기 때문입니다.

반면에 글쓰기도 /dev/zero데이터를 버리지만 이것이 무엇을 원하는지 즉시 알 수는 없습니다.

/dev/zero그 외에도 BSD 등과 같은 다른 Unices에서 쓰기가 허용되는지 걱정됩니다 . 나는 /dev/zeroPOSIX가 그것을 요구하지 않는다고 생각합니다./dev/null. 따라서 의도된 목적으로 사용하는 것은 /dev/null이식성을 극대화하는 것입니다. 다른 작업을 수행하는 것은 아무런 이점도 없이 이식성을 희생하는 것입니다.

답변2

사용 사례가 있습니다. 프로그램이 stdout이 지시되고 /dev/null동작을 변경하는 것을 감지하고(제 생각에는 Unix 방식은 아니지만) 이를 원하지 않는 경우입니다.

나는 단 하나의 예만 알고 있습니다: tar. 디렉터리의 모든 파일을 실제로 디스크에서 읽을 수 있는지(I/O 오류 등 없음) 확인하고 싶다고 가정해 보세요. 한 가지 방법은 tar다음과 같습니다 /dev/null.

tar -cv dir/ > /dev/null

그러나 시도해 보면 tar파일의 내용이 실제로 읽히지 않고 메타데이터만 읽히는 것을 발견할 수 있습니다(명령이 너무 빨리 실행됨). 그리고

tar -cv dir/ > /dev/zero

파일의 내용을 읽습니다(더 느리게 실행되고 더 많은 디스크 읽기가 수행됩니다).

답변3

필수 사례는 없지만 사용 사례는 다음과 같습니다.

  • /dev/비어 있음: 일반적으로 파일 이름을 제공해야 하지만 데이터는 신경 쓰지 않을 때 사용됩니다.

    일반적으로 이는 다음 용도로 사용됩니다 stdout. 프로그램의 출력을 원하지 않으므로 출력을 다음으로 리디렉션합니다 /dev/null(그래서 폐기됨). 상태를 확인할 수 있는 스크립트(및 cronjob)에서는 매우 편리하지만 텍스트는 혼란을 야기할 뿐입니다.

    /dev/null빈 파일을 작성하기 위해 읽을 수 있습니다 (예를 들어 다른 구문이 더 나을 수도 있음 : > empty_file_name). 또는 테이블의 헤더만 원하지만 데이터를 전달하고 싶지 않은 경우

  • /dev/제로: 예를 들어 다음 명령을 사용하여 데이터를 "물리적으로" 지워야 할 때 사용합니다 dd. 하드 드라이브를 0으로 덮어씁니다. 0은 끝나지 않으므로 원래 파일(또는 점유 공간)을 사용하지 않고 모든 하드 드라이브를 덮어쓰지만 /dev/random훨씬 느려집니다.

    내가 뭐라고 썼는지 기억이 나지 않습니다 ( 이름이 더 나은 /dev/zero것 같습니다 )./dev/null

노트: /dev/zero계속해서 데이터를 제공합니다(그리고 프로그램에 데이터가 있음을 알려줍니다). /dev/null대신 (입력으로 사용되는 경우) 더 이상 데이터가 없다고 프로그램에 알리십시오.

연결한 문서가 흥미롭습니다. 보시다시피 /dev/null일반적으로 쓰기와 읽기 모두에 사용됩니다 /dev/zero(문서에 나열된 모든 경우의 첫 번째 경우에 적합합니다).

일반적으로 스크립트를 만들 때 이를 사용하는 새로운 방법을 찾을 수 있습니다. 내가 하는 일과 특정 프로그램에 필요한 매개변수에 따라 다릅니다. 또한 프로그램에 많은 확인을 제공해야 할 때 yes명령을 제공하는 명령(새 줄 포함) 도 있습니다.y

관련 정보