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 problema. Simplemente otorga el 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
el cual no es accesible para otras aplicaciones sin acceso root. Así es como está diseñada 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 disco en un dispositivo Android?
¿Dónde está el directorio root /storage/
?
También es un directorio en rootfs donde se monta tmpfs
. Los contenidos de este directorio se ven diferentes para diferentes aplicaciones debido a los espacios de nombres de montaje y emulación del sistema de archivos.
¿Dónde está el directorio root /emulated/
?
Está en los siguientes tres lugares:
/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 es lo que ves cuando abres una aplicación exploradora de archivos. La ruta del sistema de archivos emulado es /sdcard
.
En Android 6+, /data/media
es emulado en tres VISTAS mencionadas arriba. Una de esas está montada como enlace en /storage/emulated
dependiendo del estado del permiso de Almacenamiento de la aplicación. El directorio emulated
contiene los User_ID de todos los usuarios (si hay múltiples usuarios o perfiles). El propietario del dispositivo siempre es 0
. Por lo tanto, /sdcard
apunta a /storage/emulated/0
. Es el almacenamiento al cual las aplicaciones pueden 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 a nivel de sistema de archivos a la tarjeta SD externa excepto aquellas que utilizan las APIs SAF. Según 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 almacenamiento compartido es decir, en el directorio Android/data/
(y algunos otros) en /sdcard/
y en la tarjeta SD externa. Para más detalles, ver ¿Cómo mover archivos a una tarjeta SD externa en un dispositivo Android sin acceso root?
Desde tu comentario:
Entonces básicamente no tengo acceso al directorio root de mis propios dispositivos, ¿sin rootear el dispositivo? ¿Solo puedo empezar 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 como texto plano). Por lo tanto, /data
no es accesible sin root con el fin de:
- 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 el framework de Android para que las aplicaciones no puedan utilizar recursos del sistema y leer/manipular información y ajustes del dispositivo sin los permisos adecuados
Y posiblemente haya otras razones. Para más detalles, ver ¿Están protegidos los múltiples usuarios entre sí de manera diferente a las aplicaciones?