Несколько вопросов / proc и / dev - PullRequest
2 голосов
/ 10 ноября 2009

(1) Всегда ли / proc присутствует во всех системах linux или это где-то опция (например, компиляция ядра, загрузка и т. Д.)?

(2) Что определяет, какие подкаталоги присутствуют в / proc? Они всегда одинаковы или их можно настраивать и / или создавать с помощью программ пользовательского пространства (предположительно запускаемых с правами root)?

(3) Я заметил, что / dev / shm присутствовал в моей системе без необходимости его монтирования и не присутствовал в / etc / fstab. Это автоматически или что-то создает? И наоборот, я должен смонтировать / dev / mqueue. Разве это не должно быть установлено автоматически?

(4) Каков нормальный / лучший способ программно определить, смонтировано ли устройство или каталог? Стоит ли искать открытые ошибки или для этого есть вызов API.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 10 ноября 2009
  1. /proc обычно монтируется сценариями инициализации, например:

    mount none /proc -t proc
    

    Если этого не сделать, вы не увидите ожидаемое содержимое /proc (но тогда у вас также будет не POSIX-совместимая система).

  2. $ grep proc /proc/filesystems
    nodev   proc
    

    proc - это виртуальная файловая система, экспортируемая ядром. Его содержимое полностью * определяется ядром и загруженными модулями, которые могут регистрироваться для добавления дополнительных записей.

    * За исключением того, что в /proc есть несколько подкаталогов, которые обычно перемонтируются с другими виртуальными файловыми системами, например:
    mount none /proc/bus/usb -t usbfs -o devmode=0664,devgid=plugdev
    mount none /proc/sys/fs/binfmt_misc -t binfmt_misc
    mount none /proc/fs/nfsd -t nfsd

  3. Проверьте ваши сценарии инициализации. /sbin/init смотрит на /etc/inittab, чтобы определить, что запускать, что часто /sbin/rc или подобное, которое затем проходит через /etc/rcS.d/* и т. Д., И также есть хорошая вероятность, что ваш дистрибутив выполнит предварительную настройку в initramfs а также.

  4. Зависит.

    Вы можете прочитать вывод команды mount, или файла /proc/mounts, или файлов /proc/self/mounts / /proc/self/mountinfo в более новых ядрах, чтобы определить, что в настоящий момент смонтировано.

    Вы можете сравнить st_dev из stat каталога с его родителем; если отличается, каталог является точкой монтирования.

    Если вы не пишете код для запуска в нестандартной системе или при загрузке до того, как система будет настроена, вы можете предположить, что /dev, /proc, /sys и т. Д. Смонтированы.

2 голосов
/ 10 ноября 2009
  1. Большинство, если не все общедоступные дистрибутивы, настраивают файловую систему proc и монтируют ее при запуске, потому что это очень полезно. Но вы, конечно, можете отключить его и получить работающее ядро ​​- пользовательское пространство будет перегружено.

  2. Каталоги, доступные в / proc, определяются драйверами и их параметрами при компиляции ядра. Вы не можете создавать новые каталоги или файлы там из пространства пользователя.

  3. Разработчики вашего дистрибутива выбирают, что и где монтировать.

  4. Вы можете запустить mount (8) или, если / proc смонтирован, вы можете просмотреть / proc / mounts. Программа монтирования также поддерживает / etc / mtab с той же информацией, но отформатированной немного по-другому.

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