Linuxはinode番号を介して直接プログラム呼び出しをサポートしますか?

Linuxはinode番号を介して直接プログラム呼び出しをサポートしますか?

文字列の比較は遅いですが、インデックス付けは速く、私が書いているスクリプトの多くがbashにあるので質問します。 bashは、私が知っている限り、すべての実行可能呼び出しに対して完全な文字列検索を実行します。これらすべてのls' とgrep' は、各ステップで文字列検索を実行しなくても少し速くなります。もちろん、コンパイラの最適化を探ります。

とにかく、inode番号だけを使用してLinux上でプログラムを直接呼び出すことはできますか?

ベストアンサー1

最も簡単な答えは「いいえ」です。

より長い答えは、LinuxユーザーAPIがinode番号を使用してファイルにアクセスする方法をサポートしていないことです。 inode番号への唯一のアクセスは通常、inode番号を公開するstat()システムコールを介して行われます。これは、2つのファイル名が同じファイルかどうかを識別するのに役立ちますが、他のファイルには役立ちません。

inodeを介してファイルにアクセスすると、inodeに関連付けられているファイルを含むディレクトリの権限がバイパスされるため、セキュリティに違反します。

最も近い方法は、ファイルハンドルを開いてファイルにアクセスすることです。ただし、ここでもプログラムを実行することはできず、パスを介してファイルを開く必要があります。 (説明で述べたように、この機能はセキュリティ上の理由から* atシステムコールの残りの部分と一緒にLinuxに追加されましたが、移植可能ではありません。(標準は進化しています)。

inode番号を使用して(デフォルトでファイルシステムをキャッチし、statを使用して)ファイルを見つけて正常に実行する方法もありますが、パス名を介してファイルにアクセスするよりもはるかにコストがかかるため、これは望むものとは反対です。そのコストを排除しないでください。

しかし、Linuxはすでに内部inodeルックアップに対して多くの最適化を実行しているため、この種の最適化について心配する必要はほとんどありません。また、シェルは伝統的に実行可能ファイルのパスの場所をハッシュしているため、$PATH毎回すべてのディレクトリでそのファイルを見つける必要はありません。

おすすめ記事