Android Shell上执行可执行文件报错:Permission denied

原因分析

  1. 文件系统挂载为noexec

    • Android的某些分区(如/sdcard/storage)默认挂载为noexec,禁止直接执行其中的文件。
    • 使用mount命令可查看挂载选项,若包含noexec,则该分区下的文件无法执行。
  2. 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拒绝日志:
    adb shell dmesg | grep avc
    
    若有相关拒绝记录,需调整SELinux规则或移动文件到合法路径。

完整操作示例

# 推送文件到可执行目录
adb push zstd /data/local/tmp/zstd

# 赋予执行权限
adb shell chmod +x /data/local/tmp/zstd

# 执行命令
adb shell /data/local/tmp/zstd /sdcard/00.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值