Dev Linux что это такое

Обновлено: 05.07.2024

Существует много интересных особенностей структуры каталогов Linux. В этой статье я расскажу о некоторых интересных аспектах каталога /dev. Прежде чем продолжить изучение этой статьи, я предлагаю вам, если вы еще этого не сделали, прочитать мои более ранние статьи «Все есть файл» и «Введение в файловые системы Linux», обе из которых знакомят с некоторыми интересными концепциями файловой системы Linux. Давай, я подожду.

Отлично! Добро пожаловать обратно. Теперь мы можем приступить к более подробному изучению каталога /dev.

Файлы устройств также называются специальными файлами устройств. Файлы устройств используются для предоставления операционной системе и пользователям интерфейса к устройствам, которые они представляют. Все файлы устройств Linux расположены в каталоге /dev, который является неотъемлемой частью корневой (/) файловой системы, поскольку эти файлы устройств должны быть доступны операционной системе во время процесса загрузки.

Одним из самых важных моментов, которые следует помнить об этих файлах устройств, является то, что они определенно не являются драйверами устройств. Их точнее охарактеризовать как порталы к драйверам устройств. Данные передаются из приложения или операционной системы в файл устройства, который затем передает их драйверу устройства, который затем отправляет их на физическое устройство. Также используется обратный путь данных: от физического устройства через драйвер устройства, файл устройства, а затем к приложению или другому устройству.

Давайте посмотрим на поток данных типичной команды, чтобы визуализировать это.

Ширина потока данных файла устройства

Рисунок 1. Поток данных через файлы устройств.

На рисунке 1 выше показан упрощенный поток данных для обычной команды. Выполнение команды cat /etc/resolv.conf из эмулятора терминала с графическим интерфейсом, такого как Konsole или xterm, приводит к чтению файла resolv.conf с диска, при этом драйвер дискового устройства выполняет определенные функции устройства, такие как поиск файла на жестком диске. водить и читать. Данные передаются через файл устройства, а затем из команды в файл устройства и драйвер устройства для псевдотерминала 6, где они отображаются в сеансе терминала.

Конечно, вывод команды cat можно было перенаправить в файл следующим образом: cat /etc/resolv.conf > /etc/resolv.bak, чтобы создать резервную копию файла. В этом случае поток данных в левой части рисунка 1 останется прежним, тогда как поток данных в правой части будет проходить через файл устройства /dev/sda2, драйвер устройства жесткого диска и затем на сам жесткий диск.

Эти файлы устройств упрощают использование стандартных потоков (STD/IO) и перенаправление для доступа к любому устройству на компьютере Linux или Unix. Простое направление потока данных в файл устройства отправляет данные на это устройство.

Файлы устройств можно классифицировать как минимум двумя способами. Первая и наиболее часто используемая классификация — это классификация потока данных, обычно связанного с устройством. Например, tty и последовательные устройства считаются символьными, потому что поток данных передается и обрабатывается по одному символу или байту за раз. Устройства блочного типа, такие как жесткие диски, передают данные блоками, обычно кратными 256 байтам.

Если вы еще этого не сделали, продолжайте и как пользователь без полномочий root в сеансе терминала измените текущий рабочий каталог (PWD) на /dev и отобразите длинный список. Здесь показан список файлов устройств с их правами доступа к файлам и их старшим и второстепенным идентификационными номерами. Например, следующие файлы устройств — это лишь некоторые из файлов в каталоге /dev/на моей рабочей станции Fedora 24. Они представляют устройства типа disk и tty. Обратите внимание на крайний левый символ каждой строки в выводе. Те, которые имеют "b", являются блочными устройствами, а те, которые начинаются с "c", являются символьными устройствами.

Более подробный и явный способ идентификации файлов устройств – использование старшего и вспомогательного номеров устройства. Дисковые устройства имеют старший номер 8, что определяет их как блочные устройства SCSI. Обратите внимание, что все жесткие диски PATA и SATA управлялись подсистемой SCSI, поскольку старая подсистема ATA много лет назад считалась непригодной для сопровождения из-за низкого качества кода. В результате жесткие диски, которые ранее обозначались как «hd[a-z]», теперь обозначаются как «sd[a-z]».

Вероятно, вы можете сделать вывод о структуре младших номеров дисков в небольшом примере, показанном выше. Младшие номера 0, 16, 32 и так далее до 240 — это целые номера диска. Таким образом, старший/младший 8/16 представляет собой весь диск /dev/sdb, а 8/17 — это файл устройства для первого раздела, /dev/sdb1. Номера 8/34 будут /dev/sdc2.

Файлы tty-устройств в приведенном выше списке нумеруются немного проще от tty0 до tty63.

