English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Détails des étapes pour modifier le fichier hosts dans Android

Préambule

Lors du développement, nous pourrions avoir besoin de modifier le fichier hosts d'Android. Le chemin d'accès au fichier hosts d'Android est/system/etc/hosts, avant de modifier ce fichier, il est nécessaire de donner au téléphone Android les privilèges root. En ce qui concerne la manière de rooter votre téléphone, cela ne sera pas détaillé ici, vous pouvez le trouver sur Internet, cela est très simple.

Ce texte va expliquer comment accéder au téléphone rooté via le programme adb en ligne de commande, glisser le fichier hosts vers l'ordinateur pour le modifier, puis le recopier sur le téléphone pour réaliser la modification du fichier hosts.

Nous allons commencer par les étapes spécifiques :

C:\tools>adb pull /system/etc/hosts hosts.mod
[100%] /system/etc/hosts

La commande ci-dessus consiste à glisser le fichier hosts du téléphone vers l'ordinateur, [100%] indique que le fichier a été transféré en totalité, vous pouvez modifier le fichier hosts. Après la modification, utilisez la commande suivante pour le téléverser sur le téléphone :

C:\tools>adb push hosts.mod /system/etc/hosts
adb: erreur : échec de la copie de 'hosts.mod' vers '/system/etc/hosts': Read-seulement système de fichiers

À partir des messages d'écho, on peut voir que le système de fichiers est en lecture seule, donc il ne peut pas être téléversé directement.

Essayons les commandes suivantes pour voir si elles réussissent !

C:\tools>adb root # La documentation d'aide dit que cette commande permet à adbd de obtenir les privilèges root
C:\tools>adb push hosts.mod /system/etc/hosts
adb: erreur : échec de la copie de 'hosts.mod' vers '/system/etc/hosts': Read-seulement système de fichiers

Ça ne fonctionne toujours pas, il semble que nous devions redémarrer le montage/le répertoire system peut le faire.

C:\tools>adb remount
Échec du remount : Opération non permise

Pas de permission ? C'est le moment de faire appel à la magie de shell !

C:\tools>adb shell
* daemon non en cours d'exécution. Démarrage maintenant sur le port 5037 *
* daemon démarré avec succès *
shell@maguro:/ $ ls -al /system/etc/hosts
-rw-r--r-- root root  25 2013-08-14 07:00 hosts

Comme on peut le voir dans la dernière ligne, le fichier hosts ne peut être écrit que par son propriétaire, pour les autres, il est en lecture seule. Pour que d'autres puissent effectuer des modifications, il est nécessaire d'utiliser la commande suivante pour obtenir des privilèges, puis de modifier les attributs du fichier hosts.

shell@maguro:/ $ su

Si c'est la première fois que vous exécutez cette commande, le téléphone s'allumera, l'application SuperSU vous demandera si vous acceptez l'attribution des permissions. Bien sûr, vous devez accepter ! Ensuite, vous verrez que le curseur d'invite de terminal passe de $ à #, et le caractère avant @ passe de shell à root. Ensuite, nous pourrons modifier les attributs de permission du fichier hosts.

root@maguro :/ # chmod +666 /system/etc/hosts
Mauvais mode
root@maguro :/ # chmod 666 /system/etc/hosts
Impossible de chmod /system/etc/hosts: Read-seulement système de fichiers

Encore Read-Système de fichiers uniquement ! Entrez la commande suivante pour voir/Les détails du système de fichiers du répertoire system.

root@maguro :/ # mount | grep system
/dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 ro,seclabel,relatime...

Voyons ext4Le derrière ro ? C'est l'abréviation de read only, ce qui signifie lecture seule. Cela signifie que/Le répertoire system est en lecture seule. Nous allons le rendre accessible en lecture et écriture.

root@maguro :/ # mount -o rw,remount /system

le dessus-o est utilisé pour spécifier les options lors du chargement du système de fichiers. Ces options incluent :

  • remount relancer l'appareil. Utilisé généralement pour modifier l'état de configuration de l'appareil.
  • ro en mode lecture seule.
  • rw en mode lecture-écriture.

Revenez à la vue, vous pouvez voir que l'ancien ro a maintenant été remplacé par rw.

root@maguro :/ # mount | grep system
/dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 rw,seclabel,relatime...

