New*_*lls 2 unix linux linux-kernel
(1) /proc 是否始终存在于所有 Linux 系统上,还是某处的一个选项(例如内核编译、引导等)?
(2) /proc 中存在哪些子目录由什么决定?这些是否始终相同,或者它们是否可以由用户空间程序(大概以 root 身份运行)进行配置和/或创建?
(3) 我注意到 /dev/shm 存在于我的系统上,无需安装它,也不存在于 /etc/fstab 中。这是自动的还是有什么东西造成的?相反,我必须挂载/dev/mqueue。这不应该也是自动安装的吗?
(4) 以编程方式确定设备或目录是否已安装的正常/最佳方法是什么?应该只查找未解决的错误,还是有相应的 API 调用。
谢谢。
/proc通常由 init 脚本安装,如下所示:
不挂载 /proc -t proc
如果不这样做,您将看不到预期的内容/proc(但您也将拥有一个不兼容 POSIX 的系统)。
$ 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
检查您的初始化脚本。 /sbin/init查看/etc/inittab以确定要运行的内容(通常/sbin/rc或类似的内容),然后执行/etc/rcS.d/*等等,并且您的发行版也很有可能在 initramfs 中进行初步设置。
依靠。
您可以读取命令的输出mount、/proc/mounts文件或较新内核上的/proc/self/mounts//proc/self/mountinfo文件,以确定当前安装的内容。
您可以将目录的st_devofstat与其父目录进行比较;如果不同,则该目录是挂载点。
除非您正在编写要在非标准系统上运行的代码或在系统设置之前启动时运行的代码,否则您可以假设已安装 、 、/dev等/proc。/sys