Давайте потратим несколько минут и проведем пару забавных экспериментов, которые продемонстрируют мощь и гибкость файлов устройств Linux. Большинство дистрибутивов Linux имеют несколько виртуальных консолей, от 1 до 7, которые можно использовать для входа в сеанс локальной консоли с интерфейсом оболочки. Доступ к ним можно получить с помощью комбинаций клавиш Ctrl-Alt-F1 для консоли 1, Ctrl-Alt-F2 для консоли 2 и т. д.

Нажмите Ctrl-Alt-F2, чтобы переключиться на консоль 2. В некоторых дистрибутивах информация для входа включает устройство tty (телетайп), связанное с этой консолью, но во многих нет. Это должен быть tty2, потому что вы находитесь в консоли 2.

Войдите как пользователь без полномочий root. Затем вы можете использовать команду who am i — да, просто так, с пробелами — чтобы определить, какое tty-устройство подключено к этой консоли.

Прежде чем мы действительно проведем этот эксперимент, просмотрите список устройств tty2 и tty3 в /dev.

Будет определено большое количество устройств tty, но большинство из них нас не интересует, только устройства tty2 и tty3. В качестве файлов устройств в них нет ничего особенного; это просто устройства символьного типа. Мы будем использовать эти устройства для этого эксперимента. Устройство tty2 подключено к виртуальной консоли 2, а устройство tty3 подключено к виртуальной консоли 3.

Нажмите Ctrl-Alt-F3, чтобы переключиться на консоль. 3. Войдите снова как тот же пользователь без полномочий root. Теперь введите следующую команду на консоли 3.

Нажмите Ctrl-Alt-F2, чтобы вернуться на консоль 2. На консоли 2 отобразится строка «Hello world» (без кавычек).

Этот эксперимент можно также провести с эмуляторами терминала на рабочем столе с графическим интерфейсом. Терминальные сеансы на рабочем столе используют псевдотерминальные устройства в дереве /dev, такие как /dev/pts/1. Откройте два терминальных сеанса с помощью Konsole или Xterm. Определите, к каким псевдотерминалам они подключены, и используйте один для отправки сообщения другому.

Теперь продолжите эксперимент, используя команду cat для отображения файла /etc/fstab на другом терминале.

Еще один интересный эксперимент — распечатать файл непосредственно на принтере с помощью команды cat. Предполагая, что вашим принтером является /dev/usb/lp0 и что ваш принтер может напрямую печатать PDF-файлы, следующая команда распечатает PDF-файл test.pdf на вашем принтере.

Каталог /dev содержит несколько очень интересных файлов устройств, которые являются порталами к оборудованию, которое обычно не рассматривается как устройство, такое как жесткий диск или дисплей. Например, системная память — RAM — не является чем-то, что обычно считается «устройством», однако /dev/mem — это портал, через который можно получить прямой доступ к памяти. В следующем примере были получены интересные результаты.

Приведенная выше команда dd обеспечивает немного больший контроль, чем просто использование команды cat для создания дампа всей памяти. Он дает возможность указать, сколько данных считывается из /dev/mem, а также позволяет указать точку, с которой начинать чтение данных из памяти. Хотя часть памяти была прочитана, ядро ​​ответило следующей ошибкой, которую я нашел в /var/log/messages.

Эта ошибка означает, что ядро ​​выполняет свою работу, защищая память, принадлежащую другим процессам, и именно так оно и должно работать. Таким образом, хотя вы можете использовать /dev/mem для отображения данных, хранящихся в оперативной памяти, доступ к большей части памяти защищен и приведет к ошибкам. Только та виртуальная память, которая назначается диспетчером памяти ядра для оболочки BASH, выполняющей команду dd, должна быть доступна без возникновения ошибки. Извините, но вы не можете копаться в памяти, которая вам не принадлежит, если вы не найдете уязвимость, которую можно использовать.

В /dev есть несколько других очень интересных файлов устройств. Файлы устройств null, zero, random и urandom не связаны ни с какими физическими устройствами.

Например, нулевое устройство /dev/null можно использовать в качестве цели для перенаправления вывода команд или программ оболочки, чтобы они не отображались на терминале. Я часто использую это в своих сценариях BASH, чтобы пользователи не получали вывод, который может их сбить с толку. Устройство /dev/null можно использовать для создания строки нулевых символов. Используйте команду dd, как показано ниже, чтобы просмотреть выходные данные из файла устройства /dev/null.

Обратите внимание, что на самом деле нет видимого вывода, потому что пустые символы ничего не значат. Обратите внимание на количество байтов.

Устройства /dev/random и /dev/urandom также очень интересны. Как следует из их названий, они оба производят случайный вывод — не только числа, но любые комбинации байтов. Устройство /dev/urandom производит детерминированный случайный вывод и работает очень быстро. Это означает, что результат определяется алгоритмом и использует исходную строку в качестве отправной точки. В результате хакер может, хотя и очень сложно, воспроизвести вывод, если исходное начальное число известно. Используйте команду cat /dev/urandom для просмотра типичного вывода. Вы можете использовать Ctrl-c, чтобы вырваться.

