antony@notes:~/container$ cat "Namespace.md"
Namespace
Namespace
- 隔離技術isolation
- Windows沒有提供Namespace
- 隔離的對象是Process(PID)
- 目前8大項(上面的) ,且陸續增加中
ls -l /proc/self/ns/
看proc中的namespace
sudo unshare --uts sh
是來隔離sh這個process的,其中的–uts 就是(UNIX Time-Sharing),而(UNIX Time-Sharing)跟時間沒關係,是用來隔離電腦名字。
讓sh這個程式,自己擁有一個uts的隔離空間,可以自己設定電腦的主機名稱,而且絕對不會影響到alp虛擬主機的電腦名稱。
root@alp:/home/bigred$ hostname ssn763
root@ssn763:/home/bigred$ hostname
ssn763
與 ALP 虛擬主機的 uts Namespace ID 不一樣, 代表 sh 這個 Process 有啟動 uts namespace
ps aux
- 是到
/proc目錄抓process的資料 /proc全名: process,裡面記錄這台電腦裡面所有在執行的process資訊 ↑由Linux Kernel產生的(維護維運)
ls -l /proc/self/ns/
- ns 全名就是Namespace
root@sn7763:/home/bigred/ov2$ ls -l /proc/self/ns/ total 0 lrwxrwxrwx 1 root root 0 Sep 30 10:28 cgroup -> ‘cgroup:[4026531835]’ lrwxrwxrwx 1 root root 0 Sep 30 10:28 ipc -> ‘ipc:[4026531839]’ lrwxrwxrwx 1 root root 0 Sep 30 10:28 mnt -> ‘mnt:[4026531840]’ lrwxrwxrwx 1 root root 0 Sep 30 10:28 net -> ’net:[4026532000]' lrwxrwxrwx 1 root root 0 Sep 30 10:28 pid -> ‘pid:[4026531836]’ lrwxrwxrwx 1 root root 0 Sep 30 10:28 pid_for_children -> ‘pid:[4026531836]’ lrwxrwxrwx 1 root root 0 Sep 30 10:28 time -> ’time:[4026531834]' lrwxrwxrwx 1 root root 0 Sep 30 10:28 time_for_children -> ’time:[4026531834]' lrwxrwxrwx 1 root root 0 Sep 30 10:28 user -> ‘user:[4026531837]’ lrwxrwxrwx 1 root root 0 Sep 30 10:28 uts -> ‘uts:[4026532551]’
/proc怎麼來: linux啟動後,在memory中isolate PID的區域,存放所有執行中process的資訊,並mount(掛載)至/proc中
cgroup、ipc、mnt、net、pid、pid_for_children、time、time_for_children,以上這些隔離空間都在記憶體
pid隔離空間 裡面存放的是linux系統所run的process資訊 為了要讓人讀取到,所以就把這個記憶體掛載(mmount)到/proc 目錄
net隔離空間 是一個記憶體區塊 裡面存放這台電腦的網路系統資訊 root@sn7763:/home/bigred/ov2$ ifconfig eth0 (網卡)
Link encap:Ethernet
HWaddr(網卡的硬體位置) 00:0C:29:75:3B:F5 inet addr(ip位置):192.168.188.181
Bcast(廣播位置):192.168.188.255
Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST
MTU(傳遞封包的大小):1500 Metric:1 RX packets:26838 errors:0 dropped:0 overruns:0 frame:0 TX packets:9675 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1751104 (1.6 MiB) TX bytes:962677 (940.1 KiB)
sudo unshare --pid --fork sh
主角一樣是sh,讓他產生一個自己的pid隔離空間
–fork |
問題:
sh的pid隔離空間裡面存放甚麼?
答:
放sh這個process以及

- Default 是network namespace的名字
- linux一開機就會自動產生Default的隔離空間 net 的隔離空間,名稱叫 default
創建網卡: sudo ip link add ve1 netns 1 type veth peer name ve2 netns 4582
「ve1」、「ve2」:是我們要新增的網卡的名字
「netns」:network namespace
接的是"PID"!!!接的是"PID"!!!接的是"PID"!!!(針對process,很重要所以要說三次)
再來可以在回到原先 命令提示字元 視窗, 執行以下命令
sudo lsns -t net數字1是 4026532000 net 122 1 root unassigned /sbin/init 是原本虛擬主機的net的PID
數字69839是 4026532558 net 2 69839 root unassigned unshare –pid –fork –mount-proc –net –uts sh 是sh這個process的net的PID
「type」:規格
「veth」:Virtual ethernet乙太網路
「peer」:對接
sudo unshare --pid --fork --mount-proc --net --uts sh
–mount-proc 是專門針對pid這個隔離空間的,不適用在其他隔離空間。
ip使用規則:
- 去頭(192.168.166.0): 網路代號
- 去尾(192.168.166.255): 廣播
- 前10(192.168.166.0~192.168.166.10): server網站伺服器
- 後5(192.168.166.250~192.168.166.254): 網路設備 router
- 剩下切一半
- 後半由dhcp自動配發(192.168.166.128~192.168.166.249)
- 前半由我們手動配發(192.168.166.11~192.168.166.127)
bigred@alp:~/c3po$ ls -al /dev/zero
crw-rw-rw- 1 root root 1, 5 Sep 29 19:21 /dev/zeroc 是character
sudo mount --bind -o ro /dev rootfs/dev
–bind: 允許/dev這個目錄,蓋過rootfs/dev目錄
-o: 下參數
ro: read only
</dev/zero head -c 200m | tail