Инструменты пользователя

Инструменты сайта


dev

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

dev [2012/01/17 07:38] (текущий)
Строка 1: Строка 1:
 +===== /dev: файловая система для устройств =====
 +Источник:​ [[http://​www.nixp.ru/​articles/​%D0%A4%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D1%8B%D0%B5-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B-dev-%D0%B8-proc-%D0%B2-Linux-2-4.html|Файловые системы /dev и /proc в Linux 2.4]]
  
 +Устройства:​ В Linux устройство является специальным «оборудованием» (или кодом, эмулирующим его), которое представляет методы для ввода или вывода информации (IO — Input/​Output). Например,​ клавиатура — устройство для ввода. Жесткий диск — устройства для ввода (запись) и вывода (чтение). Большинство устройств в Linux'​е представлено как файлы в особой файловой системе (за исключением сетевых карт). Эти файлы хранятся в каталоге /dev, куда к ним обращается система для выполнения задач, связанных с вводом/​выводом.
 +
 +Грубо говоря,​ устройства можно разделить на две категории:​ символьные и блочные. Символьные устройства вводят/​выводят по символам. Наиболее показательным примером служит клавиатура,​ у которой нажатие каждой клавиши формирует символ,​ передаваемый компьютеру. Мышь работает немного по-другому. Каждое движение или нажатие на кнопку отправляет символ на /dev/mouse.
 +
 +Блочные устройства считывают данные большими объемами. Примерами служат устройства для хранения данных,​ такие как IDE жесткие диски (/dev/hd), SCSI жесткие диски (/dev/sd) и CD-ROM'​ы (например,​ /dev/cdrom0 — символическая ссылка на первый CD-ROM). Операции ввода/​вывода блочные устройства проводят с определенными блоками данных,​ что позволяет работать с большими объемами информации более эффективно.
 +
 +Названия устройств:​ Устройства часто называются путем сокращения имен представляемого ими оборудования. Устройства с именами /dev/fb представляют буферы фреймов (frame buffers) для графики. Устройства /dev/hd представляют IDE жесткие диски (hard disks). В некоторых случаях для пояснения того, чем является устройство,​ используются символические ссылки:​ например,​ /dev/mouse, устройство,​ представляющее мышь, может быть прилинковано к последовательному,​ USB или PS2 устройству,​ в зависимости от железа. Символическая ссылка помогает и человеку,​ и машине разобраться,​ какое из устройств — мышь.
 +
 +Иногда бывает несколько устройств одного типа. Например,​ у машины два ATAPI CD-ROM'​а. Каждому CD-приводу нужен файл в /dev. В таком случае,​ возможен вариант,​ что /dev/cdrom0 будет первым CD-ROM'​ом,​ а /dev/cdrom1 — вторым.
 +
 +С именами жестких дисков немного сложнее. Название устройства жесткого диска зависит от типа диска, его позиции и раздела (partition'​а). Первый жесткий диск может быть назван /dev/hda, где часть «hd» означает,​ что это IDE жесткий диск, а «a» показывает,​ что это первый жесткий диск. Тогда /dev/hdb будет ссылаться на второй жесткий диск. Каждый жесткий диск разбит на разделы. Первый раздел первого жесткого диска получит название /dev/hda1, где единица в конце обозначает номер раздела. Обратите внимание на то, что, если индексы некоторых устройств (например,​ /​dev/​cdrom0) могут начинаться с нуля, то индекс устройств с разделами обычно начинается с единицы. Вот примерный список файлов в /dev для двух IDE жестких дисков:​
 +
 +<​file>​
 +/dev/hda;
 +/dev/hda1;
 +/dev/hda2;
 +/dev/hda3;
 +/dev/hda4;
 +/dev/hdb;
 +/dev/hdb1;
 +/dev/hdb2;
 +/dev/hdb3.
 +</​file>​
 +SCSI жесткие диски используют /dev/sd вместо /dev/hd, но все остальное выглядит также. /dev/sda1 ссылается на первый раздел первого SCSI жесткого диска.
 +
 +Специальные устройства:​ Существует несколько специальных устройств,​ которые порой бывают очень полезны:​ /dev/null, /dev/zero, /dev/full и /​dev/​random.
 +
 +Нулевое устройство,​ /dev/null представляет собой что-то типа «мусорной корзины». Часто некоторые программы выводят множество ненужной информации. Shell-скрипты обычно используют /dev/null для того, чтобы пользователь не видел ненужных ему сообщений от вызываемых утилит. Вот пример вызова модуля ядра с выводом всех сообщений в /dev/null.
 +
 +<​file>​
 +$ modprobe cipher-twofish > /dev/null
 +</​file>​
 +/dev/zero близок к /dev/null. Как и /dev/null, устройство может быть использовано для блокирования вывода ненужной информации,​ но чтение /dev/zero возвращает \0 символы (чтение /dev/null возвращает символы end-of-file — конец файла). Поэтому /dev/zero обычно используется для создания пустых файлов.
 +
 +<​file>​
 +$ dd if=/​dev/​zero of=/my-file bs=1k count=100
 +</​file>​
 +Такая команда (см. выше) создаст файл размером в 100 кб, наполненный null-символами.
 +
 +/dev/full служит для имитации «полного» устройства. Запись в /dev/full сопровождается ошибкой. «Полное» устройство полезно для того, чтобы посмотреть,​ как тестируемое приложение будет себя вести при попытки доступа к заполненному устройству (т.е. например,​ к жесткому диску, на котором не осталось места).
 +
 +<​file>​
 +$ cp test-file /dev/full
 +cp: writing `/​dev/​full":​ No space left on device
 +$  df -k /dev/full
 +file system ​          ​1k-blocks ​    Used Available Use% Mounted on
 +/​dev/​full  ​
 +</​file> ​                 0        0         ​0 ​  -
 +Устройства /dev/random и /​dev/​urandom создают «случайные» данные. Хотя вывод обоих может показаться абсолютно случайным,​ /dev/random более случаен чем /​dev/​urandom. /dev/random создает случайные символы,​ основываясь на «окружающем шуме». Так как количество этого случайного шума ограничено,​ /dev/random работает медленно и может временно останавливаться для дальнейшего сбора данных. /​dev/​urandom использует тот же шум, что и /​dev/​random,​ но если случайных данных больше нет, оно создает псевдо-случайные данные. Таким образом увеличивается его скорость,​ но уменьшается безопасность.
 +
 +Старая файловая система /dev: Раньше файловая система /dev была частью обычной файловой системы. Она состояла из специальных файлов,​ созданных однажды (обычно при установке системы) и сохраненных на жестком диске.
 +
 +В старых системах файловая система /dev должна содержать информацию обо всех устройствах,​ которые могут быть подключены к компьютеру. Из-за этого /dev была слишком большой — приходилось хранить сведения о множестве жестких дисков,​ дисководов и т.п. Ранее мы рассматривали список разделов жесткого диска hdb. В старой файловой системе /dev приходилось содержать файлы с /dev/hdb1 до /dev/hdb11. Чтобы выяснить,​ какие устройства действительно привязаны к разделам жесткого диска (если помните,​ у меня всего три раздела на hdb), нужно вызвать специальную утилиту. Команда "file -s hdb*" поможет в этом разобраться:​
 +
 +<​file>​
 +$ file -s /dev/hdb?
 +/dev/hdb1: Linux/i386 ext2 file system
 +/dev/hdb2: Linux/i386 ext2 file system
 +/dev/hdb3: Linux/i386 ext2 file system
 +/dev/hdb4: empty
 +/dev/hdb5: empty
 +/dev/hdb6: empty
 +/dev/hdb7: empty
 +/dev/hdb8: empty
 +/dev/hdb9: empty
 +</​file>​
 +Если указанного файла устройства не было, приходилось его создавать с помощью [[mknod]] или другой программы (типа MAKEDEV). Хотя «старый способ» работал,​ он был сложен и неудобен.
 +
 +DevFS: В ядрах 2.4.x была представлена альтернативная дисковая файловая система /dev. Эта альтернатива,​ DevFS, подключала код нового устройства в ядро. В DevFS файловая система /dev создается во время каждого запуска компьютера и сохраняется в оперативной памяти,​ а не на жестком диске. При использовании этой модели пропадает нужда в поддержке списка всех возможных устройств,​ а когда появляется новое устройство,​ ядро просто делает для него запись в /dev. Если же устройствам нужна особая настройка в DevFS, существует конфигурационный файл (обычно /​etc/​devfsd.conf).
dev.txt · Последние изменения: 2012/01/17 07:38 (внешнее изменение)