Termux và Linux có gì khác biệt?

Những thiết lập và cấu hình trên Termux tương tự như trên một bản phân phối Linux. Tuy nhiên do chạy trên Android, nó có một số khác biệt cơ bản.

Termux không tuân thủ theo FHS

Termux không tuân thủ theo quy tắc FHS (Filesystem Hierarchy Standard) giống như những bản phân phối Linux khác. Các ông không thể tìm được những đường dẫn khá quen thuộc trên Linux như /bin, /etc, /usr, /tmp,... Như vậy các gói ứng dụng cần được chỉnh sửa lại hoặc biên dịch lại để phù hợp với yêu cầu của Termux, nếu không chúng có thể sẽ không tìm thấy được những dữ liệu hoặc các tệp cấu hình khác.

Các ông có thể gặp một số lỗi nếu chạy những kịch bản có shell-bang ở đầu ví dụ như #!/bin/sh . Sử dụng lệnh termux-fix-shebang để chỉnh sửa lại file trước khi thực thi chúng lên. Những phiên bản hiện tại của Termux cung cấp một gói đặc biệt (termux-exec) cho phép thực thi được một số shell-bang tiêu chuẩn. 

Một số gói ứng dụng phụ thuộc vào các thư việc dùng chung sẽ được cài đặt tại $PREFIX/lib. Trên những thiết bị Android 7.0 trở xuống, Termux cung cấp một biến môi trường đó là $LD_LIBRARY_PATH , ở đây chứa những liên kết đến những thư viện dùng chung mà có lẽ các gói ứng dụng đó sẽ cần. Với Android 7.0 trở lên, DT_RUNPATH ELF sẽ được sử dụng thay vì LD_LIBRARY_PATH

Nếu các ông vẫn thực sự cần một cấu trúc cây thư mục giống trên Linux vì một số lí do nào đó. Các ông hãy thử termux-chroot được cung cấp bởi gói "proot":

$ pkg install proot
$ termux-chroot
$ ls /usr
bin  doc  etc  include	lib  libexec  share  tmp  var

Tiện ích trên có lẽ sử hữu ích nếu các ông sử dụng một gói ứng dụng yêu cầu các đường dẫn tiêu chuẩn như /tmp, /etc, /usr 

Termux  sử dụng Bionic libc

Để tăng khả năng tương thích cao nhất và loại bỏ nhu cầu duy trì các công cụ tùy chỉnh, Termux và các gói ứng dụng được biên dịch dựa trên Android NDK. Kết quả, các tệp nhị phân được liên kết với Bionic libc (libc.so, libm.so, libdl.so từ /system/lib hoặc /system/lib64).

Sử dụng bionic libc cung cấp bởi Android và FHS không khả dụng, làm cho những gói ứng dụng gốc từ Linux sẽ không thực thi được trên Termux.

  • Các chương trình Dynamically linked sẽ không hoạt động do trình liên kết ở một vị trí không tồn tại (/lib) và libc ABI không phù hợp. 
  • Các chương trình Statically linked (Chỉ những chương trình yêu cầu kết nối mạng) sẽ không thể phân giải địa chỉ DNS. GNU libc  thường sẽ không cho phép liên kết tĩnh với trình phân giải. Ngoài ra, tệp /etc/resolv.conf không tồn tại trên Android.
  • Trên Android 8.0 hoặc mới hơn nếu không root. Các chương trình Statically linked sẽ không chạy do sự cố với bộ lọc seccomp.

Tuy nhiên, tất cả các vấn đề trên hầu như đều có thể giải quyết bằng gói proot

Hệ thống root file của Termux được lưu trữ dưới dạng dữ liệu một ứng dụng bình thường trên Android

Hệ thống file root (gốc) và file user được đặt trong thư mục dữ liệu ứng dụng riêng nằm trên phân vùng /data của Android. Đường dẫn đến các thư mục này được hiển thị lần lượt là $PREFIX$HOME

Các ông không thể di chuyển $PREFIX đến chỗ khác vì tất cả các phần mềm đều "hi vọng" rằng $PREFIX không bị thay đổi. Ngoài ra các ông không thể có tệp nhị phân, symlinks và những tệp dữ liệu khác từ $PREFIX được lưu trên SD. Lí do vô cùng đơn giản đó là bởi vì hệ thống file ở đây không hỗ trợ các quyền unix, symlinks, sockets,...

Quan trọng:  Nếu các ông xóa dữ liệu hoặc gỡ ứng ụng thì thư mục $PREFIX và $HOME sẽ bị xóa dữ liệu cùng. Đảm bảo rằng đã sao lưu dữ liệu trước khi thao tác xóa hoặc gỡ dữ liệu.

Termux là hệ thống đơn người dùng

Bất kì ứng dụng nào chạy trên Android đều sẽ được bọc bởi một sandbox và đều có một id và tên riêng. Termux không phải là ngoại lệ, tất cả những gì thuộc Termux đều được thực thi dưới id như id chính của ứng dụng.

Tất cả các gói ứng dụng của Termux (ngoại trừ các gói chỉ root) được sửa chữa để loại bỏ đa người dùng, setuid / setgid và các chức năng tương tự khác. Termux cũng thay đổi port mặc định của các gói server như port mặc định của ftpd, httpd và sshd sẽ được đặt lại thành 8021, 8080 và 8022.

Các ông có thể tự do đọc-viết vào bất kì gói nào thuộc $PREFIX vì vậy hãy cẩn thận vì rất dễ các ông có thể phá vỡ mọi thứ do vô tính xóa hoặc ghi đè chúng.

Đọc thêm:

  • Chạy các hệ điều hành linux bằng Termux PRoot
  • Chia sẻ dữ liệu giữa Termux và những ứng dụng khác
  • Termux-exec