深入掌握 nsenter:Linux命名空間操作的利器

#作者:朱雷

文章目錄

  • 1、簡介
  • 2、功能與用途
    • 2.1. 核心功能
      • 2.1.1. 進入命名空間
      • 2.1.2. 支持多種命名空間
      • 2.1.3. 容器調試
  • 3、安裝
    • 3.1. 依賴包
    • 3.2. 權限要求
    • 3.3. 命令用法與示例
      • 3.3.1. 基本語法
      • 3.3.2. 常用選項包括:
      • 3.3.3. 示例
  • 4、 應用場景與優勢
    • 4.1. 容器調試
    • 4.2. 資源管理
    • 4.3. 簡化操作
  • 5. 注意事項
  • 6、總結

1、簡介

nsenter 是 Linux 系統中的一個命令行工具,用于進入指定進程的命名空間(namespace)中執行命令,常用于調試、管理和容器化環境中的資源隔離。nsenter 允許用戶進入指定進程的命名空間(如 PID、網絡、用戶等),在該命名空間內執行命令。

2、功能與用途

2.1. 核心功能

2.1.1. 進入命名空間

通過指定目標進程的 PID 或容器 ID,進入其命名空間,執行命令(如查看網絡信息、調試容器等)。

2.1.2. 支持多種命名空間

支持進入 PID、網絡、用戶、掛載、IPC 等命名空間,適用于容器、網絡調試等場景。

2.1.3. 容器調試

常用于容器網絡調試(如查看容器網絡配置)、容器內命令執行(如執行 ip addr)。

3、安裝

3.1. 依賴包

nsenter 通常位于 util-linux 包中,可通過 apt install util-linux 或源碼安裝。

3.2. 權限要求

通常需要 root 權限,部分場景(如進入容器)可能需要額外權限。

3.3. 命令用法與示例

3.3.1. 基本語法

Usage:nsenter [options] [<program> [<argument>...]]Run a program with namespaces of other processes.Options:-a, --all              enter all namespaces-t, --target <pid>     target process to get namespaces from-m, --mount[=<file>]   enter mount namespace-u, --uts[=<file>]     enter UTS namespace (hostname etc)-i, --ipc[=<file>]     enter System V IPC namespace-n, --net[=<file>]     enter network namespace-p, --pid[=<file>]     enter pid namespace-C, --cgroup[=<file>]  enter cgroup namespace-U, --user[=<file>]    enter user namespace-S, --setuid <uid>     set uid in entered namespace-G, --setgid <gid>     set gid in entered namespace--preserve-credentials do not touch uids or gids-r, --root[=<dir>]     set the root directory-w, --wd[=<dir>]       set the working directory-F, --no-fork          do not fork before exec'ing <program>-Z, --follow-context   set SELinux context according to --target PID-h, --help             display this help-V, --version          display version

3.3.2. 常用選項包括:

-a, --all              進入所有命名空間
-t, --target <pid>     從目標進程獲取命名空間
-m, --mount[=<文件>]   進入掛載命名空間
-n, --net[=<文件>]     進入網絡命名空間
-p, --pid[=<文件>]     進入進程ID命名空間
-C, --cgroup[=<文件>]  進入cgroup命名空間
-e, --env              繼承目標進程的環境變量

3.3.3. 示例

進入進程 62117 的 PID 命名空間并執行uptime命令:

 [root@paas-node-111 ~]# nsenter -t 62117 -n uptime14:46:03 up 75 days, 18:52,  1 user,  load average: 4.49, 4.23, 4.61

進入容器網絡命名空間執行ip 命令:

 [root@paas-node-111 ~]# nsenter -t 2579 -n ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
14: eth0@if15: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:12:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.18.0.4/16 brd 172.18.255.255 scope global eth0valid_lft forever preferred_lft forever

查看docker 容器的pid:

[root@paas-node-111 ~]# docker inspect dcd2220e91b0|grep Pid
"Pid": 2579,
"PidMode": "",
"PidsLimit": null,

[root@paas-node-111 ~]# docker inspect -f {{.State.Pid}} dcd2220e91b0
2579

