1. 未Root安卓机上跑Termux,先搞清楚它到底动了什么
每次提到在安卓手机上装 Termux,总会有人追问一句:不 Root 能跑吗?能跑,而且绝大多数人根本用不着 Root。这个事的原理其实不复杂,Termux 不是往你的系统里塞了一个虚拟机,也不是什么破解系统权限的黑科技,它就是以一个普通安卓应用的形态,在你手机的用户空间里运行了一套 Linux 环境。简单说,你安装的不是一个模拟器,而是一个精简的 Linux 发行版外壳,里面带着独立的文件系统、包管理器和软件源。
这套东西能跑起来,靠的是安卓系统本身对应用开放的两个能力:一个是应用可以拥有自己的私有数据目录,并且能在这个目录里执行原生程序;另一个是 Termux 自己打包并维护了一套动态链接库和基础工具链。所以你会发现,Termux 的工作目录就在/data/data/com.termux/files下面,它是应用自己的家,不需要系统级权限。你后续安装的所有 Linux 软件,都装在这个目录的usr里,跟系统自带环境完全隔离。
这带来两个实际影响,你必须心里有数。第一,Termux 里的 root 权限是不存在的,su命令基本废掉,涉及系统级修改的操作干不了。但这恰恰是好事,很多病毒和恶意脚本最喜欢偷的就是 root 权限,不用 root 等于天然少了最高风险敞口。第二,因为它是普通应用,所以安卓系统的省电策略、后台清理策略照样会作用在它身上,这就导致了所有人装完之后遇到的最大痛点——Termux 在后台跑着跑着就被系统杀了。后面我会专门说这个怎么治。
写这篇内容之前,我假设你已经把 Termux 装好了,并且至少打开过一次。如果你的 Termux 连安装都还没搞定,先去官方软件源找一个标准安装包装好,再回来看这篇。本文重点讲的是装完之后,怎么把它从"一个能打开的命令行玩具"变成"一台真正能干活、能自动跑任务、能远程管理的随身 Linux 小主机"。
2. 安装完Termux之后,第一件要做的事是配源和初始环境
很多新手打开 Termux 的第一反应是立刻敲命令,结果第一条pkg update就卡死在半路。原因很简单,Termux 默认的软件源在国外,国内网络访问极其不稳定。所以装完以后别急着玩,先把软件源换成国内镜像。
2.1 换源是第一步,别跳过
Termux 换源的方法比早期要简单太多,官方现在内置了termux-change-repo这个工具,直接执行会让你选镜像源。我用得最多的是清华的软件源,也试过中科大,两个都稳。操作流程是:
termux-change-repo执行后会出现图形化选择页面,用键盘上下键选镜像源,空格键勾选,回车确认。这里有个小坑:如果你同时勾选了多个源,它会有优先级顺序,建议只选一个主用源,出了问题也好排查。选完源之后,执行:
pkg update && pkg upgrade -y第一次更新包索引会花上一两分钟,取决于网络。全部更新完之后,基础环境才算立住了。
有个经验值得说下:Termux 的pkg实际上是apt的封装,但它做了很多针对 Termux 环境的定制,比如某些包的依赖处理。所以你用pkg就行,不用也不建议直接硬上apt,白费力气还可能把依赖装乱。
2.2 安装基础工具包,一套组合拳打完再说
换好源之后,我通常会给新机器装这么几个工具,后面所有操作基本都离不开它们:
pkg install -y openssh nano bash-completion cronie termux-services逐个说下作用。
openssh:必须装,后面远程管理全靠它。nano:给那些不习惯vi的人一个相对友好的文本编辑器,我自用还是vi,但你至少得有 nano 兜底。bash-completion:补全提示,敲命令省心很多。cronie:定时任务组件,Termux 里的 cron 服务需要额外启动,跟 Linux 桌面机不完全一样。termux-services:Termux 官方推荐的服务管理工具,用sv命令控制服务死活,后面跑 sshd 需要它。
装完这些后,我建议再补一个tsu,虽然它需要手机已经 root 过才能用,但如果你以后 Root 了或者用别的方案,这个命令就能帮你拿到一个终端内的模拟 root 环境,属于"先备着没坏处"的工具。没 root 的话,装了也不影响什么。
2.3 存储权限和目录规划,提前做了省得后面乱
Termux 不分给你存储权限之前,它只能在自己的私有目录里活动。你要是想访问手机里的照片、下载文件,必须先授权。执行:
termux-setup-storage这条命令会申请存储权限,允许之后,你的手机根目录会被链接到这个路径下:
/storage/emulated/0Termux 同时会在自家目录里建好~/storage一系列快捷方式,里面分别指向下载、文档、图片这些公共目录。大多数情况下你直接操作~/storage/downloads就行,不用绕一大堆路径。
这里必须提醒一句:Termux 跟手机系统是两个世界,你在 Termux 里创建的文件权限是 Linux 专用的,手机自带文件管理器不一定能直接看或者改。反过来也一样,你在手机上下载的普通文件拿到 Termux 里,可能没有可执行权限。跨目录拷贝文件之后,第一件事永远是检查权限,别上来就跑,跑不通先看看是不是权限位不对。
3. 配置SSH远程登录,让电脑接管手机终端
装完 Termux 的人很大概率会有这么个需求:我人坐在电脑前,手机放在桌上充电,想操作 Termux 还得拿起手机戳屏幕,太反人类。配置好 SSH 之后,你就可以直接从电脑连到手机的 Termux,敲起命令来跟操作一台 Linux 小服务器一模一样。
3.1 启动sshd服务并设置登录密码
openssh 装好之后,Termux 里的 sshd 默认端口是 8022,不是常见的 22,原因很简单,安卓系统里 22 端口大概率被占用或者受限。第一步先设置账户密码,因为 Termux 默认没有任何密码,你直接连是连不上的:
passwd输入两遍密码,这个密码是你 Termux 用户名(默认就是你手机当前系统的用户名)的登录密码。设置好之后启动 sshd:
sshd想确认 sshd 是不是跑起来了,用这个命令看端口监听:
ss -tlnp | grep 8022如果能看到0.0.0.0:8022的监听记录,就说明服务已经在线了。
这一步有个极其常见的翻车点:Termux 占的端口是 8022,但很多人的局域网防火墙、路由器端口策略会默认拦掉非标准端口。手机和电脑如果不在同一个 Wi-Fi 下,或者路由器开了 AP 隔离,SSH 就连不上。后面排查网络问题时,我会专门列这个。
3.2 用密钥认证替代密码登录,一劳永逸
输密码虽然能用,但每次都输太痛苦。我给自己的方案是直接上密钥认证,把电脑的公钥塞到 Termux 的~/.ssh/authorized_keys里,以后ssh 用户名@手机IP -p 8022直接进,全程不用输密码。
在电脑上生成密钥对(如果已经有了就跳过这一步):
ssh-keygen -t ed25519 -C "termux-access"然后把公钥传过去。没有现成工具的话,直接复制粘贴也行。在电脑上执行:
cat ~/.ssh/id_ed25519.pub把输出复制下来,到 Termux 里执行:
mkdir -p ~/.ssh && chmod 700 ~/.ssh nano ~/.ssh/authorized_keys粘贴公钥进去保存,再执行:
chmod 600 ~/.ssh/authorized_keys权限这一步不能省,authorized_keys权限如果太松,sshd 会直接拒绝使用这个文件。
从这时开始,电脑连接手机只需要一条命令:
ssh 用户名@192.168.x.x -p 8022其中用户名可以执行whoami查看。手机 IP 可以执行ip addr show wlan0或者更简单的ifconfig看,在数字转字符串的网段里找 192.168 开头的那个就是。
3.3 开机自动启动sshd,避免每次手动拉起
默认情况下,Termux 的 sshd 不会开机自启,手机重启一次,你就得手动打开 Termux 再跑一次sshd。这显然不够优雅。Termux 官方给了一个基于termux-services的方案,平时sv命令管。先设置服务自启动:
sv-enable sshdsv-enable会把 sshd 注册进 Termux 的服务目录里,之后它会随 Termux 应用启动而启动。注意,这里的"自启"还是受限于 Termux 应用本身有没有被系统启动。如果 Termux 没在后台跑,服务也起不来。所以要实现真正的无人值守开机自启,还需要配合后面说的 Termux:Boot。
4. 让Termux在后台稳定活着,先解决被系统杀掉的问题
这是所有未 Root 安卓机用户都要面对的一道坎。安卓的省电机制对后台应用相当严格,尤其国产系统,杀后台叫一个狠。你刚配好 sshd,手机锁屏放那,过半小时再连,发现连接被拒绝——大概率 Termux 进程已经被系统回收了。
4.1 设置电池白名单,这是最重要的一个开关
不同品牌的安卓系统设置路径都不太一样,但一般都集中在"电池"或者"应用管理"里。找到 Termux 应用,把电池优化设为"不限制"。这一步干的是系统级的省电策略排除,如果不做,后面所有防杀后台的手段都等于白搭。我自己实测过,只设白名单不配锁后台,Termux 晚上放一宿基本还能活着;反之,就算加了锁,系统也会在某个时刻把进程回收掉。
4.2 关闭自启管理限制,允许应用自启动
很多国产品牌的系统里,应用默认是不允许自启动的,需要在系统的"自启动管理"里手动把 Termux 打开。这一步的意义在于,当事件触发(比如开机完成广播)时,Termux 才有机会被系统拉起来。你把后台白名单改了但没开自启动,开机之后 Termux 依然不会主动出现。
4.3 启用Acra机制并在开发者选项里关闭在后台检查
这里说的 Acra 不是崩溃上报,是 Termux 自带的一个稳定性相关机制。不同版本对后台保活的机制一直在调整。有一个过往版本常见的做法是开启 Termux 的"Acra"上报功能来降低被系统杀掉的概率,不过这个功能本身更偏向稳定性监控,建议新版本用户直接忽略,保持默认就行。
更实用的做法是打开安卓系统的"开发者选项",找到"后台进程限制"设为"标准"(即不限制),然后把"在后台检查应用程序操作"关掉。开发者选项每台手机不太一样,但核心思路是一致的:告诉系统别太激进地清理 Termux。
注意:保持系统省电优化处于合理状态即可,不建议为保活而关闭手机系统的全部省电功能,那样耗电暴涨,得不偿失。
4.4 用的进程守护脚本,防止个别终端失联
哪怕你把白名单开了、自启动开了、开发者选项调了,依然可能在特定场景下发现 Termux 失联了——比如 Wi-Fi 切了网络,或者某次系统内存压力大,杀掉了 Termux。这种场景下我给自己的方案是:在 Termux 里装一个守护壳子,定时检查 sshd 是否在线,不在就拉起来。
直接写个简单脚本:
#!/data/data/com.termux/files/usr/bin/bash if ! pgrep -f "sshd" > /dev/null; then sshd fi保存为~/bin/keep_sshd.sh,赋执行权限:
chmod +x ~/bin/keep_sshd.sh然后用 cron 每三分钟跑一次。cronie 装好后,先启动 cron 服务:
sv-enable cron sv start cron再把任务加进 crontab:
crontab -e写入一行:
*/3 * * * * /data/data/com.termux/files/usr/bin/bash /root/bin/keep_sshd.sh如果~/bin已经进了 PATH,也可以简写。这套方案不能保证 100% 不死,但能保证死了以后很快自愈。实际上我用的最长的一台机器,用这套守护方案跑了快一个月没断过 SSH。
5. 开机自动执行脚本:Termux:Boot与Tasker双方案
你要的是"开机之后 Termux 自动跑起某个服务",那就绕不开 Termux:Boot。它本质上是一个配合 Termux 使用的小应用,负责接收系统开机广播,然后自动拉起 Termux 并执行你放在特定目录里的脚本。
5.1 安装Termux:Boot并放置启动脚本
安装 Termux:Boot 之后,你需要在 Termux 里先安装它的插件包:
pkg install termux-bootTermux:Boot 的工作机制非常朴素:它会扫描~/.termux/boot/目录下的脚本,开机时按文件名顺序执行。所以第一步先创建目录:
mkdir -p ~/.termux/boot然后把你想要开机执行的脚本放进去。比如我想开机自动启动 sshd 和 cron,可以建一个脚本~/.termux/boot/start-services:
#!/data/data/com.termux/files/usr/bin/bash sshd sv start cron exit 0赋执行权限:
chmod +x ~/.termux/boot/start-services这里有个容易踩的坑:脚本名不能带.sh后缀,否则 Termux:Boot 会因为找不到可执行程序而拒绝运行。我第一次用的时候犯过这个错,脚本写了半天一直不执行,吓得以为手机坏了。其实不是,就是文件名后缀的问题。
Termux:Boot 在接收到开机广播后拉起 Termux 应用,如果手机系统没有给 Termux 自启动权限,这一步一样会失败。所以前面提到的系统自启动设置,还是要先做好。
5.2 用Tasker实现更灵活的场景化触发
Termux:Boot 只能处理"开机"这一个触发事件。如果你想要的是"到了晚上十点自动执行备份"或者"手机连上家里 Wi-Fi 自动执行某个脚本",那就得靠 Tasker 的"任务"去调用 Termux 的termux-exec接口。
具体做法分两步。
第一步,在 Termux 里安装 Tasker 插件支持:
pkg install termux-tasker这个包会提供一个命令行工具termux-tasker,它本身是用来接收 Tasker 传来的变量的,但真正的调用方式是靠 Tasker 那边的"Termux:Tasker"插件动作。
第二步,在 Tasker 里新建一个任务,动作选"插件"里的 Termux:Tasker,然后在配置里填你指定的脚本名。Tasker 插件会调用这个脚本执行。一个简单的例子:在 Tasker 里设定一个定时规则,每天晚上 20:00 触发,调用 Termux 执行备份脚本。那我的 Termux 脚本就放在~/bin/daily_backup.sh,在 Tasker 配置时填:
bash ~/bin/daily_backup.sh这个方案灵活是有代价的:Tasker 本身是付费应用,首次上手也有学习成本。但这套配合已经算是安卓端最成熟的自动化方案了,如果你有大量场景需要联动,值得投资精力。
5.3 无线网络与USB网络共享下的定时策略
如果你想在指定网络环境下执行任务,但不想额外安装应用,还有一个更朴素的方法:如果你只有"需要在特定 Wi-Fi 下执行任务"或"需要在手机连接某个设备时启动服务"的需求,可以用 Termux 内定时检查网络状态的方式代替 Tasker。比如脚本里判断当前 Wi-Fi SSID,符合条件才继续执行:
ssid=$(termux-wifi-connectioninfo | grep -o '"ssid":"[^"]*"' | cut -d'"' -f4) if [ "$ssid" = "我家的Wi-Fi" ]; then # 执行同步或更新任务 fi前提是你装了termux-api包,这个包能调用很多安卓系统级能力,比如 Wi-Fi 信息、传感器数据、电量状态。对于已经在用 Termux 当自动化中心的人来说,termux-api几乎是个必装项。
6. 安全加固与数据优化,别让Termux裸奔
很多人把 Termux 当玩具,觉得无所谓。但只要你开了 SSH,它暴露在局域网里就是一个真实的服务端口。如果密码弱、密钥管理乱,被隔壁的人扫到然后爆破,也不是没可能。未 Root 环境虽然没有系统权限,但它能读你的手机存储(授权过的情况下),能访问你所有带权限的 App 数据目录,所以安全等级不低。
6.1 改默认端口和限制登录频率
第一步,把 SSH 默认的 8022 端口换成一个不常用的高位端口。虽然安全领域有句话叫"安全不能靠隐藏",但减少被随机扫描命中的概率还是有意义的。修改方式:编辑 Termux 的 sshd 配置文件。
Termux 的 sshd 配置路径在$PREFIX/etc/ssh/sshd_config,找到 Port 行,改成比如 22222:
nano $PREFIX/etc/ssh/sshd_config改完重启 sshd:
sv restart sshd6.2 只允许密钥登录,彻底关掉密码认证
密码登录最大的风险是弱密码爆破。既然前面已经配好了密钥,直接把密码认证关掉,让爆破彻底失去意义。编辑同一份配置文件,找到这两行:
PasswordAuthentication yes PermitRootLogin yes改成:
PasswordAuthentication no PermitRootLogin no保存重启 sshd 就生效了。改完之后,只有持有私钥的设备才能连进来。这里要特别提醒:改配置之前,先确认你的密钥登录是能正常用的,不然一关密码认证,你自己也被关在门外了。我就干过这种事,改完发现自己私钥没带在身上,只能跑去手机屏幕前操作。
6.3 定期检查和备份关键配置
Termux 环境本身不重,核心配置就集中在几个地方:~/.ssh、~/.termux、~/bin以及你自定义的脚本目录。建议定期把它们打个包往手机存储里扔一份。
tar czf ~/storage/downloads/termux-backup-$(date +%Y%m%d).tar.gz ~/.ssh ~/.termux ~/bin真出了问题,或者换了新手机,直接解包回去就恢复了。备份这个事,真正做了的人才懂它省了多少事。
6.4 升级Termux环境时需要注意的坑
Termux 版本更新很频繁,升级一般直接:
pkg upgrade但大版本升级(比如从旧的 Termux 版本跳到新的大版本)偶尔会因为软件源结构变化导致包冲突。这种情况我在社区里见过不少,说的是某些包依赖 old 版本的库,升级完直接被打包器要求先卸载再安装。遇到冲突,优先检查是不是某个不在维护的第三方包卡住了,用:
apt-mark hold 包名把问题包锁住,再继续升级。这种操作不是常规动作,属于特殊急救手段,建议只对明确排查过的包使用。
7. 常见问题排查:装完Termux后我踩过的坑
整理了这段时间里出现频率最高的问题和对应的排查思路,有些是我自己翻过车的,有些是帮别人排查时见过的,直接列成速查表,你照着排就行。
7.1 终端提示"command not found"或包没装上
装了软件却提示找不到,多半是 PATH 没生效。Termux 的 PATH 逻辑和常规 Linux 略有差别,如果执行pkg install之后提示刷新环境,或者你直接编辑过~/.bashrc,先确认有没有跑:
source ~/.bashrc另一个可能性是你装在~/bin下的脚本忘了加执行权限。Termux 默认把~/bin加进 PATH,但里面的文件如果没有+x权限,一样是"找不到"。
7.2 pkg update 卡住或者源崩了
这种情况初步判断是软件源失效。执行pkg update看到一堆 404 或者超时,大概率是源地址变了。直接重新跑一遍termux-change-repo换个源,然后再执行pkg update && pkg upgrade。
如果真的连换源界面都打不开,那可能是apt缓存坏了,清一下:
apt clean && pkg update我碰到过一次比较离谱的情况是DNS配置问题,Termux 里能 ping 通 IP,但域名解析不了。检查一下/etc/resolv.conf,确认里面有可用的 DNS 地址。实在不行就手动改成公共 DNS:
nano $PREFIX/etc/resolv.conf写入:
nameserver 223.5.5.5 nameserver 119.29.29.29(为了内容稳妥,此处避免了不可控的外部地址;以上两个是国内常用公共 DNS,平时用起来比较稳定。)
7.3 SSH连接不上,问题可能不在Termux
手机开了 sshd,电脑就是连不上,这种情况先分层排查。
第一层,确认 sshd 活着:
pgrep -af sshd第二层,确认端口监听正常:
ss -tlnp | grep 8022第三层,确认手机和电脑在同一网段。手机执行ip addr show wlan0看 IP,电脑执行ipconfig或ip addr,两个 IP 前三位应该一致。
第四层,确认路由器没开 AP 隔离。这个最坑,同一 Wi-Fi 下设备互访直接被拦。如果以上都没问题,那大概率就是路由器策略问题。
7.4 crontab 任务不执行,疑似定时任务失灵
Termux 的 cron 不像常规 Linux 一样开机就跑,需要先启动 cron 服务。如果你执行过crontab -e但任务一直没执行,先检查:
sv status cron如果是 down 的状态,就:
sv start cron另外,如果你用 Termux:Boot 启动 cron,但脚本里没有执行sv start cron,开机之后 cron 也起不来。这个顺序问题我翻过一次车——脚本里写了启动 sshd 忘了写 cron,导致第二天定时任务全没跑。
7.5 手机重启后Termux完全没动静
这是最多人问的一个问题。原因通常指向三件事没做齐:系统自启动权限没给、Termux:Boot 没装或者脚本没放在~/.termux/boot、电池白名单没设。按顺序把这三点逐项核对,九成问题都能解决。
还有一个小众的情况:部分手机系统在重启后会弹一个"是否允许应用后台运行"的对话框,如果不点确认,Termux 照样会被杀。这种对话框一般只弹一次,错过之后可以在系统应用管理里手动找到开关补上。
8. 未Root Termux的进阶玩法:随身服务器和定时任务的完整形态
配置到这里,Termux 已经从"一个终端模拟器"变成了"一台常驻后台的 Linux 机器"。但真正让它有价值的是你拿它来干什么。
8.1 把它当随身服务器用
我之前在 Termux 里跑过一个小型 HTTP 服务,配合手机热点,给局域网设备提供些小工具页面。因为 Termux 的性能依赖手机本身,遇到重负载任务会吃力,但跑个轻量服务、处理点脚本逻辑完全没问题。注意一点:手机热点长时间运行发热明显,如果当服务器用,建议插着充电器并放在通风处。
8.2 用Termux定时执行系统备份任务
我自己比较常用的一个场景是,让 Termux 每天晚上帮我备份手机里的几个应用数据目录(应用本身有导出功能的,或者手动设置了可访问路径的)。脚本思路很简单:检查目录存在,打 tar 包,移动到指定位置,删除超过七天的旧备份。
#!/data/data/com.termux/files/usr/bin/bash BACKUP_DIR=~/storage/downloads/backups mkdir -p "$BACKUP_DIR" tar czf "$BACKUP_DIR/app1-$(date +%Y%m%d).tar.gz" ~/storage/shared/某个应用导出目录/ 2>/dev/null find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete配合 cron 半夜跑,第二天起床备份已经静静躺在那里了。这套东西虽然没有啥花哨 UI,但稳定性和可控性比很多图形化备份工具强得多。
8.3 开发调试场景:移动端脚本实验室
Termux 里可以装 Python、Node.js、GCC 等一整套开发工具链。我之前在手机上用 Termux 写过一些小脚本,然后通过 SSH 同步到电脑上跑测试。反过来,如果和朋友们在同一个局域网里,手机上的 Termux 也能直接作为一台实验用的小型 Linux 机器,测试网络服务、跑点简单的自动化流程,它都能胜任。
不过受限于安卓对普通应用的约束,涉及系统调用的实验是跑不了的。心态上把 Termux 当一台"自带电池的随身 Linux 沙箱"就行,别想着把它真的当成根权限工具去用。
9. 最后分享点个人实践经验
我玩 Termux 也有几年了,踩过的坑比看过的教程多。到现在为止,给我省事最多的不是那些花哨的配置,反而是最开始做的那几件小事:换源、设密钥、配自启动、写进程守护。这几件事做踏实了,后面基本不用反复折腾。
有一个容易被忽略的点再提一下:不用 root 反而让我养成了更好的习惯。因为权限受限,我对每个命令的作用会更谨慎,对数据备份更上心。说实话,在手机这种随身设备上,能够安全、稳定、可控地跑一个 Linux 环境,比单纯追求"万能权限"实用得多。
如果你也跟我一样,想在没有 root 的安卓机上获得一个随时能用的 Linux 环境,那现在这套思路足够你用了。配置好之后,剩下的就是让它安安静静地在后台帮你干活。