AVERTISSEMENT tar EPERM : opération non permise, futime
indique que l'appel système futime
(utilisé pour modifier les heures d'accès et de modification d'un fichier) échoue avec l'erreur : EPERM
. De la page de manuel utime
1 :
EPERM ... l'UID effectif de l'appelant ne correspond pas au propriétaire du fichier ...
Cela semble être la raison de l'échec. Vous utilisez le chemin d'accès : /data/data/com.termux/files/home/storage/shared/
qui est en réalité /sdcard/
2 (raccourci vers /storage/emulated/0/
). Ce n'est pas un système de fichiers réel mais une vue émulée 3 du système de fichiers sous-jacent (ext4
ou f2fs
). Il possède des autorisations fixes et ne prend pas en charge de nombreuses fonctionnalités des systèmes de fichiers Linux, y compris les liens symboliques et les ioctls
comme FS_IOC_FIEMAP
4.
En raison des autorisations fixes, tous les répertoires et fichiers dans /sdcard/
sont toujours la propriété de l'utilisateur root
(UID 0
). Ainsi, en essayant de modifier l'horodatage d'un fichier, Opération non permise
est retourné. Cependant, la commande touch
utilise utimensat
5 qui a des exigences de permissions différentes.
Pour éviter ce problème, vous ne devriez pas utiliser le système de fichiers émulé. Le répertoire $HOME
de Termux se trouve sur ext4
ou f2fs
, donc c'est un bon endroit pour enregistrer les fichiers. Utilisez par exemple le répertoire /data/data/com.termux/files/home/npm-test
.
Des commentaires :
Mais est-il possible de créer d'une manière ou d'une autre un lien à l'intérieur de $HOME
vers un autre emplacement, qui accordera tous les droits que Termux a pour $HOME
pour tous les sous-dossiers de cet emplacement distant ?
Non, ce n'est pas possible sur un téléphone non-rooté. Les applications ne peuvent écrire que dans leurs répertoires privés dans le stockage interne (qui est /data/data/com.termux
pour Termux) et dans le stockage partagé (/sdcard/Android/data/com.termux
). Les applications ayant accordé l'autorisation de Stockage
peuvent lire et écrire dans tout /sdcard/
. Il n'y a pas d'autre endroit sur l'appareil où les applications peuvent enregistrer des fichiers 6. Avec SELinux désactivé
ou permissif
, il est possible d'écrire dans un sous-répertoire créé (avec adb shell
) dans /data/local/tmp
, mais ce n'est pas l'utilisation prévue de ce répertoire.
LIENS :
1 Page de manuel utime
2 Comment accéder à $HOME/storage
en dehors de Termux (avec un explorateur de fichiers) ?
3 Qu'est-ce que /storage/emulated/0/
?
4 Comment puis-je créer un lien symbolique à l'intérieur de /storage/emulated/0
?
5 Comment modifier la date de modification d'un fichier sans être root ?
6 Où les applications Android stockent-elles les données ?
0 votes
Connexe: Impossible d'installer express (de node.js) dans Android termux en utilisant sdcard0 comme répertoire