---
# System prepended metadata

title: Linux筆記

---

{%hackmd BJrTq20hE %}
# Linux筆記
##### tags: `資安實務課堂筆記`
## What is Linux?

簡單來說Linux就是一個作業系統(Operating System)。
世上所有不同版本的Linux都是**kernel**加上**GUI**、**CLI**等使用者介面或其他開發套件而形成的不同版本。
而kernel則是由*Linus Benedict Torvalds*在1991年8月25日發布。

![Linus微笑](https://i.imgur.com/uddxoSK.jpg)
*(Linus微笑。圖取自[維基百科](https://en.wikipedia.org/wiki/Linus_Torvalds))*
## Linux的架構
Linux的架構最外層為應用程式和工具(**非必要**)往內為**shell**而最內層則是**kernel**和**硬體**。

![Linux的架構](https://i.imgur.com/qSjjMQD.png)
(圖源:[javatpoint](https://www.javatpoint.com/architecture-of-linux))

---

操作者通常都是透過shell和kernel溝通，而kernel再直接和硬體互動。

## Shell

現有的Shell

| sh                      |
| ----------------------- |
| Burne Shell (sh)         |
| Burne Again Shell (bash) |

| csh             |
| --------------- |
| C Shell (csh)    |
| TC Shell (tcsh)  |
| Korn Shell (ksh) |

預設shell存在的目錄為: /etc/shells

## 檔案存取權限


當在Terminal輸入`ls -l`並執行後就會列出當前目錄內檔案及各使用者可對其操作的權限。

![身分](https://i.imgur.com/8buqRbE.png)
(圖取自[Madeesha’s Tech Space](https://madeeshafernando.medium.com/basics-of-linux-file-permission-5db00bd9749f))

![檔案存取權限](https://i.imgur.com/AY5RJQe.jpg)
(圖取自[pluralsight](https://www.pluralsight.com/blog/it-ops/linux-file-permissions))


---

而使用`chmod`指令則能夠變更使用者或群組對檔案的操作權限。
```bash
> chmod +x password #給使用者編輯檔案的權限
> chmod 777 aaa #所有使用者可讀可寫可執行
```

## 資料重導向與管線處理
### 資料重導向
標準的資料流向為:
``` mermaid
graph LR;
keyboard-->|FD0|process;
process-->|FD1|screen;
process-->|FD2|screen;

```
但是我們能透過重新導向運算子`>` `<` `2>`等等來簡化處理的流程。
例如若只想看見err而不想看到output，那就可以將output導向/dev/null。
``` mermaid
graph LR;
A["$find /password > /dev/null"]
B["/dev/null"]
A-->|FD0|process;
process-->|FD2|screen;
process-->|FD1|B;
```
### 管線處理

Pipe類似於Redirect都是用於資料流動，但差別就在於Redirect是控制檔案與指令之間，而Pipe則是指令與指令之間。

---

範例:
```bash
> cat /etc/passwd | more
> cat txt/*/flag | grep -i “flag” | more
> strings a.out | grep -i “flag”
```
## 遠端主機連線

快速地透過shell跟指令連線其他主機或網址，而非使用軟體或瀏覽器(尤其當linux為CLI版本時)。


| 指令               | 功能                      | 範例                       |
|:------------------ |:------------------------- |:-------------------------------- |
| ssh usr@ip -p port | 安全加密連線(預設port 22) | `ssh lab@120.114.62.214 -p 2200`|
| wget <url>         | 直接下載網站上的檔案      | `wget http://XXX/OOO.gz  `     |
| nc <ip> <port>     | 遠端主機連線(明文傳送)    | `nc 120.114.62.214 2405`      |
| curl <url>         | 在命令列環境下連接url     | `curl -v http://google.com/ `|  
    

## Editor
    
### vim
```sequence
編輯模式-->一般模式:Esc
一般模式->編輯模式: i
命令列模式-->一般模式: Esc
一般模式->命令列模式: :/

```
### 一般模式
- 移動游標
- 選取範圍
- 刪除
- 複製貼上

### 編輯模式
- 輸入文字
- 取代

### 命令列模式
- 儲存、離開
- 搜尋、取代
- 讀入檔案

### 常用命令列指令
| 存檔 | 離開 | 編輯檔案    | 列出本目錄下檔案 |
| ---- | ---- | ----------- | ---------------- |
| `:w` | `:q` | `:e <file>` | `:Ex`            |

---

# 總結(心得)

不管各個領域，越是深入研究總是會意識到自己的無知，
    
> ***Tiny knowledge makes one proud, rich knowledge makes one humble.***
    

這也促使著我們不斷的精進，而不止步於此。
經過這次課程的洗禮，學習了以前接觸不到的知識，或許只是點皮毛但我認為這是一個很好的開端，感謝老師給了我一個很棒的起頭，期望自己將來能夠在這個領域，闖出一片天。

![](https://i.imgur.com/EL5QhnZ.jpg)
(圖源自[rickhw](https://rickhw.github.io/2017/09/20/About/Learning-Approaches/))