7

我的程序在 ubuntu 10.04 上运行,代码如下:

Process process=Runtime.getRuntime().exec("ls",null,null);

它抛出一个异常:

Cannot run program "ls": java.io.IOException: error=2, No such file or directory,  

我试图将“ls”更改为“chmod”“pwd”,我发现没有一个shell命令可以工作,都遇到了同样的问题。(我也试过“/bin/sh -c ls”)

然后我将代码更改为:

Process process=Runtime.getRuntime().exec("/bin/ls",null,null);

它抛出一个异常:

Cannot run program "/bin/ls": java.io.IOException: error=13, Permission denied

我已将所有相关文件和目录的权限更改为 777,所以我真的不知道它有什么问题。

谢谢您的回复 。

4

1 回答 1

3
Process process=Runtime.getRuntime().exec("ls",null,null);

这是预期的No such file or directory例外,因为ls很可能不在程序的当前工作目录中。当您ls从 Linux shell 提示符键入时,它会使用PATH环境变量转换ls/bin/ls. Runtime不会为您执行此操作。

您需要指定完整路径"/bin/ls"。您应该使用该Runtime.exec("/bin/ls")方法而不是传入空参数。

Process process=Runtime.getRuntime().exec("/bin/ls");

您的评论似乎表明,即使您使用此调用,您也会遇到Permission denied异常。这适用于标准 Java 可执行文件。我假设您可以/bin/ls成功地从 Linux 命令行执行操作? /bin/ls(以及相关的目录)应该是 755 而不是777,这将是一场安全噩梦。但是777应该可以。

也许您正在运行某种受保护的 JDK?例如,出于安全原因,Applet 没有执行 Unix 命令的权限。也许您有一个限制性的Java 策略文件并且您需要添加execute权限?

于 2012-06-14T12:59:40.500 回答