/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. Ось що це означає; файл, який не є вузлом пристрою чи символьним посиланням чи будь-яким іншим. Просто нормальний щоденний файл без магічних властивостей.