linux命名空间(namespace)学习(一)
關于linux命名空間網絡上有很多是關于docker 的,也有關于linux的專門的linux的namespace介紹的,沒有專門介紹Linux命名空間的應用的。所以我想先介紹一下linux命名空間的應用,然后再介紹linux內核對于命名空間的管理方式。好了,廢話不多說先上原理吧。
命名空間在linux中是實現資源隔離的一種手段,也是輕量級虛擬化的一種手段??梢詫崿F多個用戶,也可以實現多個網絡設備訪問(虛擬化網絡),但是實體網絡卻只有一個。資源隔離意味著比如不通PID命名空間看到的PID進程是不一樣的,不通命名空間看到的IPC通信是不一樣的。
命名空間分類:
本博客會先在用戶用戶命名空間的使用方式上介紹前四種命名空間;
代碼如下:
<ipc_clone.c>
**
UTS命名空間
**
操作如下:
1.啟動UTS命名空間進程,在進程內把UTS的名字命名為alexander;
2.在進程內啟動了bash進程,查看子進程UTS命名空間,為alexander;
3.退出子進程,子命名空間不存在;
4.查看主命名空間,為系統的hostname(ubuntu)
結果如下:
**
IPC命名空間
**
操作過程如下:
操作如下:
root@ubuntu:/usr/src/linux-2.6.39/driver/namespace/clone# ./clone this is in contain_func, and pid : 1 root@alexander:/usr/src/linux-2.6.39/driver/namespace/clone# ipcs -q------ Message Queues -------- key msqid owner perms used-bytes messages root@alexander:/usr/src/linux-2.6.39/driver/namespace/clone# ipcmk -Q Message queue id: 0 root@alexander:/usr/src/linux-2.6.39/driver/namespace/clone# ipcs -q------ Message Queues -------- key msqid owner perms used-bytes messages 0x5f9a3379 0 root 644 0 0 root@alexander:/usr/src/linux-2.6.39/driver/namespace/clone# ./clone this is in contain_func, and pid : 1 root@alexander:/usr/src/linux-2.6.39/driver/namespace/clone# ipcs -q------ Message Queues -------- key msqid owner perms used-bytes messages root@alexander:/usr/src/linux-2.6.39/driver/namespace/clone# exit exit this is in main root@alexander:/usr/src/linux-2.6.39/driver/namespace/clone# ipcs -q------ Message Queues -------- key msqid owner perms used-bytes messages 0x5f9a3379 0 root 644 0 0 root@alexander:/usr/src/linux-2.6.39/driver/namespace/clone# ipcrm 0x5f9a3379 ipcrm: unknown argument: 0x5f9a3379 usage: ipcrm [ [-q msqid] [-m shmid] [-s semid][-Q msgkey] [-M shmkey] [-S semkey] ... ] root@alexander:/usr/src/linux-2.6.39/driver/namespace/clone# ipcrm -Q 0x5f9a3379 root@alexander:/usr/src/linux-2.6.39/driver/namespace/clone# ipcs -q------ Message Queues -------- key msqid owner perms used-bytes messages root@alexander:/usr/src/linux-2.6.39/driver/namespace/clone# exit exit this is in main**
PID命名空間
**
操作過程如下:
操作如下:
root@ubuntu:/usr/src/linux-2.6.39/driver/namespace/clone# ./clone this is in contain_func, and pid : 1 root@alexander:/usr/src/linux-2.6.39/driver/namespace/clone# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.5 0.0 5748 1956 pts/15 S 04:35 0:00 [bash] root 13 0.0 0.0 5216 1144 pts/15 R+ 04:35 0:00 ps aux root@alexander:/usr/src/linux-2.6.39/driver/namespace/clone# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 04:35 pts/15 00:00:00 [bash] root 14 1 0 04:35 pts/15 00:00:00 ps -ef root@alexander:/usr/src/linux-2.6.39/driver/namespace/clone# ls /proc/ 1 cgroups diskstats fs kallsyms kpageflags misc pagetypeinfo slabinfo sysvipc version_signature 15 cmdline dma interrupts kcore latency_stats modules partitions softirqs timer_list vmallocinfo acpi consoles driver iomem keys loadavg mounts sched_debug stat timer_stats vmstat asound cpuinfo execdomains ioports key-users locks mpt schedstat swaps tty zoneinfo buddyinfo crypto fb ipmi kmsg mdstat mtrr scsi sys uptime bus devices filesystems irq kpagecount meminfo net self sysrq-trigger version root@alexander:/usr/src/linux-2.6.39/driver/namespace/clone# exit exit this is in main**
總結
**
上述子命名空間中的操作主要由如下關鍵宏操作:
CLONE_NEWPID:創建PID命名空間
CLONE_NEWUTS:創建UTS命名空間;
CLONE_NEWIPC:創建新的IPC命名空間;
CLONE_NEWNS:創建新的文件系統命名空間;
注意:
在創建新的IPC命名空間過程中必須指定創建文件系統命名空間,并且掛載新的proc文件系統,否則會使用上一層命名空間中的proc文件系統,這樣顯示的PID(無論是ps 命令還是top命令)就如上一層命名空間中顯示的PID一樣的。
總結
以上是生活随笔為你收集整理的linux命名空间(namespace)学习(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 仿Win7屏保泡泡移动
- 下一篇: rt带宽限制浅析