7

私のプログラムはubuntu10.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」に変更しようとしましたが、シェルコマンドが機能しないことがわかりました。すべて同じ問題が発生しました(「/ 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例外を与えると予想されます。Linuxシェルプロンプトから入力すると、環境変数を使用してlsに変わります。 あなたのためにこれをしません。lsPATHls/bin/lsRuntime

フルパスを指定する必要があります"/bin/ls"。このRuntime.exec("/bin/ls")メソッドを使用し、null引数を渡さないようにする必要があります。

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

あなたのコメントは、この呼び出しを使用してもPermission denied例外が発生していることを示しているようです。これは、標準のJava実行可能ファイルからは機能します。/bin/lsLinuxコマンドラインから正常に 実行できると思いますか?/bin/ls(および関連するディレクトリ)は、セキュリティの悪夢となる777ではなく755である必要があります。しかし、777は機能するはずです。

ある種の保護されたJDKを実行しているのではないでしょうか。たとえば、アプレットには、セキュリティ上の理由からUnixコマンドを実行する権限がありません。制限のあるJavaポリシーファイルexecuteがあり、権限を追加する必要があるかもしれません。

于 2012-06-14T12:59:40.500 に答える