脚本安装包:把复杂的软件包安装过程写成了程序脚本,初学者可以执行程序脚本实现一键安装。但实际安装的还是源码包和二进制包。
优点:安装简单、快捷;
缺点:完全丧失了自定义性。
RPM包、系统默认包
二进制包的优点:
(1) 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载;
(2) 安装速度比源码包安装快的多。
二进制包的缺点:
(1) 经过编译,看不到源代码;
(2) 功能选择不如源码包灵活;
(3) 依赖性。
RPM包位置
RPM包在系统光盘的Packages目录中。(本地)
执行命令:
mkdir /mnt/cdrom (创建挂接点)
mount /dev/sr0 /mnt/cdrom (将RPM包目录挂接到挂接点上,通过访问挂接点即可访问RPM包)
cd /mnt/cdrom
cd Packages/
ls (显示所有RPM包)
RPM命名规则
httpd-2.2.15-15.el6.centos.1.i686.rpm
httpd:软件包名
2.2.15:软件版本
15:软件发布的次数
el6.centos:适合的Linux平台
i686:适合的硬件平台
rpm:rpm包扩展名
RPM包依赖性
树形依赖:a->b->c
环形依赖:a->b->c->a (这两个依赖情况,rpm包只是依赖于其他rpm包)
模块依赖:当安装一个rpm包时,其安装包依赖于其他安装包下的某个文件,这时需要找到该提示文件的安装包,安装该包,然后才能安装想要的rpm包。(麻烦之处在于找到文件对应的安装包,现在提供了一个查询网站:www.rpmfind.net,输入文件名会给出对应的rpm包名)。
RPM安装命令
首先说明包全名和包名:
在操作软件时,是使用包全名还是包名,区别在于:
包全名:当操作的包时没有安装过的,使用包全名。而且要使用绝对路径或者cd到该路径下。
包名:当操作已安装的软件包时,使用包名,其会搜索/var/lib/rpm/中的数据库。
安装rpm包命令为:rpm -ivh 包全名
-i (install) 安装
-v (verbose) 显示详细信息
-h (hash) 显示进度
–nodeps 不检测依赖性(注意是两个横线-)
例如:rpm -ivh httpd-2.2.15-15.e16.centos.1.i686.rpm
注意:最好是检查依赖性。RPM包升级:rpm -Uvh 包全名 (注意升级时也应该使用包全名,因为这个新的升级包对系统来说也是一个新的包)
-U(upgrade) 升级
例如:rpm -Uvh httpd-2.2.15-15.e16.centOS.1.i686.rpm
-e(erase): 卸载
–nodeps:不检查依赖性(实际工作中不允许使用)
例如:rpm -e httpd(这儿就不需要一定在安装目录下输入命令了。)
在卸载包之前,必须先卸载该包的依赖项。(安装时哪个先装,则卸载时那个后装,后装的应先卸。即卸载顺序跟安装顺序是反序)
Note: RPM包安装时并没有指定安装路径,所以应该是安装在Linux的默认安装路径下(取决于写RPM包的人如何指定安装路径),所以RPM包准备了卸载命令。而源码包可以指定安装路径,因此源码包没有卸载命令。对于源码包安装的软件,只要把源码包所在目录删除即可实现软件的卸载。
RPM包查询:
rpm -q 包名(查询已安装的软件包)
-q (query): 查询rpm -qa
-a (query all):查询系统中所有装过的rpm包rpm -qa |grep httpd:查询系统中含有httpd关键字的所有安装过的rpm包(”|”为管道符)。
rpm -qi 包名(查询包信息)
rpm -qip zenity-2.28.0-1.e16.i686.rpm(用途:用于查询该包的官网,获得相关信息)
-i(information):查询软件信息;
-p(package): 查询未安装包信息(安装前有的信息);
-l(list):列出匹配关键字的文件;
-f (file):查询系统的某个文件是属于哪个包的;rpm -qf yum.conf,若该文件不是rpm包装出来的,则不能反向查询出该文件属于哪个包。
RPM包默认安装路径:
安装路径 | 文件类型 |
---|---|
/etc/ | 配置文件安装目录 |
/usr/bin/ | 可执行的命令安装目录 |
/usr/lib/ | 程序所使用的的函数库保存位置 |
/usr/share/doc/ | 基本的软件使用手册保存位置 |
/usr/share/man/ | 帮助文件保存位置 |
*
RPM包校验:rpm -V httpd
-V (verify):校验指定RPM包中的文件
**验证内容中的8个信息的具体内容如下**:
S 文件大小是否改变
M 文件的类型或文件的权限(rwx)是否被改变
5 文件MD5校验和是否改变(可以看成文件内容是否改变)
D 设置的主从代码是否改变
L 文件路径是否改变
U 文件的属主(所有者)是否改变
G 文件的属组是否改变
T 文件的修改时间是否改变
**文件类型**
c 配置文件(config file)
d 普通文件(documentation)
g “鬼文件”(ghost file),很少见,表示该文件不应该被这个RPM包包含。若出现这个信息,应该注意系统是否被攻击,存在安全风险。
L 授权文件(License file)
r 描述文件(read me)
例如:
S.5....T. c /etc/httpd/conf/httpd.conf :表示apache的配置文件被修改过,MD5值被修改,文件的修改时间改变,c表示该文件是配置文件。
RPM包中文件提取
rpm2cpio 包全名 | cpio -idv .文件绝对路径(”.”代表当前目录)
-rpm2cpio:将rpm包转换为cpio格式的命令。
cpio:是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件。
cpio 选项 < [文件|设备]:
-i:copy-in模式,还原;
-d:还原时自动新建目录;
-v:显示还原过程。模拟重要系统文件丢失的处理方法:
rpm -qf /bin/ls:查询ls命令属于哪个软件包;
mv /bin/ls /tmp:造成ls命令误删除假象;
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls:提取RPM包中ls命令到当前目录的/bin/ls下;
cp /root/bin/ls /bin/:把ls命令复制回/bin/目录,修复文件丢失。
优点:将所有软件包放在官方服务器上,当进行yum在线安装时,可以自动解决依赖性问题。
但是:redhat的yum在线安装需要付费,所以可使用CentOS。
位置:/etc/yum.repos.d/CentOS-Base.repo
使用 vi 命令打开源文件,文件内容说明:
[base] 容器名称,一定要放在[]中
name 容器说明,可以自己随便写
mirrorlist 镜像站点,这个可以注释掉
baseurl yum源服务器的地址(baseurl和mirrorlist两者有一个即可,一般baseurl都被注释掉了)
enabled 此容器是否生效,如果不写或enable等于1都是生效,enable等于0就是不生效
gpgcheck 为1则RPM的数字证书生效,为0则不生效
gpgkey 数字证书的公钥保存位置,不用修改
在没有网络的情况下,允许使用光盘来搭建本地yum源。
1. 挂载光盘
建立挂载点:mkdir /mnt/cdrom
挂载光盘:mount /dev/cdrom /mnt/cdrom/
2. 使网络yum源失效
方法一:
进入yum源目录:cd /etc/yum.repos.d/
修改yum源文件后缀名,使其失效:mv CentOS-Base.repo CentOS-Base.repo.bak
方法二:
在yum源中加入enable=0, 使其不生效。但该方法会比较麻烦,需要对每个容器都添加enable=0.
3. 使光盘yum源生效
vim CentOS-Media.repo(打开光盘yum源)
- [c6-media]
- name=CentOS-$releasever - Media
- baseurl=file:///mnt/cdrom #把地址改为你自己的光盘挂载地址
- # file:///media/cdrom/
- # file:///media/cdrecorder/ #注释掉这两个不存在的地址
- gpgcheck=1
- enable=1 #把enable=0改成enabled=1,让这个yum源配置文件生效
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
yum list:显示yum源有哪些,若yum源名中有新建的光盘的容器名,则光盘yum源生效,可直接使用本地yum源。
1. 常用yum命令
1) 查询
yum list: 查询所有可用软件包列表
yum search 关键字: 搜索服务器上所有和关键字相关的包
注意:yum没有本地查询命令,即不能查询本地安装了哪些包,只能查询服务器上或光盘上有哪些包。要查询本地安装包,使用rpm命令。
2) 安装
yum -y install 包名
-y : 自动回答yes
注意:yum安装时只写包名即可,不写包全名。而rpm手动安装时,必须写绝对路径和包全名,linux才能找到安装包位置。
安装c语言编译器:yum -y install gcc
安装C++编译器:yum -y install gcc-c++
安装完成后,使用如下命令编译源文件:
C源文件:gcc -o 要生成的文件名 要编译的源文件名
C++源文件:g++ -o 要生成的文件名 要编译的源文件名
注意:gcc是C语言编译器,想安装源码包必须要有gcc的环境,否则无法安装。第一个gcc必须使用RPM包安装。后面可以使用源码包对gcc升级。
3) 升级
yum -y update 包名
前提条件:有更高版本的软件才能升级,否则不能升级。对linux来讲,除非爆发了非常大的漏洞,如SSL, Bash等必须要马上升级,一般情况下不用升级就不要升级,因为服务器进行升级会付出很大的代价。
4) 卸载
yum -y remove 包名
建议:服务器使用最小化安装,要用什么软件才安装什么软件,尽量不卸载软件。(因为卸载也同样有依赖性,若该程序所依赖的包也是系统所依赖的包,被卸载后会造成系统崩溃)
服务器上不建议使用yum卸载,要注意服务器安全!!!
2. yum软件组管理命令
yum grouplist:列出所有可用的软件组列表
yum groupinstall 软件组名:安装指定软件组,组名可以由grouplist查询出来
yum groupremove 软件组名:卸载指定软件组
1.区别:
安装前的区别:概念上的区别
安装之后的区别:安装位置的不同
RPM包安装位置:默认位置,见前面的表格。RPM包也可以指定安装位置。但不建议自定义安装位置,以免系统找不到安装位置。
源码包安装位置:安装在指定位置当中,一般是usr/local/软件名/ (相当于windows下的软件默认安装位置Program Files下)。源码包必须要指定安装位置,原因是源码包没有卸载命令,则卸载时必须一个文件一个文件地手工删除,若不指定好位置,则卸载时很麻烦。
–prefix指定安装位置。
2.安装位置不同带来的影响
安装位置不同,则管理方法不同。
例如:
RPM包安装的apache的启动方法有两种,一种是使用绝对路径,一种是使用系统服务管理命令(service)来启动:
/etc/rc.d/init.d/httpd start
service httpd start
// service命令会自动搜索/etc/rc.d/init.d/路径下的程序
而源码包不能使用service命令启动,因为没有安装到默认路径中,而只能使用绝对路径来进行启动(除非将apache拷贝到service搜索的路径下):
/usr/local/apache2/bin/apachectl start
1. 安装准备:
安装C语言编译器gcc(源码包全都由C语言写的)
官网下载源码包:http://mirror.bit.edu.cn/apache/httpd
使用WinSCP.exe工具,可将windows主机上的文件拷贝到虚拟机的linux系统中。
2. 安装注意事项
源代码保存位置:/usr/local/src/
软件安装位置:/usr/local/
如何确定安装过程报错:安装过程停止,并出现error、warning或no的提示。
3. 源码包安装过程
(1) 下载源码包
(2) 解压缩下载的源码包:tar -zxvf 源码包名
(3) 进入解压缩目录:cd 解压缩的目录(这条命令是必须操作的)
执行命令:(1) ./configure (2) make (3) make install
./configure 软件配置与检查
定义需要的功能选项:./configure –help (查看有哪些功能选项);
检测系统环境是否符合安装要求:例如,是否安装gcc,若没有安装,则执行./configure会报错;
把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑。
例如,如安装时指定安装路径:./configure –prefix=/usr/local/apache2
make 编译
make clean:一旦报错,就可以执行该命令,目的是清楚缓存、临时文件等,让安装过程变成完全没有安装一样,重头再来。
make install 安装命令
PREFIX/bin/apachectl start 启动程序 (具体启动路径可查看程序的INSTALL文件)
4. 源码包的卸载
不需要卸载命令,直接删除安装目录即可。不会遗留任何垃圾文件。
上面所讲的安装过程均以安装Web服务器Apache为例。
脚本安装包以安装Nigix服务器为例。
注意: Linux系统中只有源码包和RPM包,没有脚本这种安装包,所谓的脚本安装包其实是把复杂的安装过程(几十行或上百行命令),写成一个Apache的安装脚本,实际上安装还是源码包或者RPM包。
优点:简单、快速、方便
缺点:(1)不能定义安装软件的版本
(2)不能定义所需要的软件功能
(3)源码包的优势丧失
准备工作
(1)关闭RPM包安装的httpd和MySQL(因为Nigix需要80端口,因此需要关掉使用80端口的服务);
(2)保证yum源正常使用;
(3)关闭SELinux(Linux中的增强安全组件,美国国家安全局为了提高Linux安全性能而开发的,我们暂时不用)和防火墙(使用setup命令):
vi /etc/selinux/config
SELINUX=disabled
安装包下载网站:http://lnmp.org/install.html
安装脚本包
(1)解压缩:tar -zxvf lnmp1.2-full.tar.gz
(2)进入解压缩目录:cd lnmp1.2-full
(3)执行安装脚本:./install.sh lnmp
或者可以一句命令完成全部步骤:
wget -c http:soft.vpser.net/lnmp1.2-full.tar.gz && tar zxf lnmp1.2-full.tar.gz && cd lnmp1.2-full && ./install.sh.lnmp
注意:安装时出现类似卡在Starting php-fpm 处,其实安装过程已经完成,这是虚拟机中常出现的问题。只需将启动进程关掉,然后重新开启即可。
强制关闭进程:pkill -9 php-fpm (-9表示强制)
启动进程:/etc/rc.d/init.d/php-fpm start
That’s all!
详细内容请见慕课网“Linux软件安装详解”
http://www.imooc.com/learn/447