Exec format error 错误
背景
今天在调试20#设备时,无意中发现“reset”命令会出现“Segment Fault”错误。
使用“which reset”命令,发现此文件位于“/usr/bin/”下。
原本以为只是个普通的脚本,在没有仔细查看背景的情况下,就贸然使用了“nc”命令下载另一台设备上的“reset”到20#设备。却突然发现,在执行绝大多数命令时,都会出现“Exec format error”错误。
经过与另一台正常设备的比对,发现,其实这个“reset”就是指向了“busybox”。
而使用“nc”命令覆盖时,文件无法正常传输导致的异常!
现象
在执行“ls”、“which”、“nc”等命令时,会出现类似“-ash: ls: Exec format error”错误。
经过最终确认,有两条命令没有受到影响,一条是“wget”,另一条是“opkg”。
也幸亏没有着急重启设备,由于“ssh”连接还保持着,所以IP设置没有受到影响。
经过一番论证,可以使用“wget”下载包,使用“opkg”将“busybox”重新安装应该就能解决!
行动
去OpenWrt官网下载“busybox”包,这里需要注意选择合适的版本;
将下载的包放置到“http”服务根目录下;
使用未受影响的“wget”命令,将“busybox”包下载到“/tmp”文件夹下;
使用未受影响的“opkg”命令,将“busybox”包重新安装。
qige@ubuntu:~$ wget https://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/packages/base/busybox_1.24.2-1_ar71xx.ipk
qige@ubuntu:~$ mv busybox_1.24.2-1_ar71xx.ipk /var/www/html/
root@openwrt:~# wget http://192.168.1.3/busybox_1.24.2-1_ar71xx.ipk
root@openwrt:~# opkg install busybox_1.24.2-1_ar71xx.ipk
修复完成!