# [筆記] Command Line 超新手入門 ###### tags: `Lidemy` `CLI` `w3HexSchool` ## 前言 此篇筆記為參加程式導師實驗計畫中,整理在 **Lidemy [CMD101] Command Line 超新手入門** 的課程筆記。 ## 簡介 ### What is Command-Line Interface? 命令列介面(英語:Command-Line Interface,縮寫:CLI)是在圖形使用者介面得到普及之前使用最為廣泛的使用者介面,它通常不支援滑鼠,用戶通過鍵盤輸入指令,電腦接收到指令後,予以執行。也有人稱之為文字使用者介面(character user interface, CUI)。by [Wiki-命令列介面](https://zh.wikipedia.org/wiki/%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%95%8C%E9%9D%A2) > 簡言之,就是以文字的方式跟電腦溝通。 而以下常見的名稱都是指 CLI,只是在不同作業系統下,有不同稱呼: * 類 Unix 系統:bash / sh / ksh / csh / zsh * Windows 系統:cmd.exe / 命令提示字元 / Windows PowerShell * MS-DOS系統:<span>COMMAND.COM</span> 關於更多 CLI 的介紹,可以參考: * [命令列 CLI](https://ihower.tw/cs/cli.html) ### Why is Command-Line Interface? 在 GUI 盛行的年代,為什麼要學 CLI 呢? 使用 CLI 有以下的好處: 1. 較節約電腦系統的資源 2. 有時可以更高效與精準地達到目的 舉簡單的例子來說,如果你只會 GUI,但今天要用別人的電腦工作,而對方沒有安裝相關的 GUI,或是他安裝的 GUI 跟你的不同,就得再去下載你熟悉的 GUI,或花時間去了解對方的 GUI 如何操作;又如果連線到只能用 terminal 工作的 server 時......,在這些情況下,還是會 CLI 會比較好。 而到底是 CLI 還是 GUI 比較好,其實兩者各有優點與缺點,端看使用情境。關於兩者的比較,可以參見以下文章: * [要高效还是要易用?——谈GUI与CLI](http://www.cnitblog.com/addone/archive/2008/01/08/38581.html) * [破除迷思系列:用Command Line 的都是Hacker?](https://tecky.io/en/blog/%E7%A0%B4%E9%99%A4%E8%BF%B7%E6%80%9D%E7%B3%BB%E5%88%97-%E4%B8%89-%E7%94%A8command-line-%E7%9A%84%E9%83%BD%E6%98%AFhacker/) * [別爭了?電腦與人互動的介面是CLI介面或是GUI介面較適合?](https://pythonhi.pixnet.net/blog/post/315186128-%E5%88%A5%E7%88%AD%E4%BA%86%EF%BC%9F%E9%9B%BB%E8%85%A6%E8%88%87%E4%BA%BA%E4%BA%92%E5%8B%95%E7%9A%84%E4%BB%8B%E9%9D%A2%E6%98%AFcli%E4%BB%8B%E9%9D%A2%E6%88%96%E6%98%AFgui?utm_source=PIXNET&utm_medium=Hashtag_article) ## 環境建置 以 Mac OS 為例。參考以下文章建置環境: * [[心得] iTerm2 + zsh,打造更好的工作環境](http://huli.logdown.com/posts/402147-iterm2-zsh-better-environment) * [超簡單!十分鐘打造漂亮又好用的 zsh command line 環境](https://medium.com/statementdog-engineering/prettify-your-zsh-command-line-prompt-3ca2acc967f) 其中,安裝字體的部分,操作指令為: ``` # 第一次使用 homebrew 安裝字型 # 現在已經不使用 brew tap caskroom/fonts brew tap homebrew/cask-fonts # 安裝字體指令 brew cask install font-hack-nerd-font ``` 先關閉 iTerm2,才能在 preference 中選擇該字體。 #### 最後的結果 * terminal:iTerm2 * shell:zsh * 管理套件:oh-my-zsh * 主題:powerlevel9k * 字體:hack-nerd-font * 外掛:zsh-autosuggestions * `.zshrc` 設定: ``` ZSH_THEME="powerlevel9k/powerlevel9k" POWERLEVEL9K_MODE='nerdfont-complete' # command line 左邊想顯示的內容 POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir dir_writable vcs vi_mode) # command line 右邊想顯示的內容 POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status background_jobs time) plugins=(git zsh-autosuggestions) ```  * VScode 設定檔(setting.json): ``` "terminal.integrated.fontFamily": "hack nerd font" ``` ## 常用指令 ### 基本指令 ### pwd 印出所在位置 * `pwd`:Print Working Directory,印出從根目錄到現在的所在位置路徑  ### ls 列出檔案清單 * `ls`:LiSt,印出現在資料夾下的資料夾與檔案  註:藍色的為資料夾,白色的是檔案 #### 變化型 * `ls -l`: 顯示檔案與目錄的詳細資訊  * `ls -a`: 顯示隱藏的檔案與目錄 隱藏的檔案最前面會用 `.` 來表示  * `ls -al`: 顯示隱藏檔案與目錄的詳細資訊 `ls -l` 與 `ls -a` 的組合  關於 `ls` 的詳細使用方法,可以參考: * [Linux 的 ls 指令教學與常用範例整理](https://blog.gtwang.org/linux/linux-ls-command-tutorial/) ### cd 前往不同地方 > 可以使用相對路徑或絕對路徑 * `cd`:Change Directory,切換資料夾  #### 變化型 * `cd ./` : 在同一層當中移動  * `cd ..` : 回到上一層  * `cd ~` : 回到起始目錄  * `cd /` : 回到根目錄  註:起始目錄與根目錄並不相同 ### man 指令說明手冊 * `man`:MANual,列出使用指令的詳細資訊,包括可以帶什麼參數 * 按 `q` 離開   ### 檔案操作相關指令 ### touch 建立檔案或更改時間 * `touch`:若檔案已存在則會更改檔案的修改時間,若檔案不存在則是新增該檔案   ### rm 刪除檔案 * `rm`:刪除檔案(非資料夾)  #### 變化型 * `rm -r` / `rmdir`:刪除資料夾  * `rm -f`:強制刪除檔案(請慎用!) ### mkdir 建立資料夾 * `mkdir`:MaKe DIRectory,建立新資料夾  ### mv 移動檔案或是改名 * `mv`:MoVe,`mv 檔案 資料夾` 為移動檔案;`mv 檔案 新檔案` 為更改檔案名稱   ### cp 複製檔案 * `cp`:CoPy,複製檔案(非資料夾)  #### 變化型 * `cp -r` :複製資料夾  ### cat 印出檔案內容 * `cat` :ConcATenate,將檔案內容輸出在終端機上  ### Vim 文字編輯器 * `vim` :編輯檔案文字內容 * 按 `i` 為 insert mode * 按 `esc` 為 normal mode * 按 `:q` 為離開編輯器 * 按 `:wq` 為儲存後離開編輯器 * 按 `:qa!` 為不儲存就離開編輯器  關於 Vim 如何操作,可以參考以下文章: * [超簡明 Vim 操作介紹](https://gitbook.tw/chapters/command-line/vim-introduction.html) * [第九章、vim 程式編輯器](http://linux.vbird.org/linux_basic/0310vi.php#vi_vim_why) ### 其他好用指令 ### grep 抓取關鍵字 * `grep 字詞 檔案`:搜尋檔案內的特定字詞  ### wget 下載檔案 * `wget 檔案網址`:下載檔案  若電腦內沒有 wget 指令的話,請先使用 homebrew 套件安裝 ``` brew install wget ``` 關於 wget 的詳細使用方法,可參考: * [Linux 使用 wget 指令自動下載網頁檔案教學與範例](https://blog.gtwang.org/linux/linux-wget-command-download-web-pages-and-files-tutorial-examples/) ### curl 送出 request * `curl`:送出 request,可以用來測試 API 取得 Response Header 以及網頁內容  關於 curl 的詳細使用方法,可參考: * [Linux Curl Command 指令新與基本操作入門教學](https://blog.techbridge.cc/2019/02/01/linux-curl-command-tutorial/) ### 指令的組合技 ### redirection 重新導向 Input/Output * `Output > Input`:將前面指令的 Output 作為後面檔案的 Input 將 `ls -l` 的資訊輸出到 result 這個檔案  #### 變化型 * `Output >> Input`:將前面指令的 Output **新增(append)** 到後面指令或檔案 若原本只用 `>` 會覆蓋所有內容,使用 `>>` 可以把內容新增到後面  ### pipe 重新導向 Input/Output * `Output | Input`:將前面指令的 Output 作為後面指令的 Input 印出 text 的內容後,再抓出 3 這個字  ## 後記 一開始使用 CLI 會很不習慣,但打久了,那些常用的指令就能記起來,對於電腦的 response 也比較能看懂。尤其在幫 iTerm2 安裝管理套件與主題後,畫面美觀許多,也更好上手。用起來心情變得不一樣。可謂工欲善其事必先利其器吧(笑)。
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.