/init
在早期的用户空间中,/sbin/init
、 和/sbin/request-key
是 Linux 内核访问的三个文件(它们都是可执行文件)。 Linux 是否打开任何其他文件(可能是不可执行的文件)?就像包含系统上用户名称的文件一样?
答案1
一般来说,Linux 内核不会代表它自己(而不是代表进程)打开文件。 Even /sbin/init
(或在内核命令行上指定的“init”程序)exec()
由进程编辑(进程 1 直接从内核内部的映像构建,IIRC)。
曾经,需要固件的内核模块会直接打开固件文件,但现在情况不再如此,而是内核向用户模式帮助程序发出请求。
如果您的问题是哪些文件名被编译到 Linux 内核中,那么我们会在种子进程 1 的“init”映像中看到以下内容:
/init
/sbin/init
/etc/init
/bin/init
/bin/sh
/dev/console
递归 grep for"/
会出现相当多的命中;大多数是误报,但值得仔细寻找真正的匹配。
答案2
关于用户名,内核不需要(也不关心)它们,因为它只处理数值用户 ID(uid 0,又名root
,可能具有特殊状态)。看凭证(7)&能力(7)
从用户名到用户 ID 的转换是通过libc
以下函数完成的获取pwnam(3)。可以为此libc
访问文件(尤其是),请参阅/etc/passwd
nsswitch.conf(5)
关于从现有进程之外的内核内部打开文件(使用打开(2)...)据我所知内核才刚刚开始很少进程来自/sbin/init
(或其他/bin/sh
)、、、、、/sbin/request-key
等...您可以通过使用未/sbin/tomoyo-init
压缩的内核文件来获取完整列表。/sbin/modprobe
/sbin/poweroff
strings
vmlinux
另请注意,动态加载器中硬编码了多个文件路径(请参阅ld-linux(8)等等...)或标准 C 库(您的libc.so
)几乎所有应用程序都需要。