Файл устройства /dev/random выдает недетерминированный случайный вывод, но выводит его медленнее. Этот вывод не определяется алгоритмом, зависящим от предыдущего числа, а генерируется в ответ на нажатия клавиш и движения мыши. Этот метод значительно усложняет дублирование определенной серии случайных чисел. Используйте команду cat, чтобы просмотреть часть вывода из файла устройства /dev/random. Попробуйте переместить мышь, чтобы увидеть, как это повлияет на вывод.

Как следует из названия, файл устройства /dev/zero выводит бесконечную строку нулей. Обратите внимание, что это восьмеричные нули, а не ноль символов ASCII (0). Используйте команду dd, как показано ниже, чтобы просмотреть выходные данные из файла устройства /dev/zero.

Обратите внимание, что счетчик байтов для этой команды не равен нулю.

В прошлом все файлы устройств в /dev создавались во время установки, в результате чего каталог был заполнен практически всеми возможными файлами устройств, хотя большинство из них никогда не использовались. В том маловероятном случае, если потребуется новый файл устройства или он будет случайно удален и его необходимо будет создать заново, программа mknod будет доступна для ручного создания файлов устройств. Все, что вам нужно было знать, — это старший и младший номера устройства.

Возвращаясь к вашему списку файлов в /dev, обратите внимание на дату и время на файлах. Все они были созданы во время последней загрузки. Вы можете проверить это, используя uptime или last команды. В моем списке устройств выше все эти файлы были созданы в 7:06 утра 7 ноября, когда я в последний раз загружал систему.

Конечно, команда mknod по-прежнему доступна, но новая команда MAKEDEV (да, все в верхнем регистре — что, на мой взгляд, противоречит философии Linux, заключающейся в использовании всех имен команд в нижнем регистре) обеспечивает более простой интерфейс для создания файлов устройств, если возникнет необходимость. Команда MAKEDEV не установлена ​​по умолчанию в текущих версиях Fedora или CentOS 7; он установлен в CentOS 6. Вы можете использовать YUM или DNF для установки пакета MAKEDEV.

Интересно, что уже давно мне не нужно было создавать файл устройства. Однако совсем недавно у меня была интересная ситуация, когда один из файлов устройств, которые я обычно использую, не был создан, и мне пришлось его создать. С тех пор у меня не было проблем с этим устройством. Таким образом, ситуация, вызванная отсутствующим файлом устройства, все еще может произойти, и знание того, как с этим справиться, может быть важным.

Я не рассмотрел многие из множества различных типов файлов устройств, с которыми вы можете столкнуться. Эта информация доступна в большом количестве деталей в цитируемых ресурсах. Я надеюсь, что дал вам некоторое базовое представление о том, как работают эти файлы, и дал инструменты, которые позволят вам самостоятельно исследовать больше.

/dev — это расположение специальных файлов или файлов устройств. Это очень интересный каталог, который подчеркивает один важный аспект файловой системы Linux — все является файлом или каталогом. Просмотрите этот каталог, и вы должны увидеть hda1, hda2 и т. д., которые представляют различные разделы на первом главном диске системы. /dev/cdrom и /dev/fd0 представляют ваш дисковод компакт-дисков и флоппи-дисковод. Это может показаться странным, но будет иметь смысл, если вы сравните характеристики файлов с характеристиками вашего оборудования. Оба могут быть прочитаны и записаны. Возьмем, к примеру, /dev/dsp. Этот файл представляет ваше устройство динамика. Любые данные, записанные в этот файл, будут перенаправлены на ваш динамик. Если вы попробуете «cat /boot/vmlinuz > /dev/dsp» (в правильно настроенной системе), вы должны услышать какой-то звук в динамике. Это звук вашего ядра! Файл, отправленный в /dev/lp0, распечатывается. Отправка данных в /dev/ttyS0 и чтение из него позволит вам общаться с подключенным к нему устройством, например с вашим модемом.

Большинство устройств являются либо блочными, либо символьными; однако существуют и могут быть созданы другие типы устройств. В общем, «блочные устройства» — это устройства, которые хранят или хранят данные, «символьные устройства» можно рассматривать как устройства, которые передают или передают данные. Например, дисководы для гибких дисков, жесткие диски и приводы для компакт-дисков — все это блочные устройства, а последовательные порты, мыши и параллельные порты принтеров — все это символьные устройства. Существует своего рода схема именования, но в подавляющем большинстве случаев она совершенно нелогична.

