如何让 root 用户能够访问脚本?

如何让 root 用户能够访问脚本?

普通用户可以运行该脚本,但 root 无法找到它。

我有一个简单的脚本,保存在 中~/bin。我更新了.profile文件以将此文件夹包含在 PATH 中。我可以进入终端,在任何目录中工作,输入脚本的名称,它就可以正常运行。但如果在该终端中切换到 root,则找不到该脚本。我假设某个地方的某个文件需要新的 $PATH 更新,但我不知道是哪一个。

答案1

如果你正在使用sudo,很可能是这种情况,有一个安全策略会将 $PATH 环境变量修改为安全路径(在文件中定义/etc/sudoers)。 这〜/箱目录不包含在默认目录中安全路径设置在sudoers文件,因此运行sudo script将不起作用,但是sudo ~/bin/script可以。

您可以将脚本放在sudoers配置文件(即在/usr/本地/bin)使其可直接访问。安全路径也可以在配置文件中更改,但不建议这样做。

答案2

为了暂时防止重置单个命令sudo的路径,而不修改任何全局配置,您可以执行以下操作:secure_path

sudo env PATH=$PATH command

command您想要运行的可执行文件的名称在哪里PATH

您可以为此创建一个别名,并添加到您自己的(不是 root 的)~/.bashrc...类似

alias sudo2='sudo env PATH=$PATH'

然后您可以使用自己的 PATHsudo2 command来运行可执行文件。sudo

答案3

为什么以 root 身份运行脚本会失败?

在这种情况下,您必须检查有效用户的路径root...

运行这个:

(前两行是提示符加命令。最后一行是命令的输出。)

$ sudo su -
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

对于将脚本放在何处以供其他人运行的建议:

为您的项目创建一个子目录/opt,并将项目的执行脚本放在那里。这个位置将在同一分区上全新安装操作系统后继续存在(当然,无需格式化)。

脚本的根区域可以位于:

/opt/myprojectname/myscriptfiles/

现在你可以将脚本链接/usr/local/bin/

$ sudo ln -s /opt/myprojectname/myscriptfile/myscript.sh /usr/local/bin/myscript.sh`

您不必更改root$PATH 变量,因为从上面的测试可以看出,它已经存在了。

因此,您无需更改根路径,而是可以更改路径来搜索/opt/myprojectname/myscriptname

或者,您可以将您的 链接~/bin/myscript.sh/usr/local/bin/myscript.sh

答案4

正如其他人所说,特权环境与用户环境不同,这是有充分理由的。主要有两种解决方案:(i) 使用路径调用脚本,或 (ii) 将脚本 chown 为 root 并将它们移动到文件层次结构中的更高位置(例如,/usr/custom/bin,但无论如何都可以),然后更新用户的 PATH,而不是尝试执行相反的操作。

相关内容