【问题标题】:adb shell commands with su -c gives Permission denied (phone is rooted)带有 su -c 的 adb shell 命令给出权限被拒绝(手机已植根)
【发布时间】:2020-09-07 10:24:41
【问题描述】:

我有以下问题。

我有一部已root的手机,我想更新一个应用程序的文件。当我通过 adb push 手动将文件 FILENAME 复制到手机,并获得 adb shell 和 root 凭据时,我可以毫无问题地将 $FILENAME 复制到 APP_DIR/$FILENAME。

但是,在adb push 之后,我尝试通过adb shell su -c 登录到shell,我给出了一条权限被拒绝的消息:S

我的工作示例:

adb push myfile /data/local/tmp/
adb shell
> su
> # cp /data/local/tmp/myfile /data/data/MYAPP/files/myfile

我的不工作示例:

adb push myfile /data/local/tmp/
adb shell su -c "cp /data/local/tmp/myfile /data/data/MYAPP/files/myfile"
/system/bin/sh: can't create /data/data/MYAPP/files/myfile: Permission denied

作为一个天真的其他解决方案,我尝试不使用复制命令并使用cat myfile > /data/data/MYAPP/files/myfile,但仍然有相同的消息:S

感谢您考虑我的要求

【问题讨论】:

  • adb shell su -c "id" 提供了什么?老实说,这看起来不像是一个编程问题,而是su -c 在您用于根设备的任何方法下如何工作的问题。您可能会从 Android 论坛获得更好的帮助。
  • 嗨,它给了我这个:uid=0 gid=0 我也得到这个当做adb shell 然后suid

标签: android shell adb root


【解决方案1】:

我根据 cmets 想出了一点解决方案。 因此,即使我是 root 并且我拥有该文件(或其他一些进程,但我可以删除文件 touch 一个新文件),这也是一个典型的权限问题。 所以发出ls -l时文件是这样的

-rw-r--r--    1  0    0         8901 Sep  6 22:09 myfile

所以,只需使用

adb shell su -c "chmod 755 /data/data/MYAPP/files/myfile"

授予正确的权限并使用cat 而不是cp 效果很好。 (cp 也没有报错,但由于某种原因,文件没有更新)

【讨论】:

  • 这实际上取决于设备/安卓版本!在装有 Android 9 的 Redmi 8A 上,它可以工作,但在装有 Android 7 的 Redmi Note 4 上,它不能:|
最近更新 更多