我希望拥有的 Shell 简介

2025-05-25

我希望拥有的 Shell 简介

嘿,过去的我。希望你一切顺利,尽量减少那些可怕的遗憾。在这方面,我会帮你。至少是那些与职业相关的遗憾。对于那次在 OkCupid 上被推土机撞到的约会,我无能为力……其实,那是下次再说吧。

所以我写信给你,过去的我,编程的自己,是为了让你快速了解一个重要的东西:Shell。未来的我(相对而言)更睿智,并且愿意提供帮助。我之前写过一篇类似的 Git Rebasing 指南,你(和其他人)都觉得很有帮助。这次我的文章内容更广泛,为学习和理解 Shell 及其重要性奠定了基础。

  1. Shell 是什么?
  2. Shell 操作
  3. 包管理器
  4. 点文件
  5. VIM
  6. 别名
  7. 脚本

Shell 是什么?

要真正理解 Shell 及其用途,你需要了解一些计算机科学背景知识。不用担心,其实并不多。

你使用 Mac,因为你拥有灵魂。你的 Mac 操作系统 (OS) 建立在 Unix 之上,这是一个流行的开源操作系统。Unix 的理念是模块化——程序应该简洁,并且只执行有限的、定义明确的功能。

计算机的Shell本质上是通过文本界面(通常称为“命令行”)直接访问操作系统功能的一种方式。可以这样理解:您通常通过双击图标来浏览文件夹。这就是使用图形用户界面 (GUI),因为有视觉效果来引导您。

Shell 允许您执行所有常规操作,但只能使用文本命令 - 没有图标可供查看、单击或拖动。

Shell 为何有用?

我能猜到你在想什么,因为我和你一样。你会问:“为什么用纯文本界面来操作电脑会更好?听起来很难,而且不太实用!” 但对于程序员来说,它们有两个关键的好处。

  1. Shell 可以完成许多 GUI 无法做到的事情。想要在本地运行网站并查看基于变更的实时更新?为代码库安装所需的软件包?运行 Gulp 或 NPM 工作流程?在电脑上开发原型应用?所有这些操作都需要 Shell。有些功能确实有 GUI 版本控制 - 例如,您可以通过 Shell 或 SourceTree 等应用程序使用 Git 源代码管理。但这些 GUI 永远无法提供您所需的全部功能。还记得 git rebasing 吗?在任何 GUI 上执行它都困难得多,甚至不可能。
  2. Shell 可以让你自动化原本耗时的任务。作为一名程序员,你会有很多重复的计算机任务,这会浪费你的时间和效率。Shell 可以让你将复杂的任务压缩成简单的命令来完成所有工作。

可见学习 Shell 对你的未来有多重要。说实话,学习过程确实有难度。但如果你不克服它,你的职业生涯就很难走远。

不同类型的贝壳

几乎所有计算机都有 Shell,而且 Shell 的种类也不同。你应该熟悉一下 Bash,因为它很可能是你的默认 Shell。之后同事会帮你设置 ZSH,不过那是以后的事了。一开始先专注于 Bash,本文的其余部分我会参考它。

Shell 操作

这部分需要耐心。很多时候,你会查看 Shell,发现所有基本命令都太过平凡,然后就放弃了学习。我们稍后再讲解最精彩的部分。现在,我们可以说是在“啃 Shell 的蔬菜”。

Shell 的操作有很多,篇幅已经够长了。不过我会分解最重要的几个基本操作,足够让你了解 Shell 的强大功能,并让你自己学习更精妙的细节。

你的第一个命令

你的 Mac 上应该有一个名为“终端”的应用程序,它可以运行 Shell。打开它,你会看到 Shell 以简单的文本提示符的形式出现。你可以在这里输入 Shell 命令。

一个好的启动命令是ls。它会显示当前目录或您所在计算机文件夹中的所有文件。如果您位于一个充满文本文件的文件夹中,您将看到每个文件的名称。

大多数命令也接受标志,这些标志会稍微改变其功能。它们的使用方法是-在命令中添加一个与字符配对的 。例如,使用ls和 标志的组合可能如下所示ls -1。此命令还会显示目录中的所有项目,但会显示在不同行中。

想查看所有标志?运行 ,使用 来man查看命令。你将看到所有你需要了解的 信息,包括它的功能以及所有标志!这也许是最重要的命令,因为它提供了所有命令的有用信息。经常使用它!lsman lsls

一些基本命令

ls这只是众多实用的基本命令之一。这里还有一些命令,我​​只会提供基本的概述。用 来检查它们man,运行几次,看看会发生什么!实验是学习的最佳方式。

  • pwd- 查看当前目录
  • cd- 导航到不同的目录
  • cd ~- 转到你的根目录
  • mkdir- 创建新目录
  • touch- 创建新文件
  • cat- 显示文件的内容
  • cp- 复制文件
  • rm- 删除文件或目录
  • wc- 获取单词数、字符数或行数
  • echo- 显示文本或其他命令的编译文本。非常适合测试命令。

