我关注迈克尔的回复 查看我的 Ubuntu 可以识别并执行哪些可执行格式
$ ls -l /proc/sys/fs/binfmt_misc/
total 0
-rw-r--r-- 1 root root 0 Apr 19 16:11 cli
-rw-r--r-- 1 root root 0 Apr 19 16:11 jar
-rw-r--r-- 1 root root 0 Apr 19 16:11 python2.7
-rw-r--r-- 1 root root 0 Apr 19 16:11 python3.5
--w------- 1 root root 0 Apr 19 16:11 register
-rw-r--r-- 1 root root 0 Apr 19 16:11 status
我从未刻意更改过任何内容,这些文件是默认创建的或当我安装其他程序时创建的。
$ cat /proc/sys/fs/binfmt_misc/cli
enabled
interpreter /usr/lib/binfmt-support/run-detectors
flags:
offset 0
magic 4d5a
这是什么样的可执行格式?我用谷歌搜索“magic 4d5a”并发现https://en.wikipedia.org/wiki/DOS_MZ_executable,但我不确定该文件是如何在那里创建的,因为它不是 Linux 的本机可执行格式。安装wine
添加了吗?
$ cat /proc/sys/fs/binfmt_misc/jar
enabled
interpreter /usr/lib/jvm/java-9-oracle/lib/jexec
flags:
offset 0
magic 504b0304
以上是JVM字节码格式吗?
$ cat /proc/sys/fs/binfmt_misc/python3.5
enabled
interpreter /usr/bin/python3.5
flags:
offset 0
magic 160d0d0a
上面是Python字节码还是Python?
$ cat /proc/sys/fs/binfmt_misc/status
enabled
$ cat /proc/sys/fs/binfmt_misc/register
cat: /proc/sys/fs/binfmt_misc/register: Permission denied
有何/proc/sys/fs/binfmt_misc/register
用途?它还允许某些可执行格式吗?
ELF 格式是否需要 下的文件/proc/sys/fs/binfmt_misc/
?
谢谢。
答案1
看Mono 有何神奇之处?了解更多背景。/proc/sys/fs/binfmt_misc
是由其管理的虚拟文件系统binfmt_misc
(这就是文件大小均为 0 的原因)。
cli
用于 Windows 和 .NET 可执行文件(实际上是任何 MZ 可执行文件,也用于 DOS 和 OS/2);它所引用的检测器确定给定的二进制文件应该使用 Wine 还是 Mono 运行。
jar
提供对 Java 程序使用的 JAR 文件的支持。因此,您可以制作 JAR 可执行文件,并直接运行它(而不是使用java -jar ...
)。
这些python
文件提供对 Python 字节码的支持。
status
显示 的总体状态binfmt_misc
:在本例中,它已启用。
register
允许注册新格式。这是通过以特定格式回显字符串来完成的(请参阅文档欲了解详情)至register
.注册的格式将作为新文件与cli
、jar
和其他文件一起显示。
可以使用 注册多种可执行格式binfmt_misc
。它们可以使用文件扩展名(.jar
等等,尽管 JAR 文件是通过其“PK”签名来标识)或魔术值(“MZ”等)进行匹配,只要魔术值出现在前 128 个字节内即可。除了您列出的文件之外,通常以这种方式处理的其他格式是其他架构的二进制文件(由 QEMU 或 Hatari 等模拟器“解释”)、一些解释的游戏格式(游戏引擎love
以这种方式在 Debian 下注册自身,网址为至少)...
在 Debian 及其衍生版本中,软件包使用以下方式注册二进制格式binfmt-support
和文件/usr/share/binfmts/cli
;dlocate -S /usr/share/binfmts/*
会告诉您哪些软件包正在添加二进制格式。
ELF 不需要任何注册,它由内核原生支持。