Linux自动化运维:Shell与Ansible(微课版)
上QQ阅读APP看书,第一时间看更新

1.2 知识准备

1.2.1 Linux操作系统简介

1. Linux操作系统

操作系统(Operating System,OS)是一组主管并控制计算机操作、运用和运行软硬件资源并提供公共服务来组织用户交互的相互关联的系统软件程序,同时也是计算机系统的核心与基石。操作系统需要处理管理与配置内存、决定系统资源供需的优先次序、控制输入与输出装置、操作网络和管理文件系统等基本事务,让应用程序可以与硬件交互,这些接口包括应用程序接口(Application Program Interface,API)、命令行界面(Command Line Interface,CLI)和图形用户界面(Graphical User Interface,GUI)等。

在通常情况下,企业使用的Linux指的是操作系统。Linux操作系统是一种开源的、支持多用户和多任务的操作系统,它的内核由Linus Torvalds(林纳斯·托瓦兹)在1991年发布,现在由Linux基金会维护和管理。Linux操作系统可以运行在各种计算机硬件平台(包括服务器、个人计算机、移动设备等)上。它提供了许多功能强大的工具,可以用于各种用途,如网络服务、网络管理、编程和系统管理、云计算等。

Linux操作系统主要由以下几部分组成。

(1)内核(Kernel):内核是Linux操作系统的主要组件,也是计算机硬件与其进程之间的核心接口,负责两者之间的通信,以及尽可能高效地管理资源。其主要作用有内存管理、进程管理、文件系统管理、设备驱动程序管理、网络通信管理、系统调用管理和安全防护管理等。

(2)系统库(System Library):系统库是操作系统提供的一组可供程序调用的函数库。它可以帮助程序与内核进行交互,以获取系统资源或完成其他操作。Linux操作系统库包括C库、数学库、网络库等。

(3)用户空间程序(User Space Program):用户空间程序是指运行在用户模式下的程序,它们不能直接访问内核,而是通过系统库与内核进行交互。Linux用户空间程序包括Shell(或称为命令行)、编辑器、守护进程(在后台运行的进程)等。

(4)图形用户界面:图形用户界面是指用图像的方式向用户呈现操作系统的界面,使用户能够通过图形化的方式与系统进行交互。Linux操作系统支持多种图形用户界面,如GNOME、KDE、Xfce等。

(5)应用程序(Application):应用程序是为用户提供特定功能的程序,如浏览器、电子邮件客户端、办公软件等。Linux操作系统提供了大量的应用程序,用户可以根据需要安装和使用这些应用程序。应用的范围覆盖从桌面工具和编程语言到多用户业务套件等各种软件。大多数Linux发行版会提供一个中央数据库,用于搜索和下载其他应用。

(6)文件系统(File System):文件系统是指操作系统用于存储文件和数据结构的地方。它提供文件的存储、管理和访问功能。Linux支持多种文件系统,如ext4、XFS、Btrfs、ZFS等。

(7)安装程序(Installer):安装程序是指用于安装Linux操作系统的程序,它可以帮助用户将Linux操作系统安装到硬盘或其他存储设备上。有多种安装程序可以用于安装Linux操作系统,如Debian Installer、Ubuntu Installer等。

(8)启动程序(Bootloader):启动程序是指用于启动Linux操作系统的程序,它负责加载内核并启动操作系统。Linux操作系统支持多种启动程序,如GRUB、LILO、SYSLINUX等。

(9)配置文件(Configuration File):配置文件是指用于配置操作系统和程序的文件,它可以帮助用户调整系统的行为和参数。Linux操作系统提供了许多配置文件,如 /etc/fstab、/etc/inittab、~/.bashrc等。

2. Linux内核和Linux发行版

术语“操作系统”通常包含以下两种不同的含义。

(1)指完整的软件包,这包括用来管理计算机资源的核心层软件以及附带的所有标准软件工具、注入命令解释器、图形用户界面、文件操作工具和文本编辑器等。

(2)在更狭义的范围内,指管理和分配计算机资源(即CPU、内存和设备)的核心层软件。

术语“内核”通常是指狭义的操作系统。虽然在没有内核的情况下,计算机也能运行程序,但有了内核会极大地简化其他程序的编写和使用,让工程师游刃有余地管理系统。之所以称为内核,是因为在操作系统中它就像果实的种子一样,控制着硬件(无论是移动终端、笔记本电脑、服务器,还是任何其他类型的计算机)的所有主要功能。

通常所说的Linux指的是广义的操作系统,而不是内核。但是,由于Linux内核是Linux操作系统的核心部分,所以常被混淆在一起使用。

