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
目录?
因为您正在处理 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.home
HOME
请注意,正如评论中指出的那样,不建议以 root 身份运行软件。如果你这样做了,那么给它一个专用的工作目录,user.home
即将它设置到为它保留的某个位置。