Linux

Linux

Linux (Server/系統管理/基礎架構)

(SysAdmin & Infrastructure)

  • foundations / echosystem (生態)

    • History / Distro

  • storage stack / Filesystems (infra)

    • FS / Disk / Part / LVM / mnt

  • FHS / System Layout (SysAdmin)

  • File sematics / Permissions

    • ​Link / rwx

  • Process & Service Management

    • systemd

共筆

What is it?

Linux 是一種作業系統

像Windows與MacOS一樣

Linux 本體是 kernel (核心)

 

更展開一點...

  • kernel
  • GNU/其他工具
  • Desktop Environment

負責: CPU/Memory/Drive/Network/Driver 管理...

 

平常用到的 Linux 系統:

 

整套叫做 Linux Distribution

 

特性:

  • Open source
  • Customizable
  • Stable

哪裡能遇到Linux ?

  • 大多數網頁/服務 後端
  • 容器
  • Android
  • Router, NAS, IoT...

History

1970s

Unix 誕生

 

  • 多使用者/多工
  • Everything is File
  • 小工具 + pipe
  • (商業授權)

1983

GNU Project

 

  • gcc
  • bash/shell
  • coreutils (ls, cp, mv, cat...)
  • libc

Richard Stallman: (GNU Project)

做出完全自由的Unix-like OS

有userland, 沒有kernel

1991

Linus Torvalds: 

喔,我在寫一個hobby OS, 不會很大

1991

Linux kernel

  • CPU
  • Memory
  • Disk
  • Process
  • Driver

所以...

GNU userland + Linux kernel

= GNU/Linux

Linux Distributions

Debian 家族

  • 穩定
  • 保守

pacakge manager: apt / apt-get

Debian

  • 極高穩定
  • 版本更新周期長 (套件版本舊)
  • 任何 "要活很久" 的環境

Ubuntu

  • 安裝簡單
  • driver / Desktop support
  • 更新週期快
  • 有 LTS

Kali Linux

  • 滲透測試
  • 資安工具箱

Red Hat 家族

  • 商業支援
  • 標準化

pacakge manager: dnf

RHEL

  • Enterprise Level
  • LTS
  • 一樣是追求穩定

Fedora

  • RHEL的試驗場
  • 更新快,功能多
  • 穩定性不比RHEL高

Arch Linux

  • rolling release
  • 高自由度
  • 手動配置 (各種)

pacakge manager: pacman

媽的,不要再Arch了

Alpine Linux

  • 極度精簡 (5MB)
  • 適合 Container

pacakge manager: apk

Installation

  1. 下載ISO
  2. 做Boot USB (Ventoy / Rufus)
  3. 用 USB 開機
  4. 設定 (時區、鍵盤、part、密碼...)
  5. Reboot

環境

打 yes (accept fingerprint)

輸入password (不會顯示)

ssh student@1.2.3.4
ssh student@<ip>

先使用apt安裝nginx

輸入password (不會顯示)

sudo apt install nginx -y

Filesystem Hierarchy Standard

(FHS)

(檔案系統階層標準)

定義 Linux 主要目錄、目錄內容

大多 Distribution 都會遵守。

  • /bin 

  • /boot

  • /dev

  • /etc

  • /home

  • /lib

  • /media

  • /mnt

  • /proc

 

  • /root

  • /run

  • /sbin

  • /srv

  • /sys

  • /tmp

  • /var

  • /usr

/bin

最基本要用的指令

sh, cp, ls

/sbin

su才需要的指令

iptables, reboot, fsck

/boot

開機相關

  • /boot/vmlinuz-*     

  • /boot/initrd-* 

  • /boot/grub/    

  • ...

Kernel

boot時的臨時root

bootloader

initramfs

  1. BIOS/UEFI 拉起 grub   

  2. grub load Kernel and initramfs

  3. Kernel 用 initramfs 當作臨時 root

  4. 找到 rootfs 後,switch root    

