这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战
这个系列的文章更关注于“怎么用”,而不是“为什么能这么用”,当然该有的“为什么”也会有,只是不会过深的讨论;这个系列更希望给一些 “爱折腾”,“想用Linux作为主系统”,“单纯想体验Linux” 的人一些帮助和启发
为什么写这个系列?
从大三开始接触Linux,从CentOS开始,到Ubuntu,再到Deepin,精通各种双系统、三系统的安装与卸载,精通各发行版包管理器的使用和软件的安装卸载(传说中的安装卸载之王!),精通各桌面环境与LSP美图的搭配(美曰其名美化) ;心想着折腾了这么多,不分享实在是可惜
简介
1991年,芬兰一位大二的学生 Linus Benedict Torvalds,公布了自己开发的Linux内核,而且是源代码
Linux内核被放到网上后引起了很多人的兴趣,他们陆续通过互联网加入到Linux开发过程中,也由此开创了一种前所未有的软件开发模式。多人协作,代码随时提交,有问题及时修改,所有参与人员并非精英,而是一群狂热的支持者。前前后后无数人参与了Linux项目的开发,组织不太严谨,有争吵也有讨论。
正因为这种开发模式,在2005 年,Linux社区诞生出了著名的版本控制系统Git
自1994年3月,Linux1.0发布,就一直没有踩过刹车,一路高速,到现在,已经是各种发行版百花齐放的时代了
Linux 内核
传送门:Linux内核官网
现代操作系统设计中,为减少系统本身的开销,往往将一些与硬件紧密相关的(如中断处理程序、设备驱动程序等)、基本的、公共的、运行频率较高的模块(如时钟管理、 进程调度等)以及关键性数据结构独立开来,使之常驻内存,并对他们进行保护,通常把这一部分称之为操作系统的内核
Linux的内核,是操作系统中最核心也是最基本的部分。它屏蔽了与底层硬件之间的复杂交互,如进程管理、内存管理、文件系统的管理、使用驱动程序对设备进行控制、网卡控制等;使应用程序可以间接的、安全的访问和控制计算机硬件资源
很多人看过Linux多用户命令行模式下的样子,也看过Linux桌面环境的样子,于是乎就认为下图这种状态的Linux指的就是Linux内核;实际上,这是一个误区,你可以理解为Linux把图形软件关掉了;用于做服务器的Linux常常这么做,因为这可以节省一部分的硬件资源,特别是内存
为什么面试的时候会经常被问到看日志的命令以及常用的应用监控命令,应为系统所在的服务器可没有任务管理器给你点呀!
Shell 与 Terminal
什么是Shell
你可以理解为Shell是包在内核的外面的一层壳,我称它为外壳。你想叫内核干活:“老子的意大利跑拿出来”,你直接跟内核说,人家是听不懂的,你也没招给内核喊话
此时你拿着命令找到Shell,问老子的意大利炮呢?Shell不管你问的是什么,拿到命令后去查,这个命令是不是我自带的(比如pwd),还是某个应用程序的(比如前面用的neofetch命令),或者是配置在环境变量中的(经典java命令),没找到就会出现下图这种:
若是找到了,Shell会将这些命令转化成内核能理解的语言并传给内核, 内核执行命令完成后将结果返回给用户或者应用程序
Bash 也是Shell的一种,而且是我们非常常用的Shell,另一个比较著名的是Zsh(被吹爆的Shell)
什么是Terminal
Terminal:终端同样属于一个应用程序,当你打开了一个终端,操作系统会将终端和Shell关联起来,简单来说,Terminal就是用户和Shell之间的一个桥梁,你在终端的输入都会被发送给Shell,文章上面说的那个黑乎乎的界面,也属于一个Terminal
简单来说,终端负责给用户输入命令,而Shell负责解释输入过来的命令
常用的终端有:
可喜可贺的是,微软在2020年的时候发布了Windows Terminal,并且支持了部分的Linux命令,着实让那些使用WSL(Windows中运行的Linux子系统)和Linux虚拟机的同学兴奋了一波
什么是发行版
Linux发行版排行网站:distrowatch.com/dwres.php?r…,能一定程度上反应排名,又一定程度上没法反应排名,仅供参考,Linux老粉心中有自己的排名
发行版的组成:
- Linux内核:核心
- GUN工具:例如引导加载程序、Shell、GCC编译器,GNU软件和工具与内核共同构建成一个可用的操作系统
- 桌面运行环境:用于跟用户交互的图形界面环境,如GNOME、KDE、DDE,不同的桌面运行环境差异也比较大
- 显示服务与显示管理:显示服务用于输出图形界面,显示管理是进入桌面前,输入账号密码的图形界面
- 启动引导工具:就是开机后,首先会进入加载引导,弹出一个页面并询问你要进入哪个系统
- 包管理器:对于Linux来说,软件即是包,所有的软件安装卸载都是通过包来实现的,包括依赖管理,安装更新,卸载软件,都离不开包管理器
各发行版的理念不一致,对上述的部分进行修改定制或深度定制,或者重新实现的都有,所以发行版很多,看你喜欢哪个
没有实际使用过桌面发行版很难理解其中的区别,只感觉每个都是不一样的系统,非常建议刚接触Linux的同学使用虚拟机先安装两个自己感兴趣的发行版试试,相信你的体会会更深刻
介绍一下常用的三系发行版
Debain系
Debian 一直维护着至少三个发行版本:稳定版(stable),测试版(testing)和不稳定版(unstable)
Debain通过apt-get 和dpkg两个工具组成一个包管理器
dpkg:用来安装,删除软件包文件,怎么理解呢,假如我们下载了一个安装包,以.deb结尾,我们认为这个安装包是可以被dpkg解析并安装的
apt-get:主要从配置的网络软件源中,搜索、安装、升级、卸载软件等
$ sudo dpkg -i wps.deb -- 安装被打包成deb文件的wps软件包
$ sudo apt-get update --更新已存在的软件包
$ sudo apt-get install sougoupinyin --从配置的源中搜索搜狗拼音这个软件包
基于Debain系,衍生出了很多非常优秀的发行版,他们的排名很高,使用人数也非常的多
- Ubuntu:大名鼎鼎,吸收了Debain的优点,再强化更多的优点,一开始使用Gnome桌面环境,后来改用了Unity,从18.04LTS起换回了脱胎换骨的Gnome3,据说是对新手非常友好的版本,但是我接触Ubuntu是非常后面的事情了,所以我也没啥感觉
- Deepin:在中国,说起Linux发行版,Deepin是必逃不开的话题,有些人认为:“不过是套了一层皮,内核还是外国人写的,不能算国产系统”;有些人认为:“桌面环境优化的太差了,牺牲了性能”;这些争议在 「如何看待 Deepin 操作系统创始人王勇离职? - 知乎 」后更甚。不管怎么说,都不能否定Deepin对开源做出的贡献,并且Deepin一直通过Wine 来移植Windows软件,让Linux用户也能用上微信、QQ等国内常用的软件,对于Deepin来说,我任报有很大的期待
- Mint:基于Ubuntu衍生的发行版,不同的是,Mint官方维护了三种桌面环境供你选择,分别是 Cinnamon、MATE、XFCE
红帽系
作为一个Java开发,你可以不知道Ubuntu,但你绝对不会没有接触过Centos
红帽系的包管理器采用YUM和RPM的方式,常用于作为服务器的版本,平时也不太用折腾,本文就不详细讨论了
- Redhat:为企业打造的Linux系统,特点是稳定并且收费,非常适,一般大型企业的重要服务器都是用的rhel系统,rhel大概是最经典的Linux发行版
- Centos:Redhat的社区开源版,同时也是Rehat的试验田,有什么新功能先往Centos塞,稳定后再放到儿子身上
- 其他......
Arch系(我最喜欢的系列)
Arch发行版,是一个非常硬核的发行版,连安装都不给你图形界面
Arch系算是我目前最喜欢的Linux系,其包管理器是Pacman,说一下Arch系的一些特点:
- 简洁:Arch的设计理念,避免不必要的添加和修改,从安装开始,就定制你想要的一切
- 🌟滚动更新🌟:Arch Linux 是滚动升级的发行版,一次安装,永久更新,请记住这点,这是非常厉害的特性
- 🌟AUR🌟:在Arch社区,大量的软件爱好者帮你编译好了软件,安装软件简直不要太轻松,而且不需要担心版本问题,基本上最新版发布后很快会同步到AUR,妈妈再也不用担心我装软件装到心慌慌了
- 🌟ArchWiki🌟:号称Linux知识库的Wiki可不是开玩笑的,其详细程度,内容的丰富程度超乎你的想象
- 桌面环境随心换:用腻了桌面环境?Arch只需要几条命令就可以帮助你切换到其他桌面环境
- 内核版本切换:可以切换内核版本的原因导致Arch能支持的设备比其他发行版多太多了
当然Arch也不是只有优点,安装/使用难度偏大、久了没更新容易滚挂、容易滚出Bug都是不可忽视的缺点,如果你是一名新手,建议是先不要上手Arch系
基于Arch的发行版: 👉Manjaro (曾用于当作主力系统)
Manjaro是源于德国的一个Arch系Linux发行版,不仅保留了Arch系的优点,并且屏蔽了Arch发行版操作的复杂性
你可以这么理解Manjaro
由于Arch太复杂,于是有人把Arch根据各种不同的搭配进行定制,并且统一了风格,标准化了配置,让你通过简单的安装步骤就能得到一个开箱即用的Arch系统
目前,Manjaro官方维护了三个不同的桌面环境:Xfce、Gnome、KDE
但是!由社区维护的桌面环境常保持在六个以上,其中还包括了Deepin贡献出来的开源桌面环境DDE,值得一提的是,当时Manjaro社区还嫌弃过DDE,说其太难维护了,差点被放弃的说😥😥😥
我们常说的 Ubuntu Gnome,Centos Unity,Manjaro KDE等,前者指的是发行版,后者指的是桌面环境
给大家看一下网友们都怎么定制自己的桌面环境
使用KDE的同学:
使用Gnome的同学:
使用Deepin的同学
一些个人观点
对于开发者来说,调教一个适合自己的Linux系统简直不要太香,但是硬件的更新换代,也给各Linux桌面发行版带来了一些挑战
硬件比较新时需要关注内核版本
自从Ryzen二代,AMD YES开始,各路硬件和笔记本急速迭代,而一些Linux发行版的内核是不常更新的,也就导致了一些新的设备特别是笔记本会无法兼容一些Linux系统
对于Linux,我认为最大的痛点有两个
第一个是软件生态:
当你兴致冲冲的装好Linux,准备下个微信,去官网人家说不支持,好吧那就下载个浏览器吧,你常用的XX浏览器说不支持,那就看个视频吧,装个视频播放软件,只能播放视频。。。。。。什么玩意
对于当下的大厂来说,很少听说有维护Linux版的,道理很简单,只赚一小部分人的口碑,但是不赚钱,还要砸钱,Linux软件的生态,只靠开源爱好者来说是不够的,不仅需要像深度公司这种寻求开源变现道路的公司积极贡献,还需要各大公司牵头,也许有这么一天吧
第二个是硬件驱动:
多少Linux爱好者折戟于显卡驱动,多少Linux爱好者埋葬于双显卡问题,多少Linux爱好者看着新买来的AMD Ryzen,却没法在自己最喜欢的Linux发行版上Yes起来
不说了,心好leng痛!