Termux 详解—— Android 平台上完美移植的 Linux 工具集

最近换了新手机,系统是基于 Android Pie(即 Android 9)定制的 MIUI 10
Android 相对而言算得上是比较开放的平台,如此说来,不趁此机会乱搞一下难免有些说不过去。。。
额,新手机,刷机Root来一套有点舍不得,好在有 Termux 这个应用。来,耍一耍看上去能够彰显“硬核”范儿的东西。

一、简介

Termux 是 Android 平台上的一个终端模拟器,它将众多 Linux 上运行的软件和工具近乎完美的移植到了手机端。
无需任何复杂的安装和配置过程,软件装好以后即会自动配置一个基本的运行环境,用以执行一些常见的 Linux 命令。
最为关键的是,它还内置了功能健全的包管理工具,可以使用类似于 Ubuntu 系统的 apt (或 pkg)命令安装额外的软件包。

《Termux 详解—— Android 平台上完美移植的 Linux 工具集》 termux

之所以称它为“模拟器”而非“虚拟机”,是因为它并非像 PC 端的 VirtualBox 等虚拟机软件那样,在宿主机中虚拟出一个完全独立且完整的系统环境,而是类似于 Mingw 等软件,只是提供一个接口,以安装和运行面向新环境交叉编译后的程序。

也可以将此时的手机看作是安装了 Linux 系统的树莓派,可以像 PC 端系统那样运行各种类型的软件,只不过这些软件都是针对特定的 CPU 架构和硬件设备编译过的(交叉编译或者在树莓派系统中本地编译)。
需要注意的是,由于移动端和 PC 端硬件设备的巨大差异,加上 Android 内核和操作系统的限制,能够直接运行的程序毕竟是少数。不过我刚刚算了一下,实际上可直接安装运行的软件足足有 910 个!

《Termux 详解—— Android 平台上完美移植的 Linux 工具集》 apt list

二、软件包

前面提到的可供安装的近一千个(算上为数众多的基础工具、库文件和开发版软件包)程序和软件,数量虽然远不及桌面系统,面对日常使用、学习任务甚至很多高阶应用也已经算得上绰绰有余了。
举个例子来说,Termux 是可以直接安装配置 Python 编程环境的。想想 Python 社区里浩如烟海的第三方库,甚至还可以根据特定的需求自行编写程序源代码。这里面包含着无限的可能性。

当然这也只是 Python 罢了,那么 PerlRubyNodejsLua、C/C++、GolangRust……
我不会拿它去对标电脑上完备的系统环境,单说这种似乎无限的可能性,就已经很值得玩味了。

这里简单的列举下我所熟悉的部分软件:

  • 基础工具:apt、bash、busybox、dpkg、git、htop、make、zsh ……
  • 编程语言:binutils、clang、dart、erlang、golang、lua、nodejs、perl、php、python、ruby、rust ……
  • 服务器软件:apache2、lighttpd、nginx、openssh ……
  • 数据库软件:mariadb、memcached、mosquitto、postgresql、redis、sqlite ……
  • 文本工具和编辑器:emacs、gawk、nano、sed、vim ……
  • 媒体工具:ffmpeg、imagemagick、mpv、sox ……
  • 网络工具:curl、httping、nmap、wget ……
  • 游戏和娱乐:bastet、cmatrix、cowsay、fortune、moon-buggy、nsnake、sl ……

三、有趣的 Terminal 小命令

就先不说具体的环境搭建的步骤了,包含的东西很多,实际上跟电脑端的操作并没有太大的区别。
就简单列举一些我个人非常喜欢的好玩儿的小命令吧。

  • fortune:输出一段格言警句、名著节选或者小笑话等
  • cowsay:将输出的文字内容包含在由 ASCII 字符组成的动物形象的气泡内
  • lolcat:将苍白的输出文字变成绚丽的彩虹色

安装方法

  • fortune:$ apt install fortune
  • cowsay:$ apt install cowsay 或者 $ gem install cowsay
  • lolcat:$ gem install lolcat

其中 apt 版本的 cowsay 依赖 Perl ,安装包整个算起来有点大。所以我比较倾向于使用 gem 命令安装,即作为 Ruby 的第三方库。当然为了使用 gem 命令是要先安装好 Ruby 的:
$ apt install ruby

效果截图

《Termux 详解—— Android 平台上完美移植的 Linux 工具集》 fortune cowsay lolcat

虽然名字叫 cowsay ,但它所包含的动物形象事实上不只“牛”这一种。
可以使用 cowsay -l 命令列出所有可供选择的动物形象,并通过 cowsay -f animal_name 手动指定另一种动物。

