主流Linux发行版近10年排行曲线
10个主流的发行版概述(distrowatch挑选)
搜索特定的发行
选择建议
    初级用户选择:开箱即用
    中级用户组装:适合你自己的系统
    高级用户搭建:适合你自己,且适配你电脑的系统
    顶级用户使用:LFS 构筑自己的Linux系统
Arch VS Gentoo
    Arch 和 Gentoo的共同点
    部分差异表格
    Gentoo的自定义更胜一筹

主流Linux发行版近10年排行曲线

数据来源: https://distrowatch.com/

10个主流的发行版概述(distrowatch挑选)

详见: https://distrowatch.com/dwres.php?resource=major
distrowatch网站挑选的10个主流版本,有概述及优缺点。

  • 初级用户:Ubuntu,Linux Mint和MX Linux对于希望尽快在Linux中获得高效而不必掌握其所有复杂性的新用户而言,这被认为是最简单的。
  • 中间用户:openSUSE,Fedora,Debian GNU / Linux可以归类为良好的“中间道路”分布,通常用作其他发行版的基础。
  • 企业用户:CentOS是一种企业分布,适合那些喜欢稳定性,可靠性和长期支持而不是尖端功能和软件的人。
  • 高级用户:Arch Linux,Gentoo和Slackware Linux是更高级的发行版,需要大量学习才能有效使用。

搜索特定的发行

https://distrowatch.com/search.php
https://www.cnblogs.com/sztom/p/11040147.html

选择建议

初级用户选择:开箱即用

Linux (内核版本, 201907)

  • 超前的 Manjaro(5.2.1)
  • 稳定的 Ubuntu (5.0)
  • Fedora 实验室 (5.0.9)

普通用户(初级用户)可从以上三选一,都是开箱即用的,但包管理器不同,所以很多命令有差异。不过只要适应了其中任何一种,就可参照包管理器命令对照表学习使用其他版本。

中级用户组装:适合你自己的系统

中级用户可以选择 激进的Arch,滚动发布,几乎每天都有更新。
官方有提醒,由于版本更新比较激进,可能会有意向不到的状况。实际使用了半年,从内核到各种软件都是最新的,暂未遇到异常。
Arch(当前内核是最新的5.2.1)。Arch 有优秀的wiki文档参考,普通用户可在这里学习进阶。
Arch的安装就是从最小安装开始,一点一点安装你需要的软件包,就像搭积木。所以安装完成就是适合你自己的系统。

高级用户搭建:适合你自己,且适配你电脑的系统

Gentoo 需要耐心,同样有优秀的wiki文档可供参考。安装适合你自己,且适配你电脑的系统.
这是一个高度灵活的基于源代码的Linux发行版。https://www.gentoo.org/
Arch是安装线程的二进制软件包,Gentoo是从源代码开始编译。所以不只软件适合你的要求,系统更加适配你的电脑硬件。
https://wiki.gentoo.org/wiki/Handbook:Main_Page/zh-cn

顶级用户使用:LFS 构筑自己的Linux系统

http://www.linuxfromscratch.org/lfs/
Linux From Scratch(LFS)是一个项目,为您提供完全从源代码构建自己的自定义Linux系统的分步说明。
http://www.linuxfromscratch.org/lfs/downloads/stable/
只要按照手册上一步步做下来,就能得到一个可用的系统。
所以lfs并不是一个发行版,而是类似于一个教学环境,一本说明书。
除了lfs以外,还有blfs、alfs等子项目。
注:按照lfs手册成够构筑Linux系统后,你可能还不知道其中的每一步为什么要这么做,因为这个文档比较实在,并不会提供太多关联信息。
而gentoo的文档上则详细的介绍了执行每一步所需的背景知识,包含很多可选项,并把最后的决定权留给你。

Arch VS Gentoo

https://wiki.archlinux.org/index.php/Arch_compared_to_other_distributions#Gentoo/Funtoo_Linux

  • Arch Linux 和 Gentoo Linux 都是滚动升级的发行版,所以在上游软件发布很短时间后,其上就会有软件包可用。
  • Gentoo 的基础系统和软件包都是根据用户指定的 USE 标识直接从源代码构建。Gentoo 提供了一个类 ports 系统( Ports 是 BSD 上的一个系统工具)来从源代码编译软件包,而 Arch 基础系统被设计为“直接由预构建好的 x86_64 二进制软件包组成”。一般来说,Arch 更易于构建和升级,而 Gentoo 更易于进行系统化的定制。
  • Arch 只支持 x86_64 架构,Gentoo 对 x86(i486/i686)、x86_64、PPC/PPC64、SPARC、Alpha、ARM、MIPS、HPPA、S/390、Itanium 架构提供官方支持。
  • Gentoo 的官方包管理工具比 ArchLinux 的更复杂和强大,而且一些在 Gentoo 中处于核心位置的特性(比如 USE 标记、SLOTs 等等)在 Arch 中并没有相对应的功能。究其原因,一是因为 ArchLinux 主要是一个二进制发行版,第二是因为 Gentoo 和 Arch 在设计哲学上有些差别。Arch 在原则上更偏向于架构的简洁性和避免过度设计。
  • 因为 Gentoo 和 Arch 的安装包都只包含基本系统,所以它们两者都被认为是需要高度定制化的系统。一般来说,Gentoo 用户如果习惯于 systemd 的话,对Arch的大多数方面都会感到满意。

