在Java中,File.canExecute()方法具体是做什么的?

4
我创建了一个没有执行权限的普通文件,但是当我使用该文件的路径/名称创建Java File对象,然后调用File.canExecute()方法时,结果为true,而我期望此方法调用返回false。有人能解释一下我错过了什么吗?
太阳能操作系统:
$ touch /tmp/nonexecutable
$ ls -l /tmp/nonexecutable
-rw-r--r--   1 root     root           0 May 21 07:48 /tmp/nonexecutable

Java:

String pathName = "/tmp/nonexecutable";
File myFile = new File(pathName);
if (!myFile.canExecute())
{
    String errorMessage = "The file is not executable.";
    log.error(errorMessage);
    throw new RuntimeException(errorMessage);
}

感谢您提前的帮助。
--James
3个回答

5

与Java无关 - 您正在以root身份运行,而root被允许执行所有操作,不管权限如何。


他发布的帖子中没有表明他是否以root身份运行。 - JesperE
3
该文件的所有者是root.root,并且它刚刚被创建,说明操作者正在以root权限运行。 - tddmonkey
我刚写了一些代码,创建了一个新文件,断言canExecute为false,然后进行了chmod exec调用,打开了执行位,现在canExecute返回true。这是因为我是作为自己而不是root来执行这些操作吗? - gregturn

3

虽然我不是专家,也无法完全回答你的问题,但我想补充一点,这种行为并不特定于Java。在我的Ubuntu 8.10安装中,从find(GNU findutils)4.4.0 manpage中,关于-executable标志:

匹配可执行文件和可搜索的目录(在文件名解析方面)。这将考虑访问控制列表和其他权限工件,而-perm测试会忽略它们。此测试利用access(2)系统调用,并因此可以被NFS服务器欺骗,因为许多系统在客户端内核中实现access(2),因此无法利用服务器上保存的UID映射信息。因为这个测试仅基于access(2)系统调用的结果,所以不能保证该测试成功的文件实际上可以被执行

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接