8 votos

¿Cómo accedo a `$HOME/storage` fuera de Termux (con un explorador de archivos)?

¿Cómo accedo al directorio $HOME/storage de Termux en Android Pie con un explorador de archivos GUI?

En Termux imprimo el directorio de trabajo con pwd y muestra $HOME/storage como:

/data/data/com.termux/files/home

Mi almacenamiento interno se ve así:

.
 Alarms
 Android
|   data
|   |   ...
|   |   com.termux
|   |  |    files
|   |  |        0 items
|   |   ...
|    ...
 DCIM
 Download
 ...

Mi almacenamiento externo se ve así:

.
 Android
|   data
|   |   ...
|   |   com.termux
|   |  |    files
|   |  |        0 items
|   |   ...
|    ...
 LOST.DIR

Ni mi almacenamiento interno, ni mi tarjeta SD, contienen un directorio /data/ en el nivel root. ¿Dónde está este directorio /data/? ¿Dónde está el directorio root /storage/? ¿Dónde está el directorio root /emulated/? ¿Dónde están alguno de estos directorios y por qué no puedo acceder a ninguno de ellos?

6voto

Jack Wade Puntos 231

Si anteriormente ejecutaste termux-setup-storage, crea el archivo random_file.txt en $HOME/storage/shared. Eso se creará en /sdcard/. Pero no necesitas hacer ese trabajo. Simplemente otorga permiso de almacenamiento a Termux y guarda directamente en /sdcard/ por ejemplo.

echo xyz >/sdcard/random_file.txt

$HOME/storage es en realidad /data/data/com.termux/files/home/storage que no es accesible para otras aplicaciones sin acceso root. Así es como se diseñó la seguridad de Android.

¿Dónde está este directorio /data/?

Es una partición llamada userdata montada en rootfs en /data. Para más detalles ver ¿Cómo se utiliza el espacio en el dispositivo Android?

¿Dónde está el directorio root /storage/?

También es un directorio en rootfs donde se monta tmpfs. El contenido de este directorio se ve diferente para diferentes aplicaciones debido a los espacios de nombres de montaje y emulación de sistemas de archivos.

¿Dónde está el directorio root /emulated/?

Está en las siguientes tres ubicaciones:

/mnt/runtime/default/emulated
/mnt/runtime/read/emulated
/mnt/runtime/write/emulated

¿Dónde están alguno de estos directorios y por qué no puedo acceder a ninguno de ellos?

Estos directorios son los que ves cuando abres una aplicación de explorador de archivos. La ruta del sistema de archivos emulado es /sdcard.

En Android 6+, /data/media se emula en tres VISTAS mencionadas anteriormente. Una de esas está montada enlazada a /storage/emulated dependiendo del estado de permiso de almacenamiento de la aplicación. El directorio emulated contiene los ID de usuario de todos los usuarios (si hay varios usuarios o perfiles). El propietario del dispositivo siempre es 0. Entonces /sdcard apunta a /storage/emulated/0. Es el almacenamiento al que las aplicaciones pueden acceder para leer y escribir.

Además, las aplicaciones pueden leer y escribir en sus directorios de datos privados en /data/user// (que es /data/data/ para el propietario del dispositivo). Para más detalles ver ¿Qué es /storage/emulated/0? y ¿Qué es el UID "u#_everybody"?.

Desde tu comentario:

¿Puede Termux escribir en la tarjeta SD físicamente insertada en mi teléfono? Si es así, ¿cómo?

Las aplicaciones no tienen acceso de escritura de nivel de sistema de archivos a la tarjeta SD externa excepto aquellas que usan la API SAF. Citando de la documentación oficial, Termux no tiene soporte para SAF:

¿Por qué Termux tiene acceso de solo lectura a la tarjeta SD externa?

En versiones recientes de Android, el acceso de escritura a la tarjeta SD externa se realiza a través del Marco de Acceso al Almacenamiento. No es posible proporcionar su API a los programas de línea de comandos.

Sin embargo, las aplicaciones siempre pueden (con y sin permiso de almacenamiento) leer y escribir en sus directorios privados en el almacenamiento compartido es decir en el directorio Android/data/ (y otros) en /sdcard/ y en la tarjeta SD externa. Para más detalles ver ¿Cómo mover archivos a la tarjeta SD externa en un dispositivo Android sin root?

Desde tu comentario:

Entonces básicamente no tengo acceso al directorio root de mis propios dispositivos, ¿sin hacer root al dispositivo? ¿Solo puedo comenzar en el tercer nivel? Eso es frustrante.

La partición /data también contiene ajustes del sistema incluyendo datos sensibles como bases de datos de contraseñas (aunque no se guardan en texto plano). Por lo tanto, /data no es accesible sin permisos de root para:

  • Proteger los datos privados de las aplicaciones de otras aplicaciones (cada aplicación es un usuario UNIX con un UID único)
  • Proteger los datos y ajustes del sistema de aplicaciones maliciosas y malware
  • Aislar usuarios/perfiles de otros usuarios/perfiles
  • No permitir que las aplicaciones accedan al almacenamiento compartido sin el permiso de almacenamiento otorgado
  • Hacer cumplir las APIs por parte del marco de Android para que las aplicaciones no puedan usar los recursos del sistema y leer/manipular la información y ajustes del dispositivo sin los permisos adecuados

Y posiblemente hay otras razones. Para más detalles ver ¿Están protegidos los múltiples usuarios de manera diferente que las aplicaciones?

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X