当前位置:首页 > CN2资讯 > 正文内容

linux namespace教程 linux中namespace

2天前CN2资讯


第1天:Linux namespace概述


#### 从本文开始,我们将会从零开始带领大家学习Linux namespace的相关内容。

#### 在本文中,我们将会首先介绍namespace的基本概念

## 什么是namespace

Namespace是对全局系统资源的一种封装隔离,使得处于不同namespace的进程拥有独立的全局系统资源,改变一个namespace中的系统资源只会影响当前namespace里的进程,对其他namespace中的进程没有影响。

Linux内核支持的namespaces如下:

名称 | 宏定义 | 隔离内容

--|--|--

Cgroup | CLONE_NEWCGROUP | Cgroup root directory (since Linux 4.6)

IPC | CLONE_NEWIPC | System V IPC, POSIX message queues (since Linux 2.6.19)

Network | CLONE_NEWNET | Network devices, stacks, ports, etc. (since Linux 2.6.24)

Mount | CLONE_NEWNS | Mount points (since Linux 2.4.19)

PID | CLONE_NEWPID | Process IDs (since Linux 2.6.24)

User | CLONE_NEWUSER | User and group IDs (started in Linux 2.6.23 and completed in Linux 3.8)

UTS | CLONE_NEWUTS | Hostname and NIS domain name (since Linux 2.6.19)

Ps:其中,cgroup namespace在4.6的内核中才实现,并且和cgroup v2关系密切,现在普及程度还不高,比如docker现在就还没有用它,所以在namespace系列文章中暂时不会介绍cgroup namespace。

## 查看进程所属的namespaces

系统中的每个进程都有/proc/[pid]/ns/这样一个目录,里面包含了这个进程所属namespace的信息,里面每个文件的描述符都可以用来作为setns函数(后文会介绍)的参数。

查看当前bash进程所属的namespace信息:

![查看当前bash进程所属的namespace信息](/static/files/591/5989cee6e519f50ef7000031/33/images/2ec649230f7b0d7f02fde0c6df5da7ee.png)

其中:

1. 以ipc:[4026531839]为例,ipc是namespace的类型,4026531839是inode number,如果两个进程的ipc namespace的inode number一样,说明他们属于同一个namespace。这条规则对其他类型的namespace也同样适用。

2. 从上面的输出可以看出,对于每种类型的namespace,进程都会与一个对应的namespace ID关联。

## namespace相关的API

和namespace相关的函数只有三个,如下所示:

一、`clone`: 创建一个新的进程并把他放到新的namespace中。

``` int clone(int (*child_func)(void *), void *child_stack, int flags, void *arg); ```

其中:flags用于指定一个或者多个上面的CLONE_NEW*宏定义(当然也可以包含跟namespace无关的flags,多个flags用|进行分隔),这样就会创建一个或多个新的不同类型的namespace,并把新创建的子进程加入新创建的这些namespace中。

二、`setns`: 将当前进程加入到已有的namespace中。

``` int setns(int fd, int nstype); ```

其中:

1. fd:指向/proc/[pid]/ns/目录里相应namespace对应的文件,表示要加入哪个namespace

2. nstype:指定namespace的类型(上面的任意一个CLONE_NEW*),具体分为两种情况:1. 如果当前进程不能根据fd得到它的类型,如fd由其他进程创建,并通过UNIX domain socket传给当前进程,那么就需要通过nstype来指定fd指向的namespace的类型。2. 如果进程能根据fd得到namespace类型,比如这个fd是由当前进程打开的,那么nstype设置为0即可。

三、`unshare`: 使当前进程退出指定类型的namespace,并加入到新创建的namespace(相当于创建并加入新的namespace)。

``` int unshare(int flags); ```

其中:flags用于指定一个或者多个上面的CLONE_NEW*宏定义(当然也可以包含跟namespace无关的flags,多个flags用|进行分隔),这样就会创建一个或多个新的不同类型的namespace,并把新创建的子进程加入新创建的这些namespace中。

