起因
幾個(gè)月前學(xué)了python,寫了幾個(gè)練手的爬蟲,要運(yùn)行很久才能下載到足夠的數(shù)據(jù),掛機(jī)一夜似乎有點(diǎn)費(fèi)電,我還心疼我的電腦呢。就一直想拿一個(gè)安卓手機(jī)來跑,當(dāng)時(shí)只當(dāng)個(gè)想法,并沒有動(dòng)手實(shí)施。結(jié)果最近恰逢老爸換手機(jī),于是舊手機(jī),一個(gè)紅米note2被我拿來了,于是開始了我的折騰之旅。我從未接觸過linux,但幸好這方面的教程已經(jīng)很多,通過大量搜索和實(shí)踐,走了很多彎路,總算能完成預(yù)期目標(biāo)了。
開始前
最好把手機(jī)root,雖然Termux不需要root權(quán)限也可以運(yùn)行,但root后可以用管理員權(quán)限,cd 進(jìn)入手機(jī)存儲(chǔ)目錄,后面可以干的事更多。
我把手機(jī)刷了miui7的開發(fā)版,反正也不會(huì)拿來用,隨便刷。
root后,推薦裝一個(gè)re explorer,用來和電腦傳文件。因?yàn)殡娔X沒法直接訪問手機(jī)內(nèi)置空間。
為什么是Termux
Termux是我們的主角,相當(dāng)于安卓上的linux虛擬機(jī)(這樣說肯定不對(duì),但權(quán)且這么理解吧),下載地址Google Play-Termux。
一開始我聽說GNU Root Debian功能更加強(qiáng)大,嘗試安裝這個(gè)花了很長時(shí)間。在google play上下載apk安裝后,每次打開都閃退,底下提醒GNU Root not yet installed...我按照提示,以為還要安裝GNU Root,正好google play上也有一個(gè)這名字的app,但安裝上后仍無法運(yùn)行。后來搜索發(fā)現(xiàn),有人稱此app無法在聯(lián)發(fā)科CPU的手機(jī)上運(yùn)行(貼吧-實(shí)戰(zhàn)紅米手機(jī)安裝Debian系統(tǒng)),不巧紅米note2就是聯(lián)發(fā)科的,倒霉...
所以我就選擇了Termux,可以說是因?yàn)闆]辦法,但事實(shí)證明,Termux很強(qiáng)大,絕對(duì)夠用。
Termux的安裝
我是按照知乎-如何讓自己在電腦上寫的python腳本在手機(jī)或安卓系統(tǒng)上運(yùn)行呢?上的回答來安裝并配置Termux和python環(huán)境的?;揪褪牵?/p>
1. 更新包
apt update
apt upgrade
2. 修改源
export EDITOR=vi
apt edit-sources
在vi編輯器里把第二行替換成以下內(nèi)容(清華鏡像源)
deb [arch=all,arm] http://mirrors.tuna.tsinghua.edu.cn/termux stable main
在vi編輯器里,輸入第一個(gè)i進(jìn)入編輯模式(插入),下面會(huì)給出提示“INSERT”,此時(shí)再打字就是在光標(biāo)左邊插入字符。等修改完畢后,按住音量上,同時(shí)輸入e,即可退出編輯模式。再輸入:wq保存并退出vi。
3. 安裝python3與相關(guān)模塊
# 安裝python3.6
apt install python python-dev
我目前僅會(huì)爬蟲,因此暫時(shí)只安裝了幾個(gè)用得到的模塊。
# 安裝爬蟲相關(guān)模塊
# beautifulsoup, requests
pip install BeautifulSoup4 requests
# lxml
apt-get install clang
apt-get install libxml2 libxml2-dev libxslt libxslt-dev
pip install lxml
使用Termux
安裝成功后就可以正常使用python了,有幾點(diǎn)技巧記下來。

1. 管理員身份
默認(rèn)是沒有管理員權(quán)限的,在執(zhí)行一些敏感操作時(shí)會(huì)提示Permission denied,或者在cd到一些目錄時(shí)會(huì)提示無此文件夾。
輸入su進(jìn)入管理員身份,第一次進(jìn)入時(shí)仍會(huì)提示Permission denied,但此時(shí)Termux已經(jīng)申請(qǐng)了獲取手機(jī)的root權(quán)限,進(jìn)入安全中心的root權(quán)限管理,給Termux通過即可。此時(shí)再次su就可以成功了。

在管理員身份下,輸入
exit可回到普通用戶身份。但Termux環(huán)境的根目錄是/data/data/com.termux/files,而在
su后的PATH環(huán)境變量是/sbin/su:/system/bin,很多命令就用不了(貼吧-Termux下root權(quán)限問題的解決辦法),比如此時(shí)就無法進(jìn)入python。
但按照上個(gè)網(wǎng)頁的說法,
tsu命令修復(fù)了PATH變量,但需要先安裝。
# 安裝tsu
pkg install tsu
但我嘗試了一下,tsu后執(zhí)行python仍提示未安裝,我沒有繼續(xù)往下試,也許能行?

