adb shell 常见错误

本文介绍了在Android设备上通过ADB shell解决系统文件操作限制的方法,包括如何更改只读文件系统的挂载方式以便进行写入操作,使用数字形式的权限进行修改避免badmode错误,以及利用cat命令替代mv命令来跨分区移动文件。

1. 提示read-only file system

当使用adb shell时,向/system目录及其子目录写文件时经常提示“read-only file system”。其实产生该提示的原因很简单:/system是以ro模式挂载的,因此我们所要做的就是以读写模式(rw)重新挂载需要修改的目录(本例中为/system),具体流程如下:

1). 进入adb shell并查看当前挂在情况

命令号下输入:adb shell
#mount

这时候看到当前挂载情况

复制代码
rootfs on / type rootfs (rw,relatime)
tmpfs on /dev type tmpfs (rw,relatime,mode=755)
devpts on /dev/pts type devpts (rw,relatime,mode=600)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
none on /acct type cgroup (rw,relatime,cpuacct)
tmpfs on /mnt/asec type tmpfs (rw,relatime,mode=755,gid=1000)
tmpfs on /mnt/obb type tmpfs (rw,relatime,mode=755,gid=1000)
none on /dev/cpuctl type cgroup (rw,relatime,cpu)
/dev/block/mmcblk0p25 on /system type ext4 (ro,relatime,barrier=1,data=ordered)
/dev/block/mmcblk0p26 on /data type ext4 (rw,nosuid,nodev,noatime,barrier=1,data=ordered,noauto_da_alloc)
/dev/block/mmcblk0p27 on /cache type ext4 (rw,nosuid,nodev,noatime,barrier=1,data=ordered)
/dev/block/mmcblk0p28 on /devlog type ext4 (rw,nosuid,nodev,noatime,barrier=1,data=ordered)
/data/d on /data/d type debugfs (rw,relatime)
/sys/kernel/debug on /sys/kernel/debug type debugfs (rw,relatime)
/dev/block/vold/179:65 on /mnt/sdcard type vfat (rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0602,dmask=0602,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
/dev/block/vold/179:65 on /mnt/secure/asec type vfat (rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0602,dmask=0602,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
tmpfs on /mnt/sdcard/.android_secure type tmpfs (ro,relatime,size=0k,mode=000)
复制代码

我们感兴趣的是

dev/block/mmcblk0p25 on /system type ext4 (ro,relatime,barrier=1,data=ordered)

可以看到system是以只读权限挂载的

2). 重新挂载需要修改权限的目录

#mount -o remount -o rw /system

具体的可以看下mount的参数。

3). 查看修改后的结果

