Linux下的软件包可分为两种,分别是源码包和二进制包
实际上,源码包就是一大堆源代码程序,是由程序员按照特定的格式和语法编写出来的。
源码包是Linux中软件包的另一种形式,需要在计算机上进行编译以后才可以产生可以直接运行的二进制程序。源代码包里面包括了程序的程序代码,一般就是我们能认识的C语言文件,因此在安装源码包的时候通常会检索系统中是否正确安装gcc编译器,并且源代码安装的时间会比较长。
计算机只能识别机器语言,也就是二进制语言,所以源码包的安装需要一名“翻译官”将“abcd”翻译成二进制语言,这名“翻译官”通常被称为编译器。
“编译”指的是从源代码到直接被计算机(或虚拟机)执行的目标代码的翻译过程,编译器的功能就是把源代码翻译为二进制代码,让计算机识别并运行
另外,由于源码包的安装需要把源代码编译为二进制代码,因此安装时间较长。
比如,在 Windows下安装 QQ,QQ 功能较多,程序相对较大(有 70 MB左右),但由于其并非是以源码包的形式发布,而是编译后才发布的,因此只需几分钟(经过简单的配置)即可安装成功。但如果我们以源码包安装的方式在 Linux 中安装一个 MySQL 数据库,即便此软件的压缩包仅有 23 MB左右,也需要 30 分钟左右的时间(根据硬件配置不同,略有差异)。
源码包一般包含多个文件,为了方便发布,通常会将源码包做打包压缩处理,Linux 中最常用的打包压缩格式为“tar.gz”,因此源码包又被称为 Tarball
Tarball 是 Linux 系统的一款打包工具,可以对源码包进行打包压缩处理,人们习惯上将最终得到的打包压缩文件称为 Tarball 文件。
源码包需要我们自己去软件官方网站进行下载,包中通常包含以下内容:
通过对比你会发现,源码包的编译是很费时间的,况且绝多大数用户并不熟悉程序语言,在安装过程中我们只能祈祷程序不要报错,否则新手很难解决。
*.tar.gz、*.tgz、*.bz2
源码包的格式一般是一个版本号的tar包,例如:httpd-2.4.25.tar.gz,文件名包含信息比较少
优点:
tar包形式的源码包包含的内容是明文可见的源代码,如果有足够的能力,可以自行修改源代码,并且在安装的时候可以自由选择要安装的所需功能(./configure中的各种参数)及路径等,并且卸载移除的时候也比较方便。 建议在安装线上的生产服务器软件包时都用源码安装,这是因为源码安装可以自行调整编译参数,能够最大化地定制安装结果。
缺点:
1)安装过程步骤过多,尤其安装较大及较多软件时,添加各种参数时容易出现问题
2)编译时间较长,执行make编译的时间通常较长,一会都会比安装二进制包时间长
3)因为编译手动安装,涉及系统环境比较复杂,可能会出现各种问题,一旦出现问题,新手很难解决(一般都会出现问题)
源码包一般的安装过程:
1)解压
2)./configure
3)make
4)make install
5)vim /etc/profile,文件末尾添加PATH=/usr/local/xxx/bin:$PATH(或者写在/etc/profile.d/目录下创建文件并写入环境变量相关配置),然后 source 环境变量文件
说明:
说明:tar包形式包含的内容是明文可见的源代码,如果有足够的能力,可以自行修改源代码,并且在安装的时候可以自由选择要安装的所需功能(./configure中的各种参数),并且卸载移除的时候也比较方便
注意1:每个源码包都会有configure命令,就算极个别没有这个命令也会用其他的命令取代(例如openssl的./config)
注意2:执行过./configure之后,会生成Makefile文件,make和make install都是依赖这个文件进行编译安装的
make
1)将源码包翻译成机器能识别的语言(也就是将源代码–>可执行的二进制文件,类似生成Windows中的.exe可执行文件)
2)一旦编译出错,需要修改之后再次编译,请使用make clean,清除之前的编译产生的缓存文件。
注意:这一步执行时间一般是最长的。
make install
1)真正的安装(例如在windows中执行qq.exe或者wechat.exe安装qq和微信到电脑)
2)一旦这步出错,需要执行make clean,并删除对应的目录(例如./configure使用–prefix参数指定安装到/usr/local/openssl,则需要删除该目录)
【例 1】apache http源码包的安装
1、安装准备
[root@admin ~]# yum install gcc gcc-c++ gcc-g77
2、下载源码包(.tar.gz格式)
下载地址: http://mirror.bit.edu.cn/apache/httpd/httpd-2.4.43.tar.gz
源码包建议保存位置:/usr/local/src
[root@admin ~]# cd /usr/local/src
[root@admin src]# wget http://mirror.bit.edu.cn/apache/httpd/httpd-2.4.43.tar.gz
#等待下载完成
3.解压
[root@admin src]# ls
httpd-2.4.43.tar.gz
[root@admin src]# tar xf httpd-2.4.43.tar.gz
[root@admin src]# ls
httpd-2.4.43 httpd-2.4.43.tar.gz
[root@admin src]# cd httpd-2.4.43
[root@admin httpd-2.4.43]#
4.下载安装编译工具
[root@admin httpd-2.4.43]# yum install gcc-c++ gcc make -y
[root@admin httpd-2.4.43]# cat INSTALL
5.编译安装
编译安装软件程序包源码编译安装三步走:./configure(配置)、make(编译)、make install(安装)
源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install)。
Configure是一个可执行脚本,它有很多选项,在待安装的源码路径下使用命令./configure –help输出详细的选项列表。
其中--prefix选项是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr /local/share,比较凌乱。
这里我们可以查看INSTALL 文件,查看安装说明:
APACHE INSTALLATION OVERVIEW
Quick Start - Unix
------------------
For complete installation documentation, see [ht]docs/manual/install.html or
http://httpd.apache.org/docs/2.4/install.html
$ ./configure --prefix=PREFIX
$ make
$ make install
$ PREFIX/bin/apachectl start
……省略以下内容……
使用 ls 命令可以看到当前目录下有一个名为 configure 的可执行文件:
[root@admin httpd-2.4.43]# ll configure
-rwxr-xr-x. 1 root 40 1209103 3月 26 22:46 configure
说明: ./configure
a. 指定安装路径,例如 --prefix=/usr/local/apache
b. 启用或禁用某项功能, 例如 --enable-ssl, --disable-filter --with-http_ssl_module
c. 和其它软件关联,例如--with-pcre
d. 检查安装环境,例如是否有编译器gcc,是否满足软件的依赖需求
最终生成:Makefile
软件配置与检查./conigure
#1、定义需要的功能选项。
#2、检测系统是否符合安装要求。
#3、把定义好的功能选项和检测系统环境的信息都写入Makefile 文件,用于后续的编辑
执行:
#检查安装环境,并指定安装目录为usr/local/apache
[root@admin httpd-2.4.43]# ./configure --prefix=/usr/local/apache #一定要进入解压后的目录执行./configure进行预编译
……省略以上输出信息……
configure:
checking for APR... no
configure: error: APR not found. Please read the documentation.
#校验没通过 APR失败 我们需要下载APR ,这是因为安装此软件需要依赖于 arp 等软件,由于电脑上未安装,所以必须先安装httpd的依赖软件,才能通过校验
#还是一样,通过 wget 下载工具进行下载或者在宿主机上下载好,使用lrzsz软件提供的 rz 命令上传到当下
#这里依赖的软件有两个:apr-1.6.5.tar.gz 下载地址:http://mirror.bit.edu.cn/apache/apr/apr-1.6.5.tar.gz
#apr-util-1.6.1.tar.gz 下载地址:http://mirror.bit.edu.cn/apache/apr/apr-util-1.6.1.tar.gz
[root@admin httpd-2.4.43]# cd ..
[root@admin src]# wget http://mirror.bit.edu.cn/apache/apr/apr-1.6.5.tar.gz
[root@admin src]# wget http://mirror.bit.edu.cn/apache/apr/apr-util-1.6.1.tar.gz #下载这两个依赖软件
#解压第一个(这个apr-1.6.5软件必须是第一个安装,因为被httpd依赖的第二个软件apr-util-1.6.1是依赖于apr-1.6.5 的)
[root@admin src]# tar xf apr-1.6.5.tar.gz
#进入解压后的目录进行预编译并指定安装目录为/usr/local/apr
[root@admin apr-1.6.5]# ./configure --prefix=/usr/local/apr
#耐心等待,没有显示错误信息,继续进行下一步
#编译并安装该软件
[root@admin apr-1.6.5]# make && make install
#耐心等待,没有显示错误信息,安装成功。继续进行下一步
#解压第二个文件
[root@admin apr-1.6.5]# cd ..
[root@admin src]# ls
apr-1.6.5 apr-1.6.5.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.43
[root@admin src]# tar xf apr-util-1.6.1.tar.gz
[root@admin src]# cd apr-util-1.6.1
#编译第二个软件,并指定安装目录为/usr/local/apr-util 同时必须声明第一个安装目录
[root@admin apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
#耐心等待,没有显示错误信息,继续进行下一步
#编译并安装
[root@admin apr-util-1.6.1]# make && make install
xml/apr_xml.lo -c xml/apr_xml.c && touch xml/apr_xml.lo
xml/apr_xml.c:35:19: 致命错误:expat.h:没有那个文件或目录
……省略部分输出信息……
# 缺少xml 的解析器 需要安装一个
#缺少pcre https://sourceforge.net/projects/pcre/files/pcre/8.42/pcre-8.42.tar.gz/download
[root@admin apr-util-1.6.1]# cd ..
[root@admin src]# wget https://sourceforge.net/projects/pcre/files/pcre/8.42/pcre-8.42.tar.gz/download
#等待下载完成
[root@admin src]# ls #这个名为down的文件就是下载好的
apr-1.6.5 apr-util-1.6.1.tar.gz httpd-2.4.43.tar.gz
apr-1.6.5.tar.gz download pcre-8.42
apr-util-1.6.1 httpd-2.4.43
#解压该文件
[root@admin src]# tar xf download
[root@admin src]# ls #解压后的目录为pcre-8.42
apr-1.6.5 apr-util-1.6.1.tar.gz httpd-2.4.43.tar.gz
apr-1.6.5.tar.gz download pcre-8.42
apr-util-1.6.1 httpd-2.4.43
#预编译
[root@admin pcre-8.42]# ./configure --prefix=/usr/local/pcre
#等待,完成后进行编译和安装
[root@admin pcre-8.42]# make && make install
#继续对apr-utl进行编译安装,这时就不会报错
[root@admin src]# cd ..
[root@admin src]# cd apr-util-1.6.1
[root@admin apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
[root@admin apr-util-1.6.1]# make && make install
#前置包安装完后就可以预编译httpd
[root@admin src]# cd ..
[root@admin src]# cd httpd-2.4.43
#预编译
[root@admin httpd-2.4.43]# ./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre
[root@admin httpd-2.4.43]# make && make install
#等待安装完成,没有提示错误信息
#查看安装情况
[root@admin apache]# cd /usr/local/bin
[root@admin bin]# ls #这里都是可执行文件
ab dbmmanage htcacheclean httpd
apachectl envvars htdbm httxt2dbm
apxs envvars-std htdigest logresolve
checkgid fcgistarter htpasswd rotatelogs
#安装完成后启动该服务
[root@admin bin]# /usr/local/apache/bin/apachectl start
[root@admin bin]# ps -ef | grep httpd #查看
root 45499 1 0 09:49 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 45500 45499 0 09:49 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 45501 45499 0 09:49 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 45502 45499 0 09:49 ? 00:00:00 /usr/local/apach
#关闭该服务
[root@admin bin]# /usr/local/apache/bin/apachectl stop
#查看
[root@admin bin]# ps -ef | grep httpd
root 45597 1611 0 09:52 pts/0 00:00:00 grep --color=auto httpd
【例 2】memcached 源码包的安装
1.下载源码包(.tar.gz格式)
两种方式:①在windows电脑上进入官网下载所需包,然后使用 ftp上传进来
②获取源码包的下载地址,使用wget下载工具直接下载
其实我们可以先用 yum install memcached 查看该软件包的依赖,再根据此依赖下载对应的源码包(虽然使用yum方式查找到的是对应软件RPM包的依赖,对于源码包来说是一样的)
2.解压
解压到 /usr/local/src 下
[root@admin src]# tar xf libevent-2.1.8-stable.tar.gz
[root@admin src]# tar xf memcached-1.5.6.tar.gz
[root@admin src]# ls
libevent-2.1.8-stable memcached-1.5.6
libevent-2.1.8-stable.tar.gz memcached-1.5.6.tar.gz
3.编译和安装
安装预编译工具:
[root@admin src]# yum install gcc-c++ gcc make
若已安装则跳过
因为 memcached 软件的安装依赖于 libevent 软件,所以先编译和安装 libevent
进入解压后的目录进行对 libevent 进行预编译:
[root@admin src]# cd libevent-2.1.8-stable
[root@admin libevent-2.1.8-stable]# ./configure --prefix=/usr/local/libevent
#等待……预编译完成后查看是否有显示错误信息
#并查看执行后的情况
[root@admin libevent-2.1.8-stable]# echo $?
0 #0表示正常执行完上次命令
对 libevent 进行编译和安装
[root@admin libevent-2.1.8-stable]# make && make install
#等待安装,完成后查看是否有显示错误信息
#并查看命令执行后的情况
[root@admin libevent-2.1.8-stable]# echo $?
0 #成功执行
进入解压后的目录进行对 memcached 进行预编译:
[root@admin src]# cd memcached-1.5.6
#在指明安装目录的同时要指出被 memcached 软件所依赖的软件的安装位置
[root@admin memcached-1.5.6]# /.configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
#等待安装,完成后查看是否有显示错误并查看命令执行后的情况
[root@admin memcached-1.5.6]# echo $?
0
对 memcached 进行编译和安装
[root@admin memcached-1.5.6]# make && make install
[root@admin memcached-1.5.6]# echo $?
0
这样就安装完成了,启动该服务查看是否可以正常运行:
[root@admin memcached-1.5.6]# cd /usr/local/memcached
[root@admin memcached]# ls
bin include share
[root@admin memcached]# bin/memcached -d -l 0.0.0.0 -p 11211 -u root
[root@admin memcached]# ps -ef | grep memcached #可以看到,该服务可以正常启动
root 10781 1 0 11:16 ? 00:00:00 bin/memcached -d -l 0.0.0.0 -p 11211 -u root
root 10792 1528 0 11:16 pts/0 00:00:00 grep --color=auto memcached
#下面验证该服务是否可以正常工作
#关闭防火墙
[root@admin memcached]# systemctl stop firewalld
#而后使用另一台主机使用telnet 连接该主机
[dxk@admin ~]$ telnet 192.168.126.3 11211
Trying 192.168.126.3...
Connected to 192.168.126.3.
Escape character is '^]'. #可以看到正常链接,memcached 服务工作正常
源码包卸载:直接删除安装目录即可,不会残留任何垃圾,如果创建了软链接及编辑了额外文件也要进行移除
为了解决使用源码包安装方式的问题,Linux 软件包的安装出现了使用二进制包的安装方式。
二进制包是软件包的一种形式,二进制包是已经经过编译,可以马上运行的程序软件包。你只需要下载和解包(安装)它们以后,就马上可以使用。软件包的内容是01二进制代码(一般以16进制显示),也就是说,这些文件是计算机能直接识别的(计算机只能识别处理01二进制)
二进制包,也就是源码包经过成功编译之后产生的包。由于二进制包在发布之前就已经完成了编译的工作,因此用户安装软件的速度较快(同 Windows下安装软件速度相当),且安装过程报错几率大大减小。
二进制包是 Linux 下默认的软件安装包,因此二进制包又被称为默认安装软件包。
相比源码包,二进制包是在软件发布时已经进行过编译的软件包,所以安装速度比源码包快得多(和 Windows 下软件安装速度相当)。也正是因为已经进行通译,大家无法看到软件的源代码。
格式1: xxxx-devel-6b-33.x86_64.rpm格式(RPM包),
格式2: mysql-5.5.32-linux2.6-x86_64.tar.gz格式(tar -zxvf解压之后就能直接使用)
这里注意和源码包的区别:二进制格式的包名字很长,一般都会带有版本号、适应平台、适应的硬件类型等,而源码格式仅仅就是一个版本号的tar包,例如httpd-2.4.25.tar.gz。
我们一般说的二进制包其实默认指的就是RPM包,也就是说二进制包包含RPM包,RPM包是二进制包的一个子集
这些文件的内容都是01二进制代码(一般以16进制显示),也就是说,这些文件是计算机能直接识别的(计算机只能识别处理01二进制)
【例 】apache tomcat 二进制包的安装
安装 tomcat 之前需要先安装 jdk (依赖性)
1.下载源码包
官网下载 jdk 和 tomcat 源码包(.tar.gz格式)
[root@admin src]# ls
apache-tomcat-8.0.36.tar.gz jdk-7u79-linux-x64.tar.gz
2.解压
[root@admin src]# tar xf apache-tomcat-8.0.36.tar.gz
[root@admin src]# tar xf jdk-7u79-linux-x64.tar.gz
[root@admin src]# ls
apache-tomcat-8.0.36 jdk1.7.0_79
apache-tomcat-8.0.36.tar.gz jdk-7u79-linux-x64.tar.gz
3.使用
[root@admin src]# cd jdk1.7.0_79/bin
[root@admin bin]# ls
appletviewer javap jps rmic
apt java-rmi.cgi jrunscript rmid
ControlPanel javaws jsadebugd rmiregistry
extcheck jcmd jstack schemagen
idlj jconsole jstat serialver
jar jcontrol jstatd servertool
jarsigner jdb jvisualvm tnameserv
java jhat keytool unpack200
javac jinfo native2ascii wsgen
javadoc jmap orbd wsimport
javafxpackager jmc pack200 xjc
javah jmc.ini policytool
[root@admin bin]# ./java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
#因为未配置环境变量(classpath等),所以执行命令的时候必须带相应命令的所在路径
4.配置环境变量
[root@admin bin]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/src/jdk1.7.0_79
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
[root@admin bin]# source /etc/profile.d/java.sh #加载生效
#这样就可以在任何地方执行该命令不用带路径
[root@admin ~]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
5.检验tomcat
[root@admin src]# cd apache-tomcat-8.0.36
[root@admin apache-tomcat-8.0.36]# ls
bin lib logs RELEASE-NOTES temp work
conf LICENSE NOTICE RUNNING.txt webapps
[root@admin apache-tomcat-8.0.36]# cd bin
[root@admin bin]# ls
bootstrap.jar setclasspath.sh
catalina.bat shutdown.bat
catalina.sh shutdown.sh
catalina-tasks.xml startup.bat
commons-daemon.jar startup.sh
commons-daemon-native.tar.gz tomcat-juli.jar
configtest.bat tomcat-native.tar.gz
configtest.sh tool-wrapper.bat
daemon.sh tool-wrapper.sh
digest.bat version.bat
digest.sh version.sh
setclasspath.bat
[root@admin bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/src/apache-tomcat-8.0.36
Using CATALINA_HOME: /usr/local/src/apache-tomcat-8.0.36
Using CATALINA_TMPDIR: /usr/local/src/apache-tomcat-8.0.36/temp
Using JRE_HOME: /usr/local/src/jdk1.7.0_79/jre
Using CLASSPATH: /usr/local/src/apache-tomcat-8.0.36/bin/bootstrap.jar:/usr/local/src/apache-tomcat-8.0.36/bin/tomcat-juli.jar
Tomcat started.
[root@admin bin]# netstat -tunalp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1093/sshd
tcp 0 0 192.168.126.3:22 192.168.126.1:50170 ESTABLISHED 1539/sshd: root@pts
tcp 0 0 192.168.126.3:22 192.168.126.1:51371 ESTABLISHED 1624/sshd: root@pts
tcp6 0 0 :::8080 :::* LISTEN 1700/java #tomcat端口8080
tcp6 0 0 :::22 :::* LISTEN 1093/sshd
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1700/java
tcp6 0 0 :::8009 :::* LISTEN 1700/java
[root@admin bin]# systemctl stop firewalld #关闭防火墙
在宿主机的浏览器中访问该主机的tomcat WEB服务器
以上是非RPM包的二进制包的安装。关于二进制包下的RPM包的安装在下面进行详细讲解
在一个操作系统下,需要安装实现各种功能的软件包。这些软件包一般都有各自的程序,但是同时也有错综复杂的依赖关系。同时还需要解决软件包的版本,以及安装,配置,卸载的自动化问题。
为了解决这些问题,RedHat针对自己的系统提出了一个较好的办法来管理成千上百的软件。这就是RPM管理系统。在系统中安装了rpm管理系统以后,只要是符合rpm文件标准的打包的程序都可以方便的安装,升级,卸载
也就是说 rpm 原本是Red Hat公司专门用来管理Red Hat的Linux发行版本的各项程序套件的管理程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他Linux发行版本的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。
而yum(Yellowdog Update Manager)是RPM的前端工具,是基于RPM的一个管理工具,它能自动的解决安装rpm包产生的依赖关系
RPM包也就是二进制包的一种,rpm包很好区分,以rpm结尾的一般都是rpm包
注意:RPM分为两种,分别是:package和srcpackage,也就是binary rpm和source rpm;前者是已经编译好的二进制包,可以直接安装使用,而后者是包含了源代码的rpm包,需要重组rebuild之后才可以安装使用,其实从严谨的角度上来说,.src.rpm算是特殊的源码包,特殊在它能直接生成rpm包*
格式1: name-version-release.arch.rpm
格式2: name-version-release.arch.src.rpm
RPM 二进制包的命名需遵守统一的命名规则,用户通过名称就可以直接获取这类包的版本、适用平台等信息
RPM 二进制包命名的一般格式如下:
包名-版本号-发布次数-发行商-Linux平台-适合的硬件平台-包扩展名
例如,RPM 包的名称是httpd-2.4.6-93.el7.centos.x86_64.rpm ,其中:
主版本号.次版本号.修正号
平台名称 | 使适用平台信息 |
---|---|
i386 | 386 以上的计算机都可以安装 |
i586 | 586 以上的计算机都可以安装 |
i686 | 奔腾 II 以上的计算机都可以安装 |
x86_64 | 64 位 CPU 可以安装 |
noarch | 没有硬件限制 |
rpm:RPM 包的扩展名,表明这是编译好的二进制包,可以使用 rpm 命令直接安装。此外,还有以 src.rpm 作为扩展名的 RPM 包,这表明是源代码包,需要安装生成源码,然后对其编译并生成 rpm 格式的包,最后才能使用 rpm 命令进行安装。
特殊名称:
devel:表示这个RPM包是软件的开发包。
manual 手册文档。
说明:Linux 系统不靠扩展名分区文件类型,那为什么包全名中要包含 .rpm 扩展名呢?其实,这里的扩展名是为系统管理员准备的,如果我们不对 RPM 包标注扩展名,管理员很难知道这是一个 RPM 包,当然也就无法正确使用。
包全名:一般安装和升级的包,都没有安装,操作的是未安装包,所以用包全名,且安装的时候要写包所在的全路径。
包名:这个时候包已经安装过了,告诉系统该包名,系统就可以搜索到这个包,这时不用写包全名。它搜索的地方是/var/lib/rpm/下的数据库,所以就不用写绝对路径,这些目录下的文件都是二进制文件,不能直接使用 vi 命令打开,因为我们是已经安装了的包,它搜索/var/lib/rpm下的数据库,不用写绝对路径,在任何位置下执行搜索命令都可以找到。查询和卸载这些命令操作的都是已经安装过的包,所以只需写包名即可。
Tips:
RPM包优点:
RPM包缺点:
对于已经编译成二进制的rpm包,由于操作系统环境不同,一般不能混用。
但是以src.rpm形式发行的软件包,由于需要安装时进行本地编译,所以通常可以在不同系统下安装
RPM包默认安装路径
通常情况下,RPM 包采用系统默认的安装路径,所有安装文件会按照类别分散安装到指定目录中。
安装路径 | 含 义 |
---|---|
/etc/ | 配置文件安装目录 |
/usr/bin/ | 可执行的命令安装目录 |
/usr/lib/ | 程序所使用的函数库保存位置 |
/usr/share/doc/ | 基本的软件使用手册保存位置 |
/usr/share/man/ | 帮助文件保存位置 |
RPM 包的默认安装路径是可以通过命令查询的。
除此之外,RPM 包也支持手动指定安装路径,但此方式并不推荐。因为一旦手动指定安装路径,所有的安装文件会集中安装到指定位置,且系统中用来查询安装路径的命令也无法使用
1.RPM 包的安装
rpm命令安装 RPM 包的命令格式: rpm -ivh 包全名
注意一定是包全名。涉及到包全名的命令,一定要注意路径
例如,使用此命令安装 wget 软件包,如下:
[root@admin ~]# rpm -ivh /var/ftp/centos7u2/Packages/wget-1.14-18.el7_6.1.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:wget-1.14-18.el7_6.1 ################################# [100%]
注意:安装的时候,如果该RPM包不在当前目录下则必须加上该包的路径
此命令还可以一次性安装多个软件包,仅需将包全名用空格分开即可
[root@admin ~]# rpm -ivh a.rpm b.rpm c.rpm
如果还有其他安装要求(比如强制安装某软件而不管它是否有依赖性),可以通过以下选项进行调整:
当然:使用rmp命令安装RPM 软件包时考虑包之间的依赖性
比如,我们要安装 apache 软件包,如下所示:
[root@admin ~]# rpm -ivh /var/ftp/centos7u2/Packages/httpd-2.4.6-93.el7.centos.x86_64.rpm
错误:依赖检测失败:
httpd-tools = 2.4.6-93.el7.centos 被 httpd-2.4.6-93.el7.centos.x86_64 需要
报错信息提示我们,如果要安装 httpd,需要先安装 httpd-tools软件,这体现的就是 RPM 包的依赖性。
那么我们就需要先安装httpd-tools,再安装httpd软件
[root@admin ~]# rpm -ivh /var/ftp/centos7u2/Packages/httpd-tools-2.4.6-93.el7.centos.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:httpd-tools-2.4.6-93.el7.centos ################################# [100%]
[root@admin ~]# rpm -ivh /var/ftp/centos7u2/Packages/httpd-2.4.6-93.el7.centos.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:httpd-2.4.6-93.el7.centos ################################# [100%]
这样apache服务安装完成,可以检测下能否使用:
[root@admin ~]# systemctl start httpd
[root@admin ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running)
……省略……
没有问题,该服务可以正常启动
Linux 系统中,RPM 包之间的依赖关系大致可分为以下 3 种:
以上 3 种 RPM 包的依赖关系,给出的解决方案都是手动安装,比较麻烦。那么可以使用 后面讲到的yum 命令安装RPM包,可以自行解决依赖关系。
2.RPM包的升级
使用如下命令即可实现 RPM 包的升级:
rpm -Uvh 包全名
-U(大写)选项的含义是:如果该软件没安装过则直接安装;若安装了则升级至最新版本。
rpm -Fvh 包全名
-F(大写)选项的含义是:如果该软件没有安装,则不会安装,必须安装有较低版本才能升级。
3.RPM包的卸载
使用rmp命令卸载RPM 软件包时也要考虑包之间的依赖性
使用方法:
rpm -e 包名
例如,我们在使用rpm命令安装 memcached 软件的时候,会被告知要先安装 libevent 软件,
[root@admin ~]# rpm -ivh memcached-1.4.15-10.el7_3.1.x86_64.rpm
错误:依赖检测失败:
libevent-2.0.so.5()(64bit) 被 memcached-0:1.4.15-10.el7_3.1.x86_64 需要
所以要先安装 libevent ,再安装 memcached 。
[root@admin ~]# rpm -ivh libevent-2.0.21-4.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:libevent-2.0.21-4.el7 ################################# [100%]
[root@admin ~]# rpm -ivh memcached-1.4.15-10.el7_3.1.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:memcached-0:1.4.15-10.el7_3.1 ################################# [100%]
这样就安装好了。当我们想卸载 libevent 的时候
[root@admin ~]# rpm -e libevent
错误:依赖检测失败:
libevent-2.0.so.5()(64bit) 被 (已安裝) memcached-0:1.4.15-10.el7_3.1.x86_64 需要
因为 libevent 被 memcached 需要,所以要想卸载 libevent ,必须先卸载 memcached
所以说:如果你要卸载的软件包被其它软件包所依赖,系统则会提示"依赖性错误"
通过 --nodeps 选项可以忽略软件包的依赖,让 rpm 命令强制卸载某个软件包。但强制卸载软件包之后可能导致其它依赖于它的软件包都无法正常工作,并可能导致系统安全以及稳定性等多方面的问题,因此不建议强制卸载软件包
注意:卸载软件包时,只需要提供软件包的名称即可,使用 RPM 软件包的全名则会提示“错误的软件包”
可以在卸载前先进行测试:
4.查询rpm包是否安装
用法:
rpm -q 包名 #查询指定包是否安装
rpm -a #查询所有已经安装的RPM包
以上的查询命令是不一定在特定 Packages 的目录当中才能执行的。操作的是未安装包为了让系统找到这个包,必须进到 Packages 这个目录当中,或者需要这个绝对路径。而查询是在我们这个后台的数据库当中寻找的,所以在任何目录中执行这个查询命令都可以执行的,而不需要进入到这个光盘Packages目录当中
[root@admin ~]# rpm -q httpd #查询httpd是否安装
httpd-2.4.6-93.el7.centos.x86_64 #说明已安装
[root@admin ~]# rpm -q nginx #查询nginx是否安装
未安装软件包 nginx #说明未安装
[root@admin ~]# rpm -qa #所查询所有已经安装的RPM包
##通过管道符和grep命令,可以列出所有的相关关键字的包
[root@admin ~]# rpm -qa | grep httpd
httpd-tools-2.4.6-93.el7.centos.x86_64
httpd-2.4.6-93.el7.centos.x86_64
5.查询详细信息
用法:
rpm -qi 包名 #查询软件信息
rpm -qip 全包名 #查询未安装包信息(若该包不在当前目录下,则执行时必须写绝对路径,而且是全包名)
[root@admin ~]# rpm -qi httpd
Name : httpd
Version : 2.4.6
Release : 93.el7.centos
……省略……
这个包信息是组建这个包或者写这个包的时候就已经写好了,保存在这个软件包当中,就直接可以通过 rpm -qi 包名 命令来查看这个信息。
6.查找软件包安装位置
用法:
rpm -ql 包名
rpm -qlp 全包名 #查询 未安装包信息(若该包不在当前目录下,则执行时必须写绝对路径,而且是全包名)
[root@admin ~]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
……省略……
7.查找系统文件属于那个RPM包
用法:
rpm -qf 系统文件名
- 通过这个命令可以查询:通过文件名可以追寻属于哪个包。后面不能跟包名,也不能跟保全名,只能跟系统文件名。
- 切记:这个系统文件名必须是包装出来的,才能反向追查它是属于哪个包。但是,如果这个文件不是包装出来的,比如人为创建的、或者系统自动生成一些临时文件(如,日志文件),这些文件都不是通过包装出来,因此通过这个文件是不能追查到包的。
[root@admin ~]# rpm -qf /usr/bin/ls
coreutils-8.22-24.el7.x86_64
[root@admin ~]# rpm -qf /etc/yum.conf
yum-3.4.3-167.el7.centos.noarch
后面加文件的绝对路径
8.查找软件包的依赖性
用法:
rpm -qR 包名
rpm -qRp 全包名 #查询未安装包的依赖性(因为查询的是未安装的包,后面需要加包全名或者用绝对路径)
[root@admin Packages]# rpm -qR httpd
/etc/mime.types
system-logos >= 7.92.1-1
httpd-tools = 2.4.6-93.el7.centos
/usr/sbin/useradd
……省略……
#可以发现要安装apach的包,需要依赖以上这么多包,这些包只有正常安装后,才能安装apach的包
[root@admin ~]# rpm -qRp /var/ftp/centos7u2/Packages/zziplib-0.13.62-12.el7.x86_64.rpm #查询未安装包的依赖信息
9.RPM包校验
Linux 系统中装有大量的 RPM 包,且每个包都含有大量的安装文件。因此,为了能够及时发现文件误删、误修改文件数据、恶意篡改文件内容等问题,Linux 提供了以下两种监控(检测)方式:
用法:
rpm -Va #校验系统中已安装的所有软件包
rpm -V 已安装的包名 #校验指定 RPM 包中的文件
rpm -Vf 系统文件名 #校验某个系统文件是否被修改
例如校验 apache 软件包中所有的安装文件是否被修改:
[root@admin ~]# rpm -V httpd
可以看到,执行后无任何提示信息,表明所有用 apache 软件包安装的文件均未改动过,还和从原软件包安装的文件一样
下面对 apache 的配置文件 /etc/httpd/conf/httpd.conf 做适当修改
[root@admin ~]# vim /etc/httpd/conf/httpd.conf
#对文件进行修改后保存退出,再次使用 rpm -V 命令对 apache 软件包进行验证
[root@admin ~]# rpm -V httpd
S.5....T. c /etc/httpd/conf/httpd.conf
可以看到,结果显示了文件被修改的信息。该信息可分为以下 3 部分:
1.最前面的 8 个字符(S.5…T)都属于验证信息,各字符的具体含义如下:
由此,S.5…T. c S.5…T. c /etc/httpd/conf/httpd.conf 表达的完整含义是:配置文件 httpd.conf 的大小、内容、修改时间被人为修改过。
注意,并非所有对文件做修改的行为都是恶意的。通常情况下,对配置文件做修改是正常的,比如说配置 apache 就要修改其配置文件,而如果验证信息提示对二进制文件做了修改,这就需要小心,除非是自己故意修改的
rpm命令安装RPM包需要手动解决包之间具有依赖性的问题,尤其是库文件依赖,需要自行去 http://www.rpmfind.net 网站上查找相关的 RPM 包。其实,我们可以选择可自动安装软件包(自动解决包之间依赖关系)的安装方式。
yum,全称“Yellow dog Updater, Modified”,是一个专门为了解决包的依赖关系而存在的软件包管理器。就好像 Windows 系统上可以通过 360 软件管家实现软件的一键安装、升级和卸载,Linux 系统也提供有这样的工具,就是 yum
可以这么说,yum 是改进型的 RPM 软件管理器,它很好的解决了 RPM 所面临的软件包依赖问题
yum 在服务器端存有所有的 RPM 包,并将各个包之间的依赖关系记录在文件中,当管理员使用 yum 安装 RPM 包时,yum 会先从服务器端下载包的依赖性文件,通过分析此文件从服务器端一次性下载所有相关的 RPM 包并进行安装
yum 软件可以用 rpm 命令安装,安装之前可以通过如下命令查看 yum 是否已安装:
[root@admin ~]# rpm -qa | grep yum
yum-3.4.3-167.el7.centos.noarch
yum-plugin-fastestmirror-1.1.31-53.el7.noarch
yum-metadata-parser-1.1.4-10.el7.x86_64
可以看到,系统上已经安装了 yum
如未安装, 可以挂载镜像文件在Packages目录中找到yum软件进行安装
1.显示配置的仓库
yum repolist
yum repolist all #显示所有配置的软件仓库/软件源
yum repolist enabled #显示可用的软件仓库/软件源
软件源/软件仓库(repository)
1.概念:
软件源,顾名思义就是软件的来源,软件的来源就是存放各种软件包的软件仓库或者官方发布的ISO文件,其中包含各种应用软件
多数Linux发行版都有自己的软件安装、配置方案,同时还有各自的软件包管理系统。为了省去用户四处寻找合适软件安装包的麻烦,这些发行版将常用的软件集中到一个服务器上,并为用户提供了自动下载、安装软件的接口,这就是我们所说的“软件仓库”。
为了方便大众访问,人们为这些软件仓库建立了大量的“镜像”,使世界各地的用户都能方便地使用。不同发行版的软件仓库一般不同,如用户接口各异、软件丰富程度不同、镜像分布不同等等
软件仓库管理软件,例如yum和zypper,配置文件格式为.repo,可以在仓库中自动地定位并获取正确的RPM软件包*。多数Linux发行版都有自己的软件安装、配置方案,同时还有各自的软件仓库管理系统,例如RHEL的yum,suse的zypper,Debian和Ubuntu的apt。
2.格式:
软件仓库类型:
在线网络访问获取方式,包含各类软件的二进制包或者源码包,可以自定义软件种类及数量,软件仓库的获取方式可以是http、FTP、nfs等,一般官方也会提供这种软件仓库。
离线本地访问获取方式,官方发行版本的离线ISO文件,内部包含的软件都是经过筛选的,挂载出来后也可以称之为是一个软件仓库
软件仓库的的配置文件格式一般是:*.repo
3.特性:
软件仓库中包含的不止只有软件包,还有其他信息(软件包的信息,位置信息,软件包的依赖关系,索引文件等) 类似于索引的作用,可以快速的检索到该包
在Linux操作系统中,软件包的安装其实是文件的拷贝,即把软件所用的各个文件拷贝到特定目录。当然RPM安装软件包,也不例外。但RPM更“先进”一些,因为它在安装前,还会执行检查软件包的依赖(Dependency)、检查软件包的冲突(Conflicts)。最后才将软件包里面的相关文件解出并存放到相应位置。也就是说软件仓库中包括了所有RPM包的头信息(header)描述,比如依赖性等。客户端使用例如yum等仓库管理软件在安装的时候就会去下载header文件并加以分析,这样才能自动地从服务端下载相关软件,并正确地完成安装任务。
注意:Linux软件包的基本组成部分通常有:共享库、应用程序、依赖关系,服务和文档。对软件包的使用和管理被称为包管理
2.查看RPM包
yum list #查询所有可用软件包列表,或者yum list all
yum list|grep 包名 #查看指定包
yum list installed|grep 包名 #查看是否已安装某包
yum list available #显示可安装的包
yum list updates #显示已经更新的包
yum list recent #显示最近增加的包
例
#如果未被安装,则会显示可安装的软件包
[root@admin ~]# yum list samba
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* extras: mirrors.huaweicloud.com
* updates: mirror.bit.edu.cn
可安装的软件包
samba.x86_64 4.10.4-11.el7_8 updates
#如果已经安装,则会显示已安装的软件包
[root@admin ~]# yum list httpd
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* extras: mirrors.huaweicloud.com
* updates: mirror.bit.edu.cn
已安装的软件包
httpd.x86_64 2.4.6-93.el7.centos @base
3.RPM包安装
yum install 包名 #安装
yum install -y 包名 #安装包,并对所有的Y/N选择Y
4.升级
yum -y update #升级所有软件包。不过考虑到服务器强调稳定性,因此该命令并不常用。
yum -y update 包名 #升级特定的软件包。
5.搜索
yum search 包名 #从 yum 源服务器上查找与关键字相关的所有软件包
6.显示软件包信息
yum info 包名
例:
[root@admin ~]# yum info httpd
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* extras: mirrors.huaweicloud.com
* updates: mirror.bit.edu.cn
已安装的软件包
名称 :httpd
架构 :x86_64
版本 :2.4.6
发布 :93.el7.centos
大小 :9.4 M
源 :installed
来自源:base
简介 : Apache HTTP Server
网址 :http://httpd.apache.org/
协议 : ASL 2.0
描述 : The Apache HTTP Server is a powerful, efficient, and
: extensible web server.
7.列出软件包提供哪些文件
yum provides 包名
8.创建和清理缓存
yum makecache #构建缓存
yum clean all #清理
9.卸载
使用 yum 卸载软件包时,会同时卸载所有与该包有依赖关系的其他软件包,即便有依赖包属于系统运行必备文件,也会被 yum 无情卸载,带来的直接后果是使系统崩溃
除非你能确定卸载此包以及它的所有依赖包不会对系统产生影响,否则不要使用 yum 卸载软件包
yum remove 包名 #卸载指定的软件包