/init
初期ユーザースペースでは、Linuxカーネルがアクセスする3つのファイル(すべて実行可能ファイルです)/sbin/init
。/sbin/request-key
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を実行すると、"/
かなりのヒットが発生します。ほとんどは偽の肯定ですが、実際の一致を注意深く見る価値があります。
答え2
ユーザー名に関しては、カーネルはユーザー名だけを扱うので、必要ありません(気にしません)。数値ユーザーID(uid 0、別名root
特殊状態を持つことができます)バウチャー(7)&能力(7)
ユーザー名からユーザーIDへの変換は、libc
次の機能を介して行われます。getpwnam(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
)がほぼすべてのアプリケーションに必要です。