Git 为什么我可以在Mac OS X中查看某些Unix可执行文件而不能查看其他文件?

Git 为什么我可以在Mac OS X中查看某些Unix可执行文件而不能查看其他文件?,git,bash,shell,unix,binary,Git,Bash,Shell,Unix,Binary,我使用MacOSX10.10(约塞米蒂)上的MacBookPro。当我转到/usr/bin时,git作为unix可执行文件存在。当我打开它在崇高的文本,所有我得到的是不可读的机器代码。但是,在我的例子中,当我打开一个不同的Unix可执行文件时,我刚刚编写了一个shell脚本,但还有其他脚本,我可以用升华文本打开该文件并查看脚本的内容。我已经检查了这两个文件的权限,它们是相同的。为什么打开某些文件时会有不同的行为?可执行文件可能是脚本(在这种情况下,您可以读取文本)或二进制文件(是ELF格式的机器

我使用MacOSX10.10(约塞米蒂)上的MacBookPro。当我转到
/usr/bin
时,
git
作为unix可执行文件存在。当我打开它在崇高的文本,所有我得到的是不可读的机器代码。但是,在我的例子中,当我打开一个不同的Unix可执行文件时,我刚刚编写了一个shell脚本,但还有其他脚本,我可以用升华文本打开该文件并查看脚本的内容。我已经检查了这两个文件的权限,它们是相同的。为什么打开某些文件时会有不同的行为?

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

您可以使用
文件
命令查看更多详细信息。例如,在我最近的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脚本的速度已经足够快了。这并不特定于Mac和OS X,它在UNIX和Linux上是一样的,在一定程度上在Windows上也是一样的。将Windows.bat文件与Windows.exe进行比较。