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/null
Linux를 사용하는 경우 로 리디렉션을 "강제"하지 않습니다 /dev/zero
. 이미 알고 있듯이 어느 쪽이든 동일한 결과를 얻게 됩니다.
즉, /dev/null
데이터를 삭제하려면 항상 로 리디렉션해야 합니다. 글쓰기는 /dev/null
데이터를 버리는 것임을 모두가 이해하기 때문입니다.
반면에 글쓰기도 /dev/zero
데이터를 버리지만 이것이 무엇을 원하는지 즉시 알 수는 없습니다.
/dev/zero
그 외에도 BSD 등과 같은 다른 Unices에서 쓰기가 허용되는지 걱정됩니다 . 나는 /dev/zero
POSIX가 그것을 요구하지 않는다고 생각합니다./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