![如何在不使用“sudo”的情况下更改系统范围的默认 Java 运行时?](https://linux22.com/image/962845/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E4%BD%BF%E7%94%A8%E2%80%9Csudo%E2%80%9D%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E6%9B%B4%E6%94%B9%E7%B3%BB%E7%BB%9F%E8%8C%83%E5%9B%B4%E7%9A%84%E9%BB%98%E8%AE%A4%20Java%20%E8%BF%90%E8%A1%8C%E6%97%B6%EF%BC%9F.png)
抱歉我的英语不好,但我真的在努力变得更好。好的。我在 Ubuntu 12.04 上创建了一个新的命令/别名(changejava),只有当我输入“$changejava”时,我才需要跳过“sudo password”。如果我使用终端输入“$changejava”,Ubuntu 会向我展示我可以做什么。我只需要按 0、1 或 2。但是如果我按任何东西,终端都会显示:
"update-alternatives: to use /usr/lib/jvm/java-6-sun/jre/bin/java to provide /usr/bin/java (java). update-alternatives: error: Could not create file '/var/lib/dpkg/alternatives/java.dpkg-tmp': Denied. "
如果我尝试“$sudo changejava”,我会得到:“输入 jessegaspar 密码”,然后奇迹就会发生。如果没有“sudo”,就不会发生。我尝试使用以下命令编辑 /etc/sudoers:
%sudo ALL=NOPASSWD: ALL
...但是所有用户都拥有“sudo”的总权限。:/ :/
谢谢。
答案1
首先我想重申您不需要更改系统范围的默认 Java 运行时以便使用非默认 Java 运行时运行程序。
例如,Eclipse 和 NetBeans 有配置文件,您可以在其中指定应该使用哪个 Java 运行时。
Java 应用程序的另一个典型特征是遵守$JAVA_HOME
环境变量。因此,在 shell 中,只需运行JAVA_HOME=/usr/lib/jvm/java-6-sun/ foo
并JAVA_HOME=/usr/lib/jvm/java-7-oracle/ bar
执行应用程序富和酒吧。您甚至可以将其放入脚本中,这样就不必每次都输入它。
由于您专注于更改系统范围的默认 Java 运行时,因此可以阅读有关 sudo 的 Ubuntu 社区文档:https://help.ubuntu.com/community/Sudoers
手册页(即man sudoers
)是另一个:http://www.sudo.ws/sudo/sudoers.man.html
%sudo ALL=NOPASSWD: ALL
你说得对,你不想sudoers文件。请尝试以下方法:
jessegaspar caelum-sala1-9 = (root) NOPASSWD:/usr/local/bin/changejava
这可能比您真正想要的限制更多,但这只是一个例子。列出命令的完整路径可能是一种很好的做法,但这可能不是您系统上脚本的路径。
答案2
打开终端窗口并输入:
sudo visudo
在文件底部(“ #includedir /etc/sudoers.d
”之后)输入以下内容:
username ALL=(ALL) NOPASSWD: ALL
希望有帮助!这仅适用于终端命令,正常操作不会受到影响。