-x 2 root root 4096 28 сентября 18:05 ataraid lrwxrwxrwx 1 root root 11 7 октября 16:26 audio -> /dev/audio0 crw-rw---- 1 root audio 14, 4 7 октября 16:26 audio0 crw- rw---- 1 root audio 14, 20 7 октября 16:26 audio1 crw-rw---- 1 root audio 14, 7 15 марта 2002 audioctl lrwxrwxrwx 1 root root 9 14 октября 22:51 cdrom -> /dev/ scd1 lrwxrwxrwx 1 root root 9 14 окт 22:52 cdrom1 -> /dev/scd0 crw------- 1 root tty 5, 1 января 19 20:47 консоль lrwxrwxrwx 1 root root 11 28 сентября 18:06 core - > /proc/kcore crw-rw---- 1 root audio 14, 10 7 окт 16:26 dmfm0 crw-rw---- 1 root audio 14, 26 7 окт 16:26 dmfm1 crw-rw---- 1 root audio 14, 9 7 окт 16:26 dmmidi0 crw-rw---- 1 root audio 14, 25 7 окт 16:26 dmmidi1 lrwxrwxrwx 1 root root 9 7 окт 16:26 dsp -> /dev/dsp0 crw- rw---- 1 root audio 14, 3 7 окт 16:26 dsp0 crw-rw---- 1 root audio 14, 19 7 окт 16:26 dsp1 crw--w---- 1 root video 29, 0 15 марта 2002 г. fb0 crw--w---- 1 root video 29, 1 15 марта 2002 г. fb0autodetect crw--w---- 1 root video 29, 0 15 марта 2002 г. fb0current crw--w---- 1 root видео 2 9, 32 15 марта 2002 г. fb1 crw--w---- 1 корневое видео 29, 33 15 марта 2002 г. fb1autodetect crw--w---- 1 корневое видео 29, 32 15 марта 2002 г. 18:05 fd -> /proc/self/fd brw-rw---- 1 корневая дискета 2, 0 15 марта 2002 г. fd0 brw-rw---- 1 корневая дискета 2, 1 15 марта 2002 г. fd1 crw--w --w- 1 root root 1, 7 сен 28 18:06 full brw-rw---- 1 root disk 3, 0 15 марта 2002 hda brw-rw---- 1 root disk 3, 64 15 марта 2002 hdb brw-rw---- 1 корневой диск 22, 0 15 марта 2002 г. hdc brw-rw---- 1 корневой диск 22, 64 15 марта 2002 г. hdd drwxr-xr-x 2 root root 12288 28 сентября 18:05 ida prw ------- 1 root root 0 19 января 20:46 initctl brw-rw---- 1 root disk 1, 250 15 марта 2002 initrd drwxr-xr-x 2 root root 4096 28 сентября 18:05 input crw -rw---- 1 root dialout 45, 128 15 марта 2002 ippp0 crw-rw---- 1 root dialout 45, 0 15 марта 2002 isdn0 crw-rw---- 1 root dialout 45, 64 15 марта 2002 isdnctrl0 crw-rw---- 1 root dialout 45, 255 15 марта 2002 isdninfo crw------- 1 root root 10, 4 15 марта 2002 jbm crw-r----- 1 root kmem 1, 2 сентября 28 18:06 кмем brw-rw---- 1 root cdrom 24, 0 15 марта 2002 lmscd crw------- 1 root root 10, 0 15 марта 2002 logibm brw-rw---- 1 root disk 7, 0 28 сентября 18:06 loop0 brw-rw---- 1 root disk 7, 1 28 сентября 18:06 loop1 crw-rw---- 1 root lp 6, 0 15 марта 2002 lp0 crw-rw---- 1 root lp 6, 1 15 марта 2002 г. lp1 crw-rw---- 1 root lp 6, 2 15 марта 2002 г. lp2 crw-r----- 1 root kmem 1, 1 сент. 7 16:26 midi -> /dev/midi0 crw-rw---- 1 root audio 14, 2 7 окт 16:26 midi0 crw-rw---- 1 root audio 14, 18 окт 7 16:26 midi1 lrwxrwxrwx 1 root root 11 7 окт 16:26 микшер -> /dev/mixer0 crw-rw-rw- 1 root root 14, 0 11 ноября 16:22 mix0 crw-rw---- 1 root audio 14, 16 7 окт 16 :26 mix1 lrwxrwxrwx 1 root root 11 7 окт 06:50 модем -> /dev/ttyLT0 crw-rw---- 1 root audio 31, 0 15 марта 2002 mpu401data crw-rw---- 1 root audio 31, 1 15 марта 2002 г. mpu401stat crw-rw---- 1 root audio 14, 8 7 октября 16:26 музыка crw-rw-rw- 1 root root 1, 3 28 сентября 18:06 null crw-rw-rw- 1 root root 195, 0 6 января 03:03 nvidia0 crw-rw-rw- 1 корень root 195, 1 янв 6 03:03 nvidia1 crw-rw-rw- 1 root root 195, 255 6 янв 03:03 nvidiactl crw-rw---- 1 root lp 6, 0 15 марта 2002 par0 crw-rw-- -- 1 root lp 6, 1 15 марта 2002 г. par1 crw-rw---- 1 root lp 6, 2 15 марта 2002 г. par2 -rw-r--r-- 1 root root 665509 7 октября 16:41 pcm crw- r----- 1 root kmem 1, 4 28 сент. 18:06 port crw-rw---- 1 root dip 108, 0 28 сент. 18:07 ppp crw------- 1 root root 10, 1 15 марта 2002 г. psaux crw-rw-rw- 1 root root 1, 8 28 сентября 18:06 random crw-rw---- 1 root root 10, 135 15 марта 2002 г. rtc brw-rw---- 1 root cdrom 11, 0 15 марта 2002 г. scd0 brw-rw---- 1 root cdrom 11, 1 15 марта 2002 г. scd1 brw-rw---- 1 корневой диск 8, 0 15 марта 2002 г. sda brw-rw---- 1 root диск 8, 1 15 марта 2002 г. sda1 brw-rw---- 1 корневой диск 8, 2 15 марта 2002 г. sda2 brw-rw---- 1 корневой диск 8, 3 15 марта 2002 г. sda3 brw-rw---- 1 корневой диск 8, 4 15 марта 2002 г. sda4 brw-rw---- 1 корневой диск 8, 16 15 марта 2002 г. sdb brw-rw---- 1 корневой диск 8, 17 марта 15 2002 г. sdb1 brw-rw---- 1 корневой диск 8, 18 15 марта 2002 г. sdb2 brw-rw ---- 1 корневой диск 8, 19 15 марта 2002 г. sdb3 brw -rw---- 1 root disk 8, 20 15 марта 2002 sdb4 crw-rw---- 1 root audio 14, 1 7 окт 16:26 sequencer lrwxrwxrwx 1 root root 10 7 окт 16:26 sequencer2 -> /dev /music lrwxrwxrwx 1 root root 4 28 сентября 18:05 stderr -> fd/2 lrwxrwxrwx 1 root root 4 28 сентября 18:05 stdin -> fd/0 lrwxrwxrwx 1 root root 4 28 сентября 18:05 stdout -> fd/1 crw-rw-rw- 1 root tty 5, 0 28 сент. 18:06 tty crw------- 1 root root 4, 0 28 сент. 18:06 tty0 crw------- 1 root root 4 , 1 января 19 14:59 tty1 crw-rw---- 1 root dialout 62, 64 7 окт 06:50 ttyLT0 crw-rw---- 1 root dialout 4, 64 15 марта 2002 ttyS0 crw-rw--- - 1 root dialout 4, 65 15 марта 2002 ttyS1 crw-rw---- 1 root dialout 4, 66 15 марта 2002 ttyS2 crw-rw---- 1 root dialout 4, 67 15 марта 2002 ttyS3 crw-rw-- -- 1 root dialout 188, 0 15 марта 2002 г. ttyUSB0 crw-rw---- 1 root dialout 188, 1 15 марта 2002 г. ttyUSB1 cr--r--r-- 1 root root 1, 9 Jan 19 20:46 urandom drwxr-xr-x 2 root root 4096 28 сентября 18:05 usb prw-r----- 1 root adm 0 19 января 14:58 xconsole crw-rw-rw- 1 root root 1, 5 28 сентября 18:06 ноль

