Linux程序的安装及管理 第三章

Linux应用程序基础

Linux源码包

实际上,源码包就是一大堆源代码程序,是由程序员按照特定的格式和语法编写出来的

Linux二进制包

二进制包,也就是源码包经过成功编译之后产生的包。由于二进制包在发布之前就已经完成了编译的工作,因此用户安装软件的速度较快(同 Windows下安装软件速度相当),且安装过程报错几率大大减小。

源码包 VS RPM二进制包

源码包一般包含多个文件,为了方便发布,通常会将源码包做打包压缩处理,Linux 中最常用的打包压缩格式为“tar.gz”,因此源码包又被称为 Tarball。

总的来说,使用源码包安装软件具有以下几点好处:

  • 开源。如果你有足够的能力,则可以修改源代码。

  • 可以自由选择所需的功能。

  • 因为软件是编译安装的,所以更加适合自己的系统,更加稳定,效率也更高。

  • 卸载方便。

但同时,使用源码包安装软件也有几点不足:

  • 安装过程步骤较多,尤其是在安装较大的软件集合时(如 LAMP 环境搭建),容易出现拼写错误。

  • 编译时间较长,所以安装时间比二进制安装要长。

  • 因为软件是编译安装的,所以在安装过程中一旦报错,新手很难解决

1.考虑到用户安装软件的难度

2.厂商直接 将包做成二进制方便使用

  • 预处理(Pre-Processing)

1)将所有的#define删除,并且展开所有的宏定义

2)处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif等

3)处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置。

4)删除所有注释 "//"和"/* */".

5)添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。

6)保留所有的#pragma编译器指令,因为编译器需要使用它们

  • 编译 (Compiling)

编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后,最后生成相应的汇编代码

  • 汇编 (Assembling)

汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编相对于编译过程比较简单,根据汇编指令和机器指令的对照表一一翻译即可

  • 链接 (Linking)

通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件

#分步骤编译运行
gcc -E hello.c  -o hello.i        对hello.c文件进行预处理,生成了hello.i 文件
gcc -S hello.i   -o hello.s       对预处理文件进行编译,生成了汇编文件
gcc -c  hello.s  -o hello.o      对汇编文件进行编译,生成了目标文件
gcc      hello.o  -o hello         对目标文件进行链接,生成可执行文件
 

#一步实现编译过程
gcc hello.c -o hello 直接编译链接成可执行目标文件

#include<stdio.h>

int main()

{

printf("Hello World!\n");

}

1.应用程序与系统命令的关系

1.对比系统命令和应用程序的不同

  • 位置: Linux中一切皆为文件 演示内部命令和外部命令 位置 应用程序位置

  • 用途: 命令主要处理系统的基本操作(复制,配置) 应用程序可以完成独立的任务浏览器访问网页

  • 使用环境 字符界面 字符和桌面

  • 格式 命令的格式 命令参数对象 无固定格式

2.典型应用程序的目录结构

 

文件类型保存目录
普通执行程序文件/usr/bin
服务器执行程序文件和管理程序文件/usr/sbin
应用程序配置文件/etc
日志文件/var/log
应用程序参考文档文件/usr/share/doc

3.常见的软件包封装类型

 

文件类型保存目录
RPM软件包扩展名为“.rpm”
DEB软件包扩展名为“.deb”
源代码软件包一般为“.tar.gz”、“.tar.bz2”等格式的压缩包 包含程序的原始代码
绿色免安装的软件包软件包的扩展名不一,以TarBall格式的居多 在压缩包内提供已编译好的执行程序文件 解开压缩包后的文件即可直接使用
  • RPM包 : RPM Package Manager的缩写 是红帽公司自主研发的一款工具,实用性强。RPM包是预先在linux机器上编译好并打包好的文件,安装起来非常快捷。但是也有一些缺点,比如安装的环境必须与编译时的环境一致或者相当;包与包之间存在相互依赖的情况。

  • DEB包:在Linux系统中类似于windows中的软件包(exe),几乎不需要什么复杂的编译即可通过鼠标点击安装使用。此外,deb广泛应用于越狱后iOS软件及MeeGo(含Maemo软件)中。Debian包是将包的文件信息以及包内容,经过gzip和tar打包而成。

  • 源代码软件包 :是需要我们自己把源代码编译成二进制的可执行文件。如果你读得懂这些源代码,那么你就可以去修改这些源代码自定义功能,然后再去编译成你想要的。使用源码包的好处除了可以自定义修改源代码外还可以定制相关的功能,因为源码包在编译的时候是可以附加额外的选项的。

  • 绿色免安装的软件包 :顾名思义自行理解比如Windows的截图软件