### clone和unshare的区别

clone和unshare的功能都是创建并加入新的namespace, 他们的区别是:

1. unshare是使当前进程加入新的namespace。

2. clone是创建一个新的子进程,然后让子进程加入新的namespace,而当前进程保持不变。

## 补充信息

当一个namespace中的所有进程都退出时,该namespace将会被销毁。当然还有其他方法让namespace一直存在,假设我们有一个进程号为1000的进程,以ipc namespace为例:

1. 通过`mount --bind`命令。例如:

``` mount --bind /proc/1000/ns/ipc /other/file ```

此时,就算属于这个ipc namespace的所有进程都退出了,只要`/other/file`还在,这个ipc namespace就一直存在,其他进程就可以利用`/other/file`,通过`setns`函数加入到这个namespace。

2. 在其他namespace的进程中打开`/proc/1000/ns/ipc`文件,并一直持有这个文件描述符不关闭,以后就可以用`setns`函数加入这个namespace。


    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/25724.html

    分享给朋友:

    “linux namespace教程 linux中namespace” 的相关文章

    **解析cn2线路的美国vps:为什么它是你的最佳选择?**

    ---##cn2线路的美国vps,为什么它如此受欢迎?在数字化时代,VPS(虚拟私人服务器)已经成为企业和个人用户不可或缺的工具。无论是用于网站托管、游戏服务器搭建,还是作为企业数据中转站,VPS的功能和性能直接影响用户体验。在众多VPS服务中,"cn2线路的美国vps"凭借其独特的优势,迅速成为市...

    微信海外服务器助力全球化业务拓展与用户体验优化

    微信海外服务器是微信在全球范围内部署的技术基础设施,旨在支持其海外业务的发展。这些服务器不仅是数据存储的中心,还承担着用户信息处理和互动的各种功能。随着技术的不断进步,微信的使用需求也在全球范围内快速增长,这种现象驱动着微信不断扩展其海外服务器的网络。 我们时常看到,微信与WeChat的分拆让用户数...

    CN2中转:提高数据传输效率的最佳选择

    CN2中转概述 当我第一次接触CN2中转时,我就被它的高效和可靠性所吸引。CN2中转是一种通过中国电信的CN2线路进行数据传输的方式。这条线路不仅仅是简单的网络连接,它被誉为“二类全业务”数据专线,能够提供高速、低时延、低抖动和低丢包率的优质网络服务。帮助用户更好地访问境外数据,这一点让我感到它的重...

    选择香港主机的最佳指南:提升您的网站性能与用户体验

    香港主机指的是那些在香港地区部署的服务器,主要用于提供网站托管、应用托管或数据库管理等服务。得益于香港卓越的网络基础设施,越来越多的企业和个人选择将他们的运营托付给香港主机。这不仅提升了业务的可达性,也提供了更优质的用户体验。 如果我回想起我最初接触香港主机时,感到非常惊讶于它的潜力。香港地理位置独...

    Virmach虚拟主机评测:高性价比VPS服务推荐

    大家好,今天我想和你聊一聊Virmach,这是一家我非常推荐的虚拟主机提供商。Virmach专注于提供VPS(虚拟专用服务器)服务,近年来逐渐在行业中赢得了一席之地。它的价格相对亲民,而服务质量与稳定性也让人感到满意。很多人选择它,主要是因为它不仅适合个人用户,也非常受中小企业欢迎。 Virmach...

    VPS商家全攻略:选择适合你的虚拟专用服务器

    VPS商家概述 在数字化时代,VPS(虚拟专用服务器)服务逐渐成为企业和个人用户的重要选择。VPS不仅为用户提供了灵活性,而且在性能、控制权和安全性上都优于传统的共享主机。这使它成为许多需要独立环境来运行网站或应用程序的用户的理想解决方案。 选择VPS的用户通常追求更高的稳定性和可靠性。相比于共享主...