安装 termux
从这里下载 termux
adb install ~/Downloads/termux-app_v0.118.0+github-debug_arm64-v8a.apk
安装 ssh 服务
请求权限时,总是选择默认选项,不让修改任何设置
pkg install root-repo
pkg upgrade
pkg install openssh
passwd # 设置好密码
sshd # 启动服务
链接 ssh 服务
ssh <ip of android device> -p 8022
# 使用刚刚设置的密码
# scp 本地文件路径 远程主机用户名@远程主机名或IP:远程文件保存的位置路径
# scp local_file remote_username@remote_ip:remote_folder
# scp -P 8022 .ssh.tar.gz 192.168.1.132:~/
# scp -r 本地文件夹路径 远程主机用户名@远程主机名或IP:远程文件夹保存的位置路径
# scp -r local_folder remote_username@remote_ip:remote_folder
扩展
# 批量安装需要的包
pkg add git wget curl
termux-change-repo # 更换源
pkg update
# 发起手机存储的请求权限
termux-setup-storage
# proot可以为手机没有root的设备模拟root环境,不是真正的 root
pkg install proot
termux-chroot
# tsu 是su的 Termux 版本,是一个真正的 root 权限,root设备才能用,操作有风险
pkg install tsu
tsu # 切换 root用户
# 备份
termux-setup-storage
cd /data/data/com.termux/files
tar -zcf /sdcard/termux-backup.tar.gz home usr
# 不要将备份文件存储在 Termux 私有目录中,因为从设置中清除 Termux 数据后,这些目录也将被删除
# 恢复
termux-setup-storage
cd /data/data/com.termux/files
tar -zxf /sdcard/termux-backup.tar.gz --recursive-unlink --preserve-permissions
# 操作完成重启 Termux 即可恢复数据。
termux-api
从这里下载并安装termux-api最新匹配版本的 app。安装后给出需要的所有权限。
pkg install termux-api
termux-media-player
~ $ termux-media-player help
Usage: termux-media-player cmd [args]
help Shows this help
info Displays current playback information
play Resumes playback if paused
play <file> Plays specified media file
pause Pauses playback
stop Quits playback
termux-battery-status
~ $ termux-battery-status
{
"present": true,
"technology": "Li-ion",
"health": "GOOD",
"plugged": "PLUGGED_AC",
"status": "FULL",
"temperature": 20.0,
"voltage": 4372,
"current": 734000,
"percentage": 100,
"level": 100,
"scale": 100,
"charge_counter": 2200000
}
termux-call-log
~ $ termux-call-log
[
{
"name": "",
"phone_number": "522",
"type": "OUTGOING",
"date": "2025-12-22 16:54:23",
"duration": "00:36",
"sim_id": "89860054177105383539"
},
]
termux-dialog
使用不同的小部件获取用户输入
支持的组件:
confirm - 显示确认对话框
[-i 提示] 文字提示 (可选)
[-t 标题] 设置标题 (可选)
checkbox - 使用复选框选择多个值
[-v ",,,"] 要使用的逗号分隔值 (必须)
[-t 标题] 设置标题 (可选)
counter - 在指定范围内选择一个数字
[-r 最小,最大,初始值] 要使用的 (3) 个数字的逗号分隔符 (可选)
[-t 标题] 设置标题 (可选)
date - Pick a date
[-t 标题] 设置标题 (可选)
[-d "dd-MM-yyyy k:m:s"] 日期小部件输出的 SimpleDateFormat 模式 (可选)
radio - 从单选按钮中选择一个值
[-v ",,,"] 要使用的逗号分隔值 (必须)
[-t 标题] 设置标题 (可选)
sheet - 从滑动底部表中选择一个值
[-v ",,,"] 要使用的逗号分隔值 (必须)
[-t 标题] 设置标题 (可选)
spinner - 从下拉微调器中选择一个值
[-v ",,,"] 要使用的逗号分隔值 (必须)
[-t 标题] 设置标题 (可选)
speech - 录音
[-i hint] text hint (可选)
[-t 标题] 设置标题 (可选)
text - 输入文本(如果未指定小部件,则为默认值)
[-i hint] 文字提示 (可选)
[-m] 多行而不是单行 (可选)*
[-n] 只能输入数字 (可选)*
[-p] 输入密码 (可选)
[-t 标题] 设置标题 (可选)
* [-m] 和 [-n] 不能一起使用!
time - 选择时间值
[-t 标题] 设置标题 (可选)
termux-download
他会调用安卓内置下载管理器下载
termux-download -d [描述] -t [标题] -p [目标路径] URL
termux-job-scheduler
安排脚本以指定的时间间隔运行
用法: termux-job-scheduler [选项]
-p/--pending 列出待处理的作业
--cancel-all 取消所有挂起的作业
--cancel 取消指定的作业 ID 并退出
调度选项:
-s/--script path 要调用的脚本的路径
--job-id int 作业 ID(将覆盖任何以前具有相同 ID 的作业)
--period-ms int 大约每周期毫秒安排一次作业(默认 0 表示一次)。
请注意,自 Android N 起,最短周期为 900,000 毫秒(15 分钟)。
--network text 仅在此类网络可用时运行(默认为any): any|unmetered|cellular|not_roaming|none
--battery-not-low boolean 仅在电池电量不低时运行,默认为 true(至少 Android O)
--storage-not-low boolean 仅在存储不低时运行,默认false(至少Android O)
--charging boolean 只在充电时运行,默认false
--persisted boolean 如果作业在重新启动后仍然存在,默认为 false
--trigger-content-uri text (至少安卓 N)
--trigger-content-flag int default 1, (至少安卓 N)
termux-keystore
支持这些命令:
list [-d]
delete <别名>
generate <别名> [-a alg] [-s 大小] [-u 有效期]
sign <别名> <算法>
verify <别名> <算法> <签名>
list:列出存储在密钥库中的密钥。
-d 详细结果(包括关键参数)。
delete:从密钥库中永久删除指定的密钥。
alias 要删除的密钥的别名。
generate:在硬件密钥库中创建一个新密钥。
alias 密钥别名
-a alg 要使用的算法(“RSA”或“EC”)。 默认为 RSA。
-s size 要使用的密钥大小。 对于 RSA,选项为 2048、3072
和 4096。对于 EC,选项为 256、384 和 521。
-u validity 用户有效期以秒为单位。 省略以禁用。
启用后,密钥只能用于设备解锁后指定的持续时间。 后持续时间已过,用户需要重新锁定并再次解锁设备以使用此密钥。
sign:使用给定的密钥签名,数据从标准输入和签名输出到标准输出。
alias 用于签名的密钥的别名
algorithm 要使用的算法,例如 'SHA256withRSA'。 这应该匹配密钥的算法。
verify:验证签名。 从标准输入读取数据(原始文件)。
alias 用于验证的密钥的别名
algorithm 用于签署此数据的算法
signature 用于验证的签名文件
termux-location
获取地理位置
- 部分手机会显示:“termux:api 无响应”
usage: $SCRIPTNAME [-p 提供者] [-r 请求]
-p provider 位置提供者 [gps/network/passive] (默认: gps)
-r request 提出的要求 [once/last/updates] (默认: once)
termux-media-player
info 显示当前播放信息
play 如果暂停则继续播放
play <文件> 播放指定的媒体文件
pause 暂停播放
stop 退出播放
termux-media-scan
扫描指定文件并将其添加到“媒体内容提供商”
termux-media-scan [-v] [-r] file [文件...]
-r 递归扫描目录
-v 详细模式
termux-microphone-record
使用设备上的麦克风录制音频(又名Termux牌录音机)
-d 使用默认值开始录音
-f <文件> 开始录音到特定文件
-l <限制秒数> 以指定的限制开始录音(以秒为单位,0 无限制)
-e <编码器> 使用指定的编码器开始录音(aac、amr_wb、amr_nb)
-b <比特率> 以指定的比特率开始录音(以 kbps 为单位)
-r <采样率> 以指定的采样率开始录音(以赫兹为单位)
-c <数字> 使用指定的通道数开始录音(1、2、...)
-i 获取有关当前录音的信息
-q 退出录音
termux-nfc
从/向 NDEF 标签读取/写入数据
-r, 读取 short,从NFC中读取短信息 full,从NFC中读取完整信息
-w, 在NFC上写信息
-t, NFC的文本
termux-notification-channel
创建或删除通知(仅支持Android 8.0+)
termux-notification-channel -d channel-id
termux-notification-channel channel-id channel-name
使用 -d 删除通知。
创建通知需要通知 ID 和通知名称。
该名称将在选项中可见,该 ID 用于在该特定通知上发送通知。
再次创建具有相同 id 的通知将更改名称。
创建与已删除通知具有相同 id 的通知将恢复已删除通知的用户设置。
使用 termux-notification --channel channel-id 在自定义通知上发送通知。
termux-notification-list
显示当前显示的通知。
termux-notification-list
termux-notification-remove
删除使用 termux-notification --id 的通知。
termux-notification <ID>
termux-notification
显示系统通知。
--action action 按下通知时执行的操作
--alert-once 编辑通知时不提醒
--button1 text 在第一个通知按钮上显示的文本
--button1-action action 在第一个通知按钮上执行的操作
--button2 text 在第二个通知按钮上显示的文本
--button2-action action 在第二个通知按钮上执行的操作
--button3 text 在第三个通知按钮上显示的文本
--button3-action action 在第三个通知按钮上执行的操作
-c/--content content 通知中显示的内容。 将优先于标准输入。 如果内容没有作为参数或标准输入传递,那么会有 3 秒的延迟。
--channel channel-id 指定应发送此通知的通知通道 ID。在低于 8.0 的 Android 版本上,这是无操作的。 使用 termux-notification 频道创建自定义频道。如果频道 id 无效,则不会发送通知。
--group group 通知组(同一组的通知一起显示)
--help-actions 显示actions帮助
-i/--id id 通知 id(将覆盖任何以前具有相同 id 的通知)
--icon icon-name 设置状态栏中显示的图标。 在 https://material.io/resources/icons/ 上查看可用的图标(默认图标:event_note)
--image-path path 将在通知中显示的图像的绝对路径
--led-color rrggbb 闪烁 LED 的颜色为 RRGGBB(默认值:none)
--led-off milliseconds LED 在闪烁时关闭的毫秒数(默认值:800)
--led-on milliseconds LED 在闪烁时亮起的毫秒数(默认值:800)
--on-delete action 清除通知时执行的操作
--ongoing 固定通知
--priority prio 通知优先级(高/低/最大/最小/默认)
--sound 用通知播放声音
-t/--title title 要显示的通知标题
--vibrate pattern 振动模式,逗号分隔,如 500,1000,200
--type type 要使用的通知样式(默认/媒体)媒体操作(可与 --type "media" 一起使用)
--media-next 在 media-next 按钮上执行的操作
--media-pause 在媒体暂停按钮上执行的操作
--media-play 在媒体播放按钮上执行的操作
--media-previous 在 media-previous 按钮上执行的操作
actions 用法
此帮助指的是 --action、--on-delete、--button-1-action 和 --media-next 等选项的参数。
所有这些命令都将一个动作字符串作为它们的参数,它被馈送到`dash -c`。
使用动作时必须牢记一些重要的事情:
您应该使用在终端之外执行操作的操作,例如 --action "termux-toast hello"。
任何输出到终端的东西都是无用的,所以输出应该被重定向(--action "ls > ~/ls.txt")或以不同的方式显示给用户(--action "ls|termux-toast" )。
在单个操作中运行多个命令就像:
--action "command1; command2; command3"
或者"
--action "if [ -e file ]; then termux-toast yes; else termux-toast no; fi".
对于更复杂的事情,您应该将脚本放在一个文件中,使其可执行,并将其用作操作:
--action ~/bin/script
该操作在不同的环境(不是子shell)中运行。 因此,您的环境丢失了(最明显的是 $PATH),并且 ~/.profile 也没有来源。 因此,如果您需要 $PATH,您应该:
- 如果操作是脚本,请在脚本中明确设置 (例如: export PATH="$HOME/bin:\$PATH")
- 或使用类似的东西: --action "bash -l -c 'command1; command2'").
在 Android N 或更高版本上,您可以在您的操作中使用特殊变量 $REPLY 来使用 Android 的直接回复功能。
这会提示用户直接在通知中输入一些文本,然后将其替换为您的操作。
- termux-notification --button1 "答案" --button1-action "termux-toast \\$REPLY"
将调用该操作:
- termux-toast "用户输入的文本"
小心为单引号或双引号正确转义 shell 命令,例如:
--button1-action 'something $REPLY' or --button1-action "something \\$REPLY"
termux-saf-create
在Termux:API管理的文件夹中创建文件。
-t 指定文件的 mime 类型。 其他应用程序需要 MIME 类型来识别内容
例如 一段录像。 如果未指定,则假定为“application/octet-stream”,即原始二进制数据。返回您可以使用 termux-saf-read 和 termux-saf-write 读取和写入文件的 URI。您可以明确指定 mime 类型或根据文件扩展名猜测它。作为文件夹 URI,您可以使用 由 termux-saf-dirs 或 termux-saf-ls.Android 列出的目录的 URI 不允许创建具有相同名称的文件,因此如果具有该名称的文件或文件夹已经存在,则名称可能会更改。您 可以使用 termux-saf-stat 和返回的 URI 来获取它真正给出的名称。
termux-saf-dirs
与 termux-saf-ls 相同的格式列出您提供给 Termux:API 的所有目录。
这意味着这列出了包含您可以使用其他 termux-saf-*`` 命令访问的所有目录的“目录”。
URI 可以与其他 termux-saf-* 命令一起使用,以创建文件和文件夹并列出目录内容。
请参阅 termux-saf-managedir 以授予 Termux:API 对文件夹的访问权限。
termux-saf-ls
列出有URI 标识的文件夹中的文件和文件夹。
您可以通过以下方式获取文件夹 URI:
- 使用 termux-saf-ls 列出文件夹
- 使用 termux-saf-managedir 授予 Termux:API 对文件夹的访问权限
- 使用 termux-saf-dirs 列出您授予 Termux:API 访问权限的文件夹
- 使用 termux-saf-mkdir 创建文件夹
该列表以 JSON 数组的形式返回,每个条目有一个 JSON 对象。
对象具有键:
- 'name' 用于人类可读的名称
- 'uri' 表示你可以与其他 termux-saf-* 命令一起使用的 URI
- 'type' 代表 mime 类型
- 'length' 表示大小(如果它是一个文件)
您可以通过特殊的 mime 类型“vnd.android.document/directory”识别文件夹。
termux-saf-managedir
打开系统自带文件管理并让您指定 Termux:API 可以访问的文件夹。
然后,您可以使用 termux-saf-* 实用程序来管理该文件夹中的内容。
返回标识目录的 URI,此 URI 可与其他 termux-saf-* 命令一起使用以创建文件和文件夹并列出目录内容。
如果您关闭文件管理器,则会返回一个空字符串。
您可以使用 termux-saf-dirs 列出您授予 Termux:API 访问权限的所有目录。
termux-saf-mkdir
通过 SAF 创建目录,这与 termux-saf-create 的行为类似,仅适用于目录。
termux-saf-mkdir <目录名>
termux-saf-read
从 URI 标识的文件中读取数据并将数据写入标准输出。
您可以使用管道处理数据或将其重定向到文件中以制作本地副本。
请参阅 termux-saf-list 以获取文件的 URI。
termux-saf-rm
删除指定 URI 处的文件或文件夹。 有关详细信息,请参阅其他 termux-saf-* 命令。
成功返回 0,如果无法删除文件或文件夹,则返回 1,如果发生另一个错误,则返回 2。
termux-saf-rm <文件&文件夹名字>
termux-saf-stat
将文件或文件夹信息作为 JSON 对象返回,格式与 termux-saf-ls 中的条目相同。
termux-saf-stat <文件&文件夹名字>
termux-saf-write
将标准输入写入由 URI 标识的现有文件。覆盖写入
termux-saf-write <文件>
termux-sensor
获取有关传感器类型以及实时数据
-a, all 聆听所有传感器(警告!可能对电池有影响)
-c, cleanup 清理(释放传感器资源)
-l, list 显示可用传感器列表
-s, sensors [,,,] 监听的传感器(可以只包含部分名称)
-d, delay [毫秒] 接收新传感器更新前的延迟时间(以毫秒为单位)
-n, limit [数字] 读取传感器的次数(默认:连续)(分钟:1)
termux-share
-a action 对共享内容执行的操作:
edit(编辑)/send(发送)/view(查看) (默认:view)
-c content-type 要使用的内容类型(默认值:从文件扩展名中猜测,标准输入为 text/plain)
-d 如果选择了一个而不是显示选择器,则共享给默认接收器
-t title 用于共享内容的标题(默认值:shared file name)
termux-sms-list
用法: termux-sms-list [-d] [-l 限制] [-n] [-o 抵消] [-t 输出] [-c] [-f 数字]
-l 限制短信列表中的偏移量(默认值:$PARAM_LIMIT)
-o 短信列表中的偏移量(默认值:$PARAM_OFFSET)
-t 键入要列出的消息类型(默认值:$PARAM_TYPE):$SUPPORTED_TYPES
-c 对话列表(每个对话的唯一项目)
-f number 定位消息的编号
-n(过时)显示电话号码
-d(过时)显示创建消息的日期
termux-sms-send
用法: termux-sms-send -n 电话号码[,号码2,号码3,...] [-s 卡1/卡2] [文字]
向指定的收件人号码发送 SMS 消息。 要发送的文本要么作为参数提供,要么从标准输入中读取(如果没有给出参数)。
-n number(s) 收件人号码 - 用逗号分隔多个号码
-s slot 要使用的 sim 插槽 - 如果插槽号无效或缺少 READ_PHONE_STATE 权限,则失败
termux-speech-to-text
termux-speech-to-text
其实还能加个进度条:
termux-speech-to-text -p
termux-storage-get
向系统请求文件并输出到指定文件。
termux-storage-get <文件>
termux-telephony-call
用人话讲就是打电话
termux-telephony-call <电话号码(例如:114514)>
termux-toast
在 Toast 中显示文本(短暂弹出)。
Toast 文本要么作为参数提供,要么从标准输入中读取
如果没有给出参数。 参数将优先于标准输入。
如果 toast 文本没有作为参数或标准输入传递,那么会有
延迟 3 秒。
-b 设置背景颜色~~(默认:gay)~~(默认:gray(灰色))
-c 设置文本颜色(默认:white(白色))
-g 设置吐司的位置:[top(上)、middle(中),bottom(下)](默认值:middle)
-s 只展示亿会儿吐司
注意:颜色可以是标准名称(即红色)或 6 / 8 位十六进制值(即“#FF0000”或“#FFFF0000”),其中 order 为 (AA)RRGGBB。 无效颜色将恢复为默认值
termux-torch
打开/关闭手电筒
termux-torch [on(开)/off(关)]
termux-tts-engines
获取有关可用文本转语音 (TTS) 引擎的信息。 可以使用 -e 选项将引擎的名称提供给 termux-tts-speak 命令。
termux-tts-speak
用人话讲就是调用系统TTS引擎来语音转文字
用法: termux-tts-speak [-e engine] [-l language] [-n region] [-v variant] [-p pitch] [-r rate] [-s stream] [text-to-speak]
-e engine 要使用的 TTS 引擎(参见 termux-tts-engines)
-l language 语言(部分引擎可能不支持)
-n region 说话的语言区域
-v 语言的变体变体
-p 在语音中使用的音高。 1.0 是正常音高,较低的值会降低合成语音的音调,较大的值会增加它。
-r 要使用的语速。 1.0 是正常语速,较低的值会减慢语音(0.5 是正常语速的一半),而较大的值会加速语音(2.0 是正常语速的两倍)。
-s 要使用的流音频流(默认:NOTIFICATION),以下之一:ALARM、MUSIC、NOTIFICATION、RING、SYSTEM、VOICE_CALL
termux-usb
列出或访问 USB 设备,无法直接访问USB设备
-l 列出可用USB设备
-r 如有必要,显示权限请求对话框
-e command 使用引用设备的文件描述符作为参数执行指定的命令(除非给出 -E 参数)
-E 将文件描述符作为 env var 而不是作为命令行参数传输
termux-vibrate
用人话讲就是移动版本的筋膜枪
-d duration 以毫秒为单位振动的持续时间(默认值:1000)
-f 即使在静音模式下也强制振动(社死)
termux-wallpaper
更改你的手机壁纸。 不是Termux背景
-f <file> 从文件设置壁纸
-u <url> 从URL资源设置壁纸
-l 为锁屏设置壁纸(Android 7及更高版本)
termux-wifi-connectioninfo
获取有关当前 wifi 连接的信息。
termux-wifi-connection-info
你没看错,它什么参数都不用加
termux-wifi-enable
打开/关闭 WIFI
termux-wifi-enable [true(打开)/false(关闭)]
termux-wifi-scaninfo
获取有关wifi 扫描的信息。
termux-wifi-scaninfo
开发环境
Termux 可以完美的运行 C、Python、Java、PHP、Ruby等开发环境
编辑器
# 汉字乱码
vim .vimrc
# set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1
# set enc=utf8
# set fencs=utf8,gbk,gb2312,gb18030
source .vimrc
PHP
# apache
pkg install apache2
apachectl start
# http://127.0.0.1:8080
# $PREFIX/share/apache2/default-site/htdocs/index.html
apachectl restart
apachectl stop
# 配置 PHP解析
# pkg install php-apache
# $PREFIX/etc/apache2/httpd.conf
# 文件末尾添加以下行
# LoadModule php7_module /data/data/com.termux/files/usr/libexec/apache2/libphp7.so
# <FilesMatch \.php$>
# SetHandler application/x-httpd-php
# </FilesMatch>
# 查找修改配置默认首页
# <IfModule dir_module>
# DirectoryIndex index.php index.html
# </IfModule>
# apachectl restart
# Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
# AH00013: Pre-configuration failed
# 注释行 LoadModule mpm_worker_module libexec/apache2/mod_mpm_worker.so
# 启用行 LoadModule mpm_worker_module libexec/apache2/mod_mpm_prefork.so
# echo '<?php phpinfo(); ?>' > $PREFIX/share/apache2/default-site/htdocs/index.php
# http://127.0.0.1:8080
# 数据库
pkg install mariadb
cd /data/data/com.termux/files/usr/etc/
mkdir my.cnf.d
mysql_install_db # 初始化 mysql.user 表
nohup mysqld &
ps aux|grep mysql
mysql -u $(whoami) # 登录 Termux 用户
use mysql;
set password for 'root'@'localhost' = password('你设置的密码');# 修改 root 密码的 SQL语句
grant all on *.* to root@'%' identified by 'P@ssw0rd' with grant option; # 允许root远程访问
flush privileges;
quit;
# mysql_secure_installation # 以后可以使用这个命令设置密码
# nginx
pkg install nginx
nginx -t # 测试文件是否正常
nginx # 启动 nginx 服务 http://127.0.0.1:8080
pgrep nginx # 查看 nginx 进程PID号
nginx -s reload # 重启服务
nginx -s stop # 停止服务
# 解析PHP
pkg install php-fpm
vim $PREFIX/etc/php-fpm.d/www.conf
# 搜索 listen = /data/data/com.termux/files/usr/var/run/php-fpm.sock
# 改为 listen = 127.0.0.1:9000
vim $PREFIX/etc/nginx/nginx.conf
# worker_processes 1;
# events {
# worker_connections 1024;
# }
# http {
# include mime.types;
# default_type application/octet-stream;
# sendfile on;
# keepalive_timeout 65;
# server {
# listen 8080;
# server_name localhost;
# location / {
# root /data/data/com.termux/files/usr/share/nginx/html;
# index index.html index.htm index.php;
# }
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# root /data/data/com.termux/files/usr/share/nginx/html;
# }
# location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /data/data/com.termux/files/usr/share/nginx/html$fastcgi_script_name;
# include fastcgi_params;
# }
# }
# }
echo '<?php phpinfo(); ?>' > $PREFIX/share/nginx/html/info.php
php-fpm # 启动 php-fpm 服务
nginx # 启动 nginx 服务
# pkg install php
# php -S 0.0.0.0:8888 -t www/
nodejs
pkg install nodejs-lts
npm install -g http-server
http-server # 启动 http-server 服务
# Cannot read property 'length' of undefined
vim $PREFIX/lib/node_modules/npm/node_modules/worker-farm/lib/farm.js
# 查找 , maxConcurrentWorkers : require('os').cpus().length
# 改为 , maxConcurrentWorkers : (require('os').cpus() || { length: 1}).length
python3
pkg install python -y
python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
安装其它linux发行版
https://github.com/sqlsec/termux-install-linux