【问题标题】:Why can I view some Unix executable files in Mac OS X and not others?为什么我可以在 Mac OS X 中查看一些 Unix 可执行文件,而在其他的则不能?
【发布时间】:2015-08-30 09:32:16
【问题描述】:

我在 Mac OS X 10.10 (Yosemite) 上使用 Macbook Pro。当我转到/usr/bin 时,git 是作为 unix 可执行文件存在的。当我在 Sublime Text 中打开它时,我得到的只是不可读的机器代码。然而,当我打开一个不同的 Unix 可执行文件时——在我的例子中,是我刚刚编写的一个 shell 脚本,但还有其他的——我可以在 Sublime Text 中打开该文件并查看脚本的内容。我检查了这两个文件的权限,它们是相同的。为什么打开某些文件时会有不同的行为?

【问题讨论】:

  • 这并不特定于 Mac 和 OS X,它在 UNIX 和 Linux 上是相同的,在某种程度上在 Windows 上也是如此。将 Windows .bat 文件与 Windows .exe 进行比较。

标签: git bash shell unix binary


【解决方案1】:

可执行文件可以是脚本(在这种情况下您可以阅读文本)或二进制文件(ELF 格式的机器代码)。你的shell脚本是一个脚本; git 是一个 ELF 二进制文件。

您可以使用file 命令查看更多详细信息。例如,在我最近的 Linux 系统上:

$ file /usr/local/bin/git
/usr/local/bin/git: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped

【讨论】:

  • 将可执行文件制作成二进制文件有什么好处吗?另外,二进制文件是由编译脚本生成的吗?
  • ELF 二进制文件由链接器从用 C 或 C++ 等语言编写的源代码生成。我想“优势”是如果你想用 C 语言编写,你最终会创建二进制可执行文件。脚本没有被编译,它们仍然是可读的脚本。
  • 你将如何用 C 或 C++ 编写可执行文件?我只是假设您可以制作的唯一可执行文件是某种形式的 shell 脚本。或者你会使用 C 在不同的 shell 中编写 shell 脚本吗?
  • 您的假设不正确。 C 程序从 C 源代码编译为机器代码,不涉及 shell 脚本代码。为此,请遵循任何介绍性 C 或 C++ 编程教程。
  • 从 C 源代码与脚本(例如 Bash 或 Python 脚本)创建二进制文件对于您正在做的事情和您想要实现的目标来说确实是特殊的。对于现代系统上最常见的用途,一个简单的 Bash 或 Python 脚本就足够快了。
猜你喜欢
  • 2015-11-17
  • 1970-01-01
  • 2016-11-08
  • 2012-09-28
  • 2012-06-05
  • 2015-07-07
  • 2011-06-27
  • 2016-03-03
  • 2012-01-06
相关资源
最近更新 更多