据我所知,当我运行像ping、grep或ls这样的命令时,Linux操作系统会在目录/bin中搜索这些命令名;我也知道大多数Linux命令都是用C编写的。
我只是想看看ping或ls是如何用实际C编写的,但是当我用cat /bin/ping编写一个文件时,它会释放垃圾数据,因为它是二进制格式的。
那么,有什么方法可以查看用C编写的命令吗?
发布于 2022-04-30 20:51:19
它有助于知道哪个包提供命令。例如,在许多(但不是所有!)Linux发行版,ls命令由GNU coreutils包提供。您可以通过以下来自核心网页的链接找到这些命令的源。
ping命令由iputils包提供;您可以找到souces 这里。
大多数发行版提供了一种机制来确定包拥有什么文件。例如,在Ubuntu上,我们可以使用dpkg-query,如下所示:
$ dpkg-query -S /bin/ls
coreutils: /bin/lsRed /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以外的其他东西,可能会有类似的机制可用。大多数发行版还提供命令行工具,用于按名称下载源包。
发布于 2022-04-30 20:49:04
当您说cat /bin/ping时,您试图查看从C源代码编译的命令的二进制代码。您应该查找命令的C源代码。有关更多信息,请参考如何读取外壳命令的源代码?。
发布于 2022-05-01 06:23:21
在linux中有一些分析二进制命令的方法,包括:
https://unix.stackexchange.com/questions/700984
复制相似问题