2. 終止程序運(yùn)行
我們都知道用Ctrl+C終止程序,在Termux中,需要使用音量下+c。
3. 輸入法
我用的谷歌輸入法,一些常用的特殊符號(hào)可以在qwerty鍵盤上長按得到,比較方便。也有人推薦黑客鍵盤,試了下,不能輸入中文,在別的地方還得切換,麻煩。
但不管用什么輸入法,手機(jī)上敲代碼都太反人類了,下面介紹一下通過筆記本鍵盤連接Termux的方法。
遠(yuǎn)程鍵盤
我個(gè)人試驗(yàn)成功了兩種方法,都無需在電腦上安裝軟件,可以在命令行中運(yùn)行。但為了簡便起見,推薦安裝XShell5。
1. Remote Keyboard
通過Telnet方式與電腦通訊,下載地址Google Play-Remote Keyboard,幾乎無需配置,極為簡便。
軟件安裝后打開,即顯示以下界面

此時(shí)點(diǎn)擊上方Select Keyboard,將默認(rèn)輸入法選為Remote Keyboard。
然后在電腦上進(jìn)入命令行,輸入telnet [host] [port]。比如按照上圖,在命令行輸入:
telnet 192.168.1.103 2323
即可進(jìn)入telnet界面,此時(shí)在該窗口按下的任何字符都可以在手機(jī)的輸入界面上顯示。
如果上句報(bào)錯(cuò)telnet不是有效命令,按照百度經(jīng)驗(yàn)-Win7如何開啟Telnet服務(wù)所說開啟服務(wù)。
但此方法有幾個(gè)嚴(yán)重缺點(diǎn):
- 最重要的,會(huì)掉線,而且有時(shí)掉線后無論如何都無法重新連接上。
- 有延遲,偶爾掉包。
- 不支持組合鍵。
2. SSH
這個(gè)方法比較高級(jí),但配置很麻煩,我弄了一天。當(dāng)然有l(wèi)inux基礎(chǔ)的人能很快上手,不懂的按照我的步驟,也能很快配置完成。
手機(jī)上操作:
# 安裝openssh
apt install openssh
安裝完成后會(huì)在手機(jī)的data\data\com.termux\files\home下創(chuàng)建.ssh文件夾,里面有文件authorized_keys,用于儲(chǔ)存可以通過驗(yàn)證的機(jī)器公鑰。
電腦上操作:
在電腦命令行輸入ssh,看是否報(bào)錯(cuò)。如果報(bào)錯(cuò),下載并安裝OpenSSH,配置環(huán)境變量。確保命令行輸入ssh后正常運(yùn)行。
命令行輸入
ssh-keygen -t rsa
執(zhí)行完成后,會(huì)在C:\Users\username\.ssh文件夾下創(chuàng)建三個(gè)文件id_rsa, id_rsa.pub, known_hosts。分別是私鑰、公鑰和連接記錄,第一個(gè)文件不要泄露。
然后通過各種方式將id_rsa.pub文件復(fù)制到手機(jī)的data\data\com.termux\files\home\.ssh文件夾內(nèi)。有人用adb push,我不會(huì),用的復(fù)制粘貼大法...復(fù)制到電腦能訪問到的sd卡中,再在手機(jī)上用re explorer移動(dòng)到目標(biāo)文件夾(手機(jī)必須root才可以做到)。
手機(jī)上操作:
首先cd到.ssh文件夾,然后將公鑰內(nèi)容復(fù)制到驗(yàn)證文件中
# 復(fù)制公鑰內(nèi)容到驗(yàn)證文件
cat ./id_rsa.pub >> authorized_keys
再獲取用戶名,比如說u0_a118
whoami
還需要保證.ssh文件夾的權(quán)限為700(即rwx------),而且用戶為u0_a118。
通過執(zhí)行ll -a命令可以查看當(dāng)前路徑下的所有文件和文件夾權(quán)限,但不能在普通用戶權(quán)限下執(zhí)行該命令。
# 獲取管理員權(quán)限
su
# 進(jìn)入home目錄
cd data\data\com.termux\files\home
# 查看當(dāng)前路徑文件和文件夾權(quán)限
ll -a

若結(jié)果不對(duì),則需要修改
# 修改權(quán)限
chmod 700 .ssh
# 修改用戶和組
chown u0_a118:u0_a118 .ssh
同樣查看authorized_keys文件權(quán)限是否是600(rw-------),用戶是否正確。不是的話按上述方法修改。
此時(shí)已經(jīng)設(shè)置完成,通過sshd命令即可開啟ssh服務(wù)器。
# 指定端口9000
sshd -p 9000
電腦上操作:
命令行輸入ssh [username]@[host] -p [port]即可連接,比如
ssh u0_a118@172.16.2.11 -p 9000

此后,在電腦命令行輸入指令,手機(jī)即可執(zhí)行(但無任何顯示),甚至手機(jī)可以熄屏。完美!
最后,以成功運(yùn)行以前寫的爬蟲程序圖結(jié)尾。