还有一些稍微高级一点的,你应该花时间去学习。

  • Curl - 从服务器下载或传输数据。安装新东西时你会经常看到它!
  • Grep - 根据不同的模式或正则表达式(又称 regex)逐行过滤结果
  • 管道 (|) - 获取一个命令的输出并将其用作另一个命令的输入
  • Awk - 让您以不同的方式处理文本文件
  • Sed——使用正则表达式操作文件中的文本

如果您需要更具体的指南,请查看“学习足够的命令行以应对危险”。

还有不同的包含模式、正则表达式、带括号的数字输出模式等等。你现在不需要全部了解。记住这些新知识,以后再学习。

不过,我在这里还有最后一件事提……

了解变量

Shell 变量与其他编码语言类似:它们是存储在其他地方以供引用的值。

声明一个使用[VAR]=[value]语法,名称通常全部大写。一个基本示例是 CUPCAKES=5。

检查变量的值也很简单。在这里,你只需运行echo $CUPCAKES,就能得到5。记住变量名上的美元符号!

另一个重要提示:关闭终端后,您在会话中写入的所有变量都会消失。为了充分利用变量,您需要保存它们。为此,我们需要点文件,我稍后会解释。

在此之前,完成这些基本操作后,让我们来介绍一下 Shell 最重要的用途——包管理器

包管理器

关于 Shell 的实用性,我首先要说的是它能做到大多数 GUI 无法做到的事情。这大部分都归功于包管理器。

好的,那么什么是包管理器?

举个例子:在你职业生涯的早期,你曾使用 Gulp.js 来处理诸如将 Sass 转换为 CSS 之类的操作。你会使用 Shell 导航到该目录并运行类似gulp或 的命令gulp styles来启动它。你并不真正了解自己在做什么,也不知道它是如何工作的,但你成功了。其他命令也是如此,例如npm startyarn developember serverrails server

从本质上讲,这些都是已安装的 Shell 命令,并传入了参数。Shell 是您可以使用它们的全部原因。

yarn但是,如果你可以使用像和 这样的命令npm,那么创建它们的代码存储在哪里呢?它还没有安装在你的电脑里,所以它肯定是从某个地方来的,对吧?

你可以想办法下载、存储并正确访问这些代码库中的所有代码,以便它们在命令行中运行。这包括更新和导航所有代码、设置指令以及检查所有代码。正如你所料,这极其浪费且低效。

软件包管理器可以帮助避免所有这些问题。它们是下载、组织和更新运行这些重要命令所需的所有代码的便捷方式。

安装第一个包管理器

同事会向你介绍Brew,你绝对应该安装一下。它能让创建和运行不同类型的代码变得轻而易举。

例如,假设您想安装 Node.js 在服务器上运行 JavaScript,并使用 Express 等工具构建网站。当您第一次接触 Node 时,您看到一个令人困惑的下载页面,不知道该去哪里。您会下载所有文件,但不知道它们应该放在哪里、如何运行,或者它们在您的计算机环境中应该处于什么位置。您最终放弃了它,并且好几个星期都没有再尝试,还记得吗?使用 Brew,这一切本来可以轻而易举!

要安装 Brew,只需在 Shell 中运行以下命令:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Enter fullscreen mode Exit fullscreen mode

这个 Shell 命令看起来很复杂,但核心很简单。它用于curl下载一个 ruby​​ 脚本,并在你的电脑上运行它来安装 Brew。

安装需要一段时间,但现在你可以使用 Brew 快速安装 Node 之类的东西。就这么简单:

brew install node
Enter fullscreen mode Exit fullscreen mode

Brew 下载 Node,设置它,让你更新它,并将其全部链接到node命令。

对此的快速测试是使用以下代码创建 JavaScript 文件:

// test.js

var number = 1 + 4;
console.log(number);
Enter fullscreen mode Exit fullscreen mode

然后导航到它所在的目录并运行以下命令:

node test.js

5 // Output
Enter fullscreen mode Exit fullscreen mode

您将使用 Brew 添加其他重要组件,例如 nvm、Ruby、rvm、npm 等等。有了对 Shell 的基本了解,您将了解其基本工作原理以及如何充分利用它。因为最终,许多复杂的编程工作都只是 Shell 命令而已。

总而言之,包管理器是处理 Shell 中最重要的事情的最佳方式。你至少应该花这么多时间学习 Shell,因为如果你想成为 Shell 专家,这件事不能拖延。

点文件

让我们回顾一下 Shell 的一些基本知识。点文件由 Shell 存储,通常包含用于配置 Shell 的持久变量。您还可以在其中保存命令。

点文件通常以.开头(因此得名)。如果您以前只使用过 GUI,您可能从未见过。那是因为您只能通过 Shell 查看它们!运行ls -a,您将列出常规文件和点文件。

