/proc/sys/fs/binfmt_misc/ 下的文件允許哪些可執行格式?
我關注邁克爾的回复 ,看看我的 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/
嗎?謝謝。
看看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 不需要任何註冊,核心本身就支持它。