首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >《深入探究 Linux 软件安装:从编译到 RPM、Yum,附 Yum 仓库镜像站详解》

《深入探究 Linux 软件安装:从编译到 RPM、Yum,附 Yum 仓库镜像站详解》

作者头像
XPcode7
发布2025-10-23 14:54:00
发布2025-10-23 14:54:00
1480
举报

《深入探究 Linux 软件安装:从编译到 RPM、Yum,附 Yum 仓库镜像站详解》

2.15 Linux软件安装

代码语言:javascript
复制
## 学习这个课程之前,我们先将虚拟机恢复一下快照。
## 不管是什么系统,安装软件都有多种方式。比如前面讲解windows的时候,我们也说到了几种安装方式,linux也不列外,也有多种软件安装方式。而linux安装软件其实是比windows要复杂一些的,原因如下
image-20230708172103844
image-20230708172103844
代码语言:javascript
复制
## Linux软件安装复杂主要就复杂在软件的依赖文件上了,也叫做依赖包,要想安装某个软件,先要去安装它的依赖包。
2.15.1 编译安装
2.15.1 编译安装
代码语言:javascript
复制
## 我们有时候安装软件,下载下来的是软件源代码,不能直接运行,需要编译之后才能运行,源代码-->编译-->二进制机器码,才能运行。比如windows的某些软件是从源代码编译打包之后才生成exe程序,平常我们接触不到,大家安装的软件都是基本别人编译好的。而linux下编译之后会生成二进制的可执行文件,不是exe程序昂,和windows不同,这种文件没有后缀名。其实linux系统下就没有文件后缀名这个概念,好多后缀名都是我们人工自己加上去的,为了让自己知道文件是干嘛的,主要是给我们自己看的,区分作用。


## 我们用一个网站服务软件来玩一玩试试:
1.下载源码包
    cd /opt/
    rm -fr *
    curl -o nginx.tar.gz http://nginx.org/download/nginx-1.20.1.tar.gz
        
2.编译安装
	tar xf nginx.tar.gz 
	cd nginx-1.20.1/
   	[root@localhost nginx-1.20.1]# ls
   	auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src

# 1.配置编译参数
    # 这个软件给我们提供了很多功能,我们在编译的过程中可以自己选择哪些功能要,哪些功能不要,所有功能都要就是完整版,好多功能都		不要就成了精简版,比如qq精简版,不知道大家听没听过。
    ./configure --prefix=/usr/local/nginx --without-pcre --without-http_rewrite_module --without-http_gzip_module
    
     #我这里禁掉了一些功能,以为这些功能都需要好多依赖包,大家还不知道依赖包是怎么回事儿,所以我就暂时先删除了。--without就是去掉的意思。--prefix=/usr/local/nginx是指定软件的安装目录,目录不存在的话会自动创建。./是用相对路径来执行这个configure文件,用绝对路径也可以执行这个文件。这个指令执行之后,会自动检查各种依赖环境是否满足软件运行的要求,检查通过之后会生成一个叫做Makefile的文件。
        
     [root@localhost nginx-1.20.1]# ls 
       auto     CHANGES.ru configure html     Makefile objs   src
       CHANGES conf       contrib   LICENSE man       README
    
     #多了两个文件Makefile和objs,刚才的指令主要是为了生成Makefile
        
# 2.编译
	make  
    #make会找当前目录中的Makefile文件来进行编译,这个编译过程一般是比较长的。到底多长时间呢?1、看CPU性能 2、软件功能复杂度
     [root@localhost nginx-1.20.1]# ls  
       auto     CHANGES.ru configure html     Makefile objs   src
       CHANGES conf       contrib   LICENSE man       README

     # 编译之后看上去目录结构和之前一样,但是objs目录里面其实多了好多东西。
     [root@localhost nginx-1.20.1]# ls objs/
       autoconf.err nginx   ngx_auto_config.h   ngx_modules.c src
       Makefile     nginx.8 ngx_auto_headers.h ngx_modules.o
        
     # 其中nginx文件就是我们的二进制可执行的命令文件。它是可执行的程序了,比如我们查看一下它的版本
     [root@localhost nginx-1.20.1]# ./objs/nginx -v
        nginx version: nginx/1.20.1
            
     # 到这里只是编译完了,还需要安装,其实安装就是将这个程序的某些文件放到对应的目录中去。其实我们在上面的编译参数中已经指定			好了--prefix=/usr/local/nginx,要安装到/usr/local/nginx目录中去。

