ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 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*