☰
旧安卓手机变身Linux服务器:Termux从初始化到Nginx全指南
2026/10/17 12:46:25 网站建设 项目流程

前阵子从抽屉里翻出一台旧安卓手机,屏幕还行,就是日常用着有点卡。我想着与其吃灰,不如把它变成一台随身小服务器,于是装了个 Termux,准备在安卓系统上搭建 Linux 环境并安装 Linux 应用。一开始我以为只是单纯敲命令,结果一路从 pkg 换源折腾到 proot-distro,最后连 Nginx 都跑了起来,局域网里另一台设备居然能直接打开手机上的网页,整个过程非常有成就感。这篇博文不玩虚的,就以我实际操作踩过坑为主线,把 Termux 的安装初始化、软件包安装、发行版搭建、服务运行和常见问题全部拆开讲清楚。无论你是零基础刚下好 App,还是已经装过但不知道下一步干嘛,这篇都能给你一套可以直接抄作业的路线。

1. 装之前先搞清楚 Termux 到底是什么

1.1 一句话理解 Termux 和“Linux 环境”的关系

很多朋友第一次打开 Termux 其实内心是懵的:看到的确实像一个终端,但它和“Linux 系统”到底什么关系?我的理解是,Termux 是一个运行在安卓上的终端模拟器和用户空间环境,它没有自带完整 Linux 内核,而是利用安卓系统已有的 Linux 内核,在应用自身的数据目录里维护了一套独立的根文件系统和软件仓库。你通过 pkg 命令安装的 Python、Nginx、Git 这些软件,都是针对 Termux 环境编译好的预编译包,相当于拿着同一套 Linux 内核,在不打扰安卓系统本身的情况下,用户空间重新搭了一套。

这样做最大的好处是不需要 root 权限,普通手机就能跑。坏处也很明显:Termux 并不能直接操作安卓系统上的所有文件,不能随便改内核参数,更没法把它当成一个完整发行版来对待。启动后你敲echo $PREFIX,看到的路径通常是一长串到/data/data/com.termux/files/usr的路径,这个路径就是 Termux 自己的软件根目录,所有装进去的 Linux 应用都放在里面。理解这一点非常重要,因为后面很多“找不到命令”“目录不对”的坑,绝大多数都是因为你还用固定 Linux 发行版的思维去猜路径。

1.2 为什么我不建议你直接装完整虚拟机

刚开始我也想过,既然要跑 Linux,干脆在手机上装个虚拟机不就行了?比如用某个开源虚拟机方案跑一个完整系统镜像。但实际操作后你会发现,安卓设备本身存储空间和内存都有限,完整虚拟机动辄几个 GB 的根文件系统,解压、启动、运行时的 CPU 开销都会让中低端手机彻底卡死。相比之下,Termux 本身占用的空间非常小,一个基础的 Python、Git、Vim 环境几百 MB 就能解决,启动进程几乎没有额外负担。

如果你只是想学 Linux 命令、写脚本、跑一个轻量后端服务,Termux 是性价比最高的方案。但如果你确实需要跑需要特定内核模块、systemd 服务或者完整桌面环境的东西,那 Termux 原生环境可能不够,这时候我不是让你去用虚拟机,而是建议你走 proot-distro 方案,也就是后面会讲到的“在 Termux 里再拉一个完整发行版”。简单做个对比:

对比项Termux 原生环境proot-distro 发行版完整虚拟机
是否需要 root不需要不需要通常不需要,但性能损耗大
启动开销极低较低高
可使用软件规模Termux 仓库发行版仓库完整发行版
图形界面体验可用 VNC/终端可用 VNC/终端较强但卡顿
适合人群Linux 入门、命令行工具需要发行版兼容性只作为验证,实际体验差

2. 环境准备:装好 Termux 后先做这三件事

2.1 安装渠道和版本差异

装 Termux 看起来很简单,但第一步就可能踩大坑。我见过不少人在安卓应用商店里随便搜一个装,结果装上以后pkg update永远报签名错误,或者命令执行到一半直接闪退。原因很简单:应用商店里的版本未必是维护者持续更新的版本,有些渠道的包可能长期停更,等仓库签名换了以后,旧版 Termux 就跟不上新的软件源了。

