Linux에는 어떤 유형의 실행 파일이 있습니까?

Linux에는 어떤 유형의 실행 파일이 있습니까?

예를 들어 내가 그렇게 하면

[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는 이 "실행 파일"을 스크립트로 해석하려고 하는 것 같습니다. 그러나 이것이 분명히 발생하지 않는 두 가지 상황이 있습니다. 파일이 로 시작하는 경우 #!와 ELF 파일인 경우입니다. 더 이상 없나요? 이에 대한 포괄적인 문서가 어딘가에 있습니까?

답변1

확장됨다른 답변에 대한 내 이전 의견, 커널7개의 바이너리 로더가 포함되어 있습니다.(There로 시작하는 파일을 찾 binfmt_거나 읽어보세요.binfmt구체적인Kconfig):

이는 커널이 실행할 수 있는 실행 파일의 유형을 결정합니다. binfmt_misc특히 커널이 다른 많은 바이너리를 처리할 수 있도록 허용합니다(적어도 호출 프로세스의 관점에서 볼 때).exec기능 중 하나).

그러나 C 라이브러리와 셸 자체도 포함되므로 이것이 모든 것을 다루지는 않습니다. POSIX에서는 이제 커널이 실행할 수 없는 실행 파일을 발견할 때 셸을 사용하여 실행을 시도하는 기능이 execlp필요 합니다.execvp이유는 여기에 있다더 알아보기.

이들 모두는 다음에서 볼 수 있는 동작을 제공하는 방식으로 상호 작용합니다.쉘에서 파일을 실행하면 정확히 무슨 일이 발생합니까?그리고Shebang 없이 스크립트를 실행하는 쉘 인터프리터는 무엇입니까?

관련 정보