/dev

Device File

  • /dev/sda

  • /dev/tty

  • /dev/null  

  • ...

硬碟

terminal

blackhole

/etc

純設定

  • /etc/passwd
  • /etc/ssh/sshd.conf
  • /etc/nginx/nginx.conf
  • ...

/home

家目錄

包含用戶資料/設定/ ssh key 等等

  • /home/andy/
  • ...

/lib

系統核心用的 lib

  • /lib/glibc
  • /lib/linux
  • ...

/media

可移除裝置

  • /media/usb
  • /media/cdrom
  • ...

/mnt

手動掛載的地方

  • /mnt/data
  • /mnt/backup
  • ...

/proc

系統即時資訊

  • /proc/cpuinfo

  • /proc/meminfo

  • /proc/<pid>

/sys

硬體資訊

  • /sys/class/net

  • /sys/class/block

網卡

硬碟

/root

root 的家目錄

 

為什麼不在 /home/root/ ?

/run

開機後出現的暫時資料

tmpfs

 

/srv

Service Data

  • /srv/www

  • /srv/ftp

/tmp

暫存區

reboot 清空

/var

會變動的資料

  • /var/lib

  • /var/log

  • /var/tmp

服務資料

log

不清除的 /tmp

/usr

user system resources

  • /usr/bin

  • /usr/sbin

  • /usr/share

  • /usr/local

使用者工具

 

 

使用者安裝的軟體

總結

  • 程式在哪

  • 設定在哪

  • 資料在哪

  • log在哪

  • 硬體在哪

  • 系統狀態

  • 硬碟炸了

/bin/ /usr/bin/

/etc/

/var/lib/ /home/

/var/log/

/dev/ /sys/

/proc/

/var/

Storage Management

How Linux Store Files

Disk -> Partiton -> (PV -> VG -> LV) -> FS -> mount

                             -> FS -> mount

Mount (掛載)

Linux只有一棵目錄樹

任何硬碟/USB/等等,都要 "掛" 到某一個目錄上 能用

這個行為就是"mount"

File System

(FS)

把硬碟 (0/1) 整理成能用的檔案系統

  • Index / Metadata
    紀錄檔案資訊
  • Store
    檔案切塊存在 block 上
  • Free Space Management
    知道哪邊能存新資料

常見File System

ext (for Linux)

ext2

ext3

ext4

  • 最早期的 Linux
  • 簡單
  • 突然斷電就完蛋了
    fcsk 去吧你
  • 多了 journaling
  • Linux 主流
  • Extends (連續 block)
  • delayed allocation
  • larger files

inode:

File(name) 指向 inode

inode包含metadata

inode指向blocks (max: 12)

Block:

磁碟被切成多塊block (4KB)

用於儲存檔案

FAT32

  • 老,通用
  • 檔案最大4GB
  • USB / SD Card

exFAT

  •  
  • 檔案最大4GB
  • Win/Mac/Linux/USB/SD
    (跨系統)

NTFS (for Windows)

  • 支援大檔案/硬碟
  • journaling
  • Windows R/W OK
  • Linux 要驅動

(與FAT32比)

總結

  • Linux
    • 首選 ext4
  • Windows
    • NTFS
  • ​USB / SD
    • exFAT (為了跨平台)

指令

  • mkfs.ext4 /dev/sdb1
  • mount /dev/sdb1 /data

Disk

  • SATA

  • NVme

  • SAS

Interfaces

最常見的 Hard Drive / SSD

走 PCIe 的 SSD,比 SATA 快

伺服器用,可熱插拔

  • /dev/sda

  • /dev/sdb

  • /dev/sdc

  • ...

Device Name

Linux會把硬碟編號為:

/dev/sdX or /dev/nvmeXnY

  • /dev/nvme0n1

  • /dev/nvme1n1

  • ...

SATA/SAS

NVMe

(block device)

指令

  • lsblk
  • lsblk -f

指令

  • mount | column -t

