命令列從入門到出門
Command Line Introduction<br /><del>年輕人的第一條指令。</del>
這篇文章來自 命令列從入門到出門 系列。
我們使用電腦的方式大致分為兩種, 一個是圖形用戶界面(GUI),就是大家耳熟能詳簡易直觀的視窗、圖形、按鈕、選單⋯ 圖形用戶界面的普及,讓我們使用電腦的方式改頭換面。 拖拉推拽煎炒烹炸的直覺而精緻操作使得使用電腦的門檻大大降低。
但在那很久很久以前,人與電腦之間的交互只能依靠的是黑底白字的命令列界面(CLI)完成。 命令列既然是上古遺物,但原理簡單,反而容易理解。 其實指令就像和電腦對話,打字告訴電腦做什麼,電腦做完了回報或者不回報給你,只是要說電腦聽得懂的語言。
很久很久以後的今天,對於一般的使用者而言, 指令已經成為了只有在駭客或者工程師修電腦的時候才會出現的魔法詠唱般的存在, 大概現在只會搓玻璃的小朋友們可能已經很難想像那個人均駭客帝國的時代了。
實際上,命令列界面相關的程式仍是電腦中重要的一部分,甚至他們的推陳出新都從未停止過。 如上文所言,指令其實不是什麼艱澀難懂的東西,只是需要一點學習門檻,以及億點點🤏的腦汁。
Preliminaries
Terminology
在這裡先簡短的介紹一下專有名詞,很久很久以前,電腦還是衣櫃那麼大的時代,要對電腦做操作, 要通過電腦身上的主控台(Console),大概就像電箱上的配電盤,後來電腦科學家們發現, 要用電腦得站在電腦前面有點累的腰疼,也不方便多人運動,於是就把控制裝置拉出來,就是終端機(Terminal), 而上古世紀還沒有螢幕的時候,大家用的是電傳打字機(Typewriter, TTY)。 而時至今日,我們所熟知的螢幕鍵盤替代了機械的打字機, 卻仍在用黑底白字模擬當年的終端機(Terminal Emulator),述說著那個年代的技術。
Shell
作業系統的「內核 Kernel」負責運作,用戶通過「殼層 Shell」與之交互。
這個「殼層」其實就是一個特殊的軟體,一種指令直譯器(Command Interpreter),一台電腦上可以同時有多種多樣好幾個。
例如 Windows 下傳統的 CMD 和新血 PowerShell,Linux 下的 Bash 和 Zsh;
圖形界面的也可以叫 Shell,例如 Windows Shell 包括大家熟悉的 explorer.exe
,
Linux 下的 Gnome、KDE、XFCE … 但是我們這裡先講命令列。
不同的 Shell 的指令有不同的寫法,就像不同的程式語言一樣, 但指令基本上在做的事情都是存取系統資源和呼叫程式或 Scripts。
Command line
命令列其實非常好理解,主要就是「教哪個程式怎麼做事」,指令的各個部分用空格隔開,
通常包括做什麼(程式),對誰做(輸入),怎麼做(參數)。
舉個最最簡單的例子:cp a.txt b.txt
就是複製 (cp
)檔案 a.txt
到 b.txt
。
是不是簡單又暴力呢。
在這裡,cp
是「目標程式或者指令」,而後所有的東西都是「參數(Arguments)」。
這套邏輯在各大平台幾乎都是一樣的。
⚠️ 玩弄指令有風險,使用前請詳閱以下說明
再舉個更簡單的例子:rm /*
就是刪除(rm
)電腦中的所有檔案(/*
),這聽起來很恐怖對吧,
這指令只和我們常用的清除當前資料夾下所有檔案 rm ./*
只有一點點的距離。而指令一旦執行更是往往回頭無岸,
這也是為什麼沒事不要輕易的教純真的用戶使用指令,
所以各位在使用命令列的時候必須完全理解自己輸入或者拷貝來的指令甚至於每一個符號,以免追悔莫及。
Get-Help
搞懂一個指令是非常重要的,而不懂的時候就要「尋求幫助」。
PowerShell 的官方文檔說過『專家並不總是知道答案,但他們知道如何找出答案。』
Shell 作為人與電腦的中介,甚至在古代是唯一的中介,通常自備使用說明書,
在 Linux 上有手冊頁(manual pages)可以通過指令例如 man ls
查詢幫助文檔,
在 Windows 的 PowerShell 中,也有查詢指令說明和資訊的工具,
Get-Help
、Get-Command
、和 Get-Member
被稱為「三個核心 cmdlet」,可見他們對幫助文檔的重視。
命令列軟體通常也會有選項可以印出他的用法,包括參數的含義,例如 7z.exe --help
。
還是搞不懂的話,那,還有 Google 搜尋。
搞懂了指令之後我們就可以開始寫指令了,但一列指令可能不那麼的能體現出指令的優勢, 複製檔案的 Ctrl + C、Ctrl + V 肯定比敲一列又臭又長的指令快得多,那什麼為什麼還需要用指令? 因為指令其實就是一列的文字,而文字可以做的操作就多得多了,可以很方便複製貼上修改,可以被重複、組合、排程、自動化。
Shell Script
假設遇到的這樣的問題:改一百萬個檔名、壓縮一百萬和檔案。 或者更進階一些:按照日期分類一百萬張照片。 又例如說、自動備份、批量上傳、資料清洗、……
這種簡單而重複的作業,GUI 程式可能少有對應的工具,而 Shell script 正是其絕佳的解決方案! Windows 的遠古 shell script 叫做 Batch 即是批次處理的意思。
把一坨指令放在一起執行的正是 Shell Scripts。 還可以善用變數、迴圈和判斷加以智能。 這時候您會發現您的電腦長大了會自己做事了。
有了這些基礎知識,接下來就會介紹一些進階的使用技巧。