【Linux系统】—— 软件下载

【Linux系统】------ 软件下载

  • [1 Linux 中安装软件方式](#1 Linux 中安装软件方式)
  • [2 什么是软件间的依赖](#2 什么是软件间的依赖)
  • [3 下载软件的本质](#3 下载软件的本质)
  • [4 什么是包管理器](#4 什么是包管理器)
  • [5 软件是谁提供的](#5 软件是谁提供的)
  • [6 软件从上线到下载的整个过程](#6 软件从上线到下载的整个过程)
  • [7 社区靠什么支撑下去](#7 社区靠什么支撑下去)
  • [8 我的机器如何知道下载链接的呢](#8 我的机器如何知道下载链接的呢)
  • [9 镜像](#9 镜像)
  • [10 用 yum 安装软件](#10 用 yum 安装软件)
    • [10.1 搜索软件](#10.1 搜索软件)
    • [10.2 安装软件](#10.2 安装软件)
    • [10.3 卸载软件](#10.3 卸载软件)

1 Linux 中安装软件方式

Linux 中安装软件一个有三种方式

  • 源码安装
  • 软件包安装 ---- r p m rpm rpm
  • 包管理器 ---- a p t apt apt / a p t apt apt- g e t get get( u b u n t u ubuntu ubuntu)、 y u m yum yum( c e n t o s centos centos)
  1. 源码安装
      Linux 系统中,用源代码直接安装软件是比较繁琐的。虽然许多项目源代码的源代码都是开源的,直接下载下来即可编译。但用户去编译的时候总会遇到这样那样各种问题。因为 Linux 系统更新了多次,软件也更新了几十上百次,我们不清楚下载的代码和系统的兼容性如何,而且兼容性特别难排查。我们不推荐用源代码直接安装软件
  2. 软件包安装
      Linux 系统中,软件包常见的有 r p m rpm rpm。 r p m rpm rpm 是一种用于安装、卸载、查询和管理软件包的工具。但是它并不自动处理软件包之间的依赖关系。这意味着在安装或更新软件包时,用户可能需要手动解决依赖问题
  3. 包管理器安装
       a p t apt apt 和 y u m yum yum 都是 Linux 系统中强大的包管理器工具,包管理器安装对比软件包按,最大的特点是 它会自动解决软件之间的依赖问题。比如安装软件 A,他会自动检测 A 软件所依赖的库,自动会把还未下载的,所依赖的库下载下来。这样大大提高了软件的安装效率、稳定性和安全性。

因为包管理器会自动解决依赖问题,所以实践中我们往往都是使用包管理器来安装文件

2 什么是软件间的依赖

小芝士: 软件之间存在依赖

我们下载一个软件,比如下载一个原神,原神下载下来并不是仅仅下载一个 .exe 可执行程序就能跑起来。

一款大型软件,它要跑起来,它可能用了很多的第三方或者自己开发的库(库其实也是可执行程序二进制程序打包的)。比如下载原神要 15 个 G,而还有 20G 是各种各样的库,这些库有的是 A 团队做的,有的是 B 团队做的,有的是开源的。

下载原神时,开发团队将原神和它所需要的库都打了个包,让用户能全部下载下来,全部下载在系统中,所以我们下载下来的软件往往不会出现任何的缺失,不会软件跑起来提示某个文件找不到导致程序跑不起来。

但在 Linux 软件包安装中,它只是将软件打了一个包,但并没有将软件所依赖的各种库一起打包。比如这个软件除了本身的文件外,还依赖 10 个库,而如果自己在网上下载,可能只下载了这个软件自身的文件,并没有将它所依赖的库一起下载下来。因此用软件包安装将软件下载下来,发现它还是跑不起来,运行是它会告诉你某某库缺失。

我们将软件依赖各种库这种关系称为:程序之间是存在依赖的!

总结: 我们下载软件并不是只需要将软件本身下载下来就可以,还要将其所依赖的各种库一并下载下来。下载一个软件,其本身是 10MB,但真正下载下来可能 100MB

比如下载「ls」指令,只下载「ls」指令是不行的,因为还要装一个 C语言标准库,因为「ls」命令是C语言帮我们处理的

我们这个世界的软件不是并列的,各个软件之间彼此互相交叉,互相引用。

3 下载软件的本质

下载一个软件,第一步首先都是将其从网络上下载下来 ,第二步才是安装

所谓安装,本质就是拷贝,也就是把我们下载下来的库可执行程序拷贝到系统的指定的目录下面

所以我们 Linux 目录下面才会存在这么多目录 :有的是装可执行程序,有的是装对应的库的,有的是放配置文件的,有的是放日志的,有的是产生临时文件......

Linux 系统中分门别类的建好各种工作目录时为了方便我们在网上下载下来的软件,将其可执行程序、依赖的库、日志等分门别类的拷贝到对应的目录下面,方便我们直接使用。

根目录的所有文件拥有者和所属组都是 root,这意味着在 Linux 中,安装软件必须使用root权限。

为什么必须使用 root 权限安装但是 other 能访问呢?比如我们下载「ls」 指令,我们身为 other 也能使用。因为使用软件,不管是可执行程序还是配置文件还是其他的,只需要有r权限和x权限就行

这也是为什么 /usr/bin 目录下即便他的拥有者所属组是 root,它也会把目录的 r 和 x 权限开放出来

软件安装到系统里,只安装一次,任何人都能使用! 因为安装软件并不是安装在 /home 路径下,是安装在系统当中。

4 什么是包管理器

如今我们不管是在手机上装软件还是电脑上装软件,都会有对应的一个APP商店。如华为有华为商店、小米有小米商城、联想有联想商店。我们可以在应用商店里搜索对应软件比如抖音,并将其下载下来。

而包管理器就类似于我们手机上面的应用商店。包管理器的种类非常多,有 a p t apt apt、 y u m yum yum 等,这就类似于小米应用商城、华为商店。大家的性质是一样的,只不过在不同的平台上面我们有不同的下载软件的入口

5 软件是谁提供的

就拿抖音来说,抖音就是字节跳动公司提供的,快手就是快手公司提供的。这些商业公司提供APP,用户愿意用,用户量大了就可以赚钱,他们有非常明显的利益驱动的。

而 Linux 上的软件(各种指令、各种库)是谁提供的呢?

先不急着回答

先问另外一个问题:如何评估一款操作系统的好坏?

比如你进公司,老板要求你选一款操作系统,公司一万台机器都用你所选择的操作系统。

如何选一款好的操作系统并说服你的老板呢?毕竟这些操作系统用的都是 Linux 内核

评估一款操作系统的好坏并不能只聚焦于操作系统上,从以下几个方面分析:

  • 内核版本:内核版本不能太新也不能太老
  • 人群:该操作系统吸引的人群种类是哪些
  • 社区:这些人群社区中有没有积累足够的文档
  • 文档:文档有没有反馈出足够多的问题
  • 问题:这些问题有没有解决方案

我们将人群、社区、文档、问题等等称为操作系统的生态问题。所以 操作系统的好坏是由生态决定的

那么一款操作系统背后的配套软件算不算生态的一环呢?

一款操作系统,里面各种的开源库等配套软件都算作生态的一环。

我们要记住,一款操作系统的背后是开发者,而开发者贡献了操作系统,为了让这款操作系统让更多的人去使用,他一定会为我们直接或间接编写配套软件。他要是少了配套软件,这款操作系统在生态层面就没有竞争力,也就会被市场淘汰。

现在在市场上可以看到许多 Linux 相关的配套软件,为什么背后的人会闲来没事,没有利益驱动下还来做这样的事情呢?本质上因为他的配套软件属于生态系统的一环,变相的让自己的操作系统有更多的用户来使用。 如果他生态不好,他的操作系统就没有用户来使用。

6 软件从上线到下载的整个过程

接下来我们来理解一下从软件的上线到我们下载下来的整个过程

我们用的系统像 centos/ubunto 等他们都有对应的社区 (社区其实就是一个云服务器 )。社区中活跃着大大小小的开发者,社区中不仅仅有开发者,还有各种测试人员、运维人员、等等各式行业的人。

开发者开发出对应的软件 ,把软件的源代码托管到其官网上或 github 上。然后源代码经过编译,形成属于对应平台的可被安装文件。同一款软件可能在 centos 上编译,可能在 ubunto 上编译,可能在多个平台上编译,可能一个软件编译了十个平台,不同平台分别将编好的软件放在不同的社区里,这样大家都能用了。

就好比 抖音APP 将代码写好了,将写好后的代码编译成对应的软件,编好的软件要被用户看到,就要上到小米商城、华为商店等等。应用商城的官方会对 抖音APP 进行审核,审核通过后在将抖音放在商店中,这样大量用户就能看到抖音了

接下来我们只需要再用我们自己的 Linux 机器中用 yum/apt等包管理器 把对应的软件从社区(云服务器)中下载下来就行。下载流程:网络下载安装拷贝

7 社区靠什么支撑下去

云服务器的这个钱怎么来的呢?

社区这台云服务器不是要花钱的吗?我们自己买台学习用的机器都要花钱,

也就是说我不仅要自己给你免费开发软件,还要自己出钱去买云服务器将服务布置上去,我还要不断去维持这些资源?这不纯纯大怨种吗?

这里给大家说一下

比如你现在是一家公司的程序员,这家公司使用的是一款商业软件,这款软件是免费的,对应社区里面的开源库就用了十几个,你家公司的产品就是基于人家这个软件做出来的。

其实当你使用这款软件时,你就与他产生因果了 。什么意思呢?你用了他,你就特别依赖他。如果你是这家公司的老板,你肯定不愿意这个社区没了。

而且这样的开源软件,它不仅仅是一家公司在使用,全世界有多少家互联网公司,智能制造,新能源等公司,他们都有可能会用到这款开源软件。

所以一个社区一旦建立起来,被更多人使用,它根本就倒不了。社区有什么需求,这样他说一声,一呼百应。

所以开源本质是一种商业模式

8 我的机器如何知道下载链接的呢

我们知道,下载任何东西都要有下载链接

我们下载 g++、gdp 等软件,我们的机器让我们用了yum/apt 就直接装了,我们的机器是怎么知道对应的下载链接在哪呢?

我们在手机上通过应用商店下载个抖音,我自己得找到抖音的下载链接呢?

我们的机器又是怎么找到对应的下载链接呢?也就是说怎么找到对应的社区这个云服务器呢?

道理很简单,我们的操作系统用的就是人家社区的 。我们的系统 centos/ubunto 就是从对应社区中下载下来的,操作系统中内置链接。所以我们安装软件,用户告诉机器要安装什么,能找到就直接下载,找不到就报错

9 镜像

我们所知的各种 Linux 操作系统全都是由外国人发明的,人家的这套生态肯定是在国外 ,这也是为什么程序员经常要去外网去查找资料。

生态是在国外,所以操作系统内部的内置链接默认都是在外网 的。比如 centos 系统默认的连接是在 www.centos.org

但我们现在在国内,我们国家在互联网是有管控的。我们如果想安装软件,要么卡要么装不了。怎么办呢?

社区中有我们中国人、有欧洲人、有美洲人,其中我们中国的这批人,他们希望我们在国内也能用社区中的东西,他们就在国内建立了对应的生态,把国外的生态镜像过来。镜像什么意思呢?就是国外有什么,我就同步拷贝到国内,同时更改下载链接。这时我们再安装软件,走的就是国内的这条线,这时安装就不会卡了。

我们将更改镜像链接称为切换镜像源 。我们可以看到在国内有很多非官方的站点,它可以让我们直接安装 Linux 中的软件,他们都是镜像过来的。典型的有阿里云的镜像源、清华大学的镜像源、163的镜像源。

10 用 yum 安装软件

注意事项:

关于 yum 的所有操作必须保证主机(虚拟机)网络畅通 !!!

检查是否联网可以用 「ping」 指令来验证

10.1 搜索软件

语法:

  • 「yum」 list

通过「yum」 list 命令可以罗列出当前一共有哪些软件。由于包的数目可能非常之多, 这里我们需要使用 「grep」 命令只筛选出我们关注的软件。

例如:

  • 「yum」 list | 「grep」 sl

我们查找所有软件中带 sl 关键字的软件

部分结果如下:

为什么所有软件后面都写着 x86_64 呢?

因为在生态中,开发者发布源代码时,可能在 32 位编了一份,在 64 位下也编了一份,共同放到了社区中。当我们下载时,我们当前的系统是 64 位的,社区再将该软件的 64 位版本推给你。所以我们搜索到的软件全是 x86_64 的,它不会给我们推 32 位的软件。

10.2 安装软件

注:安装和卸载软件一定要有root权限,原因前文已讲解

语法:

  • 「yum」 install [选项] 软件名

常见选项:

  • -y:强制下载

例如安装「sl」 命令

bash 复制代码
[gy@VMCentos7 ~]$ sudo yum install sl.x86_64  # 安装sl软件
[sudo] password for gy: 
Last metadata expiration check: 2:20:41 ago on Sat 30 Mar 2024 01:18:42 PM CST.
Package sl-5.02-1.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!  # 安装成功

「sl」 执行结果:

10.3 卸载软件

语法:

  • 「yum」 remove [选项] 软件名

常见选项:

  • -y:强制下载

例如卸载刚刚安装的「sl」软件:


好啦,本期关于 软件下载 的知识就介绍到这里啦,希望本期博客能对你有所帮助。同时,如果有错误的地方请多多指正,让我们在 Linux 的学习路上一起进步!

相关推荐
小河vlog4 分钟前
.NET 8 获取CPU序列号和主板序列号异常问题
java·服务器·.net
ken22328 分钟前
linux ibus rime 中文输入法,快速设置为:默认简体 (****)
linux
因特麦克斯15 分钟前
如何实现序列化和反序列化?如何处理对象的生命周期管理?
c++
Hera_Yc.H21 分钟前
C++之二:类和对象
开发语言·c++
基哥的奋斗历程35 分钟前
解决Linux 虚拟机网段与虚拟机配置网段不一致
linux·运维·服务器
毒丐43 分钟前
VirtualBox使用教程
java·服务器·c++
CQU_JIAKE1 小时前
12.16【net】[debug]SOCKET_RAW无法在热点局域网下传递,悬而未决
服务器·计算机网络
Cachel wood1 小时前
Vue.js前端框架教程5:Vue数据拷贝和数组函数
linux·前端·vue.js·python·阿里云·前端框架·云计算
我们的五年2 小时前
【Linux课程学习】:第二十一弹---深入理解信号(中断,信号,kill,abort,raise,larm函数)
linux·服务器·后端·深度学习·ubuntu·机器学习