我只知道 Ascii text 里面会引入 /bin/bash 这个 ELF 可执行文件 那这两种文件类型的具体区别,各自的利弊,以及 Ascii text 的运行原理 有大神指教下吗
1
wzxlovesy 2018-11-17 10:16:14 +08:00 via Android 4
建议你补习一下计算机常识。
|
2
chih758 2018-11-17 10:21:32 +08:00
|
3
kaohaonan6666 OP @chih758 刚看到 3.1... 等我看完应该就懂了
|
4
changnet 2018-11-17 11:39:39 +08:00 via Android
text 不是可执行文件,是由 bash 解析的
|
5
ysc3839 2018-11-17 12:39:26 +08:00 via Android
你说的“ Ascii Text ”应该指的是这个 https://en.wikipedia.org/wiki/Shebang_(Unix)
|
6
iRiven 2018-11-17 12:41:09 +08:00 via Android
其实我搞不懂的是为啥 Linux 的 init 进程可以是一个 shell 脚步
|
7
iwtbauh 2018-11-17 12:46:48 +08:00 via Android
|
8
webdisk 2018-11-17 12:48:43 +08:00
@iRiven #6 因为是内核支持的格式啦,你可以在 linux 内核 menu config 里面找到相关的选项。
还有就是 windows 上的 exe 在安装 wine 后也能直接运行, 原理就是 binfmt |
9
iwtbauh 2018-11-17 12:50:34 +08:00 via Android
@iRiven #6
内核启动完毕后,内核会创建线程然后调用 sys_execve 去执行 /sbin/init (或者内核参数 init=),execve 会检查文件类型,对于 elf 文件去执行 elf 文件,对于#!开头的文件去执行#!后面的东西。 也就是说 text executable 和 elf executable 是对用户和应用程序透明的,无脑 exec 即可 |
10
kaohaonan6666 OP @ysc3839 就是通过 file 命令查看 shell 脚本的文件格式
|
11
feather12315 2018-11-17 13:01:11 +08:00 via Android
execv 系列 syscall,支持#开头的可执行文件,就酱
|
12
ysc3839 2018-11-17 16:33:29 +08:00 via Android
@kaohaonan6666 因为那就是纯文本文件,所以这么显示。
|
13
Osk 2018-11-17 16:43:34 +08:00 via Android
text 一般是脚本,由对应的脚本解释器翻译成对应硬件体系的机器码执行。
elf 大部分情况下是包含一堆直接可以由硬件执行的机器指令。 脚本一般可读性很不错,机器码的话,天书了。 反正记住 cpu 只认它对应的机器码(指令集)。 这样理解就清楚多了,虽然不准确,且可能有特殊情况。 |
16
rangerforce007 2018-11-17 23:28:46 +08:00
Ascii text 可执行文件 原来是 shell 脚本啊
|
17
kaohaonan6666 OP @Osk 那为什么比如 hadoop 体系下的 一些启动脚本都是采用 text 方式,而比如 mysql 的服务启动脚本却直接编译成机器码呢
|