Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
/我的Java程序无法识别usr/本地文件夹和子文件夹_Java_Linux_Permissions_Linux Mint - Fatal编程技术网

/我的Java程序无法识别usr/本地文件夹和子文件夹

/我的Java程序无法识别usr/本地文件夹和子文件夹,java,linux,permissions,linux-mint,Java,Linux,Permissions,Linux Mint,我有一个64位LinuxMint20.1操作系统,我意识到我的任意Java程序不能将“/usr/local”或其中的任何内容识别为现有实体。为了澄清我的意思,我在下面列举了几个例子: System.out.println(new File("/usr").exists()); //prints true System.out.println(new File("/usr/local").exists()); //prints false System.

我有一个64位LinuxMint20.1操作系统,我意识到我的任意Java程序不能将“/usr/local”或其中的任何内容识别为现有实体。为了澄清我的意思,我在下面列举了几个例子:

System.out.println(new File("/usr").exists()); //prints true

System.out.println(new File("/usr/local").exists()); //prints false

System.out.println(new File("/usr/local/bin").exists()); //prints false

System.out.println(new File("/usr/local/random-file-1").exists()); 
//prints false, regardless of whether that file exists
我已经检查了/usr/local的权限,假设那里可能有问题,但奇怪的是,我没有发现任何错误:


你能花两分钱买个梨形的吗?

与java无关,与linux安装有关:

选项1:此目录上没有Unix UGO x权限。 进程无法查看
/usr
目录。最可能的情况是,该进程以用户
X
的身份运行,该用户在组
[Y]
中(可以是多个!)

/usr
目录肯定不属于
X
(在所有相关的unix发行版上,它属于
root
)。
/usr
的组所有者也可能是
[Y]
集合中的任何内容;在大多数linuxen上,它是组
root
,除了
root
本身之外,没有任何用户是该组的一部分

因此,访问权限的最后3个字母适用(用户/组/其他)。因此,运行
ls-lah/
并检查
/usr
的访问权限。我期望:

drwxr-xr--  10 root root 4.0K Jan 1   2021 usr
请注意,
r--
在末尾。没有
x
意味着甚至无权查看它。这可以解释你所看到的

请注意,这与/usr/local的访问权限无关要读取目录,您需要访问整个“堆栈”,一般来说,阻止您的目录本身对您仍然可见-只是您不能删除或移动它,不能运行或打开其中的任何内容,甚至不能
ls
它。因此,您甚至不能“看到”
/usr/local
,这一事实表明,如果它是UGO访问,那么它不是
/usr/local
,而是
/usr
/

选项2:ACL覆盖权限 一些发行版(尤其是mac OS X)在标准的unixy用户/组+UGO权限系统之上添加了一层访问权限。例如,在mac OS中,您需要转到系统首选项窗格并转到“隐私”,然后在此处添加一些磁盘访问权限。我不确定mint是否有类似的系统。可能不会,尤其是对于
/usr
,这是一个相当重要的问题

选项3:奇怪的东西 您使用的是过时的java API,不应该再使用了。这个API的一个缺点是它不能给你关于东西的信息,它只能返回布尔值。因此,尝试使用新的API,如果出现错误,因为如果出现错误,它将帮助更多:它将有大量文本向您解释:

(首先检查/usr/bin/man是否存在;它应该存在。如果不存在,请选择您在那里找到的任何其他现有对象)

这将抛出一些东西(或者如果没有抛出,嘿,其他一些东西出了问题,因为这个测试应用程序没有问题!)-该异常的文本将告诉您一些有用的信息

选项4:哦 您的磁盘已损坏。希望不是这样吧:P

import java.nio.file.*;

class Test {
    public static void main(String[] args) throws Exception {
        Path p = Paths.get("/usr/bin/man"); // I assume this exists.
        byte[] b = Files.readAllBytes(p);
        System.out.println("size of man exe: " + b.length);
    }
}