我一直觉得,学 Linux 不应该被一台正经电脑绑死。很多人手里明明有安卓平板、有吃灰的旧手机,性能足够跑命令行,却因为网上教程一上来就写"需要 root",直接放弃了。我不敢说 root 一定不好,但为了学个ls、grep、vim就去解锁 Bootloader、刷 Magisk,风险和成本都太高了——保修没了,银行 App 可能罢工,还可能把自己日常用的手机搞成砖。
实际上,现在完全有一条不用 root 的路子:在安卓设备上用 Termux 配合 proot-distro,装一个完整的 Ubuntu 容器。这篇文章就用 Ubuntu 举例,把快速方法、详细界面说明、常见报错和排查思路一次讲清楚。你不需要有 Linux 基础,照着做就行。我会把每一步执行后应该看到什么也写出来,相当于一份文字版的图文教程。
1. 不 root 跑 Linux:这条路径的价值与选型逻辑
1.1 为什么先排除"先 root 再跑 Linux"的老路
早期在安卓上跑完整 Linux,主流方案是 Linux Deploy。这个工具确实强大,但它强依赖 root 权限,原理是先申请 root,然后挂载镜像、通过 chroot 切换到一个完整发行版的文件系统里。
用 Linux Deploy 的代价是:你得先处理 root 本身。安卓的 root 流程到今天依然繁琐——解锁 Bootloader、刷入修复后的 boot 镜像、处理 SafetyNet/Play Integrity 检测、部分厂商还会对解锁后的系统进行额外限制。整个过程对新手来说就是一个大坑,任何一个环节出错都可能变砖。而且 root 之后,日常使用的稳定性要打问号,我的主力机上真的不敢这么干。
所以我的结论很直接:如果目标是"学习 Linux 命令行",根本不需要拥有 root 权限,也不需要替换安卓内核。我们需要的是一个能模拟 root 身份、能安装软件包、能练习命令的完整用户空间环境。
1.2 两条不 root 路线的取舍:Termux + proot-distro 与 UserLAnd
目前不用 root 跑 Linux 发行版,主流有两条路线:
| 对比项 | Termux + proot-distro | UserLAnd |
|---|---|---|
| 安装体积 | 主程序几 MB,rootfs 按需下载 | 较大,内置组件多 |
| 支持发行版 | Ubuntu、Debian、Alpine、Arch 等十几种 | Ubuntu、Debian、Kali 等 |
| 更新维护频率 | 高,社区活跃 | 中等,偶有历史遗留 bug |
| 命令行体验 | 原生终端,键位可控 | 自带键盘/SSH 两种方式 |
| 自定义程度 | 高,可手动安装 rootfs | 低,安装流程固定 |
| 排错便利性 | 日志清晰,社区资料多 | 黑盒较多,报错不好定位 |
我用这两种方案都在平板上装过 Ubuntu。UserLAnd 的上手成本确实低,打开 App 选个发行版,填个用户名密码,等它下载完就能用。但它的登录方式有点绕——默认不是直接给你一个终端,而是让你通过 SSH 连接本地容器,多了一层转换,初学者一旦遇到 SSH 配置问题就容易被劝退。而且它把太多东西封装在 App 里面,出了问题很难看到底层日志。
Termux + proot-distro 这条路线,每一步都在终端里完成,你看到的每一个报错、每一次输出,本身就是学习 Linux 的过程。所以我这篇选择了后者,它也符合标题里"快速方法"的定位:核心命令不超过三条。
2. 快速方法实操:Termux 里用 proot-distro 装 Ubuntu
2.1 安装 Termux 的两个来源和版本禁忌
Termux 对安卓来说是一个终端模拟器,同时自带了一套完整的软件包仓库。安装它要特别注意来源问题,不同渠道的版本差别很大。
我强烈建议从 F-Droid 官网下载 Termux。F-Droid 是开源软件社区的应用市场,上面的 Termux 由项目方自己维护,更新很及时。为什么不要用 Google Play 版本?Google Play 版 Termux 由于后台策略调整,已经停留在很老的版本上,安装包管理工具时会遇到大量"仓库不可用"的问题,如果你照网上的老教程操作,很容易在第一关就卡住。
下载安装完成后,先做一步很关键但不显眼的事:到手机系统设置里,给 Termux 打开"存储权限"。否则后面你在容器里想读取手机上的文件,会一直提示权限不足。
打开 Termux 后,先验证一下环境:
pkg update -y && pkg upgrade -y这一步会把 Termux 自己的软件源更新到最新状态。网络正常的情况下,你应该会看到一堆软件包的下载进度,最后提示OK。如果你的网络访问默认源很慢,可以执行termux-change-repo,在弹出的图形界面里选择镜像源,比如中科大、清华的镜像,选好后确认即可。
2.2 三条命令完成 Ubuntu 安装
更新完 Termux 本身,接下来安装容器管理工具:
pkg install proot-distro -yproot-distro 是 Termux 社区里专门用来安装和管理 Linux 发行版的小工具。它本身只是一个脚本,真正的发行版文件系统需要下一步下载。
proot-distro install ubuntu执行后你会看到类似这样的输出:
[*] Fetching rootfs... [*] Installing Ubuntu (noble)...这里需要注意,它默认从项目的官方地址下载 Ubuntu rootfs 压缩包,下载速度受网络影响非常大。我第一次装的时候,这一步卡了差不多二十分钟。如果你发现它长时间停在Fetching不动,不要傻等,Ctrl+C中断,换手动方式:在电脑上下载好 rootfs 压缩包,传到手机/sdcard/Download目录,然后执行proot-distro install --override-alias ubuntu /sdcard/Download/对应文件名.tar.xz。不同版本的参数名略有差异,可以先proot-distro install --help确认。
安装完成后,登录 Ubuntu 容器:
proot-distro login ubuntu看到提示符变成root@localhost:~#,就说明你已经进入了一个完整的 Ubuntu 环境。到这一步,快速方法已经跑通,整个过程就是 pkg 安装、proot-distro 安装、login 三步。
2.3 第一次登录 Ubuntu 后建议立刻做的三件事
第一件事,确认你进入的确实是 Ubuntu:
cat /etc/os-release输出里能看到NAME="Ubuntu"和具体的版本号,比如 Ubuntu 24.04.2。这会让你对自己所处的环境有个明确认知。
第二件事,更新容器内的软件包索引:
apt update这一步非常值得留意。如果你发现 apt 访问官方源很慢,或者直接报连接错误,就需要把容器里的软件源也换成国内镜像。Ubuntu 24.04 之后使用 Deb822 格式的源文件,路径是/etc/apt/sources.list.d/ubuntu.sources,老版本则编辑/etc/apt/sources.list。换源命令可以这样写:
sed -i 's@//.*archive.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list.d/ubuntu.sources改完再执行apt update,速度会明显改善。
第三件事,安装 sudo 并创建一个普通用户,不要一直在 root 下练习。命令是:
apt install -y sudo useradd -m -s /bin/bash student passwd student usermod -aG sudo student之后用su - student切换到 student 用户,你会感受到提示符从#变成$,这就是 root 用户和普通用户的直观区别。日常练习都以普通用户身份进行,需要提权时再前面加sudo。
3. 在 Ubuntu 容器里学习命令行的路径规划
3.1 一套适合新手的命令索引
容器有了,接下来就是怎么用它学命令行。我梳理过一套适合在平板上零基础起步的命令清单,按场景分好类,你可以照着逐个练习:
| 场景 | 常用命令 |
|---|---|
| 文件与目录 | pwdlscdmkdirtouchcpmvrmlnfind |
| 查看与筛选内容 | catlessheadtailgrepwcsortuniq |
| 权限与用户 | chmodchownuseraddpasswdsudosuwhoami |
| 进程与系统 | pstophtopkilldfdufreeuname |
| 压缩与打包 | tarzipunzip |
| 网络 | pingcurlwgetsship |
| Shell 基础 | echoexportwhichaliashistoryman |
这里我最想强调的是man。很多初学者一到记不住命令就搜网页,其实终端里输入man ls,系统会告诉你每一个参数的含义。这个习惯越早养成,后面学什么都快。
3.2 用一个小案例把命令串起来:批量重命名文件
单独记命令容易忘,我建议每学几个命令,就做一个小任务把它们串起来。下面这个批量重命名文件的练习非常适合第一次上手。
先创建一个练习目录,造几个带空格的文件名:
mkdir -p ~/practice && cd ~/practice touch "hello world.txt" "linux practice.txt" "daily note.txt" ls -l你会看到三个带空格的文件。带空格的文件名在命令行里是个经典坑,直接mv hello world.txt hello_world.txt会报错,因为 shell 会把空格当成参数分隔。正确做法是给文件名加引号,或者用循环加管道:
for file in *.txt; do newname=$(echo "$file" | sed 's/ /_/g') mv "$file" "$newname" done ls -l执行完再ls,三个文件名的空格已经全部变成了下划线。这个案例里你实际练习了mkdir、cd、touch、ls、for循环、变量赋值、echo、管道、sed、mv,一次串起十来个知识点。比对着命令表死记硬背有效得多。
类似的小练习还能做很多,比如统计当前目录下每种扩展名的文件数量,用一条管道命令就能实现:
ls | grep -o '\.[^.]*$' | sort | uniq -c这条命令把ls的输出交给grep提取扩展名,再sort排序,最后uniq -c统计次数。等你能够自己分析出这条命令的每一步在干什么,说明管道思维已经入门了。
3.3 与宿主机的文件交互:让练习更方便
在 Termux 里,手机内部存储通常挂在~/storage这个目录下。给 Termux 授权存储权限并执行一次termux-setup-storage后,容器里通常也能直接访问这些目录。
如果在你的版本里,登录 Ubuntu 后~/storage不存在,可以在 login 时用--bind参数把手机存储挂进容器:
proot-distro login ubuntu --bind /sdcard:/mnt/sdcard之后在 Ubuntu 里ls /mnt/sdcard就能看到手机的完整目录结构。我习惯把教程文件、练习脚本放在平板的 Download 目录,这样容器内外都能访问,既方便从电脑传文件进来,也方便在手机文件管理器里查看容器生成的输出结果。
4. 图文对照:常见报错与排查链路
4.1pkg update报错或下载缓慢
如果你安装的是 Google Play 老版本 Termux,第一轮pkg update很可能直接报错。此时界面会提示某个公共仓库的 URL 失效,或者显示repository is not available。
排查思路很简单,不要试图在旧版本上修修补补,直接备份数据后改装 F-Droid 版本。如果你的网络访问 F-Droid 官网不稳定,可以在国内开源镜像站下载 APK 再手工安装,注意核对包名com.termux即可。这个问题非常典型,我见过太多人卡在这里,其实换版本五分钟就解决了。
4.2proot-distro install ubuntu卡在 Fetching 阶段
这个前面提过,rootfs 压缩包体积一般在几百 MB,默认下载源如果有波动,界面就会一直停在Fetching rootfs...。
在这里我再给一个更细致的排查链路:先Ctrl+C中断,然后执行proot-distro list确认 ubuntu 条目存在;再检查手机剩余的存储空间,rootfs 解压后通常会占掉 1~2GB。确认这两点都没问题,就采用手动下载 rootfs 再本地安装的方案。把压缩包放到/sdcard/Download后执行:
proot-distro install --override-alias ubuntu /sdcard/Download/rootfs.tar.xz如果提示该参数不存在,直接执行:
proot-distro install --help看当前版本支持的具体参数,不同版本的命令确实有变化,这也是排错的第一步。
4.3 登录 Ubuntu 后apt update提示证书错误或连接失败
容器装好,apt update却报错,很多人会怀疑是不是系统坏了。其实最常见的原因有两个:一个是源访问不通,另一个是系统时间不对。
安卓设备如果长时间没同步时间,容器里的 TLS 证书校验就会失败,因为证书有效期判断依赖系统时间。排查方法是先执行date,如果时间和当前时间差太远,去手机系统设置里打开自动确定日期时间,然后退出容器重新登录。
时间确认没问题后,再执行换源命令,换成国内镜像源。这一步还可以顺带检查一下 DNS 是否正常:ping mirrors.tuna.tsinghua.edu.cn,不通的话在 Termux 里检查网络权限,或者考虑换一个镜像源。
4.4 中文显示成方框或乱码
Ubuntu 容器默认不包含中文字体,如果你用cat查看中文内容,屏幕上大概率是一堆方块。
解决办法是安装中文字体包:
apt install -y fonts-noto-cjk不过要注意,容器内的字体是否能正常渲染,还取决于 Termux 终端本身是否支持中文显示。新版 Termux 默认没问题,如果你在旧版本上遇到中文仍然是方框,优先升级 Termux 本体。
这个报错不涉及复杂逻辑,但很影响体验,早点处理掉,后面看中文文档会舒服很多。
4.5 切换普通用户后sudo报错
用su - student切换用户后,执行sudo ls报错,提示student is not in the sudoers file。
这是因为刚才虽然执行了usermod -aG sudo student,但在某些精简 rootfs 或你只执行了useradd还没把用户加入 sudo 组的时候,提权就会失败。重新用 root 登录容器,执行:
usermod -aG sudo student visudo在打开的配置里确认包含这行:
%sudo ALL=(ALL:ALL) ALL保存退出后重新登录,问题就解决了。从这个坑也能体会到一个 Linux 原则:普通用户要获得提权能力,管理员得显式授权,这正是权限管理的基本逻辑。
5. 无 root 容器的一些边界:哪些事做不到
5.1 没有 systemd,服务进程怎么启动
很多从服务器教程迁移过来的人,进容器第一件事就是systemctl start ssh,结果报错System has not been booted with systemd as init system (PID 1)。
原因很简单:proot 给你的是一个用户空间,不是虚拟机或真机,容器里没有真正的 init 进程,PID 1 是模拟出来的。所以systemctl无法工作。那服务能不能启动?可以,只是要用传统方式。
比如手动启动 ssh:
apt install -y openssh-server mkdir /run/sshd /usr/sbin/sshd这样 sshd 就在后台跑起来了。需要停止时用pkill sshd。虽然没有 systemd 那么优雅,但学习"服务进程是什么"这个概念反而更直观。
5.2 网络和端口监听的限制
proot 环境共享安卓的内核和网络栈。默认情况下,容器内部可以自由发起ping、curl、ssh等出站连接,但如果让容器监听一个端口供局域网访问,情况就会复杂一些。
在 Android 上监听端口不总是稳定,一是因为系统可能把 Termux 的后台进程杀死,二是因为多用户机制、网络策略也会影响监听行为。实测下来,在大部分平板上,proot 容器里启动 sshd 并监听 8022 端口,从同一局域网电脑上ssh student@平板IP -p 8022是可以连通的,但如果发现连不上,优先检查 Termux 进程是否被系统后台清理,以及在系统设置里关闭对 Termux 的电池优化。
5.3 "假 root"到底哪些事不能做
在容器里执行id,你会看到uid=0(root),看起来就是 root。但这个 root 是 proot 的用户态模拟,不是内核承认的真实超级用户。
因此,需要真实内核能力的操作都会失败。典型的包括:mount真正的文件系统、insmod加载内核模块、iptables修改网络规则、直接操作/dev下的设备节点。Docker 也基本装不上,因为 Docker 依赖真实的 mount namespace 等内核特性。理解了这条边界,就不会在容器里浪费时间尝试本来就不可能的事了。
5.4 什么时候该考虑换一条路线
如果你的练习内容确实需要完整内核能力,比如想玩 Docker、调试内核模块,proot 容器就不是合适的学习环境了。更务实的方案有三条:用一台旧电脑装原生 Linux;在安卓上用 QEMU 跑一个虚拟机,性能开销大但功能完整;或者干脆就用 Termux 原生环境做日常练习,不是所有 Linux 学习都需要先装 Ubuntu。
我自己的选择是:日常学命令、写脚本、练 vim,在 proot Ubuntu 容器里就足够;一旦涉及系统级实验,我会把任务挪到一台跑着原生 Linux 的旧笔记本上做。两条路线各管一段,互不耽误。
6. 我折腾下来的一点体验与建议
这套 rootless 方案我用了大半年,平板上跑 Ubuntu 已经成了日常习惯。整体体验是:用来学命令、写 Python 脚本、看文档、练 vim,完全够用;但如果做长时间的编译,proot 的 syscall 包装和安卓的调度策略会带来可感知的性能损耗,明显比原生环境慢。所以我不建议把平板容器当成主力编译环境,它更适合作为"随手就能打开的练习场"。
想提升体验的话,有两点我特别推荐。一是给平板配一个便宜的外接键盘,Ctrl、Alt、Esc这些键在物理键盘上才真正好用,软键盘在终端里效率太低。二是在 Termux 里把常用别名配好,比如把proot-distro login ubuntu缩写成ubuntu,省得每次都敲一长串。
最后一个个人心得:用平板学 Linux 有一个意外的好处——屏幕的竖长比例天然适合阅读终端输出,配合分屏可以一边看教程一边敲命令。把娱乐平板变成学习工具,这笔买卖怎么算都不亏。如果你手里正好有一个吃灰的安卓设备,现在就可以打开 F-Droid 装上 Termux,从pkg update开始你的第一条命令。