Termux无法在SD卡运行程序的原因及非Root解决办法咨询
问题分析与解决方法
现象复现
你遇到的执行报错场景如下:
u0_a238@localhost ~/storage/external-1 # cat test.c #include <stdio.h> int main() { printf("Hi!"); return 0; } u0_a238@localhost ~/storage/external-1 # gcc test.c -o test u0_a238@localhost ~/storage/external-1 # ./test zsh: permission denied: ./test ✘ u0_a238@localhost ~/storage/external-1 # bash ./test ./test: ./test: cannot execute binary file ✘ u0_a238@localhost ~/storage/external-1 # sh ./test ./test: 1: Syntax error: word unexpected (expecting ")") u0_a238@localhost ~/storage/external-1 # mv test ~ u0_a238@localhost ~/storage/external-1 # ~/test Hi!%
原因
这确实是Android系统的权限限制导致的:
- Android外部存储(SD卡)默认挂载时不带
exec(执行)权限,系统为了安全,禁止在外部存储上运行二进制程序。 - 同时SELinux安全策略也会限制普通应用(包括Termux)在外部存储上执行可执行文件,即便手动添加
chmod +x权限也无法绕过。
无需Root的解决方法
方法1:绑定挂载(Bind Mount)
利用Termux的命名空间权限,把SD卡目标目录绑定到Termux内部存储的目录,让该目录继承内部存储的执行权限:
- 在Termux内部创建挂载目录:
mkdir -p ~/sd-exec - 绑定SD卡目录到挂载点(替换
/storage/external-1/my-projects为你实际的SD卡程序目录):mount --bind /storage/external-1/my-projects ~/sd-exec - 后续所有编译、运行操作都在
~/sd-exec目录下进行即可,比如:cd ~/sd-exec gcc test.c -o test ./test - 为避免每次重启Termux都重新挂载,可把绑定命令添加到Shell配置文件:
- bash用户:
echo 'mount --bind /storage/external-1/my-projects ~/sd-exec' >> ~/.bashrc - zsh用户:
echo 'mount --bind /storage/external-1/my-projects ~/sd-exec' >> ~/.zshrc
- bash用户:
方法2:使用FUSE OverlayFS挂载
适合需要在SD卡保留文件、同时拥有执行权限的场景,需先安装工具:
- 安装
fuse-overlayfs包:pkg install fuse-overlayfs - 创建必要目录结构:
mkdir -p ~/overlay/upper ~/overlay/work ~/overlay/mount - 挂载SD卡目录到合并挂载点(替换
/storage/external-1/my-projects为你的SD卡目录):fuse-overlayfs -o lowerdir=/storage/external-1/my-projects,upperdir=~/overlay/upper,workdir=~/overlay/work ~/overlay/mount - 之后在
~/overlay/mount目录下编译、运行程序即可,所有修改会保存在~/overlay/upper目录,原SD卡文件也能正常访问。
关于APK安装到SD卡
无需Root的情况下可这样操作:
- 先确保Termux获取存储权限:
termux-setup-storage - 使用
pm命令安装时指定-s参数(表示安装到外部存储):
注意:不是所有APK都支持安装到SD卡,需要APK的AndroidManifest.xml中声明pm install -s /storage/external-1/my-app.apkandroid:installLocation="auto"或android:installLocation="preferExternal"。
内容的提问来源于stack exchange,提问作者ho tian
相关产品推荐
相关产品推荐

