为什么“sudo java”会将用户主目录更改为/root?

为什么“sudo java”会将用户主目录更改为/root?

我有一个程序需要访问我的主目录中的文件。

由于程序没有 root 权限,Ubuntu 不允许这种情况发生。起初我运行了这个 java 命令(但由于程序没有权限访问文件,因此无法运行):

java -jar this.jar

该程序无法检测到我需要的文件。程序告诉我它使用的路径是/home/myhome/directory。这个路径是正确的。但程序需要 root 权限才能真正访问该文件,所以我尝试了:

sudo java -jar this.jar

然后程序尝试访问的目录/root/directory就是我遇到的问题。

有什么方法可以让我以 root 身份运行程序,并且将该程序视为目录的目录作为home目录/home而不是目录/root

答案1

因为您正在处理 Java 程序,所以您可以通过设置系统属性来指定它应该视为主目录的目录user.home

sudo java -Duser.home=$HOME -jar this.jar

这竟然是必要的,这让人困惑。由于sudo默认情况下保留 的值HOME,因此人们会认为 Java 会将其设置user.home$HOME。然而,Java API 文档java.lang.System user.home设置为用户主目录。它没有说明它将被设置为环境变量的值HOME——实际上它可能是也可能不是用户的主目录。

请注意,正如评论中指出的那样,不建议以 root 身份运行软件。如果这样做,请为其指定一个专用的工作目录,即将其设置user.home为为其保留的某个位置。

相关内容