/bin/sh: ./main: not found或者go run: no go files listed

本文探讨了在不同操作系统间进行Go语言程序编译时遇到的常见问题,如ggorun:nogofileslisted和/bin/sh:./main:notfound等,并提供了解决这些问题的具体方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出现问题的场景

在本机(Windows系统)上生成一个可执行的二进制文件,然后上传到服务器上(Linux系统)上运行,就会出现ggo run: no go files listed的问题。
另外一种问题也是相似的场景:在使用Compose构建镜像时,COPY的是在Linux(架构是amd64)上生成的可执行文件,所以在以alpine为基础镜像,不进行其他设置而运行二进制文件的时候,就会出现/bin/sh: ./main: not found
在使用docker-compose.yml文件来启动Go服务时,出现上面的错误/bin/sh: ./main: not found

出现问题的原因

是由于存在交叉编译。在宿主机(host)上编译Go程序,生成可执行的代码。而目标机(target)是不同的系统,一些Go相关环境变量不同,所以导致host上编译得到的可执行代码在target上不能运行。

解决方法

生成可执行文件时,在命令行添加目标机的Go环境信息,使两者相同。例如第二种情况可以这样写:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main

<think>嗯,用户遇到了在Android系统中执行sh文件时提示"inaccessible or not found"的问题。从用户提供的引用和描述来看,这确实是个棘手的系统权限问题。 用户可能正在尝试修改系统文件或执行需要高权限的操作,但遇到了阻碍。考虑到用户特意引用了三个关于权限错误的案例,说明ta已经做过一些调研,但还没找到解决方案。用户的技术水平应该属于中级,知道使用adb但可能对Android新版本的安全机制不熟悉。 从技术角度看,这个问题需要分层解决: 首先想到的是权限问题,特别是Android 10+的动态分区和AVB验证机制,这会让传统的remount操作失效。引用[1]提到的情况很典型,现代Android设备确实更难获取完整root权限。 然后想到替代方案,引用[2]给出了非root环境下的解决方案思路很值得参考。对于只想查看数据库的用户,完全可以用Android Studio代替adb shell操作。 最后注意到引用[3]揭示的常见错误,用户可能在adb shell内外切换时操作不当,这个细节需要提醒。 用户的核心诉求其实是"如何在有限权限下完成系统级操作",而不仅仅是解决某个具体错误。所以除了直接解决方案,还应该提供替代方案和预防措施。考虑到用户设备可能是华为等锁BL的品牌,需要特别强调非root方案。 安全方面要特别注意,修改系统分区有变砖风险,必须给出明确警告。对于非root方案,可以重点推荐Shizuku这种较安全的选择。</think>### 解决 Android 执行 sh 文件提示 "inaccessible or not found" 的完整指南 #### 🔍 核心问题分析 当在 Android 系统中执行 `sh` 文件时出现 `inaccessible or not found` 错误,通常由以下原因导致: 1. **权限不足**:系统分区被锁定(常见于未 root 设备或 Android 10+)[^1] 2. **路径错误**:脚本未放置在可执行路径或权限受限目录 3. **动态分区限制**:Android 10+ 的 A/B 分区或 super 分区机制阻止写入[^1] 4. **验证机制拦截**:DM-verity 或 AVB 验证阻止系统修改[^1] --- ### ✅ 解决方案分步指南 #### 方案一:提权执行(需 root) ```bash # 1. 进入adb shell adb shell # 2. 获取root权限 su # 3. 重新挂载系统分区为可读写 mount -o rw,remount /system # 或 / 根分区 # 4. 复制脚本到系统路径 cp /sdcard/your_script.sh /system/xbin/ # 5. 添加执行权限 chmod 755 /system/xbin/your_script.sh # 6. 执行脚本 your_script.sh ``` > **注意**:若出现 `su: not found` 说明设备未 root[^2],请转用方案二 #### 方案二:非 root 替代方案(推荐) ```bash # 1. 将脚本放在用户可写目录 adb push your_script.sh /data/local/tmp/ # 2. 通过adb shell直接执行 adb shell sh /data/local/tmp/your_script.sh # 3. 或使用App级执行器(无需root) adb shell app_process -Djava.class.path=/your/script.jar / com.example.Main ``` #### 方案三:临时挂载技巧(Android 9-) ```bash # 1. 启用开发者选项中的"USB调试(安全设置)" # 2. 尝试临时remount adb root adb disable-verity # 关闭验证 adb reboot adb root adb remount ``` --- ### ⚠️ 关键注意事项 1. **分区保护机制**: - Android 10+ 需使用 `adb remount -R` 递归挂载[^1] - 华为/小米等厂商设备可能永久锁定 `/system` 2. **安全替代方案**: ```bash # 使用Shizuku授权(免root) adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/files/start.sh ``` - 通过 [Shizuku](https://shizuku.rikka.app/) 授权普通应用执行系统级操作 3. **环境检查命令**: ```bash adb shell mount | grep /system # 查看挂载状态 adb shell ls -l /system/bin/sh # 检查shell解释器 adb shell getprop ro.build.version.release # 查看Android版本 ``` --- ### 📱 不同 Android 版本的差异处理 | **Android 版本** | **解决方案重点** | 兼容性说明 | |------------------|----------------------------------|------------------------------| | Android 5-8 | 直接 `adb remount` | 传统分区结构,成功率较高 | | Android 9 | `adb disable-verity` + 重启 | 需关闭验证机制[^1] | | Android 10+ | 递归挂载 `adb remount -R` | 动态分区需特殊处理 | | EMUI/MIUI | 使用厂商专用ADB命令 | 部分功能需解锁BL | > **重要警告**:修改系统分区可能导致设备变砖,操作前请备份数据!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值