我在ubuntu里更新Android SDK时,提示“sudo: java: command not found”,根据错误信息我在网上搜索,得到了如下的信息,虽然对我没有帮助。
Ubuntu下用sudo运行java程序时,要注意此时用户目录为/root,而不是/home/yourname之类的。如果没注意到这一点,就可能会遇到这样一种情况:某个java相关的 把某些配置默认放在/home/yourname,而你用sudo启动的java程序却又去/root下找这个文件,结果没找到; 而如果相关的模块又不报错或者不够高调的报错,你就很难发现错在哪里。
这种情况一般是因为你的root用户下没有配置java的路径,sudo的环境变量和普通用户的环境变量不一样。sudo的环境变量时集成的root用户的,sudo对应的PATH变量一般是:/sbin:/usr/sbin:/bin:/usr/bin。
可以使用sudowhich java
-jar XX.jar试试。
另外,换一种jdk的配置方法也是可以解决这个问题的。 之前修改的/etc/profile的配置,后来改的是/etc/environment(注意在/etc/environment中不要export PATH=...,不然会出现卡在登陆界面的情况)。配置完/etc/environment后source /etc/environment,sudo java就可以执行了。
ubuntu终端sudo java提示“command not found”解决办法
里面有一个方法sudo
which java-jar XX.jar
可以代替sudo java
,其他的修改/etc/environment和/etc/environment通都没有用。
最后我在/etc目录下发现/etc/sudoers
这个文件,sudo vim /etc/sudoers
发现内容如下
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/usr/java/jdk1.8.0_131/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
然后我在Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/usr/java/jdk1.8.0_131/bin"
添加了/usr/java/jdk1.8.0_131/bin
。
最后再次sudo java
输入如下:
azureuser@govlancode:~$ sudo java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
搞定~~~~~~~~~~~~~~