1、Linux 中软件包的分类html
2、软件安装之 RPMlinux
3、软件安装之 YUM数据库
1.概述
2.YUM 在线安装apache
4、软件安装之源码包centos
5、脚本安装包缓存
源码包就是各类源代码文件组合而成的压缩包,由于 Linux 是开源的,因此源码包中的源代码是能够查看甚至修改的,用户能够根据本身所须要的功能进行安装。可是源码包在安装的时候须要编译,即从源代码 abcd
编译成机器语言 0101
,这个过程须要花费很长的时间。
在 Windows 中的程序都是通过编译的,而且通常认为编译是不可逆的,即反编译(0101->abcd
是很是困难的),即便能勉强完成,也会丢失部分代码。也正由于这个缘由,在 Windows 中须要用到某个程序,若是该程序向你收费,你也只能乖乖交钱,除非你不用。这也就是 Linux 开源的魅力所在!服务器
源码包有以下优势:
- 开源,若是有足够的能力,能够修改源码包中的源代码;
- 能够根据本身的需求选择安装特定功能;
- 软件是编译安装,因此更加适合本身的系统,更加稳定高效;
- 卸载方便,只须要把安装目录删除,就能不留痕迹。
源码包有以下缺点:
- 安装过程步骤多,尤为是安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误;
- 编译过程会比较长,因此安装的过程也比二进制包安装时间长;
- 对新手不太友好,由于是编译安装,因此一旦报错,新手很难解决。
二进制包是已经编译好了的包,二进制包中的数据都计算机能直接识别的 0101
,因此安装起来就省去了编译环节,这样能够节省不少时间。在 Linux 中,Redhat 系列的二进制包通常都是 rpm 包,而 Ubuntu 系列的二进制包通常都是 deb 包。
二进制包有以下优势:
- 包管理系统简单,只须要敲几个命令就能实现包的安装,升级,查询和卸载;
- 安装速度比源码包快得多;
二进制包有以下优势:
- 通过编译,不能够再看到源代码,不能根据本身的需求决定安装哪些功能;
- 功能的选择不如源码包灵活
- 效率不如源码包
- 依赖性
对于一些复杂的环境搭建(如LAMP),太过于繁琐,有大神就写出了该环境的安装脚本,只须要运行该脚本,全部的东西都能装上。虽然给脚本安装包另外分了一个类,可是脚本安装包实际上仍是安装源码包和二进制包。
脚本安装包有以下优势:
- 安装简单,方便,只须要运行脚本,就能安装脚本包含的全部软件,也不会报错。
脚本安装包有以下缺点:
- 彻底丧失自定义性,不能按照本身的需求安装须要的功能,安装的功能彻底由脚本编写者帮你决定。
若是是服务器,推荐源码包安装。由于服务器要被成千上万的人访问,源码包执行效率高。
若是是我的设备,推荐 RPM 包,固然也看我的本身的爱好了,想装什么包就装什么包,谁特么管你。
RPM包来源与光盘中,因此要先挂载光盘,才能够进行后面的步骤。挂载的示例以下:
建立挂载点并挂载:
mkdir /mnt/cdrom mount /dev/sr0 /mnt/cdrom/全部的 RPM 包都在 /mnt/cdrom/Packages/ 中,可用
ls
命令查看,以下图所示:
与挂载相关的内容,能够参考个人另外一篇博客:
Linux基础二(挂载、关机重启与系统等级)
知道了挂载后,还不能直接安装 RPM 包,还必须具有一些关于 RPM 包的准备知识(命名规则和依懒性)
以下所示:
httpd-2.2.15-29.el6.centos.x86_64.rpm 其中: httpd 为包名 2.2.15 为版本号; 29 为软件发布的次数 el6.centos 为其适合的Linux平台 x86_64 为其适合的硬件平台 rpm 是包的扩展名
包全名指的是完整的包名,包名是开头的第一个单词。
在上面的例子中:
httpd
为包名;
httpd-2.2.15-29.el6.centos.x86_64.rpm
是包全名
- 包全名:在操做没有安装的包的时候(安装和升级),要使用包全名,而且要注意路径(绝对路径或相对路径)
- 包名:已经安装了该软件以后,后续对该包的操做(卸载和查询)使用包名就能够了。当使用包名的时候,其实是去搜索
/var/lib/rpm/
中的数据库__db.001到__db.004
(里面是乱码)
- 树形依赖:a->b->c
解决:装c再装b再装a- 环形依赖:a->b->c->a
解决:将a、b、c三个包放在一个命令里安装- 模块依赖:也叫库依赖。
最恶心,依赖以.so.n(n为数字)结尾的库文件,该库文件是 /mnt/cdrom/Packages 目录下的某一个rpm包中的文件,要先安装该包
解决:如何判断在哪一个包中,查询 www.rpmfind.net
命令:
rpm -ivh 包全名 选项: -i:安装(install) -v:显示详细信息(verbose) -h:显示进度(hash) --nodeps:不检测依赖性(不要用)
用 rpm 命令来安装软件时要注意其依赖性。能够根据 2.2 节中的思路来进行安装。
示例:安装 httpd
1. 进入挂载目录:cd /mnt/cdrom/Packages/ 2. 安装 httpd:rpm -ivh http-tab(2次tab) 3. 通过 2. 后会提示几个 rpm 包,其中: 1. httpd-2.2.15-29.centos.x86_64.rpm 为主包 2. httpd-devel-* 为库包 3. httpd-manual-* 为文档包 4. httpd-tools-* 为工具包 4. 通常先安装主包,再安装附加包注意:有两个100% 才算完成,第一个100% 是准备成功,第二个100% 出现才算安装成功
命令:
rpm -Uvh 包全名 选项: -U:升级(Upgrade) --nodeps:不检测依赖性(不要用) 升级至关于安装一个版本更新的安装包,你也能够用升级命令来安装新包。
命令:
rpm -e 包名 选项: -e:卸载(erase) --nodeps:不检测依赖性(不要用)
说明:
- 卸载时只需输入包名便可,由于该软件包在安装的时候已经写入
/var/lib/rpm/
中的数据库中了- 卸载命令依然存在依赖性,按照安装时的反序卸载便可
- rpm 包在安装时没有指定安装位置,安装位置是该rpm包做者定义好的默认位置(以下图所示),会分布在磁盘的各个部分,若要手工删除不方便,因此才有了卸载命令。
- 而源码包没有卸载命令,由于源码包在安装过程当中能够指定安装位置,只要把软件包安装位置所在目录删除就会将软件完全删除。
命令:
rpm –q 包名 // 查询指定软件包是否安装 rpm –qa // 查询全部已安装的软件包 rpm –qi 包名 // 查询指定包名的详细信息(里面只有帮助网站有点用) rpm –qip 包全名 // 查询指定未安装包的详细信息(注意路径) rpm –ql 包名 // 查询指定软件包都安装在哪些位置了 rpm –qf 系统文件名 // 查询该系统文件属于哪个软件(必须是已经安装了的软件生成的文件才能反向追查) rpm -qR 包名 // 查看软件包的依赖关系 (–p 未安装的软件包) 选项: -q:查询(query) -a:全部(all) -i:信息(information) -p:包(package) -l:位置(local) -f:文件(file)
在查询的时候能够灵活应用管道符搭配 grep 命令使用
命令:
rpm –V 已安装的包名 // 校验指定rpm包中的文件 选项: -V (verify) 校验 示例: rpm -V httpd
若是文件未被修改,则不会出现任何提示,若文件被修改,则会出现如下提示:
其中,验证内容(即文件前面的 9 个.
和一个c
)分别表明:
S:文件的大小是否被改变 M:文件的类型或文件的权限是否被改变 5:文件的MD5校验和是否改变(可当作是文件内容是否改变) D:设备的主从代码是否改变 L:文件路径是否改变 U:文件的属主(全部者)是否改变 G:文件的属组是否改变 T:文件的修改时间是否改变 c:这个字符所占的位置有如下意义: c:配置文件 d:普通文档 g:鬼文件,不多见,就是该文件不该该被这个 RPM 包所包含 L:受权文件 r:描述文件
当某一个软件的某些配置文件被误删除了,致使一些功能执行不了,这时候能够经过来提取命令来将该文件从 RPM 包提取出来。
命令:
rpm2cpio 包全名 | cpio -idv.文件绝对路径 其中: rpm2cpio 是将 rpm 包转化为 cpio 格式的命令 cpio 是一个标准工具,它用于建立软件档案文件和从档案文件中提取文件 | 是管道符
RPM 安装的缺点:依赖性太强,手工安装难度较大。
YUM 安装的也是 RPM 包,其好处是:全部安装包都放在官方服务器上,使用 YUM 进行在线安装时,能够自动解决依赖性问题;固然,若是网络不通,也能够进行本地 YUM 安装。可是,YUM 在线安装对于 RedHat 来讲是收费服务(CentOS能够用^_^)。并且 YUM 也只能实现安装,升级和卸载功能,不支持其余的功能(如查询,YUM的查询只是在服务器上查询相关软件名)。
由于 YUM 安装是在线的,因此须要指定安装时所需的源文件从哪里下载。YUM 源文件就是用来指定下载来源的文件,即用来指定下载来源是网络上的某个网站的仍是本地哪一个文件的。
YUM 源文件保存在 /etc/yum.repos.d/
目录下,一共有 4 个文件,分别是:CentOS-Base.repo(网络YUM源)
,CentOS-Debuginfo.repo(调试YUM源)
,CentOS-Media.repo(光盘YUM源)
和CentOS-Vault.repo
。其中,默认只有第一个是生效的。
CentOS-Base.repo 文件的内容(部分)以下:
# 注释 # 注释 [base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 [updates] ··· enabled=0 ··· [extras] ··· [centosplus] ··· [contrib] ···
其中:
形如[base]
的是容器名称,base
表明基本安装,update
表明更新等;
name
是容器说明,能够本身随便写;
mirrorlist
是镜像站点,指定了一个网站地址,安装时就从该网站上下载所需的文件,与baseurl
的做用同样,能够注释掉其中一个;
baseurl
是 YUM 源服务器的地址,默认是 CentOS 官方的 YUM 源服务器,是可使用的,该服务器在国外,嫌慢的话你也能够改为国内的地址;
enabled
此容器是否生效,生效则=1
,不生效则=0
,不写则默认生效;
gpgcheck
若是是 1 则表明 RPM 的数字证书生效,0 则不生效;
gpgkey
是数字证书公钥文件保存的位置,不用修改。
若是你能联网,直接用第一个YUM源就能够了,若是你闲它太慢能够改为国内的服务器地址。
没有网络的状况下,能够用光盘来搭建本地 YUM 源。步骤以下:
挂载光盘
mkdir /mnt/cdrom mount /dev/sr0 /mnt/cdrom/
使网络 YUM 源失效,即:使 /etc/yum.repos.d/CentOS-Base.repo
文件失效,由于系统默认选择的 YUM 源文件是网络 YUM 源
能够经过修改该文件的后缀名使其失效:
cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo.bak
让光盘 YUM 源生效,即:使 /etc/yum.repos.d/CentOS-Base.repo
文件生效,要改动该文件内的三个地方,以下图所示:
两张图分别为修改先后的内容。
验证本地 YUM 源是否搭建完成,可借助 yum list
命令,若在第三列看到 CentOs-Media.repo
的容器名称即 c6-media
则表明搭建成功。
这样一来,即便不能联网还能经过本地 YUM 源进行软件安装。实际上在生产中不少人也更愿意使用本地 YUM 源进行软件安装。
yum list // 用来查询全部可安装的软件包(不支持本地) yum search keyword // 搜索和关键字相关的全部软件包
若是咱们要使用某个命令提供的服务,如 nslookup
查看 DNS 相关信息,可是系统并无安装该命令所在的软件包,怎么查询呢?
- yum provides */keyword:如
yum provides */nslookup
,就能看到该命令属于 'bind-utils' 这个软件包- 接下来用 yum 安装该软件包便可:
yum -y install bind-utils
。
yum -y install 包名 // 安装软件包(自动解决依赖关系) 选项: -y 自动回答 yes 例如: yum -y install gcc // gcc 是 C 语言编译器 yum –y update 包名 // 升级软件包,不写包名会升级全部 // 必需要有更高版本的软件包,我的能够升级,服务器上不建议(除非是严重漏洞) yum –y remove 包名 // 卸载软件包
注意:服务器上应使用最小化安装,用什么装什么,尽可能别用 YUM 卸载!由于会卸载掉相关的依赖包,包括系统内核所依赖的包!
Yum软件组管理命令:
yum grouplist // 列出如有可用的软件组列表 yum groupinstall 软件组名 // 安装指定软件组,组名能够由 grouplist 查询出来 yum groupremove 软件组名 // 卸载指定软件组
说明:
对于一些复杂的软件(如中文支持),用组比较方便。
在远程工具上,yum grouplist
会用中文显示软件组名,可是安装敲命令的时候必需要用英文组名,咱们能够修改系统默认语系:LANG=en_US
便可。要改回中文语系,能够用 LANG=zh_CN.utf8
命令。这是临时生效,要永久生效须要在文件 /etc/sysconfig/i18n
中修改(shell的环境变量中有详细)。
咱们在上面对软件包的分类中,有提到源码包和二进制包的优缺点,在这里就再也不赘述。实际上,上面提到的优缺点是在软件安装以前体现出来的差异,可是源码包与二进制包(RPM)在安装后还有一些区别。安装前的区别主要是在概念上有所不一样,能够简单地理解为编译前和编译后的不一样;而安装后的区别主要是安装位置的区别,而由安装位置的区别又形成后续的管理方法的不一样。
在上文中已经贴有一张图,这边再贴一次:
实际上,安装者并不能决定 RPM 包安装的位置,而 RPM 包的安装位置是由编写该安装包的做者定义的,因此咱们在安装的时候并不须要指定安装位置。上图是一个常见的 RPM 包所安装的目录,不表明全部的安装包都按照这个目录进行安装。
不过 RPM 包仍是支持指定安装位置的,由命令:rpm --prefix=<dir>
实现。可是咱们并不建议指定 RPM 包的安装位置,缘由以下:
- 若不指定安装位置,则会按照默认的位置安装,系统能够正常调用;
- 若指定安装位置,则系统会去默认的安装位置中找,反而找不到;
- 可是不指定安装位置,默认的安装位置会很零散,处处都是,可是咱们还有卸载命令
rpm -e 包名
。
源码包的安装位置能够随意指定,可是为了方便管理,咱们一般安装在 /usr/local/软件名/
目录下,软件安装包能够保存在 /usr/local/src/
目录中。可是咱们为何要指定源码包的安装位置呢?由于源码包并无卸载命令,若不指定安装位置,则会装获得处都是,当咱们想要卸载该软件时删起来很麻烦;若指定了安装位置,删除安装目录便可。
管理方法的不一样实际上就是启动方法的不一样:
- RPM 包在安装时,若不指定安装位置,则会安装在默认位置,同时将启动程序放在
/etc/rc.d/init.d/
目录下,能够经过service 软件名 start|stop|restart
命令管理软件。- 源码包在安装时,并不会将启动程序放在该目录下,因此也不能用 service 命令其管理源码包安装的程序,因此只能用绝对路径来启动或关闭。固然啦,也能够将该软件的启动程序(以apache为例默认放在
/usr/local/apache2/bin/apachectl
目录下)复制到该目录下而后用 service 命令来管理。
此外,还有一些命令也只能针对 RPM 包安装的服务使用,如:查看服务自启动状态的命令 chkconfig --list
和管理服务自启动的命令 ntsysv
,默认状况下均不能对源码包使用。
- 安装 C 语言编译器
gcc
:由于在 Linux 中,全部的源代码包都使用 C 语言编写的,因此咱们须要确保在安装源码包以前已经安装了 C 语言编译器。值得注意的是,gcc 必需要用二进制包安装,由于 gcc 的源码包也是 C 语言编写的,须要进行编译才能安装。- 下载源码包:安装完了 gcc 以后,咱们能够去官网下载源码包,如 Apache 官网下载地址是
http://mirror.bit.edu.cn/apache/httpd
。新手练习的话能够下载 2.2 版本的 Apache 源码包,由于它不会报错
- 源码包的保存位置:
/usr/local/src/
。其中,usr
是用户资源;local
是本地;src
指源码包- 软件安装位置:
/usr/local/软件名/
。其中,usr
是用户资源;local
是本地如何肯定安装报错?
① 安装过程中止(只有安装过程中止了才能判断) ② 看是否出现 error|warning|no 的提示(只须要看最后几行便可)
- 下载源码包
- 解压下载的源码包
- 进入压缩目录(必须执行,由于后续操做都在该目录下进行)
执行
./configure 软件配置与检查
命令,可当作是编译前的准备(基本上每一个源码包都有这个命令或者相似的命令),执行完成会生成(写入) MakeFile 文件,后续依赖该文件进行安装
做用以下:① 定义须要的功能选项: ./configure --help 命令能够看到支持的功能选项,须要的话在安装的时候加上便可 如:./configure --prefix=/usr/local/apache2 其中,--prefix 选项的做用是在安装时会自动建立 /usr/local/apache2/ 这个目录,并将安装期间产生的一系列文件都复制到该目录下 ② 检测系统环境是否符合安装要求 如:检测是否安装了 gcc ③ 把定义好的功能选项和检测系统环境的信息,都写入 MakeFile 文件,用于后续的编辑- 执行
make
命令进行编译。检查有无报错,若报错可以使用make clean
清除编译产生的缓存文件,恢复到 make 以前的状态,再想办法。
截止到目前,若出现错误,无需删除/usr/local/apache2
目录,由于还没安装- 执行命令
make install
对软件进行安装。检查有无报错,若报错则删除安装目录;若没报错能够进入安装目录查看相关文件启动该软件:以 httpd 为例执行
/usr/local/apache2/bin/apachectl start
。
注:如何知道 Apache 的启动文件是 apachectl ?
在解压的源码包中有一个INSTALL
文件,里面有相关信息以下图所示:去浏览器上输入 IP 地址测试服务是否开启成功啦,若访问不了能够试试关闭 Linux 上的防火墙(setup)
源码包无卸载命令,直接删除安装目录便可
网页保存位置是:/var/www/html/
,里面默认是空的,能够本身建立一个文件 index.html
网页保存文件是:/usr/local/apache2/htdocs/index.html
,能够 vi 进行编辑
脚本安装包在本文一开始的分类中有介绍,很简单,只要执行该脚本便可,脚本安装包实际上仍是安装 RPM 包或源码包。这里就再也不再也不赘述。
对于搭建复杂的环境 LNMP(Linux,Nginx,MySQL,PHP) 可使用脚本安装包,这边推荐一个网站:https://lnmp.org/