Azure Cloud Shell:无需安装的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联系他。
本文文字及图片出自 InfoQ
你也许感兴趣的:
- 【外评】电脑从哪里获取时间?
- 【外评】为什么 Stack Overflow 正在消失?
- Android 全力押注 Rust,Linux 却在原地踏步?谷歌:用 Rust 重写固件太简单了!
- 【外评】哪些开源项目被广泛使用,但仅由少数人维护?
- 【外评】好的重构与不好的重构
- C 语言老将从中作梗,Rust for Linux 项目内讧升级!核心维护者愤然离职:不受尊重、热情被消耗光
- 【外评】代码审查反模式
- 我受够了维护 AI 生成的代码
- 【外评】Linux 桌面市场份额升至 4.45
- 【外评】作为全栈开发人员如何跟上 AI/ML 的发展?
你对本文的反应是: