无需root在安卓上模拟Linux终端:Termux

今天无意间发现了一款安卓终端模拟器:Termux,相比其他普通的终端模拟器,它的独特之处在于在软件中提供了一套 Linux 环境,也就是说,你可以在这个终端里进行一些真实 Linux 终端中的操作,包括但不限于 apt 包管理、安装 LNMP Web 环境、程序开发、编译、内网穿透等等。最最重要的是,这款软件在正常使用时不需要 root,不需要 root,不需要 root,相比之前我介绍的一款安卓 Linux 模拟软件(需要root):Linux_Deploy,这款软件可以说使用成本更低了。

一、下载安装

Termux 的网站地址是:https://termux.com/,官网中给出了两种下载方式:

Google Play    F-Droid

我自己的下载服务器地址:

Termux_0.60.apk

下载并安装,第一次打开时会联网下载所需要的环境,然后就可以使用啦。

Termux 软件中的 Linux 环境用的是 apt 包管理软件,因此可以用 apt 或者 apt-get 或者 pkg 命令来管理应用。

二、模拟按键

在 Linux 中我们经常会用到 tab ctrl esc alt 等等特殊键,在手机上的输入法里可没有这些键,其实 Termux 软件可以用一些快捷键来模拟这些特殊的键,官方英文文档见这里

Termux使用音量减小按钮来模拟Ctrl键。例如,Volume down+L在触摸键盘上按下}会发送与Ctrl+L在硬件键盘上按下相同的输入。

使用Ctrl与键组合的结果取决于使用哪个程序,但对于许多命令行工具,以下捷径可用:

  • Ctrl + A →将光标移动到行首
  • Ctrl + C →中止(发送SIGINT到)当前进程
  • Ctrl + D →注销终端会话
  • Ctrl + E →将光标移动到行尾
  • Ctrl + K →从光标删除到行尾
  • Ctrl + L →清除终端
  • Ctrl + Z →挂起(发送SIGTSTP到)当前进程
  • 音量提高键也可以作为产生特定输入的特殊键:
    • 音量增加+ E →退出键
    • 音量增加+ T →Tab键
    • 音量增加+ 1 →F1(和音量增加+ 2→F2等)
    • 音量增加+ 0 →F10
    • 音量增加+ B →Alt + B,使用readline时返回一个单词
    • 音量增加+ F →Alt + F,使用readline时转发一个单词
    • 音量增加+ X →Alt + X
    • 音量增加+ W →向上箭头键
    • 音量增加+ A →左箭头键
    • 音量增加+ S →向下箭头键
    • 音量增加+ D →向右箭头键
    • 音量增加+ L →| (管道字符)
    • 音量加+ H →〜(代字符字符)
    • 音量增加+ U →_(下划线)
    • 音量提高+ P →上一页
    • 音量增加+ N →下一页
    • 音量增加+。→Ctrl + \(SIGQUIT)
    • 音量增加+ V →显示音量控制
    • 音量增加+ Q →显示额外的按键视图

另外,Termux 提供了一个扩展键盘行,打开的方法是:volume up + Q,即音量增加键+ Q,个人感觉还是这个扩展键盘行实用。

三、Termux 中的 Linux 环境

一般 Linux 的目录是这样的

sunriseydy@Sunrise:~$ ls /
bin   dev  home  lib    media  opt    proc  run   snap  sys  usr  www
boot  etc  init  lib64  mnt    patch  root  sbin  srv   tmp  var

而 Termux 由于是在软件目录下安装的一个 Linux 环境,因此目录结构有所变化

bash-4.4$ cd ~ && pwd
/data/data/com.termux/files/home

它的路径并不是以/开始,而是以软件安装路径开始,也就是说软件安装路径才是它的根目录。Termux 引入了一个特殊的环境变量PREFIX

bash-4.4$ echo $PREFIX
/data/data/com.termux/files/usr
bash-4.4$ ls $PREFIX
bin      etc      include  lib      libexec  share    tmp      var

可以看到这个目录结构就和普通的 Linux 目录结构相似,其实在 Termux 中,$PREFIX就是普通 Linux 中的/。因此在使用命令时要注意这点。同样的,也有一个$HOME来替代~

不仅仅是目录结构,在 Termux 终端中,你可以直接运行一些需要 root 权限的操作,例如apt update,而如果你输入su或者su root,应用会申请手机的 root 权限,一旦获取 root 权限切换到 root 用户时,此时的 Termux 就只是一个终端模拟器,运行的是安卓的 shell,而不是 Termux 中的 Linux shell。

四、读写内置存储

由于安卓的限制,在 Termux 终端中要想访问内置存储或者外置存储,就要获得“读写手机存储”的权限。在终端中输入

termux-setup-storage

如果提示没有找到该命令,则先安装termux-tools:apt install termux-tools

运行该命令后手机会弹出权限请求框,点击允许,这样 Termux 就有了访问内置存储和外置存储的权限了。有了权限之后,Termux 会在$HOME~目录下创建一个storage目录

bash-4.4$ ls $HOME
storage
bash-4.4$ ls $HOME/storage/
dcim       downloads  movies     music      pictures   shared
bash-4.4$ ls -l $HOME/storage/
total 24
lrwxrwxrwx    1 u0_a457  u0_a457         26 Feb 23 13:54 dcim -> /storage/emulated/0/DCIM
lrwxrwxrwx    1 u0_a457  u0_a457         30 Feb 23 13:54 downloads -> /storage/emulated/0/Download
lrwxrwxrwx    1 u0_a457  u0_a457         30 Feb 23 13:54 movies -> /storage/emulated/0/Movies
lrwxrwxrwx    1 u0_a457  u0_a457         30 Feb 23 13:54 music -> /storage/emulated/0/Music
lrwxrwxrwx    1 u0_a457  u0_a457         30 Feb 23 13:54 pictures -> /storage/emulated/0/Pictures
lrwxrwxrwx    1 u0_a457  u0_a457         22 Feb 23 13:54 shared -> /storage/emulated/0

可以看到storage目录下创建了一些和 sdcard(s) 相应目录的符号链接。如果手机装的有 SD 卡,那么还会有一个指向 SD 卡的符号链接。

五、开启 sshd 访问

如果想远程访问 Termux 的 Linux 环境,可以开启 sshd 服务器,由于 sshd 包含在 openssh 中,因此要先安装 openssh

bash-4.4$ apt install openssh

然后输入 sshd即可运行 sshd 服务。

需要注意的是,ssh 的端口是8022,并且不支持用户名+密码登陆,只能通过密钥登陆,因此还需要运行$ ssh-keygen
命令来生成密钥

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/data/data/com.termux/files/home/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /data/data/com.termux/files/home/.ssh/id_rsa.
Your public key has been saved in /data/data/com.termux/files/home/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:LPYItdr2u/I1lQmZ7P6DJe26smeHgqfnw3yWxD79Xcs u0_a457@localhost
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|         . o     |
|      .   =      |
|     . o . . o   |
|    . + S...+    |
|     = + .+.o    |
|    . ++.o+O    .|
|     .o.O.@o= ..o|
|      .BB%o=.o.E.|
+----[SHA256]-----+
$ cd ~/.ssh && ls
authorized_keys  id_rsa.pub
id_rsa

可以看到在 $HOME 目录下的 .ssh 目录中有刚刚生成的密钥文件:id_rsa(私钥) id_rsa.pub(公钥)。下一步就是把公钥文件重命名为 authorized_keys

cp id_rsa.pub authorized_keys

然后将私钥文件拷贝出来,至于拷贝的方法可以将私钥文件复制到手机的内置存储中

cp id_rsa ~/storage/shared/id_rsa

这样就可以传到电脑上了。如果用 Putty 登陆还要将 私钥文件改为 Putty 的私钥文件,具体方法点这里。如果直接用 ssh 命令登陆,则先将私钥文件的权限设为600后再登陆(假设我的手机 IP 地址为 192.168.123.244)

sunriseydy@Sunrise:~$ chmod 600 id_rsa
sunriseydy@Sunrise:~$ ssh 192.168.123.244 -p 8022 -i id_rsa
Welcome to Termux!

Wiki:            https://wiki.termux.com
Community forum: https://termux.com/community
IRC channel:     #termux on freenode
Gitter chat:     https://gitter.im/termux/termux
Mailing list:    termux+subscribe@groups.io

Search packages:   pkg search 
Install a package: pkg install 
Upgrade packages:  pkg upgrade
Learn more:        pkg help
bash-4.4$

P.S. sshd_config的路径为$PREFIX/etc/ssh/sshd_config

总结

总的来说这款软件简直神器,不过它和 Linux_Deploy 各有各的特点,各位极客们可以根据自己的需要来安装。不过要注意的是,用 Termux 的话把 Termux 卸载之后数据就都没了,因此在折腾的时候记着备份 Termux 的数据。

参考链接

Hello,Termux

The Termux Wiki


版权说明:
作品 sunriseydy 采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
文章内容如未说明均为原创,欢迎转载,但请注明原作者(sunriseydy)和原文链接(https://blog.sunriseydy.top/technology/mobilephone/linux-terminal-on-android-via-termux-without-root/)
部分来自互联网的文章,如有侵权,请联系我,24小时内删除,谢谢

分享到微博 继续阅读“无需root在安卓上模拟Linux终端:Termux”

" target="_blank">分享到QQ 微信赞赏 点赞 0

“无需root在安卓上模拟Linux终端:Termux”的一个回复

  1. 教程挺详细的,帮助我入门了,灰常感谢!

评论一下呗亲

电子邮件地址不会被公开。 必填项已用*标注