当前位置: 首页 > 面试题库 >

通过Java代码在Java上运行Shell命令?

宋安晏
2023-03-14
问题内容

我有一个应用程序,该应用程序应该使用一些shell命令将文件从sdcard复制到/ system / media /。它将需要root用户,并且我正在对root用户的设备进行测试。我正在使用运行时来执行Shell命令,但无法正常工作。这是我的运行时所需要的

public void RunAsRoot{String[] commands = {"sysrw", "rm /data/local/bootanimation.zip", "sysro"};{
    Process p = Runtime.getRuntime().exec("su");
    DataOutputStream os = new DataOutputStream(p.getOutputStream());            
    for (String tmpCmd : commands) {
    os.writeBytes(tmpCmd+"\n");
    }           
    os.writeBytes("exit\n");  
    os.flush();
}

但是我的日志只显示其中两个没有被拒绝

07-30 03:14:11.112: WARN/su(3593): request rejected (10047->0 /system/bin/sh)
07-30 03:14:11.132: DEBUG/su(3592): 10047 com.bba.stormdroid executing 0 /system/bin/sh using shell /system/bin/sh : sh
07-30 03:14:11.152: WARN/su(3594): request rejected (0->0 /system/bin/sh)
07-30 03:14:11.182: WARN/su(3595): request rejected (0->0 /system/bin/sh)
07-30 03:14:11.202: WARN/su(3596): request rejected (0->0 /system/bin/sh)
07-30 03:14:11.242: DEBUG/su(3597): 10047 com.bba.stormdroid executing 0 /system/bin/sh using shell /system/bin/sh : sh

这两个看起来是sysrw和sysro命令,但是当我触发此代码时,该应用程序仍会请求root权限。我是接触根目录的新手,但似乎无法弄清楚如何使它起作用。


问题答案:

要运行root命令,你必须使用以下格式

    public void RunAsRoot(String[] cmds){
            Process p = Runtime.getRuntime().exec("su");
            DataOutputStream os = new DataOutputStream(p.getOutputStream());            
            for (String tmpCmd : cmds) {
                    os.writeBytes(tmpCmd+"\n");
            }           
            os.writeBytes("exit\n");  
            os.flush();
}

在其中传递字符串数组,每个字符串都是需要执行的命令。例如:

String[] commands = {"sysrw", "rm /data/local/bootanimation.zip", "sysro"};


 类似资料:
  • 问题内容: 我正在通过Java上的JSch建立ssh连接,在我尝试运行此.sh文件之前,一切似乎都工作正常。外壳程序脚本的名称是 repoUpdate.sh ,它非常简单: 这是我在Linux控制台上直接获得的输出,其中包含命令的正确响应: 现在,这是带有ssh连接的我的方法的Java代码,该代码试图调用同一文件 我得到的答复如下: svn命令(版本9432)没有任何输出或执行的迹象。 我认为这可

  • 我正在通过Java上的JSch建立一个SSH连接,在我尝试运行它之前,一切似乎都很正常。sh文件。shell脚本的名称是

  • 问题内容: 我发现了几个用于通过Java类运行cmd命令的代码段,但我无法理解。 这是打开cmd的代码 我找到了一些其他链接来添加其他命令,例如cd http://www.coderanch.com/t/109753/Linux-UNIX/exec-command-cd-command-java 如何使用Java打开命令提示符并插入命令? 谁能帮助我了解如何CD目录,例如: 然后在该目录上运行其他

  • 我找到了几个通过Java类运行cmd命令的代码片段,但我无法理解。 这是打开命令的代码 我还找到了一些添加其他命令的链接,比如cdhttp://www.coderanch.com/t/109753/Linux-UNIX/exec-command-cd-command-java 如何使用Java打开命令提示符并插入命令? 有人能帮我了解如何cd目录,例如: 然后在该目录上运行其他命令?

  • 问题内容: 我快要解决这个问题了。 下面是代码: 问题答案: 您的代码是正确的,我相信您不会收到异常,如果您使用进行阅读,则不会得到任何东西。 已经说过,现在命令是100%以这种方式执行,这是因为您正在回显某些内容,需要使用来将其读回。 检查以下示例,该示例将成功创建一个名目录并打印您正在回显的内容。为了将其放入日志文件,恐怕您可以使用“>”来完成它,您可能必须使用一些编辑器命令或使用Java创建

  • 问题内容: 我在一个应用程序上工作,但有一个关于从Java应用程序运行shell命令的问题。这是代码: 但是当我尝试执行命令时: myapp读取 为两个单独的参数。但是我只想读取一个参数。 当我直接从终端运行此命令时,它执行成功。 我试过,, 但对我没有工作。我如何才能将此参数作为一个参数读取。 问题答案: 我记得exec方法的重载分别为参数提供了一个参数。你需要用那个 对。就这个 只需将命令行和