# 3.安装
make install
    # 查看安装目录,这就是它这个软件安装的所有文件
        [root@localhost nginx-1.20.1]# ls /usr/local/nginx/
        conf html logs sbin
	# 这样看目录结构看着不太清晰,我们可以安装一下tree这个工具,来进行目录查看
	 	[root@localhost nginx-1.20.1]# yum install tree -y
 	# 安装完tree之后,我们来看一下目录,看着就清晰多了,树状结构显示。
     [root@localhost nginx-1.20.1]# tree /usr/local/nginx/
       /usr/local/nginx/
       ├── conf  # 该软件的配置文件所在目录
       │   ├── fastcgi.conf
       │   ├── fastcgi.conf.default
       │   ├── fastcgi_params
       │   ├── fastcgi_params.default
       │   ├── koi-utf
       │   ├── koi-win
       │   ├── mime.types
       │   ├── mime.types.default
       │   ├── nginx.conf
       │   ├── nginx.conf.default
       │   ├── scgi_params
       │   ├── scgi_params.default
       │   ├── uwsgi_params
       │   ├── uwsgi_params.default
       │   └── win-utf
       ├── html  # 网站源代码存放目录,这个nginx其实主要是用来部署网站的,网站的代码可以放到这个
    目录中
       │   ├── 50x.html
       │   └── index.html
       ├── logs  # 这个软件自带日志记录功能,记录的日志存放在这个目录中
       └── sbin
           └── nginx  # 这个是软件的关键性的启动程序,类似于我们windows安装的qq目录中的QQ.exe
        4 directories, 18 files

3.运行
    ## 指令:/usr/local/nginx/sbin/nginx,没有配置环境变量,所以要用完整路径来运行
    [root@localhost nginx-1.20.1]# /usr/local/nginx/sbin/nginx
    [root@localhost nginx-1.20.1]#   #看上去没什么效果,但是已经运行了
    
    # 可以通过浏览器访问这个nginx了,访问之前要关闭一下防火墙。
        # 关闭防火墙
        systemctl stop firewalld
        # 取消防火墙的开机自启
        systemctl disable firewalld
   	    # 使用浏览器访问http://<虚拟机的ip地址>
    		## http://192.168.61.132/ 就可以看到网站了。
        ## 关于nginx这个软件如何使用,我们后面课程中会详细的讲解,这里先简单感受一下编译安装过程即可。
        
    # 打包:就是将我们编译好的程序打包起来,给其他人用的时候,其他人就不用编译了,因为你已经编译好了,我们普通用户使用的软件就			是别人编译打包之后的软件。
    
    ## /usr/local/nginx 这个目录就是我们编译好之后的整个软件的所有运行文件目录,我们打包它即可
    
    # 打包压缩
        [root@localhost nginx-1.20.1]# cd /usr/local/
        [root@localhost local]# ls
        bin etc games include lib lib64 libexec nginx sbin share src
        [root@localhost local]# tar -zcf /tmp/nginx_jaden.tar.gz nginx 
        [root@localhost local]# ls
        bin etc games include lib lib64 libexec nginx sbin share src
        [root@localhost local]# ls /tmp/
        ks-script-ed2ODG
        nginx_jaden.tar.gz
        
        # 推送给另外一台主机
        [root@localhost tmp]# scp nginx_jaden.tar.gz root@192.168.61.135:/tmp
        
        # 另外一台主机的操作:解压到/usr/local目录下,然后运行
        root@localhost tmp]# ls
        nginx_jaden.tar.gz
        [root@localhost tmp]# mv nginx_jaden.tar.gz /usr/local/
        [root@localhost tmp]# cd /usr/local/
        [root@localhost local]# ls
        bin etc games include lib lib64 libexec nginx_jaden.tar.gz sbin share  src
        [root@localhost local]# tar -zxf nginx_jaden.tar.gz 
        [root@localhost local]# ls
        bin etc games include lib lib64 libexec nginx nginx_jaden.tar.gz sbin 
        share src
        [root@localhost local]# /usr/local/nginx/sbin/nginx
        [root@localhost local]# systemctl stop firewalld
2.15.2 rpm安装
代码语言:javascript
复制
# 刚才我们提到过,编译还是比较繁琐的,为了方便使用者,一般都会编译之后发给使用者,用起来不需要编译,就方便多了。只要有人编译一次,将编译后的程序贡献出来,大家就可以用了。所以这些做系统的厂商也发现这样挺好,所以这些厂商干脆将自己的软件也打包一下,redhat、debian等都做了自己软件的打包工作,将自己的软件打包好之后,供用户下载使用。下载软件需要用到对应系统的包管理工具。
# redhat系打出来的包叫做:rpm包。用yum安装的程序包其实都是rmp包,比如刚才安装的tree。rpm的包我们也可以不使用yum而手动安装。

# debian系打出来的包叫做:deb包。

#rpm全称:redhat package manager包管理器

# 手动安装rpm包示例:不需要编译安装、也不用yum安装。

# 安装wget
	yum install wget -y
# 使用wget下载rpm包
	wget https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm
    
# 如果没有wget,可以先用curl下载:
	curl -o wget.rpm  https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/Packages/wget-1.14-18.el7_6.1.x86_64.rpm
        
