Termux换机后login失败解决记录
原创
羽泪云小栈
羽泪云小栈
羽泪云小栈
2026年10月22日 09:00
陕西
去阅读
deepseek总结记录
手机互传termux,导致接收手机的termux出现:
exec(\"/data/data/com.termux/files/usr/bin/login\"): No such file or directory
回车即退出,于是让deepseek帮忙解决修复问题后,它整理如下:
一、根本原因
跨设备迁移时,Termux 的符号链接(symlink)全部丢失了。
用的传输方式(很可能是 MTP、第三方文件管理器或某些压缩工具)不保留符号链接。
手机互传也属于这种方式,容易导致符号链接丢失。
Termux 的 $PREFIX/lib 和 $PREFIX/bin 里大量程序依赖符号链接,链接一丢,整个环境就\"看起来文件都在,但谁也跑不起来\"。
二、原理:为什么报\"文件不存在\"却文件明明在
Termux 的库文件遵循 Linux 的 soname 机制:
实际文件:libreadline.so.8.2 (真实数据)
符号链接:libreadline.so.8 → libreadline.so.8.2 (程序要找的名字)
bash 的 ELF 头里写死了 NEEDED: libreadline.so.8,动态链接器只认这个精确名字。迁移后链接没了,链接器找不到 libreadline.so.8,就返回 ENOENT——报错说\"No such file or directory\",缺的其实是那个\"名字\",不是文件本身。
login 的报错同理:
exec(\"/data/data/com.termux/files/usr/bin/login\"): No such file or directory
文件明明在(2782 字节,有执行权限),但它依赖的库链接断了,execve 同样返回 ENOENT,报错信息极具误导性。
三、故障链条
| 阶段 | 现象 | 实际原因 |
|---|---|---|
| 正常启动 | login 报文件不存在 |
login 依赖的库链接断了 |
| Fail Safe 能进 | 绕过 login,直接用 /system/bin/sh |
系统 shell 不依赖 Termux 库 |
bash 报缺 libreadline.so.8 |
实际文件是 .8.2,缺 .8 链接 |
符号链接丢失 |
| 补完 readline 又缺 ncursesw | 实际是 .6.5,缺 .6 链接 |
同上,整批丢失 |
apt 报缺 libbz2.so.1.0 |
需要两层链接(.so.1 和 .so.1.0) |
批量脚本只补了一层 |
dpkg 报找不到 sh、rm |
$PREFIX/bin/sh 、$PREFIX/bin/rm 链接也丢了 |
迁移丢失的不只是 lib,bin 里的链接也丢了 |
四、 解决方案(按顺序)
1. 进 Fail Safe 模式:长按图标 → Fail Safe,绕过损坏的 login 和启动配置。
2. 手动设环境变量:
export PREFIX=/data/data/com.termux/files/usr
export PATH=$PREFIX/bin:/system/bin:/system/xbin
export LD_LIBRARY_PATH=$PREFIX/lib
3. 逐个补关键库链接(按报错逐个修):
ln -sf $PREFIX/lib/libreadline.so.8.2 $PREFIX/lib/libreadline.so.8
ln -sf $PREFIX/lib/libncursesw.so.6.5 $PREFIX/lib/libncursesw.so.6
ln -sf $PREFIX/lib/libz.so.1.3.1 $PREFIX/lib/libz.so.1
4. 批量补全所有库的两层链接(关键一步):
bash -c 'cd $PREFIX/lib && for f in *.so.*.*; do prefix=\"${f%%.so.*}\"; verpart=\"${f#*.so.}\"; IFS=\".\" read -ra parts <<< \"$verpart\"; cur=\"\"; for p in \"${parts[@]}\"; do if [ -z \"$cur\" ]; then cur=\"$p\"; else cur=\"$cur.$p\"; fi; link=\"${prefix}.so.${cur}\"; if [ \"$link\" != \"$f\" ] && [ ! -e \"$link\" ]; then ln -s \"$f\" \"$link\"; fi; done; done'
5. 修复 apt 的 HTTPS 模块:
ln -sf http $PREFIX/lib/apt/methods/https
6. 修复 dpkg 需要的 sh 和 rm:
ln -sf $PREFIX/bin/bash $PREFIX/bin/sh
ln -sf /system/bin/rm $PREFIX/bin/rm
7. 用包管理器彻底校准:
apt install --reinstall -y termux-tools apt
8. 测试并重启:
$PREFIX/bin/login -c \"echo login ok\"
输出 login ok 后,完全退出 Termux,正常点图标启动即可。
总结
- • 迁移 Termux 必须用
tar打包(保留符号链接和权限),不能用文件管理器直接复制文件夹,也不能用只传普通文件的 MTP。 - • 正确做法:旧机
tar -zcf backup.tar.gz -C /data/data/com.termux/files home usr,新机解压到同一路径,或用官方termux-backup/termux-restore命令。 - • 遇到
No such file or directory但文件明明在,第一反应应该是查符号链接和依赖库,而不是怀疑文件本身。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论