我想知道是否有办法
- 查询当前 shell 所在的网络命名空间
- 更改当前 shell 的当前网络命名空间
我知道我可以做这样的事情
sudo ip netns exec <namespace_name> <some command>
在特定的网络命名空间中执行特定的命令,但我当时想的是
:~$ sudo query_current_namespace
some_namespace
:~$ sudo change_current_namespace_to other_namespace
:~$ sudo query_current_namespace
other_namespac
:~$ dothings in newnamespace
就像将根目录更改为某个子目录一样,所以我不必在每个命令前加上这个sudo ip netns exec <namespace>
东西。
在网上搜索后,我似乎必须编写自己的小型 C 程序,就像建议的那样在这篇博文中. 是否已有一个“标准”工具来实现这一点?
编辑:我发现我可以做到
sudo ip netns exec <namespace> bash
这将为我提供一个新命名空间中的 root shell。差不多完成了,但是我该如何查询当前命名空间呢?
答案1
参见手册页:
ip netns identify PID - Report network namespaces names for process
This command walks through /var/run/netns and finds all the network
namespace names for network namespace of the specified process.
因此你可以这样做:
ip netns identify $$