RPM命令以及源码编译
1.应用程序与系统命令的关系
1.对比系统命令和应用程序的不同
- 位置: Linux中一切皆为文件 演示内部命令和外部命令 位置 应用程序位置
- 用途: 命令主要处理系统的基本操作(复制,配置) 应用程序可以完成独立的任务浏览器访问网页
- 使用环境 字符界面 字符和桌面
- 格式 命令的格式 命令参数对象 无固定格式
2.典型应用程序的目录结构
| **文件类型** | **保存目录** |
| -------------------------------- | -------------- |
| 普通执行程序文件 | /usr/bin |
| 服务器执行程序文件和管理程序文件 | /usr/sbin |
| 应用程序配置文件 | /etc |
| 日志文件 | /var/log |
| 应用程序参考文档文件 | /usr/share/doc |
3.常见的软件包封装类型
| **文件类型** | **保存目录** |
| ------------------ | ------------------------------------------------------------ |
| RPM软件包 | 扩展名为“.rpm” |
| DEB软件包 | 扩展名为“.deb” |
| 源代码软件包 | 一般为“.tar.gz”、“.tar.bz2”等格式的压缩包 包含程序的原始代码 |
| 绿色免安装的软件包 | 软件包的扩展名不一,以TarBall格式的居多 在压缩包内提供已编译好的执行程序文件 解开压缩包后的文件即可直接使用 |
1. RPM包 : RPM Package Manager的缩写 是红帽公司自主研发的一款工具,实用性强。RPM包是预先在linux机器上编译好并打包好的文件,安装起来非常快捷。但是也有一些缺点,比如安装的环境必须与编译时的环境一致或者相当;包与包之间存在相互依赖的情况。
2. DEB包:在Linux系统中类似于windows中的软件包(exe),几乎不需要什么复杂的编译即可通过鼠标点击安装使用。此外,deb广泛应用于越狱后iOS软件及MeeGo(含Maemo软件)中。Debian包是将包的文件信息以及包内容,经过gzip和tar打包而成。
3. 源代码软件包 :是需要我们自己把源代码编译成二进制的可执行文件。如果你读得懂这些源代码,那么你就可以去修改这些源代码自定义功能,然后再去编译成你想要的。使用源码包的好处除了可以自定义修改源代码外还可以定制相关的功能,因为源码包在编译的时候是可以附加额外的选项的。
4. 绿色免安装的软件包 :顾名思义自行理解比如Windows的截图软件
<font >查看rpm包里面的内容</font>
[root@localhost Packages]# rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -tv
软件包中的文件分类
#### RPM包管理工具
Red-Hat Package Manager
由Red Hat公司提出,被众多Linux发行版所采用
建立统一的数据库文件(一张对应表将信息写入)
详细记录软件包安装、卸载等变化信息
自动分析软件包依赖关系
RPM软件包
软件素材参考:http://www.rpm.org
##### 一般命名格式
bash-4.1.2-15.el6_4.x86_64.rpm
bash shell环境 版本信息 4.1.2 15发布次数 x86_64硬件(为“i386”或“i686”等)
拆包后的分类
```bash
[root@localhost Packages]# ll httpd*
-rw-rw-r--. 2 root root 2835196 8月 11 2017 httpd-2.4.6-67.el7.centos.x86_64.rpm
-rw-rw-r--. 2 root root 197360 8月 11 2017 httpd-devel-2.4.6-67.el7.centos.x86_64.rpm
-rw-rw-r--. 2 root root 1402824 8月 11 2017 httpd-manual-2.4.6-67.el7.centos.noarch.rpm
-rw-rw-r--. 2 root root 89284 8月 11 2017 httpd-tools-2.4.6-67.el7.centos.x86_64.rpm
#主包 开发包 手册包 工具包
程序包管理器相关文件
- 包文件组成 (每个包独有)
- 包内的文件
- 元数据,如:包的名称,版本,依赖性,描述等
- 可能会有包安装或卸载时运行的脚本
- 数据库(公共):/var/lib/rpm (安装好后会将一些公共的数据放入数据库中)
-
程序包名称及版本
-
依赖关系
-
功能说明
-
包安装后生成的各文件路径及校验码信息
包数据库:
[root@localhost Packages]# ll /var/lib/rpm
#很关键安装卸载包都需要
总用量 96744
-rw-r--r--. 1 root root 4157440 8月 27 09:30 Basenames
-rw-r--r--. 1 root root 16384 8月 27 09:30 Conflictname
-rw-r--r--. 1 root root 311296 8月 27 10:07 __db.001
-rw-r--r--. 1 root root 90112 8月 27 10:07 __db.002
-rw-r--r--. 1 root root 1318912 8月 27 10:07 __db.003
-rw-r--r--. 1 root root 1159168 8月 27 09:30 Dirnames
-rw-r--r--. 1 root root 32768 8月 27 09:30 Group
-rw-r--r--. 1 root root 20480 8月 27 09:30 Installtid
-rw-r--r--. 1 root root 69632 8月 27 09:30 Name
-rw-r--r--. 1 root root 32768 8月 26 11:44 Obsoletename
-rw-r--r--. 1 root root 88866816 8月 27 09:30 Packages
-rw-r--r--. 1 root root 2400256 8月 27 09:30 Providename
-rw-r--r--. 1 root root 507904 8月 27 09:30 Requirename
-rw-r--r--. 1 root root 131072 8月 27 09:30 Sha1header
-rw-r--r--. 1 root root 73728 8月 27 09:30 Sigmd5
-rw-r--r--. 1 root root 8192 8月 27 09:30 Triggername
软件包之间可能存在依赖关系,甚至循环依赖,即:A包依赖B包,B包依赖C包,C包依赖A包
安装软件包时,会因为缺少依赖的包,而导致安装包失败。
获取途径
- 红帽官方
- 第三方组织提供
- 软件项目官方站点
- 自己制作
rpm命令的格式
RPM软件可以实现几乎所有的功能,新增,删除,更新等
查询
查询已安装的软件包
选项 | 功能效果 |
---|---|
rpm -qa(all) | 显示当前系统中以 RPM 方式安装的所有软件列表 |
rpm -q 软件名 | 查询指定软件是否已安装 |
rpm -qi 软件名 | 查看指定软件包的名称、版本、许可协议、用途描述等详细信息 |
rpm -ql(list) 软件名 | 显示指定的软件包在当前系统中安装的所有目录、文件列表 |
rpm -qc (configfiles ) 软件名 | 列出已安装的指定软件的配置文件 |
rpm -qd(docfiles) 软件名 | 列出已安装的指定软件的软件包文档所在位置 |
rpm -qR (requires) 软件名 | 列出已安装的指定软件的依赖的软件包及文件 |
rpm -qf(file) 软件名 | 查看指定的文件或目录是由哪个软件包所安装的 |
rpm-qpd | 查询未安装指定软件包的文档位置 |
rpm -qpi | 查询未安装指定软件包的完整名称详细信息 |
rpm -qpl | 查询未安装指定软件包的文件列表 |
rpm -qpc | 查询未安装指定软件包的配置文件位置 |
例子
[root@localhost system]# rpm -qa
#查询所有的已rpm方式安装的软件列表
[root@localhost data]# rpm -q httpd
#查看httpd有没有安装
httpd-2.4.6-67.el7.centos.x86_64
[root@localhost data]# rpm -qi httpd
[root@localhost data]# rpm -qi tree
#查看httpd的详细信息
[root@localhost data]# rpm -ql httpd
[root@localhost data]# rpm -ql tree
#目录或文件列表
[root@localhost data]# rpm -qc httpd
#配置文件位置
[root@localhost data]# rpm -qd tree
#软件包文档所在位置
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz
[root@localhost data]# rpm -qR tree
#查看依赖包
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests)