本文介绍一种将安卓手机作为linux主机乃至局域网服务器使用的方式。
背景知识
安卓手机使用的Android操作系统脱胎于Linux操作系统,但是他并不是一种Linux(的发行版)。他们之间在系统框架(android多了一层java虚拟机)、底层驱动(android有HAL层)等等方面都有差异,因此两者貌似是无法互相替代的。对于使用者来说,安卓手机既是娱乐工具也是生产力工具,而Linux主机往往是纯粹的生产力工具,在生产力工具的意义上,能够把安卓手机当成Linux主机来使用么?通常来说是不行的,使用Termux的话就未必不行了。
Termux是一个安卓系统上的终端模拟器软件,移植了GNU/Linux系统下的常见软件到Android系统上,他并不是虚拟机之类的东西,只是一个软件。他的所有文件都在此目录下:
代码语言:shell复制/data/data/com.termux/files/usr #在Termux shell中存在"$PREFIX"环境变量指向这个目录
一旦删除手机上的Termux软件,该目录下的一切也会被删除。
Termux并不是一个Linux发行版。但是通过Termux,我们仍然可以使用安卓手机进行一些通常认为是在linux主机上进行的工作:
- 使用 Python 处理数据。
- 在合适的开发环境中编程。
- 用定时工具下载和管理文件和页面。
- 学习Linux命令行的基础知识。
- 作为SSH客户端。
- 同步和备份文件。
参照本文对安卓手机进行配置以后,你可以像访问linux主机一样访问他,无论是通过本地终端连接还是通过ssh进行远程终端连接,用于学习linux的命令行操作是不是很方便呢。
一些来自官方的说明:
Termux 并不是一个Root工具,不会提供Root权限,除非你的技术超强,足以破坏安卓系统的安全策略。 Termux 主要面向非Root用户,所以通常不需要Root设备。 除非你有以下需求: 修改设备的固件。 控制操作系统或内核的参数。 以非交互方式安装或卸载应用。 得到对文件系统的完全读写权限。 直接访问硬件设备例如蓝牙、Wi-Fi模块或者串口通信。 通过chroot在Android上安装Linux发行版。 完全控制你的设备。 如果没有以上需求,尽量不要Root你的设备,Root的坏处一般大于好处。 Android 应用都是在沙盒中运行的,每个应用都有自己的Linux用户id和SELinux标签。Termux也不例外,Termux中的所有程序都使用和Termux同样的用户id运行,用户id也许是
u0_a231
这种格式,并且不能更改。 所有的包(除了必须Root才能用的包),都被去掉了 多用户,setuid/getuid和其它类似的功能。同时 ftpd, httpd 和 sshd 的默认端口也分别被修改为 8021, 8080 和 8022 。 Termux安装系统要求: 安卓版本 7.0 - 12.0 (经验证鸿蒙手机系统2.0也是可以的) CPU架构: AArch64, ARM, i686, x86_64 最少200兆的存储空间。
以下进入正题。
一、termux安装及上手使用
1.从F-Droid下载Termux相关软件包。
Termux | F-Droid - Free and Open Source Android App Repository
Termux:API使Termux具有控制硬件的能力:
Termux:API | F-Droid - Free and Open Source Android App Repository
2.安装完成后,华为手机需要进行设置以避免termux被系统乱杀,保持他运行
代码语言:txt复制 1) 进入设置 - 应用和服务 - 权限管理
点击右上角“特殊访问权限” - 电池优化;
点击“不允许”切换为“所有应用” - Termux - 选择“不允许”。
2)进入设置 - 应用和服务 - 应用启动管理
点击 Termux - 允许后台运行 - 选择手动管理
3)设置 -电池 - 更多电池设置 - 休眠时始终保持网络连接 - 选择“开启”
4)后台任务管理界面 - Termux - 下拉软件上下锁
3.Termix的用户界面非常简单,只有4个元素:
- 终端窗口
就是从app列表中点开termux后看到的命令行窗口,可以输入linux命令,举例如下
代码语言:txt复制 ~ $ cd $PREFIX #切换工作目录,此处为termux的根目录(不是Android的根目录)
.../files/usr $ ls
bin etc include lib libexec opt share tmp var
.../files/usr $ uname -a
Linux localhost 4.14.116 #1 SMP PREEMPT Wed Jun 29 18:30:13 CST 2022 aarch64 Android
终端窗口下方有一些快捷键,有的是系统键盘缺少的键(如Tab),有的是命令行常用的符号(如 / )。
- 上下文菜单
通过在终端窗口任意位置长按来调出,有复制粘贴、重置及退出终端、自定义终端界面等功能。
- 伸缩导航条
从屏幕左侧向内滑动(或先在左侧短按在滑动)可显示。有切换或新建终端会话、呼出系统键盘等功能
- 通知栏
在系统通知栏显示的termux通知项。有退出终端会话(所有终端会话!)、唤醒锁定(即使没有会话运行也会保持termux在后台运行)等功能。
termux也可以安装x11程序和vnc来开启图形界面,本文不详述。
二、termux进阶配置
1.换源(清华源)
进入Termux程序,以下在命令行界面操作
代码语言:shell复制cd $PREFIX/etc/apt
nano sources.list #编辑内容如下
#追加以下行,ctrl o保存,ctrl x退出 :
deb http://mirrors.tuna.tsinghua.edu.cn/termux/apt/termux-main stable main
也可以使用termux-change-repo
进行换源操作。
2.使用pkg升级
pkg
的底层就是apt
,只是运行前会执行一次apt update
,保证安装的是最新版本。
pkg update
pkg upgrade
3.安装配置ssh
代码语言:shell复制whoami #查看登录的用户名,在PC上远程登陆该手机时也是用此用户
pkg install termux-auth
passwd
ifconfig #查看手机wifi IP,此处是192.168.88.243
pkg install openssh
pkg install nmap
pkg install openssl-1.1
pkg install openssl1.1-tool
nmap 192.168.88.243 #在华为P30手机上操作时报错,缺失库文件,进行以下操作
echo "export LD_LIBRARY_PATH=/data/data/com.termux/files/usr/lib/openssl-1.1" >> ~/.bashrc
export LD_LIBRARY_PATH=/data/data/com.termux/files/usr/lib/openssl-1.1
nmap 192.168.88.243 #然后再次执行就正常了
sshd
#然后在同一局域网的pc使用terminal工具ssh连接该手机的wifi ip地址,ssh端口号改为8022 。以下的操作可以在远程shell中执行了
4.通过 Termux 使用 adb 连接手机
代码语言:shell复制pkg install android-tools
adb #测试安装成功
接下来就可以使用adb
命令连接手机了,甚至可以连接本机,详见(37条消息) #Android--无需 ROOT 实现自动化脚本,让你的手机拥有无穷的可能(非宣传 APP)投笔丶从戎的博客-CSDN博客安卓自动化脚本开发
5.apt安装
代码语言:shell复制#以下在termux中输入
apt update
apt upgrade
apt install sl #安装一个搞笑软件sl,用于测试apt的使用
sl #想象一下你把ls命令输错了之后的尴尬
6.termux安装配置http-server,用于下载手机存储空间的文件
http-server
是基于nodejs的一个轻量级HTTP服务,可以将本机的任何目录发布成一个网站服务。
#以下在termux中输入
termux-setup-storage #手机弹出对话框,点击"允许"
ls ~/storage/dcim
apt install nodejs
npm install -g http-server
#在需要公布的目录下执行
http-server #启动成功后,可以看到用于访问手机的url,我这里是http://192.168.88.243:8082
#
7.备份termux文件
如果不只是随便玩一下就卸载Termux,那么备份是 必要的。
代码语言:shell复制cd /data/data/com.termux/files/
tar -zcvf ~/storage/downloads/termux-backup.tar.gz home usr #打包的目标路径,不同手机系统也许会不一样
三、安装ubuntu
在termux里面安装一个全功能的linux,本文以安装ubuntu为例。安装方式参考:Android Termux 安装 Linux 就是这么简单 | 国光
代码语言:shell复制#以下在termux中输入
pkg install proot git python -y #在安装linux系统之前,需要安装proot、git和python环境。
git clone https://gitclone.com/github.com/sqlsec/termux-install-linux #我所在的区域上github有困难,这里使用镜像站的连接
cd termux-install-linux/ubuntu/
python termux-linux-install.py #然后选1安装Ubuntu
cd ~/Termux-Linux/Ubuntu/
./start-ubuntu.sh #正常执行后出现Ubuntu命令提示符光标:root@localhost:~#
#以下在ubuntu中执行。简单测试一下termux中ubuntu的使用
ifconfig #查看手机wifi IP,此处是192.168.88.243
apt-get update
apt-get upgrade
apt-get install iputils-ping #ping默认是没有安装的
ping 192.168.88.254 #ping我的WiFi网关
进入ubuntu时可以看到,当前是以root登录的。然而我所用的华为p30手机是难以破解root的,所以termux只能以普通用户运行,这又是怎么回事呢?因为termux下有个东东叫proot。
PRoot 是一个 chroot, mount –bind, 和 binfmt_misc 的用户空间实现。这意味着,用户不需要任何特殊权限和设置就可以使用任意目录作为新的根文件系统或者通过QEMU运行为其它CPU架构构建的程序。 PRoot 通过伪造系统调用的参数和返回值,可以使程序看起来像运行在root用户下,但它并不提供任何方法来真正的提权。确实需要root权限去修改内核或硬件状态的程序将无法工作。
也可以使用proot-distro
来安装linux发行版,本文不详细介绍。
在termux的ubuntu中查看内核版本,可以看出与termux下直接查看的结果是不一样的。
代码语言:txt复制root@localhost:~# uname -a
Linux localhost 4.14.116 #1 SMP PREEMPT Wed Jun 29 18:30:13 CST 2022 aarch64 aarch64 aarch64 GNU/Linux