-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Termux file system layout
The following docs provide info on Android and Termux paths, and their differences. It additionally details the limitations for Termux to provide a Filesystem Hierarchy Standard (FHS) compliant filesystem and related issues for Linux syscalls(2)
.
The Android filesystem rootfs and home ($HOME
) directory exists at /
. It contains a number of directories, some of them are FHS-compliant. Most of the directories are not accessible to third party apps, which can only access their own private app data directories or optionally the external/public storage directories if they have been granted storage permissions. Some directories like /system
are read-only by default to provide a secure environment for apps to run in. Users and packages should never attempt to modify such directories, even with root, unless you know what you are doing, otherwise security checks depending on Android version will prevent the phone from booting.
Path | Description |
---|---|
/ |
The filesystem rootfs. Usually it is a ramdisk, but on modern Android OS versions it is a mounted system partition. Can be restricted by SELinux and not be viewable by ls . |
/bin |
Symlink to /system/bin . Do not add this to $PATH to prevent conflicts of Termux utilities with ones provided by Android. |
/data |
The data partition of the internal sd card of the device that stores app and system data. |
/data/app |
App APKs and native libraries for 3rd party apps. |
/data/data |
Private app data directory for apps installed on primary user 0 for both system and 3rd party apps. |
/data/user/<user_id> |
Private app data directory for apps installed on primary and secondary users for both system and 3rd party apps. The /data/user/0 is either a symlink or bind mount to /data/data . |
/dev |
Device files. Access can be restricted by SELinux, though all important world-writable devices are accessible. |
/etc |
Symlink to /system/etc . |
/mnt |
Raw mount points of filesystems for internal and external sd cards. (1) |
/proc |
Standard directory with runtime process and kernel information. Typically mounted with hidepid=2 option for privacy. |
/proc/net |
Networking interface statistics. Access restricted since Android 10 for privacy reasons. |
/sbin |
Directory where special-purpose executables (ADB daemon, dm-verity helper, modem nvram loader, etc). Access is restricted by SELinux and file modes. Do not add this directory to $PATH . |
/storage |
External storage mount points accessible to apps with storage permissions. Like /mnt , but drive filesystems are provisioned by sdcardfs or fuse daemon. (1) |
/system |
The Android OS system root. |
/system/app |
App APKs and native libraries for system apps. |
/system/bin |
System executables for system purposes and fully-functional ADB shell. Avoid adding this to $PATH to prevent conflicts of Termux utilities with ones provided by Android. Exceptions are allowed only for alternate executable paths, e.g. in case if package is not installed. |
/system/lib |
System libraries. |
/system/priv-app |
App APKs and native libraries for privileged system apps. |
/system/xbin |
Optional set of system command line tools. Content may vary between ROMs. Do not add this to $PATH . |
The Android system provided executables primarily exist under /system/bin
that are part of AOSP itself that should exist on all devices depending on Android version as detailed by Android shell_and_utilities
docs. The core utilities are primarily provided by toybox
(1, 2, 3) for Android >= 6
and toolbox
(1) for Android < 6
and mostly have limited features compared to GNU
coreutils
provided by Termux and other linux distros, like debian
. Moreover, older android versions do not have all the utilities or their features are missing or are severely broken. Additional apex, vendor or product partition specific (1, 2, 3), or custom ROM specific executables may exist under additional paths like /apex
, /vendor
, /product
or under /sbin
and /system/xbin
directories.
The Android system provided shared libraries exist under /system/lib64
and/or /system/lib
(or instead under /apex/*/lib
) depending on if Android is 64-bit
or 32-bit
. Additional libraries may exist under /odm/lib[64]
, /vendor/lib[64]
, /data/asan/system/lib[64]
, /data/asan/odm/lib[64]
and /data/asan/vendor/lib[64]
.
Android OS normally does not provide write access to system directories under Android filesystem rootfs /
to apps and many are read-only for security purposes, so apps like Termux cannot create or modify files in them, like under the /bin
, /lib
, /usr
, /etc
, etc directories. This makes it impossible for the Linux environment provided by Termux (without root) to follow the Filesystem Hierarchy Standard (FHS). Additionally, even if modifying such directories were possible, installing or replacing files under them would either break Android or Termux (or both) since they both require different files to exist under various directories and executables are linked against their own compatible shared libraries and mixing them is not possible (1). However, if Termux app has been granted root access on a rooted device, then chroot
(1, 2) can be used to run a Linux distro that follows FHS, but most Android devices are not rooted and so using chroot
by default is not a possibility.
Path | Description |
---|---|
/data/data/com.termux |
Termux Private App Data Directory |
/data/data/com.termux/termux |
Termux Project Directory |
/data/data/com.termux/termux/core |
Termux Core Directory |
/data/data/com.termux/termux/apps |
Termux Apps Directory |
/data/data/com.termux/files |
Termux Rootfs Directory |
/data/data/com.termux/files/home |
Termux Home Directory |
/data/data/com.termux/files/usr |
Termux Prefix Directory |
/data/data/com.termux/cache |
Termux App Cache Directory |
Since Android does not provide arbitrary access to system directories to apps, when an app is installed, it is assigned two unique things, a unique private app data directory and a unique uid
.
The private app data directory assigned to the app is normally under /data/data/<package_name>
(for user 0
) or /data/user/<user_id>/<package_name>
(for all users) if app is installed on internal sd, or under /mnt/expand/<volume_uuid>/user/<user_id>/<package_name>
if app is installed on a removable/portable volume/sd card being used as adoptable storage. The package_name
refers to the unique package name for the app for which its APK file was compiled for. (1, 2) The user_id
refers to the id for the user in which an app is installed and running. The default/primary user id is 0
. The ids for secondary users and profiles start at id 10
. The partitions for the directories are normally formatted as ext4
or f2fs
filesystem, which supports symlinks and other file attributes. For Termux installed on primary user 0
, the private app data directory path is /data/data/com.termux
and Termux app can only be installed in the primary user and not secondary users/profiles as Termux packages are specifically compiled for the Termux rootfs
directory /data/data/com.termux/files
($TERMUX__ROOTFS
) that exists under it.
The uid (id -u
) assigned to the app for its private app data directory and processes is calculated as per user_id * AID_USER_OFFSET + AID_APP_START + app_id
, where AID_USER_OFFSET=100000
(offset for uid ranges for each user), AID_APP_START=10000
(first app user) and AID_APP_END=19999
(last app user). The app_id
is the unique id assigned to an app which gets incremented for each new app during its install session. (1, 2, 3, 4, 5) If the same app is installed in secondary users, it will be assigned the same app_id
, but uid
will have a different user_id
to distinguish them and the categories
in the SeLinux contexts assigned to the processes and files of the apps as part of Multi-Category Security (MCS) will be different too. (1, 2, 3, 4, 5). The user names (id -un
) for app processes are in the format u<user_id>_a<app_id>
for normal app processes, like u0_a160
and in the format u<user_id>_i<app_id>
for isolated app processes, like u0_i160
. For example, for normal app processes with the app_id=160
:
- user_id=0: (0 * 100000 + 10000 + 160) -> 10160/u0_a160
- user_id=10: (10 * 100000 + 10000 + 160) -> 1010160/u10_a160
- user_id=256: (256 * 100000 + 10000 + 160) -> 25610160/u256_a160
- user_id=1000: (1000 * 100000 + 10000 + 160) -> 100010160/u1000_a160
This private app data directory assigned to the app is not accessible to any other app by default and is safe to use to store private files. This is done with 3 different security mechanisms.
- UID-based DAC security ensures that private app data directory has the same ownership as the app uid and the permissions (read, write and execute) are not granted to
other
group by Android by default, so each app can only access files owned by its ownuid
. (1, 2) - SeLinux Multi-Category Security (MCS) prevents an app to
Isolate the app data from access by another app
andIsolate the app data from one physical user to another
. (1) If SeLinux is disabled by user with root, then only DAC security is used and if user changes permissions of private app data directory for theother
group, then files may become accessible, so disabling SeLinux is not recommended. - Apps using
targetSdkVersion
30
(Android11
) run in an isolated environment in which/data/data/<package_name>
,/data/user/<user_id>/<package_name>
and/mnt/expand/<volume_uuid>/user/<user_id>/<package_name>
directories of other apps do not exist in its mount namespace. Termux may still have directories of other apps in its mount namespace as it usestargetSdkVersion
= 28
by default, even though they are not accessible by default.
However, files under Termux private app data directory can be made accessible to other apps in the following ways.
- If the other app uses
sharedUserId
equal tocom.termux
used by the main Termux app and its APK is signed with the same signing key as that of main Termux app APK. Such apps share the sameuid
and can access each other's unique private app data directories. This is used by some of the official Termux app plugins to allow them to access Termux rootfs files. Note that the signing key of Termux GitHub builds is public as detailed in the installation docs, so anyone can create an update for the Termux app that will install over the existing Termux app, or be able create a new app with the samesharedUserId
as the Termux app to get access to Termux files, so never install apps from untrusted sources if using GitHub builds. The signing key of F-Droid builds is private and does not have this security issue. - Access is explicitly granted to an app by the user to the Termux rootfs via Storage Access Framework (SAF) provided by Android. (1, 2).
- Access is explicitly granted to an app by the user to Termux APIs, like
RUN_COMMAND Intent
. These APIs normally have dual protection if a wide access is to be granted and requires manually granting the other app theRUN_COMMAND
permission in Android settings and enablingallow-external-apps
Termux property inside the Termux app.
Termux project directory /data/data/com.termux/termux
($TERMUX__PROJECT_DIR
) added in Termux app v0119.0
is an exclusive directory for all termux files that includes core files, app and plugin app files and the rootfs. Currently, be default rootfs is not under it and is at the /files
subdirectory but there are plans to move it to termux/rootfs/II
in future where II
refers to rootfs id starting at 0
for multi-rootfs support.
An exclusive directory is required so that all termux files exist under a single directory, especially for when termux is provided as a library, so that termux files do not interfere with other files of Termux app forks or apps that may use the termux library.
Termux core directory /data/data/com.termux/termux/core
($TERMUX__PROJECT_DIR
) added in Termux app v0119.0
contains Termux core files for the Termux app, like user settings and configs for the app, which and are independent of any specific rootfs.
Termux apps directory /data/data/com.termux/termux/apps
($TERMUX__APPS_DIR
) added in Termux app v0119.0
contains app specific files for Termux app, its plugin apps, and third party apps, like used for app APIs and filesystem/pathname socket files of servers created by the apps.
Termux rootfs directory /data/data/com.termux/files
($TERMUX__ROOTFS
) contains the Linux environment rootfs provided by Termux.
The Termux rootfs is different from the Android host filesystem rootfs at /
on which Termux runs, which also (obviously) exists in the Termux app mount namespace, including any of the normal sub directories under /
created by Android itself, but apps do not have write access to such directories (without root
access) and read access is also limited to a few public directories like Android /system
. The only directories other than the private app data directory that apps have write access to are the external storage directories under /mnt/media_rw
, /storage/emulated
and /sdcard
depending on storage permissions granted to the app, but they primarily have emulated fat
filesystems on which programs cannot be executed or work properly, check File Execution And Special File Features Not Allowed In External Storage for more info.
The Termux rootfs contains the sub directories for Termux Home and Termux Prefix directories.
The Termux home ($HOME
) directory exists at /data/data/com.termux/files/home
($HOME
/$TERMUX__HOME
) by default. However, $HOME
value may be changed by some programs, like su
wrappers (sudo
, tsu
) to /data/data/com.termux/files/home/.suroot
so that root
owned files are kept separate from Termux user owned files. Note that Termux is a single user environment, and all its files can only ever be owned by the random uid
Android assigns to Termux app during installation, which cannot be changed to a custom value. Moreover, even if Termux app is granted root access to be able to run root
owned processes that have the access to create/modify files owned by other users, like root
user, any Termux app user owned processes will still only be able to access files with the same owner and SeLinux file context type. If a user uses root
access to create files or change ownership of files that are normally used by Termux app processes under $TERMUX__ROOTFS
, then Termux environment may break as app processes wouldn't be able to access the required files, so it is highly recommended to not use root
unless you know what you are doing. Termux package managers (apt
/pacman
) are also patched so that they cannot be run as root
. (1, 2, 3)
Packages should never install files to the home directory. Exception is only for package maintainer scripts (1, 2), which can be used to prepare initial configuration in $HOME
for packages which can't do it on their own.
The Termux prefix directory exists at /data/data/com.termux/files/usr
($TERMUX__PREFIX
/$PREFIX
) by default. It serves the same purpose as the /usr
directory on linux distros and contains the bin
, etc
, include
, lib
, libexec
, opt
, share
, tmp
and var
sub directories. It is exported as $TERMUX_PREFIX
instead of $PREFIX
in addition to $TERMUX__PREFIX
in Termux packages build system.
For safety of user data, it is not allowed to create packages installing files outside of this directory.
Important: Do not confuse the
/usr
directory with Termux prefix directory/data/data/com.termux/files/usr
. Termux never uses the FHS compliant/usr
directory found on Linux distros for packaging purposes.
All hardcoded references to FHS directories in package source files are patched and replaced with Termux prefix directory during build time , like /bin
or /usr/bin
will get replaced with /data/data/com.termux/files/usr/bin
.
Path | Description |
---|---|
$TERMUX__PREFIX/bin |
Executables. Combines /bin , /sbin , /usr/bin , /usr/sbin . |
$TERMUX__PREFIX/etc |
Configuration files. |
$TERMUX__PREFIX/include |
C/C++ headers. |
$TERMUX__PREFIX/lib |
Libraries, runtime executable data or development-related. |
$TERMUX__PREFIX/libexec |
Executables which should not be run by user directly. |
$TERMUX__PREFIX/opt |
Installation root for sideloaded packages. |
$TERMUX__PREFIX/share |
Non-executable runtime data and documentation. |
$TERMUX__PREFIX/tmp |
Temporary files. Erased on each application restart. Combines /tmp and /var/tmp . Can be freely modified by user.
|
$TERMUX__PREFIX/var |
Variable data, such as caches and databases. Can be modified by user, but with additional care. |
$TERMUX__PREFIX/var/run |
Lock files, PID files, sockets and other temporary files created by daemons. Replaces /run . |
The Termux provided executables currently primarily exist under /data/data/com.termux/files/usr/bin
($TERMUX__PREFIX/bin
). Some packages, like busybox
, may have their executables under /data/data/com.termux/files/usr/bin/applets
($TERMUX__PREFIX/bin/applets
). The core utilities are provided by GNU
coreutils
to have a consistent experience with other linux distros, like debian
.
The Termux provided static and shared libraries exist under /data/data/com.termux/files/usr/lib
($TERMUX__PREFIX/lib
).
Termux apps cache directory /data/data/com.termux/cache
($TERMUX__CACHE_DIR
) contains cache files that are safe to be deleted by Android or Termux if required.
The cache
subdirectory is hardcoded in Android and cannot be changed.
Android considers storage to be in a low storage state if free storage is at 5%
of total storage or 500MB
, which ever is lower. Cache directories get deleted when free storage is at 150%
of the low storage value. So if low storage is 500MB
, cache directories would get deleted at 500 x 1.5 = 750MB
. The values may vary on different Android versions and the default values can be changed with the sys_storage_threshold_percentage
and sys_storage_threshold_max_bytes
global
settings
.
- https://cs.android.com/android/platform/superproject/+/android-14.0.0_r1:frameworks/base/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java;l=183-198
- https://cs.android.com/android/platform/superproject/+/android-14.0.0_r1:frameworks/base/core/java/android/os/storage/StorageManager.java;l=1444-1505
- https://cs.android.com/android/platform/superproject/+/android-14.0.0_r1:frameworks/base/core/java/android/provider/Settings.java;l=13972-13995
- https://cs.android.com/android/platform/superproject/+/android-14.0.0_r1:frameworks/base/services/core/java/android/content/pm/PackageManagerInternal.java;l=909-916
- https://cs.android.com/android/platform/superproject/+/android-14.0.0_r60:frameworks/base/services/core/java/com/android/server/pm/FreeStorageHelper.java;l=112
- https://cs.android.com/android/platform/superproject/+/android-14.0.0_r1:frameworks/native/cmds/installd/InstalldNativeService.cpp;l=1915-2120
Currently cache directory is primarily used for packages cache files of package managers (apt
/pacman
). Note that if downloading a large package or upgrading all packages (pkg upgrade
), then all package files (*.deb
/*.pkg.tar.xz
) that need to be installed are all downloaded first, and if free storage space falls below threshold, then all downloaded files will get deleted before installation finishes and it will fail with No such file or directory
errors, so make sure to have enough free space or update all packages manually in smaller groups.
To choose the max file path length limits requires considering the limitations of Linux/Android, and their syscalls(2)
. Linux assumes rootfs is at /
, but for Termux, the rootfs directory needs to be under the app data directory path that android assigns the app, and hence it causes problems for linux system calls where buffer lengths are limited. Using PATH_MAX
(4096
) that is defined by POSIX is not possible for every Linux API.
The Termux apps and rootfs directory paths depends on:
-
Termux Private App Data Directory paths on Android are normally under
/data/data/<package_name>
for user0
, or under/data/user/<user_id>/<package_name>
or/mnt/expand/<volume_uuid>/user/<user_id>/<package_name>
for secondary users. The/mnt/expand
path is for apps installed on adoptable storage volumes, like external sd cards. - The
package_name
on Android can be max255
characters due toext4
filesystem limit as perNAME_MAX
that is defined by POSIX. (1, 2, 3) - The
volume_uuid
for an/mnt/expand
path is equal to36
characters in the formatVVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV
. - The
user_id
refers to the id for the user in which an app is installed and running. The default/primary user id is0
. The ids for secondary users and profiles start at id10
. Auser_id
can have a max1000
value, so should use max4
characters. (1, 2) Since only1-10
users are allowed to be created normally, based on thefw.max_users
property orconfig_multiuserMaximumUsers
config (pm get-max-users
), so user id should only use 2 characters normally. (1, 2, 3) - An app will normally put rootfs (
TERMUX__ROOTFS
) under a subdirectory of the app data directory. For Termux, this is currently thefiles
(5
) sub directory at/data/data/com.termux/files
, but there are plans to move it totermux/rootfs/II
(16
) in future whereII
refers to rootfs id starting at0
for multi-rootfs support. Termux forks may use a different path, so length may be lesser or higher. - The uid (
id -u
) for app processes used forTERMUX__APPS_DIR_BY_UID
are calculated as peruser_id * AID_USER_OFFSET + AID_APP_START + app_id
, whereAID_USER_OFFSET=100000
(offset for uid ranges for each user),AID_APP_START=10000
(first app user) andAID_APP_END=19999
(last app user) as documented in the Termux Private App Data Directory section. Theuid
max length is limited toTERMUX__APPS_APP_UID_MAX_LEN
(9
) characters.
The path length of Termux apps and rootfs directory may cause the following problems:
-
A filesystem socket (pathanme UNIX domain socket) requires that the
sockaddr_un.sun_path
is limited to108
characters including the null\0
terminator as perUNIX_PATH_MAX
/TERMUX__UNIX_PATH_MAX
. A filesystem socket is created by Termux app fortermux-am-socket
fortermux-am
command under the Termux apps directory/data/data/@TERMUX_APP__PACKAGE_NAME@/termux/apps
(not Termux rootfs directory). It's also planned to be used for Termux plugin apps for Termux APIs. Packages may create filesystem sockets in the$TMPDIR
under the Termux rootfs directory. -
For the
execve()
system call, the kernel imposes a maximum length limit on script shebang including the#!
characters at the start of a script. For Linux< 5.1
, the limit is128
characters and for Linux>= 5.1
, the limit is256
characters as perBINPRM_BUF_SIZE
including the null\0
terminator. (1, 2) Iftermux-exec
is set inLD_PRELOAD
andTERMUX_EXEC__INTERCEPT_EXECVE
is enabled, then shebang limit is increased to340
characters defined byFILE_HEADER__BUFFER_LEN
(TERMUX__ROOTFS_DIR_MAX_LEN + BINPRM_BUF_SIZE - 1
) defined inexec.h
as shebang is read and script is passed to interpreter as an argument bytermux-exec
manually. So ifLD_PRELOAD
will be set for all Termux shells, then this limit does not need to be worried about. Increasing limit to340
also fixes issues for older Android kernel versions where limit is128
. The limit is increased to340
, becauseBINPRM_BUF_SIZE
would be set based on the assumption that rootfs is at/
, so we add Termux rootfs directory max length to it.
Based on the above limitations and examples below, the following limits are chosen. The limits are defined by properties.sh
in termux-packages
, TermuxCoreConstants
in termux-app
and termux_files.h
in termux-exec
.
TERMUX__INTERNAL_NAME_MAX_LEN=7
TERMUX__APPS_DIR_MAX_LEN=84
TERMUX__APPS_APP_IDENTIFIER_MAX_LEN=11
TERMUX__APPS_APP_UID_MAX_LEN=9
TERMUX__ROOTFS_DIR_MAX_LEN=86
TERMUX__UNIX_PATH_MAX=108
For compiling Termux packages for /data/data
or /data/data/UU
paths, ideally package name should be <= 21
characters and max 33
characters. If package name has not yet been chosen, then it would be best to keep it to <= 10
characters.
For compiling Termux packages for /mnt/expand
paths or if it may be supported in future, keep package name at max 11
characters, but even that will only give 13
characters for a filesystem socket sub path under $TMPDIR
and would require patching patches if a longer sub paths are used.
The max length TERMUX__INTERNAL_NAME_MAX_LEN
for TERMUX__INTERNAL_NAME
is chosen as 7
based on the max recommended package name length minus the common domain name TLD suffix length of 4
(like .dev
, .com
, etc).
If filesystem socket functionality is required for Termux apps, then Termux apps directory path length should be <= 83
and if required for Termux packages, then Termux rootfs directory path length should be <= 85
.
The max length TERMUX__APPS_DIR_MAX_LEN
(including the null \0
terminator) for TERMUX__APPS_DIR_BY_IDENTIFIER
and TERMUX__APPS_DIR_BY_UID
is chosen as 84
based on the 12
, 14
, 16
and 19
examples below, which allow multiple unique filesystem sockets under apps directory for each unique app as long as apps directory length <= 83
.
The max length TERMUX__ROOTFS_DIR_MAX_LEN
(including the null \0
terminator) for TERMUX__ROOTFS
is chosen as 86
based on the 37
and 41
examples below, which allow multiple unique filesystem sockets under $TMPDIR
for each unique program as long as rootfs directory length <= 85
, but would require patching patches that use longer paths under $TMPDIR
.
In the following examples:
-
V
refers to volume id. -
U
refers to user id. -
P
refers to Termux app package name. -
I
refers to Termux rootfs id. -
N
refers to Termux app or plugin app identifier name limited toTERMUX__APPS_APP_IDENTIFIER_MAX_LEN
(11
) characters. For exampletermux-xxxx
. -
A
refers to Termux app or plugin app uid (user_id + app_id) (id -u
) limited toTERMUX__APPS_APP_UID_MAX_LEN
(9
) characters. For example10160
or100010160
. -
D
refers to a unique directory identifier template, like generated withmkstemp
that requires minimum 6X
characters as template. -
X
refers to a unique filename identifier template, like generated withmkstemp
that requires minimum 6X
characters as template. -
S
refers to a sub path. -
*/termux
refers toTERMUX__PROJECT_DIR
whose directory basename is set toTERMUX__INTERNAL_NAME
and is limited toTERMUX__INTERNAL_NAME_MAX_LEN
(7
) characters (and currently has length6
). -
*/termux/apps/i
refers toTERMUX__APPS_DIR_BY_IDENTIFIER
that are created for each app based on a unique app identifier. -
*/termux/apps/u
refers toTERMUX__APPS_DIR_BY_UID
that creates directories for each app based on its unique app uid (user_id + app_id) assigned to it by Android at install time. -
t
intXXXXXX
refers to type of socket, it may bei
for a input socket ando
for an output socket that belong to the same API call.
##### Apps filesystem sockets
1. `/data/data/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/apps/i/NNNNNNNNNNN/termux-am` (`path=82`,`package_name=35`)
2. `/data/data/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/apps/i/NNNNNNNNNNN/s/tXXXXXX` (`path=82`,`package_name=35`)
3. `/data/data/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/apps/u/AAAAAAAAA/s/tXXXXXX` (`path=80`,`package_name=35`)
5. `/data/data/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/apps/i/NNNNNNNNNNN/termux-am` (`path=107`,`package_name=60`)
6. `/data/data/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/apps/i/NNNNNNNNNNN/s/tXXXXXX` (`path=107`,`package_name=60`)
4. `/data/data/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/apps/u/AAAAAAAAA/s/tXXXXXX` (`path=107`,`package_name=62`)
7. `/data/data/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/apps/u/AAAAAAA/DDDDDD/XXXXXX` (`path=107`,`package_name=60`)
8. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/apps/i/NNNNNNNNNNN/termux-am` (`path=85`,`package_name=35`)
9. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/apps/i/NNNNNNNNNNN/s/tXXXXXX` (`path=85`,`package_name=35`)
10. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/apps/u/AAAAAAAAA/s/tXXXXXX` (`path=85`,`package_name=37`)
12. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/apps/i/NNNNNNNNNNN/termux-am` (`path=107`,`package_name=57`)
13. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/apps/i/NNNNNNNNNNN/s/tXXXXXX` (`path=107`,`package_name=57`)
11. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/apps/u/AAAAAAAAA/s/tXXXXXX` (`path=107`,`package_name=59`)
14. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/apps/u/AAAAAAAAA/DDDDDD/XXXXXX` (`path=107`,`package_name=55`)
15. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/apps/i/NNNNNNNNNNN/termux-am` (`path=128`,`package_name=35`) (**invalid**)
16. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPPPPP/termux/apps/i/NNNNNNNNNNN/termux-am` (`path=107`,`package_name=14`)
17. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPPPPP/termux/apps/i/NNNNNNNNNNN/s/tXXXXXX` (`path=107`,`package_name=14`)
18. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPPPPPPP/termux/apps/u/AAAAAAAAA/s/tXXXXXX` (`path=107`,`package_name=16`)
19. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPPP/termux/apps/u/AAAAAAAAA/DDDDDD/XXXXXX` (`path=107`,`package_name=12`)
##### $TMPDIR filesystem sockets (current rootfs)
20. `/data/data/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/files/usr/tmp/DDDDDD/XXXXXX` (`path=74`,`package_name=35`)
21. `/data/data/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/files/usr/tmp/DDDDDD/XXXXXX` (`path=107`,`package_name=68`)
22. `/data/data/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/files/usr/tmp/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=107`,`package_name=35`, `tmp_sub_path=46`)
23. `/data/data/PPPPPPPPPPPPPPPPPPPPP/files/usr/tmp/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=107`,`package_name=21`, `tmp_sub_path=60`)
24. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/files/usr/tmp/DDDDDD/XXXXXX` (`path=77`,`package_name=35`)
25. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/files/usr/tmp/DDDDDD/XXXXXX` (`path=107`,`package_name=65`)
26. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/files/usr/tmp/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=107`,`package_name=35`, `tmp_sub_path=43`)
27. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPP/files/usr/tmp/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=107`,`package_name=21`, `tmp_sub_path=57`)
28. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/files/usr/tmp/DDDDDD/XXXXXX` (`path=120`,`package_name=35`) (**invalid**)
29. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPPPPPPPPPPPPP/files/usr/tmp/DDDDDD/XXXXXX` (`path=107`,`package_name=22`)
30. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/files/usr/tmp/S` (`path=108`,`package_name=35`, `tmp_sub_path=1`) (**invalid**)
31. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPP/files/usr/tmp/SSSSSSSSSSSSSSSSSSSSSSSSS` (`path=107`,`package_name=11`, `tmp_sub_path=25`)
##### $TMPDIR filesystem sockets (future rootfs)
32. `/data/data/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/rootfs/II/usr/tmp/DDDDDD/XXXXXX` (`path=85`,`package_name=35`)
33. `/data/data/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/rootfs/II/usr/tmp/DDDDDD/XXXXXX` (`path=107`,`package_name=57`)
34. `/data/data/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/rootfs/II/usr/tmp/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=107`,`package_name=35`, `tmp_sub_path=35`)
35. `/data/data/PPPPPPPPPPPPPPPPPPPPP/termux/rootfs/II/usr/tmp/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=107`,`package_name=21`, `tmp_sub_path=49`)
36. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/rootfs/II/usr/tmp/DDDDDD/XXXXXX` (`path=88`,`package_name=35`)
37. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/rootfs/II/usr/tmp/DDDDDD/XXXXXX` (`path=107`,`package_name=54`)
38. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/rootfs/II/usr/tmp/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=107`,`package_name=35`, `tmp_sub_path=32`)
39. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPP/termux/rootfs/II/usr/tmp/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=107`,`package_name=21`, `tmp_sub_path=46`)
40. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/rootfs/II/usr/tmp/DDDDDD/XXXXXX` (`path=131`,`package_name=35`) (**invalid**)
41. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPP/termux/rootfs/II/usr/tmp/DDDDDD/XXXXXX` (`path=107`,`package_name=11`)
42. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/rootfs/II/usr/tmp/S` (`path=119`,`package_name=35`, `tmp_sub_path=1`) (**invalid**)
43. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPP/termux/rootfs/II/usr/tmp/SSSSSSSSSSSSS` (`path=107`,`package_name=11`, `tmp_sub_path=13`)
##### bin paths (current rootfs)
44. `/data/data/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/files/usr/bin/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=127`,`package_name=35`, `bin_sub_path=66`)
45. `/data/data/PPPPPPPPPPPPPPPPPPPPP/files/usr/bin/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=127`,`package_name=21`, `bin_sub_path=80`)
46. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/files/usr/bin/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=127`,`package_name=35`, `bin_sub_path=43`)
47. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPP/files/usr/bin/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=127`,`package_name=21`, `bin_sub_path=77`)
48. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/files/usr/bin/SSSSSSSSSSSSSSSSSSSS` (`path=127`,`package_name=35`, `bin_sub_path=20`)
49. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPP/files/usr/bin/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=127`,`package_name=11`, `bin_sub_path=44`)
##### bin paths (future rootfs)
50. `/data/data/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/rootfs/II/usr/bin/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=127`,`package_name=35`, `bin_sub_path=55`)
51. `/data/data/PPPPPPPPPPPPPPPPPPPPP/termux/rootfs/II/usr/bin/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=127`,`package_name=21`, `bin_sub_path=69`)
52. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/rootfs/II/usr/bin/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=127`,`package_name=35`, `bin_sub_path=52`)
53. `/data/user/UU/PPPPPPPPPPPPPPPPPPPPP/termux/rootfs/II/usr/bin/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=127`,`package_name=21`, `bin_sub_path=66`)
54. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/termux/rootfs/II/usr/bin/SSSSSSSSS` (`path=127`,`package_name=35`, `bin_sub_path=9`)
55. `/mnt/expand/VVVVVVVV-VVVV-VVVV-VVVV-VVVVVVVVVVVV/user/UU/PPPPPPPPPPP/termux/rootfs/II/usr/bin/SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS` (`path=127`,`package_name=11`, `bin_sub_path=33`)