使用 Bash,您可以运行cd ~以进入根目录,然后ls -a查看一些重要的 shell 文件。这些文件包括:

  • .bash_profile- 基本配置文件
  • .bashrc- “启动”文件。此处的命令会在每个新的终端会话中自动运行。

你可以用该命令查看这些文件以及其他点文件cat。但是如何编辑它们呢?那就用神奇的 VIM 吧!

VIM

Vim 本质上是一个文本编辑器。它内置于 Shell 中,你经常用它来编辑 Shell 特有的内容,例如点文件。然而,Vim 与你的第一个文本编辑器 Sublime Text 截然不同。

最大的问题是,由于VIM 是基于 Shell 的,它是一款只使用键盘的文本编辑器。还记得吗,Bash 没有 GUI 可以点击?这使得 VIM 对程序员来说非常高效,但学习起来难度很高。

您无需立即使用 VIM,也可以根据需要在其他编辑器中打开点文件。但是,如果您运行了类似的命令vim .bashrc并希望安全退出 VIM,请执行以下操作:

  • esc
  • 类型:q
  • enter

在此之前,请运行 来避免使用 VIM open <name>。它会改用你的默认文本编辑器打开文件。但 VIM 会不断弹出,所以至少要注意它。

别名

现在我们进入 Shell 的“省时自动化”部分!

别名本质上就是命令快捷键。您可以将长命令或连续命令保存为更短、更容易记住的命令。如果您经常运行某个长命令,可以将其保存为别名!

在 Bash 中,你可以为文件添加别名bash.rc。每个别名占一行,如下所示:

alias <name>="<put shell commands here>"

以下是首先为 Bash 添加的两个有用的别名示例:

alias viewali="cat ~/.bashrc"
alias editali="open ~/.bashrc"
Enter fullscreen mode Exit fullscreen mode

这里,viewali运行命令导航到别名文件本身并显示其内容。editali在文本编辑器中打开它,以便您可以添加或更改它们(稍后您将使用vim)。现在,您可以通过 Shell 轻松查看和更新​​您的别名!

想要一个更实用的例子吗?快进到我的时代,当你用 Gatsby.js 搭建个人网站时,你会添加这个:

alias mysite="cd ~/Documents/gatsby-blog && code . && yarn develop"
Enter fullscreen mode Exit fullscreen mode

抛开具体细节不谈,这个别名可以在 Visual Studio Code 中打开我的站点仓库,并在本地运行。这只是 Bash 潜力的冰山一角。

功能

假设你想自动化一些更复杂、需要传入参数的操作。这可以通过将函数保存到别名文件中来实现。这是一个非常简单的例子:

testfunction(){
  echo $1
  echo $2
}
Enter fullscreen mode Exit fullscreen mode

每个以$开头的变量都是一个参数。它们按照传入的顺序进行编号。$1第一个参数是 ,$2第二个参数是 ,依此类推。

// Running the function...
testfunction hello world

// Returns this!
hello
world
Enter fullscreen mode Exit fullscreen mode

注意:您需要重新启动终端才能使新的别名和功能生效。

脚本

脚本文件类似于别名,因为它们保存 Bash 功能以供以后使用,但有几个区别:

  • 它们以 .sh 扩展名结尾
  • 该文件本质上是一个接受多个参数的巨型函数。
  • 对于 Bash,它们通常保存在usr/bin目录中。它们可以随时从那里运行
  • 脚本文件无法立即从 Shell 运行。您需要运行chmod +x <filename>才能使其可执行

脚本文件对于执行更复杂、更具体的操作非常有用,因为这些操作会占用别名文件的空间。一旦你熟练掌握 Shell 的使用方法,你就会接触(并编写)更多这样的脚本。

例如,当你与其他程序员协作时,运行所有持续集成测试的文件将是一个脚本文件。因此,了解 Shell 将有助于你改进该文件创建和运行这些测试的方式。

结论

从很多方面来说,Shell 是程序员赖以生存的必需品。它是程序员摆脱程序使用者的束缚,与程序开发者同场竞技的关键要素。《程序员修炼之道》(The Pragmatic Programmer)曾被誉为最佳编程书籍之一,书中将 Shell 称为程序员的“工作台”,并指出 Shell 能助你大幅提升工作效率。

您无需立即了解 Shell 的全部功能(本文只是极高层次的概述)。现在,您只需要了解它的功能即可。它如何帮助您提高效率。它在本地运行代码、管理工具、设置测试等方面发挥着关键作用。

程序员需要 Shell 来更好地完成工作。它不会消失。无论一开始你有多不舒服,深吸一口气,开始使用它吧。向未来的自己学习。从克服冒名顶替综合症到与同事良好合作,了解 Shell 总是有帮助的。

文章来源:https://dev.to/maxwell_dev/the-shell-introduction-i-wish-i-had-551k
PREV
三种小型创建模式 - 设计模式简介
NEXT
我希望有 Git Rebase 简介