目录
一、软件包管理器
1-1什么是软件包
1-2 Linux软件生态
Linux下载软件的过程(Ubuntu、Centos、other)
操作系统的好坏评估---生态问题
1. 应用软件生态
2. 硬件兼容性
3. 开发者社区与开源生态
4. 商业合作与盈利模式
5. 用户粘性与使用习惯
6. 安全与合规生态
7. 新兴技术适应性
典型案例分析
结论:生态决定操作系统生命力
为什么会有人免费特定社区提供软件,还发布?还提供云服务器让你下载?
1. 开源精神与社区协作
2. 商业公司的间接盈利模式
3. 开发者个人收益
4. 数据与流量变现
5. 云服务器免费提供的逻辑
6. 政府与学术机构的支持
7. 竞争策略
8. 安全与信任建设
典型案例
总结:免费背后的逻辑链
软件包依赖的问题
1. 依赖的基本概念
2. 依赖问题的主要类型
3. 依赖管理的核心思想
4. 依赖关系的意义
总结
国内镜像源
1. 核心作用
2. 常见类型
3. 工作原理
4. 典型代表
5. 使用场景
总结
二、Linux 系统软件安装方式
三、YUM 工具简介
四、查看软件包(yum list)
五、安装软件
实现本地机器与云服务器之间的文件互传
六、卸载软件
七、安装源(软件源)
1. 主要 Linux 发行版的安装源
2. 软件源的核心组成
3. 软件源的存储位置
(1) 在线源(远程服务器)
(2) 本地源(离线使用)
八、一些好玩的命令
一、软件包管理器
1-1什么是软件包
- 在Linux下安装软件,一个通常的办法是下载到程序的源代码,并进行编译,得到可执行程序
- 但是这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成windows上的安装程序)放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包,直接进行安装.
- 软件包和软件包管理器,就好比“App"和“应用商店"这样的关系
- yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器.主要应用在Fedora,RedHat,Centos等发行版上.
- Ubuntu:主要使用apt(Advanced Package Tool)作为其包管理器。apt同样提供了自动解决依赖关系、下载和安装软件包的功能。
1-2 Linux软件生态
-
Linux下载软件的过程(Ubuntu、Centos、other)
-
操作系统的好坏评估---生态问题
评估操作系统(OS)的生态好坏是衡量其综合竞争力的关键指标之一。生态系统的强弱直接影响用户黏性、开发者支持、软硬件兼容性以及长期发展潜力。
1. 应用软件生态
-
应用数量与质量:主流应用(如办公套件、设计工具、游戏)是否适配?是否覆盖用户核心需求?(如Windows的广泛软件兼容性,macOS的创意工具优势)
-
开发者友好性:开发工具链是否完善?API文档是否清晰?分发渠道是否高效?(如iOS的App Store闭环生态,Android的开源灵活性)
-
长期维护意愿:开发者是否愿意持续更新应用?是否因市场份额低而放弃支持?(如Windows Phone因生态贫瘠失败)
2. 硬件兼容性
-
设备驱动支持:能否广泛兼容主流硬件(显卡、打印机等)?是否需要厂商主动适配?(如Linux依赖社区驱动开发)
-
新兴硬件适配:是否快速支持新技术(如AI加速芯片、AR/VR设备)?
-
跨平台协作:是否与手机、平板、IoT设备无缝联动?(如苹果Apple Silicon芯片的统一生态)
3. 开发者社区与开源生态
-
社区活跃度:是否拥有活跃的开源社区?是否有持续贡献的开发者?(如Linux内核的全球协作)
-
开源协议选择:生态是否开放?是否允许自由修改和分发?(如Android基于AOSP开放,但部分厂商闭源)
-
第三方工具支持:是否集成主流开发框架(如Python、Node.js)?是否有云服务商提供SDK?
4. 商业合作与盈利模式
-
厂商合作:是否有主流厂商提供预装或深度定制?(如ChromeOS与教育市场合作)
-
分成机制合理性:应用商店抽成比例是否合理?是否引发开发者抗议?(如Epic与苹果的诉讼争议)
-
企业级支持:是否有针对企业的付费技术支持?如RHEL(Red Hat Enterprise Linux)的订阅模式。
5. 用户粘性与使用习惯
-
迁移成本:用户更换系统的学习成本和数据迁移难度(如从Windows转向macOS的适应期)
-
品牌忠诚度:是否形成用户群体认同?(如苹果用户对macOS/iOS生态的依赖)
-
本地化支持:是否支持多语言、区域化服务?(如国产系统对中文环境的优化)
6. 安全与合规生态
-
安全更新响应速度:能否及时修复漏洞?是否有长期支持版本?(如Windows 10的定期补丁)
-
应用审核机制:应用商店是否严格审查恶意软件?(如iOS的封闭审核 vs. Android的开放性风险)
-
合规性支持:是否满足不同地区的法律法规?(如欧盟GDPR、中国数据安全法)
7. 新兴技术适应性
-
云原生支持:是否适配容器化、微服务架构?(如谷歌Fuchsia对分布式系统的设计)
-
AI集成能力:是否内置AI框架或接口?(如Windows Copilot的AI助手)
-
跨平台开发趋势:是否支持Flutter、React Native等跨平台开发工具?
典型案例分析
-
成功案例:Windows凭借广泛的软硬件兼容性主导PC市场;Android通过开源策略占领移动端。
-
失败教训:Symbian因未能吸引移动应用开发者而衰落;Firefox OS因缺乏厂商支持退出竞争。
-
新兴挑战:华为鸿蒙(HarmonyOS)通过分布式架构试图打破生态壁垒,但面临海外应用适配难题。
结论:生态决定操作系统生命力
操作系统的成功不仅依赖技术先进性,更取决于能否构建包含用户、开发者、硬件厂商的完整生态。封闭生态(如苹果)追求体验一致性,开放生态(如Linux)鼓励创新但可能碎片化。未来,随着AI、物联网的发展,操作系统的生态竞争将扩展到更广泛的设备互联与场景融合能力。
-
为什么会有人免费特定社区提供软件,还发布?还提供云服务器让你下载?
1. 开源精神与社区协作
-
技术理想主义:许多开发者信奉“软件自由”,认为知识应共享。例如GNU项目的创始人Richard Stallman提出“自由软件四大自由”(使用、研究、修改、分发)。
-
社区共建:通过开放源代码,吸引全球开发者共同改进项目(如Linux内核、Python语言)。贡献者通过技术影响力获得职业机会或声誉。
2. 商业公司的间接盈利模式
-
核心产品免费,增值服务收费:
-
Red Hat:免费提供Fedora/CentOS,但企业级RHEL需付费支持。
-
MongoDB/Elastic:开源基础版,高级功能(如安全、监控)需商业授权。
-
-
生态控制权:
-
谷歌Android:开源AOSP吸引厂商,但通过GMS(Google Mobile Services)和Play商店盈利。
-
微软VS Code:编辑器免费,但推动Azure云服务订阅。
-
3. 开发者个人收益
-
职业发展:GitHub上的高质量开源项目可成为开发者的“简历”,帮助获得高薪工作(如知名开源贡献者被大厂招募)。
-
捐赠与赞助:通过Patreon、GitHub Sponsors等获得用户资助(如Linux基金会每年获企业巨额捐款)。
-
咨询与培训:通过开源项目建立权威后,提供付费培训或定制开发服务(如Redis作者创办的公司)。
4. 数据与流量变现
-
用户行为数据:部分免费软件会匿名收集使用数据(需声明),用于改进产品或广告投放(如Firefox默认发送遥测数据)。
-
引流至付费产品:例如JetBrains提供免费社区版PyCharm,但专业版需付费。
5. 云服务器免费提供的逻辑
-
推广云服务:
-
AWS/GCP/Azure:免费提供开源软件的云镜像(如Ubuntu VM),吸引用户使用其付费云产品。
-
GitHub Actions:免费提供构建服务器,推动开发者依赖其CI/CD生态。
-
-
降低使用门槛:快速体验能提高软件普及率(如Docker Hub提供免费镜像托管)。
6. 政府与学术机构的支持
-
公共资金投入:部分项目由高校或政府资助(如欧盟资助的Horizon 2020计划支持开源项目)。
-
科研需求:学术界通过开源促进成果共享(如CERN开发的开源工具ROOT)。
7. 竞争策略
-
打破垄断:例如Chromium开源项目对抗IE的封闭生态。
-
标准化主导权:企业通过开源推动技术成为行业标准(如Kubernetes由谷歌开源后主导容器编排市场)。
8. 安全与信任建设
-
透明性:开源代码可被审计,增强用户信任(如密码管理器Bitwarden)。
-
漏洞众修:社区快速发现并修复安全问题(相比闭源软件更高效)。
典型案例
-
Linux:开源免费,但红帽、SUSE通过企业服务年收入超十亿美元。
-
Let’s Encrypt:免费SSL证书,由非营利组织运营,资金来自赞助商(如Facebook、谷歌)。
-
WordPress:开源CMS,母公司Automattic通过托管服务(WordPress.com)盈利。
总结:免费背后的逻辑链
-
直接获利:捐赠、增值服务、数据变现。
-
间接获利:生态控制、人才吸引、市场教育。
-
非金钱收益:技术影响力、行业标准制定权、社会价值。
最终,“免费”只是表象,实质是通过其他维度实现可持续性。用户获得免费工具的同时,也可能成为其商业生态中的一环(如贡献数据、付费升级或使用关联服务)。
-
软件包依赖的问题
软件包依赖(Dependency)是指一个软件在运行或安装时,需要其他特定的库、工具或组件支持才能正常工作。依赖关系是软件生态中的核心机制,确保程序能够调用所需的功能,但同时也可能带来管理上的复杂性。
1. 依赖的基本概念
-
直接依赖(Direct Dependency):软件明确需要的组件(如 Python 程序依赖
requests
库)。 -
间接依赖(Transitive Dependency):依赖的依赖(如
requests
库本身又依赖urllib3
)。 -
动态依赖(Runtime Dependency):程序运行时才加载的库(如
.so
或.dll
文件)。 -
静态依赖(Build Dependency):仅编译时需要的工具(如
gcc
、make
)。
2. 依赖问题的主要类型
-
缺失依赖
-
软件缺少必要的库或工具,导致无法安装或运行。
-
示例:安装某程序时提示
libssl not found
。
-
-
版本冲突
-
多个软件要求同一依赖的不同版本,无法共存。
-
示例:程序 A 需要
Python 3.8
,而程序 B 需要Python 3.10
。
-
-
循环依赖
-
依赖关系形成闭环(如 A → B → C → A),导致无法解析。
-
-
冗余依赖
-
卸载主程序后,残留无用的依赖库。
-
3. 依赖管理的核心思想
-
自动化解决:包管理器(如
apt
、dnf
、pip
)自动下载并安装依赖。 -
隔离环境:通过虚拟环境(如
venv
、Docker
)避免污染系统库。 -
版本控制:锁定依赖版本(如
package==1.2.3
)确保兼容性。
4. 依赖关系的意义
-
功能复用:避免重复造轮子(如所有程序共用
OpenSSL
库)。 -
模块化开发:开发者只需关注自身代码,依赖第三方功能。
-
生态协同:通过共享依赖促进软件间的互操作性。
总结
依赖是软件协作的基础,但也可能引发冲突。良好的依赖管理需平衡 自动化(包管理器)、隔离(虚拟化)和 版本控制,以确保稳定性和可维护性。
-
国内镜像源
国内镜像源(Mirror Site)是指位于中国境内的服务器,同步存储国外官方软件仓库(如 Ubuntu、CentOS、PyPI、Docker Hub 等)的数据,为国内用户提供更快速、更稳定的软件下载服务。
1. 核心作用
-
加速访问:避免跨国网络延迟,提升下载速度(如 GitHub 国内镜像)。
-
规避封锁:解决部分国外源无法直连的问题(如 Docker Hub)。
-
节省带宽:减轻国际出口流量压力,降低企业/机构网络成本。
2. 常见类型
-
操作系统镜像源
-
同步 Linux 发行版的软件仓库(如 Ubuntu 清华源、CentOS 阿里源)。
-
-
开发工具镜像源
-
编程语言包仓库(如 PyPI 清华源、NPM 淘宝源)。
-
-
容器镜像源
-
Docker Hub 镜像(如阿里云容器镜像服务)。
-
-
开源项目镜像
-
GitHub 代码仓库镜像(如 GitCode、FastGit)。
-
3. 工作原理
-
定期同步:国内服务器按小时/天同步国外官方源的更新。
-
智能路由:用户访问时自动跳转到最近的镜像节点(如 CDN 加速)。
-
缓存机制:热门软件长期保留,冷门内容按需同步。
4. 典型代表
-
高校/机构镜像:清华大学 TUNA、中科大 USTC、阿里云镜像。
-
企业服务:华为云镜像、腾讯云软件源。
5. 使用场景
-
配置 Linux 系统的
apt
/yum
源时替换为国内地址。 -
开发时指定
pip
/npm
使用国内源安装依赖。
总结
国内镜像源通过本地化存储+智能分发,解决了跨国软件下载的痛点,是开发者提升效率的基础设施之一。
以下是⼀些国内Linux软件安装源的官方链接:
1. 阿里云官方镜像站
- 官方链接:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区
- 阿里云提供了丰富的Linux发行版镜像,包括CentOS、Ubuntu、Debian等,用户可以通过该镜像站快速下载和更新软件包。
2. 清华大学开源软件镜像站
- 官方链接:清华大学开源软件镜像站 | Tsinghua Open Source Mirror
- 清华大学镜像站提供了多种Linux发行版的镜像,以及Python、Perl、Ruby等编程语言的扩展包。该镜像站还提供了丰富的文档和教程,帮助用户更好地使用这些软件包。
3. 中国科学技术大学开源镜像站
- 官方链接:USTC Open Source Software Mirror
- 中科大镜像站提供了多种Linux发行版的镜像,以及常用的编程语言和开发工具。用户可以通过该镜像站方便地获取所需的软件包和工具。
4. 北京交通大学自由与开源软件镜像站
- 官方链接:首页 - 北京交通大学自由与开源软件镜像站
- 北交大镜像站提供了多种Linux发行版的镜像,以及相关的软件仓库和工具。该镜像站还提供了详细的文档和指南,帮助用户配置和使用这些软件源。
5. 中国科学院软件研究所镜像站(ISCAS)
- 官方链接:欢迎访问 ISCAS 开源镜像站
- ISCAS镜像站提供了多种Linux发行版、编程语言和开发工具的镜像。用户可以通过该镜像站快速获取所需的软件包和更新。
6. 上海交通大学开源镜像站
- 官方链接:上海交通大学 Linux 用户组 软件源镜像服务
- 上海交大镜像站提供了丰富的Linux软件资源,包括多种发行版的镜像和软件仓库。用户可以通过该镜像站方便地下载和安装所需的软件包。
7. 网易开源镜像站
- 官方链接:欢迎访问网易开源镜像站
- 网易镜像站提供了多种Linux发行版的镜像,以及相关的软件仓库和工具。该镜像站还提供了便捷的搜索功能,帮助用户快速找到所需的软件包。
此外,还有⼀些其他的国内镜像源,如搜狐开源镜像站等,但可能由于时间变化或政策调整,部分镜像站的链接或状态可能有所变动。因此,建议用户在使用前访问官方网站或咨询相关社区以获取最新的信息和帮助。
二、Linux 系统软件安装方式
Linux 系统主要支持以下三种软件安装方法:
- 源码编译安装:下载程序源代码后自行编译生成可执行文件
- RPM 包安装:直接使用 rpm 命令安装软件包(需自行解决依赖问题)
- YUM 工具安装:最常用的安装方式(推荐)
三、YUM 工具简介
YUM 是 Fedora、RedHat 和 CentOS 系统中的软件包管理工具,具有以下优势:
- 自动从指定服务器下载 RPM 软件包
- 智能处理软件依赖关系
- 支持批量安装所有依赖包
- 避免手动逐个下载安装的繁琐操作
- 注意事项:同一台服务器在同一时间只能运行一个 yum 安装进程,不可同时安装和运行多个软件。(这个要超级注意)
- 由于 yum 需要从服务器下载 RPM 包,因此执行安装操作时必须保持主机或者虚拟机网络连接。我们可以通过 ping 命令来检测当前云服务器的网络连通状态。
下面的概念我们会在后面网络层面学到,现在先了解一下:
-
Ping:一种网络诊断工具,用于测试主机之间的连通性和延迟。
-
ICMP 协议:通过发送
ICMP Echo Request
数据包并接收ICMP Echo Reply
来检测目标是否可达。
好了,现在我们要进入应用yum这个软件包管理器了,但是博主之前切换了一次系统镜像,现在使用的是Ubuntu 20.04系统的云服务器,我们先把镜像切换成CentOS 7.9版本的:(我已经切换好了,如果情况一样的话可以跟着点击下图的切换镜像切换)
在 Ubuntu 系统中,yum 并不是默认的包管理工具,而是 Red Hat 系(如 CentOS、RHEL、Fedora)的包管理器。Ubuntu 使用的是 APT(Advanced Packaging Tool)和 dpkg 来管理软件包。想了解和运用Ubuntu系统的软件包管理器的话可以上网查找一下。
四、查看软件包(yum list)
yum list:使用yum list指令,可以罗列出可供下载的全部软件包(小心使用,会被刷屏)
yum list
就上图解释:
- 软件包命名(中间那一列)规则:主版本号.次版本号.源码版本号-软件包发行号.运行平台.CPU架构
- 架构说明:
- "x86_64"后缀:64位系统安装包
- "i686"后缀:32位系统安装包 (选择时需与系统架构匹配)
- 系统版本标识(操作系统发行版的版本)比如:
- "el7":CentOS 7/RedHat 7
- "el6":CentOS 6/RedHat 6
- 末列表示软件源名称,我们可以类比手机应用商店(如"荣耀应用商店"、"华为应用商店")
由于包的数目可能非常之多, 这里我们需要使用grep 命令(只显示与lrzsz相关的软件包)只筛选出我们关注的软件包:
我们就查找lrzsz软件包来做说明(先了解一下):
lrzsz 是一个在 Linux/Unix 系统 中用于 串行终端文件传输 的工具集,包含两个主要命令:
-
rz
(Receive ZMODEM):从本地计算机(可以是不同的系统)上传文件到远程 Linux 服务器。 -
sz
(Send ZMODEM):从远程 Linux 服务器下载文件到本地计算机(可以是不同的系统)。
核心特点
-
基于 ZMODEM 协议
-
支持断点续传、错误检测,适合不稳定网络环境。
-
-
无需额外配置
-
通过终端(如
Xshell
、SecureCRT
)直接拖拽文件即可传输。
-
-
轻量级
-
不依赖图形界面,纯命令行操作。
-
典型使用场景
-
通过 SSH 终端 快速传输小文件(如日志、脚本)。
-
在 无图形界面的服务器 上替代
scp
/ftp
的简易方案。
五、安装软件
想要安装软件包,我们用户如果没有相关的权限是不可以的,我们可以通过以下操作来使该用户获得sudo权利:将用户添加到wheel组(推荐)(相关其他普通用户sudo提权方法后面博主会出文章详细说明,不急)
-
检查系统是否有wheel组:
grep wheel /etc/group
-
将用户添加到wheel组:
usermod -aG wheel 用户名
-
验证是否添加成功:
groups 用户名
安装软件指令: sudo yum install 软件名
通过 yum, 我们可以通过很简单的⼀条命令完成相关软件包的安装。
- yum 会自动找到都有哪些软件包需要下载, 这时候敲 "y" 确认安装。
- 出现 "complete" 字样或者中间未出现报错, 说明安装完成。
注意事项:
- 安装软件时由于需要向系统目录中写入内容, ⼀般需要 sudo 或者切到 root 账户下才能完成。
- yum安装软件只能⼀个装完了再装另⼀个. 正在yum安装⼀个软件的过程中, 如果再尝试用yum安装另外⼀个软件, yum会报错。
- 如果 yum 报错,我们现在可以上网查找一下解决方案,或者后期博主会出文研究一下怎么解决这个问题,以上Ubuntu系统的apt也一样。
既然我们安装了lrzsz软件包,现在我们就可以使用啦!我们只需要使用以下指令就能完成文件传输:
实现本地机器与云服务器之间的文件互传
若已安装lrzsz工具,具体使用方式如下:
-
文件上传(本地→云服务器) 执行命令:
rz -E
该命令允许您从本地选择文件上传至云服务器
-
文件下载(云服务器→本地) 执行命令:
sz 文件名
该命令可将云服务器上的指定文件下载到本地默认下载目录
六、卸载软件
指令: sudo yum remove 软件名
系统会提示确认卸载操作,输入"y"确认后,当终端显示"complete"时即表示卸载成功。
七、安装源(软件源)
在 Linux 中,安装源(Software Repository,简称 Repo) 是系统用来下载和安装软件包的远程服务器或本地存储库。它包含了软件包(如 .rpm
、.deb
文件)及其依赖关系、元数据(如版本、描述、校验信息等)。不同的 Linux 发行版使用不同的包管理工具和软件源格式:
1. 主要 Linux 发行版的安装源
发行版 | 包管理工具 | 软件源格式 | 默认源示例 |
---|---|---|---|
RHEL/CentOS | yum/dnf | .repo 文件 | baseurl=http://mirror.centos.org/centos/$releasever/... |
Ubuntu/Debian | apt | sources.list 文件 | deb http://archive.ubuntu.com/ubuntu focal main |
Arch Linux | pacman | .db 数据库 | Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch |
openSUSE | zypper | .repo 文件 | baseurl=http://download.opensuse.org/distribution/leap/$releasever/repo/oss/ |
2. 软件源的核心组成
一个典型的软件源包含以下内容:
-
软件包文件(如
.rpm
、.deb
)-
二进制程序、库文件等。
-
-
元数据索引(如
repodata/
、Packages.gz
)-
记录软件包名称、版本、依赖关系等。
-
-
GPG 签名
-
用于验证软件包的完整性和来源可信性。
-
3. 软件源的存储位置
(1) 在线源(远程服务器)
-
默认官方源(如
mirror.centos.org
、archive.ubuntu.com
) -
镜像源(如阿里云、清华、中科大镜像站)
-
第三方源(如 EPEL、Docker CE、NVIDIA 驱动源)
(2) 本地源(离线使用)
-
ISO 镜像挂载(如 CentOS 的
file:///mnt
) -
自建仓库(如
createrepo
生成的本地 RPM 仓库) -
缓存目录(如
/var/cache/yum
、/var/cache/apt/archives
)
注意:云服务器不用考虑,因为软件源都是国内的了。
八、一些好玩的命令
详细请看这位博主的博客:Linux命令行的有趣命令_linux有趣的命令-CSDN博客
1、fortune
描述:fortune 命令会显示一条随机的格言、笑话或智慧语句。它可以与 cowsay 结合使用,产生更有趣的效果。
用法:fortune
安装:sudo yum install fortune
示例:fortune | cowsay
这会让一头牛“说”出一个随机的格言或笑话。
2、sl (Steam Locomotive)
描述:sl 是一个有趣的小工具。当你输入 sl 而不是 ls 时,会在你的终端中显示一个蒸汽火车动画。
用法:sl
安装:sudo yum install sl
效果:你会看到一个蒸汽火车从屏幕左侧开到右侧,仿佛真的穿过了你的终端。(如下)