無需安裝的CLI才是最好的
本文關鍵字
- 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就可以使用它。我們所需要的只是ofollow,noindex" target="_blank">Azure Cloud Shell 而已。
Azure Cloud Shell
“Cloud Shell”是一個執行在瀏覽器上的終端。它有幾種不同的訪問方式。如果已經打開了Azure入口網站,可以直接點選“鈴鐺”旁邊的小圖示(請參看下圖)。
這會彈出一個新的終端視窗,Azure CLI已經安裝於其中,無需登入。
另一種方式是訪問LG9tRzSj4kYdqtUMQVTGdGiHzP6YYGnA68cJr4MHhfr6dCL6EBHcb5vqQ_Lg0Tsr_e1QluhrD289_MVOhKAUh-Mt1THRAv_W3Ix-WKVbY1mx6QnW8ohE9Z-2z7T4jaQJy08gZ7-xr25b7H5wV5ovwHv8reuVtzDdm5OblrJvBH5cexiLs8qU6Vnmu1D47qytGMn&x-client-SKU=ID_NET&x-client-ver=2.1.4.0" rel="nofollow,noindex" target="_blank">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和其他一些工具,它們都能用。
36035.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,都會用到這個設定。
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
感謝無明對本文的審校。