Arch 和 Gentoo的共同点:

  • 最小系统基础,仅有命令行界面
  • 高度可定制化
  • 优秀的帮助文档系统
  • 都是滚动发布
  • 在从源码生成安装的角度来讲两者没有明显的优劣之分。
  • 甚至两者都可以通过包元文件使用其他发行版提供的二进制包(rpm, deb等)进行安装。

部分差异表格

项目 ARCH Gentoo
Init-System Systemd OpenRC
软件仓库 二进制仓库 源码仓库
额外支持 提供从源码编译的支持(ABS) 提供野包(overlay)
包管理 pacman Portage
软件树 ABS Portage
包管理器 abs, pacman、makepkg等的集合 emerge
包元文件 PKGBUILD ebuild
多版本支持 单一版本 (新包名安装多一个版本) “slot”多版本共存
软件包版本 主流发行版中,更新速度最快的一个 不一定是最新的,但维护的包质量都很高
架构支持 x86-64(AMD64) 几乎所有架构
内核 Linux Linux, BSD, hurd
安装过程 效率极高 编译安装速度慢
能耗 低能耗 以电费换性能著称 ?

Gentoo的自定义更胜一筹

  • 定制性极强的USE变量使其灵活性远超Arch
  • 从依赖的角度来讲,USE变量相当于更微观的“包”,
  • USE有全局的和针对特定包的,前者影响着后者,通过USE变量你可以选择整个系统或某个包具备的特性和功能,全局USE可能会影响到多个包。
  • USE之间也有依赖和冲突关系,包间的依赖和USE间的依赖共同构成了Gentoo包管理问题的核心。

更多信息:
https://www.zhihu.com/question/19672940
https://en.wikipedia.org/wiki/Comparison_of_BSD_operating_systems

Linux-10Year的更多相关文章

  1. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  2. Linux 内核概述 - Linux Kernel

    Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...

  3. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  4. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  5. [linux]阿里云主机的免登陆安全SSH配置与思考

    公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...

  6. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  7. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  8. SQL Server on Linux 理由浅析

    SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...

  9. Microsoft Loves Linux

    微软新任CEO纳德拉提出的“Microsoft Loves Linux”,并且微软宣布.NET框架的开源,近期Microsoft不但宣布了Linux平台的SQL Server,还宣布了Microsof ...

  10. Linux 江湖系列阶段性总结

    引言 我使用 Linux 已经有很多年了,最开始接触 Linux 的时候是从 RedHat 9(没有 Enterprise),中途换过 N 个不同的发行版.多年前,我在 BlogJava 上面分享 J ...

随机推荐

  1. Android的界面组件使用之ImageButton和ImageView,ImageSwitcher和GridView

    (一)ImageButton和ImageView ImageButton与Button的功能完全相同,只是ImageButton上显示的是图像,并且每个ImageButton组件都必须指定一个id,以 ...

  2. SpringBoot下配置Druid

    什么是Druid:Druid是阿里发开的一套基于database的监控平台,相对于其他监控来说对于中文的支持更亲民.. 前言:最近这段时间发现项目整体运行响应速度较慢,打算对系统进行深层次的优化(尤其 ...

  3. IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解,DNS域名设计

    本文参考:<计算机网络: IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解> IP地址 概述 计算机要实现网络通信,就必须要有一个用于快速定位的网络地址.IP地址就是计算机在网络 ...

  4. Mybatis plus 插入数据时将自动递增的主键手动进行赋值设置

    1.首先设置好实体类:将类型设置为 @TableId(type = IdType.INPUT) 2.在插入数据前将id赋值给实体类对象即可

  5. leetcode刷题-- 5. 动态规划

    动态规划思路 参考 状态转移方程: 明确「状态」-> 定义dp数组/函数的含义 -> 明确「选择」-> 明确 base case 试题 53最大子序和 题目描述 53 给定一个整数数 ...

  6. centso7设置防火墙

    CentOS 7默认使用的是firewall作为防火墙,使用iptables必须重新设置一下 1.直接关闭防火墙 1 2 3 systemctl stop firewalld.service #停止f ...

  7. Linux系统下安装python3.7.3环境

    这里用到的Linux系统是centos7系统,centos7是自带py的但是py的2.7.5版本 连接服务器的使用的是SSH Secure shell 1.首先安装依赖包 1)安装gcc编译器 gcc ...

  8. JavaScript数组用法

    本文介绍一些js数组的用法: 上图的要点为: 1.unshift增加数组头部的元素,shift删除数组头部的元素. 2.delete除可删除对象的属性外,还可以删除数组的元素,使其占位变为undefi ...

  9. 「luogu4135」作诗

    「luogu4135」作诗 传送门 分块好题. 预处理出 \(f[i][j]\) 表示 \(i\) 号块到 \(j\) 号块的答案,\(num[i][k]\) 表示 \(k\) 在前 \(i\) 块的 ...

  10. 集合set() 二

    集合分类    可变集合set() 可以添加和删除元素,非可哈希的(值set之后的整体),不能用作字典的键,也不能做其它集合的元素. set()  之后变为不可哈希的 不可变集合 frozenset( ...