计算机‎ > ‎软件‎ > ‎Android‎ > ‎

termux 一个类是 Linux 终端的 Android 应用

发布者:Glory Nong,发布时间:2019年3月31日 23:38   [ 更新时间:2019年3月31日 23:47 ]
硬件方案和系统

我换了新手机 NOKIA 8110 4G 用于将移动网络的信号转化为 wifi 信号。由于这个手机功能有限,做其他事情都特别费劲,我买了平板 Samsung GALAXY Tab A SM-T380CZSECHN wifi 版来补充。

这个平板装载的系统是 Android 8.1.0 版本。我希望可以在这个平板(其实我更希望的是在手机)上面跑一个终端应用,兼容 Linux 的 BASH 的命令,功能要强大,最好不需要 android root 权限的。听说 termux 不错。决定试试。

安装以及权限

官网
https://termux.com/
国外用户推荐下载地址
https://play.google.com/store/apps/details?id=com.termux
国内用户推荐下载地址
https://f-droid.org/packages/com.termux/

在当下,这个软件的信息是

Version 0.66 (66) - Added on 2019-01-29
软件版本 0.66

This version requires Android 5.0 or newer.
需要的系统版本 安卓 5.0 或者更高

It is built and signed by F-Droid, and guaranteed to correspond to this source tarball.

Download APK 210 KiB 下载的 apk 包只有 210 KB 很小
https://f-droid.org/repo/com.termux_66.apk
PGP Signature
https://f-droid.org/repo/com.termux_66.apk.asc

Permissions 需要的系统权限

    android.permission.INTERNET
    android.permission.WRITE_EXTERNAL_STORAGE
    android.permission.WAKE_LOCK
    android.permission.VIBRATE
    android.permission.FOREGROUND_SERVICE
    android.permission.READ_EXTERNAL_STORAGE



第一件事

我看了大部分 termux 相关的帖子。安装完成之后他们就开始教育你怎么修改软件安装源然后安装 ssh 以及其他一大堆眼花缭乱的玩意。然而数据安全才是重中之重,你的应用再怎么牛逼,你的系统再怎么厉害,只要数据不能安全存储和备份,一切都可以杨白劳。



内部存储

下载安装完 termux 后到 系统设置 中的 应用程序 设置,选择 Termux 授予访问存储权限,否则在 termux 终端可能无法访问内部存储。

既然是类 Linux 终端,那么我就特别希望知道所用的系统内核以及文件目录结构。打开 termux 输入
$uname -a
Linux localhost 3.18.71-14354400 #1 SMP PREEMPT Tue Sep 11 23:02:21 KST 2018 armv71 Android
可以看出内核是 Linux 3.18.71 那么文件结构目录是不是和普通 Linux 一样呢?

在 termux 输入
$cd
$pwd
/data/data/com.termux/files/home

普通的 Linux 文件结构目录是
$cd
$pwd
/home/nong

这个结构不一样,看来以后不能想当然的像在 debian 里面那样输入命令。一般的标准 Linux 发行版,比如 debian 是用 /home 放置用户目录。而 termux 是 /data/data/com.termux/files/home 放置用户目录。

通过查看官方维基
https://wiki.termux.com/wiki/Differences_from_Linux
发现确实有区别,而且里面说

The user folder ($HOME) is inside the private file area exposed to Termux as an ordinary Android app. Uninstalling Termux will cause this file area to be wiped - so save important files outside this area such as in /sdcard or use a version control system such as git.

你的 termux 的 $HOME 里面的所有文件,其实是在安卓系统的内部存储,一个叫 termux 的 app 的数据空间文件夹下面。如果你在安卓系统里面卸载了 termux 你的 termux 里面的所有数据都会被删除。

什么意思呢?
你安装了 termux
你在 termux 里面安装 nano
你用 nano 写了很多文档和配置文件
这个时候,你卸载了 termux 了。你的文档和配置文件会被清除,你的 nano 将会被清除,以及 termux 带来的所有东西都会被清除干净。

这个 termux 可以重新安装,这个 nano 也可以重新安装,而且都不花太多时间。但是你花很多时间写的 文档和配置文件,将找不回来。所以,你要么在写的时候,或者说,通过 termux 安装的这些程序 比如 nano 啊 vim 啊。以及很多生成数据的程序,最好再保存数据的时候把位置定在别的地方,比如 sd卡。如果你没有 sd卡 那就安装比如 git 之类的版本控制系统,把数据通过网络备份到别的设备上去。

Prefixed file system
前缀文件系统?


在 Linux 系统中 make install 一个包。那么这个包将会被安装到标准的位置,比如 bin/  etc/  include/  lib/  libexec/  share/  tmp/  var/ 这样。如果你设置了 –prefix 位置值,那么它将会安装到指定的位置。