现在的Linux内核由Linux基金会负责管理和维护。Linux基金会是一个非营利性组织,致力于为开源技术和社区发展做出贡献。它旨在促进Linux内核和相关技术的发展,并为开源社区提供支持和资源。林纳斯·托瓦兹现在仍然是Linux内核的主要负责人,他负责决定Linux内核的发展方向,并对提交的代码进行审核。但是,Linux内核的发展已经不再只依赖于林纳斯一人,而是由数以千计的开发者和维护者共同推进。

Linux内核的维护主要由内核开发者和社区维护者完成。Linux内核的维护工作包括代码审核、测试、合并、发布等步骤。Linux内核的代码托管在Git仓库中,经过严格的审核和测试后,才能合并到主线版本中。Linux内核的发布频率通常是每隔几个月发布一次。每次发布的版本都有一个版本号,如6.1.4。每个版本号由3个数字组成,分别表示主版本号、次版本号和修订号。

此外,Linux基金会还会举办各种活动和会议,如Linux内核峰会(Linux Kernel Summit)、Linux发行峰会(Linux Distribution Summit)等,以帮助内核开发者和社区维护者沟通交流,推进Linux的发展。

目前,基于Linux内核的企业和社区Linux发行版如下。

(1)Debian:Debian是一款基于Linux的开源操作系统,由志愿者组成的社区发布和维护。Debian适用于个人计算机、服务器、嵌入式设备等平台。Debian的特点在于稳定性和自由性,它提供了丰富的软件源,用户可使用包管理器apt进行软件的安装、升级和卸载。Debian每年会发布一个版本,分别是稳定版本(stable)、测试版本(testing)和不稳定版本(unstable)。稳定版本提供稳定的软件环境,适用于生产环境;测试版本提供最新的软件包,供用户测试和反馈;不稳定版本提供最新的软件包和源码,供开发人员测试。

(2)Ubuntu:Ubuntu是一款基于Linux的开源操作系统,由Canonical公司维护和发布。Ubuntu适用于个人计算机、服务器、移动设备等平台。其主要特点在于易用性和社区化,它提供了丰富的软件源和包管理器,并提供了丰富的图形化安装和管理工具。Ubuntu每年会发布两个版本,分别是长期支持(Long Time Support,LTS)版本和短期支持(Non-Long Time Support,Non-LTS)版本。LTS版本会提供5年的升级和技术支持,而Non-LTS版本只会提供9个月的升级和技术支持。

(3)Fedora:Fedora提供了一个强大的、可扩展的操作系统平台,并且注重用户体验,具有简单易用的图形用户界面和丰富的软件源。Fedora还注重自由和开源软件,是一款流行的服务器和桌面操作系统。Fedora项目是RHEL的上游社区发行版,红帽公司是该项目的主要赞助商,而成千上万独立于红帽公司的开发人员也为Fedora项目做出了贡献,使其成为最终整合到RHEL中的功能的理想测试平台。

(4)CentOS Stream:CentOS Stream是一款滚动发布的操作系统。它提供持续内容流,不断地收集最新的软件包,并在经过测试后发布。通过CentOS Stream可以提前获知红帽公司开发人员和工程师用于新版本RHEL的源码,通过它,开源社区成员可以与红帽公司开发人员一起为RHEL开发、测试以及持续交付分发上游做贡献,这使得CentOS Stream成为RHEL未来版本的预览。在发布新的RHEL版本之前,红帽公司会在CentOS Stream中开发RHEL源码,RHEL 9是在CentOS Stream中构建的第一个主要版本。

(5)RHEL:RHEL是由红帽公司开发的商业市场导向的Linux发行版,提供长达10年的支持服务,用户可以按照自己的计划进行升级并在需要时采用新的功能。作为一款开源操作系统,其源码可以自由获取和使用。RHEL是全球领先的企业Linux操作系统,已获得数百个云服务及数千个硬件和软件供应商的认证,可用于支持边缘计算或SAP(System, Applications & Products in Data Processing,思爱普)工作负载等特定的用例。RHEL内置了安全防护功能,如实时内核修补、安全配置文件、安全标准认证和可信软件供应链等,可满足当今对安全与合规的高度期望。RHEL经过优化,可以在服务器或高性能工作站上运行,支持广泛的硬件架构,如x86、ARM、IBM Power、IBM Z和IBM LinuxONE;支持在任何位置上部署和运行应用,包括物理机、虚拟机、私有云和公共云,能为现代IT和企业混合云部署奠定必要的运维一致性基础。

