Linux 是開源的作業系統,Linux 開發環境學問深,以 鳥哥的Linux 私房菜 網站都在講相關知識,全部學完幾乎是不可能也沒這必要,真正必學的並沒有太多,最重要基本 linux commands 常用的指令。

使用 command 需先開 shell,shell 是輸入指令跟電腦溝通的地方,以使用任何 linux 系統直接開 bash 就可以,MAC 開 terminal 或終端機,Windows 使用 wsl。


navigation (瀏覽與遊走不同資料夾)

pwd (印出目前所在位置)

print working directory 的縮寫,輸入 pwd 指令。

用 GUI 打開路徑

MacOS 輸入 open .,直接在圖形介面打開目前的資料夾,指令中的 . 表示目前資料夾路徑。
open <路徑> 直接指向開啟目標路徑資料夾,以圖示化介面開啟,例如: oopen / 直接開啟就直接開啟根目錄。

wsl 輸入 explorer.exe <路徑>

ls (印出所在資料夾的檔案)

輸入 ls,list 的縮寫。

ls -a (列出所在資料夾的檔案 (包含隱藏檔))

Linux 跟 Windows 都有隱藏檔案,在 Linux 系統檔名開頭是 .xxx 就是隱藏檔案。

使用指令在加上 -a 選項可顯示包括隱藏檔案的所有檔案。

ls -l (列出所在資料夾的檔案 (詳細資訊))

使用指令 ls -l 之後,就會顯示權限、檔案大小、檔案被修改的日期等等這些詳細的資料。

ls -la (列出所在資料夾的檔案 (詳細資訊))

輸入 ls -la 就可以同時顯示所有的檔案也顯示詳細資訊。

ls <路徑> (列出指定路徑下的檔案)

ls <路徑> 可顯示任一個地方的檔案,例如 ls / 就可直接查看到根目錄下的檔案。

使用 man 指令,可由 man page 查看到整個的詳細文件,例如 man ls 就可以看見整個參數選項,當查看 mam page 時點按 q 鍵就會跳離。

cd (移動)

意思是change directory,例如有 repos 這個目錄。

cd <路徑> (移動到其他位置)

cd repos 就會進入 repos 這個目錄。

cd .. (回到上一層位置)

輸入 cd .. 就可以回到上一層位置。

相對路徑與絕對路徑的概念

使用所有指令時,基本上以相對或是絕對路徑,指令都是可以使用。

絕對路徑,無論在那個路徑下使用都是永恆不變的路徑

絕對路徑指的就是開頭是斜線的路徑,使用 pwd 看到的路徑就是絕對路徑,例如: /Users/jamesku,使用 cd 指令時也可使用絕對路徑,輸入 cd /Users/jamesku/repos 也可直接進入 repos 資料夾。

相對路徑,在目前位置路徑而有改變

相對於你目前位置的路徑。


檔案操作

mkdir <資料夾名稱> (建立資料夾)

輸入 mkdir <資料夾名稱> 就可以建立一個新的資料夾。

cat <檔名> (快速查看檔案中的內容)

假設目前的資料夾中有個檔案叫 123.txt 檔內容是 123123,使用指令 cat 123.txt 檔案內容就會直接印在畫面上。

cp (複製檔案)

cp 指令是 copy 的縮寫。

cp <來源> <目的> (複製成另外一個檔案)

想要複製 123.txt 複製成另外一個檔案,而檔名叫 456.txt,使用指令 cp 123.txt 456.txt,當在使用 ls 指令後資料夾中就有 123.txt456.txt 二支檔案。

cd -r <來源> <目的> (資料夾完整複製成另外的資料夾)

-r 選項要多加上,才能針對資料夾進行操作複製,是 recursive 的縮寫。
cd -r <來源> <目的> 指令,例如有個資料夾叫做 my folder 較另複製一份資料夾,使用指令 cp -r my-folder my-folder2 來複製就會多出另外一個 my-folder2 的資料夾。

rm (刪除檔案)

輸入 rm <檔名> 就可以刪除一個檔案,使用絕對路徑或相對路徑都是 OK 的。

