Kam*_*oij 8 ubuntu sudo rubygems
我在 Ubuntu 10.10 上使用 rubygems (1.3.7) 和需要 root 权限的 gem。当我将我的设置与安装了 rubygems 1.3.6 的 ubuntu 9.10 进行比较时,我看到以下差异gem environment:
1.3.7 / 10.10 - EXECUTABLE DIRECTORY: /var/lib/gems/1.8/bin
1.3.6 / 09.10 - EXECUTABLE DIRECTORY: /usr/bin
无论我是否使用,输出都是相同的sudo。为了解决这个问题(我不知道为什么它首先不同),我尝试修改我的路径变量。
我的问题是,在哪里sudo寻找可执行文件?如果我安装 gem(使用sudo),则可执行文件/var显然放在路径中。我将此路径添加到我的~/.profile和/etc/environment文件中,但我无法sudo执行可执行文件。
如果我运行:
$ gemname 它正确运行我的工具。$ sudo gemname它只是告诉我command not found。$ sudo echo $PATH它确实显示了正确的路径。$ sudo -i gemname 它运行正确。$ sudo sudo -V 显示 PATH 被保留。请问sudo荣誉~/.profile和/或/etc/environment?如果是这样,当目录显示在$PATH环境变量中时,他们为什么找不到我的可执行文件?
我已经阅读了 的文档sudo,我还搜索并浏览了大量关于 stackoverflow 和 serverfault 的主题(例如How to override a PATH environment variable in sudo?,但我的示例显示$PATH包含正确的路径),但它们实际上从未展示如何通过sudo.
jus*_*ert 11
请注意,在您的第三个命令中,您的 shell$PATH在 sudo 看到它之前展开,因此输出是您的 shell 的路径,而不是 sudo 看到的 PATH。你想要的是类似sudo echo \$PATH或的东西sudo sh -c 'echo $PATH'。
除此之外,请查看sudo(8)手册页的 SECURITY NOTES 部分。我相信 Ubuntusudo使用 SECURE_PATH 构建选项构建。在sudo sudo -V.
sudo -i模拟初始登录,因此将读取文件.profile(尽管它读取的文件取决于root的shell是什么)。如果没有-i,它会从调用者的环境中继承保留的环境变量,以及我上面提到的 PATH 卫生。
至于最初为什么改变路径,我怀疑这种改变是开发人员故意选择的。请参阅bugs.debian.org上的更多讨论。
| 归档时间: |
|
| 查看次数: |
6480 次 |
| 最近记录: |