系列文章目录
目录
三、软件包安装
1、rpm安装
1.1概述
1)rpm包命名规则
httpd-2.2.15-15.el6.centos.1.i686.rpm
httpd
|
软件包名
|
2.2.15
|
软件版本
|
15
|
软件发布的次数
|
el6
|
软件发行商。el6 是 RedHat 公司发布,适合 RHEL6.x(Red Hat 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 包,当然也就无法正确安装了。也就是说如果 RPM 包不用“.rpm”作为扩展名,系统可以正确识别没有问题,可是管理员很难识别这是个 什么样的软件。
|
包全名:如果操作的是未安装软件包,则使用包全名,而且需要注意绝对路径
包名:如果操作的是已经安装的软件包,则使用包名即可,系统会生产
RPM 包的数据库(
/var/lib/rpm/
),而且可以在任意路径下操作
2)默认安装位置
/etc/
|
配置文件安装目录
|
/usr/bin/
|
可执行的命令安装目录
|
/usr/lib/
|
程序所使用的函数库保存位置
|
/usr/share/doc/
|
基本的软件使用手册保存位置
|
/usr/share/man/
|
帮助文件保存位置
|
1.2rpm包安装
1)安装命令
rpm –ivh 包全名Z
#注意一定是包全名。如果跟包全名的命令要注意路径,因为软件包在光盘当中
选项:
-i install 安装(install)
-v 显示更详细的信息(verbose)
-h 打印#显示安装进度(hash)
--nodeps 不检测依赖性安装。软件时会检测依赖性,确定所需的底层软件是否安装。 如果没有安装则会报错。如果我不管依赖性,想强行安装,可以使用这个选项。注意: 这样不检测依赖性安装的软件基本是不能使用的,所以不建议这样做
--replacefiles 替换文件安装。如果安装软件包,可是包中部分文件已经存在,那么 正常安装时候,会报错“某个文件已经存在”从而导致软件无法安装,使用这个选项可 以忽视这个报错,而覆盖安装
--replacepkgs 替换软件包安装。如果软件包已经安装,此选项可以把软件包重复安装一遍。
--force 强制安装。不管是否已经安装,都重新安装。就是—replacefiles和—replacepkgs 的综合。
--test 测试安装。不会实际安装,只是检测一下依赖性。
--prefix 指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。注意: 如果指定了安装路径,软件没有安装到系统默认路径中的话,系统会找不到这些安装的 软件,需要进行手工配置才能被系统识别。所以 rpm 包我们一般都采用默认路径安装。
2)服务启动
[root@localhost ~]# service 服务名 start|stop|restart|status
参数:
start: 启动服务
stop: 停止服务
restart: 重启服务
status: 查看服务状态
[root@localhost ~]# systemctl restart httpd
#这个命令也行
1.3rpm包升级
[root@localhost ~]# rpm –Uvh 包全名
选项:
-U(大写) 升级安装,如果没有安装过,系统直接安装。如果安装过的版本较旧,
则升级到新版本(upgrade)
[root@localhost ~]# rpm –Fvh 包全名
选项:
-F(大写) 升级安装,如果没有安装过,则不会安装。必须安装有较旧版本,才能升级(freshen)
1.4卸载
[root@localhost ~]# rpm -e 包名
选项:
--nodeps 不检查依赖性
-e 卸载
1.5查询
1)查询软件包是否安装
[root@localhost ~]# rpm –q 包名
选项:
-q: 查询(query)
2)查询系统中的所有安装软件包
[root@localhost ~]# rpm -qa
选项:
-a:所有(all)
#可以用管道符来查看所需的内容,比如:
[root@localhost ~]# rpm -qa | grep httpd
3)查询软件包的详细信息
[root@localhost ~]# rpm –qi 包名
选项:
-i: 查询软件信息(information)
#也可以查询还没有安装的软件包的详细信息,命令格式如下:
[root@localhost ~]# rpm –qip 包全名
选项:
-p: 查询没有安装的软件包(package)
4)查询软件包中的文件列表
[root@localhost ~]# rpm –ql 包名
选项:
-l: 列出软件包中所有的文件列表和软件所安装的目录(list)
#查询还没有安装的软件包中的文件列表和打算安装的位置
[root@localhost ~]# rpm –qlp 包全名
选项:
-p: 查询没有安装的软件包信息(package)
5)查询系统文件属于哪个 RPM 包
[root@localhost ~]# rpm –qf 系统文件名
选项:
-f: 查询系统文件属于哪个软件包(file)
6)查询软件包所依赖的软件包
[root@localhost ~]# rpm –qR 包名
选项:
-R: 查询软件包的依赖性(requires)
#查询没有安装的软件包的依赖性
[root@localhost ~]# rpm -qRp /mnt/cdrom/Packages/bind-9.8.2-0.10.rc1.el6.i686.rpm
1.6验证
[root@localhost ~]# rpm –Va
选项:
-Va 校验本机已经安装的所有软件包
[root@localhost ~]# rpm –V 已安装的包名
选项:
-V 校验指定 RPM 包中的文件(verify)
[root@localhost ~]# rpm –Vf 系统文件名
选项:
-Vf 校验某个系统文件是否被修改
验证举例
[root@localhost ~]# rpm -V httpd
S.5....T. c /etc/httpd/conf/httpd.conf
验证内容 文件类型 文件名
出现了提示信息,我们来解释下最前面共有 8 个信息内容,是表示验证内容的。文件名前面的 c 是表示这是个配置文件(configuration)。最后是文件名。那么验证内容中的 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)
1.7数字证书
[root@localhost ~]# ll /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
-rw-r--r--. 1 root root 1706 6 月 26 17:29 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#系统中的数字证书位置
#数字证书导入
[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
选项:
--import 导入数字证书
#查询系统中安装好的数字证书呢
[root@localhost ~]# rpm -qa | grep gpg-pubkey
gpg-pubkey-c105b9de-4e0fd3a3
1.8rpm包中文件提取
举个例子,现在我假设把系统中的/bin/ls 命令不小心误删除了,那么我可以修复回来吗?这时有两 种方法修复,要不就是使用—force 选项覆盖安装一遍 coreutils-8.4-19.el6.i686 包,要不就可以 使用 cpio 命令提取出/bin/ls 命令文件,再把它拷贝到对应位置就可以了。不过我是怎么知道/bin/ls 命令是属于 coreutils-8.4-19.el6.i686 这个软件包的呢?还记得-qf 选项吗?命令:
[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.4-19.el6.i686
#查看 ls 文件属于哪个软件包
[root@localhost ~]# mv /bin/ls /root/
#把/bin/ls 命令移动到/root 目录下,造成误删除的假象
[root@localhost ~]# ls
-bash: ls: command not found
#这时执行 ls 命令,系统会报错“命令没有找到”
[root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio
-idv ./bin/ls
./bin/ls
24772 块 #提取 ls 命令文件到当前目录下
[root@localhost ~]# cp /root/bin/ls /bin/
#把提取出来的 ls 命令文件复制到/bin 目录下
[root@localhost ~]# ls
anaconda-ks.cfg bin inittab install.log install.log.syslog ls
#恭喜你,ls 命令又可以正常使用了
2、yum安装
2.1)源文件解析
yum 源配置文件保存在/etc/yum.repos.d/目录中,文件的扩展名一定是“*.repo”。也就是说,
yum 源配置文件只要扩展名是“*.repo”就会生效。
[root@localhost ~]# ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Vault.repo
这个目录中有 5 个 yum 源配置文件,默认情况下 CentOS-Base.repo 文件生效。我们打开这个文件看看,命令如下:
[root@localhost yum.repos.d]# vim /etc/yum.repos.d/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
…省略部分输出…
在 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.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 CentOS-Base.repo.bak
[root@localhost yum.repos.d]# mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
[root@localhost yum.repos.d]# mv CentOS-Vault.repo CentOS-Vault.repo.bak
第三步:修改光盘 yum 源配置文件 CentOS-Media.repo,参照以下方法修改:
[root@localhost yum.repos.d]# vim CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom
#地址为你自己的光盘挂载地址
# file:///media/cdrom/
# file:///media/cdrecorder/
#注释这两个不存在的地址
gpgcheck=1
enabled=1
#把 enabled=0 改为 enabled=1,让这个 yum 源配置文件生效
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
配置完成,现在可以感受一下yum的便捷了。
2.3)yum命令
1.查询
- 查询 yum 源服务器上所有可安装的软件包列表。
[root@localhost yum.repos.d]# yum list
#查询所有可用软件包列表
Installed Packages
#已经安装的软件包
ConsoleKit.i686 0.4.1-3.el6 @anaconda-CentOS-201207051201.i386/6.3
ConsoleKit-libs.i686 0.4.1-3.el6 @anaconda-CentOS-201207051201.i386/6.3
...省略部分输出...
Available Packages
#还可以安装的软件包
389-ds-base.i686 1.2.10.2-15.el6 c6-media
389-ds-base-devel.i686 1.2.10.2-15.el6 c6-media
#软件名 版本 所在位置(光盘)
...省略部分输出...
-
查询 yum 源服务器中是否包含某个软件包。
[root@localhost yum.repos.d]# yum list 包名
-
搜索 yum 源服务器上所有和关键字相关的软件包。
[root@localhost yum.repos.d]# yum search 关键字
-
查询指定软件包的信息。
[root@localhost yum.repos.d]# yum info samba #查询 samba 软件包的信息 Available Packages 还没有安装 Name : samba 包名 Arch : i686 适合的硬件平台 Version : 3.5.10 版本 Release : 125.el6 发布版本 Size : 4.9 M 大小 Repo : c6-media 在光盘上 …省略部分输出
2)安装
[root@localhost yum.repos.d]# yum -y install 包名
选项:
install 安装
-y 自动回答 yes。如果不加-y,那么每个安装的软件都需要手工回答 yes
例如:
[root@localhost yum.repos.d]# yum -y install gcc
#使用 yum 自动安装 gcc
3)升级
[root@localhost yum.repos.d]# yum -y update 包名
#升级指定的软件包
选项:
update: 升级
-y: 自动回答 yes
注意:在进行升级操作时,yum 源服务器中软件包的版本要比本机安装的软件包的版本高。
[root@localhost yum.repos.d]# yum -y update
#升级本机所有软件包
4)卸载
再次强调一下,除非你确定卸载的软件的依赖包不会对系统产生影响,否则不要执行 yum 的卸载, 因为很有可能在卸载软件包的同时卸载的依赖包也是重要的系统文件,这就有可能导致系统崩溃。卸载命令如下:
[root@localhost yum.repos.d]# yum remove 包名
#卸载指定的软件包
例如:
[root@localhost yum.repos.d]# yum remove samba
#卸载 samba 软件包
3、源码包安装
我们来解释一下源码包安装的具体步骤。
(
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 编译安装
这才是真正的安装过程,一般会写清楚程序的安装位置。如果忘记指定安装目录,则可以把这个 命令的执行过程保存下来,以备将来删除使用。