linux unshare 命令,Linux ip netns 命令

3f9f54db7fd51a517b7ab4877997bc19.png

/var/run/netns/ 目录下的一个对象。比如有一个名称为 net1 的 network namespace 对象,则可以由打开 /var/run/netns/net1 对象产生的文件描述符引用 network namespace net1。通过引用该文件描述符,可以修改进程的 network namespace。

显示所有命名的 network namespace

ip netns list 命令显示所有命名的 network namesapce,其实就是显示 /var/run/netns 目录下的所有 network namespace 对象:

aa337cdd9f017a5049721f1a840756ed.png

ip netns add NAME 命令创建一个命名的 network namespace:

4a7030d5e007c51e6187777b4e6b2a0b.png

删除命名的 network namespace

ip [-all] netns del [ NAME ] 命令删除指定名称的 network namespace。如果指定了 -all 选项,则尝试删除所有的 network namespace。

$ ip netns exec net0 bash

删除 network namespace net0:

$ ip netns del net0

删除 netowrk namespace,但是在进程退出之前,网卡一直会保持在你已经删除了的那个 network namespace 中。

ip netns identify [PID] 命令用来查看进程的 network namespace。如果不指定 PID 就显示当前进程的 network namespace:

7570630771bd0fb5b6b4ebd3aaa694eb.png

4d7e722a14fa0a62a91b43a309970488.png

ip netns pids NAME 命令用来查看指定的 network namespace 中的进程的 PID。这个命令其实就是去检查 /proc 下的所有进程,看进程的 network namespace 是不是指定的 network namespace:

5cf67ff44e79d44009f7afce3518adac.png

ip [-all] netns exec [ NAME ] cmd 命令用来在指定的 network namespace 中执行命令。比如我们要看一下某个 network namespace 中有哪些网卡:

b0c43319cbb6932ac0562ec80fcf460f.png

4d9478a026ced210e291c5636130d2db.png

a3afd187118c75cf8ee44ebb33350acc.png

输出中的 netns: 指示在某个 network namespace 中执行的结果。

ip netns monitor 命令用来监控对 network namespace 的操作。比如我们删除一个 network namespace 时就会收到相应的通知:

0138611337b6353ff626ee8d05a619d5.png

$ /proc/$$/ns/net

文件,名为 mynet:

$ -p /var/run//var/run/netns/mynet

a9fe3e5d5f425c008c74174f9a40d0dd.png

$ unshare --net bash

# /proc/$$/ns/net

1b124f17eb7555ef6ec8926abcf84fa5.png

文件挂载到前面创建的 mynet 文件上:

# --bind /proc/$$/ns/net /var/run/netns/-I /var/run/netns/mynet

文件 mynet 的 inode 号和 network namespace 的 ID 相同,说明绑定成功:

d8b62f8cff6d13ebe7ad908260a38178.png

退出新创建的 bash,再检查一次 mynet 文件的 inode:

-I /var/run/netns/mynet

fb80f4fec7a4a93c225c36df5b387028.png

文件的 inode 没有发生变化,说明我们使用了绑定挂载后,虽然新的 network namespace 中已经没有进程了,但这个新的 network namespace 还继续存在。

sudo ip netns add mynetsudo ip netns exec mynet bash

$ nsenter --net=/var/run/netns//proc/$$/ns/net

54a0b027ccff2663ecd6ba4c2d285d0a.png

文件,然后通过绑定挂载的方式将新创建的 network namespace 文件(/proc/$$/ns/net)和该文件绑定,就算该 network namespace 里的所有进程都退出了,内核还是会保留该 network namespace,以后我们还可以通过这个绑定的文件来加入该 network namespace。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值