我正在参加「掘金·启航计划」;
title: 各类终端通识
shell 是什么
首先,Shell 是一个程序,提供一个与用户对话的环境。让用户从键盘输入命令,所以又称为命令行环境(command line interface,简写为 CLI)。Shell 接收到用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。在本文中,除非特别指明,Shell 指的就是命令行环境。
其次,Shell 是一个命令解释器,解释用户输入的命令。它支持变量、条件判断、循环操作等语法,所以用户可以用 Shell 命令写出各种小程序,又称为脚本(script)。这些脚本都通过 Shell 的解释执行,而不通过编译。
最后,Shell 是一个工具箱,提供了各种小工具,供用户方便地使用操作系统的功能。
省流小助手: CLI 接受用户的输入并执行请求的命令。
linux 的 cli
Shell 有很多种,只要能给用户提供命令行环境的程序,都可以看作是 Shell。
历史上,主要的 Shell 有下面这些。
- Bourne Shell(sh)
- Bourne Again shell(bash)
- C Shell(csh)
- TENEX C Shell(tcsh)
- Korn shell(ksh)
- Z Shell(zsh)
- Friendly Interactive Shell(fish)
Bash 是目前最常用的 Shell
下面的命令可以查看当前运行的 Shell。
$ echo $SHELL
/bin/bash
下面的命令可以查看当前的 Linux 系统安装的所有 Shell。
$ cat /etc/shells
上面两个命令中,$是命令行环境的提示符,用户只需要输入提示符后面的内容。
Linux 允许每个用户使用不同的 Shell,用户的默认 Shell 一般都是 Bash,或者与 Bash 兼容
进入和退出方法
进入命令行环境以后,一般就已经打开 Bash 了。如果你的 Shell 不是 Bash,可以输入bash命令启动 Bash。
$ bash
退出 Bash 环境,可以使用exit命令,也可以同时按下Ctrl + d。
$ exit
Shell 和 Bash 的历史
Shell 伴随着 Unix 系统的诞生而诞生。
1969年,Ken Thompson 和 Dennis Ritchie 开发了第一版的 Unix。
1971年,Ken Thompson 编写了最初的 Shell,称为 Thompson shell,程序名是sh,方便用户使用 Unix。
1973年至1975年间,John R. Mashey 扩展了最初的 Thompson shell,添加了编程功能,使得 Shell 成为一种编程语言。这个版本的 Shell 称为 Mashey shell。
1976年,Stephen Bourne 结合 Mashey shell 的功能,重写一个新的 Shell,称为 Bourne shell。
1978年,加州大学伯克利分校的 Bill Joy 开发了 C shell,为 Shell 提供 C 语言的语法,程序名是csh。它是第一个真正替代sh的 UNIX shell,被合并到 Berkeley UNIX 的 2BSD 版本中。
1979年,UNIX 第七版发布,内置了 Bourne Shell,导致它成为 Unix 的默认 Shell。注意,Thompson shell、Mashey shell 和 Bourne shell 都是贝尔实验室的产品,程序名都是sh。对于用户来说,它们是同一个东西,只是底层代码不同而已。
1983年,David Korn 开发了Korn shell,程序名是ksh。
1985年,Richard Stallman 成立了自由软件基金会(FSF),由于 Shell 的版权属于贝尔公司,所以他决定写一个自由版权的、使用 GNU 许可证的 Shell 程序,避免 Unix 的版权争议。
1988年,自由软件基金会的第一个付薪程序员 Brian Fox 写了一个 Shell,功能基本上是 Bourne shell 的克隆,叫做 Bourne-Again SHell,简称 Bash,程序名为bash,任何人都可以免费使用。后来,它逐渐成为 Linux 系统的标准 Shell。
1989年,Bash 发布1.0版。
1996年,Bash 发布2.0版。
2004年,Bash 发布3.0版。
2009年,Bash 发布4.0版。
2019年,Bash 发布5.0版。
用户可以通过bash命令的--version参数或者环境变量$BASH_VERSION,查看本机的 Bash 版本。
windows 的 cli
cmd
进入和退出方法
- 开始菜单,搜索cmd, 可以右键管理员执行或普通用户执行,ctrl+c退出
- 安装 Window Terminal,集成在下拉菜单中,可配置
PowerShell
进入和退出方法
- 开始菜单,搜索powershell, 可以右键管理员执行或普通用户执行,ctrl+c退出
- 安装 Window Terminal,集成在下拉菜单中,可配置
微软的 shell 历史
-
最初的MS-DOS (command.com)是一个相对简单(如果古怪的话)的命令行 shell
-
Windows NT 的“命令提示符”(cmd.exe)旨在与传统的 MS-DOS command.com/batch 脚本兼容,并为新的、更强大的操作系统添加了几个附加命令
-
2006 年,微软发布了
Windows PowerShell
- PowerShell 是一个现代的基于对象的命令行 shell,其灵感来自其他 shell 的特性,它建立在并结合了 .NET CLR 和 .NET Framework 的强大功能
- 使用 PowerShell,Windows 用户几乎可以控制、编写脚本和自动化 Windows 机器、Windows 机器组、网络、存储系统、数据库等的各个方面。
- 2017 年,微软开源 PowerShell 并使其能够在 macOS 以及多种 Linux 和 BSD 上运行!
-
2016 年,微软推出了
Windows Subsystem for Linux (WSL)
- 使未经修改的正版 Linux 二进制文件能够直接在 Windows 10 上运行
- 用户从 Windows Store 安装一个或多个正版 Linux 发行版
- 用户可以同时运行一个或多个发行版实例以及现有的 Windows 应用程序和工具
- WSL 使 Windows 用户能够并行运行所有他们喜欢的 Windows 工具和 Linux 命令行工具,而无需双启动或利用资源匮乏的虚拟机 (VM)
javascript 的 cli
zx
[zx] github.com/google/zx
借助nodejs 的能力用 js 的语法写脚本
进入和退出方法
npm i -g zx;
zx ./script.mjs
ctrl+c退出;
需要注意 node 版本需要 >=16;
历史和理由
Bash 脚本很好,但更多人喜欢用 JavaScript ,zx包提供 node.child_process 的包装, 使其更好用;
下章节预告
下一篇文章将为大家带来 Windows 环境下的终端环境:Window Terminal 美化全攻略,不放过任何一个细节,敬请期待,下期再见,好运;