# 伺服器 ## 要安裝的東西 ### 給Windows使用者 如果你的電腦不到Windows10的話可能無法安裝,等等請求助 二選一即可(推薦wsl) * wsl(Windows Subsystem for Linux) 註:北一已經裝好了 1. 去`設定>系統>選用功能`點開**更多Windows功能** 2. 勾選`Windows子系統Linux版`和`虛擬機器平台`![image](https://hackmd.io/_uploads/B12bHIlcT.png) 4. 按下`確定`,然後等他安裝完成 5. 重新開機 6. 同時按下`Windows`和`r`,你會看到左下角(預設)有一個小視窗![winR](https://hackmd.io/_uploads/BkAgI8lq6.png) 7. 輸入`powershell`(或`cmd`)並按下`Enter`,如果你覺得藍藍得很醜可以去Microsoft Store上下載`Terminal Preview` 9. 輸入`wsl -l -o`查看可以下載的清單,你應該要看到和下圖一樣的東西![wsl-l-o](https://hackmd.io/_uploads/BJDKL8ecp.png) 10. 輸入`wsl --install -d Ubuntu`(代表我們要下載 Ubuntu 這個Linux發行版)![wsl--installUbuntu](https://hackmd.io/_uploads/r1FRIUxcp.png) 11. 他會先問你 Enter new UNIX username: ,你就輸入你的用戶名稱即可,可以有英文和數字,~~不要像某個人一樣一直用root~~![startwsl](https://hackmd.io/_uploads/r1XXvIx5T.png) 12. 他會請你輸入你的密碼,輸入過程中不會顯示,~~不然你的密碼就被看光光了~~ 13. 如果你兩次不一樣他會問你要不要重試,就輸入`y`就好 14. 去vscode安裝一個叫做 WSL 的延伸模組 * 虛擬機(有興趣的自己研究研究),這個系統需求較高,~~反正就是下載VMWare或Virtual Box然後找個映像檔(.iso)裝進去就好了~~ * ~~&#8203; 洗掉灌 Linux &#8203;~~ ### 給Mac使用者 先安裝homebrew,請打開terminal然後貼上這段`/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`,之後要裝什麼東西都是`brew install <pkg>`,把`<pkg>`改成你要裝的東西 ### 給Linux使用者 很好,什麼都不用 ## 什麼是伺服器 伺服器是一種電腦,負責網頁、線上應用程式等等的資料處理及儲存,通常伺服器從遠端進行管理。 ## 伺服器託管平台 Host平台會幫你管理伺服器,然後通常是我們去跟他租伺服器,通常價格依據規格而定,尤其AI要用到的GPU特別貴,多虧於這些平台,只要刷張卡就有伺服器可以用了好ㄟ,平台蠻多的,舉幾個可能大家會有聽過的 * google cloud platform * aws(amazon) * azure(microsoft) 這些平台通常還會整合資料儲存、api、網域管理等等重多功能。 ## 伺服器作業系統 伺服器常見的系統有以下幾個 * windows server * Linux * FreeBSD 其中linux和FreeBSD都是**開源**類Unix作業系統,都非常安全可靠,雖然Windows Server在穩定性低於linux和FreeBSD,但~~他已經進步不少了別這樣嘛~~ ## 終端機 終端機是一種電腦的周邊設備,用來讓使用者輸入資料,及顯示其計算結果的機器。簡單來說,它是人類使用者與計算機互動的裝置。終端機有些是全電子的,也有些是機電的。在現代電腦中,終端機通常是指命令列介面或終端模擬器。 在Windows電腦中,預設有cmd和powershell兩種,兩種的指令方式不同,在使用上非常麻煩,而在Linux、Mac等等Unix家族作業系統,指令較為相似,所以今天才會請用Windows電腦的同學先安裝wsl。 在終端機中,你會看到,一個游標,而你游標所在的那行,最左邊有一段文字,代表你是哪個用戶,和現在所在的目錄(資料夾),然後你可以在此輸入指令,如下圖。![terminal](https://cdn.discordapp.com/attachments/1114571898307752101/1200311312199192616/IMG_1460.png?ex=65c5b805&is=65b34305&hm=f030291beed30703fea15e9638fa673808f3a4df47704bee95d7b16ce18c67a5&) ### 路徑 路徑,指出一個目錄或檔案的位置,有絕對路徑和相對路徑兩種,絕對路徑在 Linux 上是以`/`或`~`開頭,相對路徑是從當前目錄開始,指向一個檔案路目錄。 路徑中有些符號如下: * `/`用於分個路徑上的目錄名稱 * `.`代表當前所在目錄 * `..`代表上一個目錄 * `/`開頭代表根目錄,是包含所有電腦中的檔案。 * `~`代表家目錄,~~就是你家~~,你的名稱是`ckeisc807`的話,你的家目錄就是`/home/ckeisc807` 範例如下: 當前所在目錄為`~/code/apcs`,內容如下 ``` . ├── 20231022 │   ├── a.cpp │   └── b.cpp └── 20240107 ├── 1.cpp ├── 2.cpp ├── 3.cpp ├── 4.cpp └── a.out ``` `4.cpp`這個檔案所在的絕對路徑是`~/code/apcs/20240107/4.cpp`,相對路徑是`20240107/4.cpp` 如果移動到`20231022`中,`4.cpp`這個檔案的相對路徑變為`../20240107/4.cpp`。 ## 操作指令 以下指令都是以在Ubuntu的為主。會以`<dir>`代表為資料夾路徑,`<file>`代表檔案路徑,`<text>`代表字串(可用`'`或`"`在前後標註,如果檔案或資料夾路徑中有空白等特殊字元也須使用),部分指令可以加入參數,如果`ls`這個指令有一個參數`-a`,則用法為`ls -a`,此外可以用`Tab鍵`自動幫你打好檔名、資料夾名。 如果想查看一個指令的完整介紹,試試`<指令> --help`或`<指令> -h` ### 基本指令表 * `help`,顯示內建指令 * `pwd`,顯示當前路徑 * `clear`,清除終端機內容 * `ls <dir>`,顯示當前資料夾中的檔案及目錄,`<dir>`預設為當前目錄`.`,`ls`可加入其他參數 * `-a`,顯示當前目錄中的所有檔案(包含檔名為`.`開頭的影藏檔案) * `-lh`,顯示更多資訊 * `-R`,顯示當前整個目錄中的所有當案(包含資料夾中的) * `cd <dir>`,移動至目錄,`dir`預設為`~`家目錄,`cd`可加入其他參數 * `-`,回到上一次到的目錄 * `mkdir <dir>`,建立資料夾,`mkdir`可加入其他參數 * `-p`,可一次創建新資料夾中的新資料夾 * `touch <file>`,創建檔案 * `cat <file>`,輸出整個檔案內容 * `head <file>`,輸出較少的檔案內容,看名稱就會知道是檔案的頭 * `echo <text>`,輸出字串 * `rm <file>`,刪除檔案,有很多種參數可以加 * `rm -r <dir>`,刪除資料夾及其當中的檔案 * `-i`,刪除前需確認 * `-f`,一律不需確認,小提示: 可以用`-fr` * `rmdir <dir>`,刪除空資料夾,~~我不知道這個存在的意義是什麼~~ * `export <text0>=<text1>`,設定環境變數,將環境變數`<text0>`設為`<text1>`,**注意**關閉終端機後就會消失 * `alias <text0>=<text1>`,創建命令別名,`<text0>`代表別名,`<text1>`代表別名的內容,例如執行`alias hello="echo hello world!"`後,只要輸入 hello 就會執行`echo "hello world!"`,**注意**`alias`在關閉終端機後就會消失 * `exit`,離開關閉終端機 * `find <dir> -name <file>`或`find <dir> -name <dir>`,搜尋檔案或資料夾,`<dir>`預設為當前目錄 * `source`,執行某個檔案的內容(以指令的方式),通常用於在編輯完成`.bashrc`後,用`source ~/.bashrc`來將 .bashrc 的內容執行 * `less`,可以一次輸出較少東西,常用方式是`cat <file> | less`,在`<file>`這個檔案很大的情況下好用 * `grep`,用於擷取文字中包含特定文字,常見用法如下, * `ls | grep <text>`,會找出目前目錄中名稱包含`<text>`的檔案和資料夾 * `sudo <command>`,這樣就可以用root權限執行某個指令`<command>` * `su <user_name>`,使用者改為`<user_name>` * `shutdown now`,將電腦關機 * `reboot`,將電腦重新啟動 * `chmod`,變更權限,最常用的就是`chmod +x <file>`這樣會允許`<file>`這個執行檔或批次檔執行,而等等也會用到的`chmod 400 <file>`是將權限設為只有文件所有者才可以讀取 * `chown`,變更用戶,下圖是變更用戶,然後把 a.out 這個檔案的的權限改為只用所有者可以讀取![image](https://hackmd.io/_uploads/HJKfjVf56.png) ### 運算符 常用的運算符可以幫助你很多很多 * `;`讓你在同一行打多個指令,這用來分割 * `&&`讓你在同一行打多個指令,這用來分割,如果前面的**無法**正常運行,後面的指令就不會運行 * `||`讓你在同一行打多個指令,這用來分割,如果前面的**可以**正常運行,後面的指令就不會運行 * `>`讓你把輸出寫進某個檔案,例如`echo "hello 2024 ckefgisc winter camp" > hello.txt`,就是將echo輸出的內容寫進hello.txt的檔案裡 * `<`讓你把某個檔案作為輸入,例如`./ans.out < 1.in > 1.out`,會將1.in作為輸入1.out作為輸出,當然`<`可以單獨使用 * `$`,用來表示變數數值,例如`echo $HOME`就是輸出`HOME`這個環境變數的數值 * `|`將第一個指令的輸入作為另一個指令的輸出,例如`cat a.txt | clip.exe`會將a.txt的內容複製到剪貼簿,不過`clip.exe`只有WSL能用 ### 批次檔 讓你先寫好一個檔案,會自動幫你輸入指令,就不用每次都要打一大堆了好ㄟ * 解譯器 每個批次檔都可以選擇解譯器,不同的解譯器甚至可以用來跑不同語言的批次檔,預設的就跟我們在終端機打的指令是一樣的,稱為`bash`,所以為了避免系統出錯,我們習慣在第一行加上註解`bash`的路徑,用於設定解譯器,例如`#!/bin/bash`或`#!/usr/bin/bash`,除了原本的`bash`以外也可以用`python`、`node`,例如`#!/usr/bin/python3`、`#!/usr/bin/node` * 開機批次`.bashrc` 這個批次檔會在你每次開啟終端機時自動執行,放置於家目錄中。 ### apt (套件安裝) apt 是 Ubuntu 、 Debian 等等 Debian-base 的 Linux distro 中的套件管理系統,可用來安裝、刪除、更新套件。 每次安裝前記得先更新`sudo apt update && sudo apt upgrade`,如果太久沒更新可能導致無法正常安裝等等問題,可能需要一段時間請耐心稍後,如果過程中遇到類似畫面如下,選`<OK>`即可![image](https://hackmd.io/_uploads/S18fS2l5T.png) 用`sudo apt install <package>`來安裝套件,他會自動上網檢索是可供安裝的版本及是否安裝過這個套件,如果可以安裝,他會問`Do you want to continue? [Y/n]`,輸入`y`代表繼續,就會自動化完成安裝,如果你覺得 Do you want to ~~build a snowman~~ 很煩的話可以加上`-y`的參數,他會自動同意,例如`sudo apt install <package> -y` 除了`apt`以外,還有`apt-get` `apt`是`apt-get`的更新版本,它結合了多個套件管理工具的功能,以方便使用者使用。`apt`命令列工具透過直覺式指令、產生的行為與安全功能為最終使用者提供更高等級的使用者介面。相較之下,`apt-get`命令是一個低階介面,可與Linux核心處理程序進行更密切的通訊。 ### 常用套件 以下套件不一定有安裝過,如果出現`command not found`等等報錯,請用apt進行安裝 * `nano`,內建的(不需另外安裝)文字編輯器,用`nano <file>`打開檔案,如果該檔案未存在,會建立新的。 * `vim`,會用的都說讚的編輯器,可以用來編輯檔案,用法上手難度較高,使用方式請見補充,其他和 nano 相似。 * `neofetch`,如下圖,甚至可以自訂顯示的內容。 * `python3`,就是 python ,用`python3 <file.py>`來跑 python 程式 * `g++`,C++的編譯器,用`g++ -o <file.out> <file.cpp>`,`<file.out>`是指編譯完成的執行檔名,`<file.cpp>`是你的程式碼檔案 * `nodejs`就是 nodejs ,用`nodejs <file.js>`來運行`<file.js>` * `wget`,檔案下載工具,下載速度超快,可以用一些參數 * `-r`,可以下載資料夾和他裡面的檔案 * `-l`,他的深度限制 * `curl`,可以做的事比 wget 多,除了下載(GET)以外,還可以上傳(POST),通常你在下載、安裝的文件中會看到他,~~反正遇到就複製貼上就對了~~ * `curl <url>`,模擬 GET 請求,下載網頁`<url>`中的內容 * `curl -X POST -d "<param1>=<value1>&<param2>=<value2>" <url>`。模擬 POST 請求,會告訴網頁`<url>`你的`<param1>`是`<value1>`,`<param2>`是`<value2>` * `curl -H "Content-Type: application/json" -X POST -d '{"<param1>":"<value1>","<param2>":"<value2>"}' <url>` * `curl -v <url>`,會顯示詳細的請求和回應資訊 * `tmux`,一個超好用的Linux視窗管理工具,而且可以在關閉終端機後繼續執行程式,推 * `tmux`,這樣會開啟一個`tmux`視窗,看起來就跟我們的終端機一模一樣![image](https://hackmd.io/_uploads/BkxIIPx9T.png) * `tmux`的快捷鍵 * `<Ctrl> b`然後按`d`,代表退出,但不關閉 * `<Ctrl> b`然後按`x`,代表關閉 * `<Ctrl> b`然後按`%`,水平割視窗![image](https://hackmd.io/_uploads/Sku3dwec6.png) * `<Ctrl> b`然後按`"`,垂直分割視窗![image](https://hackmd.io/_uploads/B1_yFPg5T.png) * `<Ctrl> b`然後按`o`,依序切換視窗 * `<Ctrl> b`然後按`方向鍵`,切換在特定方向的視窗 * `<Ctrl> b`然後按`<space>`,切換視窗排列方式 * `tmux ls`,顯示開啟中的session![image](https://hackmd.io/_uploads/S1RTn_gqa.png) * `tmux attach -t <number>`,如果我`<number>`用0,那就是進入`0: 1 windows (created Fri Jan 26 08:27:35 2024)`這個 * `tmux kill-session -t <number>`,關閉某個session * `tree`,他會以結構化顯示目錄及其當中的檔案,用過的都懂 #### ssh 連線工具 ssh 是以中遠端連線工具,是最常見的伺服器遠端連線工具。 ##### 連線方式如下(`ssh <username>@<host_ip>`) 1. 輸入`ssh <username>@<host_ip>` 2. 第一次會問要不要使用密碼,回答`yes`即可 3. 輸入密碼,**請注意**輸入密碼的過程中不會顯示你輸入的東西是正常的,~~不然密碼就被看光光了~~ ##### 伺服器登入密碼設定方式如下(這個不推,請使用密鑰) 1. `sudo vim /etc/ssh/sshd_config`,用於編輯這個檔案 2. 找到`PasswordAuthentication no`,將`no`改成`yes` 3. 存檔 4. 輸入`sudo service ssh restart`重新啟動ssh 5. 可以進行ssh連線 ##### 伺服器密鑰登入方式 1. 找我 (807) 或 cjtsai 拿預設的密鑰、和伺服器 ip `<server_ip>` 2. 在你的電腦上,將密鑰寫進`~/.ssh/id_rsa_ubuntu`的檔案中 3. `chmod 400 ~/.ssh/id_rsa_ubuntu`限制密鑰存取權限確保安全 4. `ssh-keygen`,建立你等一下要給你個人帳號用的密鑰,這個密鑰預設是用RSA2048加密,至於原理是什麼,後天再說吧! 5. `cat .ssh/id_rsa.pub`,輸出公鑰,請你將他複製起來 6. `ssh -i ~/.ssh/id_rsa_ubuntu ubuntu@<server_ip>`連入伺服器的ubuntu用戶中 7. `sudo adduser <name>`,創建用戶,`<name>`就取個方便辨認的英文名子吧 8. 他會問你新用戶的密碼要是什麼,就創建個密碼即可(**請記好你的密碼**),如下圖![image](https://hackmd.io/_uploads/HyKL9seqa.png) 9. `sudo usermod -aG sudo <name>`,給與新用戶能夠`sudo`的權限 10. `su <name>`,進入`<name>`這個目錄中 11. 回到家目錄`cd` 12. `mkdir .ssh`,建立`.ssh`的資料夾 13. `sudo vim ~/.ssh/authorized_keys`,開啟這個檔案並貼上剛剛複製的公鑰,這步是要允許你用這個密鑰登入 14. 回到你的電腦上,如下圖![image](https://hackmd.io/_uploads/SkLeLKZc6.png) 15. `vim ~/.ssh/config`,編輯 ssh 設定,這樣可以讓你不用每次都打密鑰路徑、ip、用戶名稱等等,非常方便,請寫入下列這段文字 ``` Host <nick_name> Hostname <server_ip> Port 22 User <user_name> identityfile ~/.ssh/id_rsa ``` 16. 可以用`ssh <nick_name>`連入伺服器了,以後都可以用`<nick_name>`代替`<username>@<host_ip>`好ㄟ(包含下面的`scp`歐) scp 是 ssh 中的檔案傳輸工具,他可以將本地檔案上傳或下載伺服器中的檔案 ##### 檔案上傳方式如下 `scp <file> <nickname>:<dir>`,這是將你本地的檔案`<file>`上傳到`<nickname>`伺服器的`<dir>`目錄中,他一樣會請你輸入密碼。 ##### 檔案下載方式 `scp <nickname>:<file> <dir>`,這是`<nickname>`伺服器的檔案`<file>`,下載到本地資料夾,如果要下載到當前目錄`<dir>`請使用`.` ##### 利用vscode Remote SSH連入(可能會比較容易當,因為記憶體不夠) 1. 打開vscode,下載延伸模組`Remote -SSH` 2. 按`<Ctrl> <Shift> p`,你會有一個搜尋框,找到`Remote-SSH: Connect to Host...`這項,使用他![image](https://hackmd.io/_uploads/Bk56ihxcT.png) 3. 選擇`+ 新增 SSH 主機...`這項![image](https://hackmd.io/_uploads/HkvB2ngqT.png) 4. 輸入`ssh <user_name>@<server_ip> -A` 5. 選擇第一個,你會進到一個config的檔案中![image](https://hackmd.io/_uploads/SyBPanecp.png) 6. 先去找到你剛剛密鑰放的地方,記得他的路徑`<dir>`,檔名`<file>`![image](https://hackmd.io/_uploads/Byno0ng5T.png) 7. 在下一行加入`IndentityFile <dir>\<file>`,如下圖![image](https://hackmd.io/_uploads/Sy9NJagcp.png) 8. 你再用一次`Remote-SSH Connect to Host...`時,你就會看到你的`<server_ip>`,就可以連進去了 #### `git`專案管理工具 `git`是專案管理工具,功能是幫你建立專案、複製(clone)開源專案、建立分支(branch)、合併分支等等多種功能。 ##### 基本設定 如果等一下需一用到除了`clone`以外的東西,請先去註冊[github](https://github.com)帳號,然後使用`git config --global user.name "<github_name>"`,`<github_name>`是你申請github用的名稱,以我為例就是`ckeisc807`![image](https://hackmd.io/_uploads/H1NsXFgqp.png) 接下來再用`git config --global user.email "<email>"`,`<email>`需要是你用來註冊Github的那個。 我們要在伺服器上生成一個伺服器的一組密鑰,所以我們輸入`ssh-keygen`生成都默認就好,一樣要`chmod 400 ~/.ssh/id_rsa`,然後`cat ~/.ssh/id_rsa.pub`,將公鑰輸出,複製這個公鑰,去設定找到`SSH and GPG keys`,然後點`New SSH key`,如下圖![setting](https://hackmd.io/_uploads/rynjORx5T.png) 然後給他一個`TiTle`表示說你這個Key的作用,`Key`的輸入框請貼上剛剛複製的公鑰 ##### 下載開源專案(`git clone <url>`) 1. 去[Github](https://github.com)找到一個你要下載的repository 2. 點開藍色的`Code`![blue code](https://hackmd.io/_uploads/SyEYStlq6.png) 3. 選擇`SSH`的選項,然後按下複製![ssh](https://hackmd.io/_uploads/HJ5SXCg96.png) 4. 然後輸入`git clone <url>`,`<url>`是你剛才複製的連結,如果`<Ctrl> v`無法順利貼上,請試試右鍵,這個`<url>`應該是`git@github.com:<author>/<repo_name>.git`就是對的,`<author>`是該專案的作者,`<repo_name>`是專案的名稱 5. 已經下載下來了,應該會在當前目錄有一個名稱是`<repo_name>`的資料夾,裡面就是你下載的東西 ##### 建立專案 1. 在Github上建立新的repository 2. 給他一個`<Repository name>`,`Add a README file`溝起來,然後就按`Create repository` 3. 下載這個專案到你的電腦裡 ##### 更新上遠端 1. `git add .`,將此資料夾檔案加入git中 2. `git commit -m "<commit_message>"`,提交變更 3. `git push`,將變更上傳到Github遠端 ##### 更新本地 `git pull`,把 Github 遠端的東西拉下來 ##### 更換分支 `git checkout <branch>`,切換到`<branch>`這個分支 ##### 查看變更內容 `git status`,可以看到和遠端的檔案差異為何 #### `nginx`反向代理工具 記得要先安裝`sudo apt install nginx` ##### 架設 1. 剛開始先在用`git clone <repo>`下載你想用的靜態網頁專案 2. `sudo cp -r <reponame> /var/www/`,將檔案複製到`/var/www`這個資料夾下 3. `cd /etc/nginx/conf.d`進入這個目錄中,我們在一個新檔案`<repo.conf>`中寫入這長串,記得加上`sudo`和把`<reponame>`和`<domain>`換掉,我們會給你一個網域`<domain>`,之後就會是你的網址 ``` server{ listen 80; listen [::]:80; root /var/www/<reponame>; server_name <domain>; index index.html; location / { try_files $uri $uri/ =404; } } ``` 4. `sudo nginx -t`,測試你寫的 nginx 是不是好的,如果結尾是 test is successful 代表沒問題 5. `sudo systemctl restart nginx`,重啟 nginx 6. 你現在就可以連到你的網站了,可是你的網站可能會跟你說不安全,因為我們現在使用的是未 7. 加密的 HTTP ,應該要使用加密過的 HTTPS 才比較安全 8. 接下來要安裝 certbot,他會自動加密及申請憑證,但他需要用 snap 安裝 9. `sudo snap install core; sudo snap refresh core`,更新 snap 10. `sudo snap install --classic certbot`,安裝 certbot 11. `sudo ln -s /snap/bin/certbot /usr/bin/certbot`,link 一下,等一下就可以不用打 certbot 的 path 了 12. `cd /etc/nginx/sites-available/`,進到這個資料夾 13. `sudo cp default <domain>`,而複製出來的檔案就是等等要架設的網站設定 14. `sudo vim <domain>`打開剛剛複製出來的設定檔,找到有一行是`root /var/www/html;`這行表示網頁檔案放在`/var/www/html`的資料夾裡,可是我們剛剛放在`/var/www/<reponame>`這裡,所以要把這行改成`root /var/www/<reponame>` 15. 還在同個檔案中,將`server_name _;`改為`server_name <domain>;`,代表你的網頁會在這個網域中 16. **記得存檔** 17. `sudo ufw status`,你會看到他是關的(inactivate),所以我們要打開他 18. `sudo ufw enable`,開啟 ufw 19. `sudo ufw allow ssh`,允許 ssh 使用 ufw 20. `sudo ufw allow "Nginx Full"`,允許 Nginx 21. `sudo ufw status`,你會看到他打開了![image](https://hackmd.io/_uploads/H1U2t4G56.png) 22. `sudo certbot --nginx -d <domain>`, certbot 會自動幫你處理ssl的事情,你的網頁才可以加密 23. 由於加密只有 60 天的有效期限,所以要自動更新密鑰 24. `sudo systemctl status snap.certbot.renew.service`查看這東西是否運行中,正常情況應該是否 25. `sudo certbot renew --dry-run`,執行自動更新 26. 跟剛剛一樣使用這兩個指令`sudo nginx -t`、`sudo systemctl restart nginx` 27. 重開網站,你會發現他已經從 HTTP 變為 HTTPS 了,安全多了讚拉 ## 補充 ### 名詞解釋 * **WSL**: Windows Subsystem for Linux ,根據 microhard 的說法如下"Windows 子系統 Linux 版 (WSL) 是 Windows 的一項功能,可讓您在 Windows 電腦上執行 Linux 環境,而不需要個別的虛擬機或雙開機。 WSL 的設計目的是為想要同時使用 Windows 和 Linux 的開發人員提供順暢且具生產力的體驗",但並沒有~~但聽說也有 WSA ㄟ~~ * **開源**: 開源的概念是公開和分享知識和資源,以便其他人可以使用、修改和分發它們。開源的目的是促進創新、協作和共享,以實現更好的結果。但絕對不是~~開源節流~~ * **網域**: 一串用`.`分割的文字的電腦名子,用於在資料傳輸時標識電腦的電子方位。