前言

在开发的时候我们可能会需要修改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用于指定加载文件系统时的选项。这些选项包括:
再次查看,可以看到原来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的选项,如下图所示:
把勾选取消,然后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文件的工作就算大功告成。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# android修改hosts文件
# android
# hosts修改
# android的hosts文件
# 可以看到
# 文件系统
# 上传
# 的是
# 模式下
# 加载
# 有个
# 机上
# 拖到
# 都是
# 这是
# 变成了
# 还没
# 又是
# 你就
# 却是
# 那就
# 这就是
# 一切都
# 但在
相关文章:
如何正确选择百度移动适配建站域名?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
股票网站制作软件,网上股票怎么开户?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
装修招标网站设计制作流程,装修招标流程?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
建站之星云端配置指南:模板选择与SEO优化一键生成
如何在VPS电脑上快速搭建网站?
,想在网上投简历,哪几个网站比较好?
如何在企业微信快速生成手机电脑官网?
在线制作视频网站免费,都有哪些好的动漫网站?
如何选择服务器才能高效搭建专属网站?
如何快速生成凡客建站的专业级图册?
香港服务器WordPress建站指南:SEO优化与高效部署策略
测试制作网站有哪些,测试性取向的权威测试或者网站?
建站OpenVZ教程与优化策略:配置指南与性能提升
攀枝花网站建设,攀枝花营业执照网上怎么年审?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
深圳网站制作案例,网页的相关名词有哪些?
移民网站制作流程,怎么看加拿大移民官网?
制作网站的软件免费下载,免费制作app哪个平台好?
建站主机类型有哪些?如何正确选型
中山网站制作网页,中山新生登记系统登记流程?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
定制建站策划方案_专业建站与网站建设方案一站式指南
如何在七牛云存储上搭建网站并设置自定义域名?
建站主机CVM配置优化、SEO策略与性能提升指南
公司网站制作价格怎么算,公司办个官网需要多少钱?
建站之星代理商如何保障技术支持与售后服务?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
如何在腾讯云免费申请建站?
上海网站制作开发公司,上海买房比较好的网站有哪些?
独立制作一个网站多少钱,建立网站需要花多少钱?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
金*站制作公司有哪些,金华教育集团官网?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
如何在IIS中新建站点并配置端口与IP地址?
如何在云主机快速搭建网站站点?
如何选择高效便捷的WAP商城建站系统?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
如何通过主机屋免费建站教程十分钟搭建网站?
如何选择高效可靠的多用户建站源码资源?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
电商平台网站制作流程,电商网站如何制作?
建站之星安装后如何自定义网站颜色与字体?
如何在阿里云虚拟服务器快速搭建网站?
大同网页,大同瑞慈医院官网?
如何通过FTP服务器快速搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。