Termux 入门教程:架设手机 Server 下载文件

作者: 阮一峰

日期: 2019年7月23日

手机文件,比如照片和视频,如何下载到桌面电脑?

普通用户可以使用手机线,将手机和电脑连起来。作为开发者,其实有更方便的方法,就是在手机架设一个 HTTP 服务,然后从桌面浏览器访问手机。

本文讲解如何使用 Termux 架设手机的 HTTP 服务器。

一、Termux 是什么?

Termux 是一个安卓手机的 Linux 模拟器,可以在手机上模拟 Linux 环境。它提供一个命令行界面,让用户与系统互动。

它就是一个普通的手机 App,可以从应用商店下载安装。不需要 root 权限,也不需要设置,打开就能使用。

二、环境准备

打开 Termux 以后,就是一个全屏的命令行界面。虽然可以用手机的触摸键盘输入命令,但还是推荐使用蓝牙键盘。

第一步,更新一下系统,保证使用最新版本。


# 连接远程仓库,获取软件包信息
$ apt update

# 更新本地已经安装的软件包
$ apt upgrade

第二步,测试系统。


# 安装 sl 软件包
$ apt install sl

# 运行
$ sl

上面命令安装测试包sl,然后运行。如果一切正常,会显示一个火车的命令行动画。

第三步,访问本机存储。

手机 App 默认只能访问自己的数据,如果要访问手机的存储,需要请求权限。


$ termux-setup-storage

执行上面的命令以后,会跳出一个对话框,询问是否允许 Termux 访问手机存储,点击"允许"。

这会在当前目录下生成一个storage子目录,它是手机存储的符号链接,后文下载文件就是到这个目录去下载。

三、软件包管理

除了apt命令,Termux 还提供pkg命令进行软件包管理。


# 安装软件包
$ pkg install [package name]

# 卸载软件包
$ pkg uninstall [package name]

# 列出所有软件包
$ pkg list-all

其实,pkg底层就是apt,只是运行前会执行一次apt update,保证安装的是最新版本。所以,apt install sl基本等同于pkg install sl

Termux 支持的软件包清单,可以到这里查看。

四、Node.js

下面,安装 Node.js。


$ apt install nodejs

安装完成后,就可以运行 JavaScript 脚本了。比如,新建一个脚本hello.js


// hello.js
console.log('hello world');

然后,执行这个脚本。


$ node hello.js
hello world

五、架设 Server

现在,通过 Node.js 运行 HTTP Server。

首先,安装 npm 模块http-server


$ npm install -g http-server

然后,运行 Server。


$ http-server

正常情况下,命令行会提示 Server 已经在 8080 端口运行了,并且还会提示外部可以访问的 IP 地址。

举例来说,手机的局域网 IP 是 192.168.2.6,那么我们通过桌面电脑的浏览器访问http://192.168.2.6:8080,就可以看到 Termux 的根目录了。进入下面的storage子目录,就可以下载手机文件了。

如果手机和电脑不在同一个局域网,那可以打开手机的热点功能,让桌面电脑通过手机热点上网,再访问手机的 HTTP Server。

这里顺便提一下,下面的命令可以从命令行查看手机的 IP 地址。


$ apt install net-tools
$ ifconfig

六、Python

不使用 Node.js,而使用其他方法架设 HTTP Server 也是可以的。下面演示 Python 的方法。


$ apt install python
$ python -m http.server 8080

然后,桌面电脑就可以访问手机了。

Termux 是非常强大的工具,除了上面的方法,还可以架设 Apache 服务器,或者通过其他途径(FTP、SSH、Rsync)访问手机,这里就不详细介绍了。

(完)

留言(41条)

微信和QQ不行吗

此前手机下载PC文件一直是在文件目录上启动 http-server来进行下载,没想到还能反过来

这个跟FTP是什么关系呢

一直卡在installing是怎么回事。

引用PC的发言:

这个跟FTP是什么关系呢

文中说的方法应该走http下载, ftp需要账号登录

表示自己用这种方式很久了;手机和电脑互传数据在特定场景下很无奈
(向手机传一部大小超过4G的电影,手机上某个文件数量巨大的文件夹想传到电脑)
只好用一些带有远程管理服务的软件,电脑访问IP或者用sftp等去下载。
这和用termux是一样的,不过termux能搞很多东西,安装Linux发行版等等...

天…软老师的方案也太 hard-core 了 8

这类工具很多的,而且是最早一批广泛使用的手机app.比如啥ES文件管理器。

在ios系统中如何正确的传文件到桌面?阮老师有空可以研究并科普一下吗?

大多数情况下,我用微信或者QQ互传文件,没有走局域网流量,传输速度有点慢。

现在我基本上用的是Samba,实现在Linux、Windows、Andriod之间互传文件,走的是局域网流量,传输速度很快,Andriod手机使用CX文件管理器连接到Samba服务器进行传输。

