2019鐵人賽
shell
在嘗試自己做一個會員登入系統之後,對於原生的 PHP 語法跟使用已經有一定的了解。既然已經有點概念了,我打算開始使用 PHP 框架 - Laravel。
但是開始安裝 Laravel 的時候,我就遇到不少問題,我發現是因為我對 command line 的理解很不熟造成的。
而且身為一個後端工程師,如果不會使用 command line 界面操作系統,那之後架設系統環境安裝 PHP 框架都會遇到很多問題,那麼想要了解 command line 就要先知道什麼是 shell,所以今天要先大家聊聊到底什麼是 shell。
在電腦科學中,殼層(英語:shell)指「為使用者提供使用者介面」的軟體,通常指的是命令列介面的解析器。一般來說,這個詞是指作業系統中提供存取核心所提供之服務的程式。Shell也用於泛指所有為用戶提供操作介面的程式,也就是程式和用戶互動的层面。因此與之相對的是核心(英語:Kernel),核心不提供和用戶的互動功能。
是不是看得有點困惑?老實說,我也是!不過我總結兩個關鍵詞
圖片來自維基百科
從上圖就可以清楚知道使用者其實透過 shell 通知 kernel,而 kernel 才去驅動硬體設備作動。
shell 分為圖形使用者界面(GUI)和命令列界面(CLI)兩大類。
嚴格來說 Windows OS 裡面的的資源管理器(explorer.exe)就是一種 GUI 類型的 shell,而命令提示字元(cmd.exe)則是 CLI 類型的 shell。
Unix 系統則有不同的 shell,如 bash、C shell、Z shell 等等,而 macOS 內建預設都是 bash(即 Bourne Again shell)。
當然不是喔!
terminal 的中文翻譯是「終端機」,而終端機的歷史由來是因為以前的大型電腦體積不像現在的個人電腦,它是有一個大型主機會連接到很多螢幕跟鍵盤。
那些提供顯示與輸入功能的機器,就稱為終端機。在終端機這邊並沒有執行運算的功能,必須要登入主機才能執行運算與資料儲存。
時至今日,個人電腦的體積已經很小,但是終端機這個功能還是保留了下來,所以 teminal.app 只是一個負責顯示與輸入指令的程式,你只是透過 terminal.app 將指令輸入, 而運行中的 shell 才是真正發送指令的人。
手稿語言(英語:Scripting language)是為了縮短傳統的「編寫、編譯、連結、執行」(edit-compile-link-run)過程而建立的電腦編程語言。
其實 Scripting language 才是我今天想講的重點,因為後面會安裝很多別人用Scripting language 寫好的套件,這些套件使用上非常口語,用法幾乎都是「程式名 指令 選項」
範例
brew install php@7.2
最後要講一個關鍵就是,安裝完的套件能不能執行,關鍵在於 shell 知不知道套件執行的所在路徑,如果你安裝了一個套件,卻常常出現類似 command not found:
這種提示碼,你就要去找看看 shell 設定檔裡面是不是缺少了套件執行路徑。
PS: shell 的設定檔通常在 home 目錄底下的 .(x)shrc。(x)是看你使用什麼 shell,像我是用 zsh,那麼我的 shell 設定檔就是 .zshrc