Partition

(part)

  • 先把Disk做Partition
  • 再把Partition format成FS
  • 再mount to folder

(保證單一FS毀損,其他FS不會損壞)

這裡,灌Debian到一半,設定partition

就可以選說,怎麼part

All Files in one partition

Seperate Partition

有5個partition,分別被mount到4個folder

(swap是記憶體延伸空間)

  • /dev/sda
    • /dev/sda1
    • /dev/sda2
    • ...

Partition Table

磁碟分割表

錄了各個Partition的位置與資訊

(例如 MBR 或 GPT)

MBR

  • 上限: 2TB
  • 只能有4個Primary Partition
  • Boot: 走BIOS / Legacy Boot

 

GPT

  • 上限: 無
  • Up to 128 Partitions
  • Header + CRC Checksum + Backup
  • Support UEFI Boot

 

Windows:

指令

  • df -h

Logical Volume Manager

(LVM)

三個核心名詞:

  • PV    

  • VG    

  • LV     

讓資源給 LVM 管理

PV 組成 VG

從 VG 切資源出來

Physical Volume

(PV)

  • 把 Disk or Partition 變成 LVM 可以管理的資源
  • 1 : 1 對應
  • 不負責分配空間,不負責 mount

PV

Volume Group

(VG)

  • 把 PV 合併成一個 Resource Pool
  • 解決以前空間被 part 分割死的問題

VG

Logical Volume

(LV)

  • 從 VG 切塊出來
  • 可以:
    • Format FS (就是 Block Device)
    • Mount
  • 特性:
    • 可以 resize
    • Snapshot

LV

Links

同份資料,不同入口

  • Symbolic Link
  • Hard Link

Symbolic Link

  • 指向另一個 檔案/目錄
  • 可以跨 File System
  • 原檔刪掉,SymLink 失效
ln -s /var/log/nginx/access.log ~/access.log

用途

  1.  版本切換
    /usr/local/java -> /usr/local/java17
  2. 資料放在其他硬碟
    /var/lib/docker -> /anotherdisk/docker

Hard Link

  • 指向某個檔案的 inode
  • 不能跨 FS
  • 原檔刪掉,HardLink 仍然能使用
echo "hello" > a.txt
ln a.txt hard
ln -s a.txt sym

用途

  1.  省空間
    (不同檔名,指向同個disk中的資料)
  2. 保留舊版
    /etc/nginx/nginx.conf = /etc/nginx/nginx.conf.bak

總結

  • SymLink
    • 指向 檔案/目錄 (可跨FS)
  • HardLink
    • 指向 inode (不可跨FS)

Permission System

  • r

  • w

  • x

讀內容

修改內容

執行

權限核心:

File

Dir

ls看內容

新增/刪除File

cd進去

  • owner

  • group

  • other

檔案的owner

檔案所屬group

not owner and not in group

三組身分:

指令

ls -la

常見:

  • r-x

  • --x

  • rwx

能進出,能看list (read-only)

能進去 (特定檔案才能看到)

都可以

數字編碼

  • ---

  • --x

  • -w-

  • -wx

  • r--

  • r-x

  • rw-

  • rwx

0

1

2

3

4

5

6

7

指令

  • chmod 754 <file>

  • chmod u+rwx,g+rw,o+r <file>

  • chmod -R 777 <file>

systemd

  • 開機後第一個user space program (PID=1)
  • 初始化系統
  • 啟動/管理所有Unit (平行)
  • 整合log (journald)

Unit File

  • [Unit]

  • [Service]

  • [Install]

這個Unit是什麼?

如何啟動?

要不要autorun ?

指令

  • systemctl status

  • systemctl start

  • systemctl stop

  • systemctl restart

  • systemctl enable

  • systemctl disable

  • systemctl list-units --type=service

指令

  • journalctl -u

  • journalctl

再玩一些指令...

  • top
  • htop
  • btop

...

Made with Slides.com