Bash for DevOps

2024 年 8 月 28 日 | 阅读 9 分钟

在计算机的早期,处理数据或执行操作的计算机与提供指令以进行处理的工具是分开的。

一方面,终端用于向计算机发送命令。另一方面,我们有计算机,它是一种处理命令的硬件。

如今,有些计算机可以通过图形用户界面(GUI)提供命令并执行计算。但是,对于某些任务,访问命令行或终端通常比使用 GUI 更有效。

我们可以通过终端发送命令以编程方式完成这些任务。例如,在终端中处理文件比在 Windows 资源管理器等图形环境中使用文件更快、更有效。我们还可以使用终端来启动和执行开放的、可重复的任务,例如 Jupyter Notebook、Python 和 GIT。

在了解 Bash 之前,我们需要了解什么是Shell。Shell 是计算机使用的主要程序,用于接收命令代码。这些命令可以通过终端输入和执行,终端允许我们通过键盘键入命令来控制计算机,而不是使用鼠标或键盘在 GUI 中点击按钮或下拉菜单。

Bash

Bash 也被称为“Bourne Again Shell”。它是 Shell 的实现,它允许我们高效地执行许多任务。我们可以快速使用 Bash 通过命令行对多个文件执行操作。我们也可以像 Python 一样编写和执行 Bash 脚本,这些脚本可以在不同的操作系统上执行。在终端中使用 Bash 是与计算机、GUI 和命令行交互的强大方式。Bash 是互补的;通过同时了解两者,我们可以极大地扩展我们可以用计算机完成的任务范围。

使用 Bash 命令,我们可以高效地执行许多任务,并跨 Linux、Windows 等操作系统实现自动化和复制工作。

我们可以在命令行上运行的常见任务包括以下内容:

  1. 检查和处理当前目录。
  2. 更改目录。
  3. 创建新目录。
  4. 解压缩文件。
  5. 在计算机上查找文件。

Bash 的特性

使用终端 Bash 为我们提供了:

  1. 轻松导航计算机以访问和管理文件和文件夹。也就是说,我们可以轻松地导航计算机目录。我们可以快速有效地同时处理许多文件和目录。
  2. 我们还可以运行提供更多命令行功能的程序,例如 GIT。
  3. 我们还可以从计算机上的特定目录启动程序,例如 Jupyter Notebook。
  4. 最后,在 Bash 的帮助下,我们可以为跨 Windows、Mac 和 Linux 等许多不同操作系统上的这些任务使用可重复的命令。

DevOps 之前

它是一个瀑布模型和构建解决方案的传统方法。之所以称为瀑布,是因为我们拿出所有单独的需求和项目的各个部分,然后它们相互级联。

什么是 DevOps

DevOps 是开发团队和运营团队之间的协作,能够为我们的最终用户持续交付应用程序和服务。

DevOps 的好处

让我们讨论一下 DevOps 的一些好处。它们是:

  1. 持续交付软件。它使我们能够持续发布新功能,同时确保软件质量并对其安全性有信心。
  2. 它使组织内从事软件交付的团队能够更有效地协作。
  3. 部署过程从一个充满压力和应急计划的事件转变为一个更容易的部署。
  4. 我们编写的实际代码的效率在于使用各种可用工具进行扩展的能力,这使我们能够根据需要引入和扩展团队,并减少运行软件的团队。
  5. 错误可以更早、更快速地修复,并在任何内容推送到生产环境之前就被捕获。
  6. 我们正在寻求提高实际发布的安全性。因此,安全性的实际概念是我们所有工作的中心。
  7. 最后,使我们能够减少错误数量的原因是手动干预大大减少。对脚本环境的依赖性更大,我们可以对其进行测试和验证其安全性、可靠性和效率。