# 安装rpm包 #rpm -i是安装,vh是显示安装进度条的意思。
	rpm -ivh tree-1.6.0-10.el7.x86_64.rpm 
# 卸载
	rpm -e tree
# 升级
	rpm -Uvh xxx.rpm
# 查看已安装的软件
	rpm -qa|grep httpd

#以树状的显示指定目录下的目录和文件的名称
    tree
    例子1:
    tree /usr/local


## rpm安装软件个小问题:
## 比如:安装vim,会提示安装失败,需要各种依赖包,需要先去安装依赖包。
wget http://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/Packages/vim-enhanced-7.4.629-7.el7.x86_64.rpm
rpm -ivh vim-enhanced-7.4.629-7.el7.x86_64.rpm

## 所以,用rpm安装软件不好解决依赖包的问题,所以出来了下面的yum安装方式,自动下载安装需要的依赖包。以后都用yum来安装。
2.15.3 yum安装
代码语言:javascript
复制
#自动解决rpm依赖
#yum安装扩展yum仓库
	yum install epel-release -y
#yum安装nginx
	yum install nginx -y
#yum移除nginx
	yum remove nginx -y
#查看仓库rpm的数量
	yum repolist
    
    
## 编译安装:优点: 自由定制 痛点:难度高,步骤繁琐
## rpm安装:优点:安装简单   痛点:需要自己解决依赖,不支持定制
## yum安装:优点:自动解决依赖,默认安装最新版 痛点:不支持定制
2.15.4 yum仓库(镜像站)
代码语言:javascript
复制
## 如下,安装工具时会提示:自动会从下面的仓库中来下载软件包,centos的官方库在国外http://mirror.centos.org/,
image-20230708210524961
image-20230708210524961
代码语言:javascript
复制
## 这个仓库地址是在centos中配置的,在如下配置文件中

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo   CentOS-Vault.repo
CentOS-CR.repo   CentOS-fasttrack.repo CentOS-Sources.repo CentOS-x86_64-
kernel.repo
# 有几个repo文件,表示配置了几个仓库,其中大部分是禁用状态的,默认就一个启用的CentOSBase.repo。比如我们看一个文件CentOS-Vault.repo

CentOS-Vault.repo如下,看不到enabled=0的表示启用状态

image-20230708210620722
image-20230708210620722

CentOS-Base.repo如下:

代码语言:javascript
复制
## 但是国外的地址下载软件太慢了,所以centos官方说我允许你们和我同步,比如华为,你和我同步一下,做一个你国内的镜像库,这就是华为的yum仓库了或者说镜像站了,很多企业和学校都有自己的镜像站。那么我们yum安装的时候有看到,明明使用的是国内的镜像站呀,这是怎么做到的,其实配置文件中做了一个镜像地址列表,如下
image-20230708210654158
image-20230708210654158
代码语言:javascript
复制
## 我们拿出来这个地址改一改

http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra
# $releasever表示版本
# $basearch表示32还是64位
# repo=os表示我们要下载的是操作系统相关的东西
# infra这个参数没什么用,可删掉
# 那么我们改一改网址,如下
http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os
# 访问一下这个地址。

## 效果如下
image-20230708210741716
image-20230708210741716
代码语言:javascript
复制
## 这就是为什么,我们用yum安装软件的时候,仓库地址都是国内的镜像站地址的原因了,它会自动选择离我们最近、网速最佳的几个地址来下载。
总结

希望这篇文章能够为你在探索 Linux系统的道路上提供有力的帮助,让你在操作 Linux 系统时更加得心应手。 我是旺仔Sec,是一名热衷于系统技术的博主,对 Linux系统有着深入的研究和丰富的实践经验。我致力于分享各种系统相关的知识和技巧,帮助大家解决在使用过程中遇到的各种问题。如果你觉得这篇文章对你有所帮助,欢迎点赞、收藏和分享哦 同时,也希望你能关注我的博客,我会持续为大家带来更多优质的系统技术文章,包括但不限于 Linux> 系统的深入探索、系统优化、故障排除以及各种有趣的实战案例。 如果你在学习和使用 Linux 系统的过程中遇到任何问题,或者对某些内容有疑问,欢迎在评论区留言,我会尽力为大家解答。让我们一起在系统技术的海洋中遨游,不断提升自己的技能水平,共同探索系统世界的奥秘 再次感谢大家的阅读,期待我们下次再见!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 《深入探究 Linux 软件安装:从编译到 RPM、Yum,附 Yum 仓库镜像站详解》
    • 2.15 Linux软件安装
      • 2.15.1 编译安装
      • 2.15.1 编译安装
      • 2.15.2 rpm安装
      • 2.15.3 yum安装
      • 2.15.4 yum仓库(镜像站)
      • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档