所以我建议,Termux 本体一定要从官网或开源社区明确推荐的渠道获取,而不是从乱七八糟的“软件合集”里面下载。你还要确认系统版本是否满足要求,安卓版本太老会导致部分软件包编译时依赖的内核接口缺失,很多新包装不上。安装流程很简单:下载 apk 后手动安装,打开终端;如果 Termux 提示有新版本,最好先做一次升级再继续,否则后面很多操作会因为版本旧出现诡异错误。

2.2 第一次启动三件事:更新源、建目录、开存储权限

打开 Termux 之后,先别急着敲各种安装命令,先做三件基础工作。

第一件是更新软件源,执行:

pkg update

这一步会同步所有包索引。如果发现网络差或者进度很慢,可以用termux-change-repo调出文本菜单,选择一个离你更近、访问更稳定的镜像源。这一步很关键,我在实际操作中发现,只要默认源不稳定,后面所有安装命令都会卡在下载阶段,所以宁愿第一步就把源换好。

第二件是执行:

termux-setup-storage

这条命令会申请安卓系统的存储权限,并且在 Termux 的 home 目录下面创建storage子目录,里面分别链接到下载、相册、文档等公共目录。如果用的是安卓 11 以上系统,弹窗后必须手动允许权限,否则命令会提示权限不足。没有这一个步骤,你后面想访问手机上已有的文件会非常难受。

第三件是装一批基础工具,我会先执行:

pkg install nano vim curl wget git unzip

这些工具是后面所有操作的地基。Termux 默认环境其实很精简,连文本编辑器都可能没有,所以先装好它们再继续。

2.3 学会看包管理器输出:pkg 和 apt 不是两套体系

Termux 里最常用的命令是pkg,很多人以为它是独立的包管理器,其实它本质上是对 apt 的封装,底层使用的还是 apt 体系。当你执行pkg install python的时候,实际执行的是把 python 软件包从源里拉下来并解压到 Termux 的$PREFIX目录;pkg upgrade则对应更新所有已安装软件包到最新版本。由于 Termux 的目录结构和普通 Linux 发行版不太一样,直接使用 apt 反而容易出现配置混乱,所以我平时都推荐只用pkg命令,不要混着用。

还需要理解环境变量$PREFIX。你可以在终端输入echo $PREFIX看到它的真实路径,以后凡是提到“Termux 的安装目录”,很多教程里写的/usr/bin,其实在 Termux 里都是$PREFIX/bin。如果之后你再用 proot-distro 进入完整发行版,那个环境里的/usr又是另一套,两者独立存在,千万不要弄混,否则你会出现把文件放进 Termux 的 home 里,却在发行版里找不到的情况。

3. 实际操作:从命令行工具到完整发行版

3.1 用 pkg 快速安装 Python、Git 和 Vim

当你基础环境配置好以后,可以第一次体会“在安卓上装 Linux 应用”的快乐,最经典的就是安装 Python:

pkg install python

安装完成后输入python --version,就能看到 Python 版本。注意这里装的是 Python 3,而且它和普通 Linux 发行版里的 Python 本质上是同一个运行时,只是编译平台不同,所以大多数纯 Python 脚本可以直接跑。我通常会建一个临时目录测试:

mkdir -p ~/scripts cat > ~/scripts/hello.py << 'EOF' print("Hello from Termux") EOF python ~/scripts/hello.py

如果你要安装第三方库,可以直接用 pip。不过有一点要有心理准备:有些带 C 扩展的库在 Termux 里不一定有现成 wheel,如果编译工具链不全,安装时会报错。这种时候我一般不会死磕,直接改用 proot-distro 进入完整发行版再装,反而更省事。

接着安装 Git 和 Vim:

pkg install git vim

装完以后先配置一下 Git 用户信息,否则提交代码会报错:

git config --global user.name "你的名字" git config --global user.email "you@example.com"

Vim 在 Termux 里默认没有语法高亮和行号,我习惯在~/.vimrc里加上最简单的配置:

syntax on set number set mouse=a