(6)openEuler:openEuler是一个开源的Linux发行版,由华为公司开发和维护。它的软件包管理方式和RHEL、CentOS Stream一致,但它提供了更多的应用和工具,并经过了深度优化,适用于企业级服务器、工作站、虚拟化和云环境。它提供了软件包的升级和维护以及软件生命周期管理的功能,还提供了开发者支持,包括文档、示例代码和技术支持。openEuler致力于提供稳定、可靠、安全的操作系统版本,并且注重满足政府、企业和科研机构的需求。

3. Shell简介和Shell版本

Shell是一种具有特殊用途的程序,主要用于读取用户输入的命令,并执行相应的程序以响应命令。Shell也被称为命令解释器,用户可以通过输入命令来控制操作系统和运行程序。

Linux Shell是一种在Linux操作系统中使用的CLI,其提供的文本界面方便用户与操作系统进行交互。通过命令行可以直接访问计算机,执行一些图形用户界面无法执行的硬件操作。

V1-1 Linux Shell简介

术语“登录Shell”是指用户登录系统时,由系统创建用以运行Shell的进程。尽管某些操作系统将命令解释器集成于内核中,但对Linux操作系统而言,Shell只是一个用户进程。当用户登录操作系统时,系统会启动一个Shell程序,用户可以通过该Shell程序输入命令来控制操作系统和运行程序。

设计Shell的目的不仅是用于人机交互,对Shell脚本(包含Shell命令的文本文件)进行解释也是其目的之一。为实现这一目的,每款Shell都内置有许多通常与编程语言相关的功能,其中包括变量、循环和条件语句、输入输出命令以及函数等。无论是专有系统还是开源系统,许多操作系统上都可以使用命令行。但是,通常它与Linux的关联更紧密,因为命令行和开源软件都可以让用户以不受限制的方式访问自己的计算机。Linux Shell的主要功能如下。

(1)提供用户界面:Linux Shell提供一种CLI,用户可以通过输入命令来控制操作系统。

(2)执行命令:Linux Shell可以执行各种内置命令和外置命令,完成各种操作。

(3)执行脚本:Linux Shell可以执行Shell脚本,实现自动化运维、系统管理和程序开发等功能。

(4)输入输出重定向:Linux Shell可以重定向输入输出,将命令的输入或输出重定向到文件或其他命令。

(5)支持环境变量:Linux Shell支持环境变量,环境变量可以用来存储用户自定义的信息,如路径、变量值等。

Linux操作系统中有许多不同版本的Shell,包括Bourne Shell、C Shell、KornShell、Bash等。其中,Bash是最常用的Shell,广泛用于各种Linux操作系统。

(1)Bourne Shell(sh):它由Steve Bourne(史蒂夫·伯恩)在1977年开发,是UNIX操作系统的标准Shell之一。sh提供一组命令用于执行系统任务、编写脚本等。sh是Linux操作系统中最基础的命令解释器之一,通常用于执行系统脚本和命令。它的语法简单易学,适合初学者使用。

(2)C Shell(csh):它由Bill Joy(比尔·乔伊)在1978年开发,是一种对sh的改进版本,提供了更丰富的功能和更方便的语法。csh具有C语言风格的语法,并且与sh不兼容。

(3)KornShell:它由贝尔实验室的David Korn(戴维·科恩)在1983年开发,是一种对sh的改进版本,在保持与sh兼容的同时,提供了更丰富的功能和更方便的语法。

(4)Bash(Bourne Again Shell):这款Shell是GNU项目对sh的重新实现,Brian Fox(布赖恩·福克斯)和Chet Ramey(切特·雷米)是Bash的主要作者。Bash是许多UNIX和Linux操作系统的默认Shell。

在这些Linux Shell中,Bash是目前流行的选择,并且被广泛用于各种Linux发行版中。它具有许多强大的功能,包括命令行自动补全、命令历史记录和脚本等。总的来说,Linux Shell在过去几十年中不断发展和演进,为用户提供了一种方便的方法来控制和管理Linux操作系统。可以使用以下方法查看Shell的基本信息。

查看当前设备的默认Shell。


[opencloud@server ~]$ echo $SHELL
/bin/bash

查看当前Linux操作系统安装的所有Shell。


[opencloud@server ~]$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

用户可以通过bash命令的--version参数或环境变量BASH_VERSION来查看本机的Bash版本号。


[opencloud@server ~]$ bash --version
GNU bash, version 5.1.8(1)-release (x86_64-redhat-linux-gnu)
[opencloud@server ~]$ echo $BASH_VERSION
5.1.8(1)-release