adb shell进入时执行的/system/bin/sh的原码

本文解析了Android设备上ADB shell命令的工作原理。通过Android.mk文件定义的编译规则,当使用adb shell进入时,会调用/system/bin/sh进行操作。文章还介绍了如何根据不同环境配置SHELL_COMMAND变量。

system/core/adb下的Android.mk定义了分别编译LOCAL_MODULE := adb,以及LOCAL_MODULE := adbd

在services.c中定义了SHELL_COMMAND,所以在使用adb shell进入的时候,执行的是/system/bin/sh的shell

#if ADB_HOST
#define SHELL_COMMAND "/bin/sh"
#else
#define SHELL_COMMAND "/system/bin/sh"
#endif

### 问题分析 在 Android 系统中,`adb shell` 提供了对设备的命令行访问功能。然而,在某些情况下,可能会遇到 `ip addr show` 命令无法使用的问题,提示 `/system/bin/sh: ip: inaccessible or not found`。这通常是因为系统中缺少 `ip` 工具或其权限设置不正确。 以下是可能的原因及解决方案: 1. **`ip` 工具未安装**:某些 Android 系统可能未包含 `ip` 工具。 2. **权限问题**:即使存在 `ip` 工具,如果其文件权限设置不正确,也可能导致无法访问。 3. **路径问题**:如果 `ip` 工具不在系统的默认搜索路径中,也会导致命令不可用。 4. **替代工具**:可以尝试使用其他网络工具(如 `ifconfig` 或 `netcfg`)来替代 `ip` 命令的功能[^5]。 --- ### 解决方案 #### 1. 检查 `ip` 工具是否存在 首先确认设备上是否安装了 `ip` 工具: ```bash ls /system/bin/ip ``` 如果返回为空或提示文件不存在,则说明设备未安装 `ip` 工具。此可以尝试以下方法: - **方法一:安装 BusyBox** BusyBox 是一个集成了多种 Linux 工具的小型程序,其中包括 `ip` 命令。可以通过以下步骤安装 BusyBox: ```bash adb push busybox /data/local/tmp/ adb shell cd /data/local/tmp/ chmod 755 busybox ./busybox --install -s /data/local/tmp ``` 安装完成后,验证 `ip` 命令是否可用: ```bash /data/local/tmp/ip addr show ``` - **方法二:手动添加 `ip` 工具** 如果 BusyBox 不适用,可以从其他 Android 设备复制 `ip` 工具到目标设备: ```bash adb push ip /system/bin/ adb shell chmod 755 /system/bin/ip ``` #### 2. 检查文件权限 如果 `ip` 工具已存在但不可访问,可能是权限设置不正确。可以通过以下命令检查并修复权限: ```bash adb shell ls -l /system/bin/ip ``` 如果权限不足,可以重新设置权限: ```bash adb shell chmod 755 /system/bin/ip ``` #### 3. 检查 PATH 环境变量 如果 `ip` 工具存在但仍然无法通过 `adb shell` 调用,可能是 PATH 环境变量未包含 `/system/bin`。可以通过以下方式验证和修复: ```bash adb shell echo $PATH ``` 如果 `/system/bin` 不在 PATH 中,可以临添加: ```bash adb shell export PATH=$PATH:/system/bin ``` #### 4. 使用替代工具 如果无法修复 `ip` 工具,可以尝试使用替代工具获取网络接口信息: - **`ifconfig`**: ```bash adb shell ifconfig ``` - **`netcfg`**(适用于较旧版本 Android): ```bash adb shell netcfg ``` --- ### 注意事项 - 如果设备未 root,某些操作(如修改 `/system/bin`)可能需要特殊权限。 - 在生产环境中,建议避免直接修改系统文件,以免影响设备稳定性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值