Brian Fox 为 GNU 项目创建了 Unix Shell 和命令语言 Bash,作为 Bourne Shell 的免费软件替代品。它于 1989 年首次发布,此后,大多数 Linux 发行版、Apple 的 macOS Mojave 以及早期版本都将其作为默认登录 Shell。Windows 10 也提供了一个变体,并且是 Solaris 11 中的默认客户端 Shell。

Bash 是一个命令处理器,通常在文本窗口中运行,用户在其中键入会导致操作的命令。Bash 还可以读取和执行 shell 脚本文件中的命令。像所有 Unix Shell 一样,它支持文件名通配(通配符匹配)、管道、here 文档、命令替换、变量和用于条件测试和循环的控制结构。关键字、语法、动态读取的变量和其他基本语言特性都复制自 sh。其他特性,例如历史记录,则复制自 csh 和 ksh。Bash 是一个符合 POSIX 标准的 Shell,但带有许多扩展。

Shell,它是对它所替代的 Bourne Shell 的名称以及“born again”的含义的文字游戏,是 Bourne Again Shell 的缩写。

Bash 在 1.03 版本(1989 年 8 月)中存在一个安全漏洞,名为 Shellshock,在 2014 年 9 月初被发现,并立即导致了网络上的各种攻击。修复这些错误的补丁在发现错误后不久就已提供。

DevOps 中的 Bash 脚本

因此,所有开发管理人员都应该掌握一门脚本语言作为他们的第一项技能,以帮助他们处理服务器、软件和硬件。它们是学习成长的基础,并且非常强大。Bash 仍然在使用,是的。如果您查看普通的 Linux 或 UNIX 系统,您会发现它带有几个 shell 脚本。

大多数现代 Linux 发行版仍然使用 Bash。它是大多数系统初始化的默认 Shell,包括 System V init 脚本。它是一种用于 Shell 的脚本语言,您必须了解它才能维护 Linux 服务器。制作 GUI 应用程序很难,但这是值得的。

我已经将脚本用于指定的目标,以及许多其他目标。

您可以使用脚本在系统启动时初始化任何内容。因此,无需手动劳动。

  1. 要启用/禁用某些功能,您可以创建一个脚本,单独安装每个需求并根据用户输入构建代码。
  2. 我们正在合并杀死或启动多个程序。
  3. 通过观察,在大型文件数据库中识别一些模式。
  4. 因此,要自动化的事物列表不断增加。
  5. 令人难以置信的用途

启动脚本(/etc/init.d)

  1. 技术人员用于自动化许多计算机维护任务,例如用户帐户创建等。
  2. 下载软件包的工具,更多信息
  3. 程序的启动脚本,特别是对于无人值守的程序(例如,从 cron 或 at 启动)
  4. 所有需要自动化的用户

为什么有人会使用 Bash?

与其他 CLI 一样,Bash 被需要精确处理文件和数据的计算机程序使用,尤其是在数据量很大时。数据必须被搜索、排序、处理或以其他方式处理。Bash 最常见的用途包括:

  1. 系统管理员使用 Bash 系统地、一致地管理系统。系统管理员使用 Bash 进入系统并检查系统配置和互联网连接,以调试运行不正常或不符合预期的系统。此外,系统管理员使用 Bash 脚本来维护和设置系统、监控操作系统以及分发软件补丁和更新。
  2. 软件专业人士使用 Bash 来完成许多开发任务。软件专业人士使用 Bash 来完成许多开发活动。
  3. 使用 Bash,可以实现软件开发任务的自动化,例如代码编译、源代码调试、变更管理和软件测试。
  4. 网络工程师利用 Bash 来测试、配置和优化业务网络上的网络性能。
  5. Bash 是一种编程语言,计算机科学家使用它来管理研究系统并对它们进行研究。
  6. 高级用户和爱好者都使用 Bash 与他们的计算机进行通信、运行应用程序和管理它们。

除了经常交互式使用外,Bash 还可以用于构建 shell 脚本。Bash 脚本可以用于自动化几乎任何计算机过程,并且 Bash 脚本可以立即运行或定期运行。