复制代码
# mount
rootfs on / type rootfs (rw,relatime)
tmpfs on /dev type tmpfs (rw,relatime,mode=755)
devpts on /dev/pts type devpts (rw,relatime,mode=600)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
none on /acct type cgroup (rw,relatime,cpuacct)
tmpfs on /mnt/asec type tmpfs (rw,relatime,mode=755,gid=1000)
tmpfs on /mnt/obb type tmpfs (rw,relatime,mode=755,gid=1000)
none on /dev/cpuctl type cgroup (rw,relatime,cpu)
/dev/block/mmcblk0p25 on /system type ext4 (rw,relatime,barrier=1,data=ordered)
/dev/block/mmcblk0p26 on /data type ext4 (rw,nosuid,nodev,noatime,barrier=1,data=ordered,noauto_da_alloc)
/dev/block/mmcblk0p27 on /cache type ext4 (rw,nosuid,nodev,noatime,barrier=1,data=ordered)
/dev/block/mmcblk0p28 on /devlog type ext4 (rw,nosuid,nodev,noatime,barrier=1,data=ordered)
/data/d on /data/d type debugfs (rw,relatime)
/sys/kernel/debug on /sys/kernel/debug type debugfs (rw,relatime)
/dev/block/vold/179:65 on /mnt/sdcard type vfat (rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0602,dmask=0602,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
/dev/block/vold/179:65 on /mnt/secure/asec type vfat (rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0602,dmask=0602,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
tmpfs on /mnt/sdcard/.android_secure type tmpfs (ro,relatime,size=0k,mode=000)
# 
复制代码

大功告成。其他目录同理。尽情adb push/pull 啥的吧

 

2. 使用chmod修改权限提示bad mode

一般修改权限会用:

chmod +x hello

但是我发现会提示 badmode,尝试后发现,使用数字形式的权限修改成功:

chmod 755 hello

 

 3. 在执行mv命令时提示“-cross-device link”

这种情况下,可以使用cat将文件重定向到指定位置,然后根据需要,修改权限即可。

cat /mnt/sdcard/test.apk > /system/app/test.apk

 

 

<think>首先,用户的问题是:“我想查找登陆adb shell的方法 请问登陆adb shell的方法”。这表示用户想知道如何登录到adb shell。 现在,回顾系统级指令: - 所有行内数学表达式使用$...$格式(但这里不涉及数学表达式)。 - 独立公式使用$$...$$(不适用)。 - LaTeX语法正确(不直接相关)。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 用户提供了几个引用,我需要参考这些引用。引用内容是关于adb shell的命令和方法。 汇总引用内容: - 引用[1]: 当没有完全进入到远程shell的时候,这样使用shell命令来执行一条命令: adb [-d|-e|-s {<serialNumber>}] shell <shellCommand> [^1]。这表明可以直接运行命令而不完全登录。 - 引用[2]: adb shell。这个命令将登录设备的shell. 后面加<command命令>将是直接运行设备命令, 相当于执行远程命令 [^2]。这说明adb shell用于登录shell。 - 引用[3]: adb shell input(系统服务:input)。用途四: adb shell input keyevent:模拟按键 KeyEvent | Android Developersadb shell input keyevent 4 返回键adb shell input keyenevt 4 Hone键adb shell input keyevent 24 音量放大adb shell input keyevent 25 音量变小adb shell input keyevent 66Enter键 [^3]。这展示了如何使用adb shell执行特定命令。 - 引用[4]: linux系统使用adb shell,adb shell是什么意思。在你的android手机的设置中,Settings->Applications->Development->USB debugging勾选上,就可以允许PC通过adb shell命令远程登录你手机的linux系统。[^4]。这解释了前提条件:启用USB调试。 - 引用[5]: 展示了使用Python subprocess模块执行adb shell命令的代码示例 [^5]。 用户的核心问题是登录adb shell的方法。从引用中可以提取关键点: 1. 前提条件:在Android设备上启用USB调试(Settings -> Developer options -> USB debugging)[^4]。 2. 基本方法:使用命令`adb shell`来登录设备的shell [^2]。 3. 其他方式:例如,使用`adb shell <command>`直接执行命令而不完全登录 [^1]。 4. 高级用法:如引用[3]和[5]展示了具体命令和编程接口。 由于用户明确问“登陆adb shell的方法”,我应该重点放在如何登录shell上。 结构化回答: - 先解释adb shell是什么:adb shell是Android Debug Bridge(ADB)的一个命令,允许用户在连接设备时访问设备的命令行shell。 - 前提条件:确保设备连接到电脑,并启用USB调试。 - 登录方法:运行`adb shell`命令。 - 可选:简要提到其他相关命令。 在回答中引用相关引用。 最后,生成相关问题,如指令要求。 回答结构: 1. **引子**:解释adb shell的概念。 2. **登录adb shell的步骤**: - 步骤1:启用USB调试模式。 - 步骤2:连接设备到电脑(通常通过USB)。 - 步骤3:在电脑的命令行中运行`adb shell`命令。 3. **常见用法**:提及如何执行命令而不完全登录。 4. **代码示例**:如果需要,可以简要展示示例代码(如引用[5])。 5. **结尾**:添加引用标识。 6. **相关问题**:生成几个相关问题。 确保语言中文。 生成的相关问题应基于adb shell主题,可能有: - 如何调试adb连接问题? - adb shell的常用命令有哪些? - 如何处理adb shell中的常见错误? 参考用户上次问题和回答:用户的问题是新的,没有历史上下文,所以基于当前。 最终回答: </think>### 登录 ADB Shell 的方法 ADB(Android Debug Bridge)是一个强大的命令行工具,用于与Android设备通信。其中,`adb shell`命令允许您直接登录到设备的Linux shell环境中,从而执行各种系统级操作(如文件管理、进程控制等)。以下是登录adb shell的完整步骤和说明,基于提供的引用内容。 #### 前提条件 在尝试登录adb shell前,请确保满足以下条件: - **设备已启用USB调试模式**:在Android设备的“设置”中,进入“开发者选项”(如果未启用,先在“关于手机”中多次点击“版本号”以激活),然后勾选“USB调试模式”。这允许PC通过ADB访问设备 [^4]。 - **设备已连接到电脑**:使用USB数据线将设备连接到电脑。如果是无线连接(需额外配置),请确保adb已识别设备(运行`adb devices`验证)。 - **ADB工具已安装**:在电脑上安装Android SDK Platform-Tools(包含adb工具)。您可以从[Android开发者网站](https://developer.android.com/studio/releases/platform-tools)下载。 #### 登录adb shell的步骤 1. **打开电脑的命令行终端**(如Windows的CMD/PowerShell,macOS/Linux的Terminal)。 2. **运行adb shell命令**: - 基本命令:直接输入`adb shell`并按Enter,即可进入设备的交互式shell环境。 ```bash adb shell ``` - 执行后,命令行提示符会变为设备shell的格式(如`root@android:/ #`),表示您已成功登录 [^2]。 - 在shell中,您可以运行Linux命令(如`ls`查看文件、`ps`查看进程)。完成后,输入`exit`退出shell。 3. **可选:直接执行特定命令而不完全登录**: - 如果您只需运行单个命令(无需交互式登录),可以使用`adb shell <command>`格式。例如: ```bash adb shell ls /sdcard # 列出设备的/sdcard目录内容 adb shell input keyevent 66 # 模拟按键事件(如Enter键)[^3] ``` - 这对于自动化脚本很有用(如引用[5]中的Python示例) [^1]. #### 常见问题与提示 - **连接问题**:如果运行`adb shell`失败(提示“device not found”),请检查: - USB调试模式是否启用。 - 设备驱动是否安装(Windows可能需要手动安装)。 - 尝试重启adb服务:运行`adb kill-server`后重试。 - **权限问题**:在shell中,某些命令需要root权限。如果设备已root,使用`su`命令切换为root用户。 - **无线连接**:若需通过Wi-Fi使用adb,先用USB连接运行`adb tcpip 5555`,然后断开USB并运行`adb connect <设备IP>:5555`。 通过以上方法,您就能高效地登录和管理Android设备的shell环境。更多adb命令可参考[Android开发者文档](https://developer.android.com/studio/command-line/adb) [^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值