/dev/zero
является примером «специального файла» - в частности, «узла устройства». Обычно они получают созданные в процессе установки дистрибутива, но вы можете полностью создать их самостоятельно , если вы хотите.
Если вы спросите ls
о /dev/zero
:
# ls -l /dev/zero
crw-rw-rw- 1 root root 1, 5 Nov 5 09:34 /dev/zero
«C» в начале говорит вам, что это «символьное устройство»; другой тип - «блочное устройство» (печатается ls
как «b»). Грубо говоря, устройства с произвольным доступом, такие как жесткие диски, как правило, являются блочными устройствами, в то время как последовательные устройства, такие как ленточные накопители или ваша звуковая карта, обычно являются символьными устройствами.
Часть «1, 5» - это «основной номер устройства» и «вспомогательный номер устройства».
Имея эту информацию, мы можем использовать mknod
команду для создания нашего собственного узла устройства:
# mknod foobar c 1 5
Это создает новый файл с именем foobar
, в текущей папке, которая делает точно то же самое , как /dev/zero
. (Конечно, вы можете установить для него различные разрешения, если хотите.) Все, что действительно содержит этот «файл», это три элемента выше - тип устройства, основной номер, вспомогательный номер. Вы можете использовать ls
для поиска кодов для других устройств и воссоздать их тоже. Когда вам надоест, просто используйте, rm
чтобы удалить узлы устройства, которые вы только что создали.
В основном, старший номер сообщает ядру Linux, с каким драйвером устройства следует обращаться, а младший номер указывает драйверу устройства, о каком устройстве вы говорите. (Например, у вас, вероятно, один контроллер SATA, но, возможно, к нему подключено несколько жестких дисков.)
Если вы хотите изобретать новые устройства, которые делают что-то новое ... ну, вам нужно отредактировать исходный код для ядра Linux и скомпилировать собственное ядро. Так что давайте не будем этого делать! :-) Но вы можете добавить файлы устройств, которые дублируют те, которые вы уже получили, просто отлично. Автоматизированная система , как Udev в основном просто наблюдая за событиями устройства и вызова mknod
/ rm
автоматически. Ничего более волшебного, чем это.
Есть еще другие виды специальных файлов:
Linux считает каталог специальным видом файла. (Обычно вы не можете напрямую открыть каталог, но если бы вы могли, вы обнаружите, что это обычный файл, который содержит данные в специальном формате и сообщает ядру, где найти все файлы в этом каталоге.)
Симлинк это специальный файл. (Но жесткой ссылки нет.) Вы можете создавать символические ссылки с помощью ln -s
команды. (Поищите справочную страницу для этого.)
Есть также вещь, называемая «именованный канал» или «FIFO» (очередь «первым пришел - первым вышел»). Вы можете создать один с mkfifo
. FIFO - это магический файл, который может быть открыт сразу двумя программами - одно чтение, одно письмо. Когда это происходит, это работает как обычная оболочка. Но вы можете запустить каждую программу отдельно ...
Файл, который не является «специальным» в любом случае, называется «обычным файлом». Вы иногда увидите упоминание об этом в документации Unix. Вот что это значит; файл, который не является узлом устройства, символической ссылкой или чем-то еще. Просто обычный, каждый день файл без магических свойств.