BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

无需安装的CLI才是最好的

| 作者 Burke Holland 关注 1 他的粉丝 ,译者 姚佳灵 关注 0 他的粉丝 发布于 2018年9月12日. 估计阅读时间: 12 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

本文关键字

  • Azure Cloud Shell是运行在浏览器上的一个完整的终端
  • 可以像配置本地终端那样配置Azure Cloud Shell
  • 可以在Azure Cloud Shell中使用vim、emacs,它甚至提供了精简的VS Code体验
  • 实际上是通过浏览器向后端的Unbuntu终端发送命令
  • Cloud Shell让我们可以使用Azure CLI而无需安装任何东西

前几天,我的一个朋友在Azure上部署了Node,但他的网站运行不起来。我从来不会错过证明自己不是讨厌鬼的机会,所以我慷慨地向他提供了帮助。

他收到的错误消息是“服务不可用”,这正是我最喜欢的错误类型,因为这个错误不能代表什么,它就像是“烤面包上的奶酪”。

为了找出真正的错误,我需要查看日志文件。当时,我正准备问我的朋友是否安装了Azure CLI。我意识到,如果他没安装的话,那会有点乱。

他在用Mac还是Windows?他安装了Homebrew了吗?他用的Python的版本是什么?天哪!还有Python的版本问题。

我们有点紧张了,而我也不想再添点麻烦,说什么“安装这个CLI,这样我们就可以读取日志文件”。

后来,我意识到,其实我们不必做任何事情。我们不需要安装Azure CLI就可以使用它。我们所需要的只是Azure Cloud Shell而已。

Azure Cloud Shell

“Cloud Shell”是一个运行在浏览器上的终端。它有几种不同的访问方式。如果已经打开了Azure门户网站,可以直接点击“铃铛”旁边的小图标(请参看下图)。

这会弹出一个新的终端窗口,Azure CLI已经安装于其中,无需登录。

另一种方式是访问shell.azure.com

如果安装了Azure Account扩展,那么可以在VS Code中登录。只需打开命令面板并查找“Cloud Shell”。

在启动了Cloud Shell实例后,就可以很容易地查看日志了。不需要登录,你只需要输入Azure CLI命令行,就好像你是个老专家。我们访问了他的站点日志,发现依赖项中漏了一个npm包。难道这不是每个Node应用程序经常碰到的问题吗?

这不是我第一次看到Cloud Shell,但是,这是我第一次领悟到它的妙处。

当我第一次看到它时,我认为……

我没有领悟到。我的意思是,我已经有了一个终端,我有点喜欢它。它正在推出一个很好的Flat UI主题,我已经花了很多时间来调整它,但我总是记不住也找不到所有的profile文件。是~/.bashre,还是~/.zshrc?到底是不是~/.bash_profile?如果我有了~/bashrc,那还要它干嘛?生活简直变得毫无意义。

但Cloud Shell却非常棒,不是因为它取代了终端,而是因为它无需安装就能让我们访问CLI。

我们倾向于安装大量的CLI,但配置它们可不容易。我花了太多的时间与Ruby和Python版本做斗争,它们都是以安装CLI为名,但实际上与Python或Ruby毫无关系。我宁愿不要经历这个过程。

Azure Cloud Shell给了我们无需配置的CLI。Python是什么版本?无关紧要。有Cloud Shell就可以了。而且很显然,我有一些Python运行时创伤后应激障碍。

云终端处处皆是。肯定不会只有Azure这么一个。让我感兴趣的是,它们是真实的“终端”吗?我能用它们做些什么?

我们一起来寻找答案。

vim

首先,我们要知道的是它支持vim吗?

是的,它可以支持VIM,它还提供了所有VIM的彩蛋

正如John Oliver所说的——“很酷”。

接下来,我们需要知道是否可以通过它来安装一些东西。这里的“东西”,指的是“cowsay”。

apt-get

没有我的cowsay,就不算是终端,因此,我试图安装cowsay。

没有sudo!但是,文档上确实提到,禁用访问是被禁用的。我猜想,这是为了防止像我这样的人乱用服务器而不小心把系统文件给删了。

好吧。太可惜了。但是,我没有被吓倒。我们来看看是否有emacs。

有emacs。那么我们还能够在emacs里玩贪吃蛇游戏吗?

我是这世界上最糟糕的贪吃蛇玩家。这游戏让我感到非常紧张。我更喜欢超级玛丽游戏,什么时候可以在emacs上玩这个游戏呢?

好,废话少说。我们来看看是否可以定制这玩意儿。在这个终端中,我们需要一些东西来好好使用Azure CLI。从把shell更改为zsh开始。

zsh

我们已经知道我们什么都不能安装,但是如果已经有了zsh呢?我们试着运行一下看看。

可以!现在,我们可以添加oh-my-zsh了吗?它们是点文件,因此可以通过curl来安装。