那 termux 是 Prefixed file system 是不是意味着。。。如果你在 termux 中用默认的方式安装包,比如 nano啊 vim啊,这些包会被强制添加 -prefix 位置值,然后安装到 Prefixed file system 的位置。

Termux expose 用一个特殊的环境变量 PREFIX (类似于configure -prefix参数选项)放置 binaries libraries configs 等等东西。

$echo $PREFIX
/data/data/com.termux/files/usr

$cd $PREFIX
$ls -F
bin/  etc/  include/  lib/  libexec/  share/  tmp/  var/

可以看到 Termux 的 $PREFIX/ 就对应于标准 Linux 的/路径。但是有差别。

Termux 的 $PREFIX/bin  <=>  标准 Linux 环境的 /bin 和 /usr/bin
Termux 的 $PREFIX/etc  <=>  标准 Linux 环境的 /etc
Termux 的 $PREFIX/lib  <=>  标准 Linux 环境的 /lib 和 /usr/lib
Termux 的 $PREFIX/var  <=>  标准 Linux 环境的 /var

页面上还写了 如果你执着于 a classical Linux file system 你可以试试 termux-chroot 自己搞搞。



外部存储

请插入你的 sd卡。

上面说了,你的 termux 的所有文件,其实是在安卓系统的内部存储(private internal storage)的一个叫 termux 的 app 的数据空间文件夹下面。如果你在安卓系统里面卸载 termux 了,你的 termux 里面的所有数据都会被删除。

安卓下还有另外两种存储类型 shared internal storage 和 external storage。

shared internal storage
是手机上所有 app 可以共享的存储空间,放在这个空间内的数据不会因为 app 被卸载掉而被删除掉。
external storage 主要是指外部插入的 SD卡 的存储空间。

Termux 提供了一个名为 termux-tools 的工具集,你可以通过 apt install termux-tools 来安装这些工具。
其中一个是 termux-setup-storage 了,可以让你在 termux 下使用和读写 shared internal storage 和 external storage

确保联网的时候安装
$ping 8.8.8.8
如果安装不顺利,可以往下看,软件包管理和更新源,这部分再回来从这里继续,下面是安装命令
$apt install termux-tools

先执行一下列出目录
$ls

执行
$termux-setup-storage
弹出存储授权申请,点击授权

然后你可以再 ls 一下看看有什么变化
$ls
storage
多出了一个 storage 了,看看里面有什么
$ls storage/
dcim  downloads  external-1  movies  music  pictures  shared

安装 tree 观察一下这个 storage 文件夹。
$apt install tree
$tree storage
storage/
├── dcim -> /storage/emulated/0/DCIM
├── downloads -> /storage/emulated/0/Download
├── external-1 -> /storage/1698-ADCC/Android/data/com.termux/files
├── movies -> /storage/emulated/0/Movies
├── music -> /storage/emulated/0/Music
├── pictures -> /storage/emulated/0/Pictures
└── shared -> /storage/emulated/0

7 directories, 0 files

termux-setup-storage 在 storage 下建立了 7 个符号链接,

external-1 连接 /storage/1698-ADCC/Android/data/com.termux/files 这个是 termux-setup-storage 在 sd卡上建立的 termux 文件夹(termux private folder)的。
你把数据存到 /data/data/com.termux/files/home/storage/external-1 下面,实际上是把数据写进了 sd卡。比如你用 nano 写一个 test.txt 文件保存到 /data/data/com.termux/files/home/storage/external-1 下面 实际上就是写进了 sd卡。
你把 sd卡 插到别的设备上去,里面的数据的具体路径就是 sdcard/Android/data/com.termux/files 你可以找到刚才保存的 test.txt 文件。

shared 指向 /storage/emulated/0 即 shared internal storage 的根目录。
其他几个分别指向 shared 下的功能目录,比如:相册、音乐、电影、下载等。
存放数据到 shared internal storage 是会占用设备的内部存储的,不要随意占用内部存储存放数据,因为安装应用是占用内部存储的,存放数据建议优先使用外部存储,也就是sd卡。

现在你可以用 termux 安装的 vim 或者 emacs 安全的生产和存取数据文件了。他们不会随着 termux 的卸载而消失。

存储数据到 external storage 的例子
$cd storage/external-1
$vi aaa.txt
0101000111

存储数据到 shared internal storage 的例子
$cd storage/shared/Download/
$vi bbb.txt
1010111000



我觉得文章已经够长了。下面的内容分另外一个 post 发吧。不然写着累,看着也累。

地址是
termux-one-of-android-app-like-linux-terminal-2
标题是
termux 一个类是 Linux 终端的 Android 应用 2