中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

修改Android中hosts文件的步驟詳解

發布時間:2020-10-07 02:06:19 來源:腳本之家 閱讀:860 作者:樂者為王 欄目:移動開發

前言

在開發的時候我們可能會需要修改Android的hosts文件。Android的hosts文件路徑是/system/etc/hosts,在修改該文件前首先需要Android手機獲取root權限。至于如何root你的手機,這里就不加詳述,可以自行在網絡上查找,很多也很簡單。

本文將要闡述的是如何在命令行下通過adb程序訪問root過的手機,把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: error: failed to copy 'hosts.mod' to '/system/etc/hosts': Read-only file system

從回顯的消息可以看到,文件系統是只讀的,所以不能直接上傳。

試試以下的命令看能不能成功?!

C:\tools>adb root # 幫助文檔說該命令可以讓adbd守護進程獲得root權限
C:\tools>adb push hosts.mod /system/etc/hosts
adb: error: failed to copy 'hosts.mod' to '/system/etc/hosts': Read-only file system

還是不行,看來要重新掛載/system目錄才可以。

C:\tools>adb remount
remount failed: Operation not permitted

沒有權限?這是必須祭起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
Bad mode
root@maguro:/ # chmod 666 /system/etc/hosts
Unable to chmod /system/etc/hosts: Read-only file system

又是Read-only file system!輸入以下命令看看/system目錄的文件系統詳情呢。

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

看到ext4后面的ro了嗎?它是read only的縮寫,即只讀的意思。這說明/system目錄是只讀的。接下來我們要把它改成可以讀寫。

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

上面的-o用于指定加載文件系統時的選項。這些選項包括:

  • remount 重新加載設備。通常用于改變設備的設置狀態。
  • ro 以只讀模式加載。
  • rw 以可讀寫模式加載。

再次查看,可以看到原來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: error: failed to copy 'hosts.mod' to '/system/etc/hosts': Permission denied

運行以下命令:

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: error: failed to copy 'hosts.mod' to '/system/etc/hosts': Read-only file system

怎么回事,為什么還是拷貝失敗呢?不是已經把文件系統改為可讀寫了嗎?

并且在查找原因的過程中還發現一個奇怪的事情。在root模式下/system目錄是可讀寫的,但在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...

而且在手機上的Terminal Emulator中把/system目錄mount成可讀寫之后,在adb shell的root模式下查看/system的狀態仍然顯示為只讀。

在網上找啊找啊找啊,都快要絕望了,終于找到可能之問題所在。就是這個帖子:mount in shell as user or root with different output。有個回答提到mount namespace這樣東西。然后才知道:

A mount namespace is the set of filesystem mounts that are visible to a process.

每個進程的掛載點對其它進程是不可見的。Terminal Emulator中mount后的掛載點屬于該進程,而adb shell中shell模式和root模式的掛載點分別屬于各自的進程。這就是前面root模式下修改/system目錄為可讀寫后在shell模式下仍顯示為只讀的原因。

知道問題的原因了,那如何解決呢?

在SuperSu應用的設置中有個mount namespace separation的選項,如下圖所示:

修改Android中hosts文件的步驟詳解

把勾選取消,然后mount的掛載點就是全局性的了,不再為mount它們的進程所獨有。不過要記住的是,只有在重啟手機后該修改才有效。

下面是取消mount namespace separation后在上傳的結果:

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文件的工作就算大功告成。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿克| 威海市| 双流县| 塔城市| 滦南县| 普洱| 永顺县| 开江县| 乐至县| 沙湾县| 兰州市| 南城县| 日照市| 集安市| 佳木斯市| 盐源县| 遵义市| 宾川县| 镇原县| 林周县| 信宜市| 柘荣县| 柳林县| 永胜县| 利津县| 沽源县| 麟游县| 霍山县| 德昌县| 东城区| 阳西县| 内江市| 五峰| 阳泉市| 新泰市| 皋兰县| 涞源县| 兰西县| 漳平市| 龙川县| 衡阳县|