You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当$PATH中无/usr/sbin时,为何/usr/sbin/rfkill仍能被调用?

问题描述

用户当前的$PATH环境变量输出如下:

debian@debian:~$ echo  $PATH
/home/debian/.local/bin:/home/debian/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

可见/usr/sbin并未包含在$PATH中。执行以下命令追踪命令调用过程:

sudo strace bash -c 'sudo rfkill unblock wlan'  2>&1 | grep  rfkill

得到的追踪结果如下:

execve("/usr/bin/bash", ["bash", "-c", "sudo rfkill unblock wlan"], 0x7ffc8af3afd0 /* 17 vars */) = 0
execve("/usr/bin/sudo", ["sudo", "rfkill", "unblock", "wlan"], 0x55ba46abfa50 /* 20 vars */) = 0
stat("/usr/local/sbin/rfkill", 0x55f5cf165f80) = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/rfkill", 0x55f5cf165f80) = -1 ENOENT (No such file or directory)
stat("/usr/sbin/rfkill", {st_mode=S_IFREG|0755, st_size=47184, ...}) = 0

实际调用的是/usr/sbin/rfkill,疑问点:当$PATH中不包含/usr/sbin时,该命令为何仍能被调用?

原因解析

这是因为sudo不会使用当前用户的$PATH来查找命令,它有自己内置的一套安全搜索路径。

默认情况下,sudo的内置路径会涵盖/usr/local/sbin、/usr/local/bin、/usr/sbin、/usr/bin这类存放系统管理工具的目录,所以哪怕你的用户$PATH里没加/usr/sbin,sudo照样能在自己的内置路径里找到rfkill。

你可以通过执行sudo -V命令,或者查看/etc/sudoers配置文件,来查看sudo实际使用的搜索路径和环境变量设置。

内容的提问来源于stack exchange,提问作者showkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 10:18:16