目录
一、Linux文件包
1、Linux源码包
- 什么是 Linux 源码包
- Linux 源码包是 Linux 操作系统或相关软件的源代码集合。它包含了程序的原始代码,以文本文件的形式呈现。例如,Linux 内核源码包包含了构建内核所需的所有 C 语言等代码文件。
- 对于 Linux 操作系统来说,内核源码是其核心部分的代码。像 Linux 内核官网(https://www.kernel.org/)就提供了内核源码的下载,它允许开发者和高级用户深入了解系统的底层工作机制。
- 实际上,源码包就是一大堆源代码程序,是由程序员按照特定的格式和语法编写出来的。
- 源码包的优点
- 高度定制化:用户可以根据自己的具体需求修改代码。比如,在构建一个嵌入式 Linux 系统时,可以通过修改内核源码来减少不必要的功能模块,以适应嵌入式设备有限的资源。例如,去掉对一些不常用的文件系统的支持,从而减小内核的体积。
- 学习和研究:对于学习操作系统原理、软件工作机制等方面非常有帮助。开发人员可以通过阅读 Linux 源码,理解进程管理、内存管理等核心概念。例如,通过研究内核源码中的调度算法部分,了解 Linux 是如何在多个进程之间分配 CPU 时间的。
- 最新功能体验:能够及时获取软件的最新功能。在软件的官方版本发布之前,用户可以通过编译最新的源码来试用新特性。
- 源码包的缺点
- 编译过程复杂:需要安装一系列的编译工具,如在基于 Debian 或 Ubuntu 的系统中,可能需要安装build - essential包,它包含了gcc(GNU 编译器集合)等编译工具。并且,不同的软件源码可能需要不同的配置参数,这对于普通用户来说可能比较困难。
- 维护成本高:当软件的开发者发布更新时,用户如果是使用自己编译的源码包,需要重新下载新的源码并进行编译安装,不像二进制包那样可以通过简单的包管理工具(如apt或yum)进行更新。
- 源码包的安装步骤(以常见软件为例)
- 下载源码包:从官方网站或可靠的代码仓库获取源码包。例如,要安装nginx源码包,可以从 nginx 官网(https://nginx.org/)下载其最新的源码压缩包。
- 解压源码包:通常使用tar命令进行解压。如果是tar.gz格式的压缩包,如nginx - 1.25.0.tar.gz,可以使用命令tar -zxvf nginx - 1.25.0.tar.gz来解压,解压后会得到一个包含源码的目录。
- 配置编译选项:进入解压后的源码目录,运行./configure脚本(对于大多数基于 GNU 构建系统的软件)。这个脚本会检查系统环境、依赖关系,并生成用于编译的Makefile。例如,对于nginx,可以通过./configure --prefix=/usr/local/nginx来指定安装路径。
- 编译和安装:执行make命令进行编译,这个过程会根据Makefile将源码编译成可执行文件和库文件。编译完成后,使用make install命令将编译好的文件安装到指定的位置。不过要注意,在安装过程中可能需要管理员权限,如使用sudo命令。
使用 Linux 源码包需要一定的技术知识和经验,但对于特定的需求,如高度定制和深入学习,它是非常有价值的。
2、Linux二进制包
二进制包,也就是源码包经过成功编译之后产生的包。由于二进制包在发布之前就已经完成了编译的工作,因此用户安装软件的速度较快(同 Windows下安装软件速度相当),且安装过程报错几率大大减小
- 定义
- Linux 二进制包是已经预先编译好的软件包。它包含了可直接在目标 Linux 系统上运行的二进制文件(机器码)、库文件、配置文件和文档等内容。与源码包不同,用户不需要进行编译步骤就可以安装和使用这些软件。例如,在 Ubuntu 系统中,.deb文件就是一种常见的二进制包格式,而在 CentOS 系统中,.rpm文件是主要的二进制包格式。
- 优点
- 安装便捷:对于普通用户来说,二进制包的安装过程简单快捷。以 Debian 或 Ubuntu 系统为例,使用apt - get命令安装.deb包时,系统会自动处理软件包的依赖关系,如安装chromium - browser软件包,只需运行sudo apt - get install chromium - browser,系统就会自动下载并安装该软件及其所需的依赖库。
- 易于管理:可以方便地使用系统自带的包管理工具进行更新、卸载等操作。在 CentOS 系统中,使用yum命令,如yum update可以更新所有已安装的软件包,yum remove可以卸载指定的软件包。这使得系统的软件管理更加高效和系统化。
- 稳定性和兼容性:二进制包通常是由软件的官方维护者或者操作系统发行版的维护者经过测试后发布的。他们会确保这些软件包在特定的操作系统版本和硬件平台上能够稳定运行,并且与系统中的其他软件和库文件相互兼容。例如,Red Hat Enterprise Linux(RHEL)发布的.rpm二进制包经过了严格的测试,以保证其在企业级环境中的稳定性和兼容性。
- 缺点
- 缺乏定制性:与源码包相比,二进制包的可定制程度较低。用户基本只能使用软件包提供的默认配置和功能。例如,使用二进制包安装的 Web 服务器软件可能无法轻易地对其核心功能模块进行修改,如调整服务器的内部调度算法等。
- 依赖关系复杂:虽然包管理工具会自动处理大部分依赖关系,但有时也会出现依赖冲突的情况。当软件包更新或者安装新软件时,可能会因为依赖库的版本不兼容等问题导致安装失败或者软件无法正常运行。例如,在某些情况下,一个新的软件包可能需要某个库的较新版本,但系统中已经安装的其他软件依赖于该库的旧版本,这就会引发冲突。
- 二进制包的常见格式和安装工具
- RPM(Red Hat Package Manager)格式:主要用于 Red Hat 系列的操作系统,如 CentOS、RHEL 等。安装工具是yum(在较新的系统中也可以使用dnf)。yum可以从配置好的软件仓库中查找、下载和安装.rpm包。例如,要安装一个名为httpd(Apache HTTP Server)的.rpm包,用户可以先添加包含该软件包的仓库,然后使用yum install httpd进行安装。
- DEB(Debian Package)格式:用于 Debian、Ubuntu 等系统。安装工具是dpkg和apt。dpkg可以直接处理.deb文件,如dpkg -i package.deb可以安装一个指定的.deb包,但它不会自动处理依赖关系。而apt则在dpkg的基础上,通过维护软件仓库信息,自动处理依赖关系,例如sudo apt - get install package会自动下载并安装软件包及其依赖项。
3、源码包到二进制包的转换过程
- 预处理(Pre-Processing)
- 将所有的#define删除,并且展开所有的宏定义
- 处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif等
- 处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置
- 删除所有注释 "//"和"/* */"
- 添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号
- 保留所有的#pragma编译器指令,因为编译器需要使用它们
- 编译 (Compiling)
- 编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后,最后生成相应的汇编代码
- 汇编 (Assembling)
- 汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编相对于编译过程比较简单,根据汇编指令和机器指令的对照表一一翻译即可
- 链接 (Linking)
- 通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件
二、典型应用程序的目录结构
文件类型 | 保存目录 |
普通执行程序文件 | /usr/bin |
服务器执行程序文件和管理程序文件 | /usr/sbin |
应用程序配置文件 | /etc |
日志文件 | /var/log |
应用程序参考文档文件 | /usr/share/doc |
三、常见的软件包封装类型
文件类型 | 保存目录 |
RPM软件包 | 扩展名为“.rpm” |
DEB软件包 | 扩展名为“.deb” |
源代码软件包 | 一般为“.tar.gz”、“.tar.bz2”等格式的压缩包 ,含程序的原始代码 |
绿色免安装的软件包 | 软件包的扩展名不一,以TarBall格式的居多 在压缩包内提供已编译好的执行程序文件 解开压缩包后的文件即可直接使用 |
- RPM包 : RPM Package Manager的缩写,是红帽公司自主研发的一款工具,实用性强。RPM包是预先在linux机器上编译好并打包好的文件,安装起来非常快捷。但是也有一些缺点,比如安装的环境必须与编译时的环境一致或者相当,包与包之间存在相互依赖的情况
- DEB包:在Linux系统中类似于windows中的软件包(exe),几乎不需要什么复杂的编译即可通过鼠标点击安装使用。此外deb广泛应用于越狱后iOS软件及MeeGo(含Maemo软件)中。Debian包是将包的文件信息以及包内容,经过gzip和tar打包而成
- 源代码软件包 :是需要我们自己把源代码编译成二进制的可执行文件。如果你读得懂这些源代码,那么你就可以去修改这些源代码自定义功能,然后再去编译成你想要的。使用源码包的好处除了可以自定义修改源代码外还可以定制相关的功能,因为源码包在编译的时候是可以附加额外的选项的
- 绿色免安装的软件包 :顾名思义,就是不需要安装到终端的过程,直接下载软件包到终端能直接使用,比如Windows的截图软件
四、获取安装包的途径
- 使用包管理工具
- APT(Advanced Package Tool):适用于 Debian、Ubuntu 等系统。通过运行sudo apt update更新软件包数据库后,使用apt search 搜索软件包,再用sudo apt install 安装软件包.
- YUM(Yellowdog Updater, Modified):在 Red Hat、CentOS、Fedora 等系统中常用。先执行sudo yum check-update更新数据库,接着用yum search 查找,最后通过sudo yum install 完成安装.
- DNF(Dandified YUM):是新一代的包管理工具,在 Fedora 22、CentOS 8、RHEL 8 等系统中作为默认包管理器。使用方法与 YUM 类似,如sudo dnf check-update更新,dnf search 搜索,sudo dnf install 安装.
- Pacman:主要用于 Arch Linux 系统。使用sudo pacman -Sy更新数据库,pacman -Ss 搜索,sudo pacman -S 安装.
- 官方网站下载
- 许多软件会在其官方网站提供 Linux 版本的安装包。例如,谷歌浏览器可在其官网下载适用于 Linux 的.deb或.rpm格式安装包;VLC 媒体播放器官网也有对应 Linux 系统的安装文件可供下载。
- 第三方软件仓库
- 一些知名的第三方软件仓库提供了丰富的 Linux 软件安装包,如 EPEL(Extra Packages for Enterprise Linux),为 CentOS、RHEL 等系统提供了大量额外的软件包,用户可以通过配置相应的仓库文件来使用.
- 源码编译安装
- 从软件的官方代码仓库或开源代码托管平台获取源码包,如 GitHub、GitLab 等。下载后解压,进入解压目录,依次执行./configure配置、make编译、make install安装等命令来完成软件的安装。这种方式可获取软件的最新版本和自定义功能,但需要安装编译工具及处理依赖关系.
- 命令行下载工具
- wget:通过命令wget 可直接从网络下载安装包到本地,如wget http://example.com/package.tar.gz,还可使用-b后台下载、-O自定义文件名等参数.
- curl:功能强大的网络工具,能以多种协议下载文件,如curl -O http://example.com/package.deb可将安装包下载到本地.
五、Linux安装卸载软件的方式
方式 | 说明 |
编译安装 | 灵活性较高,但难度较大,可以安装较新的版本 |
rpm安装(redhat) | liunx包安装,可用相关命令查看软件信息,但安装卸载目标软件前,需安装卸载一系列的依赖软件,较麻烦易出错 |
yum安装 | yum是rpm的升级版,旨在解决软件之间的依赖关系 |
1、rpm安装
liunx包安装,可用相关命令查看软件信息,但安装卸载目标软件前,需安装卸载一系列的依赖软件,较麻烦易出错
- RPM(Red Hat Package Manager)简介
- RPM 是 Red Hat 公司开发的一种软件包管理系统,用于在 Red Hat 系列操作系统(如 Red Hat Enterprise Linux、CentOS 等)中安装、卸载、升级和查询软件包。它可以有效地管理软件的安装过程,包括检查软件包之间的依赖关系,确保软件能够正确安装和运行。
- RPM 软件包的结构
- 一个 RPM 软件包通常包含二进制文件、配置文件、文档以及安装和卸载脚本等。它是一个压缩文件,以.rpm为扩展名。在内部,它有特定的文件格式来存储这些内容。例如,二进制文件被放置在合适的目录结构中,以便在安装时能够正确地复制到系统的相应位置。
- RPM 软件包的优点
- 方便的软件管理:可以使用简单的命令来安装、更新和卸载软件。例如,要安装一个名为httpd(Apache HTTP Server)的软件包,在有足够权限的情况下,只需运行yum install httpd(在基于 yum 的系统中)或rpm -ivh httpd.rpm(直接使用 rpm 命令),系统就会自动处理安装过程。
- 依赖关系处理:RPM 软件包在安装过程中会检查依赖关系。如果安装的软件包需要其他软件包或库的支持,RPM 会尝试从已安装的软件或软件仓库中获取所需的依赖。例如,安装一个图形化应用程序时,如果它依赖于特定的图形库,RPM 会确保这些图形库也被正确安装。
- 软件包信息记录完整:每个 RPM 软件包都包含了详细的软件信息,如软件的名称、版本、描述、作者、版权信息、安装路径等。可以通过rpm -qi 命令来查询这些信息,这有助于用户了解软件的基本情况。
- RPM 软件包的缺点
- 依赖关系可能复杂导致问题:虽然 RPM 会处理依赖关系,但在某些情况下,可能会出现依赖冲突。例如,当软件包更新时,新版本可能需要一个库的新版本,但现有系统中的其他软件依赖于该库的旧版本,这可能导致安装或更新失败。
- 对软件源的依赖:RPM 软件包通常需要从特定的软件仓库(如 CentOS 的官方仓库)获取。如果软件仓库中没有所需的软件包或者软件仓库配置不正确,可能无法顺利安装软件。
- RPM 相关命令
- 安装:可以使用rpm -ivh 命令进行安装。其中i表示安装(install),v表示显示详细信息(verbose),h表示以哈希(#)符号显示安装进度。例如,rpm -ivh firefox.rpm可以安装 Firefox 浏览器的 RPM 软件包。
- 卸载:使用rpm -e 命令来卸载软件。例如,要卸载刚才安装的 Firefox 浏览器,可以使用rpm -e firefox。注意,在卸载软件时,可能需要考虑软件之间的依赖关系,有些软件可能因为依赖于要卸载的软件而无法正常运行。
- 查询:通过rpm -qa可以查询所有已安装的软件包。rpm -qi <软件名称> 可以查询一个软件包的详细信息,rpm -ql 可以查询一个软件包安装后的文件列表。这些命令有助于了解软件的安装情况和内容。
1.1 rpm安装包格式
- 由 Red Hat 公司提出,被众多 Linux 发行版所采用
- rpm命令建立统一的数据库文件、详细记录软件包安装、卸载等变化信息、自动分析软件包依赖关系
- 软件素材下载地址:rpm.org - Home
1.2 rpm查询操作
1.2.1 查询已安装的RPM软件信息
- 格式:
- rpm -q[子选项] [软件名]
- 用法:
- 结合不同的子选项完成不同查询
#RPM软件可以实现几乎所有的功能,新增、删除、更新等
rpm -q 软件名 #查询指定软件是否安装(“-q”选项时实际上调用了“/usr/bin/rpmquery”程序完成查询工作)
rpm -qa #显示当前系统中以 RPM 方式安装的所有软件列表
rpm -qa | grep 软件名 #查询当前系统安装了哪些与软件名称相关的包
rpm -qi 软件名 #查看指定软件包的名称、版本、许可协议、用途描述等详细信息
rpm -ql 软件名 #显示指定的软件包在当前系统中安装的所有目录、文件列表
rpm -qf 文件的绝对路径 #查看指定的文件或目录是由哪个软件包所安装的
rpm -qc 软件名 #列出已安装的指定软件的配置文件
rpm -qd 软件名 #列出已安装的指定软件的软件包文档所在位置
rpm -qR 软件名 #列出已安装的指定软件的依赖的软件包及文件
命令示例:
rpm -q bc
rpm -q httpd
rpm -qa |wc -l
rpm -qa httpd
rpm -qa openssh
rpm -qa |grep openssh
rpm -qi bash
rpm -ql bc |wc -l
rpm -qf /etc/passwd
rpm -qc openssh-clients
rpm -qc openssh-server
rpm -qd openssh-server
rpm -qR openssh |wc -l
输出结果:
[root@MineGi ~]# rpm -q bc
bc-1.06.95-13.el7.x86_64
[root@MineGi ~]# rpm -q httpd
未安装软件包 httpd
[root@MineGi ~]# rpm -qa |wc -l
363
[root@MineGi ~]# rpm -qa httpd
[root@MineGi ~]# rpm -qa openssh
openssh-7.4p1-21.el7.x86_64
[root@MineGi ~]# rpm -qa |grep openssh
openssh-clients-7.4p1-21.el7.x86_64
openssh-7.4p1-21.el7.x86_64
openssh-server-7.4p1-21.el7.x86_64
[root@MineGi ~]# rpm -qi bash
Name : bash
Version : 4.2.46
Release : 34.el7
Architecture: x86_64
Install Date: 2024年11月22日 星期五 09时53分01秒
Group : System Environment/Shells
Size : 3667724
License : GPLv3+
Signature : RSA/SHA256, 2020年04月04日 星期六 04时49分07秒, Key ID 24c6a8a7f4a80eb5
Source RPM : bash-4.2.46-34.el7.src.rpm
Build Date : 2020年04月01日 星期三 10时19分58秒
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.gnu.org/software/bash
Summary : The GNU Bourne Again shell
Description :
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.
[root@MineGi ~]# rpm -ql bc |wc -l
18
[root@MineGi ~]# rpm -qf /etc/passwd
setup-2.8.71-11.el7.noarch
[root@MineGi ~]# rpm -qc openssh-clients
/etc/ssh/ssh_config
[root@MineGi ~]# rpm -qc openssh-server
/etc/pam.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd
[root@MineGi ~]# rpm -qd openssh-server
/usr/share/man/man5/moduli.5.gz
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
[root@MineGi ~]# rpm -qR openssh |wc -l
32
[root@MineGi ~]#
1.2.2 查询未安装的RPM包文件
挂载本地镜像文件
mount 设备名 目录绝对路径 #挂载设备
unmount 设备名或目录绝对路径 #取消挂载
df #disk free,查看挂载情况
挂载规则:只要是外来的硬件设备,在Linux系统中使用都需要挂载
- 一个挂载点同一时间只能挂载一个设备
- 一个挂载点同一时间挂载了多个设备,只能看到最后一个挂载设备的数据,其它设备上的数据将被隐藏
- 一个设备可以同时挂载到多个挂载点
- 通常挂载点一般是已存在空的目录
情况说明:需要使用之前安装系统的ISO镜像文件,挂载光盘镜像文件(将CentOS操作系统ISO镜像文件放入虚拟机光驱,注意:设备状态的√必须打,确保状态是已连接)
mkdir -p /media/iso/ #创建挂载点,目录名称可自定义
umount /dev/sr0 #卸载之前可能挂在的设备
ls /media/iso/ #列出一下
mount /dev/sr0 /media/iso/ #挂载设备
ls /media/iso/ #列出一下
cd /media/iso/Packages/ #切换路径
ls |wc -l #统计一下当前目录下内容个数
命令示例:
mkdir -p /media/iso/
umount /dev/sr0
ls /media/iso/
mount /dev/sr0 /media/iso/
ls /media/iso/
cd /media/iso/Packages/
ls |wc -l
输出结果:
[root@MineGi ~]# mkdir -p /media/iso/
[root@MineGi ~]# umount /dev/sr0
umount: /dev/sr0:未挂载
[root@MineGi ~]# ls /media/iso/
[root@MineGi ~]# mount /dev/sr0 /media/iso/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@MineGi ~]# ls /media/iso/
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
[root@MineGi ~]# cd /media/iso/Packages/
[root@MineGi /media/iso/Packages]# ls |wc -l
4071
[root@MineGi /media/iso/Packages]#
查询未安装的RPM包文件
- 格式:
- rpm -qp[子选项] RPM包文件
- 用法:
- 结合不同的子选项,完成不同查询
rpm -qpi 完整软件包名称 #通过.rpm包文件查看该软件的详细信息
rpm -qpl 完整软件包名称 #查看.rpm安装包内所包含的目录、文件列表
rpm -qpc 完整软件包名称 #查看.rpm安装包内包含的配置文件列表
rpm -qpd 完整软件包名称 #查看.rpm安装包内包含的文档文件列表
命令示例:
ls ipvsadm-1.27-8.el7.x86_64.rpm
rpm -qpi ipvsadm-1.27-8.el7.x86_64.rpm
rpm -qpl ipvsadm-1.27-8.el7.x86_64.rpm
rpm -qpc ipvsadm-1.27-8.el7.x86_64.rpm
rpm -qpd ipvsadm-1.27-8.el7.x86_64.rpm
输出结果:
[root@MineGi /media/iso/Packages]# ls ipvsadm-1.27-8.el7.x86_64.rpm
ipvsadm-1.27-8.el7.x86_64.rpm
[root@MineGi /media/iso/Packages]# rpm -qpi ipvsadm-1.27-8.el7.x86_64.rpm
Name : ipvsadm
Version : 1.27
Release : 8.el7
Architecture: x86_64
Install Date: (not installed)
Group : Applications/System
Size : 76805
License : GPLv2+
Signature : RSA/SHA256, 2020年04月04日 星期六 04时53分41秒, Key ID 24c6a8a7f4a80eb5
Source RPM : ipvsadm-1.27-8.el7.src.rpm
Build Date : 2020年04月01日 星期三 10时53分56秒
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : https://kernel.org/pub/linux/utils/kernel/ipvsadm/
Summary : Utility to administer the Linux Virtual Server
Description :
ipvsadm is used to setup, maintain, and inspect the virtual server
table in the Linux kernel. The Linux Virtual Server can be used to
build scalable network services based on a cluster of two or more
nodes. The active node of the cluster redirects service requests to a
collection of server hosts that will actually perform the
services. Supported Features include:
- two transport layer (layer-4) protocols (TCP and UDP)
- three packet-forwarding methods (NAT, tunneling, and direct routing)
- eight load balancing algorithms (round robin, weighted round robin,
least-connection, weighted least-connection, locality-based
least-connection, locality-based least-connection with
replication, destination-hashing, and source-hashing)
[root@MineGi /media/iso/Packages]# rpm -qpl ipvsadm-1.27-8.el7.x86_64.rpm
/etc/sysconfig/ipvsadm-config
/usr/lib/systemd/system/ipvsadm.service
/usr/sbin/ipvsadm
/usr/sbin/ipvsadm-restore
/usr/sbin/ipvsadm-save
/usr/share/doc/ipvsadm-1.27
/usr/share/doc/ipvsadm-1.27/README
/usr/share/man/man8/ipvsadm-restore.8.gz
/usr/share/man/man8/ipvsadm-save.8.gz
/usr/share/man/man8/ipvsadm.8.gz
[root@MineGi /media/iso/Packages]# rpm -qpc ipvsadm-1.27-8.el7.x86_64.rpm
/etc/sysconfig/ipvsadm-config
[root@MineGi /media/iso/Packages]# rpm -qpd ipvsadm-1.27-8.el7.x86_64.rpm
/usr/share/doc/ipvsadm-1.27/README
/usr/share/man/man8/ipvsadm-restore.8.gz
/usr/share/man/man8/ipvsadm-save.8.gz
/usr/share/man/man8/ipvsadm.8.gz
[root@MineGi /media/iso/Packages]#
1.3 rpm安装及卸载操作
安装或升级RPM软件
- 格式:
- rpm [选项] RPM包文件...
- 选项:
- -i:安装一个新的RPM软件包
rpm -ivh 完整软件包名称 #安装rpm包
rpm -e 软件名 #卸载rpm包
安装路径 | 说明 |
/etc/ | 配置文件安装目录 |
/usr/bin/ | 可执行的命令安装目录 |
/usr/lib/ | 程序所使用的函数库保存位置 |
/usr/share/doc/ | 基本的软件使用手册保存位置 |
/usr/share/man/ | 帮助文件保存位置 |
命令示例:
pwd
ls httpd*
rpm -ivh httpd-2.4.6-95.el7.centos.x86_64.rpm
ls ftp-0.17-67.el7.x86_64.rpm
rpm -q ftp
rpm -ivh ftp-0.17-67.el7.x86_64.rpm
rpm -q ftp
输出结果:
[root@MineGi /media/iso/Packages]# pwd
/media/iso/Packages
[root@MineGi /media/iso/Packages]# ls httpd*
httpd-2.4.6-95.el7.centos.x86_64.rpm httpd-manual-2.4.6-95.el7.centos.noarch.rpm
httpd-devel-2.4.6-95.el7.centos.x86_64.rpm httpd-tools-2.4.6-95.el7.centos.x86_64.rpm
[root@MineGi /media/iso/Packages]# rpm -ivh httpd-2.4.6-95.el7.centos.x86_64.rpm
错误:依赖检测失败:
/etc/mime.types 被 httpd-2.4.6-95.el7.centos.x86_64 需要
httpd-tools = 2.4.6-95.el7.centos 被 httpd-2.4.6-95.el7.centos.x86_64 需要
libapr-1.so.0()(64bit) 被 httpd-2.4.6-95.el7.centos.x86_64 需要
libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-95.el7.centos.x86_64 需要
[root@MineGi /media/iso/Packages]# ls ftp-0.17-67.el7.x86_64.rpm
ftp-0.17-67.el7.x86_64.rpm
[root@MineGi /media/iso/Packages]# rpm -q ftp
未安装软件包 ftp
[root@MineGi /media/iso/Packages]# rpm -ivh ftp-0.17-67.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:ftp-0.17-67.el7 ################################# [100%]
[root@MineGi /media/iso/Packages]# rpm -q ftp
ftp-0.17-67.el7.x86_64
[root@MineGi /media/iso/Packages]#
1.4 rpm升级的两种方式
rpm -Uvh 完整软件包名称 #无论旧版本软件是否安装,都安装新版本
rpm -Fvh 完整软件包名称 #若旧版本软件没有安装,则放弃安装新版本
1.5 卸载指定的rpm软件
rpm -e 软件名
命令示例:
rpm -qa ftp
rpm -e ftp
rpm -qa ftp
输出结果:
[root@MineGi /media/iso/Packages]# rpm -qa ftp
ftp-0.17-67.el7.x86_64
[root@MineGi /media/iso/Packages]# rpm -e ftp
[root@MineGi /media/iso/Packages]# rpm -qa ftp
[root@MineGi /media/iso/Packages]#
1.6 重建rpm数据库
命令示例:
# rpm --initdb
rpm --rebuilddb
输出结果:
[root@MineGi /media/iso/Packages]# rpm --rebuilddb
[root@MineGi /media/iso/Packages]#
1.7 导入验证公钥
命令示例:
ll /media/iso/RPM-GPG-KEY-CentOS-*
rpm --import /media/iso/RPM-GPG-KEY-CentOS-*
输出结果:
[root@MineGi /media/iso/Packages]# ll /media/iso/RPM-GPG-KEY-CentOS-*
-rw-rw-r-- 21 root root 1690 12月 10 2015 /media/iso/RPM-GPG-KEY-CentOS-7
-rw-rw-r-- 21 root root 1690 12月 10 2015 /media/iso/RPM-GPG-KEY-CentOS-Testing-7
[root@MineGi /media/iso/Packages]# rpm --import /media/iso/RPM-GPG-KEY-CentOS-*
[root@MineGi /media/iso/Packages]#
2、yum安装
yum是一个基于RPM包构建的软件更新机制,能够自动解决软件包之间的依赖关系。解决了日常工作中的大量查找安装依赖包的时间
- yum(Yellowdog Updater, Modified)简介
- yum 是一个在 Red Hat 系列操作系统(如 CentOS、RHEL)中广泛使用的软件包管理工具。它可以自动解决软件包之间的依赖关系,使得软件的安装、更新和卸载过程更加方便。yum 通过连接到软件仓库来获取软件包相关的信息,如软件包的版本、依赖关系、描述等。
- yum 的软件仓库配置
- 本地仓库:可以在本地搭建 yum 仓库。例如,将光盘挂载点作为本地仓库,通过编辑/etc/yum.repos.d/目录下的配置文件(如CentOS - Media.repo)来指定本地仓库的位置。一般需要设置baseurl指向本地挂载点的路径,并且设置enabled = 1来启用该仓库。
- 网络仓库:默认情况下,CentOS 等系统已经配置了指向官方网络仓库的配置文件。这些仓库包含了大量的软件包,可以通过互联网进行软件包的下载和安装。用户也可以添加其他第三方的网络仓库,如 EPEL(Extra Packages for Enterprise Linux)仓库。添加 EPEL 仓库通常需要下载并安装对应的rpm - gpg签名文件,以确保软件包的安全性,然后在/etc/yum.repos.d/目录下添加或修改相关的仓库配置文件,指定仓库的baseurl(网络地址)和其他参数。
- yum 的基本操作命令
- 软件包安装:使用yum install 命令来安装软件包。例如,要安装httpd(Apache HTTP Server)软件包,可以运行sudo yum install httpd。yum 会自动检查软件包的依赖关系,并从配置的仓库中下载和安装所需的软件包。
- 软件包更新:yum update命令可以更新系统中所有已安装的软件包。如果只想更新特定的软件包,可以使用yum update 。例如,sudo yum update firefox会更新 Firefox 浏览器软件包。
- 软件包卸载:使用yum remove 命令来卸载软件包。例如,sudo yum remove httpd会卸载已经安装的httpd软件包。需要注意的是,卸载软件包可能会影响到其他依赖该软件包的软件的正常运行。
- 软件包查询:
- yum list可以列出所有可用的软件包(从配置的仓库中)。
- yum list installed可以列出系统中已经安装的所有软件包。
- yum info 可以查询特定软件包的详细信息,包括版本、描述、依赖关系等。
- yum 的优势
- 自动处理依赖关系:这是 yum 的最大优势之一。在安装或更新软件包时,它会自动查找并安装所需的依赖软件包,避免了用户手动处理复杂的依赖关系。例如,在安装一个具有多个依赖库的图形化软件时,yum 会确保这些依赖库也被正确安装。
- 方便的软件更新机制:可以轻松地使用yum update命令保持系统软件的更新,并且会自动下载和安装最新版本的软件包,提高了系统的安全性和性能。
- 软件仓库管理灵活:用户可以方便地添加、删除或修改软件仓库的配置,从而获取不同来源的软件包。这使得用户能够根据自己的需求,如安装额外的软件或者获取特定版本的软件,来灵活地配置软件仓库。
- yum安装需要理清客户端和服务端的关系
- 客户端:配置文件指向服务端
- 服务端:软件包
2.1 yum仓库
区别 | 本地yum仓库 | 网络yum仓库 |
客户端与服务端 | 主机自己既是服务端也是客户端 | 客户端与服务端是分开的 |
网络情况 | 无网络情况救急使用 | 需要网络 |
配置文件 | 配置文件需要修改 | 配置文件不需要修改 |
安装速度 | 较快 | 较慢 |
操作情况 | 需要手动配置 | 系统安装好自带,无需操作 |
软件情况 | 软件数量少且不具有时效性 | 软件数量多且具有时效性 |
2.2 本地yum仓库
2.2.1 处理本地yum源
命令示例:
# mkdir -p /media/iso/
# mount /dev/sr0 /media/iso/
# df -hT |grep sr0
df -hT |grep sr0
ls /etc/yum.repos.d/
mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/{*,backup}
ls /etc/yum.repos.d/
cat >/etc/yum.repos.d/local.repo <<'EOF'
[local]
name=local
enabled=1
gpgcheck=0
baseurl=file:///media/iso
EOF
yum clean all
yum makecache
输出结果:
[root@MineGi /media/iso/Packages]# df -hT |grep sr0
/dev/sr0 iso9660 4.4G 4.4G 0 100% /media/iso
[root@MineGi /media/iso/Packages]# ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo epel.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo CentOS-x86_64-kernel.repo
[root@MineGi /media/iso/Packages]# mkdir -p /etc/yum.repos.d/backup
[root@MineGi /media/iso/Packages]# mv /etc/yum.repos.d/{*,backup}
mv: 无法将目录"/etc/yum.repos.d/backup" 移动至自身的子目录"/etc/yum.repos.d/backup/backup" 下
[root@MineGi /media/iso/Packages]# ls /etc/yum.repos.d/
backup
[root@MineGi /media/iso/Packages]# cat >/etc/yum.repos.d/local.repo <<'EOF'
> [local]
> name=local
> enabled=1
> gpgcheck=0
> baseurl=file:///media/iso
> EOF
[root@MineGi /media/iso/Packages]# yum clean all &>/dev/null && yum makecache &>/dev/null
[root@MineGi /media/iso/Packages]# echo $?
0
[root@MineGi /media/iso/Packages]#
2.2.2 进行安装测试
命令示例:
pwd
ls httpd*
rpm -qa httpd
rpm -ivh httpd-2.4.6-95.el7.centos.x86_64.rpm
rpm -qa httpd
yum install -y httpd
rpm -qa httpd
输出结果:
[root@MineGi /media/iso/Packages]# pwd
/media/iso/Packages
[root@MineGi /media/iso/Packages]# ls httpd*
httpd-2.4.6-95.el7.centos.x86_64.rpm httpd-manual-2.4.6-95.el7.centos.noarch.rpm
httpd-devel-2.4.6-95.el7.centos.x86_64.rpm httpd-tools-2.4.6-95.el7.centos.x86_64.rpm
[root@MineGi /media/iso/Packages]# rpm -qa httpd
[root@MineGi /media/iso/Packages]# rpm -ivh httpd-2.4.6-95.el7.centos.x86_64.rpm
错误:依赖检测失败:
/etc/mime.types 被 httpd-2.4.6-95.el7.centos.x86_64 需要
httpd-tools = 2.4.6-95.el7.centos 被 httpd-2.4.6-95.el7.centos.x86_64 需要
libapr-1.so.0()(64bit) 被 httpd-2.4.6-95.el7.centos.x86_64 需要
libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-95.el7.centos.x86_64 需要
[root@MineGi /media/iso/Packages]# rpm -qa httpd
[root@MineGi /media/iso/Packages]# yum install -y -q httpd
[root@MineGi /media/iso/Packages]# rpm -qa httpd
httpd-2.4.6-95.el7.centos.x86_64
[root@MineGi /media/iso/Packages]#
2.3 网络yum仓库
2.3.1 简单原理
- 客户端根据配置文件找到服务端
- 客户端将元信息下载到本地(元信息: 安装包的位置,以及安装的依赖关系)
- 根据元信息去下载对应的安装包到本地后,然后安装
- 安装完成后再删除安装包(删除需要一定的时间)
2.3.2 网络yum安装程序
通式:yum install 软件名 -y(同意)
情况说明:CentOS7配置阿里云的yum源,前提需要虚拟机能够上网
命令示例:
cd;ping -c1 www.baidu.com
yum list |wc -l
mv /etc/yum.repos.d/{*,backup}
curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
ls /etc/yum.repos.d/
# yum clean all
# yum makecache
yum clean all &>/dev/null && yum makecache &>/dev/null
echo $?
yum list |wc -l
输出结果:
[root@MineGi /media/iso/Packages]# cd;ping -c1 www.baidu.com
PING www.wshifen.com (103.235.46.96) 56(84) bytes of data.
64 bytes from 103.235.46.96 (103.235.46.96): icmp_seq=1 ttl=128 time=196 ms
--- www.wshifen.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 196.087/196.087/196.087/0.000 ms
[root@MineGi ~]# yum list |wc -l
4138
[root@MineGi ~]# mv /etc/yum.repos.d/{*,backup}
mv: 无法将目录"/etc/yum.repos.d/backup" 移动至自身的子目录"/etc/yum.repos.d/backup/backup" 下
[root@MineGi ~]# curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@MineGi ~]# curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@MineGi ~]# ls /etc/yum.repos.d/
backup CentOS-Base.repo epel.repo
[root@MineGi ~]# yum clean all &>/dev/null && yum makecache &>/dev/null
[root@MineGi ~]# echo $?
0
[root@MineGi ~]# yum list |wc -l
24720
[root@MineGi ~]#
3、编译安装
3.1 编译安装简单步骤
- 下载源码包
- 首先要从官方网站或可靠的代码仓库获取软件的源码包。例如,如果要编译安装 Nginx,可从 Nginx 官方网站(nginx)下载其源码压缩包(通常是.tar.gz 格式)。可以使用wget或curl命令进行下载,如wget https://nginx.org/download/nginx - 1.25.0.tar.gz。
- 解压源码包
- 下载完成后,使用合适的解压工具进行解压。对于.tar.gz格式的压缩包,通常使用tar -zxvf命令。以刚才下载的 Nginx 源码包为例,执行tar -zxvf nginx - 1.25.0.tar.gz,解压后会得到一个包含源码的目录,如nginx - 1.25.0。
- 配置编译选项
- 进入解压后的源码目录,运行./configure脚本(这适用于大多数基于 GNU 构建系统的软件)。这个脚本会检查系统环境、依赖关系,并生成用于编译的Makefile。例如,对于 Nginx,可能会有一些配置选项,如--prefix=/usr/local/nginx(指定安装路径)、--with - http_ssl_module(启用 SSL 模块)等。具体的配置选项根据软件的功能和用户需求而定,一般可以通过./configure --help查看所有可用的配置选项。
- 编译软件
- 配置完成后,执行make命令进行编译。这个过程会根据Makefile将源码编译成可执行文件和库文件。编译时间因软件的复杂程度和系统性能而异,可能需要几分钟到数小时不等。在编译过程中,系统会调用编译器(如gcc)和其他相关工具来处理源码。
- 安装软件
- 编译完成后,使用make install命令将编译好的文件安装到指定的位置。注意,在安装过程中可能需要管理员权限,如使用sudo命令。例如,对于 Nginx,执行sudo make install后,软件就会按照之前配置的--prefix选项指定的路径(如/usr/local/nginx)进行安装。安装完成后,该路径下会包含 Nginx 的可执行文件、配置文件、日志文件等相关文件。
- 配置软件(可选)
- 根据软件的性质,可能需要进行一些配置才能正常使用。以 Nginx 为例,安装完成后,需要编辑/usr/local/nginx/conf/nginx.conf文件来配置服务器的监听端口、虚拟主机等内容。配置完成后,可以通过启动命令(如/usr/local/nginx/sbin/nginx)来启动软件,并通过浏览器或其他客户端工具进行测试。
3.2 简单演示编译安装nginx
情况说明:灵活性较高,但难度较大,可以安装较新的版本,获得最新的软件版本,及时修复bug,根据用户需要,灵活制定软件功能
命令示例:
yum install -y gcc gcc-c++ pcre-devel openssl-devel zlib-devel openssl openssl-devel
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar xf nginx-1.18.0.tar.gz
cd ./nginx-1.18.0/
# ./configure --prefix=/apps/nginx
# make && make install
ls /usr/local/nginx
./configure --prefix=/usr/local/nginx &>/dev/null && make -j2 &>/dev/null && make install &>/dev/null
echo $?
ls /usr/local/nginx
/usr/local/nginx/sbin/nginx
hostname -I
输出结果:
[root@MineGi ~]# yum install -y -q gcc gcc-c++ pcre-devel openssl-devel zlib-devel openssl openssl-devel
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
[root@MineGi ~]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
--2024-12-10 17:45:34-- http://nginx.org/download/nginx-1.18.0.tar.gz
正在解析主机 nginx.org (nginx.org)... 3.125.197.172, 52.58.199.22, 2a05:d014:5c0:2601::6, ...
正在连接 nginx.org (nginx.org)|3.125.197.172|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1039530 (1015K) [application/octet-stream]
正在保存至: “nginx-1.18.0.tar.gz”
100%[==========================================================>] 1,039,530 682KB/s 用时 1.5s
2024-12-10 17:45:36 (682 KB/s) - 已保存 “nginx-1.18.0.tar.gz” [1039530/1039530])
[root@MineGi ~]# tar xf nginx-1.18.0.tar.gz
[root@MineGi ~]# cd ./nginx-1.18.0/
[root@MineGi ~/nginx-1.18.0]# ls /usr/local/nginx
ls: 无法访问/usr/local/nginx: 没有那个文件或目录
[root@MineGi ~/nginx-1.18.0]# ./configure --prefix=/usr/local/nginx &>/dev/null && make -j2 &>/dev/null && make install &>/dev/null
[root@MineGi ~/nginx-1.18.0]# echo $?
0
[root@MineGi ~/nginx-1.18.0]# ls /usr/local/nginx
conf html logs sbin
[root@MineGi ~/nginx-1.18.0]# /usr/local/nginx/sbin/nginx
[root@MineGi ~/nginx-1.18.0]# hostname -I
10.4.7.13
[root@MineGi ~/nginx-1.18.0]#