1.6 现世:学习Linux
# 6. 雄起:Linux狮心之火
# 6.1 Linux的应用
上个世纪在个人计算机领域的胜利者是微软,微软通过将其强大的Office办公软件和Windows系列操作系统与Intel的x86芯片深度捆绑,构建了Wintel联盟这样一个软硬件利益共同体,实现个人计算机PC市场的垄断。所以对于普通用户而言平时可能难以意识到Linux在当今世界使用的普遍性。
简单来说,就是想吹一下啦:
# 网络服务器
应该说这也是Linux当前最热门的应用了,承袭于上个世纪Unix文化和Internet文化的交融结晶,Linux很好的继承了Unix高稳定性的良好传统。此外,得益于GNU计划发展出完善的基础工具软件和开源运动的蓬勃发展,Linux在网络服务方面有着丰富而完整的生态支持(www,web Server,File Server,Mail Server),并且几乎都是自由软件。因此,不管是在开发、测试还是商业生产环境,Linux都是极具性价比的解决方案。
# 企业关键任务
随着PC机的性能大幅提升且价格便宜(x86芯片),所以金融业和大型企业的环境在采购升级自己机房机器设备的时候,渐渐也选用与Intel相容的x86主机环境。但是过去企业的软件大多使用Unix操作系统平台的软件——此时Unix对”丑陋“的Intel芯片支持并不友好,所以选用符合Unix操作系统标准并且可以在x86上运行的Linux就成为了不错的选项。
时至今日,虽然Unix依旧在金融服务、通信设备、工控环境、数据库和一些大型平台占有一席之地,但是Linux的应用也非常普遍。尤其是对于中小微企业和初创公司,Linux是非常性价比友好的解决方案。
# 学术机构的高性能运算任务
学术机构的研究常常需要自行开发应用,以及一些进行一些计算密集型任务,比如工程界流体力学的数值模式运算、娱乐事业特效功能处理、软件开发者的工作平台和现在比较火热的机器学习任务等等。由于Linux的创造者本身就是个计算机性能癖,所以Linux有强大的运算能力。并且Linux提供有丰富和完整的开发工具链,因此Linux在这方面的优势是相当明显的。
另外,为了加强整体系统的性能,计算机集群(Cluster)的并行计算能力也发展的非常成熟了。由于计算机网络的发展还有计算机处理任务日益复杂,计算机集群的并行计算可以”把一份计算任务分成多份,然后交给多个主机去计算,最终再将结果整合“,由于通过高速网络使用到多部主机,将能够让原本需要很长运算时间的工作,大幅的降低等待的时间! 例如中央气象局的气象预报就很需要这样的系统来帮忙!而Linux操作系统则是这种架构下相当重要的一个环境平台!
# 个人桌面电脑
所谓的桌面电脑,其实就是在办公室使用的计算机。一般我们称之为Desktop系统。 一般Desktop需要运行以下的任务:
- 网页浏览:Google、Baidu、Bing
- 社交通讯:QQ、Skype、Facebook、Twitter
- 办公文档:Word、PowerPoint、Excel、WPS
- 电子邮件
- 影音娱乐:电影、音乐、游戏
这些计算机任务都是面向没有什么技术能力的普通用户,通过Desktop——图形界面窗口来让用户进行所见即所得的交互,Linux诞生早期及很长一段时间内发展及驱动力量都是工程师,对于窗口并没有那么多需要,所以一直以来Linux的图形界面都没有给人非常好的印象。
好在,为了推广桌面电脑的使用率和极客文法的推动,Linux与X Window System结合,X Window System作为一个软件进行运行在Linux上。目前应用最为广泛的两个Linux桌面环境是基于QT开发的KDE和基于GTK开发的GNOME窗口系统。并且对应WIndows上的应用,Linux也有对应的解决方案:
- 网页:Chrome、Firefox
- 社交:QQ
- 办公:LibreOffice、WPS、百度网盘
- 邮件:ThunderBird
- 影音:VLC
- 游戏:Steam
而且目前应用Web化——使用网页开发技术来开发跨平台的原生应用已经是很普遍的一种方案,而且随着计算机性能的提升和计算机网络的提速,很多原生应用提供的服务都可以通过网页来实现,Google是这个领域的先行者——推出基于Chrome浏览器开发的ChromeOS的个人PC,目前在国外的教育和部分办公领域已经赶超传统的Windows系统。
ChromeOS
ChromeOS是基于Gentoo——一个追求通过完整、定制化编译来获得极致性能的Linux发行版。
最早ChromeOS仅支持使用Web技术开发的应用——ChromeAPP;
随后又通过安卓虚拟化容器和兼容层,为ChromeOS提供了安卓支持;
通过一个轻量级虚拟机来管理Linux容器,为ChromeOS提供了Linux应用支持;
所以ChromeOS是极具可玩性的一个现代个人桌面电脑。
# 个人移动设备
自从 iphone4 在 2010 年面世之后,整个手机市场开始大搬风!智能手机市场将原本商务用的 PDA 市场整个吃掉!然后原本在 2010 年前后很热门的小笔记本也被平板电脑打趴了!在这个潮流下,Google 成立了开放手机联盟 (Open Handset Alliance),并且推出 Android 手机专用操作系统! 而 Android 其实就是 Linux 核心的一支,只是专门用来针对手机/平板这类 的 ARM 机器所设计的 [12]!
目前2019年的 Android 系统11 使用的就是 Linux kernel 4.14.x 版本,另外,调查中也显示,从 2013 年之后,Android 系统已经是全球最多人使用的手机系统。
::: IOS & Unix & Linux & Android
实际上早期iphone使用的IOS 就是基于 apple 的 OSX ,OSX 分两部分,一部分是 NEXT 图形环境,以及底层的 darwin :
- NEXT 是乔布斯出走苹果公司时开发的产品,他被请回 apple 时带回了 NEXT ;
- darwin 是基于 FreeBSD ,不过内核是最新的微内核理念的 Mach;
- 至少从表面来看,IOS/OSX 应该基于 UNIX 的系统。
而Linux 的内核是宏内核。我们常说的GNU/Linux 的上层软件基本是 GNU 项目以及其他软件。 但单纯的Linux 只是一个内核而已,因为GNU 软件是可以替换的。替换后的一个例子就是Linux变种——Android 。
:::
# 嵌入式设备
Linux是运行于硬件系统之上,为用户和应用程序提供交互和系统资源调用接口的程序,因此除了常见的个人计算机、服务器系统,其实家电产品、PDA、相机以及其它微型的计算机设备也是硬件系统,因为操作系统直接嵌入到产品中,理论上不会再发生变更,所以称之为嵌入式系统。
包括路由器、防火墙 、手机、交换器、机器人控制芯片、家电产品的微计算机控制器等等,都可以是Linux操作系统!现在很多常用的NAS系统也是安装的精简过的Linux系统。
# 云服务主机
传统基础设施服务商往往在一台主机上通过硬件虚拟化、操作系统虚拟化技术虚拟出很多虚拟机来为企业提供完整的操作系统环境,随着虚拟化技术不断发展,出现了很多更轻量、灵活的虚拟化技术,也衍生出Paas,Saas等云计算产业,但是服务器主机的操作系统也都是基于Linux操作系统。
虚拟化
所谓的“硬件虚拟化”指的是:在一部实体主机上面仿真出多个逻辑上完全独立的硬件,这个假的虚拟出来的硬件主机,可以用来安装一部逻辑上完全独立的操作系统! 因此,通过虚拟化技术,你可以将一部实体主机同时运行多个隔离的、不同规格的操作系统 ,以达到将硬件资源完整利用的效果。
桌面虚拟化、容器虚拟化、网络虚拟化也是我目前非常感兴趣在研究的方向呢。
# 6.2 如何学习Linux
# Linux 学习是不是很难?
对于本文集《Linux 入门》不难,因为《Linux 入门》中绝大多数还仅仅是普通的Linux操作系统的常用指令,仅仅是为了让可能会接触到Linux的人员能够像在Windows上进行日常操作那样平滑的操作Linux:
- 文件操作:通过常用的指令完成你以前在Windows文件资源管理器(Explorer)中的操作——复制、移动、剪切、粘贴;
- 基础技能:Linux对文件(文件、指令、设备)都有严格的权限设置,对应于相应的“用户”、“使用者”、“群组”、“使用权限”的概念;
- 文本编辑:对应于Windows的常青藤编辑器——记事本,Linux系统中最经典的文本编辑器是vim了;
- 应用管理:安装应用程序、卸载应用程序,对应windows10的软件商店,一般Linux发行版也会有相应的应用包管理工具;
上面的技能属于扫白技能——进入Linux的第一步,然而如果想要深入认知、管理和利用Linux,下面也是很重要的知识:
网络管理:网络工具,可以管理不同的网络接口,并设置不同的网络连接方案,这部分重要的基础是IP和路由的概念;
进程管理:类似Windows资源管理器,查看当前系统应用的资源占用情况,如果有必要可以终止掉运行中的进程;
硬件管理:Windows中设备管理器可以方便的查看和管理计算机上的硬件,虽然使用的机会不会很多,但了解硬件规格和在Linux上的存在状态还是比较重要的;
磁盘管理:如果存储空间不够,就需要增加新的磁盘分区,此外Linux还有一些高级存储管理特性;
安全管理:在红帽7发布后,Linux增加了很多的安全特性,如果不知道的话,很可能会出现你**“始终出错,但半天也找不到问题”**的情况;
日志管理:其实以后不管在软件开发,还是服务上线后的维护,一般会产生丰富的日志信息,通过日志信息往往能帮助我们迅速的定位并解决问题;
但是如果想要深度学习Linux 就不是简单熟悉一些指令就可以了,这可能涉及到:
- Linux 平台的网络开发——先学知识:计算机网络、TCP/IP源代码、Linux编程、网络协议设计、网络性能测试;
- Linux 内核的解读——先学知识:计算机操作系统、C高级编程、数据结构与算法、Linux内核;
- Linux 运维——先学知识:Web开发基础、http、网络安全基础、python、各种商业化工具;
- 虚拟化技术——先学知识:操作系统、网络技术、存储技术、Linux系统接口;
- 云原生技术——先学知识:Linux运维、微服务框架、kubernetes框架;
- Linux嵌入式开发——先学知识:计算机组成原理、自动控制系统、信号处理;
所以掌握指令只是“认识”Linux的第一步,真正应用Linux到某个方向的实处还需要 N 多其他先学知识,并不轻松。不过对于绝大多数普通人,最友好也最现实的方案还是在掌握了基础后根据兴趣和就业形势选择一个方向深入研究。