31

无需安装的CLI才是最好的

 6 years ago
source link: http://www.infoq.com/cn/articles/azure-cloud-shell?amp%3Butm_medium=popular_widget&%3Butm_campaign=popular_content_list&%3Butm_content=homepage
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

本文关键字

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

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

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

1781-1536343638962.jpg

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

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

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

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

Azure Cloud Shell

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

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

1472-1536343639547.jpg

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

1183-1536343640770.jpg

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

884-1536343640135.jpg

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

755-1536343636318.jpg

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

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

686-1536343635585.jpg

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

687-1536343636664.jpg

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

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

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

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

我们一起来寻找答案。

vim

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

548-1536343641034.jpg

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

409-1536343638606.jpg

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

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

apt-get

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

2810-1536343636922.jpg

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

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

4611-1536343639248.jpg

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

3212-1536343642532.jpg

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

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

zsh

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

2214-1536343637713.jpg

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

2215-1536343639844.jpg

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

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

2016-1536343637201.jpg

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

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

1317-1536343641302.jpg

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

1218-1536343638296.jpg

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

1319-1536343637992.jpg

看看这个是否有帮助?

这个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和其他一些工具,它们都能用。

1120-1536343636035.jpg

现在,让我们把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,都会用到这个设置。

2721-1536343640488.jpg

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”,以下就是传给容器的内容:

1922-1536343641576.jpg

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

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

1923-1536343642845.jpg

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

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

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

最新特性

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

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

1924-1536343642231.jpg

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

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

925-1536343641938.jpg

了解更多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

感谢无明对本文的审校。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK