讓你好像很厲害的Command Line


Posted by ai86109 on 2020-03-07

什麼是 Command Line?
我們常在電影裡看到駭客在操控電腦時,都會在黑底的介面上輸入文字,這就是Command Line。

圖形化介面 vs 命令列介面

一般我們在使用電腦的時候,想要開網頁就點Chrome的圖示,想要開資料夾就點兩下資料夾即可,這就是熟悉的圖形化介面(Graphical User Interface, GUI);而命令列介面(Command Line Interface, CLI),就是利用文字去操作上面這些動作。

既然圖形化介面如此直觀且方便,為什麼我們還要學命令列介面呢?

原因有兩個
當你想要寫文章的時候,你只要點選word便可以開始撰寫了,但寫程式不一樣,有些工具是沒有提供圖形化介面的,只能透過指令(Command Line)來操作它。
像是如果你要傳送封包到一個IP,你可以使用ping 對方的IP address;或是你要解析一段網址的IP address nslookup www.google.com,他就會回傳給你例如8.8.8.8

第二個原因是其實使用Command Line跟寫程式一樣,都是利用指令與電腦溝通,所以既然打算開始寫程式了,就先學學CLI吧!

事前準備

工欲善其事,必先利其器。

想要使用Command Line,總要先知道要在哪裡使用,對吧。因為我是使用Mac,所以在電腦裡只要搜尋terminal,就可以開始使用了非常方便。

但其實內建的終端機不太好用,所以我有另外安裝了iTerm2,他可以個人化、較美觀,也可以像瀏覽器一樣開多個分頁。畢竟如果要寫程式,之後一定會有相當的時間是用到command line的,所以給自己一個舒適的操作環境,也是件相當合理的事情。

詳細的安裝流程可以參考以下:
iTerm2 + zsh,打造更好的工作環境
超簡單!十分鐘打造漂亮又好用的 zsh command line 環境

待你把工作環境都設置的很舒適之後,就可以開始寫command line了!

基本指令介紹

pwd
Print Working Directory,也就是印出你現在目前的位置

ls
LiSt,印出現在資料夾底下的檔案
ls -l會以列表方式,較詳細的列出
ls -a會印出包含dot(.)開頭的檔案,通常是隱藏檔案
ls -al顧名思義就是以列表方式列出所有檔案,包含隱藏檔

cd
Change Directory,切換資料夾
例如我現在在桌面,桌面上有一個名稱為hello的資料夾,輸入cd hello,我就可以進到hello這個資料夾了。

如果每進一層資料夾就要輸入一次也是滿麻煩的,所以可以直接輸入路徑進入,cd /User/cyen/Desktop/hello

小提醒:在這邊有個快速輸入的方法,如果我要打Desktop,我可以輸入des再按tab,他就會自動幫你輸入整個名稱,會比你自己打快很多。

那如果我要往上一層呢?輸入cd ..

回到根目錄(/Users/cyen),cd ~
所以其實我要從根目錄進到hello資料夾也可以打成,cd ~/Desktop/hello

man
MANual,使用說明書
man ls 就可以查詢ls的使用方法

clear
清空畫面

touch
可以想成碰一下檔案,所以可以改檔案的最後修改時間,如果碰一個不存在的檔案就會是建立一個新檔案。
touch empty.txt 就可以建立一個名為empty的txt檔
Touch也可以更改檔案時間

rm
刪除檔案
rm test.txt就可以刪除test.txt這個檔案
rmdir test就可以刪除test這個資料夾,但有些平台沒有支援這個語法,可以用rm -r test
其他rm用法

mkdir
MaKe DIRectory,建立資料夾
mkdir test會建立名為test的資料夾
詳細用法

mv
更名/移動
mv test.txt test1.txt (test.txt更名為test1, 資料夾不變)
mv test1.txt .. (將test1移到上一層)
mv test1.txt ~/desktop/from/ (將test1移到桌面上的from資料夾)
以上可以不加.txt

cp
CoPy,複製
cp hello hello2 直接在當下資料夾以hello為模板,建立hello2
cp -r db db2 同上,差別在於是複製資料夾
cp from/test1.txt ~/desktop/ 複製檔案到其他地方

cat
conCATenate,連結
顧名思義,你可以使用cat來合併檔案。如果你用cat hello,則會直接印出檔案內容。

以上就是一些最常用的指令,那如果我想要編輯檔案內容該怎麼做呢?
我們可以使用Vim編輯器
vim test1.txt,輸入後會進入test1.txt內
i 進入輸入模式(i是insert的意思),就可以鍵入要輸入的文字
按下esc進入普通模式,此時不能輸入文字,但可以刪除、複製、貼上
如果不要編輯想離開了,先進入普通模式
鍵入 :w 存檔
鍵入 :q 關閉
鍵入 :wq 存檔後關閉
更多用法可以參考


其他好用指令

grep
Global Regular Expression Print,搜尋檔案內容
假設你有一個檔案hello,內文如下:

hello world!
yoyoyo
cli

你想找出內文有y的地方,可以用grep y hello,就會印出有y的那一行
yoyoyo
詳細使用方式

wget
下載檔案
wget 檔案網址 除了圖片之外,也可以下載網站的原始碼

curl
送出request
curl 網址 會將回傳的東西印出,可能是html, json, xml等格式
curl -I 網址 會回傳header的資訊
使用方法可參考

find
查詢檔案
find . -name READ.md 在當前目錄下尋找檔名為 READ.md 的檔案
find . -name "*.md" 尋找在當前目錄下的 .md 檔

telnet
測試遠端 ports
telnet 140.112.172.1 23 表示連到 140.112.172.1 的 23 port

file
檢查檔案類型
file hw1.md 會印出 hw1.md: UTF-8 Unicode text

指令也有組合技

redirection
輸入與輸出重新導向,使用的符號是『>』

ls > test1.txt
會清空test.txt的內容,再將ls的輸出放入;若本無test1.txt,會建立後再將ls的輸出放入

ls >> test1.txt
會將ls的輸出,接續在test1.txt內容之後

pipe
管線(要將輸入輸出串起),使用的符號是『|』

nl 會將每一行資料加上行號
ls | nl,這邊會將ls的輸出都加上行號之後印出
redirection & pipe 詳細使用說明


因為當時在學習時,一直出現command not found的問題
後來的解決方式是參考這篇:linux出現command not found的解決方法


#command line #iterm2 #terminal







Related Posts

useRef ref callback

useRef ref callback

JavaScript 核心 - Event Loop

JavaScript 核心 - Event Loop

給自己看的 JS 進階-物件導向

給自己看的 JS 進階-物件導向


Comments