Linuxカーネルはどのファイルにアクセスしますか?

Linuxカーネルはどのファイルにアクセスしますか?

/init初期ユーザースペースでは、Linuxカーネルがアクセスする3つのファイル(すべて実行可能ファイルです)/sbin/init/sbin/request-keyLinuxでは、他のファイル(実行不可能なファイルかもしれません)を開くことはできますか?システムのユーザー名を含むファイルと同じですか?

答え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/passwdnsswitch.conf(5)

既存のプロセス外のカーネル内でファイルを開くことに関連してオープン(2)...)私が知っている限り、カーネルは始まったばかりです。珍しい/sbin/init(またはその他/bin/sh)、、、、、などのプロセス...圧縮されていないカーネルファイルを/sbin/request-key使用して完全なリストを取得できます。/sbin/tomoyo-init/sbin/modprobe/sbin/poweroffstringsvmlinux

さらに、動的ローダーには複数のファイルパスがハードコードされています(参照:ld-Linux(8)など...)または標準Cライブラリ(あなたのものlibc.so)がほぼすべてのアプリケーションに必要です。

関連情報