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.txt 與 456.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 使用
指令的使用時機
以 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 有一些基本的瞭解才有辦法寫。