進入所有命名空間執行命令:

 [root@paas-node-111 ~]# nsenter -t 2579 -a freetotal        used        free      shared  buff/cache   available
Mem:        3963132     1819480      162336        6160     1981316     1835540
Swap:       4194300     1731000     2463300

在 K8s 中在得到容器 pid 之前還需獲取容器的 ID
查看pod容器id:

[root@paas-node-111 ~]# kubectl describe pod redis-7d67bc68ff-pbzms|grep -i "container id"Container ID:   docker://1268be01dbf62a06a50415b4eb7d6cf3bd3be9f2dbf04c9ff765b1a6cad11fd0

[root@paas-node-111 ~]# kubectl get pod redis-7d67bc68ff-pbzms -o template --template='{{range .status.containerStatuses}}{{.containerID}}{{end}}'
docker://1268be01dbf62a06a50415b4eb7d6cf3bd3be9f2dbf04c9ff765b1a6cad11fd0

用pod容器id去獲取容器的pid

docker ps|grep 1268be01
1268be01dbf6        5bb541ae990c                               "docker-entrypoint.s…"   2 weeks ago         Up 2 weeks                              k8s_redis_redis-7d67bc68ff-pbzms_default_f68a2459-26fc-4c5f-bfe5-6b5550c81ccc_1
[root@paas-node-113 ~]# docker inspect 1268be01 |grep -i "pid""Pid": 57968,"PidMode": "","PidsLimit": null,

默認使用docker exec 進入容器,容器并沒有提供ping 命令:

[root@paas-node-113 ~]# docker exec -it 1268be01  bash
root@redis-7d67bc68ff-pbzms:/data# ping 10.148.55.111
bash: ping: command not found

此時,就可以使用 nsenter 命令進入容器的網絡命名空間內,使用ping命令去執行。

[root@paas-node-113 ~]# nsenter -t 57968 -n ping 10.148.55.111
PING 10.148.55.111 (10.148.55.111) 56(84) bytes of data.
64 bytes from 10.148.55.111: icmp_seq=1 ttl=63 time=0.305 ms
64 bytes from 10.148.55.111: icmp_seq=2 ttl=63 time=0.361 ms
64 bytes from 10.148.55.111: icmp_seq=3 ttl=63 time=0.173 ms
^C
--- 10.148.55.111 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.173/0.279/0.361/0.081 ms

看下路由是否是走了容器的網絡:

[root@paas-node-113 ~]# nsenter -t 57968 -n mtr 10.148.55.111

在這里插入圖片描述
[root@paas-node-113 ~]# mtr 10.148.55.111
在這里插入圖片描述
以上可以看到明顯是進入容器網絡命名空間后,路由多了一跳。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
從以上信息可以看到,進入容器網絡空間后,路由先到宿主機再由宿主機將數據包發送到目標地址:10.148.55.111

4、 應用場景與優勢

4.1. 容器調試

在容器網絡故障排查中,nsenter 可直接進入容器的網絡命名空間執行命令(如 ip addrping),無需容器內安裝基礎工具。

4.2. 資源管理

用于調試進程隔離、資源隔離(如 PID、用戶命名空間)。

4.3. 簡化操作

相比 docker exec,nsenter 提供更靈活的命名空間控制,支持直接進入容器內部執行命令。

5. 注意事項

1、權限限制:部分操作(如進入容器)可能需要 root 權限或特定權限設置。
2、兼容性:nsenter 依賴 Linux 命名空間技術,適用于支持命名空間的 Linux 內核版本。

6、總結

nsenter 是 Linux 中用于命名空間管理和調試的工具,廣泛應用于容器、網絡調試和資源隔離場景。其核心功能是通過進入指定命名空間執行命令,支持多種命名空間類型和靈活的命令選項,是 Linux 系統管理和調試的重要工具。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96140.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96140.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96140.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu Qt x64平臺搭建 arm64 編譯套件

環境&#xff1a; 主機平臺&#xff1a;Ubuntu22.04.5 x86_64 目標平臺&#xff1a;IMX8QM Ubuntu22.04.5 arm64 Qt版本&#xff1a;Qt6.5.3 LST GUI實現&#xff1a;QML 一、獲取Ubuntu22.04.5 x86_64 系統鏡像文件 1、鏡像下載與安裝 使用國內鏡像下載對應版本的Ubuntu鏡像…

