如何查看linux内置命令的源代码?

如何查看linux内置命令的源代码?

ping据我所知,当我运行像或grep或 这样的命令时ls,Linux操作系统将在目录中搜索这些命令名称/bin;我还知道大多数 Linux 命令都是用 C 编写的。

我只是想看看pingorls是如何在实际的 C 中编写的。但是当我cat使用 的文件时cat /bin/ping,它会吐出垃圾数据,因为它是二进制格式的。

那么有没有办法查看用C编写的命令呢?

答案1

它有助于了解哪个包提供了该命令。例如,在许多(但不是全部!)Linux 发行版上,该ls命令由 GNU 软件包提供coreutils。您可以通过以下链接找到这些命令的来源coreutils 网页

ping命令由包提供iputils;你可以找到来源这里


大多数发行版都提供了一种机制来确定哪个包拥有某个文件。例如,在 Ubuntu 上,我们可以使用dpkg-query,如下所示:

$ dpkg-query -S /bin/ls
coreutils: /bin/ls

Red Hat/Fedora/CentOS/etc 对应的命令是:

$ rpm -qf /bin/ls
coreutils-8.32-33.fc35.x86_64

如果您知道提供您感兴趣的文件的包,则通常可以通过查找您的发行版提供的相应源包来找到源代码。对于 Ubuntu,您可以访问https://packages.ubuntu.com/并按名称查找包;如果你搜索iputils,你最终会得到这里,您将找到下载用于构建该包的源的链接。

对于 Fedora 软件包,您可以访问https://packages.fedoraproject.org/并搜索该包。在这种情况下,您需要读取该spec文件(例如,这个是 iputils 的)找出在哪里可以找到来源。

如果您使用的是 Ubuntu 或 Fedora 以外的其他系统,可能会有类似的机制可用。大多数发行版还提供命令行工具,用于按名称下载源包。

答案2

当您说 时cat /bin/ping,您正在尝试查看从 C 源代码编译的命令的二进制代码。您应该寻找该命令的 C 源代码。请参阅如何阅读shell命令的源代码?了解更多信息。

答案3

linux中有一些分析二进制命令的方法,包括:

  1. 文件,确定文件类型。
  2. ldd,打印共享对象依赖关系。
  3. ltrace,库调用跟踪器。
  4. Hexdump,以 ASCII、十进制、十六进制或八进制显示文件内容。
  5. strings,打印文件中可打印字符串。
  6. readelf,显示有关ELF文件的信息。
  7. objdump,显示目标文件中的信息。
  8. strace,跟踪系统调用和信号。
  9. nm,列出目标文件中的符号。
  10. gdb,GNU 调试器。

相关内容