Android Shell上执行可执行文件报错:Permission denied
原因分析
-
文件系统挂载为
noexec
- Android的某些分区(如
/sdcard
、/storage
)默认挂载为noexec
,禁止直接执行其中的文件。 - 使用
mount
命令可查看挂载选项,若包含noexec
,则该分区下的文件无法执行。
- Android的某些分区(如
-
SELinux安全策略限制
- SELinux可能阻止非系统目录下的可执行文件运行,尤其是在非标准路径(如用户自定义目录)。
解决方案
1. 将文件移动到可执行目录
Android中以下目录通常允许执行文件:
# 将zstd复制到临时可执行目录
adb push zstd /data/local/tmp/zstd
adb shell chmod 755 /data/local/tmp/zstd
adb shell "cd /data/local/tmp && ./zstd 00.zip"
2. 检查文件系统挂载选项
adb shell mount | grep -E '/data|/sdcard|/system'
- 如果目标目录挂载为
noexec
,需移动文件到其他目录(如/data/local/tmp
)。
3. 检查SELinux策略
- 临时禁用SELinux(需root):
adb shell su -c setenforce 0
- 查看SELinux拒绝日志:
若有相关拒绝记录,需调整SELinux规则或移动文件到合法路径。adb shell dmesg | grep avc
完整操作示例
# 推送文件到可执行目录
adb push zstd /data/local/tmp/zstd
# 赋予执行权限
adb shell chmod +x /data/local/tmp/zstd
# 执行命令
adb shell /data/local/tmp/zstd /sdcard/00.zip