Linux系统的命令源代码的获取方法
来源:互联网 发布:linux不能图形界面切换 编辑:程序博客网 时间:2024/05/16 08:32
我们知道,Linux是开源的,它自带的功能强大的命令也是开源的,也就是说,我们可以获得这些命令的源代码并研究它。那究竟如何获得系统的命令的源代码呢?
命令的源代码是一个软件包为单元的,放在一个软件包的源代码中,若要下载一个命令的源代码,就要把这个命令所属的软件包的源代码都下载下来。命令的源代码就在下载的源代码的相关目录内,通常是src目录,相应的主文件名为cmd.c,其中cmd为具体的命令,如ls命令的主程序文件为ls.c。
由于在不同的Linux发行版上,源代码的获取方法并不相同,所以下面以Ubuntu和CentOS这两种常用的Linux发行版为例子进行说明。
1、Ubuntu中系统命令源代码的获取方法
以32位Ubuntu14.04下,获取ls命令的源代码为例,可以使用如下的方法下载源代码:
1)使用which命令查看ls命令的位置,如下:
which ls # 输出:/bin/ls
2)使用dpkg命令查询ls命令所属的包,如下:
dpkg -S /bin/ls # 输出:coreutils: /bin/ls
3)使用apt-get命令来下载ls命令所在的包的源代码,如下:
apt-get source coreutils
注:
1)在使用dpkg时,若出现错误,可以使用sudo命令使其以root权限执行。
2)使用apt-get source下载的源代码保存到当前目录下。。此外,当我们知道了命令所属的包后,也可以到相应的官方网站下载。
2、CentOS中系统命令源代码的获取方法
以32位CentOS6.6下,获取ls命令的源代码为例,可以使用如下的方法下载源代码:
1)配置源代码的源
在CentOS中,源的配置文件为:/etc/yum.repos.d/CentOS-Base.repo,修改该文件需要root权限。
打开该文件,查看该文件的内容,在本人的机子上,该文件的内容如下:
- # CentOS-Base.repo
- #
- # The mirror system uses the connecting IP address of the client and the
- # update status of each mirror to pick mirrors that are updated to and
- # geographically close to the client. You should use this for CentOS updates
- # unless you are manually picking other mirrors.
- #
- # If the mirrorlist= does not work for you, as a fall back you can try the
- # remarked out baseurl= line instead.
- #
- #
- [base]
- name=CentOS-$releasever - Base
- mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
- #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
- gpgcheck=1
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
- #released updates
- [updates]
- name=CentOS-$releasever - Updates
- mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
- #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
- gpgcheck=1
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
- #additional packages that may be useful
- [extras]
- name=CentOS-$releasever - Extras
- mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
- #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
- gpgcheck=1
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
- #additional packages that extend functionality of existing packages
- [centosplus]
- name=CentOS-$releasever - Plus
- mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
- #baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
- gpgcheck=1
- enabled=0
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
- #contrib - packages by Centos Users
- [contrib]
- name=CentOS-$releasever - Contrib
- mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
- #baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
- gpgcheck=1
- enabled=0
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
该文件中有两个变量:releasever和basearch,分别表示release版本和分支,如本人的机子上,这两个值分别为6和i386。注意,releasever并不会细分为次级版本,即不会是6.6之类的。
从该文件的内容可以知道,该文件共有5个节,也就是说本人的机子的软件来源有5处,分别为base、updates、extras、centosplus和contrib。所以只需要为如下的5处软件源指定其源代码的源即可。在文件的末尾加上如下的内容:
- [base-src]
- name=CentOS-$releasever - Base src
- baseurl=http://vault.centos.org/6.6/os/Source/
- gpgcheck=1
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
- [updates-src]
- name=CentOS-$releasever - Updates src-centos
- baseurl=http://vault.centos.org/6.6/updates/Source/
- gpgcheck=1
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
- [extras-src]
- name=CentOS-$releasever - Extras src-centos
- baseurl=http://vault.centos.org/6.6/extras/Source/
- gpgcheck=1
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
- [centosplus-src]
- name=CentOS-$releasever - Plus src-centos
- baseurl=http://vault.centos.org/6.6/centosplus/Source/
- gpgcheck=1
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
- [contrib-src]
- name=CentOS-$releasever - Contrib src-centos
- baseurl=http://vault.centos.org/6.6/contrib/Soruce/
- gpgcheck=1
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
由于不同的版本设置会有所不同,所以其设置会有所不同,方法可总结为如下:
(1)gpgkey与该文件中已有的节的gpgkey相同
(2)为了确认文件的存在和情况,可以打开网站http://vault.centos.org/查看具体的情况,再根据具体的情况来填写
(3)设置baseurl时需要根据自己的系统的版本来设置,如本人的机子为CentOS-6.6,则在设置时,相关的参数就设置为6.6,即http://vault.centos.org/后接的子路径为6.6。
该文件的作用是为yum其及相关工作的下载提供一个源,如在使用yumdownloader(下面会讲到)下载源代码时,会发生如下动作:
(1)下载$baseurl/repodata/repomd.xml文件,若该repomd.xml文件比系统中的新,更新系统中的相应的repomd.xml
(2)下载$baseurl/SPackages/中的相应的源代码rpm包。
2)使用which命令查看ls命令的位置,如下:
which ls
# 输出:/bin/ls
rpm -qf /bin/ls
# 输出:coreutils-8.4-37.el6.i686
4)yumdownloader是一个从RPM源下载RPM的程序,可以使用yumdownloader命令安装源代码,如下:
yumdownloader --source coreutils-8.4-37.el6.i686
注:
(1)若yumdownloader命令没有安装,则可以使用此命令安装:yum install yum-utils。
(2)下载的文件在当前目录下,可以使用参数--destdir指定下载到哪一个目录。
5)使用yumdownloader下载到的是一个安装包文件rpm,可以使用如下的命令查询rpm中的tar文件:
rpm -qpl coreutils-8.4-37.el6.src.rpm | grep tar
# 输出:coreutils-8.4.tar.xz
6)使用rpm2cpio命令将rpm包文件转换成cpio归档文件,再使用cpio命令,从cpio归档文件复制提取出一个归档文件,出如下:
rpm2cpio coreutils-8.4-37.el6.src.rpm | cpio -idv coreutils-8.4.tar.xz
# 输出:
# coreutils-8.4.tar.xz
# 9561 blocks
cpio的man解释为:cpio copies files into an archive
-i:与--extract等同,提取之意
-d:与--make-directories等同,当有需要时创建一个加载目录
-v:列出文件的处理过程
7)使用tar命令对coreutils-8.4.tar.xz压缩包进行解压缩,如下:
tar -xvf ./coreutils-8.4.tar.xz
至此,命令的源代码获取完成。
0 0
- Linux系统的命令源代码的获取方法
- Linux系统的命令源代码的获取方法
- Linux系统的命令源代码的获取方法
- Linux系统的命令源代码的获取方法
- Linux系统的命令源代码的获取方法
- 如何获取Linux系统命令的源代码
- 获取Linux系统命令的源代码
- 获取Linux命令源代码的方法
- 获取Linux命令源代码的方法
- [转]如何获取Linux命令的源代码
- 查看 linux 命令源代码的方法
- 获取unix/linux系统命令的源码
- 获取 Linux命令源代码
- linux命令获取源代码
- Linux系统date命令的参数及获取时间戳的方法
- Linux系统date命令的参数及获取时间戳的方法
- linux c 获取系统时间的方法
- linux下获取系统时间的方法
- ERROR: Can't get master address from ZooKeeper; znode data == null
- struts2 的三种开发模式 小结
- oracle获取拼音首字母函数
- The Single Responsibility Principle
- chdir与getcwd
- Linux系统的命令源代码的获取方法
- Java基础
- C++对象模型之详述C++对象的内存布局
- eclipse使用技巧
- MIGO+103收货到GR冻结库存和MB1B+344从非限制到冻结区别?
- 假期训练专题及模板——排序
- stm32.cube(二)——HAL结构及初始化
- 编写、调试linux常用命令杂记
- 滚动条到底部自动加载