Bash 实际上是如何工作的?

从表面上看,Bash 似乎是一个简单的命令/响应系统,用户输入命令,Bash 在这些命令运行后返回结果。然而,Bash also 也是一个编程平台,并且允许用户编写接受输入并使用 shell 命令在 shell 脚本中生成输出的程序。

Bash 的一个基本命令 ls,只做一件事:列出目录内容。单独使用时,此命令列出当前工作目录中的文件和子目录的名称。

ls 命令有许多参数可以修改结果的显示方式。与 ls 命令一起使用的一些常用参数包括:

-l

使用更长、更详细的列表格式,包括文件权限、文件所有者、组、大小和创建日期/时间。

-a

列出所有文件和子目录,包括那些传统上被隐藏的文件。

-s

显示每个文件的大小。

-h

以可读格式显示文件和子目录的大小,使用 K、M、G 等表示千字节、兆字节和千兆字节。

-R

它告诉我们当前工作目录下的所有文件和子目录的递归列表。

通过将一个命令的输出用作另一个命令的输入,Bash 可以组合命令。例如,即使使用 -R 参数指定列表应递归,也可以使用此命令列出文件系统上的每个文件。

上述命令返回的记录太多,人类难以理解,尤其是在从系统根目录轻松访问时。

当使用管道符号(竖线,或 "|")将目录列表的输出管道传输到 grep 命令时,grep 命令只返回文件名包含指定文本模式的文件和子目录。这个命令:

此程序可用于查找特定文件,因为它只返回包含文本的文件。

通过使用 bash 命令行,交互地执行以下操作要简单得多:

管理文件和目录;监控网络配置;

修改配置文件(或任何其他文本文件)并比较两个文件。

示例

一些 bash 命令的例子是:

  • 基本命令通常单独执行,或与参数和变量结合执行。例如,ls 命令除了参数外,还接受要列出的目录或文件的变量。
  • 管道将一个或多个命令的输出连接到其他命令的输入。
  • 列表用于允许用户按顺序执行多个指令。
  • 复合命令通过包含条件结构和循环(用于将命令重复执行一定次数)来促进脚本编写。
  • Bash 的一个独特功能,并非所有 CLI 都具备,那就是命令行编辑。通过按向上箭头键,可以检索 Bash 的命令历史记录。因此,可以更轻松地再次精确执行命令。这些先前的命令还可以通过复制、粘贴、删除或使用特殊键更改先前命令来在命令行上进行修改。
  • 对于新用户来说,Bash 的使用需要一些初步的了解,因为它是当前系统和网络管理的基本工具之一。一位来自 1992 年的时间旅行者,学习了 Bash,就可以立即在现代 Linux 系统上继续工作。

Bash 自动化是什么?

Bash shell 是一个强大的 Linux shell,它允许从头到尾自动化繁琐的任务。Bash Linux shell 不仅是 DevOps 的绝佳选择。数据集和测试配置也一样;用户每天都可以从逐渐学习、不断增加的 Bash 能力中受益。Bash 也是一种脚本和编码语言,它会让你逐渐适应。我们自 2012 年以来一直在有效地使用 Bash 进行编码,并且使用它的时间比这更长。

Bash 还适用于各种使用领域和用例。例如,您可以轻松地将其用于大数据处理,并且由于它内部或作为易于安装的软件包提供的海量文本处理工具,它似乎非常适合这项任务。它也非常适合备份和数据库计划及维护,处理大型文件存储解决方案,自动化 Web 服务器等等。

每当出现下一个问题时,在搜索引擎或各种 Stackoverflow 网站上进行一些研究,都会很快找到解决问题的答案,但也是一个成长和学习的机会。因此,这就像对一个学习管理员 vi 的人来说一样,其中也存在类似之处;每当出现一个问题时,解决方案就在手边。

这个迷你系列由三部分组成,这是第一部分;在其中,我们将研究 Bash 自动化和脚本基础。