《Termux 详解—— Android 平台上完美移植的 Linux 工具集》 cowsay -f

另外,其实 cowsay 的每个动物形象都是由对应的 cow 文件(基本就是 ASCII Art 形式的文本文件)定义的,可以自己扩充,篇幅有限不赘述。
类似的小玩意儿还有 sl(突突的小火车)、cmatrix(全屏滚动乱码),试试就知道了。

配置 ssh 服务

前面的截图,估计已经暴露了。。。
我是在电脑上截的图,但程序确实是在手机上运行的。只是在手机端 Termux 上安装了 SSH 服务,远程登录而已。步骤也非常简单:

  • 软件安装:$ apt install openssh
  • 设置远程登录密码:$ passwd
  • 电脑端登录:$ ssh phone_ip -p 8022

电脑上的 ssh 客户端可自行选择,尤其要注意,这里 SSH 服务监听的端口8022
呃,差点忘记了。远程连接之前,先在手机端运行下 sshd 命令启动 SSH 服务。。。

四、高端的命令行游戏

moon-buggy

moon-buggy 是一个非常“酷炫”的命令行版本的跑酷游戏。
虽说游戏界面完全由 ASCII 字符构成,它仍然具备了一个跑酷游戏必需的所有的基本要素。玩下就懂了,蛮神奇的。

《Termux 详解—— Android 平台上完美移植的 Linux 工具集》 moon-buggy GIF

玩儿到后面貌似还有迎面飞来的障碍物,还可以发射武器弹药?记不太清楚了。。。

nsnake

嗯,不多说了,看名字就知道,贪吃蛇。。。
初始的移动速度有点慢,建议在游戏选项里面改一下。

《Termux 详解—— Android 平台上完美移植的 Linux 工具集》 nsnake

bastet

就是大名鼎鼎的俄罗斯方块啦。看图:

《Termux 详解—— Android 平台上完美移植的 Linux 工具集》 bastet

五、oh-my-zsh

手机端输入命令总觉得有点别扭,可能还是不习惯吧。
这时候有个 oh-my-zsh 就显得很有必要了。反正我个人觉得挺好用的,尤其搭配上 zsh-completionszsh-autosuggestionszsh-syntax-highlighting 等插件。
可以对命令行中输入的命令进行语法高亮自动补全等,极大地提高了输入效率。

软件安装

  • oh-my-zsh
$ apt install zsh curl
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
  • zsh-autosuggestions
    $ git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

  • zsh-completions
    $ git clone https://github.com/zsh-users/zsh-completions ~/.oh-my-zsh/custom/plugins/zsh-completions

  • zsh-syntax-highlighting
    $ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

软件配置
编辑 ~/.zshrc 文件,将上述插件添加到 plugins 项后面:

《Termux 详解—— Android 平台上完美移植的 Linux 工具集》 .zshrc

PS:Termux 貌似是没有默认 SHELL 的配置的,所以安装好 oh-my-zsh 以后,打开软件还是直接进入 Bash 界面。
我没有特别去找配置文件的位置,而是用了另外一种方案,,,手动输入 zsh 命令进入,或者,在 ~/.bashrc 文件中加入 zsh 一行内容。。。

六、访问手机文件及 Termux-Api

根据默认的 Android 系统的权限设定,Termux 是无法访问手机存储的。当然可以使用命令进行修改。
只需要输入 termux-setup-storage 命令,即会弹出授权窗口,允许即可。
该命令会在用户主目录下生成 storage 文件夹,里面即包含了到系统主要资源(如手机内存、外置存储卡、Downloads 文件夹、照片等)的链接。

《Termux 详解—— Android 平台上完美移植的 Linux 工具集》 storage

Termux-Api 是 Termux 软件的一个插件,需要安装额外的 APK 包。并且命令行中也需要使用 $ apt install termux-api 命令安装具体的工具。
它提供了一种以 API 的形式直接访问 Android 系统硬件和资源(如相机电池WiFi短信通讯录指纹GPS等)的途径。

《Termux 详解—— Android 平台上完美移植的 Linux 工具集》 Termux-Api

如获取电池状态和 WiFi 连接信息:

《Termux 详解—— Android 平台上完美移植的 Linux 工具集》 battery & wifi

这个感觉可以深挖,用好了可以达到曾经的安卓神器 Tasker 的效果。

今天也不早了,,,就先这样吧。熬,附个软件链接吧。。
Termux and Termux-Api 提取码:i37y
By the way,录了段蛮简陋的视频演示,额,第一次剪。。。

参考资料

Termux Wiki

点赞