Android ADB Shell权限被拒绝。

6

我在使用 adb.exe 时经历了一些困难。

我想要像 bash 一样使用 adb.exe shell 命令提示符,所以我决定更改默认的 bash 二进制文件(当然,二进制文件是交叉编译的,而且一切都很完美)。

更改 bash 二进制文件的步骤如下:

  1. adb remount
  2. adb push bash /system/bin/

  3. adb shell

  4. cd /system/bin
  5. chmod 777 bash
  6. mv sh sh.bak
  7. ln -s bash sh

第一个更改成功了,但在尝试第二次更改时出现了问题。

我推送了新的 bash 二进制文件,但我忘记了更改 bash 的权限为 777 并断开了 adb shell

之后:

C:\Program Files (x86)\Android\android-sdk\platform-tools>adb.exe shell
- exec '/system/bin/sh' failed: Permission denied (13) -

C:\Program Files (x86)\Android\android-sdk\platform-tools>

有没有什么聪明的想法来解决这个权限问题?请帮个忙...

用另一个shell替换系统默认的shell是非常糟糕的想法。如果你想要另一个shell,安装它并在需要时执行它,而不是替换系统默认的shell。 - Diego Torres Milano
4个回答

1

如果设备没有完全崩溃(/system/bin/sh是许多东西的依赖项 - 重新启动可能不会走得太远!)并且系统分区仍然可写,您可能能够adb push一个新的bash副本,在推送之前在主机系统上设置所需的权限位(您可能需要使用cygwin甚至linux才能在本地拥有权限位)

听起来设备已经root了,因此您可能可以配置或自定义终端模拟器应用程序,以使用备份sh给您提供会话,使用一些升级工具再次以root身份运行备份sh,然后解决问题。

如果您有带有adb的修改过的恢复程序,则可以手动挂载(正常的)系统分区来修复它。

最后的办法是从供应商签名的原始映像中还原。

希望您能够解决困境,但也许您已经从这个经验中学到了一些东西 - 更改默认shell可能不是一个好主意。最好将您的自定义shell加载到不同的名称下并手动运行它。


有没有其他自定义终端不仅限于adb?如果有一个可以运行位于我的手机中的特定二进制文件的终端,问题将很容易解决。但是我找不到这个自定义终端,你能给我一些关键词吗? - Joonsung Kim
我在Linux中设置了权限,并将此二进制文件推送到我的手机上。但是仍然出现权限错误。我认为权限不是文件的属性。谢谢。 - Joonsung Kim
你可能会遇到一些文件权限之外的问题,尝试将原始的Android shell备份。从源代码构建的任何终端应用程序都应该能够在启动时进行自定义设置,可能有些预构建的应用程序甚至提供了菜单选项,但我不记得看到过这样的选项。 - Chris Stratton

1
一个通用的解决方案:卸载系统应用和所有其他应用。
adb shell
mount -o rw,remount -t yaffs2 /dev/block/mtdblk4 /system
cd /system/app/
rm maps.apk
mount -o ro,remount -t yaffs2 /dev/block/mtdblk4 /system
sync
reboot

1
这并不能帮助,因为在我的情况下,我无法使用adb shell执行shell提示符(bash文件的权限不可执行)。我通过格式化整个固件来解决我的问题。谢谢您的回复! - Joonsung Kim

0

0
adb shell su -c "your commands"

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