/Дев/ноль
/dev/zero — это специальный файл в Unix-подобных операционных системах , который содержит столько нулевых символов ( ASCII NUL, 0x00), сколько из него прочитано. [1] Одним из типичных применений является предоставление потока символов для инициализации хранилища данных. [2]
Функция
[ редактировать ]Чтение операций из /dev/zero возвращает столько нулевых символов (0x00), сколько запрошено в операции чтения.
В отличие от /Дев/нуль , /dev/zero можно использовать как источник, а не только как приемник данных. Все операции записи в /dev/zero выполняется успешно без каких-либо других эффектов. Однако, /dev/null Для этой цели чаще используется .
Когда /dev/zero отображается в памяти, например, с помощью mmap , в виртуальное адресное пространство, это эквивалентно использованию анонимной памяти; т.е. память не связана ни с одним файлом.
История
[ редактировать ]/dev/zero был представлен в 1988 году в SunOS-4.0, чтобы разрешить отображаемый сегмент BSS для общих библиотек, использующих анонимную память. [3] В HP-UX 8.x появился флаг MAP_ANONYMOUS для mmap(), который напрямую отображает анонимную память без необходимости ее открытия. /Дев/ноль . [4] С конца 1990-х годов MAP_ANONYMOUS [5] или MAP_ANON поддерживаются большинством версий UNIX, что устраняет первоначальную цель /Дев/ноль . [6]
Примеры
[ редактировать ]Удаление раздела файловой системы или диска:
cp /dev/zero /dev/<destination drive or partition>
(Обратите внимание, что это не обеспечивает безопасного удаления, может вообще не уничтожить данные и может занять значительно больше времени, чем требуется — для этой цели , могут быть предпочтительными специальные инструменты, такие как blkdiscard для устройств, поддерживающих TRIM .)
Создание файла размером 1 МБ с именем foobar , заполненного нулевыми символами:
head -c $(( 1024 * 1024 )) /dev/zero > foobar
Вместо создания файла, действительно заполненного только нулевыми байтами, многие файловые системы также поддерживают создание разреженных файлов , которые при чтении возвращают нули, но занимают меньше фактического пространства. Классический способ сделать это (без утилиты усечения , специфичной для домена ) — создать файл размером 1 ГиБ :
dd bs=1 seek=$(( 1024 * 1024 * 1024 - 1 )) count=1 < /dev/zero > foobar
который пытается разместить search · bs в выходных данных =1GiB-1 и количество копий · bs =1 байт из /dev/zero, таким образом делая файл содержащим только один блок данных.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Митчелл, Марк; Олдхэм, Джеффри; Сэмюэл, Алекс (2001), «6.5.2 /dev/zero», Advanced Linux Programming , Sams Publishing, стр. 136, ISBN 9780735710436
- ^ Лав, Роберт (2007), «Сопоставление /dev/zero», Системное программирование Linux: прямой разговор с ядром и библиотекой C , O'Reilly Media, Inc., стр. 259–260, ISBN 9780596009588
- ^ « Загрузочная программа времени выполнения «C» из SunOS, внесенная в CSRG для включения в 4.4BSD» . ТУХС .
- ^ «Установочный носитель HP-UX 8.0.7» . 22 июля 1992 г.
- ^ Бил, Крис. «Так что же такое анонимная память? » Блог Oracle . Архивировано из оригинала 15 апреля 2021 г. Проверено 9 сентября 2019 г.
- ^ «Описание MAP_ANON в mmap(2)» . НетБСД . Архивировано из оригинала 25 ноября 2019 г. Проверено 9 сентября 2019 г.