可以看我的这篇文章(Ubuntu 18.04.2 LTS安装samba,实现文件夹共享:https://jianrry.com/index.php/archives/87/),了解一下。

Termux还没用过,正好下一个体验一下。

阮老师的方案确实很好,不过如果只用来传文件的话就稍微有点麻烦了。如果只传文件的话可以在电脑上开一个 Web 服务器,用手机浏览器就可以很方便的上传和下载文件,而且只要能安装浏览器的手机都能用。

这样很好玩啊, 手机就可以做开发机了,哈哈

感觉也可以用它来装个shadowsocks来翻墙啊,可以做的骚操作好多

实际上这完全可以当做一个Linux服务器来使用,带个蓝牙键盘随时随地开发运维了hhh,就是。。。屏幕有点小

引用PC的发言:

这个跟FTP是什么关系呢

HTTP和FTP是不同的协议,FTP是专门用来在网络上传文件的,全名叫文件传输协议(File Transfer Protocol),而HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,本文中这个例子是HTTP协议的一种基本功能罢了,通过www服务器把文件公开到局域网内,这样同一个局域网的设备就能获取到你的文件了

那要怎麼把文件搬到桌面呢?
cp?

为啥不直接用手机上面的AirDroid

阮大神,有没有http大文件下载的解决方案?服务端限制每次只能下载100M,对于超过100M的文件,有分片下载的方案么

阮老师,要是能介绍介绍中国的历法, 日期的起源什么的就太好了。

一直都理解不了,感觉真的太神奇了,天文跟日期历法高度结合一起。

我有个问题 手机键盘没有ctrl-c 怎么把server关掉?

在执行apt upgrade之前需要使用termux-setup-storage授权,不然会提示abort

引用iwen的发言:

微信和QQ不行吗

微信和QQ都可以,您可以继续使用。谢谢
=====================================
建议阁下将原回答反问句修改为陈述句,即“微信和QQ也可以传输文件。”
寄希望技术博客保持纯净,阮老师的文章大家可以自由选择是否阅读,介绍的各种工具或者技术可以自由决定使用或者不使用,根据文章内容可以提出各自观点,个人认为抬杠没有必要。

引用Mr Ma的发言:

阮老师的方案确实很好,不过如果只用来传文件的话就稍微有点麻烦了。如果只传文件的话可以在电脑上开一个 Web 服务器,用手机浏览器就可以很方便的上传和下载文件,而且只要能安装浏览器的手机都能用。

建议再次阅读文章后发表评论,很显然阮老师文中说的是共享手机文件到电脑上。

引用杨程的发言:

我有个问题 手机键盘没有ctrl-c 怎么把server关掉?

Termux有个自带的软键盘,包含ctrl在内的一些符号,可以方便的ctrl+c,开启方法为:手机触屏左上侧向右滑动。具体方法可以百度一下,全面屏手势可能会影响该操作。

引用袅残烟的发言:

为啥不直接用手机上面的AirDroid

文章开头一段写到,“普通用户可以使用手机线,将手机和电脑连起来。作为开发者,其实有更方便的方法,就是在手机架设一个 HTTP 服务,然后从桌面浏览器访问手机。”其中有“作为开发者,其实有更方便的方法”字样,表明该方法可能更方便,但并没有强迫或者威胁读者放弃使用数据线AirDroid和QQ微信等方式,阁下可以继续合法使用AirDroid,谢谢

使用ipad有类似的工具吗,
ipad 能不能安装nodejs

那个……Termux有pkg的原因是Termux官方源只保留newest的包,不update就有概率出现missing。

引用PC的发言:

这个跟FTP是什么关系呢

大概是协议的不同吧

如果有外网ip,是不是可以做到非局域网也可以访问了?

不错不错,现在手机都有ipv6地址了,正想测试下连通效果如何。谢谢你的好文章

termux-setup-storage无法唤出手机储存权限,请问大神这是什么问题

https://www.coolapk.com/apk/com.example.ryanc.andserv
这个软件更好用,思路一样的,搭建手机端web服务

引用imyhui的发言:

实际上这完全可以当做一个Linux服务器来使用,带个蓝牙键盘随时随地开发运维了hhh,就是。。。屏幕有点小

我一直就这么做的 蓝牙键盘推荐航世的HB199 然后他还带个telnetd和sshd 你可以把手机只是当作一个保存了你个人密钥的链接设备 在任何地方连上手机 然后登录服务器或者干别的 这招在公共场所非常好

ios有没有类似Termux的东西

为什么不用数据线?

termux-setup-storage
这个命令运行没反应什么情况

现在手机有远程管理吧

serve 这个工具也蛮不错的,起码页面好看一点

npm i -g serve

一定要在電腦上才能開嗎

手機裡面的資料夾找不到阿

用三星dex体验了一把,真的很有感觉哈哈哈

可以上传文件到termux手机里面去吗,我搭好了,只能下载到电脑,想把电脑的文件上传到手机要怎么实现?

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接