Termux 实用教程
说明:(系统换源 自己百度 主要参考 :
Termux-Ubuntu22.0.4项目部署(手机服务器实操!!)_termux安装ubuntu-CSDN博客)
PVE系列教程(二十)、ubuntu22.04安装gitlab服务器_勤奋的凯尔森同学的博客-CSDN博客
termux 进行 ssh 连接
手机端操作,打开 Termux , 当然你得去下载 Termux
1.调出出控制辅助按键
1 | 音量上 + q |
这里推荐使用 Google 中文输入法,有些键盘英文不会直接上屏,所以无法成功
2.常规操作一波升级
输入命令
1 | apt update |
3.安装 ssh 和用户管理模块
1 | apt install openssh |
4.获取用户名
1 | whoami |
输出结果如: u0_a333
5.设置密码
passwd
6.查看本机 ip
ifconfig
1 | 如 inet addr: 192.168.0.124 |
7.设置 ssh 端口 为 9000
1 | sshd -p 9000 |
电脑端操作
打开 powershell 输入
1 | ssh u0_a333@192.168.0.124 -p 9000 |
然后回车输入刚才设置的密码就 OK 了
如果提示:
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
则清空电脑端 {user}/.ssh/known_hosts 文件的内容就行
后记
1 | 然后你就可以通过 ssh 利用 apt 或者 pkg 命令安装 node , git , Python , DB ,sftp 等软件或者协议,接下来你的手机就可以变成一台服务器了,而且是性能强劲的服务器! |
如果想要通过电脑端管理手机存储内的文件:
1 | ssh 连接后可以执行 termux-setup-storage 命令,把存储卡挂载到 /data/data/com.termux/files/home/storage/shared 目录下这样就可以用 cd <path>命令访问手机存储的目录了 |
前提是 Termux 拥有访问存储的权限,就一般软件的权限设置一样
你甚至可以通过 tsudo 命令来获取 root 权限来操控手机系统软件和文件(前提是手机得 root,并且 root 权限已经分配给给 Termux)
接下来你就可以使用一般的 linux 命令来操控你的手机了
ssh下载与上传
从服务器下载东西到本地windos
1 | scp -r -P 9000 root@192.168.0.119:~/storage/pictures/1.jpg D:/ |
在本地windos上传东西到服务器
1 | scp -r dist root@192.168.0.133:/usr/local/project/forward/web/ |
自动启动 ssh
具体操作:
添加或编辑文件 ~/.bashrc :
添加如下内容并且保存。
好了 手机上重启termux,会发现ssh启动信息显示
电脑到链接如图:
——- 分割线 ——-
termux 默认是 bash,配置文件~/.bashrc
如果终端改为了zsh,就需要改动~/.zshrc
内网穿透
参考 :
https://blog.csdn.net/qq_58286439/article/details/131017803
使用Termux在Android手机上搭建公网远程Web服务器的详细教程_安卓手机成为外网服务器-CSDN博客
概述
Termux是一个Android终端仿真应用程序,用于在 Android 手机上搭建一个完整的Linux 环境,能够实现Linux下的许多基本操作,不需要root权限Termux就可以正常运行。
Apache是一个开源网页服务器软件,由于其跨平台和安全性,被广泛使用,是最流行的 Web 服务器软件之一。我们可以在Android手机上使用Termux来搭建Web服务器,同时做内网穿透,实现公网用户也可以访问,将Android变成小型的云服务器。
下面介绍在安卓Termux上搭建apache服务创建个人站点并且结合cpolar内网穿透工具实现公网访问。
搭建 apache
执行命令安装apache,安装相对简单,一键安装即可
1 | pkg install apache2 |
然后启动apache
1 | apachectl start |
启动的时候如出现以下问题
解决方法,修改配置文件,如果没有安装vim
,执行命令安装一下
1 | pkg install vim |
编辑修改配置文件
1 | vim $PREFIX/etc/apache2/httpd.conf |
找到ServerName
解开注释,www.example.com
改为127.0.0.1:8080
,端口号可以自己改成自己喜欢的
修改后再次启动,即可
打开浏览器,输入http://127.0.0.1:8080
,即可看到apahe欢迎页面,
停止apache
1 | apachectl stop |
重启apache
1 | apachectl restart |
安装cpolar内网穿透
cpolar官网:https://www.cpolar.com
成功创建了运行站点的一个apache容器后,我们接下来用cpolar做内网穿透来实现公网环境下的访问。
cpolar它是一个安全的内网穿透云服务,支持http/https/tcp协议,可以永久免费使用还不限制流量,支持映射80/443端口。它可以通过创建安全隧道,将本地服务暴露到公网上,让公网用户也可以正常访问内网服务,不需要公网IP,也不用设置路由器。
创建一个sources.list.d
的文件夹:
1 | mkdir -p $PREFIX/etc/apt/sources.list.d |
添加cpolar下载源文件
1 | echo "deb [trusted=yes] http://termux.cpolar.com termux extras" >> $PREFIX/etc/apt/sources.list.d/cpolar.list |
更新仓库
1 | pkg update |
安装cpolar
1 | pkg install cpolar |
安装termux服务
注意:安装完成后记得关闭重启一下termux 才生效!!
1 | pkg install termux-services |
重启完termux后,然后启动cpolar
1 | sv up cpolar |
设置开机自启
1 | sv-enable cpolar |
这个是停止cpola服务
1 | sv down cpolar |
cpolar.yml主配置文件路径位置
1 | PREFIX/etc/cpolar/cpolar.yml |
然后在手机浏览器我们输入http://localhost:9200
即可看到cpolar管理界面,使用在cpolar官网注册的邮箱账号即可登陆
公网访问配置
手机浏览器打开cpolar web ui管理界面,我们点击左侧仪表盘的隧道管理——创建隧道,由于apache上面我们修改配置文件是8080
端口(文章是8080,具体端口号以自己的端口为准),因此我们要来创建一条http隧道,指向8080端口:
- 隧道名称:可自定义,注意不要重复
- 协议:http
- 本地地址:8080
- 域名类型:选择随机域名
- 地区:选择China VIP
点击创建
创建成功后打开在线隧道列表,可以看到公网访问的地址,有两种访问方式,一种是http,一种是https
我们使用http方式,在浏览器输入公网地址,即可访问成功
固定公网地址
由于上面创建的是免费随机隧道,所生成的公网地址会在24小时内随机变化,为了方便长久稳定连接,我们可以固定这个公网地址,配置一个cpolar固定的二级子域名【无需备案】,或者也可以配置使用你自己的域名来访问,这里我们以配置固定的二级子域名来举例。
需升级至基础套餐或以上才支持配置二级子域名
登录cpolar官网后台,点击左侧仪表盘的预留
,找到保留二级子域名
,为http隧道保留一个二级子域名。
- 地区:选择服务器地区
- 名称:填写您想要保留的二级子域名(可自定义)
- 描述:即备注,可自定义填写
本例保留一个名称为mywebsitetest
的二级子域名。子域名保留成功后,我们将子域名复制下来,接下来需要将其配置到隧道中去。
登录cpolar web ui管理界面,点击左侧仪表盘的隧道管理
——隧道列表
,找到需要配置二级子域名的隧道,点击右侧的编辑
修改隧道信息,将二级子域名配置到隧道中:
- 域名类型:改为选择
二级子域名
- Sub Domain:填写我们刚刚所保留的二级子域名(本例为
mywebsitetest
)
修改完成后,点击更新
隧道更新成功后,点击左侧仪表盘的状态
——在线隧道列表
,可以看到隧道的公网地址,已经更新为二级子域名了.
固定后我们使用固定的公网地址,在浏览器中打开,即可看到apache默认页面,这样一个固定的公网地址访问就设置好了
添加站点
上面我们访问的页面是apache默认页面,不是我们希望的页面,我们可以把自己喜欢的页面放上去,进入apache htdocs文件夹
1 | cd $PREFIX/share/apache2/default-site/htdocs |
安装下载工具wget
1 | pkg install wget |
这里做演示,我们下载一个测试站点
1 | wget https://www.cpolar.com/static/downloads/meditation-app-master.tar.gz |
下载好后解压
1 | tar xzf meditation-app-master.tar.gz |
然后我们在浏览器上面输入上面我们的公网地址加上资源路径/meditation-app-master/index.html
,就可看到我们的个人站点啦。
现在只要保持隧道为正常在线状态,公网用户就可以通过这个固定公网地址来访问到我们在termux上搭建的web站点。
3、 安装KodBox
安装基础工具
更换源之后来赶紧来下载安装一些基本工具吧,这些工具基本上是 Linux 系统自带的,因为 Termux 为了体积不过大,默认是没有带这些工具的,执行下面的命令来安装:
1 | BASHpkg update |
终端配色方案
脚本项目地址:https://github.com/Cabbagec/termux-ohmyzsh/
执行下面这个命令确保已经安装好了 curl 命令
1 | sh -c "$(curl -fsSL https://github.com/Cabbagec/termux-ohmyzsh/raw/master/install.sh)" #安装配色命令 |
手机 App 默认只能访问自己的数据,如果要访问手机的存储,需要请求权限,如果你刚刚不小心点了拒绝的话,那么可以执行以下命令来重新获取访问权限:
1 | termux-setup-storage |
脚本允许后先后有如下两个选项:
1 | BASHEnter a number, leave blank to not to change: 14 |
分别选择色彩样式
和字体样式
,重启 Termux app 后生效配置。
设置色彩样式:
输入 chcolor
命令更换色彩样式,或者执行 ~/.termux/colors.sh
命令
设置字体
运行 chfont
命令更换字体,或者执行 ~/.termux/fonts.sh
命令
安装Kodbox
参考
https://blog.csdn.net/YiBYiH/article/details/127503804
https://www.jianshu.com/p/c7d2cffa1998
基础环境配置
必须安装的依赖nginx
和php
。
具体的配置在这:《Termux开发环境搭建》-Nginx,这里就简单叙述一下:
安装相应组件:
1 | pkg install nginx php php-fpm -y |
配置php:
1 | 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
配置Nginx对PHP的代理:
1 | vim $PREFIX/etc/nginx/nginx.conf |
找到index index.html index.htm;
修改为: index index.html index.htm index.php;
找到location ~ \.php$
所在块,去掉注释修改为:
1 | location ~ \.php$ { |
kodbox下载安装
官方下载地址:https://kodcloud.com/download/,复制最新版本下载链接,下载并安装:
1 | cd $PREFIX/share/nginx/html |
登录并配置
上述步骤完成,就可以通过http://手机IP:8080/kod
访问了:
没有任何错误,点击下一步:
这里因为没有配置MySQL
,就选自带的SQlite
就行,文件类型选择缓存文件
,点击确定:
管理员账户配置,账号名和密码都可自定义,完成之后就会跳转到登录页面了:
至此安装完成,尽情享用伪桌面系统的私人云盘吧! 【免费版支持创建10个用户,日常家庭的日常使用绰绰有余】
关于手机内部存储访问
首先确保Termux获取手机存储访问权限:
1 | termux-setup-storage |
termux挂载手机存储目录(创建软链接):
1 | ln -s <本机文件夹> <termux内部目录> |
比如将手机的Download
映射到termux的home
目录下:
1 | ln -s /sdcard/Download /data/data/com.termux/files/home |
之后在kodbox界面操作,登陆后依次点击系统设置
->存储管理
->新增
:
目录填写软链接完整路径示例:/data/data/com.termux/files/home/Download
。
保存后刷新页面,就能在文件管理的网络挂载
中看到了:
关于外网访问
首先,而kodbox
默认不支持https
的,这里我们需要设置一下:
1 | vim $PREFIX/share/nginx/html/kod/config/config.php |
大概第85
行,将: if(!defined('HOST')){ define('HOST',(get_host());}
修改为:
1 | if(!defined('HOST')){ define('HOST',rtrim('/',get_host()).'/');} |
保存,继续修改setting.php
文件:
1 | vim $PREFIX/share/nginx/html/kod/config/setting.php |
大概第295
行,将: 'listType' => "icon", // list||icon||split
修改为:
1 | 'listType' => "list", // list||icon||split |
如果你有公网IP,那么接下来的部分就不需要看了,可以直接跳转到下一小节。
如果没有公网IP,这里提供两个解决方案。
ipv4内网穿透
能看到这的都应该对互联网有所了解,我就简单那花生壳的ddns
举个例子吧。
首先去花生壳官网注册登录账号: https://console.hsk.oray.com,登陆后会弹出实名认证,避免后续有什么麻烦就认证一下。
注册成功后会免费赠送你一个二级域名,接下来我们就那这个免费域名操作:
添加一个映射:
之后使用同局域网设备下载花生壳软件,登录账号就可以使用了。脱离内网,用域名直接访问:
其他品牌的ddns服务自行探索。
直接使用ipv6
随着ipv6的普及,现在家庭宽带基本上都已经支持ipv6了,通过ipv6可易直接进行公网访问而不需要进行内网穿透。
首先确保你的路由器关闭了ipv6防火墙,其次开启ipv6地址分配,路由器不同方法不同,根据自己路由器型号自行百度,实在不会的可以私信我。
① Nginx 开启ipv6访问
Termux的Nginx默认就是支持ipv6的,这里我们只要添加一个ipv6监听服务即可。
1 | vim $PREFIX/etc/nginx/nginx.conf |
找到server
,在listen 8080;
后添加一个ipv6端口: listen [::]:8081 ipv6only=on;
保存配置文件,重启Nginx服务使配置生效:
1 | nginx -s reload |
② 获取手机ipv6地址
使用ip
命令可以在Termux内直接查询,先安装工具包:
1 | pkg install iprroute2 |
使用:
1 | ip -6 addr |
这几个inet6
代表的就是你的ipv6地址,其中只有后缀为<global>
的才是公网地址,fe80
开头的是内网地址。
在线查询工具也很多,这里推荐一个:http://www.test-ipv6.com/
③ 使用ipv6登录
复制ipv6地址,在其他设备访问,我这里用只开了数据流量的手机测试,访问地址格式http://[ipv6]:port_ipv6/kod
:
然后去登录日志查看:
也显示了是ipv6登录。
nginx配置
1 | server { |
安装 Hexo
Hexo 是用 Nodejs 编写的,所以安装的话得使用 npm 命令来安装:
1 | BASH |
安装完成的话,顺便看一下 Hexo 相关的版本信息吧:
1 | BASH |
Hexo 基本部署
将md文件转化为网页!!!
我们建立一个目录,然后到这个目录下初始化 Hexo 环境:
1 | # 手动创建一个目录 |
出现问题可以重新安装一下hexo。
出现图片显示问题:
在项目里下载模块
1 | npm install https://github.com/CodeFalling/hexo-asset-image --save |
安装alist
Alist 的安装较为简单。打开 termux,输入下面的指令直接安装:
1 | pkg install alist -y |
安装好之后,使用下面的指令查看 admin 的账户和密码:
1 | alist admin |
然后输入下面的指令开启 alist:
1 | alist server |
可以看到开启的端口号。
数据安全
安装IP-Tracer
《追踪ip地址信息》
apt update
apt install git
git clone https://github.com/rajkumardusad/IP-Tracer.git
进入安装的IP-Tracer工具里
将权限添加到安装文件中
1 | chmod +x install |
然后键入
1 | ./install |
键入如下命令查看ip信息
trace -m ip
2、安装Ddos-Ripper
可以参考github教程
1 | pkg install git -y |
安装linux系统
pkg install proot-distro
查看安装的linux系统
proot-distro list
安装Ubuntu linux系统
proot-distro install ubuntu
登录ubuntu系统
proot-distro login ubuntu
通过Proot安装ubuntu
参考(https://www.dnzp.com/m/jy/202307/190421.html)
输入
bash <(curl -L gitee.com/mo2/linux/raw/2/2)
一路 y
选择 中文简体——》 proot容器
VNC安装
VNC使用
第一步:停止VNC服务
在更改VNC密码之前,您需要确保VNC服务已停止。如果VNC仍在运行,则您不会能够更改密码。您可以使用以下命令停止VNC服务:
sudo systemctl stop vncserver@:1.service
第二步:更改VNC密码
打开终端并键入以下命令更改VNC密码:
vncpasswd
此命令将提示您输入新密码。请确保您输入一个安全的密码。
第三步:启动VNC服务
输入以下命令启动VNC服务:
sudo systemctl start vncserver@:1.service
这将启动VNC服务并使您的新密码生效。
安装 青龙面板
手机termux安装Linux发行版实现无root安装青龙面板
参考 https://segmentfault.com/a/1190000041976767?sort=newest
termux安装
【termux官网】
【ZeroTermux】
【ZeroTermux 安卓5】
ZeroTermux换源(可跳过)
1 | sed -i 's@^\(deb.*stable main\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main@' $PREFIX/etc/apt/sources.list && apt update && apt upgrade |
安装 Linux 发行版 Alpine
安装
1 | curl -LO https://raw.githubusercontents.com/Hax4us/TermuxAlpine/master/TermuxAlpine.sh |
启动alpine
startalpine
Alpine安装青龙
这里安装develop分支测试,可以把下面的QL_BRANCH改为master分支来安装稳定版或改为版本号(如v2.11.1)来安装指定版本
1 | set -x \ |
启动alpine
1 | startalpine |
启动青龙面板
1 | qinglong |
报错
alpine安装失败
清除termux数据(再重启手机更好),或者用zerotermux更方便,直接容器切换里新建一个容器就行了,再重新重新执行安装alpine命令
sqlite3安装失败
原因不清楚,之前查半天解决的,又忘记了,不过不是所有设备都会报错,一般重新安装就可以解决
重新执行安装命令,即pnpm install –prod,然后再执行之后的所有命令,也可以直接复制下面这段
1 | pnpm install --prod \ |
手机重启后再次启动青龙面板失败
之前是因为环境变量失效,已经解决了,再有的话就不清楚了。
拉库报错
原因不明,最开始测试是正常的,后来更新之后就不能拉库了,没仔细研究更新了哪里,可能过段时间还能自动变好吧,有兴趣的自己看青龙作者的更新记录。
安装
在Termux中运行Docker
我们确实可以在Termux中体验 Termux开发环境 ,但是毕竟是在Android系统中运行一个并非完整的Linux系统。所以我们会有一个疑惑,是否可以在手机系统中,也就是在Termux之上再运行一个 Docker Atlas 呢?毕竟,只要能够运行Docker,也就意味着打开了一个全新的容器化环境,能够构建不同的应用程序运行环境,更能够把 移动开发:Pixel手机(Android)开发环境构建 实现得更完美。
安装:
1
2pkg install root-repo
pkg install docker
安装完成提示:
1 | Setting up libaio (0.3.112-3) ... |
内核需要定制支持上述选项
Termux:api应用
Termux 趣味应用
figlet 、toilet命令
艺术字生成器,由ASCII字符组成,把文本显示成标题栏。此外还有banner这个命令
安装
$sudo apt-get install figlet
$sudo apt-get install toilet
运行
$figlet fuck you !
$toilet i love you
安装彩色的字体:lolcat
250 apt-get install ruby
251 ruby -v
253 cd /usr/games/
254 wget https://github.com/busyloop/lolcat/archive/master.zip
255 unzip master.zip
256 cd lolcat-master/bin
257 gem install lolcat
258 lolcat –version
259 lolcat -h
260 ps | lolcat
261 date | lolcat
262 man cmatrix | lolcat
图片转字符串
sudo apt-get install aview imagemagick
asciiview luffy.jiff
fortune 命令随机名言诗句
Cowsay
#apt install cowsay //安装这个包
如果显示
root@hsz:/usr/games# fortune | cowsay
/usr/bin/env: node: No such file or directory
Command ‘fortune’ is available in ‘/usr/games/fortune’
The command could not be located because ‘/usr/games’ is not included in the PATH environment variable.
fortune: command not found
那么是因为环境变量没有配置好:
root@hsz:/# vim /etc/profile //里面最后一行加入:export PATH=”/usr/games:$PATH”
root@hsz:/# source /etc/profile
这样就可以使用了。
如:#fortune | cowsay
root@hsz:/# cowthink today is nice!
root@hsz:/# cowsay srsly dude, why?
还有很多操作
cowsay -f tux “坑爹啊”
一些彩色的字
# figlet I Love Temint | lolcat
#toilet I Love Temint | lolcat
# cowsay -f gnu “Temint” is the best Linux Resource Available online | lolcat
8 *ASCII艺术框:box命令
1 | sudo apt-get install boxes |
Termux:API 扩展用法详解
15 人赞同了该文章
什么是Termux:API?
Termux:API是Termux的一个扩展包,安装Termux:API以后可以在Termux里面通过命令调用安卓原生的能力,比如调用摄像头拍照、获取定位信息等等。
本文原文来自何方的软件分享站
Termux:API用法详解 - 何方的软件分享soft.iamhefang.cn/content/termux-api-detail.html
Termux介绍请参考下面这个视频
如何在安卓中使用完整的Linux系统?6681 播放 · 15 赞同视频
如何安装Termux:API
1、 安装一个“Termux:API”的apk包。
2、安装完“Termux:API”以后打开termux主程序,执行下面的命令再安装一个“Termux:API”的命令工具。
1 | apt install termux-api |
Termux:API用法
下面列出的Termux:API的所有api的用法、入参和出参。需要使用哪个api可以在目录中快速跳转。
获取设备电池信息
命令:termux-battery-status
出参
1 | { |
设置屏幕亮度。
命令:
1 | termux-brightness brightness |
权限:android.permission.WRITE_SETTINGS
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
brightness | 亮度值 | - | 0-255 |
获取通话记录列表
命令
1 | termux-call-log -l limit -o offset |
权限:android.permission.READ_CALL_LOG
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-l limit | 每次获取条数 | 10 | ✅ |
-o offset | 从第几条开始获取 | 0 | ✅ |
出参
1 | [ |
获取相机信息
命令:termux-camera-info
出参
1 | [ |
调用摄像头拍照
命令:
1 | termux-camera-photo -c camera-id filename |
权限:android.permission.CAMERA
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-c camera-id | ermux-camera-info输出的id | 0 | ✅ |
filename | 文件保存的路径 | - | ❌ |
获取粘贴板数据
命令:termux-clipboard-get
权限:读取粘贴板权限
出参:直接输出粘贴板内容
设置粘贴板数据
命令
1 | termux-clipboard-set text |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
text | 要复制到粘贴板的内容 | - | ❌ |
获取联系人列表
命令:termux-contact-list
权限:anroid.permission.READ_CONTACTS
出参
1 | [ |
显示弹窗
命令
1 | termux-dialog confirm -t title -i hint |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-t title | 弹窗标题 | - | ✅ |
-i hint | 弹窗内容 | - | ✅ |
-v “,,,” | 以逗号分割的选项列表 | - | ✅ |
-r min,max,start | 时数弹窗的数值 min:最小值 max:最大值 start:初始值 | - | ✅ |
-d “dd-MM-yyyy k:m:s” | 日期弹窗的输出格式 | - | ✅ |
-m | 输入框弹窗多行输入,不能和-n共用 | - | ✅ |
-n | 输入框弹窗输入数字,不能和-m共用 | - | ✅ |
-p | 输入框弹窗输入密码 | - | ✅ |
出参
1 | { |
使用系统下载管理器下载资源。
命令
1 | termux-download -d description -t title -p path url |
权限:无
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-d description | 下载通知的描述 | - | ✅ |
-t title | 下载通知的标题 | - | |
-p path | 下载文件要保存的路径 | - | ✅ |
url | 要下载的url | - | ❌ |
使用指纹传感器校验身份
命令:termux-fingerprint
出参
1 | { |
查询红外发射器支持的载波频率。
命令:termux-infrared-frequencies
出参
1 | [ |
发送红外信号
命令
1 | termux-infrared-transmit -f frequency |
权限:无
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
frequency | 以赫兹为单位的 IR 载波频率。 | - | ❌ |
延迟或定时运行Termux脚本。
命令:termux-job-scheduler
权限:无
获取当前位置。
命令
1 | termux-location -p gps/network/passive -r once/last/updates |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-p gps/network/passive | 获取位置的方式 | gps | ✅ |
-r once/last/updates | 获取时机 once:一次 last:上次 updates:更新 | once | ✅ |
出参
1 | { |
播放媒体文件
命令
1 | termux-media-player info |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
info | 查看当前播放信息 | - | - |
play | 暂停后继续播放 | - | - |
play 文件路径 | 播放指定的文件 | - | - |
pause | 暂停 | - | - |
stop | 停止 | - | - |
媒体扫描
命令
1 | termux-media-scan -r 目录 -v |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-r 目录 | 要扫描的目录 | - | ❌ |
-v | 详细扫描 | - | ✅ |
录音
命令
1 | termux-microphone-record -d -f <file> -l <limit> -e <encoder> -b <bitrate> -r <rate> -c <count> -i -q |
权限:android.permission.RECORD_AUDIO
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-d | 使用默认值录音 | - | - |
-f 文件 | 录音保存文件 | - | - |
-l 时长限制 | 录音时长限制,单位:秒,0表示不限制 | 0 | - |
-e 格式 | 指定录音格式 (aac, amr_wb, amr_nb) | - | - |
-b 比特率 | 指定录音比特率 (单位 kbps) | - | - |
-r 频率 | 指定录音频率 (单位 Hz) | - | - |
-c 声道数 | 指定录音声道数 (1, 2, …) | - | - |
-i | 获取当前录音信息 | - | - |
-q | 退出录音 | - | - |
出参
1 | { |
发送通知
命令
1 | termux-notification |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
–action action | 点击通知时执行的动作 | - | - |
–alert-once | 通知被编辑时不要再次提醒 | - | - |
–button1 text | 在通知的第一个按钮上显示的文本 | - | - |
–button1-action action | 点击第一个按钮要执行的动作 | - | - |
–button2 text | 在通知的第二个按钮上显示的文本 | - | - |
–button2-action action | 点击第二个按钮要执行的动作 | - | - |
–button3 text | 在通知的第三个按钮上显示的文本 | ||
–button3-action action | 点击第三个按钮要执行的动作 | ||
-c/–content content | 要在通知中显示的内容,优先级高于标准输入 | ||
–group group | 通知分组 | ||
-h/–help | 显示帮助信息 | ||
–help-actions | 显示动作定义帮助信息 | ||
-i/–id id | 通知id,同一id的通知两次发送时之前的将被替换 | ||
–image-path path | 通知中要显示的图片绝对路径 | ||
–led-color rrggbb | 呼吸灯颜色 | 无 | |
–led-off milliseconds | 呼吸灯呼吸时关闭时长 | 800 | |
–led-on milliseconds | 呼吸灯呼吸时打开时长 | 800 | |
–on-delete action | 通知被清理时执行的动作 | - | - |
–ongoing | 发送持久化通知 | - | - |
–priority prio | 通知优先级 | - | high/low/max/min/default |
–sound | 通知铃声 | - | - |
-t/–title title | 通知标题 | - | - |
–vibrate pattern | 通知振动,时长以逗号分割 ,500,800,500,900 | - | - |
–type type | 通知类型 | default/media | |
–media-next | 通知类型为media时,显示下一曲按钮 | ||
–media-pause | 通知类型为media时,显示暂停按钮 | - | - |
–media-play | 通知类型为media时,显示播放按钮 | - | - |
–media-previous | 通知类型为media时,显示上一曲按钮 | - | - |
移除通知
命令
1 | termux-notification-remove id |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
id | 要移除的通知id,使用termux-notification发送通知时定义的id | - | ❌ |
获取传感器信息
命令
1 | termux-sensor -h -a -l -s ",,," -d ms -n num |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-h | 显示帮助信息 | - | - |
-a | 显示全部传感器信息和实时数据(警告:可能对电池有影响) | ||
-l | 显示可用的传感器列表 | ||
-s “,,,” | 要监听的传感器,以逗号分割 | ||
-d ms | 接收传感器数据之前延迟,单位:ms | ||
-n num | 接收传感器数据次数,最小值为1。 continuous:续续接收 | continuous | |
-c | 释放被占用的传感器 |
出参
1 | { |
分享
命令
1 | termux-share -a action -c content-type -d -t title file |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-a action | 分享内容要执行的动作类型 | view | edit/send/view |
-c content-type | 分享的数据类型 | 从文件后缀猜测,如果数据是从标准输入来的,默认为 | ✅ |
-d | 如果选择一个则分享到默认的接收器而不显示接收器列表 | - | ✅ |
-t title | 分享的标题 | 分享的文件名 | ✅ |
获取短信列表
命令
1 | termux-sms-list -d -l limit -n -o offset -t type |
权限:android.permission.READ_CONTACTS
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-d | 显示创建短信的日期 | ||
-l limit | 每页显示多少条数据 | 10 | |
-n | 显示号码 | 0 | |
-o offset | 从第几个后开始获取 | ||
-t type | 要显示的短信类型 | inbox | all|inbox|sent|draft|outbox |
出参
1 | [ |
发送短信
命令
1 | termux-sms-send -n ",,," text |
权限:android.permission.SEND_SMS
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-n “,,,” | 要接收短信的号码,以逗号分割 | ❌ | |
text | 要发送的短信内容 | ❌ |
选择文件
命令
1 | termux-storage-get filename |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
filename | 要写入的文件 | - | ❌ |
拨打电话
命令
1 | termux-telephony-call number |
权限:andriod.permission.CALL_PHONE
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
number | 要拨打的号码 | - | ❌ |
获取区域信息
命令:termux-telephony-cellinfo
权限:定位权限
出参
1 | { |
获取通讯设备信息
命令:termux-telephony-deviceinfo
出参
1 | { |
显示一个Toast
命令
1 | termux-toast -h -b -c -g -s text |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-h | 显示帮助信息 | - | - |
-b | 背景色 | gray | ✅ |
-c | 前景色 | white | ✅ |
-g | 位置 | middle | top, middle, bottom |
-s | 短时显示 | - | ✅ |
text | 要显示的内容 | - | ❌ |
打开/关闭手电筒
命令
1 | termux-torch status |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
status | 状态 | - | on, off |
获取语音引擎信息
命令:termux-tts-engines
出参
1 | [ |
朗读文本
命令
1 | termux-tts-speak -e engine -l language -n region -v variant -r rate -s stream text |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-e engine | 要使用的语音引擎 | - | termux-tts-engines输出的引擎 |
-l language | 要朗读的语言 | - | - |
-n region | 要朗读语言所在区域 | - | - |
-v variant | 要朗读语言的变体 | - | - |
-p pitch | 朗读的声调 | 1.0 | - |
-r rate | 朗读的语速 | 1.0 | - |
-s stream | 音频流 | NOTIFICATION | ALARM, MUSIC, NOTIFICATION, RING, SYSTEM, VOICE_CALL |
text | 要朗读的文本 | - | ❌ |
USB设备列表
命令
1 | termux-usb -l -r -e command |
依赖包
要正常使用该功能,需要安装libusb
和clang
包,可使用apt install libusb clang
安装
权限:USB权限
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-l | 列表所有可用的USB设备 | - | - |
-r | 如果没有权限弹出权限请求弹窗 | - | - |
-e command | 使用引用设备的文件描述符作为其参数执行指定的命令 | - | - |
-l出参
1 | [ |
振动
命令
1 | termux-vibrate -d duration -f |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-d duration | 振动时长 | 1000 | ✅ |
-f | 在静音模式下强制振动 | - | ✅ |
获取/设置音量
命令
1 | termux-volume stream volume |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
stream | 要改变的音量 | - | alarm, music, notification, ring, system, call |
volume | 音量 | - | - |
不加参数出参
1 | [ |
更改桌面壁纸
命令
1 | termux-wallpaper -f file -u url -l |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
-f file | 使用文件设置桌面壁纸 | ||
-u url | 使用网络资源设置桌面壁纸 | ||
-l | 设置锁屏壁纸 |
获取当前WiFi连接信息
命令:termux-wifi-connectioninfo
出参
1 | { |
打开/关闭WiFi
命令
1 | termux-wifi-enable status |
入参
参数 | 说明 | 默认值 | 可选 |
---|---|---|---|
status | 要更改的wifi状态 | true, false |
扫描可用WiFi
命令:termux-wifi-scaninfo
权限:定位权限
出参
1 | [ |
常用操作
服务启动
启动 php-fpm
1 | php-fpm |
查看nginx当前进程
1 | ps -ef | grep nginx |
Linux常用命令:
文件组管理:
cat /etc/group #查看文件系统的所有组信息
1 | groups + 组名 查看组中成员信息 |
创建一个组,monster
1 | groupadd monster |
创建一个用户 fox ,并放入到monster组中
1 | useradd -g monster fox |
参考
linux 查看系统信息命令 - konglingbin - 博客园 (cnblogs.com)
Linux 查看系统版本
1、输入uname - a,可以看到操作系统的发行版号和操作系统版本。
2、输入uname -v可以查看版本号。
3、lsb_release -a,查看发行版本信息,并且方法可以适用于所有的Linux发行版本。
4、cat /etc/issue可以查看到当前是Linux什么版本系统。
5、cat /proc/version可以查看内核的版本号。
常见问题
ssh连接报错
1 | ssh-keygen -R 192.168.0.105 |
报错
修改know_hosts为 know_hosts.bak 或者删除 know_hosts
再进行连接
二、常见报错
Oh My Zsh更新报错解决
报错内容:
1 | [oh-my-zsh] Would you like to update? [Y/n] y |
执行下面命令解决
1 | git config --global url."https://github.com/".insteadOf git://github.com/ |
Shell 脚本语法
shell 概述
shell 是一种脚本语言
脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)
shell 既是应用程序 又是一种脚本语言(应用程序 解析 脚本语言)
shell命令解析器:
系统提供 shell命令解析器: sh ash bash
查看自己linux系统的默认解析:echo $SHELL
shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装shell命令解释器的环境下执行
调用形式
打开终端时系统自动调用:/etc/profile 或 ~/.bashrc
/etc/profile
此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,系统的公共环境变量在这里设置
开机自启动的程序,一般也在这里设置
~/.bashrc
用户自己的家目录中的.bashrc
登录时会自动调用,打开任意终端时也会自动调用
这个文件一般设置与个人用户有关的环境变量,如交叉编译器的路径等等
用户手动调用:用户实现的脚本
shell语法初识
语法格式
定义以开头:#!/bin/bash
#!用来声明脚本由什么shell解释,否则使用默认shell
单个”#”号代表注释当前行
第一步:编写脚本文件
第二步:加上可执行权限
chmod +x xxxx.sh
第三步:运行
三种执行方式 (./xxx.sh bash xxx.sh . xxx.sh)
三种执行方式的不同点(./xxx.sh bash xxx.sh . xxx.sh)
./xxx.sh :先按照 文件中#!指定的解析器解析
如果#!指定指定的解析器不存在 才会使用系统默认的解析器
bash xxx.sh:指明先用bash解析器解析
如果bash不存在 才会使用默认解析器
. xxx.sh 直接使用默认解析器解析(不会执行第一行的#!指定的解析器)但是第一行还是要写的
三种执行情况:
打开终端就会有以后个解释器,我们称为当前解释器
我们指定解析器的时候(使用 ./xxx.sh 或 bash xxx.sh)时会创建一个子shell解析 脚本
注意:windows下 写脚本 在linux下执行 注意
执行结果:
将windows文件 转换成 unix文件
方法一:dos2unix 如果没有该插件 需要安装
sudo apt-get install dos2unix
dos2unix shell脚本
转换成功就可以执行运行
方法二:
需要用vi打开脚本,在最后一行模式下执行
:set ff=unix
变量
定义变量
变量名=变量值
如:num=10
引用变量
$变量名
unset :清除变量值
运行结果:
从键盘获取值read
运行结果:
案例:
在一行上显示和添加提示 需要加上-p
运行结果:
案例:读取多个值
运行结果:
案例只读变量:
运行结果:
查看环境变量:env
导出环境变量 作用:(让其他shell脚本识别该变量,设为全局变量)
source 脚本文件
source命令用法:
source FileName
作用:在当前bash环境下读取并执行FileName中的命令。
注:该命令通常用命令“.”来替代。
如:source .bash_rc 与 . .bash_rc 是等效的。
注意:source命令与shell scripts的区别是,
source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用source 命令。
06_sh.sh
1 | #!/bin/bash |
用source 是文件生效
使用 env可以查看到环境变量中已经有 DATA
可以在终端直接中读取:
在其他sh脚本读取:
运行结果:
注意事项:
1、变量名只能包含英文字母下划线,不能以数字开头
1_num=10 错误
num_1=20 正确
2、等号两边不能直接接空格符,若变量中本身就包含了空格,则整个字符串都要用双引号、或单引号括起来
3、双引号 单引号的区别
双引号:可以解析变量的值
单引号:不能解析变量的值
运行结果:
如果想在PATH变量中 追加一个路径写法如下:(重要!!!!)
1 | export PATH=$PATH:/需要添加的路径 |
预设变量
shell直接提供无需定义的变量
案例:
运行结果:
脚本标量的特殊用法
加-e转义 才起换行作用
()由子shell 完成
{}由当前的shell执行
变量的扩展
判断变量是否存在
字符串的操作
条件测试
test命令:用于测试字符串、文件状态和数字
test命令有两种格式:
test condition 或[ condition ]
使用方括号时,要注意在条件两边加上空格。
文件测试
字符串测试
数值测试
符合语句测试
控制语句
if控制语句
1 | 格式一: |
案例:
案例:判断当前路径下有没有文件夹 有就进入创建文件 没有 就创建文件夹 再进入创建文件
运行结果:
案例:
运行结果:
case
for循环语句
案例:
案例:扫描当前文件
while
until
break continue
函数
所有函数在使用前必须定义,必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用
案例:求最值
案例:函数分文件
fun.sh
24_sh.sh
Shell 脚本补充
Shell脚本 基础概念
什么是shell?
shell英文翻译过来是外壳的意思,作为计算机语言来理解可以认为它是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,比如Linux中的shell命令就包括ls
、cd
、pwd
等等。
shell是站在内核的基础上编写的一个应用程序,它连接了用户和Linux内核,从而让用户能够更加便捷、高效、安全的使用linux内核,这其实就是shell的本质。
使用专业术语的说法来解释,Shell其实是一个命令解释器,它通过接受用户输入的Shell命令来启动、暂停、停止程序的运行或对计算机进行控制。
什么是shell脚本
shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。
shell脚本的意义
我们在1.2中也解释道shell脚本其实就是shell命令组成的文件,shell脚本可以记录命令执行的过程和执行逻辑,以便以后重复执行,还可以批量、定时处理主机,方便管理员进行设置或者管理。
创建一个简单的Shell脚本
创建一个shell脚本文件
在创建shell脚本时,我们默认新建一个以.sh
/.script
结尾的文件,主要是为了让程序员更加快捷的辨认出该文件是一个shell脚本文件。
我们创建一个test.sh
的shell脚本文件,其中具体内容为下:
1 | #!/bin/bash |
- “ # ”开头的就是注释,单行注释
- <<EOF … EOF 或 :<<! … ! :多行注释
- #!/bin/bash : 主要用于指定解释器
- Linux中提供的shell解释器有:
- /bin/sh
- /bin/bash
- /usr/bin/sh
- /usr/bin/bash
运行一个Shell脚本
我们根据脚本文件是否具有可执行权限,将运行一个shell脚本的方法分为两大类。
脚本文件无执行权限
这种情况下我们有三种方式来运行脚本:
- 手动在环境中开启指定解释器:
sh test.sh
- 直接在当前环境中运行的shell中运行脚本:
. test.sh
- 直接在当前环境中运行的shell中运行脚本:
source test.sh
脚本文件有执行权限
在这一部分由于我们假设脚本文件有可执行器权限,所以我们使用chmod +x test.sh
为我们的test.sh
文件增加了可执行权限。
我们知道当一个文件具有可执行权限时我们可以使用该文件的路径名直接运行该文件,有两种方式可以运行脚本:
- 绝对路径名运行脚本文件
绝对路径就是从根目录下开始记录文件路径名,是文件在计算机上真正存在的路径。(如果不知道你的文件路径名,可以在当前位置的shell中使用pwd
查询当前所在位置) ./相对路径名
的格式运行脚本文件
相对路径是指以当前的文件作为起点,相较于当前目录的位置而被指向并且加以引用的文件资源。
比如我们知道test.sh
文件的绝对路径为/home/westos/Desktop/textcpp/test.sh
,那么当我们在testcpp文件夹中时,test.sh
文件的相对路径为test.sh
。
又因为.
代表当前所在位置,故而为其实./test.sh
其实就是该文件的绝对路径,只是表示的方式不同。
基本语法
变量
变量名其实就是一片内存区域的地址或者可以说是寻址符号,有了变量我们就可以使用一串固定的字符来表示不固定的目标。
变量类型
在shell中会同时存在三种类型变量。
- 局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- shell变量:shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
变量操作
- 创建普通变量:
name=“test”
,组要注意的是等号两边不能有空格。 - 创建局部变量:
local name=“test”
,使用local修饰的变量在函数体外无法访问,只能在函数体中使用。 - 创建只读变量:
name=“only_read” -> readonly name
,这种变量不可以被修改。 - 使用变量:
echo $name
或者echo ${name}
- 删除变量:
unset name
,删除之后的变量无法被访问,需要注意无法删除只读变量。
字符串变量
字符串变量的创建
- 使用单引号创建:
var='test'
。
这种方式创建的变量只能原样输出,变量无效,我们可以借用c中的“字符串常量”的定义理解这种特性。除此以外,单引号中不能出现单独的单引号,转义也是不可以的。 - 使用双引号创建:
var="my name is ${name}"
,这种方式创建的字符串变量有效,也可以出现转义符。
拼接字符串
- 字面量拼接
str01="1""2"
或者str01="1"'2'
,这样就将1
和2
两个字符拼接在了一起。需要注意的是两个串之间不可以有空格。 - 变量拼接
str03=${part01}${part02}
或str04=${part01}"end"
或str05="${part01} ${part02}"
这三种方式都可以拼接字符串变量。 - 命令拼接
str02= date
“end”,这里的date是一个shell命令,需要使用引用,具体如下:
1 | str02=`date`"end" |
获取字符串长度
- 使用
wc -L
命令wc -L
可以获取到当前行的长度,因此对于单独行的字符串可以用这个简单的方法获取,另外wc -l
则是获取当前字符串内容的行数。
1 | echo "abc" |wc -L |
- 使用
expr length
可以获取string的长度
1 | expr length ${str} |
awk
获取域的个数
但是如果大于10个字符的长度时是否存在问题需要后面确认
1 | echo "abc" |awk -F "" '{print NF}' |
- 通过
awk+length
的方式获取字符串长度
1 | echo “Alex”|awk '{print length($0)}' |
- 通过`echo $