# Linux的软件安装管理
[TOC]
# 软件包管理简介
## 软件包分类
### 源码包
#### **源码包优点**
>[success] 1. 开源,如果有足够的能力,可以对源代码行修改
>2. 可以自由选择所需功能
>3. 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
>4. 卸载方便
#### **源码包缺点**
> 1. 安装过程步骤较多,较容易出错
>2. 编译过程时间较长,安装比二进制包安装时间上
>3. 编译安装一旦报错新手很难解决
* * * * *
### 二进制包(RPM软件包和系统默认包)
#### **二进制包优点**
>[success] 1. 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
> 2. 安装速度比源码安装快很多
#### **二进制包缺点**
> 1. 经过编译,不能在看到源码
> 2. 功能选择不如源码包灵活
> 3. 依赖性
# RPM命令管理
## RPM软件包来源
答:RPM软件包在系统光盘中
~~~
mkdir /mnt/cdrom # 创建光盘挂载点
mount /dev/cdrom /mnt/cdrom/ # 将光盘挂在到挂载点
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@luo.centos6.5 ~]
# df -Th # 查看挂载情况
Filesystem Type Size Used Avail Use% Mounted on
... ...
/dev/sr0 iso9660 4.2G 4.2G 0 100% /mnt/cdrom
[root@luo.centos6.5 ~]
# cd /mnt/cdrom/Packages/ # 进入到packages目录
[root@luo.centos6.5 /mnt/cdrom/Packages/]
# ls # 查看光盘下的rpm软件包
... ...
zlib-1.2.3-29.el6.i686.rpm
zlib-1.2.3-29.el6.x86_64.rpm
zlib-devel-1.2.3-29.el6.i686.rpm
zlib-devel-1.2.3-29.el6.x86_64.rpm
~~~
## RPM软件包命名规则
这里以`httpd-2.2.15-29.el6.centos.x86_64.rpm`为例:
`httpd` 软件包名称
`2.2.15` 软件版本
`29` 软件发布的次数
`el6.centos`适合的Linux平台
`x86_64` 适合的硬件平台
`rpm` rpm软件包扩展名
## RPM软件包依赖性(树形、环形、模块)
* 树形依赖:a->b->c
* 环形依赖:a->b->c->a
* 模块依赖:查询网站 www.rpmfind.net
## RPM软件包安装
### 软件包全名与软件包名
**软件包全名**:操作的软件包是没有安装的软件包时,使用软件包全名,而且要注意路径
**软件包名**:操作依据安装的软件包时,使用软件包名,是搜索`/var/lib/rpm`中的数据库
### RPM软件包的安装命令
* * * * *
`rpm -ivh 软件包全名`
**选项释意**
-i (install) 安装
-v (verbose) 显示详细信息
-h (hash) 显示进度
--nodeps 不检测依赖性安装选项 (不建议使用的选项)
例如:使用 `rpm -ivh httpd-2.2.15-29.el6.centos.x86_64.rpm` 安装http软件包。
### RPM软件包的卸载命令
* * * * *
`rpm -e 软件包名`
**选项释意**
-e (erase) 卸载
--nodeps 不检查依赖性卸载选项
例如:使用 `rpm -e httpd-2.2.15-29.el6.centos.x86_64.rpm` 卸载http软件包。
### RPM软件包的升级命令
* * * * *
`rpm -Uvh 软件包全名`
**选项释意**
-U (upgrade) 升级
例如:使用 `rpm -Uvh httpd-2.2.15-29.el6.centos.x86_64.rpm` 升级http软件包。
## RPM相关查询命令
### 查询软件是否安装
`rpm -q 软件包名` 查询软件是否安装
**选项释意**
-q (query) 查询
例如:使用 `rpm -q gcc` 查询gcc软件包是否安装。
* * * * *
`rpm -qa 软件包名` 查询所有已经安装过得RPM软件包
**选项释意**
-q (query) 查询
-a (all) 所有
例如:
~~~
[root@luo.centos6.5 /mnt/cdrom/Packages]
# rpm -qa |grep gcc # 配合管道,查询gcc相关的RPM软件包名
gcc-4.4.7-16.el6.x86_64
gcc-c++-4.4.7-16.el6.x86_64
gcc-gfortran-4.4.7-16.el6.x86_64
libgcc-4.4.7-16.el6.i686
libgcc-4.4.7-16.el6.x86_64
~~~
### 查询软件包详细信息
`rpm -qi 软件包名`
**选项释意**
-q (query) 查询
-i (information) 软件信息
-p (package) 未安装的软件包
例如:
~~~
[root@luo.centos6.5 /mnt/cdrom/Packages]
# rpm -qi gcc # 查询已安装的软件包详细信息
Name : gcc Relocations: (not relocatable)
Version : 4.4.7 Vendor: CentOS
Release : 16.el6 Build Date: 2015年07月23日 星期四 10时43分01秒
Install Date: 2015年10月30日 星期五 21时46分11秒 Build Host: c6b8.bsys.dev.centos.org
Group : Development/Languages Source RPM: gcc-4.4.7-16.el6.src.rpm
Size : 19496512 License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions
Signature : RSA/SHA1, 2015年07月25日 星期六 04时41分11秒, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://gcc.gnu.org
Summary : Various compilers (C, C++, Objective-C, Java, ...)
Description :
The gcc package contains the GNU Compiler Collection version 4.4.
You'll need this package in order to compile C code.
[root@luo.centos6.5 /mnt/cdrom/Packages]
# rpm -qip httpd-2.2.15-29.el6.centos.x86_64.rpm # 查询未安装包的详细信息
Name : httpd Relocations: (not relocatable)
Version : 2.2.15 Vendor: CentOS
Release : 29.el6.centos Build Date: 2013年08月14日 星期三 01时30分33秒
Install Date: (not installed) Build Host: c6b8.bsys.dev.centos.org
Group : System Environment/Daemons Source RPM: httpd-2.2.15-29.el6.centos.src.rpm
Size : 3076447 License: ASL 2.0
Signature : RSA/SHA1, 2013年08月14日 星期三 01时32分39秒, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://httpd.apache.org/
Summary : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
~~~
### 查询软件包文件安装位置
`rpm -ql 软件包名`
**选项释意**
-q (query) 查询
-l (list) 列表
-p (package) 未安装的软件包
例如:
~~~
[root@luo.centos6.5 /mnt/cdrom/Packages]
# rpm -ql gcc
/usr/bin/c89
/usr/bin/c99
/usr/bin/cc
/usr/bin/gcc
/usr/bin/gcov
/usr/bin/protoize
/usr/bin/unprotoize
/usr/bin/x86_64-redhat-linux-gcc
~~~
#### RPM软件包默认安装位置
| 安装目录 | 文件说明 |
| -- | -- |
| `/etc` | 配置文件安装目录 |
| `/usr/bin` | 可执行的命令安装目录 |
| `/usr/lib` | 程序所使用的函数库保存位置 |
| `/usr/share/doc` | 基本的软件使用手册保存位置 |
| `/usr/share/man` | 帮助文件保存位置 |
### 查询系统文件属于哪个RPM软件包
rpm -qf 系统文件名
**选项释意**
-q (query) 查询
-f (file) 查询系统文件属于那么RPM软件包
例如:
~~~
[root@luo.centos6.5 /mnt/cdrom/Packages]
# rpm -qf /usr/share/man/man1/gcc.1.gz # 查看gcc.1.gz文件属于哪个rpm软件包
gcc-4.4.7-16.el6.x86_64
~~~
### 查询软件包的依赖性
rpm -qR 软件包名
**选项释意**
-q (query) 查询
-R (requires) 查询软件包的依赖性
-p (package) 查询未安装包的信息
## RPM软件包校验
`rpm -V 已经安装的软件包名`
~~~
[root@luo.centos6.5 /etc/httpd]
# rpm -V httpd # 检测出我们修改了apache的配置文件大小
S.5....T. c /etc/httpd/conf/httpd.conf
~~~
**1. 验证内容中的8个信息的具体内容如下:**
> S 文件大小是否改变
M 文件的类型或文件的权限(rwx)是否被改变
5 文件MD5校验是否改变(可以看成文件内容是否改变)
D 设备的主从代码是否改变
L 文件路径是否改变
U 文件的属主(所有者)是否改变
G 文件的属组是否改变
T 文件的修改时间是否改变
**2. 文件类型:**
> c (config file) 配置文件
d (documentation) 普通文档
g (ghost file) 很少见,就是该文件不应该被这个RPM包包含
L (license file) 授权文件
r (read me) 描述文件
## RPM软件包中文件的提取
`rpm2cpio 软件包全名 |cpio -idv .文件绝对路径`
rpm2cpio 将RPM软件包转换成cpio格式的命令
cpio 是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
例如:系统重要文件丢失
~~~
rpm -qf /bin/ls # 查询ls命令属于哪个软件包
mv /bin/ls /tmp/. # 模拟系统ls命令删除
cat /mnt/cdrom/Packages/coreutils-8.4-31.el6.x86_64.rpm |cpio -idv ./bin/ls # 提起RPM包中ls命令到当前目录的/bin/ls下(注意因为光盘是写保护,执行该命令的时候不要在光盘目录下)
cp /root/bin/ls /bin/. # 把ls命令复制回/bin/目录下,修复文件丢失
~~~
* * * * *
# yum在线管理
优点:将所有软件包放在官方服务器上,当进行yum在线安装的时候,可以自动解决依赖性问题。
## yum源文件
`cat /etc/yum.repos.d/CetnOS-Base.repo`
|配置|说明|
|-|-|
|`[base]`| 容器名称,一定要放在[]中,可以自定义|
|`name`| 容器说明,可以自定义|
|`mirrorlist`| 镜像站点,可以注释掉|
|**`baseurl`**| 我们的yum源服务器的地址,默认是CentOS官方的yum源服务器,是可以使用的,如果觉得慢可以改变成自定义的yum源地址|
|**`enabled`**| 次容器是否生效,如果不写或者写成enable=1都是生效,写成enabled=0就是不生效|
|`gpgcheck`| 如果是1是指rpm的数字证书生效,如果是0则不生效|
|`gpgkey`| 数字证书的公钥文件保存位置,不用修改|
## 光盘搭建yum源
### 挂载光盘
1. `mkdir /mnt/cdrom` 建立挂载点
2. `mount /dev/cdrom /mnt/cdrom` 挂载光盘
3. `mv CentOS-Base.repo CentOS-Base.repo.luo.20151101` # 修改yum源文件后缀名,使其失效
4. `vim CentOS-Media.repo`编辑光盘yum源
~~~
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom/ # 地址为当前光盘挂载的地址
# file:///media/cdrom/ # 注释不存在的地址
# file:///media/cdrecorder/
gpgcheck=1
enabled=1 # 把enabled=0改为1,让这个yum源配置文件生效
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
~~~
**如图:**
![](https://box.kancloud.cn/2015-11-01_5635ce408072b.png)
5. 使用`yum list`命令查看修改结果
~~~
[root@luo.centos6.5 /etc/yum.repos.d]
# yum list
... ...
zlib-static.x86_64 1.2.3-29.el6 c6-media
zsh.x86_64 4.3.10-7.el6 c6-media
zsh-html.x86_64 4.3.10-7.el6 c6-media
~~~
## yum命令
### yum安装
`yum -y install 软件包名`
**选项释意**
-install 安装
-y (yes) 自动回答yes
**例如:**
`yum -y install gcc` 安装gcc编译器软件包
### yum查询
`yum list` 查询所有可用软件包列表
`yum search 关键字` 搜索服务器上所有和关键字相关的软件包
### yum升级
`yum -y update 软件包名`
**选项释意**
-update 升级
-y (yes) 自动回答yes
**例如:**
`yum -y update gcc` 升级gcc编译器软件包
### yum卸载(不推荐使用)
`yum -y remove 软件包名`
**选项释意**
-remove 卸载
-y (yes) 自动回答yes
>[danger] 服务器使用最小化安装,用什么软件安装什么,尽量不卸载。
### yum软件组管理命令
#### 列出所有可用的软件组列表
`yum grouplist`
#### 安装指定软件组
`yum groupinstall 软件组名`,组名可以由grouplist查询得到(注意:此命令指定的软件组名必须为英文名称)
如下demo:
##### 给系统安装中文环境支持
~~~
[root@luo.centos6.5 /etc/yum.repos.d]
# echo $LANG # 查看目前语言环境
zh_CN.UTF-8
[root@luo.centos6.5 /etc/yum.repos.d]
# LANG=en # 将当前会话shell设置为en语言
[root@luo.centos6.5 /etc/yum.repos.d]
# yum grouplist|grep -i chinese # 搜索中文语言包
Failed to set locale, defaulting to C
Chinese Support [zh]
[root@luo.centos6.5 /etc/yum.repos.d]
# yum groupinstall "Chinese Support" # 执行安装中文语言包支持
[root@luo.centos6.5 /etc/yum.repos.d]
# LANG=zh_CN.UTF-8 # 将当前会话shell设置为en语言
~~~
#### 卸载指定软件组
`yum groupremove 软件组名`
# 源码包管理
## 源码包和RPM包的区别
安装前的区别:概念上的区别
安装后的区别:安装位置不同
* RPM软件包安装的服务可以使用系统服务管理名录(service)
来管理,例如RPM包安装apache的启动方法是:
`/etc/rc.d/init.d/httpd start` Linux的标准启动命令
`service httpd start` 红帽系统使用的启动命令
* 源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中,所以只能使用绝对路径对服务的管理,如: `/usr/local/apache2/bin/apachectl start` 当然也可以将`/usr/local/apache2/bin/apachectl`脚本复制到`/etc/rc.d/init.d/.`下才能使用service命令管理apache
## 源码包的安装过程
### 安装准备
* 安装C语言编译器 gcc
* 下载源码包,这里以apache为例
### 注意事项
* 源代码保存位置 `/usr/local/src`
* 软件安装位置 `/usr/local/.`
* 如何确定安装过程报错
* 安装过程停止
* 出现error、warning或者no等提示
### 源码包安装过程
* 下载源码包
* 解压缩下载的源码包
* 进入解压缩目录(必须执行)
* ./configure 软件配置与检查
* 定义需要的功能选项
* 检测系统环境是否符合安装要求
* 把定义好的功能选项和检测系统环境的信息都写入Makefile文件用于后续的编辑
* make 编译
* make clean 清除之前的编译结果(在编译报错时使用)
* make install 编译安装
# 脚本安装包
## 准备工作
* 关闭RPM方式安装的httpd和MySQL软件包
* 保证yum源正常使用
* 关闭SELinux和iptables防火墙
## 一键安装脚本分析
所谓的一键安装包,实际上还是安装的源码软件包和RPM软件包,只是把安装过程写成了脚本,便于初学者安装。
优点:简单、快速、方便
缺点:1. 不能自定义安装软件的版本,2.不能定义所需要的软件功能 3. 源码包的优势丧失
## 下载
下载lnmp安装包,解压安装包并进入安装包目录:`wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz && tar zxvf lnmp1.2-full.tar.gz && cd lnmp1.2-full`
*详情参加:http://lnmp.org/download.html*
- Linux的安装
- Linux的软件安装管理
- Linux零碎的命令
- 了解ssh
- 系统调优及安全设置
- Linux系统中的硬链接和软连接
- Linux文件和目录的属性及权限
- 命令总结
- 文件目录管理命令
- cat
- cd
- cp
- ls
- mkdir
- mv
- rm
- touch
- vi
- 硬件检测内核shell命令
- echo
- alias
- dd
- diff
- date
- grep(重要)
- head
- rpm
- sed(重要)
- tree
- unalias
- yum
- seq
- su
- less
- more
- tail
- awk(重要)
- pwd
- history
- whoami
- find(重要)
- which
- vimdiff
- sudo
- wget
- ln
- chmod
- chown
- vim常用技巧
- scp
- 工作场景应用总结
- 自动删除n天前日志
- 删除一个目录下的所有文件但保留一个文件
- Linux软件安装
- php安装(apache版本)
- vsftpd安装
- git安装
- python安装
- LNMP安装
- LAMP安装I
- LAMP安装II
- svn安装
- svn在Linux下的命令操作
- svn钩子简介
- svn代码上传流程
- Crond介绍
- sersync应用指南
- 其他
- 小结一
- 系统调优重新整理tmp
- linux禁止root用户直接登录sshd并修改默认端口