mysql第五天學習 Mysql全局優化總結

Mysql全局優化總結 從上圖可以看出SQL及索引的優化效果是最好的&#xff0c;而且成本最低&#xff0c;所以工作中我們要在這塊花更多時間。 補充一點配置文件my.ini或my.cnf的全局參數&#xff1a; 假設服務器配置為&#xff1a; CPU&#xff1a;32核內存&#xff1a;64GDISK…

leetcode hot100 二叉搜索樹

二叉搜索樹的第k小的數class Solution:def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:# 二叉搜索樹的中序遍歷是 升序排列的&#xff0c; 求第k小的&#xff0c;即第k個數self.res []def fun(root):if not root:returnfun(root.left)if root:self.res.a…

從Sonnet到Opus:一次解決RAG知識庫流式輸出難題的探索

又到周末&#xff0c;還得消耗消耗 ?? anyrouter 上的Claude資源&#xff0c;萬一哪天都不能用了&#xff0c;也是浪費。 2025/9/5&#xff0c;Claude AI 的母公司 Anthropic 發布了一項新政策&#xff1a;即日起&#xff0c;Anthropic將不再對中國控股公司及其海外子公司開放…

「數據獲取」中國科技統計年鑒(1991-2024)Excel

02、數據詳情數據名稱&#xff1a;《中國科技統計年鑒》&#xff08;1991-2024年&#xff09;數據年份&#xff1a;1991-202403、數據截圖 04、獲取方式&#xff08;獲取方式看綁定的資源&#xff09;

SimLingo:純視覺框架下的自動駕駛視覺 - 語言 - 動作融合模型

摘要 本文深入探討了 SimLingo&#xff0c;一個在自動駕駛領域具有開創性意義的視覺-語言-動作一體化模型。SimLingo 創新性地將自動駕駛、語言理解和指令感知控制整合到一個統一的純攝像頭框架中&#xff0c;顯著提升了自動駕駛系統在復雜環境中的感知、決策與執行能力。該模…

第五十四天(SQL注入數據類型參數格式JSONXML編碼加密符號閉合復盤報告)

#SQL注入產生原理&#xff1a; 代碼中執行的SQL語句存在可控變量導致 #常見SQL注入的利用過程&#xff1a; 1、判斷數據庫類型 2、判斷參數類型及格式 3、判斷數據格式及提交 4、判斷數據回顯及防護 5、獲取數據庫名&#xff0c;表名&#xff0c;列名 5、獲取對應數據及…

VMWare上搭建Hive集群

文章目錄1. MySQL安裝2. 安裝Hive集群3. 使用Hive客戶端4. 實戰總結本實戰在VMware上搭建Hive集群&#xff0c;集成MySQL作為元數據存儲&#xff0c;完成Hive環境配置、元數據初始化及HDFS倉庫目錄創建&#xff0c;實現Hive on Hadoop的SQL查詢能力&#xff0c;為大數據分析提供…

Android網絡之WIFI技術網絡模型概述

文章目錄術語1、WLAN與WIFI2、802.11 WIFI無線網絡標準演進3、WIFI5、WIFI6和WIFI7的最高速率對比4、WIFI網絡中的各個角色&#xff08;元件&#xff09;1&#xff09;網絡拓撲架構圖5、802.11權威指南1&#xff09;OSI與TCP/IP2&#xff09;IEEE 802.11協議簇介紹3&#xff09…

游戲中的設計模式——第三篇 簡單工廠模式

5. 簡單工廠模式 5.1 簡單工廠模式的定義 簡單工廠模式的核心是定義一個創建對象的接口&#xff0c;將對象的創建和本身的業務邏輯分離&#xff0c;降低系統的耦合度&#xff0c;使得兩個修改起來相對容易些&#xff0c;當以后實現改變時&#xff0c;只需要修改工廠類即可。 5.…

基于SVN搭建企業內部知識庫系統實踐

