# Linux與服務部署
---
## Linux基本介紹
雖然現今的作業系統
都已經有完備的圖形介面可供便利操作
比較少人使用指令
但熟悉指令後
許多操作會變得相對簡潔有力
因此我們以Linux為主軸介紹指令的使用
---
## Linux是什麼
----
### 作業系統簡介
**Operating System (作業系統)**
作業系統是電腦裡的系統程式
負責調度與分配硬體資源給需要的應用程式使用
----
而最常見的作業系統有
- Windows
- MacOS
- Linux
----
### Windows
大家再熟悉不過的作業系統
大部分台灣人使用文書和遊玩遊戲都是用這套系統
由微軟開發
以完全的圖形操作介面聞名
----
### MacOS
第二多人使用的作業系統
由蘋果開發 介面優雅簡潔
通常用於文書和工作處理
比較少用於遊玩遊戲
----
### Linux
今天的主角
是由社群合力開發的作業系統
雖然一般使用者較少
但卻是伺服器系統的首選
> ![](https://i.imgur.com/gpz5ibj.png =125x)
> Linux的吉祥物企鵝
----
### Linux Kernal
Linux的本質是一個作業系統核心
意即只包含了最基本的功能
而 Linux 的核心當初由 *Linus Torvalds* 開發出來
並且將所有原始碼開放 讓所有人皆能自由修改使用
這也造成了後來 Linux 有各種變化版本。
----
### Linux Distribution
Linux 發行版就是將核心加上搭配其他程式打包起來
變成使用者能夠自行安裝進電腦的形式
而各發行版的差別 最明顯的就是圖形介面
:::info
熱知識: Android就是為行動裝置開發的Linux發行版
:::
----
### 為什麼選用Linux
1. 免費 開源
2. 多個用戶 多個線程 多個任務
3. 高穩定性和高效性
4. 類Unix系統
----
### 要選擇哪一種Linux系統
Linux的系統有非常非常多種
有centOS、debian、Kali、Arch之類的很多很多
以系統完善和穩定度而言
許多公司行號會選擇Debian或同系的Ubuntu
筆者的電腦則是ArchLinux 以輕量化著名
---
## 學習詠唱咒語: 跟Terminal互動
玩Linux指令的第一步
~~是要先有這個系統~~
是要先學會如何打指令跟系統溝通
----
### 終端機
終端機是一個純文字介面的程式
會提供Shell跟系統進行互動
而Shell能夠下指令
判斷你的指令意圖並告訴系統
----
在三大系統中
分別可以這樣開啟Terminal
- Linux
- Ctrl+Shift+T
- 系統功能表->系統工具->終端機
- MacOS
- 在啟動器裡面尋找「Terminal.app」
- Windows
- 使用Windows Terminal開啟Powershell
> 注意 CMD和Linux指令並不兼容
----
### 沒有Linux系統怎麼辦
- 魔改自己的電腦系統
- 使用虛擬機
- 使用虛擬雲
- 使用wsl
- ~~買一台幫你裝好的新電腦~~
----
### Alwaysdata
本文會以這個平台進行示範
免付費註冊能夠給予100mb玩到爽的服務
並且提供網域可以監控服務
---
## Linux常用指令
有了終端機之後就能打指令和系統互動了
----
### ssh
首先優先介紹這個
- 一種能和遠端伺服器互動的加密協定
```shell=
ssh user@domain
```
> [穿牆術補充](https://hackmd.io/@fanlan1210/S16xysoZ5#/)
> @fanlan1210
----
### pwd
- print working directory
- 顯示目前你所在的位置
在終端機裡面通常會想做的第一件事
就是查詢目前所待的目錄位置
這行指令可以辦到這件事
![](https://i.imgur.com/rxtx1Vd.png =480x)
----
### ls
- list
- 列出資料夾裡的內容
- 預設列出你目前所在的資料夾
```shell=
ls
ls <資料夾名稱>
ls -a #列出隱藏內容
ls -l #列出詳細資料
```
![](https://i.imgur.com/IEDEM44.png =480x)
----
### cd
- change directory
- 切換資料夾
```shell=
cd <資料夾位置>
```
![](https://i.imgur.com/1Ey6OIj.png =480x)
----
### 補充: 位置表示法
在表示位置中有兩種表示法
- 相對位置
- 絕對位置
----
#### 絕對位置
- 台灣桃園市龜山區明路5號S棟5樓之13
絕對位置是從最初的起點一路表示到所在位置
像是我們現在的位置就可以表示成上面那樣
----
#### 相對位置
- 銘傳大學AA棟隔壁那個S棟
相對位置可以是用目前所在位置作為參考
進一步去延伸想要表示的位置
就像是以一個現成的建築物去對照資訊大樓的位置
----
而在 Linux 裡面,這種比照方式就不是以 / 開頭,而會是`.`和`..`:
- `.` 開頭: 目前所在的位置
- `..` 開頭: 目前所在的位置的上一層
----
### mkdir
- make directory
- 建立資料夾
```shell=
mkdir <新資料夾名稱>
```
![](https://i.imgur.com/mdnnMXv.png =480x)
----
### cp
- copy
- 複製檔案、資料夾
```shell=
cp <檔案名稱> <新檔案名稱>
cp -R <資料夾名稱> <新資料夾名稱>
```
----
### nano/vim
- 兩種文字編輯器
- vim用法
- `:w`: 儲存檔案
- `:q`: 離開檔案
```shell=
vim <文件名稱>
```
----
### cat
- ~~貓~~ concatenate
- 檢視檔案內容
```shell=
cat <檔案名稱1> <檔案名稱2> ......
```
![](https://i.imgur.com/VjT29Wk.png =480x)
---
## 注意
接下來要介紹的指令有一定操作風險
請小心使用
一不小心就會
bang
----
### mv
- move
- 移動檔案或資料夾
- 更改名稱
- **覆蓋檔案**
如果移動的位置不變
就會有更改檔案名稱的作用
```shell=
mv <檔案名稱> <資料夾名稱>
mv <原名稱> <新名稱>
```
:::danger
只是要注意如果新名稱已經存在
系統將不會警告
直接強制覆蓋掉
:::
----
### rm
- remove
- 刪除檔案或資料夾
- **不可逆**
不經過垃圾桶而直接將檔案或目錄移除
```shell=
rm <檔案名稱>
rm -R <資料夾名稱>
```
----
### sudo
- superuser do
- 以管理員權限執行後者指令
```shell=
sudo <指令>
```
---
## 服務部署
----
既然我們會基礎的linux操作了
是時候試試在linux環境下架設一個屬於我們自己的服務吧
---
### npm
- node package manager
node.js自帶的套件管理器
> windows系統底下可以[在這邊](https://nodejs.org/en/)下載
```shell=
npm install <package> #安裝套件
npm install #安裝package.json中寫好的套件
```
----
### node_module
- 裡面存放著nodejs專案所需的各種library
- 超級肥
![](https://i.imgur.com/XSqE10D.png =480x)
----
### run
nodejs的服務可以透過`node`指令執行檔案
或者各個npm套件有各自可以run的腳本
```shell=
node app.js
npm run server
```
{"metaMigratedAt":"2023-06-17T15:35:25.415Z","metaMigratedFrom":"YAML","title":"Linux與服務部署","breaks":true,"slideOptions":"{\"transition\":\"fade\"}","contributors":"[{\"id\":\"89d78a69-e84b-4f53-afd3-e1b33bfd1903\",\"add\":3840,\"del\":95}]","showTags":"true"}