我有一个程序需要访问我的主目录中的文件。
由于程序没有 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
为为其保留的某个位置。