sudo:java:退出root用户后找不到命令

时间:2012-09-06 22:20:02

标签: java bash unix sudo

我已经安装了jdk,但是当我尝试使用java命令时,它说“找不到命令”。

然后我在.bashrc中为我的帐户设置环境变量,它可以正常工作。

export JAVA_HOME=/usr/java/jdk1.7.0_03
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/l\
ib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

然而,当我尝试使用sudo来执行java时,它又说了一遍。所以我使用sudo -s切换到root,将它们放入/ etc / profile,然后执行source /etc/profile

如果我以root身份登录但是在我返回自己的帐户并使用sudo java之后仍然会说sudo:java:command not found并且那些环境变量变为空白,则此方法有效。

我该怎么做才能解决问题?我想这应该很容易解决。

5 个答案:

答案 0 :(得分:4)

默认情况下,某些发行版会重置您的环境变量,以确保在root下按预期执行的程序。未在白名单中指定的任何环境变量都不会进入根会话。

/etc/sudoers中定义了重置为环境的指令以及允许的变量。 (您需要具有查看/编辑权限的权限。)

例如,在我的Fedora 16盒子上,我有

Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

请注意,XAUTHORITY默认不存在,I had to add it

如果您希望JAVA_HOME envvar继续使用,可以在此处添加。但是,为此您需要执行此操作,您需要将PATH添加到此列表中,这是非常不鼓励的。

因此,此文件中的行如下所示:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

这将是你的sudo会话中的$PATH。只要确保你有一个符号链接到你想在其中一个文件夹中使用的java可执行文件,你就可以了。

(由于您收到“命令未找到消息”,因此您的安全路径上没有java个可执行文件,但如果有,您需要删除它,或者放置新的符号链接“更高的“(早先)在路径中)

备选方案1

java等文件中为alias java='/usr/java/latest/bin/java'添加别名(例如/etc/bashrc

备选方案2

在您的本地个人资料或bashrc文件中为java添加别名,为sudo that will preserve your aliases添加别名。

答案 1 :(得分:1)

男人sudo会给你答案:

  -E   The -E (preserve environment) option indicates to the security policy that the user wishes
       to preserve their existing environment variables.  The security policy may return an error 
       if the -E option is specified and the user does not have permission to preserve the environment.

答案 2 :(得分:0)

您可能希望使用类似update-alternatives的内容(不确定这是否适用于所有发行版)。

它在/ usr / bin中创建和管理符号链接(即可供所有人使用的可执行文件)。

使用示例:sudo update-alternatives --install java java /path/to/java/home/bin/java

我认为java可以根据它的可执行位置提取JAVA_HOME的位置。

答案 3 :(得分:0)

检查jdk文件夹的权限,确保它Using System.Speech; Using System.Speech.Recognition;

答案 4 :(得分:0)

我通过

解决了这个问题
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:$JAVA_HOME/bin"

然后将$ JAVA_HOME / bin放入

run_prettify.js
相关问题