English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
مقدمة
عند التطوير، قد نحتاج إلى تعديل ملف hosts الخاص بـ Android. يقع ملف hosts الخاص بـ Android في /system/etc/hosts، ويجب أولاً أن يحصل الهاتف الذكي على صلاحيات root قبل تعديل هذا الملف. بخصوص كيفية جذر الهاتف، لن نتفصل فيه هنا، يمكنك البحث في الإنترنت حيث هناك الكثير من المعلومات، وسهلة للغاية.
سيتم شرح هذا المقال كيفية الوصول إلى الهاتف الجذر باستخدام برنامج adb في سطر الأوامر، نسخ ملف hosts إلى الكمبيوتر لتعديله، ثم نسخه مرة أخرى إلى الهاتف لتحقيق تعديل ملف hosts.
الآن نبدأ بتفصيل الخطوات المحددة:
C:\tools>adb pull /system/etc/hosts hosts.mod [100%] /system/etc/hosts
الأمر السابق كان نسخ ملف hosts من الهاتف إلى الكمبيوتر، [100%] يعني أن النقل قد اكتمل، ويمكن تعديل ملف hosts الآن. بعد التعديل، استخدم الأمر التالي لرفع الملف إلى الهاتف:
C:\tools>adb push hosts.mod /system/etc/hosts adb: خطأ: فشل في نسخ 'hosts.mod' إلى '/system/etc/hosts': نظام ملفات فقط للقراءة
من الرسائل المبكرة يمكن رؤية أن نظام الملفات هو فقط للقراءة، لذا لا يمكن رفعه مباشرة.
تجربة الأمر التالي لرؤية ما إذا كان يمكن تنفيذه بنجاح؟!
C:\tools>adb root # وثائق المساعدة تقول أن هذا الأمر يمكن أن يمنح وحدة adbd صلاحيات root C:\tools>adb push hosts.mod /system/etc/hosts adb: خطأ: فشل في نسخ 'hosts.mod' إلى '/system/etc/hosts': نظام ملفات فقط للقراءة
لا يزال الأمر لم ينجح، يبدو أننا بحاجة إلى إعادة التثبيت مرة أخرى على مجلد /system.
C:\tools>adb remount فشل remount: لا يُسمح بالعملية
لا يوجد صلاحيات؟ هذا هو الوقت الذي يجب أن نستدعي قانون shell!
C:\tools>adb shell * daemon not running. starting it now on port 5037 * * daemon started successfully * shell@maguro:/ $ ls -al /system/etc/hosts -rw-r--r-- root root 25 2013-08-14 07:00 hosts
من الممكن رؤية في السطر الأخير أن ملف hosts هذا يمكن فقط للمالك الخاص به أن يكتب فيه، بينما هو فقط للقراءة بالنسبة للآخرين. إذا كنت ترغب في السماح للآخرين بتعديل الملف، يجب استخدام الأمر التالي لتعديل الصلاحيات، ومن ثم تغيير خصائص ملف hosts.
shell@maguro:/ $ su
إذا كنت تنفذ هذا الأمر لأول مرة، سيضيء الهاتف، وستقوم SuperSU بتسليمك إشعار حول الموافقة على توزيع الصلاحيات. بالطبع، يجب الموافقة! بعد ذلك، يمكنك رؤية أن المؤشر في الطرفية قد تغير من $ إلى #، والرمز قبل @ قد تغير من shell إلى root. ثم يمكننا تعديل خصائص صلاحيات ملف hosts.
root@maguro:/ # chmod +666 /system/etc/hosts نمط سيء root@maguro:/ # chmod 666 /system/etc/hosts تعذر تغيير صلاحيات مجلد /system/etc/hosts: نظام ملفات فقط للقراءة
مرة أخرى، نظام ملفات فقط للقراءة! اكتب الأوامر التالية لمعرفة تفاصيل نظام ملفات مجلد /system.
root@maguro:/ # mount | grep system /dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 ro,seclabel,relatime...
هل ترى ro بعد ext4؟ إنها اختصار لـ 'read only'، مما يعني فقط للقراءة. هذا يعني أن مجلد /system هو فقط للقراءة. سنغيره ليمكن القراءة والكتابة.
root@maguro:/ # mount -o rw,remount /system
ال-o في الأعلى يستخدم لتعيين الخيارات عند تحميل نظام الملفات. وتشمل هذه الخيارات:
مراجعة مرة أخرى، يمكنك رؤية أن موقع ro السابق قد تغير إلى rw.
root@maguro:/ # mount | grep system /dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 rw,seclabel,relatime...
لكن حتى الآن لا يمكننا نسخ ملف hosts إلى الهاتف، لأن خصائص امتناع الصلاحية لم تُغير بعد ملف hosts، وإذا قمنا بتحميله قوة، سنحصل على رسالة خطأ مثل التالية:
C:\tools>adb push hosts.mod /system/etc/hosts adb: خطأ: فشل في نسخ 'hosts.mod' إلى '/system/etc/hosts': امتناع عن الصلاحية
أ�行ر الأوامر التالية:
root@maguro:/ # chmod 666 /system/etc/hosts
ثم قم بمراجعة خصائص ملف hosts.
root@maguro:/ # ls -al /system/etc/hosts -rw-rw-rw- root root 25 2013-08-14 07:00 hosts
يمكنك رؤية أن الجميع يمكنه القراءة والكتابة على ملف hosts.
إذن، بما أن كل شيء جاهز، لنحاول رفع ملف hosts المعدل الآن.
C:\tools>adb push hosts.mod /system/etc/hosts adb: خطأ: فشل في نسخ 'hosts.mod' إلى '/system/etc/hosts': نظام ملفات فقط للقراءة
ما الذي يحدث؟ لماذا فشل النسخ؟ لم يتم تغيير نظام الملفات إلى قابل للقراءة والكتابة؟
وبينما كنت أبحث عن السبب، وجدت شيئًا غريبًا. في mode root، يمكن قراءة وكتابة ملفات نظام /system، ولكن في mode shell، /system يظل قابلاً للقراءة فقط.
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...
وبالإضافة إلى ذلك، بعد مونت ملفات النظام /system كقابل للقراءة والكتابة في Terminal Emulator على الهاتف، يظل حالة /system قابلة للقراءة فقط عند النظر إليها في mode root في adb shell.
بحثت في الإنترنت وأنا على وشك فقدان الأمل، حتى وجدت ما يمكن أن يكون المشكلة. وهو هذا الموضوع:مونت في shell كمستخدم أو root مع نتائج مختلفةهناك رد ذكر mount namespace هذا. ثم علمت:
mount namespace هو مجموعة من نقاط المونت (mount) للنظام الملفات التي تكون مرئية للعمليات.
ليست نقاط المونت (mount) لكل عملية مرئية للعمليات الأخرى. نقطة المونت (mount) بعد المونت في Terminal Emulator تعتبر للعمليات نفسها، بينما نقاط المونت (mount) في shell mode وroot mode في adb shell تعتبر للعمليات الخاصة بها. هذا هو السبب في أن النظام /system يظل قابلاً للقراءة فقط في shell mode بعد تعديل ملفات النظام في mode root.
لقد عرفت سبب المشكلة، ولكن كيف يمكن حلها؟
في إعدادات تطبيق SuperSu هناك خيار يُدعى mount namespace separation، كما هو موضح في الشكل التالي:
ألغِ التحقق من المربع المحدد، ثم سيكون نقطة المونت (mount) عالمية، وليس مملوكة فقط للعمليات التي تملكها mount. ومع ذلك، يجب تذكر أن هذا التعديل سيكون فعالًا فقط بعد إعادة تشغيل الهاتف.
إليك النتائج بعد إزالة الفصل بين namespaces mounts:
C:\tools>adb push hosts.mod /system/etc/hosts [100%] /system/etc/hosts
يمكن رؤية إشارة التأكيد [100%]، مما يعني أن الملف قد تم تحميله.
إليك عرض خصائص ملف hosts:
root@maguro:/ # ls -al /system/etc/hosts -rw-rw-rw- root root 137679 2017-02-16 00:20 hosts
حجم الملف قد تغير من 25 إلى 137679، مما يعني أن الاستبدال قد تم.
إليك كيفية استعادة الهاتف إلى حالة السابق:
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
بهذا، عمل تعديل ملف hosts قد تم بنجاح.
ملخص
هذا هو نهاية محتوى هذا المقال، نأمل أن يكون محتوى هذا المقال قد ساعدكم في التعلم أو العمل، إذا كان لديكم أي أسئلة، يمكنكم ترك تعليقات للتفاعل.
بيان: محتوى هذا المقال تم جمعه من الإنترنت، ويتمتع صاحب الحقوق بالملكية، ويتم جمع المحتوى من قبل المستخدمين على الإنترنت بشكل متعاون، ويتم تحميل المحتوى بشكل مستقل، ويتمتع الموقع بالملكية، ولا يتم تعديل المحتوى بشكل إنساني، ولا يتحمل الموقع أي مسؤولية قانونية. إذا كنت قد وجدت محتوى يشتبه في حقوق النسخ، فلا تتردد في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # ب @) لإبلاغنا، وتقديم الدليل، وإذا تم التحقق من ذلك، سيتم حذف المحتوى المزعوم فورًا.