现在,我们有了进展。我们可以更改主题吗?试试用“云”。看起来不错。

// .zshrc file
#设置要加载的主题名称。如果设置成“随机”,
#每次加载oh-my-zsh就随机加载一个主题。
#参看https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
ZSH_THEME="cloud"

很好,我很喜欢。这不是一个明亮的主题,但是我看到了一朵小云。

我应该注意到Cloud Shell不兼容某些主题。比如,在使用最流行的“Agnoster”主题时,它似乎不喜欢渲染燕尾形。

假如你想知道,“Agnoster”看起来应该是这样的:

没问题,反正我不用“Agnoster”。现在,我们来做一些插件。我用的最多的一个是“zsh-autosuggestions”。Jessica Deen给我看了这个,它基本上只是追踪你输入终端的所有内容,然后,如果你再输入之前输过的内容,它就会给出提示。像这样:

看看这个是否有帮助?

这个zsh-autosuggestion插件并不在oh-my-zsh插件列表中,因此,可以手动安装:

git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions

然后,添加到你的~/.zshrc文件中:

source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

我也冒昧地安装了git、jsontools和其他一些工具,它们都能用。

现在,让我们把zsh设置成默认shell。通常,这是通过安装zsh来完成,但是现在已经安装好了。我们也不能正常使用chsh,因为没有权限。

Shayne Boyer指出,可以在~/.bashrc中设置SHELL变量。因为Cloud Shell对任何人都是相同的,你的zsh应该和我的zsh一样。

export SHELL=/usr/bin/zsh
exec /usr/bin/zsh -ld

现在,我们在ZSH中启动了我们的主题和所有默认的插件。即使是在VS Code中打开,也一样。我们在任何地方使用Cloud Shell,都会用到这个设置。

npm

作为JavaScript开发者,我必须有自己的Node。对我来说,默认情况下,在终端中找到Node一点也不奇怪。但是,让我感到震惊的是,npm也是默认安装好的。

但是,这还不是全部。

文档中说它也支持make、maven和pip。Java开发人员看到最后这句话可能会感到很满意。我不是一个会经常使用make或pip的用户。我通常只在从Stack Overflow复制某些东西到我的终端上时才会用到它们。

它的工作原理是什么?

每次打开一个Cloud Shell实例,就会获得一个Docker容器,里面运行着Ubuntu。然后,这个Cloud Shell通过web socket连接到该实例,成为Ubuntu容器的接口。

例如,如果在Cloud Shell中输入“Docker”,以下就是传给容器的内容:

看到了吗?它们是“d”“o”“c”“k”“e”“r”(绿色的箭头是向外的)。注意,web socket也会对每次的键盘输入做出响应(红色的箭头是向内的)。因为,这就是终端该做的事。看看它对“[39m”和刚输入的字符做出怎样的响应?这是ANSI语法高亮显示,这也就是Cloud Shell为什么会知道用何种颜色显示文本,以及渲染主题和进行其他高亮显示。

在执行命令后,它就返回容器的输出。

在Cloud Shell中输入字符时,通过网络发送它们,在终端中执行,然后返回结果。

这真是非常了不起的壮举。它们把浏览器变成远程终端的代理UI。

Cloud Shell使用Azure Storage来持久化存储。所有的配置文件和工作所需的其他任何文件都存储于其中,并通过底层Ubuntu容器来挂载。

最新特性

写完本文,打算过一段时间再发布,但Cloud Shell迫不及待地添加了一个新的、相当“有人气”的功能。

现在,可以通过在shell中输入code来获得一个类似VS Code的编辑器。该编辑器在终端上方打开。我说它类似VS Code,是因为它显然是个来自VS Code的文本编辑器,提供了查找与替换、多游标和命令面板(F1)。

不是每个人都适合用vim。这里说的每个人,指的是我。对于其他人,现在有了这个漂亮的可视化编辑器,我称之为VS Code,即使它不是VS Code。

我甚至找出了如何关闭它的方法。Vim的用户们,请看下图。

了解更多Cloud Shell的相关信息

Cloud CLI的东西都是必要的,但是不容易安装。Cloud Shell提供了CLI的全部功能以及相当强大的终端体验,而所需的只是浏览器。

Azure Docs可以找到Cloud Shell和Azure Mobile app的文档,也可以找到Azure Cloud Shell支持的所有功能的完整列表

作者简介

Burke Holland 住在田纳西州纳什维尔,是一位前端程序员。他热爱JavaScript,因为这是他唯一能用来表达自己的方式。明白吗?不明白也没关系。Burke的博文只比他写的代码好那么一点点,绝对不如他用第三人称来介绍自己那么好。Burke是微软Azure团队的一员。可以通过他的推特@burkeholland联系他。

阅读英文原文:The Best CLI Is the One You Don’t Have to Install

感谢无明对本文的审校。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT