前言
Linux是一款自由、免费的操作系统,自20世纪90年代问世以来,经历了近三十年的发展,已成为极具影响力的操作系统。Linux系统支持众多的处理器架构,拥有大量的开源软件,以其稳定性、可靠性和灵活的可配置性,在各种计算机系统中得到了广泛的应用,除个人桌面系统以外,在其他所有竞争领域中几乎都占据主流地位。
Linux操作系统涉及的技术非常宽泛,深度上,从一般应用软件的安装使用到操作系统核心和运行机制;广度上,小到可穿戴设备、各种嵌入式应用到大型服务器和集群计算。因此,一本书远不能涵盖如此众多的内容。本书从实用性角度出发,希望能以一个较为典型的Linux系统为例,帮助读者熟悉Linux操作系统环境的基本使用和核心技术。
全书内容按以下章节组织:
第1章介绍UNIX/Linux操作系统的发展历史以及一些主流的Linux发行版。Linux系统继承了UNIX系统的优良特性,它的使用环境与UNIX也非常接近。学会使用Linux操作系统,在当今主流操作系统上基本上就不会有太大障碍。
第2章从操作系统的角度,介绍微型计算机系统的构成和Linux系统主要的核心模块——进程管理、存储管理、设备驱动、文件系统和网络连接。向下延展,这些模块分别对应处理器、内存、I/O子系统、磁盘和网络系统,向上扩展,这些模块则通过系统调用与用户空间进行信息交换。
第3章以目前较为普及的一款Linux发行版为例,介绍它的安装和使用环境。Linux系统的软件资源非常丰富,本书选择了其中较有代表性的几类作介绍。Linux桌面的特点更多在于其选择的多样性,图形化桌面软件的使用与其他操作系统并没有显著的区别,熟悉基本计算机操作的人员都可以很容易掌握。
第4章介绍命令行的使用方法。Linux是一个面向消费的桌面系统,具备优良的开发性能——无论是作为被开发对象还是开发工具。从本章开始,结合Linux的特点,介绍Linux操作系统与软件开发的相关内容。命令行接口是UNIX/Linux操作系统的特色。在Linux系统中,命令行方式开销极低,特别是在嵌入式Linux系统开发和应用中更是必不可少的工具。Linux主流的文本编辑器(如emacs、nano、vim等)都具有命令行方式。文本编辑器之于Linux操作系统是必不可少的。本书并没有花太多的篇幅介绍文本编辑器,尽管Linux系统推荐的编辑器vim和emacs都非常出色,但学习时间成本较高,且各人都有自己的使用习惯,不便于在一门课程中统一要求。建议读者在使用Linux系统的过程中学习其中的一款,相信对日后的工作将大有裨益。
第5章介绍shell脚本。Linux系统提供了多种脚本语言,shell只是其中之一。shell不仅构成了Linux操作系统的命令行环境,本身也是一套完整的编程语言。从系统启动到系统维护,Linux系统中大量地使用了shell脚本程序和脚本文件。掌握shell编程方法,读者可以更灵活地使用系统的各种软件。
第6章介绍Linux中比较重要的一些系统维护和管理工作,帮助读者理解操作系统的启动和初始化过程,其中重点介绍了软件包管理工具、网络管理、系统日志维护等方面的内容。用户管理已在第4章作了介绍。对于用户的零星调整,桌面环境通常都有便捷的图形化工具可以使用。
第7章介绍如何使用Linux系统进行软件开发。Linux提供了多种编程语言的开发环境,本章以C语言为例介绍主要开发工具的使用,学习本章需要有C语言编程基础。除编译器以外,GNU Make和版本控制系统也是软件开发必不可少的工具。GNU Make在本章介绍,版本控制系统由于篇幅较多,另立一章介绍。
第8章介绍目前最为普及的git版本控制系统。版本控制系统可以跟踪文件的变化、创建和合并版本分支、在不同分支之间切换,它是管理软件开发过程的重要工具,特别是在一个有多人参与合作开发的大型项目中,版本控制系统是必不可少的软件。
第9章介绍Linux操作系统内核的源码结构和编译方法。作为嵌入式操作系统,Linux也有非常广泛的应用。通过本章的学习,读者将初步形成嵌入式Linux操作系统内核移植的概念。
虽然Linux作为消费型操作系统完全胜任,但至少在现阶段, Linux还主要是当作开发工具使用的。本书大量内容也主要围绕如何使用Linux进行软件开发的相关问题而展开。本书要求读者具有基本的计算机操作能力和编程基础,具备程序设计思想。结合笔者多年教学经验,建议本书教学内容在一个学期内完成,每周安排3课时。具体教学时,第3章可以略过,第7章软件开发过程与第8章版本控制系统相关内容也可以选择穿插讲解。如能安排一定的实验时间,则教学效果更好。
限于笔者的知识水平和认知能力,书中肯定存在一些不当之处,恳请同行专家及读者批评指正。本书顺利成书有赖于Arm中国大学计划支持,在编写过程中也得到出版社编辑的多方协助,笔者在此表示诚挚的感谢。
作者
2019年春于南京