### GDSC NYUST x 資訊創客社
<br>
### 軟體開發工具入門讀書會
#### Linux課程
<br>
#### 2023/10/11 ( Wed ) 19:00 - 21:00
#### 講師:蘇祐民
#### 本次課程影片:
<img src="https://hackmd.io/_uploads/SJ0nq4mMp.png" height="200px">
---
# Linux基礎入門
*YoMin Su*
---
## 課程介紹
----
### Linux 是什麼?
----
> 一言以蔽之:作業系統
常見於各種你可能用過或沒有用過的裝置上
----
### 你可能曾看過的那隻企鵝:Tux

----
### 用在哪裡?
<br />
- 伺服器
- 嵌入式系統
- 移動裝置
- 超級電腦(TOP500)
> 也可以是你的電腦!
----
### 為什麼會用?
<br />
- 穩定性
- 安全性
- 自定義性
----
### 有誰在用?
<br />
- Google
- Facebook
- Amazon
- Microsoft
- etc...
----
### 本日目標
<br />
1. Linux概觀
2. 安裝系統
3. 基本操作
---
## Linux概觀
----
## 起源
Linus Torvalds 在芬蘭的赫爾辛基大學求學過程中所設計的一套作業系統。Linux基於Unix操作系統,其核心概念包括多用戶環境、文件系統、進程(Process)管理和安全性。
> 初始發布時間:1991年8月25日
----
### 第一版發布
在Torvalds畢業之前,Linux的1.0版本就已經發佈,也是在這時,Rad Hat出現了,將客戶會使用到的套件打包起來,並提供商業支援的Linux發行版!
> v1.0發佈時間:1994年3月14日
----
### 難用的版本管理工具
在Linux開發了相當長一段時間後,Torvalds覺得,是該導入版本管理的時候了,在2002年時選擇了BitKeeper來使用,但由於該軟體是專有軟體,且在2005年時,該公司不再繼續無償提供授權,使Torvalds決定自行開發新的管理工具,最終花費了10天完成第一版的Git!
> Git發布日期:2005年4月7日
----
### 基金會成立
在2007年1月時,自由標準組織與開放原始碼發展實驗室合併,合併後改名為Linux基金會,主要的目標是提供薪水與各項協助,讓Torvalds可以無後顧之憂,持續投入Linux的功能開發。
----
### 各種不同的發行版
在Linux中,Linux是泛指系統的核心(Kernel),要讓核心可以良好的工作,通常會連帶把多個不同的軟體一起安裝好,並製作成發行版(Distro),每個發行版都會有其特色,端看使用者的需要去選擇!
----
### 常見的發行版
<!-- .slide: data-background="White" -->
<br />
| | Debian(Ubuntu) | RHEL(CentOS) |
| -------- | -------------- | ------------ |
| 套件管理 | apt | yum / dnf |
| 適用情況 | 任何機器 | 伺服器為主 |
| Logo |   |  |
---
## 安裝Linux
----
### 安裝選項
| | VM Based | Container Based |
| ------- | ------------------- | ------------------------- |
| Windows | VirtualBox / VMware | Docker Desktop / WSL |
| macOS | UTM / VMware Fusion | Docker Desktop / OrbStack |
----
### WSL
啟用系統功能
```shell=
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```
確認系統版本(Win10 Only)
```shell=
winver #需要大於18362.1049
```
----
### WSL
安裝更好用的終端機
```shell=
winget install Microsoft.WindowsTerminal
```
更新WSL核心與修改預設版本
```shell=
wsl --update
wsl --set-default-version 2
```
----
### WSL
安裝想嘗試的版本

----
### WSL
```shell=
wsl --list --online
wsl --install <Distro Name>
# 新版可能需要使用wsl --install -d <Distro Name>
```
----
### WSL

當出現如圖的畫面時,表示要設定自己想使用的帳號與密碼,要記下來歐!
----
### WSL

