WARN tar EPERM: operation not permitted, futime
indica que futime
syscall (utilizado para cambiar los tiempos de último acceso y modificación de los archivos) falla con un error: EPERM
. Desde utime
página de manual 1 :
EPERM ... el UID efectivo de la persona que llama no coincide con el propietario del archivo ...
Esa parece ser la razón del fracaso. Usted está usando la ruta: /data/data/com.termux/files/home/storage/shared/
que en realidad es /sdcard/
2 (enlace simbólico a /storage/emulated/0/
). No es un sistema de archivos real, sino un sistema emulado 3 vista del sistema de archivos subyacente ( ext4
o f2fs
). Tiene permisos fijos y no admite muchas características de los sistemas de archivos de Linux, como los enlaces simbólicos y ioctls
como FS_IOC_FIEMAP
4 .
Debido a los permisos fijos, todos los directorios y archivos en /sdcard/
son siempre propiedad del usuario root
(UID 0
). Así que al tratar de cambiar la marca de tiempo del archivo, Operation not permitted
se devuelve. touch
sin embargo, el comando utiliza utimensat
5 que tiene diferentes requisitos de permisos.
Por lo tanto, para evitar este problema, no debe utilizar el sistema de archivos emulado. Termux $HOME
está en el directorio ext4
o f2fs
, por lo que es un buen lugar para guardar archivos. Utiliza, por ejemplo /data/data/com.termux/files/home/npm-test
directorio.
De los comentarios:
Pero, ¿es posible crear de alguna manera un enlace dentro de $HOME
a otra ubicación, lo que otorgará todos los derechos que Termux tiene para $HOME
para todas las subcarpetas de esta ubicación lejana?
No, no es posible en un teléfono no rooteado. Las aplicaciones sólo pueden escribir en sus directorios privados en el almacenamiento interno (que es /data/data/com.termux
para Termux) y en el almacenamiento compartido ( /sdcard/Android/data/com.termux
). Las aplicaciones con Storage
el permiso concedido puede leer y escribir en todo el /sdcard/
. No hay ningún otro lugar en el dispositivo donde las aplicaciones puedan guardar archivos 6 . Con SELinux disabled
o permissive
es posible escribir en un subdirectorio creado (con adb shell
) en /data/local/tmp
pero no es el uso previsto de este directorio.
ENLACES:
1 utime
página de manual
2 ¿Cómo puedo acceder a $HOME/storage
fuera de Termux (con un explorador de archivos)?
3 ¿Qué es? /storage/emulated/0/
?
4 ¿Cómo puedo hacer un enlace simbólico dentro de /storage/emulated/0
?
5 ¿Cómo cambiar la fecha de modificación de un archivo sin Root?
6 ¿Dónde almacenan los datos las aplicaciones de Android?
0 votos
Relacionado: No se puede instalar express (de node.js) en Android termux usando sdcard0 como directorio