![如何在 Linux 上查询和更改网络命名空间?](https://linux22.com/image/803006/%E5%A6%82%E4%BD%95%E5%9C%A8%20Linux%20%E4%B8%8A%E6%9F%A5%E8%AF%A2%E5%92%8C%E6%9B%B4%E6%94%B9%E7%BD%91%E7%BB%9C%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4%EF%BC%9F.png)
我想知道是否有办法
- 查询当前 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 $$