初始設定完成後,就會像圖片中的這樣,隨時可以使用!
----
### WSL
若你有安裝多個Distro要選擇開啟哪一個時:
```shell=
wsl -d <Distro Name>
```
若你已經使用完,不需要它在背景跑時:
```shell=
wsl --shutdown
```
----
### OrbStack
這是相對於VM,更偏向容器的工具,但優點是速度快,資源使用也低,相當推薦
> [官方網站](https://orbstack.dev/download)
----
### OrbStack
下載完成後,開啟該dmg檔案,並將OrbStack拖入『應用程式』資料夾中

----
### OrbStack
從你的終端機中建立一個可以執行指令的Ubuntu環境
```shell=
docker run -it ubuntu:22.04 bash
```
----
### OrbStack

---
## Linux基本操作
----
### 基本操作的部分
```shell=
ls
#列出該資料夾的內容
cd <PATH>
#切換資料夾
pwd
#印出目前路徑
```
> 請善用 Tab的自動補完功能
----
### 還是基本操作
```shell=
mv <src> <dst>
#移動檔案
cp <src> <dst>
#複製檔案
```
> 這裡更適合用 Tab補完目錄
----
### 新建與刪除很重要
```shell=
mkdir <dir>
#新建資料夾,可以一次輸入多個
rm <file>
#刪除檔案
rm -r <dir>
#刪除資料夾,不加參數會掛掉
```
> 用不到的東西砍掉很正常吧~
----
### stdout是啥?可以吃嗎?
```shell=
cat <file>
#印出檔案內容
echo "String"
#印出你打的東西
```
> 廢話,當然不能吃,但很重要
----
### 背景程式好多喔,真礙眼
```shell=
ps
#列出背景執行的程式,加上 -aux 可以列出全部
kill <PID>
#砍掉該執行中的程式
```
> 沒事別亂砍,別亂砍沒事
----
### 所以我說編輯檔案呢?
```shell=
nano
#比較符合直覺的編輯器
vim
#快速鍵組成的編輯器
sed
#看都不看就改下去的部分
```
> 別急別急,以後有的是時間編
----
### 捷徑什麼的,該不會沒有吧?
```shell=
ln <TARGET>
#硬連結,殺了一個我,還有千千萬萬個我
ln -s <TARGET>
#軟連結,算我怕你吧,別動我真身
```
> 有是有,但你真的想聽?
----
### 萬般皆下品,唯有權限高
```shell=
su <User>
#切換使用者,要該使用者的密碼
sudo
#取得管理員權限,需要自己的密碼(且帳號在sudo群組)
```
> 沒sudo真滴難辦事...
----
### 是大於小於欸,跟+<><有關嗎?
```shell=
(src) > (dst)
#將src放入dst中
(src) >> (dst)
#將src加入dst中
(src) < (dst)
#將dst送入src中
(src) << (dst)
#將dst加入src中
```
> 好像哪裡怪怪的...
---
## Linux學習資源
----
### 沒錯,還是我們偉大的鳥哥
> [鳥哥的Linux私房菜](https://linux.vbird.org/)
----
### 或是,最近很紅的ChatGPT
> [ChatGPT](https://chat.openai.com)
----
###
---
## 問題和討論
---
## 課後測驗
[🔗Classroom加入連結](https://discord.com/channels/1013400815484022805/1155092569680785408/1168222449305927790)
:point_up_2:需要先加入Classroom才能作答)
:link: [Linux 課程 - 課後測驗](https://classroom.google.com/u/0/c/NjM2MTkzNTMxMTU5/a/NjM1MjM1NjU5Mjcz/details)
---
## 下一次課程
> Git & GitHub
版本控管、金鑰交換、遠端備份...
---
## See you next time!

{"title":"Linux課程","description":"<img src=\"https://hackmd.io/_uploads/ryyGo9pka.png\" height=\"200px\">","slideOptions":"{\"transition\":\"concave\",\"allottedMinutes\":100}","contributors":"[{\"id\":\"f8142aa2-66aa-4867-821d-2f1ffff7a7ba\",\"add\":5535,\"del\":56}]"}