java - 在Android上用Java执行挂载命令

标签 java terminal root sudo mount

我正在尝试编写执行某些终端命令的 Java 代码。代码应执行此命令 sudo mount -o loop system.img system。但是有几个问题。首先,要执行此命令,我必须是 root。我知道我可以通过 sudo su,但是当我关闭终端窗口时我如何保持 root 身份?如果我使用命令 sudo mount -o loop system.img system 我如何在 Java 代码中提供密码?

第二个问题是:我可以执行下面的命令吗?

File f2 = new File("/home/user1/Desktop/aDirectory");
String[] commands = new String[]{"sudo mount", "-o", "loop", "/home/user1/Desktop/aDirectory/system.img"};

Runtime.getRuntime().exec(commands, null, f2);  

我觉得我做不到。那我该怎么做呢?有任何想法吗?

注释: system.img 是编译后的 Android 操作系统文件。 system 是一个空目录。我要做的是将 system.img 文件挂载到 system 目录中。

最佳答案

sudo 这样的程序直接从终端设备读取密码,而不是从 stdin 读取密码,所以不幸的是这不是一件小事。我不确定这是否适用于 Android,但在一般的 UNIX 系统上,最简单的解决方案是使用 expect ,这是一个用于模拟终端的库,从而使这些类型的交互自动化。它通常用作嵌入 Tcl 中的独立程序,我将 Java 启动 expect 的系统放在一起,以与 sudo 等工具对话,它工作正常。

expect 包含一种声明性脚本语言,告诉它如何运行另一个程序以及如何对该程序的输出使用react。

你要做的是使用 Runtime.exec() 来执行 expect 程序,提供一个脚本来运行“sudo mount ",注意密码提示,并提供密码。该脚本可能看起来像(G4rb4geB4rg3 是密码):

spawn sudo mount -o loop /home/user1/Desktop/aDirectory/system.img
expect "password:"
send "G4rb4geB4rg3\r"
expect eof

关于java - 在Android上用Java执行挂载命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9079006/

相关文章:

ruby - 如何在 Ruby 中检查用户的 root 权限?

macos - 为什么 sudo 在 macOS 终端中不起作用?

java - 使用 Java SDK 检查数据流作业(异步)状态

java - 动态引用 bundle ,用于与 Pax Exam 进行集成测试

java - 从对象创建实例的通用方法

javascript - 如何在 NodeJs 终端中使用 await?

linux - 打开终端以发出一个命令

algorithm - 如果你有一个大小为 14 的二项式堆,你怎么知道哪个节点是根节点?

linux - 基于 linux 的嵌入式系统上的根用户

java - 无法调用方法 : java. lang.IllegalArgumentException:参数类型不匹配