たとえば、私がそうした場合
[OP@localhost executable]$ cat garbage
lalala
trololol
[OP@localhost executable]$ chmod +x garbage
[OP@localhost executable]$ ./garbage
./garbage: line 1: lalala: command not found
./garbage: line 2: trololol: command not found
Bashはこの「実行ファイル」をスクリプトとして解釈しようとしているようです。しかし、これが明らかに起こらない2つの状況があります。ファイルがで始まる場合#!
とELFファイルの場合。もうありませんか?これに関する包括的な文書はどこにありますか?
答え1
拡張他の回答に対する私の以前のコメント、カーネル7つのバイナリローダーが含まれています。(Thereで始まるファイルを検索またはbinfmt_
読みます。binfmt
具体的なKconfig
):
a.out
(現在執行停止);- 非常に低い周波数。
- FDPIC ELF(ARM、MMUなしのSuperH、C6x)。
em86
(アルファ);- フラットバイナリ(MMUレスシステム、ARMまたはM68k)
- スクリプト;
- 全能者
binfmt_misc
(あなたも見ることができます/proc/sys/fs/binfmt_misc/ 以下のファイルにはどのタイプの実行可能ファイル形式がありますか?)。
これは、カーネルが実行できる実行可能ファイルの種類を決定します。binfmt_misc
特に、カーネルが他の多くのバイナリを処理できるようにします(少なくとも呼び出しプロセスの観点から見て)。exec
機能の一つ)。
しかし、Cライブラリとシェル自体も含まれているので、これはすべてをカバーするわけではありません。 POSIXでは、カーネルが実行できない実行可能ファイルを見つけるときにシェルを使用して実行しようとする機能がexeclp
必要になりました。execvp
理由はここにあるもっと学ぶ。
これらはすべて、次のような動作を提供する方法で対話します。シェルからファイルを実行すると、正確に何が起こりますか?そしてShebangなしでスクリプトを実行するシェルインタプリタとは何ですか?