Первый последовательный порт (мыши, модемы).

Подключение мыши PS/2 (мыши, клавиатуры).

/dev/lp0 (порт первого принтера, LPT1)

Первый параллельный порт (принтеры, сканеры и т. д.).

/dev/dsp (Первое аудиоустройство)

Название DSP происходит от термина "процессор цифровых сигналов" – это специализированная микросхема процессора, оптимизированная для анализа цифровых сигналов. Звуковые карты могут использовать специальный чип DSP или могут реализовывать функции с помощью ряда дискретных устройств. Другими терминами, которые могут использоваться для этого устройства, являются оцифрованный голос и PCM.

/dev/usb (USB-устройства)

Этот подкаталог содержит большинство узлов USB-устройств. Распределение имен устройств довольно упрощено, поэтому никаких уточнений не требуется.

/dev/sda (C:\, устройство SCSI)

Первое устройство SCSI (жесткий диск, карты памяти, внешние запоминающие устройства, такие как приводы компакт-дисков на ноутбуках и т. д.).

/dev/scd (D:\, устройство SCSI CD-ROM)

Первое устройство SCSI CD-ROM.

/dev/js0 (стандартный джойстик игрового порта)

Первое устройство с джойстиком.

Устройства определяются по типу, например "блок" или "символ", а также по "старшему" и "младшему" номеру. Старший номер используется для классификации устройства, а младший номер используется для идентификации конкретного типа устройства. Например, все IDE-устройства, подключенные к первичному контроллеру, имеют старший номер 3. Ведущие и ведомые устройства, а также отдельные разделы далее определяются с помощью младших номеров. Это два числа, предшествующие дате в следующем отображении:

