资讯动态

nvidia-smi command not found?Linux NVIDIA驱动排查与安装指南

发布时间:2026/10/16 7:59:10 来源:尧图企业网站定制
很多刚接触Linux服务器的同学第一次和NVIDIA驱动打交道时都会撞到同一堵墙终端敲下nvidia-smi回车后shell毫不留情地回一句 bash: nvidia-smi: command not found。接下来往往是无休止的sudo apt install、重启、再敲一次还是同样报错。这个报错本身并不难但它的产生原因跨度很大——从驱动压根没装到装了没加载再到被安全启动拦在门槛外全都会表现为同一个not found。这篇的内容就是一次性把“nvidia-smi失踪案”讲透先从工具来源说起再给一套完整的排查顺序最后给出两种安装路线以及装完后的验证方法。无论你是刚踩坑的新手还是给同事救火的运维照这个流程走基本能在半小时内解决。1. 这个命令从哪来为什么会突然不存在1.1 nvidia-smi的身世nvidia-smi 全称 NVIDIA System Management Interface本质是NVIDIA显卡驱动自带的一个命令行监控工具。它负责展示GPU型号、驱动版本、显存占用、风扇转速、功耗等一大堆信息。重点在于它不是Linux系统自带的也不是用apt装个“通用显卡工具”就会出现的。它只可能在你安装NVIDIA官方闭源驱动、或者安装包含驱动的CUDA工具包时被一并放到系统里。在Debian/Ubuntu这一类发行版上如果你的驱动是通过官方源安装的nvidia-smi通常会被装到 /usr/bin/nvidia-smiPATH里默认就有这个目录所以不存在“文件在但shell找不到”的情况。也就是说在绝大多数标准Linux环境里报了command not found基本等于告诉你这个文件压根不在你的系统上或者你的PATH被人为修改过。还有一点需要提。现在部分云服务器、深度学习镜像会预装CUDA但不装驱动。这种环境里nvidia-smi也经常不在。倒不是说镜像有问题而是有些场景只需要编译运行CUDA代码不需要把GPU算力真正跑起来所以镜像作者把它略掉了。1.2 动手之前先确认机器上到底有没有独显排查不是玄学第一步永远是问这台机器到底有没有NVIDIA的显卡。这是个非常容易被忽略的问题。很多人在云服务器、虚拟机甚至集成显卡的笔记本上折腾一两个钟头最后发现根本没有对应硬件。所以别急着装驱动先看硬件。lspci | grep -i nvidia如果你看到类似 NVIDIA Corporation GA106 [GeForce RTX 3060 Lite Hash Rate] 的输出说明NVIDIA显卡确实存在。如果命令输出为空再换一条lshw -C display 2/dev/null这条能列出所有显示控制器比如还会显示Intel的核显和AMD的显卡能帮你搞清楚机器上到底有哪些显示设备。还有一种容易误解的情况笔记本常见双显卡配置Intel核显加NVIDIA独显。lspci | grep -i nvidia 能看到独显但lspci里可能没有VGA controller字样因为VGA部分走的是核显NVIDIA设备显示为3D controller。只要看到了硬件就没问题。确认硬件存在之后再聊安装问题。2. 定位问题根源的完整排查顺序2.1 查一下驱动安装记录包管理器会告诉你真相从一个报错倒推原因顺序应该由简到繁。先用包管理器确认系统里有没有过NVIDIA驱动的安装记录。Debian/Ubuntu系dpkg -l | grep -i nvidia如果输出一大串比如 nvidia-driver-535、nvidia-kernel-dkms、nvidia-utils-535那说明驱动包至少装过。如果没有输出或者只有几个不相关的包那基本可以判定驱动从未安装或者曾经被彻底清除过。RHEL/CentOS/Fedora系则换成rpm -qa | grep -i nvidia看到 xorg-x11-drv-nvidia、akmod-nvidia 之类的包名说明有过安装记录。这里有个很容易迷惑的细节包管理器里有nvidia-smi包不等于命令一定能用。例如Ubuntu可以把 nvidia-utils-535 单独装上去它只是把用户态工具放进来但内核模块没装的话真正运行还会报其他错。不过对本文这个报错来说包记录为空基本就是没装。把“包记录为空”作为第一级判断。2.2 全盘搜索工具文件守住最后一道证据接着是第二层证据。有些时候驱动确实装了nvidia-smi文件也存在但位置不在PATH里。比如runfile方式老版本会装到 /usr/local/bin这时普通用户登录的PATH里没有这条路径shell就会告诉你not found。定位它which nvidia-smi ls -l /usr/bin/nvidia-smi /usr/local/bin/nvidia-smi 2/dev/null find / -name nvidia-smi -type f 2/dev/null第三条命令虽然慢但整个文件系统都找一遍结果最可信。如果find能搜索到路径但直接执行不行那就不是“驱动缺失”而是“路径问题”或“动态库依赖问题”。手动用绝对路径先试一次/usr/bin/nvidia-smi /usr/local/bin/nvidia-smi如果绝对路径能跑说明不只是文件存在驱动模块也正常。剩下要做的就是改PATH或做一个软链接。但如果绝对路径也报 not found 或者 No such file or directory这里要特别小心bash对每个命令报错会根据可执行文件是否存在来分类如果文件指向的ELF解释器缺失shell会显示 No such file or directory这看起来像文件不存在实际是动态加载器或库缺了。这时用:ldd /usr/bin/nvidia-smi | grep not found如果输出了类似 libcuda.so.xxx not found 的内容就说明工具被装了但依赖库没匹配上这通常是因为驱动版本和运行库不一致。2.3 内核模块和安全启动最容易忽视的“装成功但用不了”路径继续排查。nvidia-smi 之所以能报告GPU信息靠的是用户态工具和内核里nvidia.ko模块之间的通信。驱动包安装完成后工具文件到位但如果内核模块没有加载成功运行nvidia-smi时会报“No devices were found”或“Failed to initialize NVML”和command not found完全不同。所以验证模块加载状态很重要lsmod | grep nvidia如果这里完全没有输出而刚刚dpkg/rpm确认驱动包装了那大概率就是模块没有被加载。接着用dmesg查内核日志sudo dmesg | grep -i nvidia | tail -20最常见的拦截原因有两个。一个是内核头文件缺失DKMS无法编译出与当前内核匹配的模块另一个是Secure Boot开着导致未签名的模块被内核拒绝加载。这两种情况都会让驱动“看起来装过但又好像没装”最终表现成工具文件找不到或者找到了但跑不起来。这里可以总结成一张简单的对照表方便你按“文件”“模块”两个维度定位nvidia-smi文件内核模块典型现象下一步存在已加载正常输出GPU信息直接用存在未加载No devices were found / NVML初始化失败查dmesg、Secure Boot、DKMS不存在已加载少见通常是被手动误删重装nvidia-utils或对应驱动包不存在未加载command not found当前主题的核心区间重新安装驱动3. 首选解法用包管理器把驱动装干净3.1 Ubuntu/Debian系一条命令选版本、装全家桶确认硬件存在、驱动没装或者装得不完整之后我建议优先用系统包管理器解决不是因为省事而是因为卸载干净、和系统更新配合得好不容易留下事故现场。Ubuntu上流程是sudo apt update ubuntu-drivers devices第二条会列出可用的专有驱动版本并给出recommended标记。确定版本后直接sudo ubuntu-drivers install它会帮你装上适合当前GPU的驱动包同时也会把 nvidia-smi、nvidia-settings 这些配套工具一起拉进来。装完后先看文件是否出现ls -l /usr/bin/nvidia-smi如果这条命令有输出说明工具已经就位接下来就是重启加载内核模块sudo reboot重启回来后先敲nvidia-smi验证一次不要一上来就跑深度学习先确认输出里Driver Version和CUDA Version都是正常数值。如果只想要特定版本可以用 sudo apt install nvidia-driver-535 这类写法替代autoinstall。这里要提一个Ubuntu特色的坑Ubuntu默认自带nouveau这个开源驱动它会在内核里占住NVIDIA设备。官方驱动包安装过程中会自动做黑名单处理让nouveau不再加载。如果你之前手动改过 /etc/modprobe.d/ 下的文件安装完成后最好检查一遍避免新旧黑名单配置互相覆盖grep -R nouveau /etc/modprobe.d/ 2/dev/null如果看到残留的blacklist-nouveau.conf确认内容正常即可不用理会。3.2 RHEL/Fedora系模块化驱动和akmodRHEL系没有ubuntu-drivers这种贴心工具得靠启用第三方仓库或官方仓库然后装对应的驱动包。例如Fedora上常见sudo dnf install akmod-nvidia xorg-x11-drv-nvidiaakmod的核心思想是安装后自动编译一个与当前内核匹配的nvidia模块之后每次内核更新它都会自动重建模块。装完同样需要重启验证方式不变。RHEL本身需要先启用EPEL和对应仓库各版本仓库命名不同直接搜nvidia包名即可sudo dnf search nvidia-driver如果搜索结果为空说明仓库还没配好。注意RHEL的驱动包名在不同版本间可能变化不要拿CentOS 7的包名硬套到RHEL 9上。装完包以后也检查一下模块sudo modprobe nvidia这一步能强制加载一次nvidia模块如果报错把错误信息直接喂给搜索引擎往往比瞎猜有效。安全启动这一步在RHEL/Fedora上同样存在。Fedora默认开启Secure Boot而akmod构建出的内核模块通常用的是本地签名有时签名不受信任也会出现模块加载失败。这时用 mokutil --sb-state 看一下状态如果是enabled要么进MOK管理流程导入签名要么关掉Secure Boot二选一。3.3 Secure Boot被打开的机器重启时要做这一步顺着上面说很多用户装好了驱动重启后却还是 command not found或者模块加载失败问题往往不在驱动本身而在Secure Boot。在Ubuntu上先执行mokutil --sb-state如果是 enabled意味着每次内核加载未经签名的模块都会被拒绝。Ubuntu提供的nvidia驱动包一般带有签名机制首次安装后重启时会出现一个蓝紫色的MOK管理界面要求你选择enroll key并输入临时密码。很多人不知道这一步直接重启进系统结果驱动模块就没被接受。给一个稳妥的操作顺序安装完驱动 → reboot → 看到MOK界面时选择Enroll key from disk或类似选项→ 确认导入 → 输入安装过程中设置的一次性密码 → 重启。如果不想折腾签名也可以在BIOS里关闭Secure Boot但这会降低系统启动防护建议只在个人开发机上这么干。这一步我见过很多次基本可以理解为模块编译了但因为系统启动策略不允许连加载的机会都没有表现出来自然就是各种“不存在的错觉”。4. 备选路线runfile安装和CUDA Toolkit的取舍4.1 什么情况必须用.run安装包虽然包管理器是首选但有些场景绕不开runfile。比如内核太新发行版仓库的驱动版本还没有适配或者你需要某个精确的驱动版本号而仓库里只有一个通用版本。这种时候官方驱动.run安装包几乎是唯一解。runfile方式的大致步骤是到官方下载页找到对应型号和系统的驱动文件通常是 NVIDIA-Linux-x86_64-xxx.xx.run。先屏蔽nouveau在 /etc/modprobe.d/blacklist-nouveau.conf 写入 blacklist nouveau、options nouveau modeset0然后 sudo update-initramfs -u。进入纯文本命令行模式sudo init 3 或CtrlAltF2等。执行 sudo sh NVIDIA-Linux-x86_64-xxx.xx.run按提示安装。装完重启。每一步都不复杂但任何一个环节出错都不好排查。特别是第2步如果装了黑名单却没有重新生成initramfs重启后nouveau还是带着nvidia闭源驱动会拒绝加载后果可能就是工具文件存在但GPU完全不可用。4.2 runfile的坑和卸载顺序先看清楚再决定runfile最大的问题不是装不上而是和包管理器“互相不知道对方存在”。你apt里看不到任何nvidia记录卸载也只能靠官方脚本sudo /usr/bin/nvidia-uninstall如果这台机器之前同时混装过apt包和runfile版本冲突会让你陷入“装了删、删了装”的循环。我个人的经验是要么全程包管理器要么全程runfile尽量不要混合。若已经混了先把runfile卸载干净再统一用一种方式重装。另外runfile安装时默认会提供一些交互选项包括是否安装OpenGL库、是否安装DKMS组件。对纯计算服务器建议选择不装OpenGL相关文件用 --no-opengl-files 参数对桌面环境强行去掉OpenGL可能导致窗口跑不起来。这块取决于机器用途不能一概而论。从维护角度看runfile安装还有一个隐性成本内核升级后如果安装时选了DKMS模块会自动重建如果没选内核一升级驱动就废必须重新跑一次安装脚本。所以在安装过程中看到 “Would you like to register the kernel module sources with DKMS?” 时尽量选Yes。4.3 混装装坏了怎么恢复现场如果你已经处于“各种方法都试过nvidia-smi还是找不到”的状态恢复现场比继续乱装更重要。先把残留清一遍Debian/Ubuntu下sudo apt purge nvidia-* 2/dev/null sudo apt autoremove这一段要特别小心别真的把nvidia-*全删光了因为有的CUDA包名也带nvidia比如nvidia-cuda-toolkit这里只处理驱动相关的。稳妥一点先 dpkg -l | grep nvidia 确认清楚再purge。runfile方式清理sudo /usr/bin/nvidia-uninstall如果脚本不存在说明安装记录可能已经被破坏了只能手动移除 /usr/lib/xorg/modules/drivers/nvidia_drv.so、/usr/lib/xorg/modules/extensions/libglxserver_nvidia.so 以及 /usr/bin/nvidia-smi 等文件。手动清理比较危险我建议不到万不得已别走这条路。清干净以后重新开机确认一次没有nvidia相关模块再按第3章的方法从包管理器装一遍。装好、重启、nvidia-smi输出正常才算真正恢复。5. 装完之后如何验证这一次是真的结束5.1 nvidia-smi的“标准答案”长什么样这次我们看到的正常输出大概长这样----------------------------------------------------------------------------- | NVIDIA-SMI 550.54.15 Driver Version: 550.54.15 CUDA Version: 12.4 | |--------------------------------------------------------------------------- | GPU Name Persistence-M | Bus-Id ...上面有Driver Version和CUDA Version下面会有GPU名称、显存、温度、功耗等。出现这个就说明从工具到内核模块、从设备节点到用户态库整体链路已经通了。想要更详细的硬件信息可以用nvidia-smi -L # 列出所有GPU nvidia-smi -q # 查询所有状态 nvidia-smi --query-gpuname,memory.total,memory.used --formatcsv # 脚本友好输出验证通过以后我建议做一个快速计算测试比如跑一个GPU上的矩阵乘法或训练一个小模型。这一步能确定CUDA runtime和驱动之间的衔接没问题而不只是看表面信息。5.2 防止重启后驱动失踪的日常维护多少次“明明装好了下次开机又没了”就发生在内核升级之后。为了不让惊喜变成惊吓养成两个习惯。第一个是升级前检查内核版本和DKMS状态uname -r dkms status正常情况下能看到 nvidia/550.54.15, x.y.z, x86_64: installed 这样的记录。如果显示built但状态不对说明模块没编译成功重启前就得处理。第二个是升级后先别急着重装驱动先确认模块加载sudo modprobe nvidia lsmod | grep nvidia如果modprobe报错第一反应不要重装驱动先查 dmesg | tail 或者 dmesg | grep -i nvidia获取确切错误原因。Secure Boot导致的签名问题在内核更新后特别常见很多用户误以为是驱动坏了重装两遍后才想起来当初的MOK签名已经丢了白折腾一小时。5.3 这类报错常常只是故事的开头解决了command not found只是NVIDIA驱动系列问题的第一步。接下来你大概率会撞上“No devices were found”、看着nvidia-smi有输出但程序报错、双显卡笔记本PRIME切换异常、Docker容器里看不到GPU等等。这些题目我会在这个系列里逐个展开每一篇都可以独立看但连起来读会对NVIDIA驱动生态有个更完整的认识。回到这篇的主题nvidia-smi: command not found听起来很基础但它背后反映的是驱动安装的完整性。排查顺序其实很线性先确认硬件 → 再查驱动记录 → 再查工具文件 → 再查内核模块 → 最后选择安装方式。记住这个顺序下次再遇到这类报错你就不会一上来就sudo apt install然后把系统越弄越乱。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