Bash 在哪里可以找到像grep这样的终端命令的源代码?

Bash 在哪里可以找到像grep这样的终端命令的源代码?,bash,terminal,Bash,Terminal,由于我是编程新手,我想问一下在哪里可以找到终端命令的源代码,并使用vim等编辑器查看它们。例如,如果我键入“which grep”,然后尝试“vim/usr/bin/grep”,则输出的格式不可读 感谢在一个标准的Linux系统上有(至少)两种不同类型的可执行文件;编译和解释的可执行文件 grep将是一个编译过的可执行文件的例子,因为一旦它被编译,它就不再是人类可读的了。有一些工具,比如反汇编程序,可以将可执行文件转换为汇编语言,但操作系统附带的grep命令的内容不太可能有足够的信息来重新创建可

由于我是编程新手,我想问一下在哪里可以找到终端命令的源代码,并使用vim等编辑器查看它们。例如,如果我键入“which grep”,然后尝试“vim/usr/bin/grep”,则输出的格式不可读

感谢

在一个标准的Linux系统上有(至少)两种不同类型的可执行文件;编译和解释的可执行文件

grep将是一个编译过的可执行文件的例子,因为一旦它被编译,它就不再是人类可读的了。有一些工具,比如反汇编程序,可以将可执行文件转换为汇编语言,但操作系统附带的grep命令的内容不太可能有足够的信息来重新创建可读的源代码。如果在典型的Linux发行版上使用vim打开它,那么在开始处应该会看到“ELF”;这表明它是ELF(可执行和可链接格式)格式的二进制文件,ELF格式是二进制机器语言可执行文件的格式

另一种类型的可执行文件是解释的可执行文件。这是您可以使用文本编辑器检查的文件类型。一种典型的方法是在/usr/bin中的一些文件上运行file(或者任何其他具有可执行文件的目录)

尝试此操作以查找可以检查的文件列表。例如,在我的ubuntu机器上,文件为shell脚本输出“POSIX shell脚本,ASCII文本可执行文件”

cd /usr/bin
file * | grep -v ELF
或者,如果由于
参数列表太长而失败(谢谢@Jetchisel),请尝试以下操作:

cd /usr/bin
find . -type f | xargs file
有关获取grep源代码的问题,请参见注释。

在标准Linux系统上,有(至少)两种不同类型的可执行文件;编译和解释的可执行文件

grep将是一个编译过的可执行文件的例子,因为一旦它被编译,它就不再是人类可读的了。有一些工具,比如反汇编程序,可以将可执行文件转换为汇编语言,但操作系统附带的grep命令的内容不太可能有足够的信息来重新创建可读的源代码。如果在典型的Linux发行版上使用vim打开它,那么在开始处应该会看到“ELF”;这表明它是ELF(可执行和可链接格式)格式的二进制文件,ELF格式是二进制机器语言可执行文件的格式

另一种类型的可执行文件是解释的可执行文件。这是您可以使用文本编辑器检查的文件类型。一种典型的方法是在/usr/bin中的一些文件上运行file(或者任何其他具有可执行文件的目录)

尝试此操作以查找可以检查的文件列表。例如,在我的ubuntu机器上,文件为shell脚本输出“POSIX shell脚本,ASCII文本可执行文件”

cd /usr/bin
file * | grep -v ELF
或者,如果由于
参数列表太长而失败(谢谢@Jetchisel),请尝试以下操作:

cd /usr/bin
find . -type f | xargs file

查看有关获取grep源代码的问题的注释。

可以找到GNU grep。我不能直接使用终端查看代码吗?
grep
已编译,因此如果您没有获取其源代码,则无法查看。一旦你得到它,你肯定可以在任何你喜欢的工具中查看它,不管是终端还是非终端。@kallikles安装在你计算机上的程序是一个编译版本——也就是说,它已经从人类可读的源代码翻译成了CPU能理解的机器代码(人类不能理解,除非是严重的书呆子)。一旦它以这种形式出现,就不需要源代码,因此通常不会保存在您的计算机上。通常情况下,数据源根本就不在计算机上;有人编译了它,使机器代码二进制可用,这就是你的计算机上下载/安装的所有内容。Python是一种解释语言,而不是编译语言(嗯……它实际上有点复杂),这意味着它永远不会完全转换成机器可读的格式。您仍然有源代码,因此您可以看到在该级别发生了什么。如果编译语言的IDE可以访问源代码,它也可以做类似的事情。在没有访问源代码的情况下,调试器仍然可以让您看到正在发生的事情,但它将用CPU指令(汇编语言)而不是源代码来描述它。可以找到GNU Grep。我不能用终端直接查看代码吗?
Grep
是编译的,因此如果您没有得到它的源代码,您就不能。一旦你得到它,你肯定可以在任何你喜欢的工具中查看它,不管是终端还是非终端。@kallikles安装在你计算机上的程序是一个编译版本——也就是说,它已经从人类可读的源代码翻译成了CPU能理解的机器代码(人类不能理解,除非是严重的书呆子)。一旦它以这种形式出现,就不需要源代码,因此通常不会保存在您的计算机上。通常情况下,数据源根本就不在计算机上;有人编译了它,使机器代码二进制可用,这就是你的计算机上下载/安装的所有内容。Python是一种解释语言,而不是编译语言(嗯……它实际上有点复杂),这意味着它永远不会完全转换成机器可读的格式。您仍然有源代码,因此您可以看到在该级别发生了什么。如果编译语言的IDE可以访问源代码,它也可以做类似的事情。在没有访问源代码的情况下,调试器仍然可以让您看到正在发生的事情,但它将用CPU指令(汇编语言)而不是源代码来描述它。除非您点击
ARGMAX
,否则您将看到
arg列表太长
,或者类似的内容good point@Jetschisel;我在一个相当小的系统上完成了这项工作,在/usr/bin中只有不到1000个文件。我将更新我的答案,以解释可能会触发此错误的大量文件