奇幻新游活动中心



淺談Termux檔案管理,將Linux環境的檔案與Android共享

Manage and access files in Termux APP.

討論Termux的目錄結構,以及將Linux環境的檔案與Android共享的技巧。

測試環境:

Android 14Termux 0.1191. Termux自身的根目錄#根據Termux Wiki,Termux並不符合FHS標準,跟一般電腦Linux發行版的目錄結構有差異。因此,如果你的軟體很依賴標準Linux目錄結構,那麼請考慮使用proot或chroot建立Linux容器環境較為保險。

Termux的檔案目錄(文件目錄)位於/data/data/com.termux/files/

這個目錄只有Termux可以存取。

Termux內提供二個環境變數:$TERMUX_PREFIX和$PREFIX,它們指向的都是/data/data/com.termux/files/usr目錄。

Termux透過pkg安裝的軟體通常會放到/data/data/com.termux/files/usr/bin

Termux家目錄位於/data/data/com.termux/files/home

沒有Root權限的情況下,Termux無法存取Android系統的根目錄(/)

2. Termux的家目錄#Termux家目錄位於/data/data/com.termux/files/home。執行指令的時候,家目錄路徑可以用~替代。

需要注意的是,Termux只有單一使用者帳號(用whoami指令確認),沒有root帳號。使用者也不能新增帳號。

家目錄只有Termux能存取,其他APP得透過Android Scoped Storage才能夠讀取該目錄。參見:用質感檔案APP存取Termux家目錄的做法

通常Termux家目錄下是沒有任何檔案的,不過用ls -a可以看到隱藏檔案

~ $ ls -a

. .bash_history .ssh

.. .npm .termux storage

.Xauthority .npmrc .vnc

那些點開頭的目錄大部分是軟體的設定檔,例如.termux就包含了程式行為和字體。

如果有安裝XFCE4桌面環境,Termux的家目錄便會自動生出符合XDG Base Directory標準的目錄。

如果要設定$PATH環境變數,請將其放到~/.bashrc或者~/.profile。

若想要一款純文字的檔案管理軟體,你可以在Termux安裝ranger套件,方便管理Termux家目錄下的檔案。

3. Termux讀取Android內部儲存空間#預設情況下Termux無法存取自身環境以外的Android使用者檔案。

在執行termux-setup-storage指令之後,Termux便能夠存取Android內部儲存空間的檔案。

準確來說,Termux會將Android的/sdcard路徑bind mount到Termux家目錄下的~/storage

Android內部儲存空間會掛載到Termux家目錄下的~/storage

利用ls指令查看~/storage/shared底下目錄可看到Android內部儲存空間的所有檔案

~ $ ls ~/storage/shared/

Documents Android Download Movies Pictures

DCIM Music

不過,Termux沒有Root權限是無法存取Android/data目錄的。

我們可以用cp指令複製Termux內的檔案到Android手機內部儲存空間

cp ~/file.txt ~/storage/shared/Download/

同樣也可以把Android手機內部儲存空間的檔案複製到Termux家目錄

cp ~/storage/shared/Download/file.txt ~

小心:執行rm -rf是能把Android手機內部檔案儲存空間的檔案全部刪除的(除了需要root權限存取的目錄以外),請謹慎操作指令。

請不要將軟體或者指令稿放到Termux以外的Android內部儲存空間目錄執行,很容易出現權限問題。

4. proot-distro讀取Android手機內部儲存空間#執行proot-distro指令進入Linux容器的時候,Termux預設會把~/storage/shared掛載到容器內部的/sdcard

所以在proot環境內,可以從/sdcard路徑存取Android手機內部儲存空間的檔案。

5. Termux存取SD卡檔案#Android手機插入SD卡與OTG裝置後通常會掛載在/storage

Termux無法申請存取外接SD卡與OTG裝置,必須使用Root權限才得以存取該目錄。

6. 利用termux-open指令分享檔案給其他APP#Termux提供termux-open指令,可以將檔案以其他APP開啟。

還有xdg-open指令,這個功能跟Linux桌面版的同名指令類似,都是用預設程式開啟檔案之用。在Termux環境下,它其實是連結到termux-open這個檔案。

譬如,讀取家目錄下的一張jpg圖片,執行termux-open指令,Android手機的「以…APP開啟檔案」的選單就會跳出來,然後你就能用相簿APP開啟這張圖片。

# 直接開啟檔案

termux-open --view test.jpg

# 以分享模式開啟

termux-open --send test.jpg

# 總是顯示選取APP的列表

termux-open --view --chooser test.jpg

termux-open指令只能用來分享單一檔案。如果想要從Termux啟動其他APP行程,那麼請使用ADB指令am start:

am start -n com.android.chrome/com.google.android.apps.chrome.Main

6. Termux使用Root權限存取Android系統目錄#在有安裝Magisk或者KernelSU的情況下

使用sudo 指令提升權限便可以存取Android系統的任意目錄

sudo ls /

可以搭配BusyBox存取Termux環境?是否能在Root過的Android Shell使用Busybox執行Termux環境下安裝的套件?

有點困難,不建議這樣做,建議直接用chroot。

7. 備份Termux環境的檔案#最好的方式是直接複製到Android內部儲存空間

有Root權限更好

參見Termux備份還原檔案

參考資料#Termux file system layout - GitHubDifferences from Linux - Termux Wiki