adb shell 每个命令都显示“operation not permitted”

9

最近我重置了我的安卓手机。在重置之前,我能够通过adb install安装应用程序。手机没有被root。

重置后,我几乎无法在adb shell中执行任何命令(包括不存在的命令)都会提示“操作不允许”:

$ install
install: permission denied
$ push
push: permission denied
$ remount
remount: permission denied
$ su
su: permission denied
$ kmmsaldfmaldskfmlasdf
kmmsaldfmaldskfmlasdf: permission denied
$

对我来说,大部分的PATH都无法阅读(除了/system/bin和/system/xbin):

$ echo $PATH
/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
$ ls /sbin
opendir failed, Permission denied
$ ls /vendor/bin
/vendor/bin: No such file or directory
$ ls /system/sbin/
/system/sbin/: No such file or directory

如果我运行adb root
$ adb root
adbd cannot run as root in production builds

根据我的搜索(已经花费了比必要的更多的时间),一些指针是默认.prop文件:

$ cat default.prop
#
# ADDITIONAL_DEFAULT_PROPERTIES
#
ro.secure=1
ro.allow.mock.location=0
ro.debuggable=0
persist.service.adb.enable=1
$

但是我没有对default.prop的写入权限:

$ ls -l default.prop 
-rw-r--r-- root     root          118 1969-12-31 19:00 default.prop
$

我似乎也无法重新装载。我在非root设备上成功使用了adb,为什么现在这么麻烦呢?有人遇到过这个问题吗?我的手机对我来说几乎无法使用,并且当然我也不能进行任何开发。
尝试将其重新挂载为读写模式:
$ mount
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
/dev/stl9 /system rfs ro,relatime,vfat,log_off,check=no,gid/uid/rwx,iocharset=cp437 0 0
/dev/stl10 /cache rfs rw,nosuid,nodev,relatime,vfat,llw,gid/uid/rwx,iocharset=cp437 0 0
/dev/stl6 /mnt/.lfs j4fs rw,relatime 0 0
/dev/stl11 /data rfs rw,nosuid,nodev,relatime,vfat,llw,check=no,gid/uid/rwx,iocharset=cp437 0 0
$ mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /
mount: Operation not permitted

我的手机是三星Galaxy Y,这可能很重要。


你安装了哪个版本的Android? - Ted Hopp
它报告2.3.6为Android版本。我已经尝试更新,但它没有找到可用的更新。 - ealfonso
1
不要像从 shell 中发出 install 命令那样,如果你从 PC 的命令行中发出它们,会发生什么:adb install 等等?首先尝试从 PC 命令行中执行 adb remount。你可能还需要重新安装手机驱动程序(根据 此线程)。 - Ted Hopp
好的。实际上,那个方法可行。我想我从来没有想过它会有所不同。直觉上,它不应该有区别。我甚至没有必要使用 adb remount。问题仍然存在,为什么我无法使用 shell? - ealfonso
adb remount 失败,显示 Operation not permitted - ealfonso
adb kill-server -> sudo adb start-server adb kill-server -> sudo adb start-server - Héctor
8个回答

5

您需要从电脑命令行窗口发出像 install 这样的命令:

C:\> adb install ...

如果无法在adb shell内运行,请尝试从外部运行。如果仍然无法运行,可能需要执行

adb remount

如果遇到权限被拒绝的情况,您可以尝试重新启动手机或者重新安装手机驱动。更多信息请参见此线程

我发现在adb shell会话中路径可能会包含各种不存在的目录。我不知道为什么会这样,但通常不会对任何东西造成影响。


