-
第一章Linux操作系统概述
Linux操作系统诞生于1991年,发展至今将近30年,从不起眼的个人兴趣爱好所致的小玩具,发展成为信息技术领域近乎垄断的基础系统软件。
-
●1.1操作系统概述
操作系统存在与各种计算机系统中,是一种基础系统软件,跟一般的应用软件有很大的不同,它是人与计算机系统的交互接口,是计算机中各种软硬件资源的大管家,是计算机系统协调一致工作的总指挥。在操作系统的发展历史中,Unix操作系统是一个非常重要的系统,它的许多设计思想影响深远,在现代操作系统中仍然发挥着作用。本课程的主角Linux操作系统就深受Unix系统的影响,被称为类Unix系统。本节简要回顾这些操作系统的发展史。
-
●1.2Linux发展历史
Linux操作系统是1991年诞生和发展起来的,起初的Linux系统只是林纳斯个人的兴趣爱好,谁能想到经过30年的发展,如今成为操作系统领域绝对的霸主,几乎所有的TOP500超级计算机都是Linux操作系统,更有数不清的服务器上运行着各种Linux发行版。Linux的发展也与自由软件和开源软件有着密不可分的关系,目前开源运动的发展继续推动和支持着许多领域中的软硬件技术的快速发展。
-
●1.3Linux现状及展望
Linux发展不仅关系到计算机系统使用的操作系统,它也是许多热门应用的基础,大数据、云计算、人工智能和物联网等技术都与Linux操作系统关系密切,许多技术的研发和运行环境都是Linux操作系统为基础的。我国的国产操作系统也大部分都是基于Linux内核或者发行版发展和建立起来的。
-
●1.4Linux内核与发行版
Linux其实是一个操作系统内核,与许多其他软件部件集成在一起才能构成完整的操作系统,称为Linux发行版。而Linux内核自身依然在不断发展,所以有自己的内核版本,与各种发行版的版本号不同。Linux内核可以在kernel.org上方便的获得,借此学习内核源码,也可以重新编译内核。已知的Linux发行版很多,如何选择发行版常常使人产生困惑,可以先选择经典的发行版学习,包括国产Linux操作系统,例如openEuler。
-
●1.5Linux接口介绍
操作系统的接口就是提供给用户使用操作系统的途径。Linux操作系统提供了基于图形界面GUI的桌面管理系统、基于字符界面的命令行接口CLI和基于系统调用的编程接口API等三种接口。Shell脚本是基于命令的,所以可以认为是属于CLI接口方式。
-
第二章Linux系统安装与更新
Linux系统的安装需要一些步骤,首先是映像文件和启动介质的准备,然后是安装中逐步选择一些安装选项,开始系统安装之后需要等待一些时间,之后重启就可以开始使用了。操作系统发行之后,一般都会不断进行更新升级,就是修补发现的问题,或者增加新功能。所以安装操作系统之后,通常还需要进行更新,更新需要通过网络获取更新包,所以更新的前提条件之一是保证网络能够正常访问互联网。
-
●2.1安装Linux系统
Linux系统的安装有多种方式,基本的方式是使用启动介质启动后开始安装,包括光盘和U盘;也可以采用网安装的方式,适合企业内批量安装系统,降低管理员工作强度。启动安装Linux向导之后,需要经过一些步骤,确定一些安装选项,主要包括安装位置、磁盘分区、挂载点、文件系统类型、初始用户、时区、软件包等的选择。安装结束就可以开始使用系统了。
-
●2.2更新Linux系统
操作系统发行之后,新出的一些补丁或者修复需要应用到安装的系统中,所以安装后的操作系统一般都要通过网络对系统进行更新和升级,主要是修补漏洞或者缺陷,有时候是增加一些新功能。基本的更新方式是通过包管理器进行更新,但是各个系统使用的管理器会有不同,这里介绍的是常见的yum和apt,其他还有pacman、brew等,使用方法大同小异。
-
●2.3初始环境配置
安装后的系统一般就可以满足使用的基本需求,但是还有一些可以进一步调整的地方,便于后续的工作运行,例如桌面环境、网络配置、中文环境、时间和输入法等,都是根据需要进行个性化调整的。
-
●2.4虚拟机介绍
虚拟机软件可以提供一个虚拟的硬件环境,在其中安装和使用另一个操作系统,使得在宿主系统中安装多个操作系统实例成为可能。学习操作系统管理的时候,基于虚拟机可以方便地进行各种操作,即使出现问题也可以方便地进行恢复。这里主要介绍的是虚拟机软件VMware Workstation和Virtualbox,另外在Linux环境中常用的还有Qemu+KVM方案。对虚拟机的学习和使用,也有利于理解企业生产环境中使用的容器和虚拟技术,可以进一步学习如何使用Docker和华为的iSulad等。
-
●2.5获取帮助
帮助系统是为用户提供操作辅助信息的,主要作用是指导用户如何使用系统,帮助用户解决使用过程中遇到的各种问题。这里主要介绍在Linux中常用的man和info工具,可以称为联机帮助手册。通过联机手册,用户可以查阅基本命令、系统调用、库函数等的用法。但是联机帮助手册并不是教授如何使用系统的基础教程。
-
第三章Linux常用命令
使用命令控制和管理系统是Linux操作系统的一种风格,虽然Linux也有类似与Windows和Mac OS之类的桌面系统,但是还是有许多事情需要使用命令来完成。通过实践会发现使用命令的方式完成工作会更加直接和方便。但是初始学习使用命令的时候,相对于学习图形界面来说,会抽象一些,有一些难度。
-
●3.1重启和关机
重启和关机是使用系统最基本的两个操作,这里要介绍重启和关机的多种方式,也介绍相关的一些背景知识。
-
●3.2查看文件
查看文件的内容可以使用编辑器,但是在Linux系统中可以是用一些命令直接查看到文件的内容,而无需启动编辑器,因为并不需要进行编辑。这里要介绍四个可以查看文本文件内容的工具:cat、more、less和zless。其中,cat命令的作用不仅仅是查看文件内容,它是将多个文件进行首尾拼接,常常通过管道与其他进行字符处理的命令组合使用。
-
●3.3文件与目录
Linux系统的文件系统采用了树形结构的多级目录组织形式,目录和文件都是文件系统树上的结点。本节要介绍关于Linux中常用的与文件和目录相关的命令,这些命令操作的对象就是文件或者目录,包括复制、移动、删除、创建等。
-
●3.4处理字符和文件
在系统管理任务中,经常需要进行字符处理,包括对文件内容中的字符进行处理,本节要介绍grep、xargs、cut、sed和awk等工具,可以帮助用户完成许多复杂的字符数据处理任务。
-
●3.5压缩和打包
为了节省磁盘空间,可以对文件进行压缩处理,减少文件占用的存储空间大小。Linux系统中有多种压缩工具,本节介绍常用的gzip工具的用法,其他还有bzip2和xz等,压缩算法不同,但是用法相通。打包工具tar是一种备份用的工具,但是因为常与压缩工具配合使用,所以在本节一并介绍。
-
●3.6校验工具
校验工具通过计算校验码值,可以帮助用户确定获得的文件是否为原始文件。本节要介绍两种校验工具的使用方法,就是MD5和SHA1。在进行系统安装之前,利用校验工具可以验证下载的系统安装映像文件的正确性。
-
●3.7命令组合
Linux中的命令经常组合起来使用,完成一些复杂的功能,这是传承了Unix系统的工具箱思想。工具箱中的每个命令就像一样工具,可以完成某种单一的功能,但是通过命令组合,就可以相互配合完成更加复杂的任务了。这里要概要介绍管道“|”、命令与“&&”和命令或“||”的使用,详细的例子会在后续一些章节中用到的时候再具体讲解。
-
第四章Linux系统管理
本章要讲述一些实现Linux系统管理任务的命令,包括监控系统资源状态、管理软件包、用户和用户组、磁盘、内存、日志、计划任务、设备和服务等。这些命令的使用并不困难,但是需要先理解和掌握一些关于操作系统的背景知识。
-
●4.1系统启动
本节介绍Linux操作系统从上电自检到启动完成的主要过程。
-
●4.2系统资源状态监控
管理员要管理系统,首先需要能够了解系统各种资源当前的情况,综合起来就是整个系统的情况。本节要介绍监控资源状态的命令,包括磁盘、内存和进程等。
-
●4.3用户管理
本节介绍如何在Linux系统中常使用的两种软件包:rpm包和deb包,通常可以使用软件包管理器进行包的安装、卸载、更新,不同的Linux系统使用的包管理器也不尽相同。另外,还要介绍源码包和相应的安装过程。
-
第五章Shell编程
本章要讲述Shell编程的基础知识,这是Linux系统管理员的基本技能之一。Shell是一种面向过程的脚本语言,早期是为了Unix系统而开发的,用于自动进行系统管理任务,帮助管理员提高效率,并且降低管理成本。Shell语言有很多种,这里要讲述的是其中著名的Bash Shell,其他的还有Csh、Ksh、Zsh等。
-
●5.1Shell概述
Shell的发展有悠久的历史,早期出现在Unix系统中,称为sh,非常受欢迎。后续出现了多种各具特点的Shell,如Bash Shell、C Shell、Korn Shell和Zsh等。Shell是脚本语言,所以使用Shell语言编写的脚本程序无需经过编译的步骤,是通过解析器逐行执行脚本程序。
-
●5.2文本编辑器
文本编辑器的作用是编辑文本文件,用于编写各种程序文件和系统配置文件。本节要介绍几种不同类型的文本编辑器,分为字符界面和图形界面两大类,图形界面的编辑器很多,许多IDE中都包含了美观强大的编辑器,但是字符界面编辑器依然十分重要,消耗资源少,稳定高效。这里讲述的是著名的vi/vim编辑器的基本工作模式和使用方法,还介绍了如何配置vim和安装插件。
-
●5.3变量
在Shell中可以使用变量存储数据,变量的类型只有一种,无需预先声明即可直接使用变量。本节先介绍普通变量赋值和取值的方法。Shell中还有一些具有特殊功能和用法的变量,包括环境变量、位置变量和特殊变量等。
-
●5.4输入输出
输入和输出是程序的基本接口,完成人机交互。本节要介绍输入命令read和输出命令echo的多种基本用法。
-
●5.5表达式
在Bash Shell中,表达式有两种:算术表达式和逻辑表达式。与高级语言不同,Shell中表达式的求值通常需要借助命令来完成,本节要介绍的命令包括expr、bc、test等命令,另外还介绍了双小括号符号,可以支持对C语言表达式进行算术计算。逻辑表达式的计算是后续判断分支结构的基础。
-
●5.6分支控制
分支结构是面向过程的程序的基本结构之一。本节要介绍的包括基本的两分支结构和多分支结构,实现分支控制结构使用的命令是if和case。分支结构可以实现根据条件或者情况有差别地执行不同的操作。
-
●5.7循环控制
循环结构是面向过程的程序的基本结构之一。本节要介绍四种循环结构,包括for、while、until和select。通过循环结构可以帮助用户实现循环反复执行某些操作。
-
●5.8函数
本节介绍Shell函数,可以通过函数将一些Shell命令组织成有一定功能作用的程序段,便于代码重用,也可以节省代码篇幅。Shell函数有固定的样式,function关键字可以省略,虽然有小括号,但是并不包含形式参数,参数的传递依靠位置变量。函数的实现需要出现在调用之前,如果函数是在另一个文件中,则需要先用点命令把函数载入,然后再进行调用。使用函数名调用函数。
-
第六章Linux程序开发
本章中要介绍在Linux环境中,开发程序的编译过程,各个阶段使用的的工具构成的工具链,重点介绍gdb的使用,另外还要介绍make工具的使用方法,讲述makefile的编写规则。
-
●6.1程序编译和工具链
程序源码经过编译成为可执行程序,整个编译过程要经过几个阶段,包括预处理、编译和链接等。各个阶段都是建立在前一个阶段的基础之上,使用不同的工具,这些工具称为工具链。在Linux环境中使用的主要是GNU工具链。
-
●6.2编译器
编译器完成源码到机器代码的转换工作,这里要介绍的是gcc编译器。原来的gcc就是GNU的C语言编译器,后来发展成为多种语言的编译器集合。
-
●6.3调试器
程序调试是重要的程序开发环节,用于发现和改正程序中的错误,调试器就是帮助用户可以跟踪、分析和发现问题并加以修改的工具。这里要介绍的是GNU的调试器gdb的使用方法,包括运行程序、设置断点、单步跟踪和打印值等命令。
-
●6.4make与makefile
利用make工具,可以在程序编译时仅重新编译修改变化的源文件,避免整体重新编译项目的所有源码文件,从而减少编译开销。make工具需要配合makefile文件工作,该文件的基本功能是描述文件之间的依赖关系,和产生目标文件所需要执行的命令。
-
●6.5版本控制与Git
项目开发的过程中版本不断迭代,版本控制工具用于管理项目的各种文档。版本控制工具分为集中式和分布式两种,典型的代表是svn和git,本节讲述的是分布式版本控制工具git的基本知识和用法。还介绍了代码托管中心的作用,著名的github就是代码托管中心,而国内的则是码云gitee。
-
第七章服务器管理
本章要介绍Linux服务器上常见的基础服务器管理,包括Ftp服务器、Web服务器、DNS服务器、SSH服务器和Samba服务器等。
-
●7.1服务器管理概述
本节概要介绍了多种服务器的基本功能和应用场景。这些服务器通常也是其他应用开发环境的基础,掌握这些服务器的安装和配置等运维知识,对于各种研发环境的构建是非常有益的。
-
●7.2FTP服务器
FTP服务器是常用的文件服务器,基于文件传输协议实现文件传输,因为是明文传输,所以缺乏安全性。服务器端和客户端先建立命令连接,然后通过数据连接传输文件,分为主动模式PORT和被动模式PASV。通常传输采用的是被动模式。
-
●7.3WEB服务器
WEB服务器的作用是相应客户端的请求,基于HTTP协议实现向客户端发送超文本页面文件的功能。本节介绍的是应用广泛的Apache服务器的管理,包括设置监听端口、文档根目录、目录别名、访问用户和权限等,还介绍了在一台服务器上构建多个虚拟站点的方法。