[第一週] Command Line 基本指令與操作

MiaHsu
8 min readMar 1, 2020

--

學習目標:學會常見指令(例如說 cd、ls、rm、mv 等等)

本文主要源自以下資料的學習整理:

command line 基本理解

電影裡的電腦高手,為了展現他高超的能力,就會對著黑色的視窗輸入一些觀眾看不懂的英文,按下 enter 後,就開始跑出更看不懂的東西了。

程式高手就是透過 command line 與電腦進行溝通。

command line 也被稱作 命令行命令行介面 是一個純文字的應用程式,可以查看,處理電腦裡的檔案,我們平常習慣了圖形使用者介面(Graphical User Interface,GUI)的操作,其實背後也都是這些命令列介面(Command Line Interface,CLI)所構成的。

不用簡單易懂的 GUI 而轉使用 CLI 的情境有以下兩點:

  • 有些功能只能靠 CLI 達成。
  • 有時候使用 CLI 更快達成目的。

打開 command line

windows
按下開始,搜尋 cmd 。

Mac OS X

搜尋 → Terminal.app。

如果是使用 Mac 推薦使用 iTrem

原因

  1. 可以自定義介面樣式。
  2. 可以開很多分頁。

安裝參考:超簡單!十分鐘打造漂亮又好用的 zsh command line 環境。(基本上照著安裝指令即可完成,這邊提醒一下,安裝 powerline font 的第一行指令要從 caskroom/fonts 改成 homebrew/cask-fonts ,才不會出現安裝錯誤喔!)

