淺談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