學習目標:學會常見指令(例如說 cd、ls、rm、mv 等等)
本文主要源自以下資料的學習整理:
- [CS101] 初心者的計概與 coding 火球術
- Linux Command 命令列指令與基本操作入門教學
- Django Girls’ Tutorial 中文版教材-介紹命令行(command-line)介面
- [CMD101] Command Line 超新手入門
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 。
原因
- 可以自定義介面樣式。
- 可以開很多分頁。
安裝參考:超簡單!十分鐘打造漂亮又好用的 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 槽 …..!!!!!
無法移動,一直跳出存取被拒。
但嘗試同個槽移動是可以的。
上網查了資料發現可能因為這兩個造成的:
- 使用者權限的關係
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