使用linux的过程中,我们会熟悉各种命令,偶尔我们不禁会问,这些命令是怎么实现的,学习他们其实是学习linux高级系统编程很快捷的方法。

这些命令的源码肯定是存放在相应的包里面,但是是哪些包呢?

发行版的包管理器为我们提供了很方便的命令接口,供我们查找我们指定命令所在的包

比如我们以最普通的uname命令来说明,

使用我们使用whereis或者which命令可以查找命令的绝对位置

通过rpm或者dpkg命令搜索命令所属的包信息

下载并安装对应的源码source包,即可得到源码

CentOS等rpm包管理器

搜索斌下载命令所属包

怎么查看某个命令的源代码

比如想查看uname这个命令的源代码

## 查看命令

which uname

## /bin/uname

##查看命令所属的包

rpm -qf /bin/uname

##下载对应的xxx.src.rpm源码包

yumdownloader --source coreutils-版本号

[问题1]

没有yumdownloader 的话可以这样子安装

yum install yum-utils

[问题2]

如果提示No Match for argument coreutil-5.97-23.el5_4.2

说明源中可能没有这个包,那么我们只能手动下载

去包站点http://vault.centos.org下载对应版本的包即可

注意

我们需要的是源码包,因此下载的应该是xxx.src.rpm的包。

安装或则解压源码包得到源码

下载了源码包以后有两种方法可以查看到源码包,

第一种方法

rpm -qpl coreutils-8.5-7.fc14.src.rpm | grep tar ##查询rpm中的tar文件,源码一般放在这里

##从rpm包中提取指定的文件

rpm2cpio coreutils-8.5-7.fc14.src.rpm | cpio -idv coreutils-8.5.tar.xz

tar xjvf coreutils-8.5.tar.xz

##到解压出来的coreutils-8.5/src/中就能找到相关的源码了

第二种方法:安装源码包

rpm -i coreutils-8.5-7.fc14.src.rpm ##安装源码包

centos和rhel一般安装后的源码在/usr/src/redhat下的各个目录下,但fedora是在~/rpmbuild/SOURCES/

可以通过locate命令查询代码包被安装到哪里了

locate coreutils*tar

/home/workhard/tmp/coreutils-8.5.tar.xz

/home/workhard/rpmbuild/SOURCES/coreutils-8.5.tar.xz

cd /home/workhard/rpmbuild/SOURCES/c

tar Jxvf coreutils-8.5.tar.xz

cd coreutils-8.5/src/

ll uname*

安装*.src.rpm后怎么卸载

cd /home/gatieme/rpmbuild/SOURCES

rpmbuild --rmsource --rmspec coreutils.spec

相关说明

yumdownloader

yumdownloader comes from the yum-utils package, if you don’t have that installed already.

yum install yum-utils

RPM用法

rpm {-i|--install} [install-options] PACKAGE_FILE ...

-f, --file FILE

Query package owning FILE.

-p, --package PACKAGE_FILE

Query an (uninstalled) package PACKAGE_FILE.

-l, --list

List files in package.

-qf:查找指定文件属于哪个RPM软件包

-qpl:列出RPM软件包内的文件信息;

rpm2cpio

Extract cpio archive from RPM Package Manager (RPM) package.

顾名思义,rpm2cpio是将rpm包文件转换成cpio归档文件

CPIO用法

cpio - copy files to and from archives

-i 抽取的意思,和"--extract"等同-d 建立目录,和"--make-directories"等同-v 冗余信息输出,和"--verbose"等同

rpmbuild用法

--rmsource

Remove the sources after the build

--rmspec

Remove the spec file after the build

Ubuntu等deb包

与RedHat系列的rpm包不同,Ubuntu使用的是Debian的deb包,因此搜索和安装的方式略有不同,但是思路是一样的

找到想看源码的命令属于哪个包:

dpkg -S `which cp`

coreutils: /bin/cp

下载源码:

apt-get -d source "coreutils"

其他发行版

其实我们从上面的过程就可以看到,大多数的命令源码都是在包coreutils中的,其他发行版直接下载即可

http://ftp.gnu.org/gnu/coreutils/

coreutils 是GNU下的一个软件包,包含linux下的 ls等常用命令。这些命令的实现要依赖于shell程序。

GNU/CoreUtils 是一组类 Unix 操作系统所需的基础软件包。它包含三组命令,常用的命令如 cat、ls、rm。

对于其他一些非标准的包,我们可以采用同样的方法,因为这些命令必然我们安装的包或者应用程序所自带的,比如git

再比如top命令等,就位于procps包中

