---
# System prepended metadata

title: OS
tags: [Enlightened, NISRA, '2021']

---

# OS

:::danger
請愛惜共筆，勿進行惡意刪減
:::

[NISRA CTF](https://class.enlightened.nisra.net/)

:::warning
本堂課必用之操作工具
請大家於課前務必先行安裝哦!!
:::

## 課前安裝工具

- 虛擬機器 VirtualBox 全家桶
  建議預留 40GB+ 硬碟空間 ~內附安裝說明~
	- [主載點](https://drive.google.com/drive/folders/14Qh5CmGSDODujndOMRWsL_LvdaCTrV-A?usp=sharing)
	- [備用載點](https://drive.google.com/drive/folders/1OLpE-aaW7gVXrlfXjL_qEe1grPZ9iysC?usp=sharing)
    :::spoiler 安裝步驟（點這裡查看詳細步驟）
    1. 安裝VirtualBox主程式 `VirtualBox-6.1.20-143896-Win.exe`
    2. 安裝擴充套件 `VirtualBox_Extension_Pack-6.1.20.vbox-extpack`
       需先安裝VirtualBox才能安裝擴充套件
        > 別看這個鬼畜的副檔名
        > 主程式裝完之後可以直接點兩下
    3. 匯入`Ubuntu20_04.ova`
           詳情請閱連結內使用簡介
    :::

---
:::info
[Slide](https://drive.google.com/file/d/1jeGZD7kLfwY4v6q2I8q22GlDawt3wQSt/view?usp=sharing)
**虛擬機帳號密碼皆為 `nisra`**
:::

## Outline
- Linux 基本介紹
- Why Linux?
- 指令 & 操作

### Linux 基本介紹
- Open Source
- 類Unix

### Unix?
- 多使用者 Multiuser
- 多工 Multitasking
- 多層次 Multilevel

### 類Unix?
- Unix:符合Posix標準的作業系統
- 類Unix:帶有Unix特性但不符合POSIX標準

### Windows?
- **D**isk **O**peration **S**ystem
- 單一使用者、單工
  Unix:多個使用者、多工
- [Sauce: Quora](https://www.quora.com/Windows-code-can-be-considered-to-some-extent-spaghetti-code-What-are-some-examples-of-issues-due-to-messy-highly-complex-programming)

## Why Linux?
![](https://i.imgur.com/cGPKhhA.png)

- 開放原始碼 Open Source
- 穩定性 Stability
    - 適合伺服器 & 物聯網
- 核心夠小

### Why Ubuntu?
- 好上手
- 熱門
- 免費

### 設立虛擬機器
- **匯入**並選擇 `.ova` 檔案
- 新增
    - 類型：`Linux`
    - 版本：`Ubuntu (64-bit)`
    - 記憶體大小：根據自身需求
    - 檔案位置和大小：VM大小

**Q&A**
>想請問在虛擬機設定記憶體是會吃掉本機的記憶體ㄇ
>[name=winnie5062611 (來賓)]
>>對!
>>[name=404]

>ubuntu是甚麼
>[name=汶娟 莊 (來賓)]
>>ubuntu就是一種linux的發行版本，其他常聽到的還有~~rat hat~~ Red Hat、kali......等
>>[name=forensic7306 (來賓)]

### 目錄結構
所有的檔案都在樹 ( **/** ) 底下
![](https://i.imgur.com/xGy6Kfr.png)

**Q&A**
>可以問下如何在WIN10跟Linux間做傳輸檔案
>[name=a0981067552 (來賓)]
>>我記得共用硬碟就好了 linux還可以做開機介面
>>(硬體裝修丙級的內容
>>[name=zhengtingliu0104 (來賓)]
>>如果是同區網不同電腦，可以去讀讀看 linux Samba
>>[name=秋分 (來賓)]

### 指令

- `pwd`
    - **P**rint **W**ork **D**irectory
    - 當前位在哪個目錄
    	- 我是誰(x) 我在哪(o)
    	  [name=404]
- `cd <路徑>`
    - **C**hange **D**irectory
	- 前往資料夾
    - 絕對路徑V.S.相對路徑
        - 絕對路徑: `/home/nisra/Desktop/lab`
        	- 要打完整
        - 相對路徑: `Desktop/lab`
        	- 跟現在位置重複的地方可以不打
    - `cd ..`
	    - 回去上層資料夾
- `ls`
    - **l**i**s**t
    - 常用參數
        - `-a`: 所有檔案 (包含隱藏檔)
        - `-l`: 以清單顯示
- `cat <檔案名稱>`
    - 顯示檔案內容
- `./<檔案路徑>`
    - 執行檔案
	- 直接打檔案路徑也行
	- 也可以用單引號`'`括住路徑
	  `<檔案路徑>`
		- 個人習慣用`./`
		  而且做標題效果比較好X)
		  [name=404]
- `clear`
	- 把 terminal 清空
		- 整理乾淨!
- `sudo`
    - 以 root 權限做事
    - 會需要輸入密碼
        - **輸入密碼的過程不會顯示**~~所以不要問小天使為什麼不能打密碼，小天使真的會升天~~
- `chown <username> <file>`
    - 把 \<file> 的所有權轉給 \<username>
    - **密碼不會顯示哦！**
- `chmod <parameter> <file>`
    - 更改檔案權限
    	> 我的東西我想怎樣就怎樣
    	> [name=404]
        > parameter 是甚麼意思
        >> 打指令要附上的參數，在不同情況、不同指令下，參數是不是必要、需要及可輸入的數量可能不一樣 
        >> [name=秋分]
    - `chmod 777 myFile` : 權限改為任何人都可以做任何動作 (-rwxrwxrwx)
        - ![](https://i.imgur.com/RGnBfEc.png)

    - `chmod u+x myFile` : 為 user 增加執行 (eXecute) 的權限
- `su <使用者名稱>`
	- 切換成其他使用者
		- 只打su預設是切換成root使用者
- `who`
    - 顯示當前線上使用者

- `whoami`
    - 我是誰 :heavy_check_mark: 我在哪 :negative_squared_cross_mark: 
    - 顯示使用者名稱
    
- `mkdir <name>`
	- 建立一個\<name\>名稱的資料夾
	  > 開天闢地!
	  > [name=404]
- `touch <name>`
	- 創建名稱為\<name\>的空檔案
	- 若 touch 已存在檔案則會更新檔案的時間戳記為現在時間
- `cp <source> <destination>`
    - 複製檔案
	- \<source\> : 來源檔案的路徑
	- \<destination\> : 目標路徑 (可以不包含檔名) 
- `mv <source> <destination>`
    - 移動檔案
        - `mv ./file ./folder/file`: 把當前目錄的 file 移到同目錄的 folder 資料夾下
    - 也可以用於改檔案名稱
        - `mv ./統神 ./toyz的狗`
- `rm <parameter>`
    > 把你阿嬤刪掉
    > [name=404]
    - 刪除東西
    - 參數
        - `-f`: 強制
        - `-i`: 詢問
        - `-r`: 遞迴 (刪資料夾要加)
    - `rm file`
    - `rm -r folder`
     :::danger
     <span class="dang">**危**</span>
     #### 怎麼把整個系統給刪了
     `rm -rf /`
     :::

- `rmdir <空資料夾>`
    > 我也不知道他為什麼存在
    > [name=404]
    - 刪空資料夾


### Lab Time 1

- 找彩蛋囉
    - 活動範圍：`/home/nisra`
    - 檔名會包含HelloThere字元
	- Hint:
		- `pwd` 我在哪
		- `cat <檔案名稱>` 裡面有甚麼酷東東
		- `cd <資料夾名稱>` 進入資料夾
			- `<` `>`不用打!
		- `ls` 看所處位置有甚麼檔案
		    - 依需求，後面可接 `-la`
			- 隱藏檔在名字最前面會有一個點 
		- `./<檔案路徑>` 開啟檔案

    - 小撇步
        - 按 `tab` 可自動完成輸入

**Q&A**
>講師可以把終端機的字放大嗎 謝謝!!
>[name=dh10050160 (來賓)]
>>Teams小教學：游標移到分享螢幕中，使用「Ctrl+滑鼠滾輪」可以對畫面進行縮放[name=CHA]

>
>請問(ubuntu)打開後要輸什麼密碼?[name=0110winnie (來賓)]
>>nisra
[name=蘇彥碩 (來賓)]

>
>這用find指令不是更快嗎
>[name=a0981067552 (來賓)]
>>強制練習打指令www
>>[name=404]

>
>為甚麼我打ls出現的方式不像講師一樣條列
>[name=dh10050160 (來賓)] 
>>`ls -la`
>>[name=yaomark0216 (來賓)]
>>條列式顯示是需要 `-l` 參數歐
>>[name=crazyfire]

:::spoiler 謎底揭曉
`/home/nisra/Documents/.HelloThere`
`/home/nisra/Downloads/HelloThere`
`/home/nisra/Videos/HelloThere`
:::

### 權限

- 無論是雲端硬碟還是Linux都該好好設定的東西
	> 尤其是你那個隱藏起來又特別佔容量的資料夾
	> [name=404]
- User
    - `id`
    - `root`
    - **0：root**
    	- root講話最大聲
    - 1～999：系統保留
    	- 4 `adm` 
    	- 27 `sudo`
    - 1000+：使用者
- Group
    - 右鍵 -> 屬性 -> 權限
    - 擁有者：我能做什麼
    - 群組：同群組能做什麼
    - 其他：剩下的人能做什麼
- `d rwx rwx rwx`
	| d   | rwx    | rwx  | rwx  |
	| --- | ------ | ---- |:----:|
	|     | 擁有者 | 群組 | 其他 |
    - `d` : 資料夾
    - `r` : 讀取
    - `w` : 編輯
    - `x` : 執行

### Lab Time 2

- 用終端機進入桌面上的 lab 資料夾
  想辦法以 lock 使用者把 cat.txt 內容撈出來
  (或者用其他方式)
	- lock的密碼 : `n15ra`

**Q&A**
>打錯太多次密碼會被鎖帳號嗎？
>[name=sarapan19980221 (來賓)]
>>沒記錯的話會被鎖時間
>>[name=404]


:::spoiler 謎底揭曉
- 解法一
	- 照著要求乖乖登入 lock 後再改
		- `su lock`
		- 輸入密碼
		- `chmod 0644 cat.txt` 
- 解法二
	- 用 sudo 改權限或擁有者 
    	- `sudo chown nisra cat.txt`
    	- `chmod 0644 cat.txt`
        	- 或直接`sudo chmod 0644 cat.txt`
- 解法三
	- 直接用 sudo cat
    	- `sudo cat cat.txt`
:::

<!-- - `mkdir <name>`
    - 建一個\<name>名稱的資料夾
- `cp <source> <destination> `
    - \<source>~~：來源檔案的路徑
    - \<destination>：目標路徑(可不包含檔名)
- `rm <parameter>`
    - 把資料夾的東西刪光光!!!~~把你啊罵賣掉
    - 刪除單一檔案
      `test@test: ~$ rm hello.txt`
    - 刪除資料夾
      `test@test: ~$ rm -r test` -->
<!-- 指令是不是應該統一整理在上面@@? -->
<!-- 應該是，不過這幾個好像前面也有人有打了耶? -->
### 一個有點小蠢的lab

1. 在lab資料夾內創建一個資料夾 + 檔案
2. 把檔案複製到新建的資料夾
3. 把原本(資料夾外)的檔案刪掉
4. 把資料夾的檔案移動到lab資料夾底下
5. 小心地把資料夾與檔案刪了

- Hint:
	- `touch <file>` 創建檔案
	- `mkdir <name>` 創建空資料夾
	- `mv <來源> <目的地>` 移動檔案
	- `cp <來源> <目的地>` 複製
	- `rm <file>` 移除
		- `-r` 遞迴 `-f` 強制
		- `rmdir <name>` 移除空資料夾

:::spoiler 謎底揭曉
1. `touch file`
	- `mkdir folder`
2. `cp file folder`
3. `rm file`
4. `cd folder`
	- `mv file ..`
	> 還記得`..`代表上層目錄嗎
5. `rm -rf file folder`
:::

### apt
- debian 及其衍生的 Linux 套件管理器
- 可自動下載，組態，安裝二進位或者原始碼格式的軟體套件

#### 安裝
- `sudo apt install vim`: 安裝 vim
- `apt moo`: 神秘的功能 (印出一隻牛)
- `sudo apt upgrade`: 一鍵軟體升級

### Vim
- 從 VI 發展出來的文字編輯器
- 可以不使用滑鼠來完成所有作業
> 我都使用sublime啦
> [name=404]

- INSERT mode
-  `ESC`:arrow_down:    :arrow_up:`i,a,o,r`
- NORMAL mode
-  `ESC`:arrow_up:    :arrow_down:`:, ?` 
- COMMAND mode 

#### 編輯模式
- 進入編輯模式，按
    - i : 由當下游標所在的字前面開始編輯
    - a : 由當下游標所在的字後面開始編輯
    - o : 往下新增一行開始編輯
    - r : replce 掉後面一個字
    - I : 從這行最前面開始編輯
    - A : 從這行最後面開始編輯
    - O : 往上新增一行開始編輯
    - R : replace 不只一個字 (像是按了鍵盤的 insert)
#### 指令模式
- 離開、顯示行號、尋找等
- `:w` 儲存
- `:q!` 強制退出
- `:q` 退出
- `:wq` 儲存後退出
> 個人補充
> `:set nu` 顯示行號
> `/<words>` 搜尋 (按 enter 後按 n 可以找下一個，N 找上一個)

### Lab time 3

1. touch \<filename\>.txt
2. vim \<filename>.txt
3. 按 i 進入插入模式
4. 輸入 Hello World!
5. 按 `esc` 回到一般模式
6. 按 ` : ` 進入指令模式
7. 輸入 `wq` 保存檔案並退出
8. cat \<filename\>.txt 來看看有沒有成功

### Final Lab
![](https://i.imgur.com/oFTaEXb.png)

###### tags: `Enlightened` `NISRA` `2021`
<style>
.navbar-brand::after { content: " × NISRA"; }
</style>

<style>
.dang {
	background-color: #CD5C5C;
	color: white;
	font-size: 20px;
	font-weight: bolder;
	border-radius: 50% 20% / 10% 40%;
}
</style>