brw-rw---- 1 корневой диск 3, 0 15 марта 2002 г. /dev/hda brw-rw---- 1 корневой диск 3, 1 15 марта 2002 г. /dev/hda1 brw-rw---- 1 корневой диск 3, 10 15 марта 2002 г. /dev/hda10 brw-rw---- 1 корневой диск 3, 11 15 марта 2002 г. /dev/hda11 brw-rw---- 1 корневой диск 3, 12 15 марта 2002 г. / dev/hda12 brw-rw---- 1 корневой диск 3, 13 марта 15 2002 г. /dev/hda13 brw-rw---- 1 корневой диск 3, 14 марта 15 2002 г. /dev/hda14 brw-rw---- 1 корневой диск 3, 15 15 марта 2002 г. /dev/hda15 brw-rw---- 1 корневой диск 3, 16 15 марта 2002 г. /dev/hda16 brw-rw---- 1 корневой диск 3, 17 15 марта 2002 г. / dev/hda17 brw-rw---- 1 корневой диск 3, 18 марта 15 2002 г. /dev/hda18 brw-rw---- 1 корневой диск 3, 19 марта 15 2002 г. /dev/hda19 brw-rw---- 1 корневой диск 3, 2 15 марта 2002 г. /dev/hda2 brw-rw---- 1 корневой диск 3, 20 15 марта 2002 г. /dev/hda20 brw-rw---- 1 корневой диск 3, 3 15 марта 2002 г. / dev/hda3 brw-rw---- 1 корневой диск 3, 4 15 марта 2002 г. /dev/hda4 brw-rw---- 1 корневой диск 3, 5 15 марта 2002 г. /dev/hda5 brw-rw---- 1 корневой диск 3, 6 15 марта 2002 г. /dev/hda6 brw-rw---- 1 корневой диск 3, 7 15 марта 2002 г. /dev/hda7 brw-rw---- 1 корневой диск 3, 8 15 марта 2002 г. /dev/hda8 brw-rw---- 1 корневой диск 3, 9 15 марта 2002 г. /dev/hda9 brw-rw---- 1 корневой диск 3, 64 15 марта 2002 г. /dev/hdb brw- rw---- 1 корневой диск 3, 65 марта 2002 г. /dev/hdb1 brw-rw---- 1 корневой диск 3, 74 15 марта 2002 г. /dev/hdb10 brw-rw---- 1 корневой диск 3, 75 15 марта 2002 г. /dev/hdb11 brw-rw---- 1 корневой диск 3, 76 15 марта 2002 г. /dev/hdb12 brw-rw---- 1 корневой диск 3, 77 15 марта 2002 г. /dev/hdb13 brw- rw---- 1 корневой диск 3, 78 15 марта 2002 г. /dev/hdb14 brw-rw---- 1 корневой диск 3, 79 15 марта 2002 г. /dev/hdb15 brw-rw---- 1 корневой диск 3, 80 15 марта 2002 г. /dev/hdb16 brw-rw---- 1 корневой диск 3, 81 15 марта 2002 г. /dev/hdb17 brw-rw---- 1 корневой диск 3, 82 15 марта 2002 г. /dev/hdb18 brw- rw---- 1 корневой диск 3, 83 15 марта 2002 г. /dev/hdb19 brw-rw---- 1 корневой диск 3, 66 15 марта 2002 г. /dev/hdb2 brw-rw---- 1 корневой диск 3, 84 15 марта 2002 г. /dev/hdb20 brw-rw---- 1 корневой диск 3, 67 15 марта 2002 г. /dev/hdb3 brw-rw---- 1 корневой диск 3, 68 15 марта 2002 г. /dev/hdb4 brw- rw---- 1 корневой диск 3, 69 15 марта 2002 г. /dev/hdb5 brw-rw---- 1 корневой диск 3, 70 15 марта 2002 г. /dev/hdb 6 brw-rw---- 1 корневой диск 3, 71 15 марта 2002 г. /dev/hdb7 brw-rw---- 1 корневой диск 3, 72 15 марта 2002 г. /dev/hdb8 brw-rw---- 1 корневой диск 3, 73 15 марта 2002 г. /dev/hdb9 brw-rw---- 1 корневой диск 22, 0 15 марта 2002 г. /dev/hdc brw-rw---- 1 корневой диск 22, 64 15 марта 2002 г. /dev/ жесткий диск

Старший номер устройства hda и hdb равен 3. Конечно, младший номер меняется для каждого конкретного раздела. Определение каждой категории старших номеров можно изучить, просмотрев содержимое файла /usr/src/linux/include/linux/major.h. В файле devices.txt также указаны основные и второстепенные номера. Он находится в каталоге /usr/src/linux/Documentation. Этот файл определяет основные числа. Почти все файлы устройств создаются по умолчанию во время установки. Однако вы всегда можете создать устройство с помощью команды mknod или сценария MAKEDEV, который находится в самом каталоге /dev. Устройства можно создавать с помощью этой утилиты, указав создаваемое устройство, тип устройства (блочный или символьный), а также старший и младший номера. Например, предположим, что вы случайно удалили /dev/ttyS0 (COM1 в Windows), его можно воссоздать с помощью следующей команды