Cependant, nous ne pouvons pas encore copier le fichier hosts sur le téléphone, car les attributs de permission du fichier hosts n'ont pas été modifiés. Si nous essayons de le télécharger de force, nous obtenons le message d'erreur suivant :

C:\tools>adb push hosts.mod /system/etc/hosts
adb: erreur : échec de la copie de 'hosts.mod' vers '/system/etc/hosts': Permission denied

Exécutez la commande suivante :

root@maguro :/ # chmod 666 /system/etc/hosts

Ensuite, vérifiez les attributs du fichier hosts.

root@maguro :/ # ls -al /system/etc/hosts
-rw-rw-rw- root root   25 2013-08-14 07:00 hosts

On peut voir que tout le monde peut lire et écrire le fichier hosts.

Puisque tout est prêt, essayons à nouveau de télécharger le fichier hosts modifié.

C:\tools>adb push hosts.mod /system/etc/hosts
adb: erreur : échec de la copie de 'hosts.mod' vers '/system/etc/hosts': Read-seulement système de fichiers

Pourquoi ça ne fonctionne pas encore, pourquoi la copie échoue ? N'avons-nous pas déjà changé le système de fichiers en lecture-écriture ?

Et pendant la recherche des causes, j'ai découvert une chose étrange. Dans le mode root/Le répertoire system est en lecture-écriture, mais en mode shell/system est en lecture seule.

root@maguro :/ # mount | grep system
/dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 rw,seclabel,relatime...
root@maguro :/ # exit
shell@maguro:/ # mount | grep system
/dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 ro,seclabel,relatime...

Et dans le Terminal Emulator sur le téléphone/Après avoir monté le répertoire system en lecture-écriture, regardez dans le mode root de adb shell/L'état du système est toujours affiché comme en lecture seule.

Je cherchais et cherchais sur le web, presque désespéré, puis j'ai enfin trouvé la cause potentielle. C'est ce forum :mount en shell en tant qu'utilisateur ou root avec différentes sortiesUne réponse mentionne cette chose appelée espace de noms de montage. Puis j'ai réalisé :

Un espace de noms de montage est l'ensemble des montages de système de fichiers visibles pour un processus.

Le point de montage de chaque processus est invisible pour les autres processus. Le point de montage après mount dans Terminal Emulator appartient à ce processus, tandis que les points de montage dans le mode shell et le mode root de adb shell appartiennent respectivement à leurs processus respectifs. C'est pourquoi nous avons modifié précédemment dans le mode root/La raison pour laquelle le répertoire system reste en lecture seule après que le répertoire system est devenu lecture-écriture dans le mode shell.

Avez-vous compris la cause du problème ? Alors, comment le résoudre ?

Dans les paramètres de l'application SuperSu, il y a une option mount namespace separation, comme indiqué dans l'image suivante :

Désélectionnez la case, puis le point de montage de mount devient global, et n'est plus exclusif aux processus qui les montent. Cependant, il est à noter que cette modification ne prendra effet qu'après un redémarrage du téléphone.

Voici le résultat de l'upload après avoir annulé la séparation du namespace mount :

C:\tools>adb push hosts.mod /system/etc/hosts
[100%] /system/etc/hosts

On voit que [100%] du répit, ce qui signifie que le fichier a été téléversé.

Voyons les attributs du fichier hosts :

root@maguro :/ # ls -al /system/etc/hosts
-rw-rw-rw- root root  137679 2017-02-16 00 :20 hosts

La taille du fichier est passée de25devient137679indique que le fichier a été remplacé.

Voici comment restaurer le téléphone à son état d'origine :

root@maguro :/ # chmod 644 /system/etc/hosts
root@maguro :/ # ls -al /system/etc/hosts
-rw-r--r-- root root  137679 2017-02-16 00 :20 hosts
root@maguro :/ # mount -o ro,remount /system

Ainsi, le travail de modification du fichier hosts est terminé avec succès.

Résumé

C'est tout pour cet article, j'espère que le contenu de cet article peut apporter un certain avantage à votre apprentissage ou à votre travail. Si vous avez des questions, vous pouvez laisser des commentaires pour échanger.

Déclaration : le contenu de cet article est tiré d'internet, propriété intellectuelle de son auteur. Le contenu est自发贡献并由互联网用户自行上传,le site n'a pas de propriété intellectuelle, n'a pas été traité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de copyright, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois confirmée, le site supprimera immédiatement le contenu suspect de violation de droit d'auteur.)

Vous pourriez aussi aimer