安裝心得:結果安裝這個花了不少時間,教學寫的 10 分鐘對我來說都要在乘上好幾倍的時間,不過裝好之後感覺又解鎖了一項成就啊(感動~

提示字元(Prompt)

如果你是用 Mac 或 Linux,你大概看到一個 $ 符號,像這樣

$

在 Windows 下,它是 > 符號,像這樣

>

可能會看到類似 C:\Users\mi0857> 的字樣 或 Olas-MacBook-Air:~ mi0857$ 都是正確的喔!

指令(command)

I. 基本指令

whoami(Who am I)

  • 是作業系統中用於檢視目前有效用戶名稱的命令。

ls(list)

  • 列出所有檔案和路徑
  • 變化型
    1. 列出隱藏的目錄:ls -a
    2. 列出詳細資料:ls -l
    3. 包上述兩個:ls -la
    4. 列出 .js 的檔案:ls *.js

pwd(print working directory)

  • 顯示目前路徑

cd(change directory)

  • 切換目錄
  • 寫法: cd 子目錄
  • 變化型
    1. 回到 home 目錄:cd ~ # 屬於使用者底下的資料夾
    2. 回到根目錄:cd / # 電腦最底層
    3. 回到上一層資料夾:cd ..

小訣竅
1. 當輸入 cd 空格 時,按 tab 會幫你自動列出底下的資料夾列表。 #等於是輸入 ls
2. 輸入前幾個字母,再按一次 tab 會幫你自動補完資料夾名稱。
3. 切換槽(windows):d:
4. 回到桌面: ~/desktop

clear

  • 清空 Terminal 面板。

exit

  • 關閉 Terminal。

II. 檔案操作指令

mkdir(make directory)

  • 新建資料夾。
  • 寫法:mkdir 資料夾名稱
  • 舉例:mkdir test01

rm (remove)

  • 刪除檔案,這邊的刪除檔案是「直接刪除」,並不會進到垃圾桶中,因此使用時要小心。
  • 變化型:
    1. rmdir (remove directory):刪除空資料夾,若資料夾內有檔案就無法刪除。
    2. rm -rf :刪除整個檔案或整個資料夾 #謹慎使用,刪掉就真掰掰了。

小訣竅
1. 當刪除的檔名帶有空格或特殊字元時可使用單引號將檔名括起來,舉例:rm '要 刪 除 的 檔 名'

mv(move)

  • 作用一
    1. 移動檔案
    2. 寫法:mv 檔名 路徑 #要注意相對路徑跟絕對路徑的差異。
    3. 舉例:
    相對路徑:mv file folder #以 desktop 為 home 目錄。
    絕對路徑:mv file /Users/miahsu/desktop

補充說明:將檔案移動到上一層,就必須使用絕對路徑的寫法來移動

將檔案移動到上一層
  • 作用二
    1. 改檔名
    2. 寫法:mv 原檔名 新檔名
    3. 舉例:mv originalFile newFile

touch

  • 碰一下檔案
  • 寫法:touch 檔名
  • 情況一:假設檔案不存在,就會建立一個新的檔案。
  • 情況二:假設檔案存在,更改檔案些改時間。

cp(copy)

  • 複製檔案
  • 舉例:cp file01 file01_copy
  • 變化型
    cp -r
    寫法:cp -r 原資料夾名稱 新資料名稱
    舉例:cp -r folder folder_copy

echo

  • 作用一:印出字串在 Terminal 面板。
  • 作用二:印出字串在檔案中#詳見組合技 redirect

cat(catenate)

  • 將檔案內容顯示在 Terminal 面板。

less

  • 將檔案內容以分頁顯示在 Terminal 面板。

grep

  • 抓取特定關鍵字,並高亮顯示(有分大小寫)。
  • 寫法:grep 字串 檔名
  • 舉例:grep a test2.txt

wget

  • 下載檔案至當前目錄。
  • 不是每台電腦都有的指令,可以透過 Homebrew 進行安裝。
  • 安裝指令:brew install wget
  • 寫法: wget 圖片網址

curl

  • 送出 request
  • 變化型:
    curl -I 擷取 request header

現在不太會用到,待往後串接 api 可以用來做測試。

III. 其他指令

man(manual)

  • 查看指令用法說明書。 #windows 沒有

date

  • 印出現在時間。

top(table of processes)

  • 印出所有 processes 。可以顯示即時的系統負載狀態,而它也可以用於指令稿中,輸出各種系統資訊。

tail

  • 印出檔案的最後幾行。
  • 變化型:tail -f 常用於 web server 查看 log debug 時。

vim

  • 進入 vim 編輯器,分為普通模式跟編輯模式
  • 對應 key:
    i 進入編輯模式
    esc 進入普通模式
    :q 退出
    :wq 存檔後退出
    :q! 不存檔直接退出

更多使用方式可參考:鳥哥的Linux 私房菜 — 第九章、vim 程式編輯器

IV. 組合技

pipe:|

  • 串接指令
  • 把「前面指令的輸出」變成「後面的輸入」
  • 舉例

把前面顯示出 text2.txt 的內容傳到後面 grep o 的輸入,就會得到抓取 text2.txt 的內容的關鍵字,等同於 grep o text2.txt,因此我就很好奇如果相同的方法使用在 date 上可以嗎?因此得到了不同的結果。

redirect:>

  • 重新導向
  • 說明:此方式檔案原內容會被新增的內容將全部覆蓋掉,若要避免可使用 >>
  • 舉例 1.、使用 echo 將內容新增至檔案中 #若無此檔案則會直接新增檔案並增加其內容

小試驗(一)

windows 環境

因為我自己都有留存照片的習慣,但畢業後整個老態龍鍾(?沒什麼在拍照也懶得整理了,趁著這次來建立一個 2020 的相簿吧!

目標:

  • 在 D 槽的照片底下新增 2020 年資料夾
  • 將桌面 0224.25_緩慢 資料夾移動過去

操作開始

step1. 切換到 D 槽 d:

step2. 在照片下新增 2020 mkdir 2020

step3. 確認新增 dir

step4. 切換回 C 槽 c:

step5. 將桌面的資料夾移動到 D 槽 …..!!!!!

無法移動,一直跳出存取被拒。

但嘗試同個槽移動是可以的。

上網查了資料發現可能因為這兩個造成的:

  1. 使用者權限的關係

https://www.mobile01.com/topicdetail.php?f=300&t=5563384

2. move 不能跨分割槽移動資料夾 https://codertw.com/%E5%89%8D%E7%AB%AF%E9%96%8B%E7%99%BC/389446/

step6. 改成 D 槽內移動 mv 0224.25_緩慢 2020

雖然跨槽移動失敗了,但相關的指令還是有達成。

小試驗(二)

mac 環境

目標

  • 建立一個檔案,存在 /data/test.txt
  • 複製上面的檔案,存在 /data/copy/test2.txt
  • 刪除這兩個檔案

操作開始

step1. cd ~/desktop/data

step2. touch test.txt

step3. mkdir copy

step4. copy test.txt test2.txt

step5. rm text2.txt copy

--

--

MiaHsu

每件事都是最好的安排,成為更好的自己