# Linux 入門
## 介紹
Linux 是一個免費的開源作業系統,目前被全世界廣泛應用於各種伺服器,工作站,及個人電腦。Linux 作業系統發展至今,已經衍生出許多分支,在世界上有許多不同的Linux發行版,比較廣為人知的發行版有:
* (Red Hat系)
* Red Hat Enterprise Linux (Fedora的商業版)
* CentOS
* Fedora (CentOS相關)
* openSUSE
* (Debian系)
* Debian
* Ubuntu (從Debian衍生)
* Elementary OS (從Ubuntu衍生,適合做個人電腦用)
* Arch Linux
* Clear Linux OS (新,Intel主導)
* macOS
這些Linux發行版都是建立於GNU/Linux 發行版之上,再依據各家對其進行客製化,所以基本上這些發行版的底層及基本指令都是可以互通的。相較於Windows系統,Linux十分依賴使用Terminal(類似Windows的CMD)進行操作,而非使用圖形介面。這個差異使得許多長期使用Windows的用戶感到很難上手,不過對於使用Linux當作伺服器,使用指令介面可以帶來許多好處,也十分方便。
1. 可以透過SSH連線操作,不須透過額外安裝遠端桌面軟體,安全性大幅提昇。
2. 無須執行圖形介面,省下許多不必要的效能消耗。
3. 許多伺服器軟體因為市場需求,皆對於Linux有著很好的支援,有許多方便的指令。
4. 可以把指令建置成腳本,讓其自動運行,這是圖形化操作無法達成的。
## 操作
基本上Linux的所有操作都可以使用指定來達成,這些指令都是寫好的應用程式,放在預設的指定位置,當我們下這些指令時,實際上系統是去執行這些應用程式,來達到我們要的功能。下面我們依照功能來分類介紹一些常用的指令。
### 1. 檔案操作
[![](https://i.imgur.com/xwuziCL.jpg)](https://i.imgur.com/xwuziCL.jpg)
* 軟連結 (softlink 或 symbolic link):指向另一支檔案或目錄的捷徑檔
* 硬連結 (hardlink):指向 inode index,無法指向目錄
* Hardlink 無法跨檔案系統使用 (因 inode 不同)
* Hardlink 會增加 link count
* 一支檔案的檔名就是 hardlink 的例子
### 2. 輸入與輸出重新導向
* Shell 的 file descriptor (fd) 通常有 10 個,以下是常用的 3 個標準輸出
* fd = 0 (/dev/stdin)
* fd = 1 (/dev/stdout)
* fd = 2 (/dev/stderr)
* 使用 < 改變讀入的資料通道 (stdin)
* 從指定的檔案中讀入,< 的預設值為 0,所以 < 與 0< 一樣
* 使用 >, >> (附加) 改變輸出的資料通道 (stdout, stderr)
* 輸出到指定的檔案中,> 的預設值為 1,所以 > 與 1> 一樣
[![](https://i.imgur.com/9xhxLxr.jpg)](https://i.imgur.com/9xhxLxr.jpg)
### 3. Pipe 與 Tee
* 用 pipe ( | ) 連接一系列指令的執行
* 一個指令執行後的輸出會通過 pipe 傳給第二個指令當作輸入,而第二個指令的輸出又會傳給第三個指令作為輸入,依此類推
* 範例
* `$ ls / | sort -r`
* `$ du | sort –nr`
* `$ ls –lt | head`
* 使用 Tee 在 pipe 同時,又進行重導向
* 範例
* `$ du -d1 -h | tee unsorted.txt | sort -nr`
* `$ more unsorted.txt`
* `$ du -d1 -h | tee 1.txt 2.txt 3.txt | sort -nr`
### 4. 打包檔案
* 使用 tar 工具將檔案與目錄打包成為單一歸檔 (archive, 未壓縮, 或稱為 tar ball)
* 打包參數 -cvf (c: 建立新歸檔, v: 顯示詳情, f: 指定檔名)
* 拆封參數 -xvf (x: 取出歸檔, v: 顯示詳情, f: 指定檔名)
* tar 可配合壓縮工具,打包兼壓縮歸檔
* 壓縮參數 -czvf (gzip), -cjvf (bz2)
* 解壓參數 -xzvf (gzip), -xjvf (bz2)
* 解開 tar ball 的指令最後可以加上 -C path 來指定解出檔案存放的位置
[![](https://i.imgur.com/9o6c8yj.jpg)](https://i.imgur.com/9o6c8yj.jpg)
### 5. echo, cat, more, less, wc, head, tail 與 sort
[![](https://i.imgur.com/asBEZud.jpg)](https://i.imgur.com/asBEZud.jpg)
### 6. grep, diff, find 與 whereis
[![](https://i.imgur.com/kc4Mfso.jpg)](https://i.imgur.com/kc4Mfso.jpg)
### 7. du, df, lsblk, free 與 fdisk
[![](https://i.imgur.com/bL9FvnZ.jpg)](https://i.imgur.com/bL9FvnZ.jpg)
### 8. file, wget, curl, ifconfig, ping, pwd 與 reboot
[![](https://i.imgur.com/ExTC95p.jpg)](https://i.imgur.com/ExTC95p.jpg)
### 9. 帳戶管理
[![](https://i.imgur.com/Ixj0PTh.jpg)](https://i.imgur.com/Ixj0PTh.jpg)
### 10. /etc/passwd, /etc/shadow 及 /etc/group
* 帳號與群組以 UID/GID 數字紀錄
* UID/GID 對應檔在 /etc/passwd 及 /etc/group
* UID 0 為 root
* 非 0 為一般帳號 (1~999 為系統帳號,大於 1000 為可登入帳號)
* /etc/passwd
* 名稱:密碼(x):UID:GID:全名:家目錄:Shell
* 帳號密碼在 /etc/shadow 檔 (僅 root 可更動該檔)
* 名稱:加密密碼:更動日期:最小可變動日:最大需變動日:過期前警告日數:失效天數:帳號失效日:保留
### 11. 觀察檔案權限
[![](https://i.imgur.com/8QPGS1Z.jpg)](https://i.imgur.com/8QPGS1Z.jpg)
### 12. 檔案權限管理
[![](https://i.imgur.com/PvBQPw0.jpg)](https://i.imgur.com/PvBQPw0.jpg)
### 13. 查看處理程序
[![](https://i.imgur.com/vRT52RL.jpg)](https://i.imgur.com/vRT52RL.jpg)