Namespace隔离实战【Linux】

Namespace隔离实战

  • [1. 基础知识](#1. 基础知识)
    • [1.1 dd命令详解](#1.1 dd命令详解)
    • [1.2 mkfs命令详解](#1.2 mkfs命令详解)
    • [1.3 df命令详解](#1.3 df命令详解)
    • [1.4 mount命令详解](#1.4 mount命令详解)
    • [1.5 unshare命令详解](#1.5 unshare命令详解)
  • [2. 实战操作一(PID隔离)](#2. 实战操作一(PID隔离))
  • [3. 实战操作二(Mount隔离)](#3. 实战操作二(Mount隔离))

1. 基础知识


1.1 dd命令详解


1. 功能

  • 用于读取、转换并输出数据;
  • dd 可以从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

2. 语法

bash 复制代码
dd POTION
  • 参数:
    • if=文件名:输入文件名,默认为标准输入。即指定源文件。
    • of=文件名:输出文件名,默认为标准输出。即指定目的文件。
    • ibs=bytes:一次读入bytes字节,即指定一个快大小为bytes个字节。
    • obs=bytes:一次输出bytes字节,即指定一个快大小为bytes个字节。
    • bs=bytes:同时设置读入/输出的块大小为bytes个字节。
    • cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
    • skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
    • seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
    • count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
    • conv=<关键字>
      • conversion:用指定的参数转换文件。
      • ascii:转换ebcdic为ascii。
      • ebcdic:转换ascii为ebcdic。
      • ibm:转换ascii为alternate ebcdic。
      • block:把每一行转换为长度为cbs,不足部分用空格填充。
      • unblock:使每一行的长度都为cbs,不足部分用空格填充。
      • lcase:把大写字符转换成小写字符。
      • ucase:把小写字符转换成大写字符。
      • swap:交换输入的每对字节。
      • noerror:出错时不停止。
      • notrunc:不截短输出文件。
      • sync:将每个输入块填充到ibs个字节,不足部分用空(NULL)字符补充。

3. 实操:

  • 生成镜像文件test.imgdd if=/dev/zero of=test.img bs=8k count=1024
    • 可以这样理解,创建了一个描述磁盘的结构体文件test.img。之后要想使用该磁盘,还需要对其实例化创建使用入口,就是常说的挂载。

1.2 mkfs命令详解


1. 功能:

  • 用于在设备上创建Linux文件系统,俗称格式化,比如我们使用U盘的时候可以格式化。

2. 语法:

bash 复制代码
mkfs [-v] [-t fstype] [fs-options] filesys [blocks]
  • 参数:
    • -t fstype:指定要建立何种文件系统:如ext3,ext4。
      • filesys:指定要创建的文件系统对应的设备名。
      • blocks:指定文件系统的磁盘块数。
    • -V:显示详细模式。

3. 实操:

  • 为该磁盘指定一个文件系统ext4

1.3 df命令详解


1. 功能

  • 显示已挂载文件系统的总空间、已用空间、可用空间、使用百分比以及挂载点等信息。

2. 语法

bash 复制代码
df [选项]... [文件或目录]...
  • 常用选项:
    • -h:显示易读格式;
    • -i:显示 inode;
    • -T:显示文件系统类型;
    • -a:显示所有文件系统;

3. 实操:


1.4 mount命令详解


1. 功能:

  • 用于加载文件系统到指定的加载点。此命令也常用于挂载光盘,使我们可以访问光盘中的数据,因为你将光盘插入光驱,Linux不会自动挂载,必须使用Linux mount命令来手动挂载。

Linux下,不同目录可以挂载不同分区和磁盘设备,它的目录和磁盘分区是分离的,可以自由组合(通过挂载)。不同的目录数据可以跨越不同的磁盘分区或者不同的磁盘设备。挂载的实质是为磁盘添加入口(挂载点)。

2. 语法:

bash 复制代码
mount [-l]
mount [-t vfstype] [-o options] device dir
  • 常见参数:
    • -l:显示已加载的文件系统列表;
    • -t:加载文件系统类型,支持常见的系统类型 ext3、ext4、iso966、tmpfs、xfs等,大部分情况可以不指定,mount可以自己识别;
    • -o options 主要用来描述设备或档案的挂接方式:
      • loop:用来把一个文件当成磁盘分区挂接上系统;
      • ro:采用只读方式挂接设备;
      • rw:采用读写方式挂接设备。
    • device:要挂接(mount)的设备;
    • dir:挂载点的目录

3. 实操:

  • 将该磁盘挂载到目录/data/testmymount/,之后在这个目录中进行的操作,就是在test.img描述的磁盘中进行操作。

1.5 unshare命令详解


1. 功能:

  • 主要能力是使用与父进程不共享的名称空间来运行程序。

2. 语法:

bash 复制代码
unshare [options] program [arguments]
  • 常用参数:
参数 含义
-i, --ipc 不共享IPC空间
-m, --mount 不共享Mount空间
-n, --net 不共享Net空间
-p, --pid 不共享PID空间
-u, --uts 不共享主机名UTS空间
-U, --user 不共享用户
-V, --version 版本查看
--fork 执行unshare的进程先fork一个新的子进程,然后在子进程里执行unshare传入的参数
--mount-proc 执行子进程前,将proc优先挂载过去

3. 实操hostname隔离

  • unshare -u /bin/bash,启动一个子进程bash,让其和父进程不共享UTS空间,并修改子进程hostname
  • 另起一个终端,查看hostname
    • 可以发现,这个终端中bashhostname没变,说明子进程bashhostname已被隔离。
  • 子进程bash退出,再查看hostname
    • hostname为父进程的hostname,没有改变。

2. 实战操作一(PID隔离)


1. 在主机上执行ps -ef,可以看到进程列表如下,其中启动进程PID 1为init进程

2. 打开另一个shell,创建新的bash进程,并且新建一个PID Namespace

  • 执行命令unshare -p --fork --mount-proc /bin/bash。注意,一共要带三个参数:
    • -p:PID隔离;
    • --fork:先创建子进程;
    • --mount-proc:挂载虚拟文件系统/proc

3. 在新shell中ps -ef查看

  • 只有这些内容,隔离成功。

3. 实战操作二(Mount隔离)


1. 打开第一个shell窗口A,执行命令,df -h,查看主机默认命名空间的磁盘挂载情况

2. 打开一个新的shell窗口B,执行Mount隔离命令

3. 在窗口B中,创建新镜像文件,并格式化:

4. 在窗口B中,创建新目录,并将磁盘挂载到该目录,并df查看:

5. 在窗口A中df查看:

  • 找不到datamount文件夹的挂载信息,被隔离了。就算再向该目录中添加文件,外部也看不到。

当窗口B中的挂载隔离的子进程退出后,在该子进程内进行的挂载操作(如格式化并挂载磁盘)会全部自动卸载,相关的挂载信息会"丢失"。


相关推荐
心灵宝贝3 小时前
申威(sw_64)架构下如何安装java-1.8.0-swjdk的rpm包?
linux·运维·服务器
好记忆不如烂笔头abc3 小时前
linux系统记录登录用户的所有操作
java·linux·服务器
远向光3 小时前
k8s中的控制器
linux·容器·kubernetes
tan180°4 小时前
Linux网络HTTP(中)(8)
linux·网络·http
半梦半醒*4 小时前
搭建Jenkins
linux·运维·centos·tomcat·jenkins·运维开发
OneSea4 小时前
Debian编译Qt5
linux·qt
Wang's Blog4 小时前
Linux小课堂: 系统监控与进程管理之深入解析 w、ps 与 top 命令
linux·运维·服务器
曾凡宇先生5 小时前
openEuler安装jdk,nginx,redis
linux·开发语言·数据库·openeuler
_OP_CHEN5 小时前
Linux系统编程:(三)基础指令详解(2)
linux·man·more·cat·linux指令·cp·whereis