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