
我最近开始使用 VS Code 进行 Java 编程。最近,我购买了一台二手 2019 款 MacBook Touch Bar,我仍然在习惯使用终端来解决问题。
遗憾的是,我使用 SUDO 命令授予清除 Java 缓存 ( java -Xshare:dump
) 的权限,现在我担心我可能犯了一个错误或让我的计算机容易受到攻击。我java -Xshare:dump
现在甚至都不敢使用该命令了。您能否澄清一下我是否授予了过多的权限或做错了什么?
最初,运行 Java 代码时出现错误消息“发生 JNI 错误,请检查您的安装并重试”。这是最近出现的问题,因为我之前能够成功使用 Java。
答案1
使用sudo
不会授予任何权限。它使用已授予的权限 - 通常授予您自己作为管理员的权限。
它之所以“危险”,只是因为它允许您执行通常对缺乏经验的用户锁定的操作。在 Mac 上,如果处理不当,它不会让您损坏系统,只会损坏您的用户区域。
我不知道你想用 Java 做什么,但java -Xshare:dump
它是用于创建 CDS 档案 - 请参阅https://docs.oracle.com/en/java/javase/21/docs/specs/man/java.html
答案2
在我的系统上,当我尝试运行该命令(不带 sudo)时:java -Xshare:dump
它尝试写入该位置:
/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home/lib/server/classes.jsa
因为我没有使用sudo
写入失败并且命令中止。
我怀疑您“让计算机容易受到攻击”,因为您实际上正在创建类文件缓存以快速启动应用程序。但是,根据您为 dump 命令提供的参数,您可能已经创建了一个包含可能过时的类的缓存(因此,在运行 Java 应用程序时,您可能会遇到奇怪的错误)。在最坏的情况下,您可能需要卸载并重新安装 JDK 以确保它是干净的。
sudo
然而这里还有另一个教训 -除非您知道它们要做什么,否则不要运行命令。
答案3
sudo 为您提供单个命令的超级用户权限,需要密码。然后它会记住密码一段时间,这样您就可以更轻松地输入多个 sudo 命令。
有两个风险:第一个风险是你做了一些不该做的事情,如果没有 sudo 的话,这些事情是不允许的,然后弄乱你的电脑。第二个风险是,当你离开电脑时,电脑仍然记得你的密码,而我坐在键盘前弄乱了你的电脑。另一方面,如果我可以访问你的电脑,我就可以删除你用户目录中的所有内容,对于典型的 Mac 用户来说,这和弄乱系统一样糟糕。
好消息:过了一会儿,当你的 Mac 忘记了你的 sudo 密码时,我无法做任何事来造成在你使用 sudo 之前无法造成的损害。