macOS 进阶教程 01:使用 Shell

1. 引言

本文是 macOS 进阶教程的第一篇内容,之后会作为一个独立的分类「Shell 教程」而更新。由于这个分类的文章涉及到与编程有关的内容,并且鉴于大多数的读者可能并没有编和开发的相关经验,因此,我会单独拿一节的内容来简要地介绍一下相关概念。当然,后面的内容也不会很难,我会结合一些实际的例子来带领你学习这一项技能。

2. Shell 简介

你可能不知道什么是 Shell,但应该听说过「CMD」或者「命令行」之类的东西。在 Windows 系统下,按住 Windows + R 键,在弹出的运行窗口中输入 cmd,会出现一块「黑屏」的窗口,这个窗口中除了几行白色的字之外什么都没有。

从某种意义上来说,你看到的这块「黑屏」就算是 Shell 了。你可以认为 Shell 就是一个纯文字的操作界面,没有窗口,没有按钮。你只能通过输入命令来进行操作。这就是所谓的「文本操作界面」,也被称为 TUI,与我们日常使用的图形操作界面 GUI 相对。虽然它看起来十分简陋,但就算是今天,它也并没有从我们的系统中消失。为什么?因为有很多东西是在图形操作界面中做不到的,比如定时自动化任务,运行某些特殊的程序等等。还有就是,当图形界面无法正常工作时,我们依然可以通过 Shell 来与操作系统进行交互,起到急救的作用。

从更严谨的角度来说,Windows 并没有 Shell,Shell 广泛地存在于 Linux 和 Unix 系统当中。Linux 和 Unix 操作系统的结构有点像一个圈层结构。最内部是系统的内核(Kernel),内核负责最底层的硬件和系统服务。在内核之上就是 Shell。它负责将用户发送给计算机的命令解释成内核能看懂的东西从而让内核去执行。再上一层就是应用层,也就是各种软件。

Shell 之所以叫 Shell,是因为它像一个壳一样依附在内核之上,它是用户以及各类软件和内核交互的桥梁。在整个操作系统当中,除了内核我们无法直接控制之外,就只有 Shell 有着最高的「权力」,它能做的事最多,功能也最全。就算是各类应用软件,也需要依赖 Shell 才能和内核沟通。因而,Shell 是最直接的控制操作系统内核的渠道。

2. 为什么要学习 Shell

前面的内容你可能看不太明白,但没有关系,你只要知道 Shell 是个非常强大的东西就行了。但是在开始之前我还需要澄清一下概念。首先,Shell 本身是一个程序,一个可以让你通过输入命令和系统内核交互的程序。而实际上,在这个世界上有着各种各样的 Shell 程序。比如 Linux 系统默认使用的 Bourne Again shell(bash),抑或是 macOS 中默认的 Z shell(zsh)。对于用户来说,这些 Shell 程序之间差异其实不是很大,大多数的操作都是通用的。

其次,Shell 本身也是一种编程语言,你可以用 Shell 编写 Shell 脚本,从而让 Shell 程序去运行它。这个分类中的文章关注的是如何写 Shell 脚本,而不是学习 Shell 程序本身。

Shell 编程是一个非常重要的技能。学会了 Shell,你就有能力去控制世界上绝大多数的操作系统,同时你还可以在你的同事面前露一手,装个酷。当然,最重要的还是为了能够帮助你提高工作效率,完成一些重复冗余的工作。

3. 提前准备

在正式开始之前,你需要做好以下准备:

3.1 如果你使用的是 macOS 或其他 LInux/Unix 系统

打开系统中自带的终端,输入 echo $SHELL 查看系统默认的 Shell 是什么。对于大多数 LInux 来说,默认的 Shell 是 /bin/bash 。我们之后要学习的也是 bash,因为它应用范围最广泛。macOS 的默认 Shell 是 zsh,因此每次你都需要输入一次 /bin/bash 来将 Shell 改成 bash。

3.2 如果你使用 WIndows

WIndows 之前是没有 Shell 的。后来微软给它加上了 Powershell,常用的命令理论上都差不多,只是 Windows 的文件结构和 LInux/Unix 不太一样。

⚠️ 警告:在开始学习 Shell 之前,你必须要了解在 Shell 本身是一个权限很高的程序,如果在其中输入了错误的命令,可能会导致万劫不复的后果!如果你是初学者,建议你在学习之前对你的系统进行备份或者在虚拟机中学习 Shell。

4. 推荐的操作环境

为了防止影响主系统的使用。我选择在虚拟机中运行 Linux 来演示 Shell 的使用。我使用的是 AimaLinux ARM 64 位,这是一个类似于 CentOS 的L Linux 发行版。当然你用其他的 Linux 也是可以的。

5. 第一条命令

打开终端,使用 echo $SHELL 命令来查看你当前使用的 Shell,如果你使用的不是 bash,请在终端中输入 /bin/bash 来切换到 bash。

在你切换到 bash 后就可以正式开始学习了。今天我们只需要做一件最简单的事情就好——输出一个打印语句。在终端中输入以下内容并回车。

echo "Hello shell"

如果一切正常,Shell 就会返回以下内容:

Hello shell