一、準備工作 CentOS 7 服務器&#xff1a;確保你有 root 或 sudo 權限&#xff0c;可以訪問該服務器。Windows 客戶端&#xff1a;你將需要在 Windows 上安裝 TortoiseSVN 客戶端來與 SVN 服務器交互。防火墻&#xff1a;確保你的防火墻已開放 3690 端口&#xff0c;用于 SVN…

SQL注入7----(盲注與回顯)

一.前言 在我們的注入語句被帶入數據庫查詢但卻什么都沒有返回的情況我們該怎么辦&#xff1f;例如應用程序就會返回 一個"通用的"的頁面&#xff0c;或者重定向一個通用頁面&#xff08;可能為網站首頁&#xff09;。這時&#xff0c;我們之前學習的SQL注入辦 法就…

尚硅谷宋紅康JVM全套教程(詳解java虛擬機)

https://www.bilibili.com/opus/1071553679925968898 案例7&#xff1a;日均百萬訂單系統JVM參數設置 https://github.com/wei198621/jvm_by_atguigu https://github.com/xftxyz2001/atguigu-jvm/blob/main/JavaYouthdocsJVM/%E7%AC%AC1%E7%AB%A0-JVM%E4%B8%8EJava%E4%BD%…

鴻蒙NEXT開發實戰:圖片顯示、幾何圖形與自定義繪制詳解

探索HarmonyOS NEXT強大的圖形渲染能力&#xff0c;從圖片展示到自定義繪圖 HarmonyOS NEXT作為華為自主研發的操作系統&#xff0c;為開發者提供了一套豐富而強大的圖形渲染能力。無論是顯示圖片、繪制幾何圖形&#xff0c;還是實現復雜的自定義繪圖&#xff0c;鴻蒙都提供了簡…

python + Flask模塊學習 2 接收用戶請求并返回json數據

用到的模塊還是flask&#xff0c;用到的類有Flask&#xff0c; request&#xff0c; jsonfiy &#x1f642; 目錄 1、GET請求 2、POST請求 1、表單格式 2、json格式 就醬&#xff0c;也比較簡單&#xff0c;下一篇說簡單的授權&#xff0c;簡單來說就是比如用戶付費買了服…

國內外常用的免費BUG管理工具選型

幫助用戶根據自身情況做決定&#xff0c;比如團隊規模、技術能力、是否需要移動端支持等。避免只是羅列工具&#xff0c;而是提供實際選擇的維度。 國內外常用的免費BUG管理工具選擇非常豐富&#xff0c;從輕量級到功能全面型都有覆蓋。我將它們分為幾類&#xff0c;并詳細介紹…

JavaScript的事件循環機制

1.事件循環的理解JavaScript是單線程的&#xff0c;意味著它一次只能執行一個任務。而事件循環就是去協調在JavaScript環境中運行的同步任務、異步任務(微任務、宏任務)的執行順序的一種機制。它是 JavaScript 實現單線程非阻塞異步執行的核心。2.事件循環的執行順序同步任務—…

數據結構——棧(Java)

目錄 一定義. 入棧 出棧 二.棧與線性表的關系 三.棧的實現方式 四.鏈表實現棧 1.結點的API設計 2.棧的API設計 2.1棧的初始化設計 2.2元素入棧 2.3元素出棧 五.括號匹配問題 完整代碼展示 答案 一定義. 棧是一種基于先進后出&#xff08;FILO&#xff09;的數據…

科研筆記:數學建模啟發的課題研究方法

借鑒數學建模的思路解決科學問題或開展課題研究&#xff0c;核心是將實際問題抽象為數學框架&#xff0c;通過定量分析、邏輯推演和驗證優化&#xff0c;實現對問題的精準描述、解釋或預測。其本質是“從現實到數學&#xff0c;再從數學回歸現實”的迭代過程&#xff0c;適用于…

Agent落地到底選擇LangChain 還是 LangGraph

核心概念 LangChain:一個用于構建由大型語言模型驅動的應用程序的框架。它提供了大量的組件和現成的鏈,旨在簡化和標準化應用程序與LLM交互的過程。 LangGraph:一個用于在LangChain之上構建有狀態、多參與者的 工作流 的庫。它特別擅長處理具有循環、分支和復雜協調的代理(…