查看rpm包里面的内容

[root@localhost Packages]# rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -tv

 软件包中的文件分类

4.RPM包管理工具

Red-Hat Package Manager

由Red Hat公司提出,被众多Linux发行版所采用

建立统一的数据库文件(一张对应表将信息写入)

详细记录软件包安装、卸载等变化信息

自动分析软件包依赖关系

4.1一般命名格式

bash-4.1.2-15.el6_4.x86_64.rpm

bash shell环境 版本信息 4.1.2 15发布次数 x86_64硬件(为“i386”或“i686”等)

4.2拆包后的分类

[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

#主包  开发包   手册包   工具包

4.3程序包管理器相关文件

包文件组成 (每个包独有)

  • 包内的文件
  • 元数据,如:包的名称,版本,依赖性,描述等
  • 可能会有包安装或卸载时运行的脚本

数据库(公共):/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包

安装软件包时,会因为缺少依赖的包,而导致安装包失败。

4.4 获取途径

  1. 红帽官方

  2. 第三方组织提供

  3. 软件项目官方站点

  4. 自己制作

 

5.rpm命令的格式

RPM软件可以实现几乎所有的功能,新增,删除,更新等

5.1查询

查询已安装的软件包

选项功能效果
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) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

[root@localhost Packages]# rpm -qf /usr/bin/ls
#查看命令程序由那个包安装的
coreutils-8.22-18.el7.x86_64

[root@localhost Packages]# rpm -qpi tree-1.6.0-10.el7.x86_64.rpm 
#查看未安装软件的
[root@localhost Packages]# rpm -qpc httpd-2.4.6-67.el7.centos.x86_64.rpm 
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.modules.d/00-dav.conf

[root@localhost Packages]# rpm -ivh httpd-2.4.6-67.el7.centos.x86_64.rpm 
错误:依赖检测失败:
    /etc/mime.types 被 httpd-2.4.6-67.el7.centos.x86_64 需要
    httpd-tools = 2.4.6-67.el7.centos 被 httpd-2.4.6-67.el7.centos.x86_64 需要
    libapr-1.so.0()(64bit) 被 httpd-2.4.6-67.el7.centos.x86_64 需要
    libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-67.el7.centos.x86_64 需要
#####依赖关系原因需要安装以下包
rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm
rpm -ivh apr-1.4.8-3.el7.x86_64.rpm
rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm
rpm -ivh httpd-tools-2.4.6-67.el7.centos.x86_64.rpm 
rpm -ivh httpd-2.4.6-67.el7.centos.x86_64.rpm 

[root@localhost Packages]# rpm -q tree
#查询是否安装
未安装软件包 tree 
[root@localhost Packages]# rpm -ivh  tree
#安装软件包 tree 
[root@localhost Packages]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm
#安装软件包 tree
[root@localhost Packages]# rpm -q tree
#查看是否安装
tree-1.6.0-10.el7.x86_64
[root@localhost Packages]# rpm -qi  tree
#详细信息
Name        : tree
Version     : 1.6.0
Release     : 10.el7
Architecture: x86_64
Install Date: 2021年08月27日 星期五 10时42分26秒
Group       : Applications/File
Size        : 89505
License     : GPLv2+
Signature   : RSA/SHA256, 2014年07月04日 星期五 13时36分46秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : tree-1.6.0-10.el7.src.rpm
Build Date  : 2014年06月10日 星期二 03时28分53秒
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://mama.indstate.edu/users/ice/tree/
Summary     : File system tree viewer
Description :
The tree utility recursively displays the contents of directories in a
tree-like format.  Tree is basically a UNIX port of the DOS tree
utility.
[root@localhost Packages]# rpm -ql tree
#文件列表
/usr/bin/tree
/usr/share/doc/tree-1.6.0
/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 Packages]# rpm -qc vsftpd
#配置文件
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf

[root@localhost Packages]# 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 Packages]# 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) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

[root@localhost Packages]# type rpm
rpm
已被哈希 (/usr/bin/rpm)
[root@localhost Packages]# rpm -qf /usr/bin/rpm
rpm-4.11.3-25.el7.x86_64
#查看软件来自哪个rpm包
###不要卸载rpm包否则无法再次安装


[root@localhost Packages]# rpm -K tree-1.6.0-10.el7.x86_64.rpm 
tree-1.6.0-10.el7.x86_64.rpm: rsa sha1 (md5) pgp md5
确定
#查看相关的 签名是否合法

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值