Майже всі файли, що /dev
знаходяться під цим файлом, є файлами пристроїв . У той час як читання та запис у звичайний файл зберігає дані на диску чи іншій файловій системі, доступ до файлу пристрою спілкується з драйвером у ядрі, який, як правило, спілкується з обладнанням (апаратний пристрій, звідси і назва).
Існує два типи файлів пристроїв: блокові пристрої (позначені b
першим символом на виході ls -l
) та символьні пристрої (позначені символом c
). Відмінність блокових та символьних пристроїв не є повністю універсальним. Блокові пристрої - це такі речі, як диски, які ведуть себе як великі файли фіксованого розміру: якщо ви записуєте байт у певному зміщенні та пізніше читаєте з пристрою при цьому зміщенні, ви отримуєте цей байт назад. Пристрої символів - це майже все інше, де запис байта має деякий негайний ефект (наприклад, він випромінюється по послідовному рядку), а читання байтів також має деякий негайний ефект (наприклад, він читається з послідовного порту).
Значення файлу пристрою визначається його номером, а не його ім'ям (ім'я стосується програм, але не ядра). Цей номер насправді два числа: основне число вказує, який драйвер відповідає за цей пристрій, а незначне число дозволяє водієві керувати кількома пристроями¹. Ці цифри відображаються у ls -l
списку, де зазвичай можна знайти розмір файлу. Наприклад, brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda
→ цей пристрій має значення 8, другорядне 0.
Деякі файли пристроїв у розділі /dev
не відповідають апаратним пристроям. Той, який існує у кожній системі Unix, є /dev/null
; писати до нього не має ефекту, і читання з нього ніколи не повертає жодних даних. У скриптах оболонки це зручно, коли ви хочете ігнорувати вихід з команди ( >/dev/null
) або виконувати команду без вводу ( </dev/null
). Іншими поширеними прикладами є /dev/zero
(який повертає нульові байти ad infinitum ) /dev/urandom
(який повертає випадкові байти ad infinitum ).
Кілька файлів пристрою мають значення, яке залежить від процесу, який здійснює доступ до нього. Наприклад, /dev/stdin
позначає стандартний вхід поточного процесу; відкриття з має приблизно такий же ефект, як і відкриття вихідного файлу, який було відкрито, як і стандартний вхід процесу. Дещо аналогічно /dev/tty
позначає термінал, до якого підключений процес. У Linux тепер /dev/stdin
і друзі не реалізуються як символьні пристрої, а натомість як символічні посилання на більш загальний механізм, який дозволяє посилатися на дескриптор кожного файлу (на відміну від лише 0, 1 і 2 за традиційним методом); наприклад /dev/stdin
, символічне посилання на /proc/self/fd/0
. Дивіться, як / dev / fd відноситься до / proc / self / fd /? .
Нижче ви знайдете ряд символічних посилань /dev
. Це може статися з історичних причин: файл пристрою було переміщено від одного імені до іншого, але деякі програми все ще використовують старе ім'я. Наприклад, /dev/scd0
символічне посилання на /dev/sr0
Linux; обидва позначають перший пристрій CD. Ще одна причина символічних посилань - організація: в Linux ви знайдете ваші жорсткі диски та розділи в декількох місцях: /dev/sda
і /dev/sda1
друзі (кожен диск, призначений довільною літерою, і розділи відповідно до макета розділу), /dev/disk/by-id/*
(диски, позначені унікальний серійний номер), /dev/disk/by-label/*
(розділи з файловою системою, позначені міткою, обраною людиною); і більше. Символічні посилання також використовуються, коли загальне ім'я пристрою може бути одним із кількох; наприклад/dev/dvd
це може бути символічним посиланням на /dev/sr0
або, /dev/sr1
якщо у вас є два зчитувачі компакт-дисків, а другий має бути зчитувачем DVD за замовчуванням.
Нарешті, є кілька інших файлів, які ви можете знайти під /dev
традиційними причинами. Ви не знайдете те саме в кожній системі. У більшості єдиноборств /dev/log
- це розетка, яку програми використовують для випромінювання журналів. /dev/MAKEDEV
це сценарій, який створює записи в /dev
. У сучасних системах Linux записи в /dev/
створюються автоматично за допомогою udev , застаріваючи MAKEDEV
.
Under Це фактично більше не відповідає Linux, але ця деталь стосується лише драйверів драйверів пристроїв.