Linux系统软件包安装

1、软件包分类

1.1 源码包

  • 什么是源码包

示例:html

[root@localhost ~]# vim hello.c
#include <stdio.h>
int main(void)
{
        printf("hello world\n");
}

```

[root@localhost ~]# gcc -c hello.c
#-c 生成".o"头文件。这里会生成hello.o头文件,可是不会生成执行文件
[root@localhost ~]# gcc -o hello hello.c
#-o 生成执行文件,并指定执行文件名。这里生成的hello就是可执行文件
[root@localhost ~]# ./hello
hello world
#执行hello文件
  • 源码包特色

    • 优势:
    • 开源,若是有足够的能力,能够修改源代码
    • 能够自由选择所需的功能
    • 软件是编译安装,因此更加适合本身的系统,更加稳定也效率更高
    • 卸载方便node

    • 缺点:
    • 安装过程步骤较多,尤为安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
    • 编译过程时间较长,安装比二进制安装时间长
    • 由于是编译安装,安装过程当中一旦报错新手很难解决

1.2 二进制包

  • 二进制包分类

    • DPKG包:是由Debian Linux所开发出来的包管理机制,经过DPKG包,Debian Linux就能够进行软件包管理。主要应用在Debian和unbuntu中
    • RPM包:是由Red Hat公司所开发的包管理系统;功能强大,安装、升级、查询和卸载都很是简单和方便。目前不少Linux都在使用这种包管理方式,包括Fedora、CentOS、SuSE等。
  • 二进制包特色:

    RPM包的优势:
    • 包管理系统简单,只经过几个命令就能够实现包的安装、升级、查询和卸载
    • 安装速度比源码包安装快的多
    RPM包的缺点:
    • 通过编译,再也不能够看到源代码
    • 功能选择不如源码包灵活
    • 依赖性。
  • RPM包依赖

    软件包a------------->软件包b-------------->软件包cweb

  1. 树形依赖 a--------->b--------->c
  2. 环形依赖 a--------->b--------->c--------->a
  3. 函数库依赖

2、rpm安装

2.1 rpm包命名规则

httpd-2.2.15-15.el6.centos.1.i686.rpmshell

httpd 软件包名
2.2.15 软件版本
15 软件发布的次数
el6 软件发行商。el6是Redhat公司发布,适合RHEL6.x(RedHat Enterprise Linux)和CentOS6.x下使用
i686 适合的硬件平台。RPM包能够在不一样的硬件平台安装,选择适合不一样CPU的软件版本,能够最大化的发挥CPU性能,因此出现了所谓的i386(386以上计算机均可以安装)、i586(586以上的计算机均可以安装)、i686(奔腾II以上计算机均可以安装,目前全部的CPU都是奔腾II以上,因此这个软件版本居多)、x86_64(64位CPU能够安装)和noarch(没有硬件限制)等文件名。
rpm rpm包的扩展名。Linux下文件不是靠扩展名区分文件类型,也就是Linux中扩展名没有任何含义。若是RPM包不用“.rpm”做为扩展名,系统能够正确识别没有问题,但是管理员很难识别这个是什么样的软件。

包全名:若是操做的是未安装软件包,则使用包全名,并且须要注意绝对路径数据库

包名:若是操做的是已经安装的软件包,则使用包名便可,系统会生产RPM包的数据库(/var/lib/rpm/),并且能够在任意路径下操做apache

2.2 依赖性

2.3 rpm包手工命令安装

2.3.1 默认安装位置
RPM包默认安装路径 释义
/etc/ 配置文件安装目录
/usr/bin/ 可执行的命令安装目录
/usr/lib 程序所使用的的函数库保存位置
/usr/share/doc 基本的软件使用手册保存位置
/usr/share/man 帮助文件保存位置
2.3.2 RPM包安装
  1. 安装命令vim

    rpm -ivh 包全名
    #注意必定是包全名。若是跟包全名的命令要注意路径,由于软件包在光盘当中
    选项:
    -i  install安装(install)
    -v  显示更详细的信息(verbose)
    -h  打印#显示安装进度(hash)
    • --nodeps 不检测依赖性安装。软件安装时会检测依赖性,肯定所需的底层软件是否安装;若是没有安装则会报错;若是无论依赖性,想强行安装,可使用这个选项。
    • --replacefiles 替换文件安装。若是安装软件包,但是包中部分文件已经存在,那么正常安装时候,会报错“某个文件已经存在”从而致使软件没法安装,使用这个选项能够忽视这个报错,而覆盖安装。
    • --replacepkgs 替换软件包安装。若是软件包已经安装,此选项能够把软件包重复安装一遍。
    • --force 强制安装。不论是否已经安装,都从新安装。就是--replacefiles和--replacepkgs的综合
    • --test 测试安装。不会实际安装,只是检测一下依赖性。
    • --prefix 指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。注意:若是指定了安装路径,软件没有安装到系统默认路径中的话,系统会找不到这些安装的软件,须要进行手工配置才能被系统识别。因此rpm包咱们通常都采用默认路径安装。
  2. 服务启动centos

    [root@localhost ~]#service   服务名 start|stop|restart|status
    #参数:
    #    start:  启动服务
    #    stop:   中止服务
    #    restart:重启服务
    #    status: 查看服务状态
    [root@localhost ~]#systemctl restart httpd
    #这个命令也行
  3. rpm包升级服务器

    [root@localhost ~]#rpm -Uvh 包全名
    #选项:
    #-U(大写) 升级安装,若是没有安装过,系统直接安装。若是安装过的版本较旧,则升级到新版本(upgrade)
    [root@localhost ~]#rpm -Fvh 包全名
    #选项:
    #-F(大写) 升级安装,若是没有安装过,则不会安装。必须安装有较旧版本,才会升级(freshen)
  4. 卸载网络

    [root@localhost ~]#rpm -e 包名
    #选项:
    #    --nodeps    不检测依赖性
    #    -e          卸载
  5. 查询

    • 查询软件包是否安装,命令格式以下:
    [root@localhost ~]#rpm -q 包名
    #选项:
    #    -q  查询(query)
    • 查询系统中的全部安装软件包,命令格式以下:
    [root@localhost ~]#rpm -qa
    #选项:
    #    -a  全部(all)
    
    #固然,也能够用管道符来查看所需的内容,好比:
    [root@localhost ~]#rpm -qa | grep httpd
    #你会发现,使用“rpm -q 包名”只能查看这个包是否安装,可是使用“rpm -qa | grep 包名”会把包含名称的全部包都列出来。
    • 查询软件包的详细信息,命令格式以下:
    #1.查询已安装软件包的详细信息
    [root@localhost  ~]#rpm -qi 包名
    #选项:
    #    -i  查询软件信息(information)
    
    #2.查询尚未安装的软件包的详细
    [root@localhost ~]#rpm -qip  包全名
    选项:
    #    -p  查询没有安装的软件包(package)
    • 查询软件包中的文件列表
    #1.查询已安装软件包中的文件列表和安装的完整目录,命令格式以下:
    [root@localhost ~]#rpm -ql   包全名
    #选项:
    #    -l  列出软件包中全部的文件列表和软件所安装的目录(list)
    
    #2.查询没有安装的软件包中的文件列表和打算安装的位置
    [root@localhost ~]#rpm -qlp 包全名
    #选项:
    #    -p  查询没有安装的软件包信息(package)
    • 查询系统文件属于哪一个RPM包

    既然知道每一个RPM包中的文件安装位置,那么也能够查询系统文件属于哪一个RPM包;不过须要注意的是,手工创建的文件是不能查询的,由于这些文件不是经过RPM包安装的,固然不能反向查询它属于哪一个RPM包。命令格式以下:

    [root@localhost ~]#rpm -qf 系统文件名
    #选项:
    #    -f  查询系统文件属于哪一个软件包(file)
    • 查询软件包所依赖的软件包
    #1.查询系统中和已安装的软件包所依赖的软件包,命令格式以下:
    [root@localhost ~]#rpm -qR 包名
    #选项:
    #    -R  查询软件包的依赖性(requires)
    
    #2.查询没有安装的软件包依赖性,命令格式以下:
    [root@localhost ~]#rpm -qRp  包名
    #选项:
    #    -p  查询没有安装的软件包信息(package)
  6. 验证

    • 基本命令
    [root@localhost ~]#rpm -Va
    #选项:
    #    -Va 校验本机已经安装的全部软件包
    
    [root@localhost ~]#rpm -V 已安装的包名
    #选项:
    #    -V  校验指定RPM包中的文件(verify)
    
    [root@localhost ~]#rpm -Vf 系统文件名
    #选项:
    #    -Vf 校验某个系统文件是否被修改
  7. 数字证书

    若是RPM包自己被动过,那么校验就不能解决问题了。咱们就必须使用数字证书验证。

    数字证书有以下特色:

    • 首先必须找到原厂的公钥文件,而后进行安装
    • 再安装RPM包,会去提取RPM包中的证书信息,而后和本机安装的原厂证书进行验证
    • 若是验证经过,则容许安装;若是验证没经过,则不容许安装并警告

2.4 rpm包在线安装(yum安装)

2.4.1 yum源文件解析

​ yum源配置文件保存在/etc/yum.repos.d/目录中,文件的扩展名必定是“.repo”。也就是说,yum源配置文件只要扩展名是“\.repo”就会生效。

[root@localhost ~]# vim /etc/yum.repos.d/backup/CentOS-Base.repo 

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

在CentOS-Base.repo文件中有5个yum源容器,这里只列出了base容器,其余容器和base容器相似。咱们解释一下base容器

  • [base] 容器名称,必定要放在[]中
  • name 容器说明,也能够本身随便写
  • mirrorlist 镜像站点,这个能够注释掉
  • baseurl 咱们的yum源服务器的地址。默认是CentOS官方的yum源服务器,是可使用的。若是你以为慢,则能够改为你喜欢的yum源地址
  • enabled 此容器是否生效,若是不写或写成enabled=1,则表示此容器生效;写成enabled=0,则表示此容器不生效。
  • gpgcheck 若是为1则表示RPM的数字证书生效;若是为0,则表示RPM的数字证书不生效。
  • gpgkey 数字证书的公钥文件保存位置;不用修改。
2.4.2 搭建本地光盘yum源
  • 第一步:放入CentOS安装光盘,并挂载光盘到指定位置;命令以下:
[root@localhost ~]#mkdir /mnt/cdrom
#建立cdrom目录,做为光盘的挂载点
[root@localhost ~]#mount /dev/cdrom /mnt/cdrom/
mount: block device /dev/sr0 is write-protected mounting read-only
#挂载光盘到/mnt/cdrom目录下
  • 第二步:修改其它几个yum源配置文件的扩展名,让它们失效,由于只有扩展名是“*.repo”的文件才能做为yum源配置文件。固然也能够删除其它几个yum源配置文件,可是若是删除了,当你又想用网络做为yum源时,就没有了参考文件,因此最好仍是修改扩展名。命令以下:
[root@localhost ~]#cd /etc/yum.repos.d/
[root@localhost yum.repos.d]#mv CentOS-Base.repo /backup/CentOS-Base.repo
[root@localhost yum.repos.d]#mv CentOS-Debuginfo.repo /backup/CentOS-Debuginfo.repo
[root@localhost yum.repos.d]#mv CentOS-Vault.repo /backup/CentOS-Vault.repo
  • 第三步:修改光盘yum源配置文件CentOS-Media.repo,参照如下方法修改:
[root@localhost ~]# vim /etc/yum.repos.d/backup/CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS_6.6_Final/
        file:///media/cdrom/
        file:///media/cdrecorder/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
2.4.3 yum命令
  • 查询

    • 查询yum源服务器上全部可安装的软件包列表
    [root@localhost yum.repos.d]#yum list
    #查询全部可用软件包列表
    • 查询yum源服务器中是否包含某个软件包
    [root@localhost yum.repos.d]#yum list 包名
    #查询单个软件包
    
    #例如:
    [root@localhost yum.repos.d]# yum list httpd
    Loaded plugins: fastestmirror, refresh-packagekit, security
    Loading mirror speeds from cached hostfile
    Installed Packages
    httpd.x86_64     2.2.15-39.el6.centos       @anaconda-CentOS-201410241409.x86_64/6.6
    • 搜索yum源服务器上全部和关键字相关的软件包。
    [root@localhost yum.repos.d]# yum search 关键字
    #搜索服务器上全部和关键字相关的软件包
    #例如:
    [root@localhost yum.repos.d]# yum search ifconfig
    Loaded plugins: fastestmirror, refresh-packagekit, security
    Loading mirror speeds from cached hostfile
    ======================================================================== Matched: ifconfig =========================================================================
    net-tools.x86_64 : Basic networking tools

    yum search搜索能够用于肯定某个软件在那个相关包当中。此例子能够肯定“ifconfig”命令须要安装“net-tools”包

    • 查询指定软件包的信息
    [root@localhost yum.repos.d]#yum info httpd
    #查询samba软件包的信息
    Installed Packages
    Name        : httpd
    Arch        : x86_64
    Version     : 2.2.15
    Release     : 39.el6.centos
    Size        : 2.9 M
    Repo        : installed
    From repo   : anaconda-CentOS-201410241409.x86_64
    Summary     : Apache HTTP Server
    URL         : http://httpd.apache.org/
    License     : ASL 2.0
    Description : The Apache HTTP Server is a powerful, efficient, and extensible
              : web server.
  • 安装
[root@localhost yum.repos.d]#yum -y install 包名
#选项:
#   install 安装
#   -y  自动回答yes,若是不加-y,那么每一个安装的软件都须要手工回答yes

#例如:
[root@localhost yum.repos.d]# yum -y install gcc
#使用yum自动安装gcc
  • 升级
[root@localhost yum.repos.d]# yum -y update 包名
#升级指定的软件包
#选项:
#   update  升级
#   -y      自动回答yes

​ 注意:在进行升级操做时,yum源服务器中软件包的版本比本地安装的软件包的版本高。

[root@localhost yum.repos.d]# yum -y update
#升级本机全部软件包
#这条命令会升级系统中全部的软件包,不过咱们的生产服务器是稳定优先的,因此这种全系统升级的状况并很少见。
  • 卸载

除非您肯定卸载的软件依赖包不会对系统产生影响,不然不要执行yum的卸载,由于颇有可能在卸载软件包的同时卸载的依赖包也是重要的系统文件,这就有可能致使系统崩溃。卸载命令以下:

[root@localhost yum.repos.d]# yum remove 包名
#卸载指定的软件包

#例如:
[root@localhost yum.repos.d]# yum remove samba
#卸载samba软件包
2.4.4 yum组管理命令
  • 查询能够安装的软件组
[root@localhost yum.repos.d]# yum grouplist
#列出全部可用的软件组列表
  • 查询软件组内包含的软件
[root@localhost yum.repos.d]# yum groupinfo 软件组名
#列出软件组中包含的软件

#例如:
[root@localhost yum.repos.d]# yum groupinfo "Web Server"
#查询软件组“WebServer”中包含的软件
  • 安装软件组
[root@localhost yum.repos.d]# yum groupinstall 软件组名
#安装指定软件组,组名能够由grouplist查询出来

#例如:
[root@localhost ~]#yum groupinstall "Web Server"
#安装网页服务软件组
  • 卸载软件组
[root@localhost ~]#yum groupremove 软件组名
#卸载指定软件组

3、源码包安装

1. 注意事项

  • 1.1 应该选择哪一种软件包

    • 若是软件包是给大量客户提供访问,建议使用源码包安装,如LAMP环境搭建,由于源码包效率更高。
    • 若是软件包是给Linux底层使用,或只给少许客户访问,建议使用rpm包安装,由于rpm包简单
  • 1.2 源码包从哪儿来

    rpm包是光盘中直接包含的,因此不须要用户单独下载。而源码包是经过官方网站下载的,若是须要使用,是须要单独下载的。

  • 1.3 是否能够在系统中即安装rpm包的Apache,又安装源码包的Apache?
    答案是能够,由于两种安装方法安装的Apache,安装位置是不同的,例如:

    • RPM包:不建议指定安装位置的,建议安装在默认位置(RPM包安装的服务有标准卸载命令,不怕文件处处安装)
    配置文件:   /etc/httpd/conf/httpd.conf
    网页位置:   /var/www/html/
    日志文件:   /var/log/httpd/
    启动方法:   1)service httpd restart
                2)/etc/rc.d/init.d/httpd restart
    • 源码包:必须制定安装位置(源码包没有安装数据库,没有删除命令)
    配置文件:   /usr/local/apache2/conf/httpd.conf
    网页位置:   /usr/local/apache2/htdocs/
    日志文件:   /usr/local/apache2/logs/
    启动方法:   /usr/local/apache2/bin/apachectl start

2. 安装过程

  • 1) 下载软件包

  • 2) 解压缩

  • 3) 进入解压目录

  • 4) ./configure 编译前准备

    这一步主要有三个做用:

    • 在安装以前须要检测系统环境是否符合安装要求。
    • 定义须要的功能选项;“./configure”支持的功能选项较多,能够执行“./configure --help”;命令查询其支持的功能。通常都会经过“./configure --prefix=安装路径”指定安装路径。
    • 把系统环境的检测结果和定义好的功能选项写入Makefile文件,后续的编译和安装须要依赖这个文件的内容。

    须要注意的是,configure不是系统命令,而是源码包软件自带的一个脚本程序,因此必须采用"./configure"方式执行(“./”表明在当前目录下)

  • 5). make 编译

    make会调用gcc编译器,并读取Makefile文件中的信息进行系统软件编译。编译的目的就是把源码程序转变为能被Linux识别的可执行文件,这些可执行文件保存在当前目录下。编译过程较为耗时,须要有足够的耐心。

  • 6). make clean 清空编译内容

    若是在“./configure”或“make”编译中报错,那么咱们在从新执行命令前必定要记得执行make clean命令,它会清空Makefile文件或编译产生的“.o”头文件。

  • 7). make install 编译安装

    这才是真正的安装过程,通常会写清楚程序的安装位置。若是忘记指定安装目录,则能够把命令的执行过程保存下来,以备未来删除使用。

3. 删除

​ 源码包没有删除命令,若是须要删除,直接删除安装目录便可。

4. 打入补丁

  • 4.1 补丁的生成

[root@localhost ~]#diff 选项 old new
#比较old和new文件的不一样
#选项:
#   -a  将任何文档当作文本文档处理
#   -b  忽略空格形成的不一样
#   -B  忽略空白行形成的不一样
#   -I  忽略大小写形成的不一样
#   -N  当比较两个目录时,若是某个文件只在一个目录中,则在另外一个目录中视做空文件
#   -r  当比较目录时,递归比较子目录
#   -u  使用同一的输出格式

例如:

[root@localhost ~]#mkdir test
#创建测试目录
[root@localhost ~]#cd test
#进入测试目录
[root@localhost test]# vi old.txt
our 
school 
is
atguigu
#文件old.txt,为了一会输出便于比较,每行分开
[root@localhost test]# vi new.txt
our
school
is
atguigu
in
Beijing
#文件new.txt

#比较下两个文件的不一样,并生成补丁文件“txt.patch”,命令以下:
[root@localhost test]# diff -Naur /root/old.txt /root/test/new.txt > txt.patch
[root@localhost test]# vi txt.patch

--- /root/old.txt       1969-12-31 16:00:00.000000000 +0800
+++ /root/test/new.txt  2019-11-20 13:10:25.539978995 +0800
@@ -2,3 +2,5 @@
our
school
is
atguigu
+in
+Beijing
#后一个文件比前一个文件多两行(+表示)

4.2 打入补丁

[root@localhost test]# patch -pn < 补丁文件
#按照补丁文件进行更新
#选项:
#   -pn n为数字。表明按照补丁文件中的路径,指定更新文件的位置。(在补丁文件目录中取消n级目录)

#更新“old.txt”文件,命令以下:
[root@localhost test]# patch -p3 < txt.patch 
patching file old.txt
[root@localhost test]# cat old.txt
our
school
is
atguigu
in
Beijing
#多出来了in Beijing两行
相关文章
相关标签/搜索