Linux/Unix系统中编译程序源码存储位置及/sbin/ping源码查找
编译程序源码的存储位置与Linux/Unix下的查找方法
首先得明确:编译程序的源码并没有统一固定的存储位置,得看具体情况:
- 如果是你自己手动编译安装的程序,源码通常是你下载后解压的那个目录,比如很多人会习惯放在
~/src或者自定义的/opt/src这类路径下,完全由你自己决定; - 如果是系统预装的编译好的程序(比如你提到的
/sbin/ping),它的源码不会直接存在系统里,需要通过对应发行版的包管理器去获取。
接下来重点说说在Linux/Unix系统里,怎么找到像/sbin/ping这类程序的精确源码,以主流发行版为例:
步骤1:确定程序所属的软件包
不同发行版的命令不一样:
- Debian/Ubuntu系列:用
dpkg -S /sbin/ping,执行后会输出类似iputils-ping: /sbin/ping,这就说明ping属于iputils-ping这个软件包; - RHEL/CentOS/Fedora系列:用
rpm -qf /sbin/ping,会得到类似iputils-20160308-10.el7.x86_64的结果,对应的源码包就是iputils。
步骤2:获取对应软件包的源码
同样分发行版操作:
- Debian/Ubuntu系列:先确保你开启了源码仓库(编辑
/etc/apt/sources.list,把带deb-src的行注释去掉),然后执行sudo apt update,接着用apt source iputils-ping,系统会自动下载该包的源码并解压到当前目录; - RHEL/CentOS/Fedora系列:先安装
yum-utils工具(sudo yum install yum-utils),然后执行sudo yumdownloader --source iputils,下载完成后会得到一个.src.rpm文件,用rpm -ivh iputils-*.src.rpm解压,源码会被放到~/rpmbuild/SOURCES目录下,同时对应的spec文件在~/rpmbuild/SPECS里。
其他补充方法
- 如果是你自己编译的程序,忘了源码在哪,可以看看程序的版本信息(比如
ping -V),然后根据版本号去对应的开源项目仓库下载对应版本的源码; - 有些程序的
man页里会提到源码的项目线索,比如man ping里可能会有相关说明,你可以留意一下。
内容的提问来源于stack exchange,提问作者Július Marko
相关产品推荐
相关产品推荐