这几行配置虽然简单,但配合手机外接键盘或者实体键盘使用,体验会好很多。

3.2 包版本和依赖冲突怎么处理

Termux 的软件包仓库迭代很快,但也正因为快,偶尔会出现依赖冲突。比如你刚把某个包升级完,另一个依赖旧库的软件突然跑不起来了。我遇到过比较多的是提示某个.so文件找不到,或者Segmentation fault,这种情况通常不是硬件问题,而是依赖库版本不匹配。

我会按下面的顺序排查:

  1. 先执行pkg upgrade -y把整个环境升级到当前源一致的状态;
  2. 再执行pkg install -f修复可能损坏的依赖关系;
  3. 如果还报错,就pkg remove 出问题的包,然后重新安装;
  4. 实在不行,考虑用 proot-distro 进入发行版单独安装来隔离。

这里要特别提醒:千万不要用apt-get remove --purge乱删底层库,比如把 glibc 或者核心依赖删掉,整个 Termux 环境可能直接瘫痪,只能重装。旁敲侧击问过几个朋友,他们踩得最深的就是这个坑。你在 Linux 服务器上可以相对随意,在 Termux 里还是谨慎一点。

3.3 用 proot-distro 搭建完整发行版

Termux 原生环境已经能满足很多命令行需求,但仍有不少 Linux 应用需要特定发行版的特征。比如某些安装脚本会判断/etc/os-release,某些编译好的二进制依赖系统里完整的 glibc 和库路径。这时候就轮到 proot-distro 出场。

proot-distro 是一个脚本工具,它利用 proot 技术模拟 root 权限和文件系统,在 Termux 里打开一套完整的发行版 rootfs。听起来很复杂,实际使用非常简单:

pkg install proot-distro proot-distro list

看到可用列表后,选一个常用的发行版,比如 Debian 系的,然后安装:

proot-distro install debian proot-distro login debian

第一次安装会下载几百兆的文件,务必保证存储空间足够。进入发行版后,你会看到 shell 提示符已经变了,这时候执行系统更新和安装软件都要用发行版自己的 apt 命令,和 Termux 的 pkg 完全是两个体系:

apt update && apt upgrade apt install git vim python3-pip

在这个环境里,很多在 Termux 原生环境装不上的库都能正常安装,因为发行版的软件仓库比 Termux 仓库更完整,依赖也更接近桌面 Linux。你完全可以把它理解成“手机上跑了一个 mini Linux 系统”,虽然性能上有开销,但功能完整度很高。

日常维护也简单:退出发行版就执行exit;下次再次进入就是proot-distro login debian;查看已安装的发行版用proot-distro list;不需要了可以执行proot-distro remove debian,但删除前想清楚,整个 rootfs 都会被清掉,不可恢复。如果你想清理磁盘空间,可以先看下目录大小:

du -sh $PREFIX/var/lib/proot-distro/installed-rootfs/*

这个命令能帮你快速判断哪些发行版占用了大量空间。

4. 完整示例:在 Termux 里安装并启动 Nginx 服务

4.1 准备目录和配置

有了前面这些基础,我们来做点真正能拿得出手的事:在本机启动一个 Nginx 服务,让局域网里的其他设备可以访问手机上的页面。这个例子非常适合刚入门的朋友,因为它涉及包安装、配置文件修改、端口设置和进程管理,几乎涵盖 Termux 的日常核心操作。

我建议在 Termux 原生环境装 Nginx,因为速度更快、配置更简单:

pkg install nginx

安装完成后,先不急着启动。Termux 环境下非 root 用户不能绑定小于 1024 的端口,所以默认配置里 Nginx 大概率已经改到 8080,但如果你想确认,可以打开配置文件:

nano $PREFIX/etc/nginx/nginx.conf

找到 server 块,监听端口改成 8080,root 目录可以指向 Termux 自带的默认 html 目录:

listen 8080; root $PREFIX/share/nginx/html;

改完以后启动:

nginx

再通过curl -I http://127.0.0.1:8080检查返回状态。如果看到200 OK,说明服务已经起来了,用手机浏览器访问http://127.0.0.1:8080就能看到页面。

4.2 把安卓公共目录当成站点目录

如果你不想把网页文件放在 Termux 内部目录,而是放在安卓的“下载”或者自定义文件夹里,也是可以的。前提是之前运行过termux-setup-storage,这样~/storage/shared就指向安卓公共存储目录。

我会创建一个专用目录:

mkdir -p ~/storage/shared/www echo "<h1>Hello from Android+Termux</h1>" > ~/storage/shared/www/index.html

然后修改 nginx.conf 的 root 为对应路径:

root /data/data/com.termux/files/home/storage/shared/www;

注意路径写绝对路径或者~展开都可能需要确认 Nginx 是否有访问权限。实际操作中,我会先chmod -R 755一下目录,再重启 Nginx:

chmod -R 755 ~/storage/shared/www nginx -s stop nginx

这个方案最大的好处是,你可以直接在手机上编辑网页文件,不用进 Termux 敲太多命令。后面熟悉了,还可以用 PHP、Node.js 或 Python 的服务替代 Nginx,思路完全一样。

4.3 后台保持稳定:tmux 和 termux-services

你会发现,一旦在 Termux 前台运行 Nginx,只要你切到别的应用,安卓系统很快会把 Termux 进程全部关掉,服务也就停了。这是安卓后台限制的天然问题,不是 Termux 本身能完全解决的。但可以用 tmux 和 termux-services 来缓解。

先安装 tmux:

pkg install tmux

输入tmux进入一个会话,然后在里面启动 Nginx。这样即使你把 Termux 切到后台,tmux 会话也会尽量保活,不会因为终端界面切换就立刻杀掉整个进程。但这只能降低概率,不能保证 100%。

更接近“服务管理”体验的方式是安装 termux-services:

pkg install termux-services

安装后,Termux 会提供一套类似 Linux 服务管理的方式,注册在$PREFIX/var/service下。你可以给某个命令配置启动脚本,然后用sv start和sv stop来管理。当然,这依然不是系统级 service,安卓重启后未必会自动拉起,它主要是帮你在 Termux 进程还活着的时候,保持服务进程的稳定。如果你确实需要开机自启,可以搭配 Termux 的辅助插件,但普通使用不必追求那么极致。

5. 进阶操作:配置 SSH 远程管理

5.1 OpenSSH 安装与密码登录配置

旧手机如果放在书房,我一般都希望从笔记本连过去操作,而不是拿着手机戳小屏幕。Termux 里安装 OpenSSH 非常简单:

pkg install openssh

首先要给当前用户设置登录密码:

passwd

输入两次密码就生效。然后启动 SSH 服务:

sshd

Termux 的 SSH 服务默认监听端口是 8022,不是常见的 22,所以连接的时候要带上端口参数。先查看手机在局域网里的 IP:

ifconfig

或者:

ip addr

找到wlan0或者 WiFi 接口的 IP,比如192.168.1.50,然后在笔记本终端执行:

ssh 用户名@192.168.1.50 -p 8022

这里的用户名就是你在 Termux 里的用户名,通常显示在命令行前端。输入密码后就能进到 Termux 环境,然后你想跑什么命令都在笔记本上操作,手里不用一直握着手机。需要注意,SSH 只建议在可信局域网内使用,千万不要为了图方便把 8022 端口暴露到公网,否则接下来可能遇到的是各种扫描爆破,这一点我很认真。

5.2 密钥登录和常见连接问题

密码登录方便,但每次都要输密码。我更推荐配置密钥登录。在笔记本上先生成密钥,然后复制公钥到手机的~/.ssh/authorized_keys文件里:

# 在笔记本执行 ssh-keygen -t ed25519

生成后查看公钥:

cat ~/.ssh/id_ed25519.pub

然后在 Termux 里创建 authorized_keys:

mkdir -p ~/.ssh chmod 700 ~/.ssh echo "粘贴刚才的公钥内容" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys

配置好之后再连接,就不需要密码了。如果连接时提示权限拒绝,通常有两个原因:一是~/.ssh或authorized_keys权限太开放,SSH 会拒绝加载,改成 700 和 600 即可;二是你连接的端口不对,重新确认一下是不是 8022。还有一次我折腾半天,结果发现手机 WiFi 换了网段,和电脑不在同一个局域网,自然连不上,这种基础问题最容易忽略。

6. 常见问题与排障经验速查

6.1 软件包更新失败或者找不到包

在 Termux 里最常遇到的错误就是pkg update失败,或者安装某个包时提示找不到。我会先确认源是否配置正确。如果你发现默认源一直失败,可以运行:

termux-change-repo

重新选择镜像源。如果还是不行,可以清理本地索引缓存再重试:

rm -rf $PREFIX/var/lib/apt/lists/* pkg update

还有一次我遇到证书错误,折腾了大半个小时才发现是安卓系统时间不对,导致 HTTP 证书验证失败,把自动时间同步打开以后解决。这类问题看起来像网络问题,其实是系统时间误差,新手很容易忽视。

6.2 proot-distro 卡死或找不到命令

proot-distro 的安装过程需要大量下载,如果网络不稳定,可能中途卡住。第一次运行安装或登录时,因为要解压 rootfs,等待时间会比较长,不要看到没有输出就以为挂了,可以观察下载进度和 CPU 占用。如果安装到一半失败,我会先清理对应发行版的 rootfs 再重新安装,而不是直接叠加安装,否则容易留下损坏的半成品。

登录发行版以后,如果在里面安装应用时觉得卡顿,这是 proot 系统调用翻译的开销,特别是在低端手机上尤其明显。这种性能瓶颈没有太多优化空间,只能降低预期,把它当作轻量使用环境。如果你真需要跑重负载任务,建议考虑直接在具备 root 权限的设备上用 chroot 方案,或者干脆在专门的小主机上跑 Linux,术业有专攻。

6.3 文件路径、权限和中文乱码问题

Termux 内的路径和普通 Linux 很不一样,这是正常现象。要访问安卓公共存储,只能通过~/storage/shared,不要想着直接访问/sdcard,很多权限限制会让直接路径失效。在 proot-distro 内部访问 Termux 的文件,可以使用 Termux 的绝对路径,比如:

ls /data/data/com.termux/files/home/storage/shared

如果你在 Vim 里看到中文乱码,通常不是 Termux 的问题,而是终端字体或者 locale 没配置。可以先安装完整的中文环境并检查系统语言,同时确认使用的终端字体支持中文。在 Termux 原生环境里,部分命令可能默认没有完整的 UTF-8 环境,进入 proot 发行版后通常更容易解决。

6.4 Termux 后台被杀掉怎么办

这是 Termux 用户最容易崩溃的问题:明明服务在运行,手机锁屏几分钟后服务就断了。安卓系统为了省电,会定期清理后台进程,Termux 也逃不掉。我会用几个方法来降低被杀概率:

  • 把手机系统后台限制改成不限制,某些系统有“允许后台运行”的设置;
  • 在 Termux 内部使用 tmux 保持一个会话,而不是直接在前台跑服务;
  • 使用 termux-services 配合服务管理;
  • 如果手机支持,关闭省电模式或者把 Termux 加入电池优化白名单。

当然,这些方法在不同品牌手机上效果差别很大。我的旧手机上实测,tmux 加后台白名单之后,Nginx 稳定性已经足够用了。如果还是不行,那就老老实实在需要的时候手动拉起来,别跟 Android 的电源管理硬碰。

最后再分享一个小体会。很多人折腾 Termux 容易陷入“什么都想装一下”的怪圈,最后桌面环境跑不起来、依赖一堆错,然后放弃。我现在的思路是:先从最核心的命令行工具开始,比如 Python 和 Nginx;再根据需求决定要不要 proot-distro,而不是一开始就奔着图形界面去。遇到问题先看日志,nginx -t检查配置,pkg list-installed检查包状态,tail -f $PREFIX/var/log/nginx/error.log看报错,很多“疑难杂症”其实就是端口占用、路径写错、后台被杀。把这些问题理清了,Termux 绝对是你闲置安卓设备最值得装的“小钢炮”,一台手机就是一个随时可用的 Linux 开发环境。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询