Для тех из нас, кто довольно ленив, вы можете просто запустить скрипт MAKEDEV как таковой

что создаст все известные устройства.

Если возможно, /dev также может содержать MAKEDEV.local для создания любых файлов локальных устройств.

В целом и в соответствии с требованиями FSSTND, MAKEDEV будет иметь возможность создавать любые устройства, которые могут быть обнаружены в системе, а не только те, которые устанавливаются конкретной реализацией.

Для тех из вас, кто задается вопросом, почему Linux использует такую ​​примитивную систему для ссылки на устройства, это потому, что мы не смогли разработать достаточно сложный механизм, обеспечивающий достаточно преимуществ по сравнению с текущей системой, чтобы добиться широкого распространения.

На сегодняшний день (начиная с версии ядра 2.4) лучшая попытка была предпринята Ричардом Гуча из CSIRO. Он называется devfsd и уже несколько лет является частью ядра. Он был санкционирован разработчиками ядра и самим Линусом, и подробности его реализации можно найти в /usr/src/linux/Documentation/filesystems/devfs/README. Ниже приведена выдержка из этого документа.

Devfs — это альтернатива «настоящим» символам и блокировка специальных устройств в вашей корневой файловой системе. Драйверы устройств ядра могут регистрировать устройства по имени, а не по старшим и младшим номерам. Эти устройства появятся в devfs автоматически, независимо от владельца и защиты по умолчанию, указанных в драйвере. Для переопределения этих значений по умолчанию можно использовать демон (devfsd). Devfs присутствует в ядре с версии 2.3.46.

ПРИМЕЧАНИЕ, что devfs является необязательным. Если вы предпочитаете старые узлы устройств на основе дисков, просто оставьте CONFIG_DEVFS_FS=n (по умолчанию). В этом случае ничего не изменится. ТАКЖЕ ОБРАТИТЕ ВНИМАНИЕ, что если вы включите devfs, по умолчанию будет сохранена полная совместимость со старыми именами устройств.

У devfs есть два аспекта: первый — это базовое пространство имен устройств, которое представляет собой такое же пространство имен, как и любая смонтированная файловая система. Другим аспектом является код файловой системы, который обеспечивает представление пространства имен устройства. Причина, по которой я делаю различие, заключается в том, что devfs можно монтировать много раз, при этом каждое монтирование показывает одно и то же пространство имен устройств. Сделанные изменения являются глобальными для всех смонтированных файловых систем devfs. Кроме того, поскольку пространство имен devfs существует без монтирования devfs, вы можете легко смонтировать корневую файловую систему, обратившись к записи в пространстве имен devfs.

Стоимость devfs заключается в небольшом увеличении размера кода ядра и использования памяти. Около 7 страниц кода (некоторые из них в секциях __init) и 72 байта для каждой записи в пространстве имен. В скромной системе всего пара сотен записей об устройствах, так что это стоит еще несколько страниц. Сравните это с предложением поместить /dev на виртуальный диск.

На обычном компьютере стоимость составляет менее 0,2 процента. В скромной системе с 64 МБ ОЗУ стоимость составляет менее 0,1 процента. Обвинения devfs в «вредоносных программах» необоснованны.


Почти все файлы в каталоге /dev являются файлами устройств. В то время как чтение и запись в обычный файл сохраняет данные на диске или в другой файловой системе, доступ к файлу устройства взаимодействует с драйвером в ядре, который обычно, в свою очередь, взаимодействует с аппаратным обеспечением (аппаратным устройством, отсюда и название). /p>

Существует два типа файлов устройств: блочные устройства (обозначаются b как первый символ в выводе ls -l ) и символьные устройства (обозначаются c ). Различие между блочными и символьными устройствами не является полностью универсальным. Блочные устройства — это такие вещи, как диски, которые ведут себя как большие файлы фиксированного размера: если вы записываете байт по определенному смещению, а затем читаете с устройства по этому смещению, вы получаете этот байт обратно. Символьные устройства — это почти что угодно, где запись байта имеет немедленный эффект (например, он передается в последовательную линию), а чтение байта также имеет немедленный эффект (например, он читается из последовательного порта).

Значение файла устройства определяется его номером, а не именем (имя имеет значение для приложений, но не для ядра). Номер на самом деле состоит из двух цифр: старший номер указывает, какой драйвер отвечает за это устройство, а младший номер позволяет драйверу управлять несколькими устройствами¹. Эти числа появляются в списке ls -l, где обычно указывается размер файла. Например. brw-rw---- 1 корневой диск 8, 0 12 июля 15:54 /dev/sda → это устройство старше 8, младше 0.

