---
# System prepended metadata

title: Operating System
tags: [Enlightened, NISRA, '2020']

---

---
title: Operating System
---

# Operating System by CrazyFire

> Operating System by CrazyFire
> 讓我們來淺談作業系統，並且瞭解這對電腦發展的龐大影響吧~

> [課程講義](https://slides.com/crazyfire221/operating-system/fullscreen)
> [課程影片連結](https://youtu.be/1WIRrz9AfWI)

> [sli.do 連結](https://app.sli.do/event/ruxhaia7/live/questions)(連結已關閉)
> [課後問券](https://forms.gle/PBw9qkvaj4GNN8sW9)

## Computer
- 過去的電腦非常陽春，目標很單純。例如圖靈機只是為了破解密碼。
- 人類思考的是增加速度，不太需要解決什麼問題，作業系統沒那麼必要。
- 第一台計算機：利用插卡、拔卡，做出不同圖案的織布機。

### 組成

- 輸入 : 鍵盤、滑鼠、觸控螢幕
- 主機 : 鎖在桌子裡面的那台黑黑的
- 輸出 : 螢幕、投影機、耳機

### 五大單元
- 輸入單元
- 輸出單元
- 控制單元
- 邏輯運算單元
- 主記憶體


### Machine Code
- 由0、1組成 
- 利用電流的有跟無(高電位、低電位)
- 非常不直觀!!
- 如果一個問題出現，就要研讀這堆由0/1組成的code(?)實在太麻煩啦><

### Small Game
- 十進位 to 二進位
    - $10_{10} -> (?)_2$
    - $10_{10} -> 1010_2$

## Why Need Operating System

- 不再是單一目標，各種功能加入。
- 記錄資訊的需求出現 (儲存裝置)
- Computer System：應用程式(殼程式)、系統呼叫、核心、硬體(由上層到下層)

### Kernel
- 提取硬體資源給使用者操作
- 主要功能
    - 控管硬體
    - 提供控制管道
- 如果停止或破壞，系統將無法正常使用

#### Key of OS Kernel
- 系統呼叫介面(System call interface)
- 程序管理(Process control)
- 記憶體管理(Memory management)
- 檔案系統管理(Filesystem management)
- 裝置的驅動(Device drivers)

### System Call
- 呼叫 Kernel 的介面
- 取得硬體資源操作的方式
![](https://i.imgur.com/hLosxkF.png)
- 如果直接去用kernel可能會崩壞(?
- 用 System Call 會有相關的保護方式

### OS & Application

- Easy to program
- Any place can use
- Any hardware is allow


### Virtual Machine
- 虛擬化管理系統(Hypervisor)在 Host OS 跟 Guest OS 之間


#### How to use VM (使用教學)
- 本堂課請到 Z: 裡面找到 Nisra/2020 Enlightened/Operation System 的資料夾並且複製到自己電腦上(桌面...) 
    - 打開資料夾後 開啟下面那個 Virtual Box並安裝
    - 安裝完後並且打開，點擊上方的匯入
    - 找到你拉下來的那個資料夾裡面的 ubuntu 匯入
    - 接著就可以開啟 ubuntu 了

- 密碼是: `nisra`

- 或是上網下載 ubuntu 
## Linux

### 起源
- 1969 Unix 出現 (利用低階語言 ex:組合語言...)
- 1971 C 語言 
    - 1973 利用 C 重寫的 Unix (第三版)
- 1983 GNU 計畫
    - 為了讓每人都能用一套免費，沒有限制的作業系統 
- 1987 Minix

- 1991 Linux  ~~終於出現了~~

### Why Linux?
- 開源
- 穩定性、高效性
- Linux的安全性
- 基於 Unix 創造 

[類 UNIX 系統家族](https://bit.ly/1IQYFj0)

### Linux眾多發行版
- 掛載GUI


[Linux 發行版排行榜](https://distrowatch.com/)



### Ubuntu
- 本次介紹版本: 18.04 
- 以桌面應用為主的 Linux 發行版
- 對於 Linux 新手比較友善
- 剛剛提到的Docker是解決所有東西都在電腦上這個問題

#### 指令
- `date` : 查詢時間
    - date --help
- `cal`：查詢日期
- `man` 想查詢的指令
    - 如果不知道指令是做啥的可以用 man 來查詢 
    - ex: man date 查詢 date 這個指令是做啥的
- `curl cheat.sh/<command>` 
- `clear` : 清理畫面

#### 目錄結構
- /bin 系統執行檔
- /boot 開機需要用到的檔案
- /dev 裝置檔案
- /etc 設定檔
- /home 家目錄
- /lib 函式庫
- /media 可移除裝置掛載處
- /mnt 額外裝置掛載處
- /opt 第三方軟體放置處
- /root root 家目錄
- /sbin 系統執行檔
- /srv 服務資料目錄
- /tmp 暫存目錄
- /lost+found 檔案系統出錯放置檔案
- /proc 系統程序資訊
- /sys 系統資訊
- /usr 系統程式資源
- /var 系統資訊、記錄、暫存檔案

##### 目錄結構相關指令
- `cd <parameter>`：進入
    - cd /：根目錄
    - cd ~：家目錄
- `ls <Mparameter>`
- `echo <parameter>`
    - `echo　"Hello World"` -> Hello World
    - `echo ${LANG}` -> en_US.UTF-8
- `mkdir <folderName>`: 創建空資料夾
- `rmdir <folderName>`：刪除空資料夾
- `touch <fileName>`：新增空檔案
- `rm <folderName/fileName>`
    - `rm -rf /` -> 危險勿試，可以砍掉重來><
- `pwd`：顯現現在的目錄位置
- `cp <from> <to>` ：複製檔案
    - (同目錄下)
        - `cp hello1.c hello2.c` 在當前資料夾複製 `hello1.c` 並且貼上這個檔案並重新命名為 `hello2.c`
    - (不同目錄下)
        - `cp ./test1/hello1.c ./test2/abc` 在 `test1` 這個資料夾複製 `hello1.c` 並貼上到 `test2` 資料夾裡的 `abc` 資料夾

- `mv <from> <to>` ：移動檔案
- `find <position> -name <file>`
    - 在檔案中做尋找
    - 找不到有可能是因為權限不足
- `who`
    - 查在線使用者有誰
- `whoami`
    - 用來確認你目前的身分的指令

#### 路徑觀念
- 絕對路徑 ( 從根目錄開始 ):
    - /home/nisra/
- 相對路徑 ( 非根目錄開始 ) : 
    - ../happytime/game.txt
- / 為根目錄
- . 代表當前目錄
- .. 上一層

### Linux 檔案權限
- User / owner / 檔案擁有者 / 使用者 : 就是檔案所屬人
- Group / 群組 : 這個檔案附屬於哪一個群組團隊
- Others / 其他人 : 不是 user 也沒有加入 group 的帳號，就是其他人

#### 檔案權限介紹
drwxrwxr-x
- d 代表目錄或是檔案
- rwx(左) 擁有者權限
- rwx(右) 同群組權限
- r-x 其他使用者權限

- rw-rw-r-- 1 nisra nisra  100 Aug 9 10:31 output.txt
- 1 檔案連結數量
- nisra(左) 檔案擁有者
- nisra(右) 檔案所在群組
- 100 檔案容量 
- Aug 9 10:31 最後一次修改時間

#### Advanced Packaging Tools(apt)

- 是 Debian 及其衍生的 Linux 軟體包管理器
- APT 可以自動下載，組態安裝二進位或者原始碼格式的軟體包
- `sudo`
    - 提取權限
    > 打密碼時密碼不會出現
- `sudo apt upgrade` 更新指令包

#### VIM 文字編輯器

- install
    ```
    sudo apt install vim  //安裝 vim
    vim                   //測試是否安裝 vim
    ```
- Vim (Vi IMproved)
- 從 VI 發展出來的一個文字編輯器
- 協定中包含一些慈善條款，用來幫助烏干達的兒童

##### Why use VIM
- Everywhere
    - Unix,linux,macOS
- Fast 
    - Edit text like a wizard without leaving keyboard
- Customizeble
    - Vim's has a +25 year of plugins

##### VIM 各種模式
- common mode
    - 可以移動游標
    - (上下左右)
    - 刪除字元或整列(d)
    - 複製貼上(y, p)等等動作
    - 按下`:`進入command-line mode
    - 按下`i,o,a,R`進到編輯模式
- insert mode
    - 可輸入各種字元
    - 按下Esc回到common mode
- command-line mode
    - 離開
    - 顯示行號
    - 按下Esc回到指令模式

- 游標控制
    - 上: `k` 
    - 下: `j`
    - 左: `h`
    - 右: `l`
- Vim 指令列
    - `q` 不儲存離開
    - `q!` 強制退出
    - `w` 存檔
    - `wq` 存檔+離開
- Vim 移動單行
    - `0` 到行首
    - `$` 到行末
    - `^`or`_`到行開頭
    - `g_-` 到行結尾
    - 
##### VIM 世界難題
- 如何離開VIM

















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