Linux 一些/proc和/dev问题

Linux 一些/proc和/dev问题,linux,unix,linux-kernel,Linux,Unix,Linux Kernel,(1) /proc是否总是出现在所有linux系统上,或者它是某个地方的一个选项(例如内核编译、引导等) (2) 什么决定了/proc中存在哪些子目录?它们是否总是相同的,或者它们是可配置的和/或可由用户空间程序创建的(可能以root用户身份运行) (3) 我注意到/dev/shm存在于我的系统中,而不必挂载它,也不存在于/etc/fstab中。这是自动的还是由什么东西造成的?相反,我必须装载/dev/mqueue。这不是也应该自动安装吗 (4) 以编程方式确定是否安装了设备或目录的正常/最佳方

(1) /proc是否总是出现在所有linux系统上,或者它是某个地方的一个选项(例如内核编译、引导等)

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

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

(4) 以编程方式确定是否安装了设备或目录的正常/最佳方法是什么?应该只查找开放性错误还是有API调用

谢谢

  • /proc
    通常由init脚本装载,如下所示:

    mount none /proc -t proc
    proc
    是内核导出的虚拟文件系统。它的内容完全由内核和加载的模块决定,这些模块可以注册以添加额外的条目

    *除了
    /proc
    中的一些子目录通常与其他虚拟文件系统一起过度装载,例如:
    mount none/proc/bus/usb-t usbfs-o devmode=0664,devgid=plugdev

    mount none/proc/sys/fs/binfmt\u misc-t binfmt\u misc

    mount none/proc/fs/nfsd-t nfsd

  • 检查初始化脚本
    /sbin/init
    查看
    /etc/inittab
    以确定要运行的内容,通常是
    /sbin/rc
    或类似内容,然后通过
    /etc/rcS.d/*
    等,并且您的发行版也很可能在initramfs中进行初步设置

  • 视情况而定

    您可以读取
    mount
    命令的输出,或
    /proc/mounts
    文件,或
    /proc/self/mounts
    /
    /proc/self/mountinfo
    文件在较新内核上的输出,以确定当前装载的内容

    您可以将目录的
    stat
    st_dev
    与其父目录进行比较;如果不同,则目录是装入点

    除非您编写的代码是在非标准系统上运行的,或在系统设置之前启动时运行的,否则您可能会假定已安装
    /dev
    /proc
    /sys

  • 大多数(如果不是所有)公开发行版都配置proc文件系统,并在启动时装载它,因为它非常有用。但是您当然可以禁用它并获得一个工作的内核-尽管用户空间将受到限制

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

  • 发行版的开发人员可以选择要装载的内容和位置

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


  • 至于第4点,格式完全相同:
    /etc/mtab->/proc/mounts
    $ grep proc /proc/filesystems nodev proc