NSF*_*NSF 2 java unix bash 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
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用 sudo 执行 java 时,它又说了一遍。所以我曾经sudo -s切换到root,将它们放入/etc/profile,然后执行source /etc/profile
如果我继续以 root 身份登录,但在我返回到我自己的帐户并使用sudo java它之后,这仍然有效,它仍然显示 sudo: java: command not found 并且这些环境变量变为空白。
我应该怎么做才能解决问题?我想应该很容易解决。
默认情况下,某些发行版会重置您的环境变量以确保在 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 文件中添加一个别名 to以及一个sudo 将保留您的别名的别名。