Некоторые файлы устройств в каталоге /dev не соответствуют аппаратным устройствам. Один, который существует в каждой системе unix, называется /dev/null ; запись в него не имеет никакого эффекта, а чтение из него никогда не возвращает никаких данных. Это часто удобно в сценариях оболочки, когда вы хотите игнорировать вывод команды ( >/dev/null ) или запустить команду без ввода ( ). Другими распространенными примерами являются /dev/zero (возвращает нулевые байты до бесконечности) /dev/urandom (возвращает случайные байты до бесконечности).

Некоторые файлы устройств имеют значение, которое зависит от процесса, который к ним обращается.Например, /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 и другие (каждый диск обозначается произвольной буквой, а разделы — в соответствии с разделом). layout), /dev/disk/by-id/* (диски, обозначенные уникальным серийным номером), /dev/disk/by-label/* (разделы с файловой системой, обозначенные выбранной человеком меткой); и больше. Символические ссылки также используются, когда общее имя устройства может быть одним из нескольких; например, /dev/dvd может быть символической ссылкой на /dev/sr0 или может быть ссылкой на /dev/sr1, если у вас есть два устройства чтения компакт-дисков, а второе должно быть устройством чтения DVD по умолчанию.

Наконец, есть несколько других файлов, которые вы можете найти в каталоге /dev по традиционным причинам. Вы не найдете то же самое в каждой системе. В большинстве Unix /dev/log — это сокет, который программы используют для создания сообщений журнала. /dev/MAKEDEV — это скрипт, который создает записи в /dev. В современных системах Linux записи в /dev/ создаются udev автоматически, что делает MAKEDEV устаревшим.

¹ На самом деле это уже не так в Linux, но эта деталь имеет значение только для разработчиков драйверов устройств.


/dev — это расположение специальных файлов или файлов устройств. Это очень интересный каталог, который подчеркивает один важный аспект файловой системы Linux — все является файлом или каталогом. … Этот файл представляет ваше устройство динамика. Любые данные, записанные в этот файл, будут перенаправлены на ваш динамик.

Контентидос

Что такое файл dev в Linux?

/dev: файловая система устройств

Устройства. В Linux под устройством понимается любая часть оборудования (или код, эмулирующий оборудование), обеспечивающий методы работы. ввод или вывод (IO). Например, клавиатура — это устройство ввода.

Какие типы файлов есть в dev?

  • Файл проекта Dev-C++.
  • Файл драйвера устройства Windows.

Что такое раздел разработки в Linux?

/dev не содержит разделов. /dev — это де-факто стандартное место для хранения всех узлов устройств. Первоначально /dev был обычным каталогом в корневой файловой системе (поэтому созданные узлы устройств пережили перезагрузку системы). В настоящее время в большинстве дистрибутивов Linux используется специальная виртуальная файловая система, поддерживаемая оперативной памятью.

Что содержит Proc в Linux?

Файловая система Proc (procfs) – это виртуальная файловая система, которая создается "на лету" при загрузке системы и удаляется при завершении работы системы. Он содержит полезную информацию о запущенных в данный момент процессах, считается центром управления и информации для ядра.

Что такое Linux Dev SHM?

/dev/shm — это не что иное, как реализация традиционной концепции разделяемой памяти. Это эффективное средство передачи данных между программами. Одна программа создаст часть памяти, к которой могут получить доступ другие процессы (если разрешено). Это приведет к ускорению работы в Linux.

Что такое Mkdev в Linux?

Данные два целых числа, MKDEV объединяет их в одно 32-битное число. Это делается путем сдвига влево старшего числа MINORBIT раз, т. е. 20 раз, а затем объединения результата с младшим числом. Например, если старший номер равен 2 => 000010, а младший номер равен 1 => 000001. Затем сдвиньте влево 2, 4 раза.

Что такое Class_create?

ОПИСАНИЕ Используется для создания указателя класса структуры, который затем можно использовать в вызовах device_create. Обратите внимание, созданный здесь указатель должен быть уничтожен после завершения вызовом class_destroy.

Какие существуют два типа файлов устройств?

Существует два типа файлов устройств; символьный и блочный, а также два режима доступа. Файлы блочных устройств используются для доступа к вводу-выводу блочных устройств.

Как LVM работает в Linux?

Диспетчер логических томов (LVM) в Linux представляет собой структуру сопоставления устройств, обеспечивающую управление логическими томами для ядра Linux.Большинство современных дистрибутивов Linux поддерживают LVM до такой степени, что могут размещать свои корневые файловые системы на логическом томе.

Что такое Lspci в Linux?

Команда lspci — это утилита в системах Linux, используемая для получения информации о шинах PCI и устройствах, подключенных к подсистеме PCI. … Первая часть ls — это стандартная утилита, используемая в Linux для вывода информации о файлах в файловой системе.

Читайте также: