还有哪些其他面向“命名空间”的 Linux 命令?

还有哪些其他面向“命名空间”的 Linux 命令?

经过其他我的意思是说我遇到了这个命令:nsenter并且一直在想可能还有其他工具/命令适合使用和调试命名空间。在那儿?请记住,我并不是在问它们如何工作,只是想获得更广泛的工具集来使用 docker/k8s 等。

namespace还有哪些其他面向Linux的命令?

答案1

[是否有]其他适合使用和调试命名空间的工具/命令?

恩斯特尔是最重要的一个。还有一些,但不是很多。我想我可以尝试将它们全部列出来。

  1. /proc/[pid]/ns/*- 你已经知道了这一点,因为你看过nsenter。还有更多细节命名空间(7):
    • 上述文件显示为符号链接。运行readlink/ls -l将显示名称空间类型和唯一标识符。
    • 您可以通过绑定安装上述文件来保留对命名空间的永久引用。如果您认为这听起来有点奇怪,我同意您的观点,但在某些情况下它可能很有用:-)。
  2. LSNS- 它会/proc为您爬网,并列出正在使用的所有不同名称空间。
  3. /proc/[pid]/mountinfo描述挂载命名空间。它记录在过程(5)

    第一次看的时候要小心,因为有很多列。例如,有两个不同的“选项”列,其rw/ 的值可能不同ro。不同之处在于,“挂载选项”列在同一文件系统的绑定挂载之间可能有所不同。

    findmnt是列出已安装文件系统的标准命令。它有一个选项--task TID- 所以你可以用它来解析mountinfo任何进程的文件。 (PID 值也是有效的 TID)。

  4. /proc/[pid]/uid_map/proc/[pid]/gid_map,对于用户命名空间

  5. ip用于控制网络接口的命令 :
    • ip网络专门提供了一些针对网络命名空间的命令。即它只是使用如上所述的net文件。/proc/[pid]/ns/
    • ip link可以显示有关veth同行的信息,包括当地的对等方所在网络名称空间的标识符。 ip netns list-idlsns -t net将列出包含此本地标识符的网络命名空间。我不太清楚你如何使用这些本地标识符,它看起来有点晦涩。但我认为这个 QA 提到了你可以用它们做的一切:如何查找 veth 对等节点 ifindex 的网络命名空间?
    • ip还可以让您将接口从一个网络移动到另一个网络。尽管这与调试无关。

“我正在看着你,单个二进制go容器”

改编自如何从单独的容器调试正在运行的 Docker 容器:

使用有问题nsenter。如果您输入挂载命名空间容器中的命令,您只能运行容器中包含的命令。但 Docker 容器的要点是它们只需要包含应用程序本身!

诀窍是您可以使用/proc/[pid]/root/. (记录于proc(5))。

如果您已输入,这将非常方便PID命名空间容器的,因为您可以使用/proc/1/root/.那时,您不必搜索正确的 PID :-)。

进入 PID 命名空间后,如果您知道要附加调试器的进程将是容器内的 PID 1(或者可能是 PID 2),这也可能会非常方便:-)。或者,如果您的应用程序/容器是多进程的,您可以使用您最喜欢的ps命令来查看不同的进程。

相关内容