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 次 |
最近记录: |