2

我已经安装了 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 并且这些环境变量变为空白,则此方法有效。

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

4

5 回答 5

5

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

重置环境的指令以及允许的变量在/etc/sudoers. (您需要权限才能查看/编辑此内容)。

例如,在我的 Fedora 16 机器上,我有

默认值 env_reset
默认值 env_keep = "颜色显示主机名 HISTSIZE INPUTRC KDEDIR LS_COLORS"
默认值 env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
默认值 env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
默认值 env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
默认值 env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

请注意,XAUTHORITY默认情况下不存在,我必须添加它

如果您希望您的JAVA_HOMEenvvar 继续使用,您可以在此处添加它。但是,要让这成为您需要做的全部,您需要添加PATH到此列表中,这确实令人气馁。

所以在这个文件中也有如下一行:

默认值secure_path = /sbin:/bin:/usr/sbin:/usr/bin

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

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

备选方案 1

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

备选方案 2

java在您的本地配置文件或 bashrc 文件中添加一个别名,该别名sudo 将保留您的别名

于 2012-09-07T02:15:07.330 回答
1

man 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.
于 2012-09-06T22:25:24.390 回答
0

您可能想要使用类似的东西update-alternatives(不确定这是否适用于所有发行版)。

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

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

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

于 2012-09-06T22:48:20.793 回答
0

检查 jdk 文件夹的权限,确保它是rwx.

于 2016-03-14T00:31:59.167 回答
0

我解决了这个问题

vi /etc/sudoers

然后将 $JAVA_HOME/bin 放入

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:$JAVA_HOME/bin"
于 2018-03-20T10:50:14.063 回答