linux应用程序逆向,Linux下查看并下载命令源码包(依据命令/应用程序逆向获取并且安装其所属源码包)...相关推荐

  1. linux应用程序逆向,Linux下查看并下载命令源码包(根据命令/应用程序逆向获取并且安装其所属源码包)...

    使用linux的过程中,我们会熟悉各种命令,偶尔我们不禁会问,这些命令是怎么实现的,学习他们其实是学习linux高级系统编程很快捷的方法. 这些命令的源码肯定是存放在相应的包里面,但是是哪些包呢? 发 ...

  2. Linux下查看DNS服务器IP地址以及使用host命令查询域名对应的IP地址

    Linux下查看DNS服务器IP地址以及使用host命令查询域名对应的IP地址 Linux使用etc/resolv.conf文件来存放DNS服务器的IP地址,使用cat命令查看. cat /etc/r ...

  3. wince程序转Linux,Qt在程序WinCE5.0下部署时“XXX不是有效的Windows CE应用程序”

    文章参看这里.这个一般是由于我们编译的Qt使用了WinCE CoreDll.dll中不存在的API导致的 我们需要使用一个工具qtverify.zip 具体下载目录在 /2012年资料/8月/14日/ ...

  4. linux下查看进程占用端口和端口占用进程命令

    Linux下查看进程占用端口: 查看程序对应进程号:ps –ef|grep 进程名 REDHAT :查看进程号所占用的端口号:netstat –nltp|grep 进程号 ubuntu:查看进程占用端 ...

  5. Linux下查看CPU型号,内存大小,硬盘空间的命令(详解)

    1 查看CPU 1.1 查看CPU个数*核心数 cat /proc/cpuinfo | grep "physical id" | uniq | wc -l 96 #一共96核 2 ...

  6. Linux下查看文件占用空间大小的du 和df 命令

    Linux下查看文件占磁盘大小一般使用du或df命令 df命令:用于显示磁盘分区上的可使用的磁盘空间.默认显示单位为KB.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. du命令 ...

  7. linux 实时 网口 速率_linux 下查看网卡工作速率-阿里云开发者社区

    [root@hadoop058 ~]# mii-tool eth0: negotiated 100baseTx-FD, link ok 100M linux 下查看网卡工作速率 Ethtool是用于查 ...

  8. linux下查看系统内存使用情况的几个命令

    最近在客户现场运行的arm linux嵌入式设备出现了死机情况,由于接触linux嵌入式设备时间不长,遇到该问题后觉得束手无措.后领导提示说查看其他没有死机设备的系统资源使用情况,下面介绍下我用到的那 ...

  9. 查看linux系统版本centos,CentOS下查看系统版本的4种方法

    Linux有很多的发行版,不同的版本会有一些细微区别,所以经常需要查看服务器系统的版本号. 下面来看下CentOS下如何查看CentOS版本. 方法1:cat /etc/issue 执行命令:[www ...

  10. Linux下 启动SELinux命令,Linux下查看SELinux状态和关闭SELinux的方法命令是什么

    Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统.对于SELinux状态可能很多用户不知道怎么设置,这篇文章主要介绍了Linux下查看SELinux状态和关闭SELi ...

最新文章

  1. 【UR #4】元旦三侠的游戏(博弈论+记忆化)
  2. Codeforces Round #470 (rated, Div. 2 C. Producing Snow(思维)
  3. ITK:创建3D体积
  4. 【ArcGIS Pro微课1000例】0012:ArcGIS Pro属性表中文乱码完美解决办法汇总
  5. appium java简单实例_Appium创建一个Note的实例
  6. MaxCompute规格详解 让您花更低的成本获得更高的业务价值
  7. xlsxwriter写行合并_使用实现XlsxWriter创建Excel文件并编辑
  8. ubuntu 安装使用多版本opencv
  9. ORB_SLAM2探秘 第二章
  10. 吹塑模具和注塑模具的区别
  11. 斩获GitHub 2000+ Star,阿里云开源的Alink机器学习平台如何跑赢双11数据“博弈”?...
  12. am相干解调matlab文档,AM调制与解调.doc
  13. pon终端测试仪_PON产品测试方案
  14. ALV字段目录lvc_s_fcat
  15. 个人免签码支付源码+监控APP【野马资源网】
  16. [附源码]SSM计算机毕业设计高校奖学金评定管理系统JAVA
  17. 统计中文文本中人物出现次数
  18. Sizzle选择器揭秘--Sizzle选择器
  19. Java对接阿里云短信平台(快速上手)
  20. Word 怎样设置页眉页脚高度

热门文章

  1. 公司项目NODEJS实践0.1[ ubuntu,nodejs,nginx...]
  2. Centos下更新php
  3. 中文分词:采用二元词图以及viterbi算法(一)
  4. smartphone软件的安装方法
  5. 【笔记】mac os命令行编译objective-c
  6. Android 使用handler实现线程间发送消息 (主线程 与 子线程之间)、(子线程 与 子线程之间)
  7. 2008服务器系统来电自启,服务器2008自动重启
  8. Luogu2216 [HAOI2007]理想的正方形
  9. 修改element ui的table的某一列的样式
  10. 黑马品优购项目的总结二