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

Soc*_*314 1 permissions command-line sudo java

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

由于程序没有 root 权限,Ubuntu 不会允许这种情况发生。起初我运行了这个 java 命令(它不起作用,因为程序没有访问文件的权限):

java -jar this.jar
Run Code Online (Sandbox Code Playgroud)

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

sudo java -jar this.jar
Run Code Online (Sandbox Code Playgroud)

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

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

zwe*_*ets 5

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

sudo java -Duser.home=$HOME -jar this.jar
Run Code Online (Sandbox Code Playgroud)

令人困惑的是,这应该是必要的。由于sudo默认情况下保留 的值HOME,因此人们希望 Java 设置user.home$HOME。但是,将设置为User's home directory 的状态的Java API 文档java.lang.System 。它没有说明它将被设置为环境变量的值——这确实可能是也可能不是用户的主目录。user.homeHOME

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