如何获取linux下命令源码?命令的源代码是以一个软件包为单位,放在一个软件包的源代码中。如果你想下载一个命令的源代码,你必须下载这个命令所属软件包的源代码。命令的源代码在下载的源代码的相关文件夹中。一般是src文件夹,对应的主文件名是cmd.c,其中cmd是详细的命令,比如ls命令的主程序文件是ls.c
因为在不同的Linux发行版上。源代码不是以同样的获得的。所以以下面两个常用的Linux发行版Ubuntu和CentOS为例来说明。
1.Ubuntu中获取系统命令源代码的方法。
以32位Ubuntu14.04获取ls命令源代码为例,可以通过以下方法下载源代码:
1)使用哪个命令查看ls命令的位置,如下所示:
哪个ls#输出:/bin/ls
2)使用dpkg命令查询ls命令所属的包。例如,以下内容:
Dpkg-S/bin/ls#输出:cor:/Bin/LS.
3)使用apt-get命令下载ls命令所在包的源代码。例如,以下内容:
apt-getsourcecoreutils
注意:
1)使用dpkg时。如果有错误。您可以使用sudo命令以root权限运行它。
2)将使用apt-getsource下载的源代码保存到当前文件夹。
。另外,当我们知道命令属于哪个包的时候,也可以从相应的官网下载。
2.CentOS中获取系统命令源代码的方法。
以32位CentOS6.6下获取的ls命令源代码为例,可以使用以下方法下载源代码:
1)配置源代码的来源
在CentOS中,源的配置文件是:,更改此文件需要root权限。
打开文件并检查文件的内容。在我的电脑上,该文件的内容如下:
#
#
#镜像系统使用客户端的连接IP地址
#更新每个镜像的状态,以选择更新到和的镜像
#地理上靠近客户。你应该用这个来更新CentOS
#除非您手动选择其他镜像。#
#如果mirrorlist=对您不起作用,作为退路,您可以尝试
#改为注释掉了baseurl=line。
#
#
[基本]
name=CentOS-$releasever-base
mirrorlist=$releaseveramparch=$basearchamprepo=OS
#baseURL=$releasever/OS/$basearch/
gpgcheck=1
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
#发布的更新
[更新]
name=CentOS-$releasever-更新
mirrorlist=$releaseveramparch=$basearchamprepo=updates
#baseURL=$releasever/updates/$basearch/
gpgcheck=1
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
#可能有用的附加软件包
[临时演员]
name=CentOS-$releasever-Extras
镜像列表=
release=$releaseveramparch=$basearchamprepo=extras
#baseURL=$releasever/extras/$basearch/
gpgcheck=1
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
#扩展现有软件包功能的附加软件包
[centosplus]
name=CentOS-$releasever-Plus
mirrorlist=$releaseveramparch=$basearchamprepo=centosplus
#baseurl=$releasever/centosplus/$basearch/
gpgcheck=1
启用=0
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
#Centos用户的贡献包
[贡献]
name=CentOS-$releasever-Contrib
mirrorlist=$releaseveramparch=$basearchamprepo=contrib
#baseURL=$releasever/contrib/$basearch/
gpgcheck=1
启用=0
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
这个文件中有两个变量:releasever和basearch。分别代表发布版本号和分支。比如在我的电脑上,这两个值分别是6和i386。注意。Releasever没有细分为次要版本号。也就是说,它赢了不要6.6什么的。
从这个文件的内容可以看出,这个文件总共有5个部分。也就是说我的电脑有五个软件源,分别是base、updates、extras、centosplus和contrib。因此只需要指定其源代码的来源,例如以下五个软件来源。例如,在文件末尾添加以下内容:
[base-src]
name=CentOS-$releasever-basesrc
baseurl=
gpgcheck=1
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
[更新-src]
name=CentOS-$releasever-更新src-centos
baseurl=
gpgcheck=1
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
[附加服务-src]
name=CentOS-$releasever-Extrassrc-CentOS
baseurl=
gpgcheck=1
gpgk:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[centosplus-src]
name=CentOS-$releasever-Plussrc-CentOS
baseurl=
gpgcheck=1
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
[contrib-src]
name=CentOS-$releasever-Contribsrc-CentOS
baseurl=
gpgcheck=1
gpgK:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6
因为不同的版本号设置会有所不同,所以其设置也会有所不同,方法可以概括如下:
(1)1)gpgkey与本文档中现有部分的gpgkey相同。
(2)为了确认档案的存在和情况,可以打开站点查看详细情况,然后根据详细情况填写。
(3)设置baseurl时,要根据自己系统的版本号来设置。如果我的机器是CentOS-6.6,设置时相关参数会设置为6.6。也就是后面的子路径是6.6。
这个文件的目的是为yum及其相关作品的下载提供一个源码。例如,当使用yumdownloader(下面讨论)下载源代码时。例如,将发生以下操作:
(1)下载$baseurl/repodata/repomd.xml文件。如果repomd.xml文件比系统中的文件新。更新系统中相应的repomd.xml。
(2)下载$baseurl/SPackages/中对应的源rpm包。
2)使用哪个命令查看ls命令的位置,如下所示:
哪个是
#输出:/bin/ls
3)使用rpm命令查询ls命令所属的包,如下所示:
rpm-qf/bin/ls
#输出:coreutils-8.4-37.el6.i686
4)yumdownloader是一个从RPM源码下载RPM的程序,可以用命令yumdownloader安装源码。例如,以下内容:
yumdownloader-sourcecoreutils-8.4-37.el6.i686
注意:
(1)如果没有安装yumdownloader命令,可以使用此命令安装:yuminstallyum-utils。
(2)下载的文件在当前文件夹中。可以使用参数-destdir指的是决定下载到哪个文件夹。
5)你用yumdownloader下载的是一个安装包文件rpm,你可以用以下命令查询rpm中的tar文件,例如:
rpm-qpl|greptar
#output:coreutils-8.4.tar.xz
6)使用rpm2cpio命令将rpm包文件转换为cpio存档文件,然后使用cpio命令从cpio存档文件中复制并提取一个存档文件。举以下例子:
rpm2cpio|cpio-idvcoreutils-8.4.tar.xz
#输出:
#coreutils-8.4.tar.xz
#9561街区
Cpiosman解释为:cpio将文件复制到一个存档中
-i:相当于-extract。提取的含义
-d:相当于-make-directory,必要时创建一个加载文件夹。
-v:列出了文件的处理过程。
7)使用tar命令解压coreutils-8.4.tar.xz压缩包,如下:
tar-xvf。/coreutils-8.4.tar.xz
至此,该命令的源代码已经获得。