【问题标题】:A few /proc and /dev questions几个 /proc 和 /dev 问题
【发布时间】:2010-12-15 02:57:08
【问题描述】:

(1) /proc 是始终存在于所有 linux 系统上还是某个选项(例如内核编译、启动等)?

(2) 什么决定了 /proc 中存在哪些子目录?这些是否总是相同的,或者它们是否可以由用户空间程序配置和/或创建(可能以 root 身份运行)?

(3) 我注意到 /dev/shm 存在于我的系统中,而无需挂载它,它也不存在于 /etc/fstab 中。这是自动的还是有什么东西创造了它?相反,我必须挂载/dev/mqueue。这不应该也是自动挂载的吗?

(4) 以编程方式确定设备或目录是否已安装的正常/最佳方法是什么?是否应该只查找打开的错误,或者是否有针对此的 API 调用。

谢谢。

【问题讨论】:

    标签: linux unix linux-kernel


    【解决方案1】:
    1. 大多数(如果不是全部)公开可用的发行版都会配置 proc 文件系统并在启动时挂载它,因为它非常有用。但是你当然可以禁用它并获得一个可以工作的内核——不过用户空间会受到限制。

    2. /proc 下可用的目录由编译内核时的驱动程序及其选项决定。您不能从用户空间创建新目录或文件。

    3. 您的发行版的开发人员选择要挂载的内容和位置。

    4. 您可以运行 mount(8) 或者如果 /proc 已安装,您可以窥探 /proc/mounts 。挂载程序还使用相同的信息维护 /etc/mtab,但格式略有不同。

    【讨论】:

    • 至于第4点,格式一模一样/etc/mtab -> /proc/mounts
    【解决方案2】:
    1. /proc 通常由初始化脚本挂载,如下所示:

      无挂载 /proc -t proc

      如果不这样做,您将看不到 /proc 的预期内容(但您也将拥有一个不符合 POSIX 的系统)。

    2. $ grep proc /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 文件的输出,以确定当前挂载的内容。

      您可以将目录的statst_dev 与其父目录进行比较;如果不同,则该目录是一个挂载点。

      除非您正在编写代码以在非标准系统上运行或在系统设置之前在引导时运行,否则您可以假设已安装 /dev/proc/sys 等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 2015-01-03
      相关资源
      最近更新 更多