rm -r (刪除資料夾)

加上 -r 的選項刪除資料夾。

rm -rf (略過確認訊息直接刪除)

有時會有權限問題跳出需要確認的訊息,千萬不要刪掉系統必須的檔案,電腦就無法正常運作

mv (剪下貼上的功能)

move 的縮寫 mv 指令來達成,也可以使用絕對路徑。

mv <來源> <目的> (移動檔案)

例如 123.txt 移到 f1 資料夾中,輸入 mv 123.txt f1

mv <原檔名> <新檔名> (檔案重命名)

例如想要把 456.txt 改為 654.txt,輸入指令 mv 456.txt 654.txt 就可以改檔名。


vim 文字編輯器

vin <檔名> (用 vim 開啟檔案)

想像文字介面版的記事本,只要輸入 vim <檔名> 就可開啟檔案。
就算輸入的不是一個實際存在的檔名一樣可開啟,只要之後存檔檔案就會出現了,就像先開記事本編輯完後再另存新檔一樣的意思。


搜尋先前輸入過的指令

↑ 或是 ↓ 方向鍵 (搜尋近期使用指令)

點按 ↑ 或是 ↓ 方向鍵可選之前使用過的指令,

ctrl + R (往之前搜尋用過的指令)

要找很久以前輸入過的指令,按鈕 ctrl + R 鍵後輸入一些文字進行搜尋,找到的結果不是想要的可繼續按 ctrl + R 鍵,可繼續往前搜尋。

ctrl + S (往之後搜尋用過的指令)

ctrl + R 鍵查找指令過久或過頭,可使用 ctrl + S 返回往後查找。


Package manager 使用指令操作安裝管理工具

就手機的 Apple store 或 play store 一樣使用指令來進行操作。
package manager 系統上會有著各自的管理工具,MacOS 使用 brew install 指令來安裝,ubuntu 使用 apt install 指令,manjaro 使用 pacman -S 指令,


指令的使用時機

以 SSH 操控遠端 server

使用 ssh 操控遠端 server,讓電腦連線到遠端 server 進行操作,可理解成沒有圖形化介面的遠端桌面,一般的個人電腦會安裝所謂的 desktop environment,會允許透過圖形介面對電腦進行操作,像常用的 Windows 或是 ubuntu 都是原廠狀態就有圖形化介面。

不過 server 的主要功能就是掛著,給人以圖形介面操作並不是主要功能,而且會消耗多餘的運算資源與易導致系統不穩定,通常 server 上都是不會安裝。

environment 情況下使用指令去進行操作,另外也必須要使用 command line 操作。

使用 docker 讓 dependencies (第三方套件) 與 docker image 操作

用非常粗淺的方式介紹 docker,寫的程式通常不可能是從 0 開始,一定用些已做好的套件或者是框架,就稱為dependencies。

除 dependencies 之外也要確保執行的作業系統跟執行環境都是正確,才能讓程式能夠正確執行,若部屬時都要手動去設置這些環境會是很大的工程,當部屬時不用煩惱這些問題就會用 docker 把執行環境 dependencies 等東西全包成一個 docker image,在部屬時就可簡單跑起來。

docker image 執行時再進到裡面進行一些操作,甚至對 docker 本身進行一些操作,通常都需使用 command line 來進行。

CI/CD

CI/CD 稱為 continuous integration 或是 continuous deployment,簡言之對程式碼進行變更所觸發的自動化流程。

例如推了 commit 到 github 上面的時候,自動化的測試被觸發來檢驗改動的部分,透過跑測試方式來確認有沒有造成 code 壞掉,如果沒問題就會自動把新版的程式碼,部屬到伺服器上面。

CI/CD 自動跑測試或是自動去部屬程式碼的腳本,常常就是用一行一行的指令去做定義,總之如果要寫 CI/CD 的 script 也是要對基本的 linix command 有一些基本的瞭解才有辦法寫。


參考資料

快速linux指令教學(mac, windows, unbuntu…等等適用)|工程師必備技能