Майже всі файли, що /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/sr0Linux; обидва позначають перший пристрій 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, але ця деталь стосується лише драйверів драйверів пристроїв.