1
我仍然无法使用shell。有趣的是,现在我得到了“install:permission denied”而不是“install:Operation not permitted”。由于我的问题不仅涉及安装,还涉及能够在adb shell中使用命令,因此在接受您的答案之前,我希望找到解决该问题的方法。您的建议对运行“install”命令很有帮助,但我觉得我仍然不能像开发人员应该做的那样使用adb。 - ealfonso
@ealfonso - 我不确定这是否有帮助,但请尝试打开USB调试(我认为在2.3.6版本下,它在设置>应用程序>开发中)。同时打开“未知来源”。 - Ted Hopp
USB调试已开启,这是我确保设置的第一件事。我还将“Android设备管理器”作为设备管理员启用。但我仍然遇到这种令人沮丧的行为。 - ealfonso
@ealfonso - 这很奇怪。我现在想不出什么主意,但我会继续思考。 (哦...你试过杀死并重新启动adb服务器吗?我不希望这会影响到你所描述的行为,但你永远不知道。) - Ted Hopp
1
是的,我经常在每次更改后重新启动adb守护程序,我也重新启动了手机。唯一的变化是现在所有命令(包括不存在的命令)都被“权限被拒绝”所取代,我有一种感觉这是由这款特定手机制造商故意设置的问题。 - ealfonso
显示剩余2条评论

1
假设您没有在手机上安装新版本的Android,我猜测您的手机不再处于开发者模式。
打开设置。向下滚动直到看到系统标题。在它下面,您应该会看到几个选项。如果其中没有开发者选项,请点击“关于手机”,然后向下滚动到“版本号”。点击版本号7次。这样应该可以恢复开发者模式。

好的。我一直在点击“构建号”,但似乎没有任何反应。我已经点击了7次,但仍然遇到了上述的权限问题。 - ealfonso

0

你的用户权限可能在某个地方被剥夺了。查看/proc/<shell process>/status以查看权限掩码。


0

我可能已经为你找到了解决方案

最近,我将我的(已root)LGP500从Froyo(Android 2.2.1)升级到Gingerbeard(Android 2.3.3)。之后,我发现自己陷入了与你相似的情况(说实话是一模一样)。我失去了SU凭据,并拼命寻找解决办法。我非常绝望-我甚至尝试了著名的{{link1:Android 4.2方法}}启用开发人员设置,在相当长的时间内像疯子一样敲打我的设备。 所以...我遇到了完全相同的问题。在浏览网页时,我发现问题实际上出在Gingerbeard版本中,并偶然发现了一些有趣的解决方案。 经过所有的努力-我花了相当长的时间才弄清楚哪种方式是最好的-我(终于)成功地将我的2.3.3设备root。

请注意,我仅出于教育目的分享这些内容。如果您意外砖化了设备,不会有任何冒犯。


在继续之前,请检查是否:

  • 您已正确安装ADB驱动程序(如果没有-将显示以下文本的错误:“找不到在线设备,请启用USB调试!”解决方案-安装或重新安装ADB驱动程序。请注意,您必须在连接设备的情况下安装驱动程序,但“ USB调试”禁用。
  • 您已勾选“ USB调试”和“允许虚拟位置”。

    强烈建议备份以防止数据丢失。(至少将联系人导出为.vcf文件)

如果一切正常:

  1. 安装UnlockRoot(您可以在此处找到Unlock_Root_2.3.0.exe)并执行它。
  2. 运行“root”(实际上您可以忽略除“root”按钮之外的所有内容)。 在弹出菜单中选择您的设备。
  3. 重新启动设备(以完成SU二进制文件的安装-应用程序会提示您是否要重新启动,但您可以通过adb shell自行执行) 然后voila!您的设备已经被root了。

0

你应该从Google Play安装SuperSU应用程序。这是唯一一个在我的设备(Galaxy S4)上正确启用根功能的超级用户应用程序。

之后执行adb shellsu。如果您想从/data目录中拉取文件,则需要更改该文件的权限(使用chmod)。然后它应该可以工作了!


0

尝试在恢复模式下执行这些命令,最近的恢复模式都是debuggable=1的。 除此之外,反编译内核并将ro.debuggable=0更改为1,这将允许您使用adb重新挂载,并允许adb以root身份运行!


我会研究这个问题,但是提供一些详细解释的链接会更好。 - ealfonso

0

我在我的Galaxy S3上一直遇到这个问题,但当我建立我的Android厨房时,我找到了一个解决方法。

  1. 如果需要提升权限,请对设备进行Root
  2. 为您的设备解包并构建内核,在default.prop中将这些值更改为相应的值

ro.secure=0 ro.debuggable=1

  1. 编译/重新打包并刷入
  2. 启用USB调试

-1

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